Lzufe-wln  

一.实验目的

    1.掌握软件开发的基本流程

    2.掌握常用的软件开发方式和工具

二.功能要求 

    实现一个具有登录页面的计算器功能。首先,用户要进行注册,输入正确的账号和姓名,则注册成功,注册完后跳转到登录页面,要是输入的不正确,则进行重新输入。登录不成功时,出现报错,提示哪里不合适;登录成功后,跳转入自己设计的计算器页面,计算器要能够计算出正确的答案。

三 .程序流程图的设计

   1. 注册流程图

                                            图(1)

 

 2.登录流程图

                                         图(2)

四 基本代码

  1.注册页面

package LogReg;
import javax.swing.JFrame;

import java.awt.FlowLayout;
import javax.swing.*;

public class register extends JFrame{
/**
* 王丽娜
*/
private static final long serialVersionUID = 1L;
JLabel accountLabel,nameLabel;
JButton okButton,resetButton;
JTextField accountText,nameText;
Box baseBox1,baseBox2, box1,box2,box3; //此注册页面采用Box布局方式;
//JPanel pane1,pane2;

register_db regist;

register(){
init();
}


void init(){
setLayout(new FlowLayout());
accountLabel = new JLabel("账号");
nameLabel= new JLabel("姓名");
accountText = new JTextField(10);
nameText = new JTextField(20);
okButton = new JButton("确定");
resetButton = new JButton("重置");

regist = new register_db();

// lab = new JLabel("用户注册页面");

box1 = Box.createVerticalBox();
box1.add(accountLabel);
box1.add(Box.createVerticalStrut(8));
box1.add(nameLabel);
box2 = Box.createVerticalBox();
box2.add(accountText);
box2.add(Box.createVerticalStrut(8));
box2.add(nameText);
box3 = Box.createHorizontalBox();
box3.add(okButton);
box3.add(Box.createHorizontalStrut(15));
box3.add(resetButton);
baseBox1 = Box.createHorizontalBox();
baseBox1.add(box1);
baseBox1.add(Box.createHorizontalStrut(8));
baseBox1.add(box2);
baseBox2 = Box.createVerticalBox();
baseBox2.add(baseBox1);
baseBox2.add(Box.createVerticalStrut(10));
baseBox2.add(box3);
add(baseBox2);

okButton.addActionListener(regist);
resetButton.addActionListener(regist);


regist.setaccountField(accountText);
regist.setnameField(nameText);
regist.setokButton(okButton);
regist.setresetButton(resetButton);

setBounds(200,200,400,300);
setVisible(true);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setTitle("用户注册界面");
}

                                   图(3)用户注册界面

package LogReg;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.swing.*;

public class register_db extends conn_db implements ActionListener{

JTextField textacc,textname;
JButton okButton,resetButton;
Statement stmt;
ResultSet rs;
// double acc;
// String name;
// Connection con = null;

public void setaccountField(JTextField a){
textacc = a;
}
public void setnameField(JTextField n){
textname = n;
}
public void setokButton(JButton b1){
okButton = b1;
}
public void setresetButton(JButton b2){
resetButton = b2;
}

public void actionPerformed(ActionEvent e){
if(e.getSource() == okButton){
if(textacc.getText().equals("")) //判断用户输入是否为空;
JOptionPane.showMessageDialog(null, "请输入账号","警告对话框",JOptionPane.WARNING_MESSAGE);
else if(textname.getText().equals(""))
JOptionPane.showMessageDialog(null,"请输入姓名","警告对话框",JOptionPane.WARNING_MESSAGE);
else{
String acc = textacc.getText();
String name = textname.getText();
try {
connection();
writeInSql(acc,name);
} catch (Exception e1) {
System.out.println("插入失败");
e1.printStackTrace();
}
}
}
else if(e.getSource() == resetButton){
textacc.setText("");
textname.setText("");
}
}

void writeInSql(String acc,String name) throws Exception{
String sql;

Connection con = super.con;
Statement stmt = con.createStatement();

//创建并检查数据库表,若没有"my"表,则创建表并执行插入操作,若表已存在,则直接执行操作,插入数据
sql = "create table if not exists my(account varchar(10),name varchar(20))";

stmt.executeUpdate(sql);
// System.out.println(Sequel); //查错;
System.out.println("创建表成功");

//插入存文本框中获取的数据;
sql = "insert into my(account,name) values('"+acc+"','"+name+"')";
int rw = stmt.executeUpdate(sql);
// System.out.println(Sequel);
if(rw <= 0){ //判断数据是否插入成功
JOptionPane.showMessageDialog(null,"注册失败");
}
else{
JOptionPane.showMessageDialog(null, "注册成功");
}
}
}

     

