《Java语言程序设计》课程设计报告
题 目: ATM机
设 计 者: 何珍珍 张明月
班 级: 10信息一班
学 号: 210510113 210510152
指导教师: 魏艳铭
系 部: 信息管理系
专 业: 计算机应用技术
20##年 6 月 25 日
ATM机设计报告
目录
1 概述... 2
1.1 问题分析... 2
1.2功能... 2
2 总体设计... 3
3 详细设计... 3
1.登录界面Client()类结构介绍:... 3
2.卡号生成界面AtmDemo()类结构介绍:... 3
3.功能界面Main()类结构介绍:... 4
4.存款的界面KeepMoney()和取款的界面GetMoney()结构介绍:... 4
5.修改密码界面Change()类结构介绍:... 5
7.查询余额界面Yuxia.java()类结构介绍:... 5
4 实现... 5
1. 运行环境... 5
2. 运行情况抓图... 5
5 总结与体会... 6
6 参考文献... 7
7 附录:程序清单... 7
1 概述
1.1 问题分析
模拟ATM机基本操作功能:存款、取款、余额查询、修改密码等;初始账户10000元;修改密码时必须修改两次,确认后才可使用;取款的款项和存款的款项必须是100的整倍数;
1.2功能
1)模拟ATM机实现当用户进入登陆页面后,用户需先点击银行开户按钮进行银行开户;
2)进入银行开户页面之后,进行填写客户信息,系统会自动生成卡号,信息填写完整后系统会自动保存用户信息在生成的文件中,并返回登陆页面进行登录。
3)登陆成功之后进入ATM机操作页面进行存款、取款、余额查询、修改密码,点击一个按钮都会显示出对应的页面。
2 总体设计
1、Client()类第一个登陆页面主要包括:登陆账号按钮、银行开户按钮、重新登录按钮、退出系统按钮;
2、AtmDemo()类第二个登陆页面主要进行用户资料填写主要包括:卡号、密码、确认密码、用户名、性别、存款金额标签;生成卡号、确认开户、取消开户按钮;
3、Main()类第二个登陆页面主要设置安放按钮,主要包括:取款、存款、修改密码、查询余额、退出该界面按钮并对所有按钮进行监听;
4、GetMoney()类第三个登陆页面主要进行取款设置主要包括:提款金额数目的数字按钮,当点击相应的按钮时,提取金额框内显示相应的取款金额;当提款的金额超出卡内总金额时,取款失败;
5、KeepMoney()类第四个登陆页面主要进行存款设置主要包括:存款金额数目的数字按钮,当点击相应的按钮时,存款金额框内显示相应的存款金额;
6、Change()类第五个登陆页面主要进行密码修改的设置主要包括:设置“确认”“取消”“返回主页面”三个按钮;两次输入新的密码,当两次密码相同时点击“确认”按钮修改密码成功,第二次进行账户登录时使用修改后的密码
7、Yuxia()类第六个登陆页面主要进行余额查询的设置主要包括:当点击“查看余额”按钮时查看存款、取款后卡内的总金额,显示在文本框内;当点击“返回主页面”时返回Main页面;
8、Account()类主要保存文件的卡号,密码和账户金额,对进行数据信息在不同的类内调用传递;
3 详细设计
1.登录界面Client()类结构介绍:
主要包括:三个标签:“欢迎登录ATM机”,“卡号”,“密码”
两个文本框:JTextField和JPasswordField四个按钮:“登陆账号”,“银行开户”,“重新登录”,“退出系统”对页面使用了空布局。对文本框进行监听,设置卡号只能为数字,且只能输入8位。设置密码框不为空。给四个按钮创建监听ActionListener,四个按钮实现的功能:
登陆账号:第一次进入登录界面时,当点击“登录账户”弹出对话框:“请进行银行开户”。
重新登录: 当点击“重新登录”按钮,用setText(“”)把文本框和密码框为空。
银行开户: 当点击“银行开户”按钮时,界面跳到银行开户的界面里。
退出系统:当点击“退出系统”时,弹出对话框“确定要退出ATM系统?”点击是,退出系统,点击否,留在该界面。
当银行开户成功后,再次输入卡号和密码,如果其中一个或全部错误,弹出对话框:“请核对你的卡号和密码,重新登录”,并不设置文本框为空。
2.卡号生成界面AtmDemo()类结果介绍:
继承Jframe创建银行卡号开户窗体,创建监听;应用空布局设置JLabel标签,JTextField, JPasswordField,JButton,JComboBox复选按钮框在窗体中的位置当点击“生成卡号”按钮时系统会自动生成卡号( inti=(int)(Math.random()*100000000);)对生成的卡号进行数据保存(account)由Account传递到登陆页面,让生成的卡号与登陆的卡号相同在登录页面进行登录操作;
设置密码与确认密码框中的内容相等,如果不相同提示(“JOptionPane.showConfirmDialog(this,"两次填写密码不同,请重新输入正确的密码!","提示",JOptionPane.OK_CANCEL_OPTION );”),对生成的密码进行数据保存(account)让后传递到ATM—Client页面进行密码连接;
设置存款金额框存款金额为100的整倍数;当点击“取消开户”按钮时,所有文本框内容为空;当点击“确认开户”按钮时,如果资料填写不完整,系统进行提示(elseif(jtf1.getText().equals("")||jtf2.getText().equals("")||jtf3.getText().equals("")||s3.equals("")||s2.equals("")){ JOptionPane.showMessageDialog(this,"开户失败,资料没填写完整!");)反之,页面转到登陆页面;
3.功能界面Main()类结构介绍:
主要包括:一个标签:“荷塘月色ATM机正在为您服务…”五个按钮:“取款”、“存款”、“查询余额”、“修改密码”、“退出该界面”对页面使用了空布局。
对前四个按钮进行监听,当点击其中任一个按钮时,进入到该按钮实现功能的界面里,当点击“退出该界面”,弹出对话框“确定返回登录面?” 点击是,退出该界面,点击否,留在该界面。
4.存款的界面KeepMoney()和取款的界面GetMoney()结构介绍:
主要包括:十个按钮:七个固定存取款钱数的按钮和一个“自定义”(存取款的钱数)按钮,还有“确定”按钮和“返回主页面”的按钮。一个标签:“您提取(存入)的金额数:一个文本框;对页面使用了空布局。给八个存取款的按钮进行监听。实现的功能:
当点击七个固定存取款的按钮时,按钮上的钱数显示在文本框中,当点击自定义按钮时,可以在文本框中手动输入钱数。
当点击“返回主页面”按钮时,结束该界面的操作,返回Main页面里。
文本框:① 文本框设置为不可编辑。当点击存取款按钮时,钱数显示在文本框中,但不能手动修改文本框中的内容。当点击自定义按钮时,文本框可以手动输入,文本框中输入的存取款的钱数必须是100的倍数,最少为100,最多为5000元,否则弹出对话框进行提醒,存取钱不成功。
② 自定义一个监听类,对文本框进行监听,自定义输入钱数时,文本框中只能输入数字,且最多可输入四位数。当文本框为空时,点击“确定”按钮,弹出对话框:“请输入存(取)款金额”。
在存款KeepMoney.java界面时,当点击“确定”按钮,弹出对话框“您已存款**元,余额为**元”。
在取款GetMoney.java界面时,当点击“确定”按钮时,如果账户金额大于或等于提取金额时,弹出对话框“您已取款**元,余额为**元”。如果账户金额小于提取金额时,弹出对话框“余额不足,取钱失败”,并获取余额数,
停止金额的运算。以防止取款不成功,但已透支的现象。
5. 修改密码界面Change()类结构介绍:
继承JFrame创建修改密码窗体,设置窗体的空布局;对确认密码框进行监听和数据传递保存(account.setPwd(s2);)传递到Client()类内;当两次输入密码相同时点击“确认”按钮密码修改成功,下次登录使用新密码进行登录。;点击“取消”按钮文本框内容消失为空;点击“返回主页面”按钮返回至Main()(else if(e.getSource()==jb3){new Main();this.setVisible(false););
6.查询余额界面Yuxia.java()类结构介绍:
创建查询余额窗体,应用空布局设置布局;对按钮创建监听(addActionListener) 当点击“查看余额”按钮时显示卡内当前的余额(运用Account类进行数据传递实现(jtf1.setText((account.getCountmoney())+"");))
4 实现
1.运行环境
MyEclipse6.5
2.运行情况抓图
1 2
3 4
7
5 总结与体会
此次实训基本把我们本学期所学的内容进行综合应用,让我们更加容易简单的了解体验到了未来工作的一般状况,锻炼了我们的实际操作能力,同时也在一定程度上增加了同学们对Java语言学习的信心,一些简单的小游戏,通过运用自己所学也是可以实现的,让我们不在对编程感觉那么神秘。
团队合作与交流很重要,“团结就是力量”在本次项目开发中真的体会得到,在做项目时,小组成员要知道本小组所做项目的基本构想框架,要做什么、实现什么。如果有自己的想法就要和自己的伙伴进行交流。
6 参考文献
【1】魏艳铭,Java程序设计,河南经贸职业学院:ATM机视频提示,2011.6
【2】网络资源:http://www.toedu.org/
【3】《Java程序设计精讲》,北京:清华大学出版社,2010.9
7 附录:程序清单
1.Client.java//ATM机的登录界面
package client;
import javax.swing.*;
import client.GetMoney.myKeyListener;
import java.awt.*;
import java.awt.event.*;
import java.net.URL;
publicclass Client extends JFrame implements ActionListener{
JLabel jl1,jl2,jl3;
JLabel jl;//添加图片的标签
JTextField jtf;
JPasswordField jpf;
JButton jb1,jb2,jb3,jb4;
static Account account;
public Client(Account account){
super("ATM-Client");
this.account=account;
setLayout(null);
jl1=new JLabel("欢迎进入“荷塘月色ATM 机”");
Font f=new Font("华文新魏",Font.BOLD,24);
jl1.setForeground(Color.BLUE);
jl1.setFont(f);
jl2=new JLabel("卡号:");
jl3=new JLabel("密码:");
jtf=new JTextField(8);
jtf.addKeyListener(new myKeyListener(jtf));
jpf=new JPasswordField();
jb1=new JButton("登陆账号");
jb1.addActionListener(this);
jb2=new JButton("银行开户");
jb2.addActionListener(this);
jb3=new JButton("重新登录");
jb3.addActionListener(this);
jb4=new JButton("退出系统");
jb4.addActionListener(this);
//添加图片
jl= new JLabel();
URL resource = this.getClass().getResource("/images/6.jpg");
ImageIcon bgImage=new ImageIcon(resource); //创建图标
jl.setIcon(bgImage);
jl.setBounds(0,0,400,400);
jl1.setBounds(25, 40, 400, 40);
jl2.setBounds(50, 85, 60, 40);
jl3.setBounds(50, 150, 60, 40);
jtf.setBounds(120, 90,150, 30);
jpf.setBounds(120, 155,150,30);
jb1.setBounds(0, 250, 90, 30);
jb2.setBounds(100, 250, 90,30 );
jb3.setBounds(200, 250, 90,30 );
jb4.setBounds(300, 250, 90, 30);
this.add(jl1);
this.add(jl2);
this.add(jtf);
this.add(jl3);
this.add(jpf);
this.add(jb1);
this.add(jb2);
this.add(jb3);
this.add(jb4);
this.add(jl);
this.setSize(400,400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
publicstaticvoid main(String[] args) {
new Client(account);
}
publicvoid actionPerformed(ActionEvent e) {
if(e.getSource()==jb1){
String s1=jtf.getText();
String s2=new String(jpf.getPassword());
if(account!=null){
if(s1.equals(account.ip)&&s2.equals(account.pwd)){
new Main(account);
this.setVisible(false);
}else{
JOptionPane.showMessageDialog(this,"请核对您的卡号和密码,重新登录");
}
}elseif(account==null){
JOptionPane.showMessageDialog(this, "请进行银行开户");
}
}elseif(e.getSource()==jb2){
//连接到的AtmDemo.java
new AtmDemo();
this.setVisible(false);
}elseif(e.getSource()==jb3){
jtf.setText("");
jpf.setText("");
}elseif(e.getSource()==jb4){
//设置jb4——退出系统
int i=JOptionPane.showConfirmDialog(this,"您确定要退出ATM机系统?",
"提示",JOptionPane.YES_NO_OPTION);
if(i==1){
return;
}
System.exit(0);
}
}
//创建jtf的监听,使jtf只能输入8个数字,且只能输入数字
class myKeyListener extends KeyAdapter{
private JTextField jtf;
privateint length;
public myKeyListener(JTextField jtf){
this.jtf = jtf;
this.length = 8;
}
public myKeyListener(JTextField jtf,int length){
this.jtf = jtf;
this.length = length;
}
publicvoid keyTyped(KeyEvent e)
{
boolean b = Character.toString(e.getKeyChar()).matches("\\d");
if(!b || jtf.getText().length() == length){
e.consume();
}
}
}
}
2.AtmDemo.java//ATM卡号生成页面
package client;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.Socket;
import java.util.Calendar;
import java.net.URL;
import javax.swing.*;
publicclass AtmDemo extends JFrame implements ActionListener {
JLabel jl1,jl2,jl3,jl4,jl5,jl6,jl7,jl8;
JTextField jtf1,jtf2,jtf3;
JPasswordField jpf1,jpf2;
JButton jb1,jb2,jb3;
JComboBox jcb;
BufferedReader br;
JLabel msg;
Account account;
int totalmoney=10000;
int money;
public AtmDemo(){
super("银行卡号开户");
this.setLayout(null);
jl1=new JLabel("卡号开户");
jl2=new JLabel("卡号:");
jl3=new JLabel("密码 :");
jl4=new JLabel("确认密码 :");
jl5=new JLabel("用户名:");
jl6=new JLabel("性别:");
jcb = new JComboBox();
jcb.addItem("男");
jcb.addItem("女");
jl7=new JLabel("存款金额:");
jb1=new JButton("生成卡号");
jb2=new JButton("确认开户");
jb3=new JButton("取消开户");
jtf1=new JTextField(16);
jtf1.setEditable(false);//设置文本框不可见
jtf2=new JTextField(4);
jtf3=new JTextField();
jpf1=new JPasswordField(6);
jpf2=new JPasswordField(6);
msg=new JLabel("");
msg.setForeground(Color.RED);
//监听
jb1.addActionListener(this);
jb2.addActionListener(this);
jb3.addActionListener(this);
jtf3.addKeyListener(new myKeyListener(jtf3));
jl1.setForeground(Color.RED);
jl1.setFont(new Font("宋体", Font.PLAIN, 40));
//添加图片
jl8= new JLabel();
URL resource = this.getClass().getResource("/images/8.jpg");
ImageIcon bgImage=new ImageIcon(resource); //创建图标
jl8.setIcon(bgImage);
jl8.setBounds(0,0,400,400);
jl1.setBounds(105, 10, 225, 41);//卡号开户
jl2.setBounds(40, 60, 81, 18);//卡号
jb1.setBounds(297, 60, 91, 18);//生成卡号
jl3.setBounds(40, 90, 81, 18);//密码
jl4.setBounds(40, 120, 81, 18);//确认密码
jl5.setBounds(40, 150, 81, 18);//用户名
jl6.setBounds(40, 180, 81, 15);//性别
jcb.setBounds(100, 180, 110, 18);//复选按钮
jl7.setBounds(40, 210, 81, 15);//存款金额
jtf1.setBounds(100, 60, 190, 18);//卡号框
jpf1.setBounds(100, 90, 170, 18);//密码框
jpf2.setBounds(100, 120, 150, 18);//确认密码框
jtf2.setBounds(100, 150, 130, 18);//用户名框
jtf3.setBounds(100, 210, 90, 18);//存款金额框
jb2.setBounds(80, 300,100, 25);//确认开户
jb3.setBounds(230, 300, 100, 25);//取消开户
msg.setBounds(150,260,270,60);
add(jb1);
add(jb2);
add(jb3);
add(jcb);
add(jl1);
add(jl2);
add(jl3);
add(jl4);
add(jl5);
add(jl6);
add(jl7);
add(jpf1);
add(jpf2);
add(jtf1);
add(jtf2);
add(jtf3);
add(msg);
add(jl8);
this.setSize(400,400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
publicstaticvoid main(String args[]){
new AtmDemo();
}
publicvoid actionPerformed(ActionEvent e) {
String id1=jtf1.getText();//卡号
String s1=new String(jpf2.getPassword());//确认密码
int mone=money;//生成的金额数
account=new Account(id1,s1,mone);//把生成的卡号、确认密码、生成金额数保存在account类内
try{
//创建文件
File f=new File("message.txt");
if(e.getSource()==jb1){
//生成卡号
jtf1.setEditable(true);
int i=(int)(Math.random()*100000000);
jtf1.setText(Integer.toString(i));
jtf1.setEditable(false);
msg.setText("");//消失信息提示
JOptionPane.showMessageDialog(this,"卡号已生成,请记住卡号,以便登陆!");
}
elseif(e.getSource()==jb2){
//确定开户
String s3=new String(jpf1.getPassword());
String s2=new String(jpf2.getPassword());
if(!s3.equals(s2)){
JOptionPane.showConfirmDialog(this,
"两次填写密码不同,请重新输入正确的密码!",
"提示",JOptionPane.OK_CANCEL_OPTION );
jpf2.setText(null);
return;
}
elseif(jtf1.getText().equals("")||jtf2.getText().equals("")||jtf3.getText().equals("")||s3.equals("")||s2.equals("")){
JOptionPane.showMessageDialog(this,"开户失败,资料没填写完整!");
}
elseif(Integer.parseInt(jtf3.getText())%100!=0){
JOptionPane.showMessageDialog(this,"存款金额必须是100的倍数!");
jtf3.setText("");
}
elseif(!jtf1.getText().equals("")&&!jtf2.getText().equals("")&&!jtf3.getText().equals("")&&!s3.equals("")&&!s2.equals("")){
money=totalmoney+(Integer.parseInt(jtf3.getText()));
JOptionPane.showMessageDialog(this,"您已开户成功,卡内金额为:"+money);
account.setCountmoney((totalmoney+(Integer.parseInt(jtf3.getText()))));
new Client(account);
this.setVisible(false);
}
//写入客户信息保存在message.txt中
try{
FileWriter fw = new FileWriter(f);
BufferedWriter bw=new BufferedWriter(fw);
String s = "卡号:"+jtf1.getText()+"\t"+"用户名:"+jtf2.getText()+"\t"
+"密码:"+account.getPwd();
bw.write(s);
bw.newLine();
bw.close();
fw.close();
}catch(IOException ex){
ex.printStackTrace();
}
} elseif(e.getSource()==jb3){
jpf1.setText(null);
jpf2.setText(null);
jtf1.setText(null);
jtf2.setText(null);
jtf3.setText(null);
msg.setText("您已成功取消开户!");
}
}catch (Exception ex){
}
}
}
//只允许输入数字的监听器
class myKeyListener extends KeyAdapter{
private JTextField jtf;
privateint length;
public myKeyListener(JTextField jtf){
this.jtf = jtf;
this.length = 15;
}
public myKeyListener(JTextField jtf,int length){
this.jtf = jtf;
this.length = length;
}
publicvoid keyTyped(KeyEvent e)
{
boolean b = Character.toString(e.getKeyChar()).matches("\\d");
if(!b || jtf.getText().length() == length){
e.consume();
}
}
}
3.Main.java//主要包括:存款、取款、修改密码、查询余额等按钮
package client;
import java.awt.*;
import java.awt.event.*;
import java.net.URL;
import javax.swing.*;
publicclass Main extends JFrame implements ActionListener{
JLabel jl1;
JLabel jl;
JButton jb1,jb2,jb4,jb5,jb6;
static Account account;
public Main(Account account){
super("ATM机主页面");
this.account=account;
setLayout(null);
jl1=new JLabel("荷塘月色ATM机正在为您服务...");
jl1.setBounds(50, 0,300, 80);
Font f=new Font("华文琥珀",Font.BOLD,20);
jl1.setForeground(Color.BLUE);
jl1.setFont(f);
jb1=new JButton("取款");
jb1.addActionListener(this);
jb2=new JButton("查询余额");//设置初始账户金额为1000元
jb2.addActionListener(this);
jb4=new JButton("存款");
jb4.addActionListener(this);
jb5=new JButton("修改密码");
jb5.addActionListener(this);
jb6=new JButton("退出该界面");
jb6.addActionListener(this);
//添加图片
jl= new JLabel();
URL resource = this.getClass().getResource("/images/6.jpg");
ImageIcon bgImage=new ImageIcon(resource); //创建图标
jl.setIcon(bgImage);
jl.setBounds(0,0,400,400);
jb1.setBounds(10,110 ,140 ,40 );
jb2.setBounds(10,190 ,140 ,40 );
jb4.setBounds(200, 110, 140, 40);
jb5.setBounds(200, 190, 140,40 );
jb6.setBounds(100, 270,140 ,40 );
this.add(jl1);
this.add(jb1);
this.add(jb2);
this.add(jb4);
this.add(jb5);
this.add(jb6);
this.add(jl);
this.setSize(400,400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
publicvoid actionPerformed(ActionEvent e) {
if(e.getSource()==jb1){
new GetMoney(account);
this.setVisible(false);
}elseif(e.getSource()==jb2){
new Yuxia(account);
this.setVisible(false);
}elseif(e.getSource()==jb4){
new KeepMoney(account);
this.setVisible(false);
}elseif(e.getSource()==jb5){
new Change(account);
this.setVisible(false);
}elseif(e.getSource()==jb6){
int i=JOptionPane.showConfirmDialog(this,"确定要返回登陆界面?",
"提示",JOptionPane.YES_NO_OPTION );
if(i==1){
return;
}
new Client(account);
this.setVisible(false);
}
}
publicstaticvoid main(String[] args) {
new Main(account);
}
}
4.GetMoney.java//取款页面
package client;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.net.URL;
publicclass GetMoney extends JFrame implements ActionListener{
JButton jb1,jb2,jb3,jb4,jb5,jb6,jb7,jb8,jb9,jb10;
JLabel jl;
JLabel jl1;
JTextField jtf;
int a=0;
static Account account;
public GetMoney(Account account){
super("提取现金");
this.account=account;
setLayout(null);
jb1=new JButton("100");
jb1.addActionListener(this);
jb2=new JButton("300");
jb2.addActionListener(this);
jb3=new JButton("500");
jb3.addActionListener(this);
jb4=new JButton("1000");
jb4.addActionListener(this);
jb5=new JButton("1500");
jb5.addActionListener(this);
jb6=new JButton("3000");
jb6.addActionListener(this);
jb7=new JButton("自定义");
jb7.addActionListener(this);
jb8=new JButton("5000");
jb8.addActionListener(this);
jb9=new JButton("确定");
jb9.addActionListener(this);
jb10=new JButton("返回主页面");
jb10.addActionListener(this);
jl=new JLabel("您提取的金额数为:");
jtf=new JTextField(4);
jtf.addKeyListener(new myKeyListener(jtf));
//设置文本框不可手动输入
jtf.setEditable(false);
//添加图片
jl1= new JLabel();
URL resource = this.getClass().getResource("/images/6.jpg");
ImageIcon bgImage=new ImageIcon(resource); //创建图标
jl1.setIcon(bgImage);
jl1.setBounds(0,0,400,400);
jb1.setBounds(20, 40, 100,40 );
jb2.setBounds(20, 90,100 ,40 );
jb3.setBounds(20,140 ,100 ,40 );
jb4.setBounds(280,40 ,100 ,40 );
jb5.setBounds(280,90 ,100 ,40 );
jb6.setBounds(280,140 ,100 ,40 );
jb7.setBounds(20, 190, 100, 40);
jb8.setBounds(280, 190, 100, 40);
jb9.setBounds(50,290,100, 40);
jb10.setBounds(250,290,100,40 );
jl.setBounds(20, 240, 150,40 );
jtf.setBounds(180, 250, 100,20 );
this.add(jb1);
this.add(jb2);
this.add(jb3);
this.add(jb4);
this.add(jb5);
this.add(jb6);
this.add(jb7);
this.add(jb8);
this.add(jb9);
this.add(jb10);
this.add(jl);
this.add(jtf);
this.add(jl1);
this.setSize(400,400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
publicvoid actionPerformed(ActionEvent e) {
if(e.getSource()==jb1){
jtf.setText(jb1.getText());
jtf.setEditable(false);
}elseif(e.getSource()==jb2){
jtf.setText(jb2.getText());
jtf.setEditable(false);
}elseif(e.getSource()==jb3){
jtf.setText(jb3.getText());
jtf.setEditable(false);
}elseif(e.getSource()==jb4){
jtf.setText(jb4.getText());
jtf.setEditable(false);
}elseif(e.getSource()==jb5){
jtf.setText(jb5.getText());
jtf.setEditable(false);
}elseif(e.getSource()==jb6){
jtf.setText(jb6.getText());
jtf.setEditable(false);
}elseif(e.getSource()==jb7){
jtf.setText("");
jtf.setEditable(true);
}elseif(e.getSource()==jb8){
jtf.setText(jb8.getText());
jtf.setEditable(false);
}elseif(e.getSource()==jb10){
new Main(account);
this.setVisible(false);
}elseif(e.getSource()==jb9){
if(jtf.getText().equals("")){
JOptionPane.showMessageDialog(this,"请输入取钱金额!" );
return;
}elseif(jtf.getText().charAt(0) == '0'){
JOptionPane.showMessageDialog(this,"请正确输入取钱金额!" );
jtf.setText("");
return;
}elseif(Integer.parseInt(jtf.getText())%100!=0){
JOptionPane.showMessageDialog(this,"请输入100的整倍钱数!" );
jtf.setText("");
}elseif((Integer.parseInt(jtf.getText()))>5000){
JOptionPane.showMessageDialog(this,"最多取款5000元!" );
jtf.setText("");
}elseif(jtf.getText()!=null){
String s=jtf.getText();
int a=Integer.parseInt(s);
int b=account.getCountmoney();
if(b>a||b==a){
account.setCountmoney(b-a);
JOptionPane.showMessageDialog(this,"您已取款:"+s+"元。您余额为:"+account.getCountmoney()+"元");
jtf.setText("");
}
elseif(b<a){
JOptionPane.showMessageDialog(this, "余额不足,取钱失败");
account.setCountmoney(account.getCountmoney());
}
}
}
}
publicstaticvoid main(String[] args) {
new GetMoney(account);
}
//创建jtf的监听,使jtf只能输入4个数字,且只能输入数字
class myKeyListener extends KeyAdapter{
private JTextField jtf;
privateint length;
public myKeyListener(JTextField jtf){
this.jtf = jtf;
this.length = 4;
}
public myKeyListener(JTextField jtf,int length){
this.jtf = jtf;
this.length = length;
}
publicvoid keyTyped(KeyEvent e)
{
boolean b = Character.toString(e.getKeyChar()).matches("\\d");
if(!b || jtf.getText().length() == length){
e.consume();
}
}
}
}
5.KeepMoney.java//存款页面
package client;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.net.URL;
publicclass KeepMoney extends JFrame implements ActionListener{
JButton jb1,jb2,jb3,jb4,jb5,jb6,jb7,jb8,jb9,jb10;
JLabel jl;
JLabel jl1;
JTextField jtf;
static Account account;
public KeepMoney(Account account){
super("存款业务");
this.account=account;
setLayout(null);
jb1=new JButton("100");
jb1.addActionListener(this);
jb2=new JButton("300");
jb2.addActionListener(this);
jb3=new JButton("500");
jb3.addActionListener(this);
jb4=new JButton("1000");
jb4.addActionListener(this);
jb5=new JButton("1500");
jb5.addActionListener(this);
jb6=new JButton("3000");
jb6.addActionListener(this);
jb7=new JButton("自定义");
jb7.addActionListener(this);
jb8=new JButton("5000");
jb8.addActionListener(this);
jb9=new JButton("确定");
jb9.addActionListener(this);
jb10=new JButton("返回主页面");
jb10.addActionListener(this);
jl=new JLabel("您存入的金额为数:");
jtf=new JTextField(4);
jtf.addKeyListener(new myKeyListener(jtf));
jtf.setEditable(false);
//添加图片
jl1= new JLabel();
URL resource = this.getClass().getResource("/images/6.jpg");
ImageIcon bgImage=new ImageIcon(resource); //创建图标
jl1.setIcon(bgImage);
jl1.setBounds(0,0,400,400);
jb1.setBounds(20, 40, 100,40 );
jb2.setBounds(20, 90,100 ,40 );
jb3.setBounds(20,140 ,100 ,40 );
jb4.setBounds(280,40 ,100 ,40 );
jb5.setBounds(280,90 ,100 ,40 );
jb6.setBounds(280,140 ,100 ,40 );
jb7.setBounds(20, 190, 100, 40);
jb8.setBounds(280, 190, 100, 40);
jb9.setBounds(50,290,100, 40);
jb10.setBounds(250,290,100,40 );
jl.setBounds(20, 240, 150,40 );
jtf.setBounds(180, 250, 100,20 );
this.add(jb1);
this.add(jb2);
this.add(jb3);
this.add(jb4);
this.add(jb5);
this.add(jb6);
this.add(jb7);
this.add(jb8);
this.add(jb9);
this.add(jb10);
this.add(jl);
this.add(jtf);
this.add(jl1);
this.setSize(400,400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
publicvoid actionPerformed(ActionEvent e) {
if(e.getSource()==jb1){
jtf.setText(jb1.getText());
jtf.setEditable(false);
}elseif(e.getSource()==jb2){
jtf.setText(jb2.getText());
jtf.setEditable(false);
}elseif(e.getSource()==jb3){
jtf.setText(jb3.getText());
jtf.setEditable(false);
}elseif(e.getSource()==jb4){
jtf.setText(jb4.getText());
jtf.setEditable(false);
}elseif(e.getSource()==jb5){
jtf.setText(jb5.getText());
jtf.setEditable(false);
}elseif(e.getSource()==jb6){
jtf.setText(jb6.getText());
jtf.setEditable(false);
}elseif(e.getSource()==jb7){
jtf.setText("");
jtf.setEditable(true);
}elseif(e.getSource()==jb8){
jtf.setText(jb8.getText());
jtf.setEditable(false);
}elseif(e.getSource()==jb9){
if(jtf.getText().equals("")){
JOptionPane.showMessageDialog(this,"请输入存钱金额!" );
return;
}elseif(jtf.getText().charAt(0) == '0'){
JOptionPane.showMessageDialog(this,"请正确输入取钱金额!" );
jtf.setText("");
return;
}elseif(Integer.parseInt(jtf.getText())%100!=0){
JOptionPane.showMessageDialog(this,"请输入100的整倍钱数!" );
jtf.setText("");
}elseif((Integer.parseInt(jtf.getText()))>5000){
JOptionPane.showMessageDialog(this,"最多取款5000元!" );
jtf.setText("");
}elseif(jtf.getText()!=null){
String s=jtf.getText();
int a=Integer.parseInt(s);
int b=account.getCountmoney();
account.setCountmoney(a+b);
// 点击确定按钮,余额=总金额-取钱的金额(+存钱的金额) 算出余额,输出对话JOptionPane.showMessageDialog(this,"您已存款:"+s+"元。您余额为:"+account.getCountmoney()+"元");
jtf.setText("");
}
}elseif(e.getSource()==jb10){
new Main(account);
this.setVisible(false);
}
}
publicstaticvoid main(String[] args) {
new KeepMoney(account);
}
//创建jtf的监听,使jtf只能输入4个数字,且只能输入数字
class myKeyListener extends KeyAdapter{
private JTextField jtf;
privateint length;
public myKeyListener(JTextField jtf){
this.jtf = jtf;
this.length = 4;
}
public myKeyListener(JTextField jtf,int length){
this.jtf = jtf;
this.length = length;
}
publicvoid keyTyped(KeyEvent e)
{
boolean b = Character.toString(e.getKeyChar()).matches("\\d");
if(!b || jtf.getText().length() == length){
e.consume();
}
}
}
}
6.Change.java//修改密码页面
package client;
import java.awt.*;
import java.net.URL;
import java.awt.event.*;
import javax.swing.*;
publicclass Change extends JFrame implements ActionListener {
JButton jb1,jb2,jb3;
JLabel jl1,jl2,jl3,jl4;
JPasswordField jpf1,jpf2;
static Account account;
public Change(Account account){
super("修改密码");
this.account=account;
jb1=new JButton("确定");
jb2=new JButton("取消");
jb3=new JButton("返回主页面");
jl1=new JLabel("请输入新的密码:");
jl2=new JLabel("请再次输入新的密码:");
jl3=new JLabel("修改密码");
jl1.setForeground(Color.BLUE);
jl1.setFont(new Font("黑体", Font.BOLD, 15));
jl2.setForeground(Color.BLUE);
jl2.setFont(new Font("黑体", Font.BOLD, 15));
jl3.setForeground(Color.RED);
jl3.setFont(new Font("宋体",Font.PLAIN, 40));
jpf1=new JPasswordField(6);
jpf2=new JPasswordField(6);
this.setLayout(null);
jl1.setBounds(10,105 ,140 ,40 );
jl2.setBounds(10,190 ,160 ,40 );
jl3.setBounds(105, 10, 225, 41);
jb1.setBounds(20, 270,100 ,40 );
jb2.setBounds(140, 270,100 ,40 );
jb3.setBounds(260, 270,100 ,40 );
jpf1.setBounds(190, 110, 170, 30);
jpf2.setBounds(190, 195, 170,30 );
//监听
jb1.addActionListener(this);
jb2.addActionListener(this);
jb3.addActionListener(this);
jpf1.addActionListener(this);
jpf2.addActionListener(this);
//添加图片
jl4 = new JLabel();
URL resource = this.getClass().getResource("/images/6.jpg");
ImageIcon bgImage=new ImageIcon(resource); //创建图标
jl4.setIcon(bgImage);
jl4.setBounds(0,0,400,400);
add(jb1);
add(jb2);
add(jb3);
add(jl1);
add(jl2);
add(jl3);
add(jpf1);
add(jpf2);
add(jl4);
this.setSize(400,400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
publicstaticvoid main(String[] args) {
new Change(account);
}
publicvoid actionPerformed(ActionEvent e) {
try{
if(e.getSource()==jb1){
String s1=new String(jpf1.getPassword());
String s2=new String(jpf2.getPassword());
if(!s1.equals(s2)){
JOptionPane.showConfirmDialog(this,
"两次填写密码不同,请重新输入正确的密码!",
"提示",JOptionPane.OK_CANCEL_OPTION );
jpf2.setText(null);
return;
}
elseif(s1.equals("")||s2.equals("")) {
JOptionPane.showMessageDialog(this,"密码不能为空!");
}
elseif(s1.equals(s2)&&!s1.equals("")&&!s2.equals("")) {
//把新密码保存在Account类里,重新登录时,即可用该密码
account.setPwd(s2);
JOptionPane.showMessageDialog(this,"密码修改成功!");
}
}
elseif(e.getSource()==jb2){//取消登陆
jpf1.setText(null);
jpf2.setText(null);
}
elseif(e.getSource()==jb3){//返回主页面
new Main(account);
this.setVisible(false);
}
}catch(Exception ex){
}
}
}
7. 1.Yuxia.java//保存文件的卡号,密码,和账户金额
package client;
import javax.swing.*;
import java.net.URL;
import java.awt.*;
import java.awt.event.*;
publicclass Yuxia extends JFrame implements ActionListener{
JLabel jl1,jl2,jl3,jl4;
JTextField jtf1,jtf2;
JButton jb,jb1;
static Account account;
public Yuxia(Account account){
super("查询余额");
this.account=account;
setLayout(null);
jl1=new JLabel("查询余额");
Font f=new Font("宋体",Font.PLAIN,40);
jl1.setForeground(Color.red);
jl1.setFont(f);
jl2=new JLabel("账户余额:");
jl2.setFont(new Font("黑体", Font.BOLD, 16));
jl2.setForeground(Color.BLUE);
jl3=new JLabel("可用余额:");
jl3.setFont(new Font("黑体", Font.BOLD, 16));
jl3.setForeground(Color.BLUE);
jtf1=new JTextField();
jtf1.setEditable(false);
jtf2=new JTextField();
jtf2.setEditable(false);
jb1=new JButton("查看余额");//点击”查看余额“按钮
jb1.addActionListener(this);
jb=new JButton("返回主页面");
jb.addActionListener(this);
//添加图片
jl4= new JLabel();
URL resource = this.getClass().getResource("/images/6.jpg");
ImageIcon bgImage=new ImageIcon(resource); //创建图标
jl4.setIcon(bgImage);
jl4.setBounds(0,0,400,400);
jl1.setBounds(105, 15, 225, 41);
jl2.setBounds(35,110 ,140 ,40 );
jl3.setBounds(35,190 ,160 ,40 );
jtf1.setBounds(160, 115, 170, 30);
jtf2.setBounds(160, 195, 170,30 );
jb1.setBounds(30,270 ,120 ,40);
jb.setBounds(240, 270,120 ,40 );
this.add(jl1);
this.add(jl2);
this.add(jl3);
this.add(jtf1);
this.add(jtf2);
this.add(jb1);
this.add(jb);
this.add(jl4);
this.setSize(400,400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
publicvoid actionPerformed(ActionEvent e) {
if(e.getSource()==jb1){
jtf1.setText((account.getCountmoney())+"");
jtf2.setText((account.getCountmoney())+"");
}
if(e.getSource()==jb){
new Main(account);
this.setVisible(false);
}
}
publicstaticvoid main(String[] args) {
new Yuxia(account);
}
}
8. Account.java//保存文件的卡号,密码,和账户金额
package client;
publicclass Account {
String ip,pwd;
int countmoney;
public Account(String ip, String pwd, int countmoney) {
super();
this.ip = ip;
this.pwd = pwd;
this.countmoney = countmoney;
}
public String getIp() {
return ip;
}
publicvoid setIp(String ip) {
this.ip = ip;
}
public String getPwd() {
return pwd;
}
publicvoid setPwd(String pwd) {
this.pwd = pwd;
}
publicint getCountmoney() {
return countmoney;
}
publicvoid setCountmoney(int countmoney) {
this.countmoney = countmoney;}}