Java编写ATM机模拟系统(连接数据库)

本篇是完整代码,我还上传了资源,资源里有完整的代码和数据库驱动,可以直接下载使用

初学java,在代码上的理解不够,写出的代码极为冗长,有不少的缺陷,等日后慢慢完善,若是有好的建议,请与我分享
一、工作任务
输入给定的卡号和密码(初始卡号为62250028和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行操作:
1、查询余额:初始余额为10000元;
2、ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支;
3、ATM存款:不能出现负存款;
4、修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码;
5、采用数据库存储数据,可以实现 GUI界面,也可以实现功能,结果打印到控制台上。
二、系统设计
1.连接数据库类(其他类想连接数据库,直接调用这个类即可)

package ATM;
//此类的功能是连接数据库
import java.sql.Connection;
import java.sql.DriverManager;

//连接数据库
public class GetDBConnection {
	//DBName:数据库名 ,id : 用户名(root)password:数据库密码
	public static Connection ConnectDB(String DBName,String id,String password) {
		Connection con = null;
		String uri="jdbc:mysql://127.0.0.1:3306/"+DBName+"?useSSL=true&characterEncoding=utf-8";
		try {
			Class.forName("com.mysql.jdbc.Driver");//加载驱动
		} catch (Exception e) {}
				
		try {
			con = DriverManager.getConnection(uri,id,password);//连接
		} catch (Exception e) {}
		
		return con;
	}
}

2、方法类(查询,存款,取款,改密码等方法都写在这个类中,是整篇代码的核心。其他类只是设计页面,想完成功能都需要调用这个类中的代码)

package ATM;
//此页是基本方法页,所有的方法都放在本页,其他类通过调用本页方法来实现功能
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

//atm的增删改查
public class Basic_operation{
	//以下三个接数据库增删改查所用的变量
	public String sql;
	public PreparedStatement ps;
	public static Connection con;
	
	public static String cardID="";//用户卡号
	public static String password="123456";//用户登陆密码(默认为123456)
	
	public static String password2="";//新密码(修改密码)
	public static String password3="";//确认新密码(修改密码)
	
	public static String balanceFixed ="0";//盛放余额的变量
	public String s="";//接收各个方法返回值的变量
	
	//构造方法
	Basic_operation() {
		//连接数据库
		con = GetDBConnection.ConnectDB("atmBankDatabase", "root", "");
		if(con == null) {
			System.out.println("数据库连接失败");
			return;
		}
		sql="select balance from account where id=?;";
		try {
			
			ps=con.prepareStatement(sql);
			ps.setString(1, cardID);
			ResultSet rs =ps.executeQuery();//向数据库发送数据查询语句
			while(rs.next()) {
				balanceFixed = rs.getString("balance");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
	}
	
	//数据库的增删改查都是固定的操作
	//1.查余额
	public String select(String cardID) throws SQLException {
		String 
		sql="select balance from account where id=?;";
		ps=con.prepareStatement(sql);
		ps.setString(1, cardID);
		ResultSet rs =ps.executeQuery();//向数据库发送数据查询语句
		while(rs.next()) {
			balanceFixed = rs.getString("balance"); 
		}
		double balance_number = Double.parseDouble(balanceFixed); 
		System.out.println("当前账户余额:"+balance_number);
		balanceFixed = String.valueOf(balance_number);
		s="当前账户余额:"+balanceFixed;
		return s;
	}
	

	//2.取款
	public String Withdrawal(String cardID,String take_money2) {
		//take_money要取的钱数
		boolean isNum = take_money2.matches("[0-9]+");
		if(isNum) {
			double take_money = Double.parseDouble(take_money2);
			if(take_money<=5000) {
				if(take_money%100 == 0) {
					try {
						//balance_number:数字格式的余额,用于和将要取的金额做比较
						double balance_number = Double.parseDouble(balanceFixed);
						if(take_money<=balance_number) {
							sql="update account set balance=?-? where id=?;";
							ps=con.prepareStatement(sql);
							ps.setDouble(1, balance_number);//余额
							ps.setDouble(2, take_money);//要取的金额
							ps.setString(3, cardID);
							ps.executeUpdate();//注意这个executeUpdate,和查询的不一样
							balance_number=balance_number-take_money;
							balanceFixed=String.valueOf(balance_number);
							System.out.println("取款成功,当前余额为:"+balanceFixed);
							s="取款成功,当前余额为:"+balanceFixed;
						}else {
							System.out.println("余额不足,请重新输入");
							s="余额不足,请重新输入";
							//Withdrawal(cardID,take_money);
						}
					} catch (SQLException e) {
						System.out.println("取款出错");
						s="取款出错";
					}
				}else {
					System.out.println("取款金额必须是100的整数倍,请重新输入");
					s="取款金额必须是100的整数倍,请重新输入";
				}
				
			}else {
				System.out.println("单次取款金额不得超过5000,请重新输入");
				s="单次取款金额不得超过5000,请重新输入";
			}
		}else {
			s="取款失败,您的输入为非数字";
			System.out.println("取款失败,您的输入为非数字");
		}
		
		
		return s;
	}
	
	//3.存款
	public String deposit(String cardID,String m) {
	//用正则表达式来限制输入,确保输入是字母时不会运行异常
		boolean isNum = m.matches("[0-9]+");
		if(isNum) {
			double add_money2 = Double.parseDouble(m);
			if(add_money2>0) {
				if(add_money2%100 == 0) {
					try {
						//balance_number:数字格式的余额,用于和将要取的金额做比较
						double balance_number = Double.parseDouble(balanceFixed);
			
							sql="update account set balance=?+? where id=?;";
							ps=con.prepareStatement(sql);
							ps.setDouble(1, balance_number);//余额
							ps.setDouble(2, add_money2);//要存的金额
							ps.setString(3, cardID);
							ps.executeUpdate();
							balance_number=balance_number+add_money2;
							balanceFixed=String.valueOf(balance_number);
							s="存款成功 当前余额为:"+balanceFixed;
							System.out.println("存款成功");
							System.out.println("当前余额为:"+balanceFixed);

					} catch (SQLException e) {
						System.out.println("存款出错");	
					}
				}else {
					s="存款金额必须是100的整数倍,请重新输入";
					System.out.println("存款金额必须是100的整数倍,请重新输入");
				}
			}else {
				s="不得输入负数,请重新输入";
				System.out.println("不得输入负数,请重新输入");
			}
		}else {
			s="存款失败,您的输入为非数字";
			System.out.println("存款失败,您的输入为非数字");
		}
		return s;
	}
	//4.修改密码
	public String changePassword(String cardID,String password,String password2,String password3) {
		String yuanPassword="";//原密码
		sql="select apassword from account where id=?;";
		try {
			ps=con.prepareStatement(sql);
			ps.setString(1, cardID);
			ResultSet rs =ps.executeQuery();//向数据库发送数据查询语句
			while(rs.next()) {
				yuanPassword=rs.getString("apassword");
			}
			
			if(yuanPassword.equals(password)) {
				if(password2.length()>=6) {
					char[] a = password2.toCharArray();
					if(a[0]==a[1]&&a[1]==a[2]&&a[2]==a[3]&&a[3]==a[4]&&a[4]==a[5]) {
						System.out.println("不可以设置全部数字相同的密码");
						s="不可以设置全部数字相同的密码";
					}else {
						if(password2.equals(password3)) {
							sql="update account set apassword=? where id=?;";
							ps = con.prepareStatement(sql);
							ps.setString(1, password2);
							ps.setString(2, cardID);
							ps.executeUpdate();
							System.out.println("密码修改成功");
							s="密码修改成功";
						}else {
							System.out.println("两次密码不相同,请重新输入");
							s="两次密码不相同,请重新输入";
						}
					}
				}else {
					System.out.println("修改失败,密码长度不可小于6位");
					s="修改失败,密码长度不可小于6位";
				}
			}else {
				System.out.println("原密码错误,请重新输入");
				s="原密码错误,请重新输入";
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return s;
	}
	
	//5.登陆
	public String jlogin(String cardID,String password) {
		String newCardID="0";
		String newPassword="0";
		sql="select id,apassword from account where id=?;";
		try {
			ps=con.prepareStatement(sql);
			ps.setString(1, cardID);
			ResultSet rs =ps.executeQuery();//向数据库发送数据查询语句
				while(rs.next()) {
					newCardID= rs.getString("id"); 
					newPassword=rs.getString("apassword");
				}
			if(cardID.equals(newCardID) && password.equals(newPassword)) {
				System.out.println("登陆成功");
				s = "登陆成功";
			    this.cardID=cardID;//使另一个类可以调用这个cardID
				
			}else {
				System.out.println("用户名或密码不正确,请重新输入");
				s="用户名或密码不正确,请重新输入";
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return s;
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Basic_operation a = new Basic_operation();
	}

}

3.登陆页面(程序必须在此页开始运行)
这个账号输入有缺陷,只能输入8位的数字账号,第9位会自动进入到密码输入的那一行(我的知识有限,只能这么做了),要是账号是其他位数的,只能修改代码了
用了3个面板,
登陆页面

package ATM;
//此页是登陆界面
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

//登陆界面设置三个画板,一个用来放置账户和密码文本框,另一个用来放置数字键盘,另一个用来放置文本域
public class OpenLogin extends JFrame implements ActionListener{
	Basic_operation basi = new Basic_operation();//调用Basic_operation类中写好的方法
	JFrame frame;
	JPanel p,p2,p3;//三个画板
	//panel面板中内容
	JTextField jtext = new JTextField(20);//文本框
	JPasswordField jpass = new JPasswordField(20);//密码框
	JButton b=new JButton("登陆");
	JButton b2=new JButton("退出");
	//panel2面板中内容
	JButton bt[] =new JButton[14];
	//panel3面板中内容
	JTextArea jtarea = new JTextArea("           欢迎来到建设银行!           ",6,40);//文本域
	
	public OpenLogin() {
		open_login();
	}
	
	public void open_login() {
		frame = new JFrame();
		setTitle("ATM登陆界面");
		
		//盒式布局
		Box boxHP = Box.createHorizontalBox();
		Box boxHP2 = Box.createHorizontalBox();
		Box boxVP = Box.createVerticalBox();
		//1.创建一个JPanel对象,里面存放一个JTextField和JPasswordField组件
			p = new JPanel(new GridLayout(5,3,0,15));
			init();
		//2.创建一个panel对象p2,并且设置它的布局管理器为GridLayout
			p2 = new JPanel();
			init2();
		//向panel3面板中添加文本域	
			p3 = new JPanel(new GridLayout(1,1,10,10));
			init3();
		//3.把panel和panel2添加到frame中
			boxHP.add(p);
			boxHP.add(p2);
			boxHP2.add(p3);
			boxVP.add(boxHP);
			boxVP.add(boxHP2);
			add(boxVP);

		//设置windowListener,监听用户点击x的动作,若点击x,则关闭窗口
			setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		//设置最佳大小,pack方法
		//pack()使setBounds(x, y, width, height);失灵
			pack();
			setVisible(true);//设置可见
	}

	void init() {
		Box boxH,boxH2;//水平
		boxH = Box.createHorizontalBox();
		boxH2 = Box.createHorizontalBox();
		
		boxH.add(new JLabel("账号:"));
		boxH.add(jtext);
		boxH2.add(new JLabel("密码:"));
		boxH2.add(jpass);
		
		p.setBorder(BorderFactory.createTitledBorder("登陆区域:"));
		p.add(new JLabel("请在确定周围环境安全的前提下操作:"));
		p.add(boxH);
		p.add(boxH2);
		p.add(b);
		p.add(b2);
	}
	
	void init2() {
		p2.setBorder(BorderFactory.createTitledBorder("数字键盘:")); 
		p2.setLayout(new GridLayout(4,3,7,7));//4行3列
		//4.往panel2中添加内容
		for(int i=1;i<13;i++) {
			 String jbutton=String.valueOf(i);
			 bt[i]=new JButton(jbutton);
			 if(i==10||i==11||i==12) {
				if(i==10) {
					p2.add(bt[i]);
					bt[i].setText("更正");
					bt[i].setBackground(Color.ORANGE);//设置按钮的背景颜色为橙色
				}
				if(i==11) {
					p2.add(bt[i]);
					bt[i].setText("0");
				}
				if(i==12) {
					p2.add(bt[i]);
					bt[i].setText("退格");
					bt[i].setForeground(Color.red);
				}
			}else{
					p2.add(bt[i]);
			}
		 }
	}
	void init3() {
		p3.setBorder(BorderFactory.createTitledBorder("提示信息:")); 
		jtarea.setForeground(Color.blue);
		jtarea.setFont(new Font("宋体",Font.BOLD,20));
		//jtarea.setAlignmentX(CENTER_ALIGNMENT);
		jtarea.setEditable(false);//使文本域不可被操作
		jtarea.setLineWrap(true);//一行的内容大于文本框的长度就自动换行
		p3.add(new JScrollPane(jtarea));//添加带滚动条的文本框
		
		//调用监听的方法
		setMyCommandListener();
	}
	
	public void setMyCommandListener() {
		//注册监听
		b.addActionListener(this);//登陆按钮
		b2.addActionListener(this);//退出按钮
		for(int i=1;i<13;i++) {
			bt[i].addActionListener(this);
		}
	}

		@Override
		public void actionPerformed(ActionEvent e) {
			String s="";
			String s2="";
			String mi="";
			String com="";
			com = e.getActionCommand();
			//日期
			Date date=new Date();
			String ktime=String.format("%tY年%<tm月%<td日%<ta%<tI:%<tM:%<tS:",date);
			
			if(jtext.getText().length()!=8) {
				for(int i=0;i<=9;i++) {
					String num = String.valueOf(i);
					if(com.equals(num)) {
						s2=jtext.getText()+com;
						jtext.setText(s2); 
					}
				}
				if(com.equals("退格")) {
					s2=jtext.getText();
		            if(s2.length()>0)
		            	jtext.setText(s2.substring(0,s2.length()-1));
				}
				if(com.equals("更正")) {
					s2="";
					jtext.setText(s2);
				}
				jtext.requestFocus();//使光标一直保持在文本框中
			}else{
				for(int i=0;i<=9;i++) {
					String num = String.valueOf(i);
					if(com.equals(num)) {
						mi=jpass.getText()+com;
						jpass.setText(mi);
					}
				}
				if(com.equals("退格")) {
					mi=jpass.getText();
		            if(mi.length()>0)
		            	jpass.setText(mi.substring(0,mi.length()-1));
		            else {
		            	s=jtext.getText();
			            if(s.length()>0)
			                jtext.setText(s.substring(0,s.length()-1));
		            }
				}
				if(com.equals("更正")) {
					mi="";
					jpass.setText(mi);
				}	
				jpass.requestFocus();//使光标一直保持在密码框之中
			}
			if(com.equals("登陆")) {
				s=basi.jlogin(jtext.getText(),jpass.getText());
				if(s.equals("登陆成功")) {
					jtarea.append("\n"+ktime+s);
					//打开另一个页面并关闭当前页面
					new All();
					dispose();
				}else {
					jtarea.append("\n"+ktime+"登陆失败");
					JOptionPane.showMessageDialog(b,"用户名或密码不正确,请重新输入","消息提示框",JOptionPane.WARNING_MESSAGE);
				}
			}
			if(e.getSource()==b2){
				//点击退出按钮,则关闭页面
				dispose();
			}
		}		
	
	public static void main(String[] args) {
		OpenLogin alogin = new OpenLogin();
	}
}

4.功能选择页面
此页面的返回会回到登陆页面
用了两个面板,两行文字是一个,底下的按钮是另一个
功能选择页面

package ATM;
//这个页面是综合页面
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class All extends JFrame implements ActionListener{
	Basic_operation basi2 = new Basic_operation();//调用Basic_operation类中写好的方法
	JFrame jframe = new JFrame();
	JPanel p,p2;
	//****************功能页面*************************
	JLabel jn_labal;
	JLabel jn_labal2;
	JButton jn_deposit = new JButton("存款deposit");//存款
	JButton jn_cash = new JButton("取款cash");//取款
	JButton jn_pin = new JButton("改密pin        ");//改密
	JButton jn_exit = new JButton("取卡exit");//退出
	
	JTextArea jarea2 = new JTextArea();
	
	public All() {
		try {
			String s = basi2.select(basi2.cardID);
			jarea2.append("\n"+"\n"+"\t"+"\t"+s+"\t"+"\t"+"\n"+"\n");
			jall();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void jall(){
	//p是功能页面
		p = new JPanel();
		jnjt();
	//p2是查询界面
		p2 = new JPanel();
		jnjt2();

		Box BoxV = Box.createVerticalBox();
		BoxV.add(p);
		BoxV.add(p2);
		
		add(BoxV);
		
		//注册监听
		jn_deposit.addActionListener(this);
		jn_cash.addActionListener(this);
		jn_pin.addActionListener(this);
		jn_exit.addActionListener(this);
		
	//设置windowListener,监听用户点击x的动作,若点击x,则关闭窗口
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
	//设置最佳大小,pack方法
		pack();
		setVisible(true);//设置可见
	}
	
	public void jnjt() {
		p.setLayout(new GridLayout(2,1));//2行1列
		setTitle("功能选择界面");
		setLayout(new FlowLayout());//设置流式布局
		jn_labal = new JLabel("              请选择服务类型");
		jn_labal2 = new JLabel("建设银行");
		jn_labal2.setFont(new Font("宋体",Font.BOLD,30));
		jn_labal.setForeground(new Color(30, 144, 255));
		jn_labal.setFont(new Font("宋体",Font.BOLD,20));
		jn_labal2.setForeground(new Color(0, 255,255));
		p.add(jn_labal2);
		p.add(jn_labal);
		
	}
	private void jnjt2() {
		// TODO Auto-generated method stub
		p2.setLayout(new GridLayout(3,3));//4行3列
		
		//布局
		Box boxH,boxH2,boxH3;//水平
		boxH = Box.createHorizontalBox();
		boxH2 = Box.createHorizontalBox();
		boxH3 = Box.createHorizontalBox();
		
		boxH.add(jn_cash);
		boxH.add(Box.createHorizontalStrut(260));
		boxH.add(jn_deposit);
		//设置文本域的属性
		jarea2.setForeground(new Color(255, 255, 255));
		jarea2.setBackground(new Color(30, 144, 255));
		jarea2.setFont(new Font("宋体",Font.BOLD,15));
		jarea2.setEditable(false);//使文本域不可被操作
		boxH2.add(jarea2);
		boxH3.add(jn_exit);
		boxH3.add(Box.createHorizontalStrut(260));
		boxH3.add(jn_pin);
		jn_exit.setBackground(new Color(227, 23, 13));//设置按钮的背景颜色为红色
		p2.add(boxH);
		p2.add(boxH2);
		p2.add(boxH3);
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if(e.getSource()==jn_cash) {
			new Cash();//打开取款页面
			dispose();
		}
		if(e.getSource()==jn_deposit) {
			new Deposit();//打开存款页面
			dispose();
		}
		if(e.getSource()==jn_pin) {
			new Pin();//打开改密类
			dispose();
		}
		if(e.getSource()==jn_exit) {
			new OpenLogin();//退卡之后打开登陆类
			dispose();
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		All a = new All();
	}
}

5.取款页面(可以在文本框内输入自定义的金额)
此页面的返回会回到功能选择页面
取款页面

package ATM;
//这个是取款页面
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Cash extends JFrame implements ActionListener{
	Basic_operation basi2 = new Basic_operation();//调用Basic_operation类中写好的方法
	JFrame jframe = new JFrame();
	JPanel jp = new JPanel();
	JLabel lable = new JLabel("            请输入取款金额");
	JTextField textf = new JTextField();//文本框
	JButton button = new JButton("返回     ");
	JButton button2 = new JButton("100元   ");
	JButton button3 = new JButton("500元  ");
	JButton button4 = new JButton("1000元");
	JButton button5 = new JButton("3000元");
	JButton button6 = new JButton("5000元");
	JButton button7 = new JButton("更正     ");
	JButton button8 = new JButton("确认     ");
	public Cash() {
		//构造方法
		setTitle("取款界面");
		//******************************************************
		//为页面布局
		jp_one();
		add(jp);
		//******************************************************
		//设置windowListener,监听用户点击x的动作,若点击x,则关闭窗口
		    setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		//设置最佳大小,pack方法
		    pack();
			setVisible(true);//设置可见
	}
	public void jp_one() {
		// TODO Auto-generated method stub
		jp.setLayout(new BorderLayout());
		lable.setFont(new Font("宋体",Font.BOLD,20));
		textf.setBounds(150, 50, 110, 40);
		add(textf);
		//以下是按钮
		Box BoxV = Box.createVerticalBox(); 
		
		Box BoxH = Box.createHorizontalBox();
		BoxH.add(Box.createVerticalStrut(50));
		Box BoxH2 = Box.createHorizontalBox();
		BoxH2.add(Box.createVerticalStrut(50));
		Box BoxH3 = Box.createHorizontalBox();
		BoxH3.add(Box.createVerticalStrut(50));
		Box BoxH4 = Box.createHorizontalBox();
		BoxH4.add(Box.createVerticalStrut(50));
		
		BoxH.add(button);
		BoxH.add(Box.createHorizontalStrut(260));
		BoxH.add(button5);
		
		BoxH2.add(button2);
		BoxH2.add(Box.createHorizontalStrut(260));
		BoxH2.add(button6);
		
		BoxH3.add(button3);
		BoxH3.add(Box.createHorizontalStrut(260));
		BoxH3.add(button7);
		
		BoxH4.add(button4);
		BoxH4.add(Box.createHorizontalStrut(260));
		BoxH4.add(button8);

		BoxV.add(BoxH);
		BoxV.add(BoxH2);
		BoxV.add(BoxH3);
		BoxV.add(BoxH4);
		jp.add(lable,BorderLayout.NORTH);
		jp.add(BoxV);
		
		//注册监听
		button.addActionListener(this);
		button2.addActionListener(this);
		button3.addActionListener(this);
		button4.addActionListener(this);
		button5.addActionListener(this);
		button6.addActionListener(this);
		button7.addActionListener(this);
		button8.addActionListener(this);
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		String number = textf.getText();
		if(e.getSource()==button) {
			new All();
			dispose();
		}
		if(e.getSource()==button2) {
			textf.setText("100");
			//basi2.Withdrawal(basi2.cardID, "100");
		}
		if(e.getSource()==button3) {
			textf.setText("500");
			//basi2.Withdrawal(basi2.cardID, "100");
		}
		if(e.getSource()==button4) {
			textf.setText("1000");
			//basi2.Withdrawal(basi2.cardID, "100");
		}
		if(e.getSource()==button5) {
			textf.setText("3000");
			//basi2.Withdrawal(basi2.cardID, "100");
		}
		if(e.getSource()==button6) {
			textf.setText("5000");
			//basi2.Withdrawal(basi2.cardID, "100");
		}
		if(e.getSource()==button7) {
			//更正
			textf.setText("");
		}
		if(e.getSource()==button8) {
			String s = basi2.Withdrawal(basi2.cardID, number);
			JOptionPane.showMessageDialog(button8,s,"消息提示框",JOptionPane.WARNING_MESSAGE);
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Cash a = new Cash();
	}
}

6.存款页面(和取款代码页面基本相同,有点细小的差异)
此页面的返回会回到功能选择页面
存款页面

package ATM;
//这个是存款页面
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Deposit extends JFrame implements ActionListener{
	Basic_operation basi2 = new Basic_operation();//调用Basic_operation类中写好的方法
	JFrame jframe = new JFrame();
	JPanel jp = new JPanel();
	JLabel lable = new JLabel("            请输入存款金额");
	JTextField textf = new JTextField();//文本框
	JButton button = new JButton("返回     ");
	JButton button2 = new JButton("100元   ");
	JButton button3 = new JButton("500元  ");
	JButton button4 = new JButton("1000元");
	JButton button5 = new JButton("3000元");
	JButton button6 = new JButton("5000元");
	JButton button7 = new JButton("更正     ");
	JButton button8 = new JButton("确认     ");
	public Deposit() {
		//构造方法
		setTitle("存款界面");
		//******************************************************
		//为页面布局
		jp_one();
		add(jp);
		//******************************************************
		//设置windowListener,监听用户点击x的动作,若点击x,则关闭窗口
		    setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		//设置最佳大小,pack方法
		    pack();
			setVisible(true);//设置可见
	}
	public void jp_one() {
		// TODO Auto-generated method stub
		jp.setLayout(new BorderLayout());
		lable.setFont(new Font("宋体",Font.BOLD,20));
		textf.setBounds(150, 50, 110, 40);
		add(textf);
		//以下是按钮
		Box BoxV = Box.createVerticalBox(); 
		
		Box BoxH = Box.createHorizontalBox();
		BoxH.add(Box.createVerticalStrut(50));
		Box BoxH2 = Box.createHorizontalBox();
		BoxH2.add(Box.createVerticalStrut(50));
		Box BoxH3 = Box.createHorizontalBox();
		BoxH3.add(Box.createVerticalStrut(50));
		Box BoxH4 = Box.createHorizontalBox();
		BoxH4.add(Box.createVerticalStrut(50));
		
		BoxH.add(button);
		BoxH.add(Box.createHorizontalStrut(260));
		BoxH.add(button5);
		
		BoxH2.add(button2);
		BoxH2.add(Box.createHorizontalStrut(260));
		BoxH2.add(button6);
		
		BoxH3.add(button3);
		BoxH3.add(Box.createHorizontalStrut(260));
		BoxH3.add(button7);
		
		BoxH4.add(button4);
		BoxH4.add(Box.createHorizontalStrut(260));
		BoxH4.add(button8);

		BoxV.add(BoxH);
		BoxV.add(BoxH2);
		BoxV.add(BoxH3);
		BoxV.add(BoxH4);
		jp.add(lable,BorderLayout.NORTH);
		jp.add(BoxV);
		
		//注册监听
		button.addActionListener(this);
		button2.addActionListener(this);
		button3.addActionListener(this);
		button4.addActionListener(this);
		button5.addActionListener(this);
		button6.addActionListener(this);
		button7.addActionListener(this);
		button8.addActionListener(this);
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		String number = textf.getText();
		if(e.getSource()==button) {
			new All();
			dispose();
		}
		if(e.getSource()==button2) {
			textf.setText("100");
			//basi2.Withdrawal(basi2.cardID, "100");
		}
		if(e.getSource()==button3) {
			textf.setText("500");
			//basi2.Withdrawal(basi2.cardID, "100");
		}
		if(e.getSource()==button4) {
			textf.setText("1000");
			//basi2.Withdrawal(basi2.cardID, "100");
		}
		if(e.getSource()==button5) {
			textf.setText("3000");
			//basi2.Withdrawal(basi2.cardID, "100");
		}
		if(e.getSource()==button6) {
			textf.setText("5000");
			//basi2.Withdrawal(basi2.cardID, "100");
		}
		if(e.getSource()==button7) {
			//更正
			textf.setText("");
		}
		if(e.getSource()==button8) {
			String s = basi2.deposit(basi2.cardID, number);
			JOptionPane.showMessageDialog(button8,s,"消息提示框",JOptionPane.WARNING_MESSAGE);
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Deposit a = new Deposit();
	}
}

7.修改密码页面
此页面的返回会回到功能选择页面
修改密码页面

package ATM;

import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

//修改密码页面
public class Pin extends JFrame implements ActionListener{
	Basic_operation basi2 = new Basic_operation();//调用Basic_operation类中写好的方法
	JFrame jframe = new JFrame();
	JPanel p = new JPanel();
	JLabel title = new JLabel("请在确定周围环境安全的前提下操作:");
	JLabel label = new JLabel("  请输入原密码 ");
	JTextField text = new JTextField();
	JLabel label2 = new JLabel("  请输入新密码 ");
	JTextField text2 = new JTextField();
	JLabel label3 = new JLabel("再次输入新密码");
	JTextField text3 = new JTextField();
	JButton button = new JButton("返回");
	JButton button2 = new JButton("确认"); 
	public Pin() {
		setTitle("修改密码页面");
		p.setBackground(new Color(30, 144, 255));
		//调用方法
		p_in();
		add(p);
		//设置windowListener,监听用户点击x的动作,若点击x,则关闭窗口
	    setDefaultCloseOperation(DISPOSE_ON_CLOSE);
	    //设置最佳大小,pack方法
	    pack();
	    setVisible(true);//设置可见
	}
	
	private void p_in() {
		// TODO Auto-generated method stub
		p.setLayout(new GridLayout(6, 1, 0, 15));
		title.setFont(new Font("宋体",Font.BOLD,15));
		Box boxH,boxH2,boxH3,boxH4;//水平
		boxH = Box.createHorizontalBox();
		boxH2 = Box.createHorizontalBox();
		boxH3 = Box.createHorizontalBox();
		boxH4 = Box.createHorizontalBox();
		boxH.add(label);
		boxH.add(text);
		boxH2.add(label2);
		boxH2.add(text2);
		boxH3.add(label3);
		boxH3.add(text3);
		boxH4.add(Box.createHorizontalStrut(80));
		boxH4.add(button);
		boxH4.add(Box.createHorizontalStrut(100));
		boxH4.add(button2);
		boxH4.add(Box.createHorizontalStrut(80));
		p.add(title);
		p.add(boxH);
		p.add(boxH2);
		p.add(boxH3);
		p.add(boxH4);
		//添加监听
		button.addActionListener(this);
		button2.addActionListener(this);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if(e.getSource()==button) {
			new All();
			dispose();
		}
		if(e.getSource()==button2) {
			String s = basi2.changePassword(basi2.cardID, text.getText(), text2.getText(), text3.getText());
			JOptionPane.showMessageDialog(button2,s,"消息提示框",JOptionPane.WARNING_MESSAGE);
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Pin a = new Pin();
	}

}

注:以上类都需要在java软件中运行,我将数据库代码放在下面,数据库代码要在MySql中运行
开放权限是非常重要的一步

create database atmBankDatabase;
use atmBankDatabase;
create table account(
	id varchar(20) not null default '62250028' primary key,/*卡号*/
    aname varchar(15) not null,
    apassword varchar(15) not null default '123456',
    balance double not null default '10000'/*余额*/
)engine=InnoDB default charset=utf8;

/*将指导书中的用户添加到表中*/
insert into account values('62250028','张三','123456','10000');
insert into account values('62250027','李四','123456','10000');
insert into account values('62250026','王五','123456','10000');

grant all PRIVILEGES on *.* to root@'%' identified by '';/*开放root权限*/
select * from account;
  • 56
    点赞
  • 336
    收藏
    觉得还不错? 一键收藏
  • 21
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值