                                                                                     图(4)       注册成功

                                                 图(5)      注册失败


2.登录页面

package LogReg;


import java.awt.FlowLayout;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.*;

@SuppressWarnings({ "unused", "serial" })
public class login extends JFrame{
//JLabel accountL,nameL;
JTextField accountT,nameT;
JButton okB,registB;
Box baseB1,baseB2,box1,box2,box3; //此登录页面采用Box布局方式;
login_db log;
JFrame frame;
public login(){
init();
}
void init(){
log = new login_db(); //new一个login_db对象,方便调用addActionListener函数。

accountT = new JTextField(10);
nameT = new JTextField(20);
okB = new JButton("登录");
registB = new JButton("注册");

box1 = Box.createVerticalBox();
box1.add(new JLabel("账号:"));
box1.add(Box.createVerticalStrut(8));
box1.add(new JLabel("姓名"));

box2 = Box.createVerticalBox();
box2.add(accountT);
box2.add(Box.createVerticalStrut(8));
box2.add(nameT);

box3 = Box.createHorizontalBox();
box3.add(okB);
box3.add(Box.createHorizontalStrut(20));
box3.add(registB);

baseB1 = Box.createHorizontalBox();
baseB1.add(box1);
baseB1.add(Box.createHorizontalStrut(8));
baseB1.add(box2);

baseB2 = Box.createVerticalBox();
baseB2.add(baseB1);
baseB2.add(Box.createVerticalStrut(10));
baseB2.add(box3);

okB.addActionListener(log);//方法调用,连接到登录的界面
registB.addActionListener(log); //log是login_db的对象,如何调用addActionListener的方法?其login_db中存在register

log.setaccountT(accountT); //???
log.setnameT(nameT);
log.setButton(okB,registB);

this.add(baseB2);
setLayout(new FlowLayout());
setBounds(200,150,400,300);
setVisible(true);
setTitle("用户登录界面");
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
log.Frame(this);
}

public static void main(String[] args) {
@SuppressWarnings("unused")
login lo = new login();
}
}

                    

                                                                                图(6) 登录界面

package LogReg;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.swing.*;
import javax.swing.JFrame;
import Calculator.Calculator;

public class login_db extends conn_db implements ActionListener {
JTextField accT,nameT;
JButton okB,registB;
register re;
ResultSet rs;
JFrame f;

public void setaccountT(JTextField a){
accT = a;
}
public void setnameT(JTextField n){
nameT = n;
}
public void setButton(JButton b1,JButton b2){
okB = b1;
registB = b2;
}
public void Frame(JFrame jf){
f=jf;
}
public void actionPerformed(ActionEvent e){
if(e.getSource() == okB){
if(accT.getText().equals("")) //判断用户输入是否为空;
JOptionPane.showMessageDialog(null, "请填写账号!");
else if(nameT.getText().equals(""))
JOptionPane.showMessageDialog(null, "请输入姓名");
else{
String accountT = accT.getText();
String namesT = nameT.getText();
try {
connection(); //加载conn_db类,连接数据库;
boolean com = compareWithSql(accountT,namesT);
if(com) {
new Calculator();
new JFrame().dispose();//???
f.setVisible(false);
}
else{
JOptionPane.showMessageDialog(null, "账号或姓名不正确,请重新输入");
accT.setText("");
nameT.setText("");
}
}
catch (Exception e1) {
e1.printStackTrace();
}
}
}
else if(e.getSource() == registB){
new JFrame().dispose();//???
f.setVisible(false);
re = new register();
}
}

//用户输入检查
boolean compareWithSql(String accountT,String namesT) throws Exception{
String sql;
Connection con = super.con;
Statement stmt = con.createStatement();
sql = "select * from my";
// System.out.println(sql);
rs = stmt.executeQuery(sql);
while(rs.next()){ //用户输入的信息和数据库中的信息做比较,判断输入是否正确;
String acc = rs.getString(1);
String names = rs.getString(2);
if(acc.equals(accountT) && names.equals(namesT)){
//break;
return true;
}
// System.out.println(acc + " " + names);
// System.out.println(accountT + " " + namesT);

}
// System.out.println("hahahaha");
return false;

}

}

                                                                        图(7)登录出错

 

 

3 计算器的实现

package Calculator;


import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;

import LogReg.login;

public class Calculator {

String str1 = "";
String str2 = "";
String result = "";
String signal = "+";
int k1 = 1;
int k2 = 1;
int k3 = 1;
int k4 = 1;
int k5 = 1;
JButton store;
@SuppressWarnings("rawtypes")
Vector vt = new Vector(30,20);

JFrame frame = new JFrame("Calculator");
JTextField result_TestField = new JTextField(result, 20);

JButton button0 = new JButton("0");
JButton button1 = new JButton("1");
JButton button2 = new JButton("2");
JButton button3 = new JButton("3");
JButton button4 = new JButton("4");
JButton button5 = new JButton("5");
JButton button6 = new JButton("6");
JButton button7 = new JButton("7");
JButton button8 = new JButton("8");
JButton button9 = new JButton("9");

JButton button_clear = new JButton("清除");
JButton button_exit = new JButton(" 退出登陆");

JButton button_jia = new JButton("+");
JButton button_jian = new JButton("-");
JButton button_cheng = new JButton("*");
JButton button_chu = new JButton("/");
JButton button_dy = new JButton("=");
JButton button_dian = new JButton(".");

public Calculator(){

button0.setMnemonic(KeyEvent.VK_0);
button1.setMnemonic(KeyEvent.VK_1);
button2.setMnemonic(KeyEvent.VK_2);
button3.setMnemonic(KeyEvent.VK_3);
button4.setMnemonic(KeyEvent.VK_4);
button5.setMnemonic(KeyEvent.VK_5);
button6.setMnemonic(KeyEvent.VK_6);
button7.setMnemonic(KeyEvent.VK_7);
button8.setMnemonic(KeyEvent.VK_8);
button9.setMnemonic(KeyEvent.VK_9);

result_TestField.setHorizontalAlignment(JTextField.RIGHT);

JPanel pan = new JPanel();
pan.setLayout(new GridLayout(4,4,5,5));
pan.add(button1);
pan.add(button2);
pan.add(button3);
pan.add(button_jia);
pan.add(button4);
pan.add(button5);
pan.add(button6);
pan.add(button_jian);
pan.add(button7);
pan.add(button8);
pan.add(button9);
pan.add(button_cheng);
pan.add(button0);
pan.add(button_dian);
pan.add(button_dy);
pan.add(button_chu);
pan.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));

JPanel pan2 = new JPanel();
pan2.setLayout(new BorderLayout());
pan2.add(button_exit,BorderLayout.WEST);
pan2.add(button_clear,BorderLayout.EAST);

frame.setLocation(300, 200);
frame.setResizable(false);
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(result_TestField, BorderLayout.NORTH);
frame.getContentPane().add(pan, BorderLayout.CENTER);
frame.getContentPane().add(pan2, BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);

// ּ

@SuppressWarnings("unused")
class Listener implements ActionListener{

@SuppressWarnings("unchecked")
@Override
public void actionPerformed(ActionEvent e) {
String ss = ((JButton)e.getSource()).getText();// ȡ ְ ť
store = (JButton)e.getSource();
vt.add(store);
if(k1 == 1){
if(k3 == 1){
str1 = "";
k5 = 1;
}
str1 = str1 + ss;
k3 = k3 + 1;
result_TestField.setText(str1);

}else if(k1 == 2){
if(k4 == 1){
str2 = "";
k5 = 1;
}
str2 = str2 + ss;
result_TestField.setText(str2);
}
}

}

@SuppressWarnings("unused")
//

class Listener_ys implements ActionListener{

@SuppressWarnings("unchecked")
@Override
public void actionPerformed(ActionEvent e) {
String ss = ((JButton)e.getSource()).getText();
store = (JButton) e.getSource();
vt.add(store);
if(k2 == 1){
k1 = 2;
k5 = 1;
signal = ss;
k2 = k2 + 1;
}else {
int a = vt.size();
JButton c = (JButton) vt.get(a-2);
if(!(c.getText().equals("+")) &&
!(c.getText().equals("-")) &&
!(c.getText().equals("*")) &&
!(c.getText().equals("/"))){
cal();
str1 = result;
k1 = 2;
k5 = 1;
k4 = 1;
signal = ss;
}
}
k2 = k2 + 1;
}
}

// ڷ ŵļ

@SuppressWarnings("unused")
class Listener_dy implements ActionListener{

@SuppressWarnings("unchecked")
@Override
public void actionPerformed(ActionEvent e) {
store = (JButton) e.getSource();
vt.add(store);
cal();
k1 = 1;
k2 = 1;
k3 = 1;
k4 = 1;
str1 = result;
// result_TestField.setText(str1);
}
}

// ļ
@SuppressWarnings("unused")
class Listener_c implements ActionListener{

@SuppressWarnings("unchecked")
@Override
public void actionPerformed(ActionEvent e) {
store = (JButton) e.getSource();
vt.add(store);
k1 = 1;
k2 = 1;
k3 = 1;
k4 = 1;
k5 = 1;
str1 = "0";
str2 = "0";
signal = "";
result = "";
result_TestField.setText(result);
vt.clear();
}

}

//exit ļ
@SuppressWarnings("unused")
class Listener_e implements ActionListener{

@SuppressWarnings("unchecked")
@Override
public void actionPerformed(ActionEvent e) {
login log = new login();
frame.setVisible(false);
}

}

@SuppressWarnings("unused")
//С

class Listener_dian implements ActionListener{

@SuppressWarnings("unchecked")
@Override
public void actionPerformed(ActionEvent e) {
store = (JButton) e.getSource();
vt.add(store);
if(k5 == 1){
String ss = ((JButton) e.getSource()).getText();
if(k1 == 1){
if(k3 == 1){
str1 = "";
k5 = 1;
}
str1 = str1 + ss;
k3 = k3 + 1;
result_TestField.setText(str1);
}else if(k1 == 2){
if(k4 == 1){
str2 = "";
k5 = 1;
}
str2 = str2 + ss;
k4 = k4 + 1;
result_TestField.setText(str2);
}
}
k5 = k5 + 1;
}

}


//ע
Listener listener_js = new Listener();
Listener_c listener_c = new Listener_c();
Listener_e listener_e = new Listener_e();
Listener_dian listener_dian = new Listener_dian();
Listener_dy listener_dy = new Listener_dy();
Listener_ys listener_ys = new Listener_ys();
button7.addActionListener(listener_js);
button8.addActionListener(listener_js);
button9.addActionListener(listener_js);
button4.addActionListener(listener_js);
button5.addActionListener(listener_js);
button6.addActionListener(listener_js);
button1.addActionListener(listener_js);
button2.addActionListener(listener_js);
button3.addActionListener(listener_js);
button0.addActionListener(listener_js);
button_jia.addActionListener(listener_ys);
button_jian.addActionListener(listener_ys);
button_cheng.addActionListener(listener_ys);
button_chu.addActionListener(listener_ys);
button_dy.addActionListener(listener_dy);
button_dian.addActionListener(listener_dian);
button_clear.addActionListener(listener_c);
button_exit.addActionListener(listener_e);
frame.addWindowListener(new WindowAdapter() {

@Override
public void windowClosing(WindowEvent arg0) {
System.exit(0);
}


});
}

public void cal(){
double b1 ;
double b2 ;
String c = signal;
double result2 = 0;
if(c.equals("")){
result_TestField.setText("wrong number");
}else{
if(str1.equals(".")){
str1 = "0.0";
}
if(str2.equals(".")){
str2 = "0.0";
}
b1 = Double.valueOf(str1).doubleValue();
b2 = Double.valueOf(str2).doubleValue();
if(c.equals("+")){
result2 = b1 + b2 ;
}
if(c.equals("-")){
result2 = b1 - b2;
}
if(c.equals("*")){
result2 = b1 * b2;
}
if(c.equals("/")){
if(b2 == 0){
result2 = 0;
}else{
result2 = b1 / b2;
}
}
result = (new Double(result2)).toString();
result_TestField.setText(result);
}

}

public static void main(String[] args) {

try{
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
}catch(Exception e){
e.printStackTrace();
}
@SuppressWarnings("unused")
Calculator calculator = new Calculator();
}

}

五  实验结果  

                       图(8)

                       图(9)

posted on 2023-12-04 15:43  二零零二年夏  阅读(20)  评论(0编辑  收藏  举报