java课设atm机.docx
《java课设atm机.docx》由会员分享,可在线阅读,更多相关《java课设atm机.docx(35页珍藏版)》请在冰豆网上搜索。
java课设atm机
软件学院
课程设计报告书
课程名称面向对象程序课程设计
设计题目ATM柜员机模拟程序
专业班级
学号
姓名
指导教师
2013年6月
1设计时间
2013年06月8日至2013年06月14日
2设计目的
《面向对象程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。
JAVA程序设计的设计加深了学生对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用。
本次面向对象程序课程设计目标为:
通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高学生的应用能力。
通过此次课程设计巩固所学Java语言基本知识增进Java语言编辑基本功掌握JDK等开发工具的运用拓宽常用类库的应用。
通过该环节与课程及相关知识加以融会贯通全面掌握Java语言的编程思想及面向对象程序设计的方法为今后从事实际工作打下坚实的基础。
通过实践加深学生对面向对象程序设计的类、对象、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,帮助学生建立面向对象的思维模式。
在实践中,通过对Java程序的调试,提高学生分析程序中出现的错误和解决这些错误的能力。
3设计任务
题目:
ATM柜员机模拟程序
要求:
使用图形用户界面。
当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行:
(1)查询余额功能:
初始余额为10000元。
(2)ATM取款功能:
每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。
(3)ATM存款功能:
不能出现负存款。
(4)修改密码:
新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。
4设计内容
4.1概要设计
4.1.1设计思想
ATM机主要包括登陆模块,注册设计模块,选择服务模块,取款模块,存款模块,查询模块,修改密码模块等几个功能模块。
其中:
(1)登陆模块设计:
提示用户输入卡号和密码的信息,要是用户输入的密码有错误,ATM将会提醒您的密码输入错误,请重新输入,ATM允许用户输入三次密码,若第三次输入也错误,机器将会吞卡。
如果用户密码输入正确,点击确认将会进入选择服务的界面。
(2)选择服务模块设计:
该界面显示ATM柜员机的基本功能,如:
取款,存款,查询余额,修改密码,退出。
当用户选择其中任何一个功能时会进入对应界面,若选择退出功则将会退出登录界面。
(3)取款模块设计:
限制取款金额,即每次取款金额为100的倍数,不为负数,总额不超过5000元,支取金额不允许透支。
(4)修改密码模块设计:
修改密码界面要求新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。
(5)注册界面设计:
当新用户使用ATM机时,注册用户。
用户名不得与已存在用户同名,且密码长度不小于6位,不允许出现6位完全相同。
4.1.2实现方法
ATM柜员机主要是由各个Windows窗口组成,它是由登录页面、选择服务、取款、查询余额、修改密码和退卡等功能。
它的各种按钮的事件和功能可以简单的模拟ATM柜员机的要求。
4.1.3程序所能达到的功能
运用了事件监听技术来实现ATM的各种功能例如:
存款、取款、修改密码、查询。
通过使用图形用户界面的设计思路,以方便用户操作,同时也使的程序更加简单。
4.2总体设计
4.2.1Java类和自定义类的层次关系
如图4-1
图4-1
MF类、denlu类、qukuan类、cunkuan类、chaxun类和gaimi类都继承了Java类的JFrame类。
4.2.1自定义类的说明
(1)ClassAccount创建客户,初始化客户信息功能以及保存客户信息,例如:
卡号、密码、原有余额、取款后卡里的余额以及存款后卡里的余额。
此类中包含的成员有:
成员变量code,mima,money和构造方法Account(),获得用户卡号方法get_Code(),获得用户密码方法get_Mima(),获得用户信用卡的金额方法get_Money(),设置取款后的账户余额方法set_Balance(),设置存款后的账户余额方法reccount(),设置修改密码的方法gaimi()。
(2)ClassMF实现登录的界面,如果卡号和密码匹配就可以登录到主界面否则报错。
它的成员有:
P1,P2,L1,L2,L3,password,B1,B2,TF1,content,a[]和构造方法MF和事件监听方法actionPerformed()。
(3)ClassZC实现新用户注册界面,如果注册用户名出现重复进行提示。
注册成功后进入服务界面。
它的成员有:
p1,p2,p3,p4,b1,l1,l2,l3,t1,password,content,v和构造方法ZC和事件监听方法actionPerformed()。
(4)Classdenlu实现功能的主界面,它的成员有:
P3,P4,B1,B2,B3,B4,B5,content,key和构造方法denlu和事件监听方法actionPerformed()。
(5)Classqukuan实现取款的界面,如果每次取款金额不为100的倍数,总额超过500元,支取金额透支则报错。
它的成员有:
P1,P2,L1,B1,B2,TF1,content,key和构造方法qukuan和事件监听方法actionPerformed()。
(6)Classcunkuan实现存款的界面,如果输入存款数为负款则报错。
它的成员有:
P1,P2,L1,B1,B2,TF1,content,key和构造方法cunkuan和事件监听方法actionPerformed()。
(7)Classchaxun实现查询余额的界面,它的成员有:
P1,P2,L1,B1,content,key和构造方法cunkuan和事件监听方法actionPerformed()。
(8)Classgaimi实现查询余额的界面,如果新密码长度不小于6位,没出现6位同的情况,旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码否则报错。
它的成员有:
P1,P2,L1,L2,L3,TF1,TF2,TF3,B1,B2,content,key和构造方法cunkuan和事件监听方法actionPerformed()。
除Account类之外,其他的类均实现ActionListener接口。
4.3详细设计
4.3.1程序代码:
importjavax.swing.*;
importjavax.swing.event.*;
importjava.awt.*;
importjava.awt.event.*;
importjava.util.*;
classAccount
{
staticStringcode=null;//信用卡号
staticStringmima=null;//用户密码
staticintmoney=0;//信用卡里金额
publicAccount(Stringcode,Stringmima,intmoney)//构造函数
{
this.code=code;
this.mima=mima;
this.money=money;
}
protectedStringget_Code()//获取用户信用卡号
{
returncode;
}
protectedStringget_mima()//获得用户密码
{
returnmima;
}
publicintget_Money()//获得用户信用卡里金额
{
returnmoney;
}
protectedvoidset_Balance(doublemon)//设置取款后的账户余额
{
money-=mon;
}
publicvoidreccount(doublemon)//设置存款后的账户余额
{
money+=mon;
}
Stringgaimima(Stringmi)//修改密码方法
{
mima=mi;
returnmima;
}
}
classMFextendsJFrameimplementsActionListener//导入接口类
{
JTextFieldt1;
JLabell1,l2,l3,l4;
JButtonb1,b2,b3;
JPasswordFieldpassword;
JPanelp1,p2,p3,p31,p32,p33,p321,p322;
Account[]a=newAccount[100];
intv;
publicstaticvoidmain(Stringargs[])
{
newMF();
}
publicMF()
{
a[0]=newAccount("shishi","123456",10000);
intv=1;
this.setSize(500,300);
password=newJPasswordField(12);
t1=newJTextField(10);
l1=newJLabel("用户");
l2=newJLabel("密码");
l3=newJLabel("未注册用户请注册");
l4=newJLabel("欢迎使用ATM");
b1=newJButton("注册");
b2=newJButton("确定");
b3=newJButton("取消");
b1.addActionListener(this);//B1申请监听
b2.addActionListener(this);//B2申请监听
QXqx=newQX(t1,password);
b3.addActionListener(qx);//B3申请监听
setLayout(newGridLayout(3,1));//布局管理
p1=newJPanel();
p2=newJPanel();
p3=newJPanel();
this.add(p1);
this.add(p2);
this.add(p3);
p3.setLayout(newGridLayout(1,3));
p31=newJPanel();
p32=newJPanel();
p33=newJPanel();
p3.add(p31);
p3.add(p32);
p3.add(p33);
p32.setLayout(newGridLayout(1,2));
p321=newJPanel();
p322=newJPanel();
p32.add(p321);
p32.add(p322);
p1.add(l4);
p2.add(l1);
p2.add(t1);
p2.add(l2);
p2.add(password);
p2.add(l3);
p2.add(b1);
p321.add(b2);
p322.add(b3);
p1.setBackground(Color.pink);
p2.setBackground(Color.pink);
p31.setBackground(Color.pink);
p321.setBackground(Color.pink);
p322.setBackground(Color.pink);
p33.setBackground(Color.pink);
this.addWindowListener(newMyWindowMonitor());
this.setVisible(true);
}
publicvoidactionPerformed(ActionEvente)//监听类
{
if(e.getSource()==b1)//判断是否是b1
{
newZC(v,a);//进入qukuan
setVisible(false);
}
if(e.getSource()==b2)//判断是否是b1
{
Stringx=t1.getText();//把TF1的值强制转换成字符
if(x.equals(a[0].code))//检查到开始判断是否匹配
{
for(inti=1;i<=3;i++)//利用for循环来判断错误密码输入次数
{
if(password.getText().equals(a[0].mima))//名字匹配成功后判断密码是否成功
{
newdenlu(a[0]);//密码输入正确后进入denlu的界面
setVisible(false);
}
else
{
JOptionPane.showMessageDialog(null,"对不起密码错误"+"\n您还有"+(3-i)+"次机会,否则将会吞卡!
");//密码错误弹出提示密码错误框
}
break;
}
}
}
}
}
classMyWindowMonitorimplementsWindowListener//窗口监听
{
publicvoidwindowActivated(WindowEvente)
{}
publicvoidwindowClosed(WindowEvente)
{}
publicvoidwindowClosing(WindowEvente)
{
System.exit(-1);
}
publicvoidwindowDeactivated(WindowEvente)
{}
publicvoidwindowDeiconified(WindowEvente)
{}
publicvoidwindowIconified(WindowEvente)
{}
publicvoidwindowOpened(WindowEvente)
{}
}
classZCextendsJFrameimplementsActionListener
{
JPanelp1,p2,p3,p4;
JButtonb1;
JLabell1,l2,l3;
JTextFieldt1;
JPasswordFieldpassword;
Containercontent;
intv,j;
Accounta[];
publicZC(intv,Accounta[])
{
this.v=v;
this.a=a;
p1=newJPanel();
l1=newJLabel("用户注册");
p1.add(l1);
p2=newJPanel();
l2=newJLabel("姓名");
t1=newJTextField(10);
p2.add(l2);
p2.add(t1);
p3=newJPanel();
l3=newJLabel("密码");
password=newJPasswordField(12);
p3.add(l3);
p3.add(password);
p4=newJPanel();
b1=newJButton("确定");
b1.addActionListener(this);
p4.add(b1);
p1.setBackground(Color.pink);
p2.setBackground(Color.pink);
p3.setBackground(Color.pink);
p4.setBackground(Color.pink);
content=this.getContentPane();//布局定义
content.setLayout(newGridLayout(4,1));
content.add(p1);
content.add(p2);
content.add(p3);
content.add(p4);
this.pack();
this.setLocation(100,100);
this.setTitle("用户注册");
this.setSize(500,300);
this.setResizable(false);
this.show();
}
publicvoidactionPerformed(ActionEventevent)//接口监听
{
Stringx=t1.getText();
for(intj=0;j{
if(x.equals(a[j].code))
{
JOptionPane.showMessageDialog(null,"该用户已存在,请重新命名");
t1.setText("");
}
else
{
a[v]=newAccount(null,null,0);
a[v].code=x;
a[v].mima=password.getText();
a[v].money=5000;
JOptionPane.showMessageDialog(null,"注册成功");
}
}
newdenlu(a[j]);
setVisible(false);
}
}
classQXimplementsActionListener
{
JTextFieldn1;
JPasswordFieldn2;
publicQX(JTextFieldn1,JPasswordFieldn2)
{
this.n1=n1;
this.n2=n2;
}
publicvoidactionPerformed(ActionEvente)
{
n1.setText("");
n2.setText("");
}
}
classdenluextendsJFrameimplementsActionListener//导入接口类
{
JPanelp2,p3,p4;
JButtonb1,b2,b3,b4,b5;
JLabell1;
Containercontent;
Accountkey;//定义客户类传从参数key
publicdenlu(Accountkey)
{
this.key=key;//把key传到顶层容器
p2=newJPanel();
l1=newJLabel("欢迎进入用户界面");
p2.add(l1);
p3=newJPanel();
b1=newJButton("取款");
b1.addActionListener(this);//b1申请监听
b2=newJButton("存款");
b2.addActionListener(this);//b2申请监听
b3=newJButton("查询余额");
b3.addActionListener(this);//b3申请监听
b4=newJButton("修改密码");
b4.addActionListener(this);//b4申请监听
p3.add(b1);
p3.add(b2);
p3.add(b3);
p3.add(b4);
p4=newJPanel();
b5=newJButton("退出");
b5.addActionListener(//定义一个匿名类
newActionListener()
{
publicvoidactionPerformed(ActionEventevent)
{
System.exit(0);//退出登陆
}
}
p4.add(b5);
p2.setBackground(Color.pink);
p3.setBackground(Color.pink);
p4.setBackground(Color.pink);
content=this.getContentPane();//布局定义
content.setLayout(newGridLayout(3,1));
content.add(p2);
content.add(p3);
content.add(p4);
this.pack();
this.setLocation(100,100);
this.setTitle("ATM");
this.setSize(500,300);
this.setResizable(false);
this.show();
}
publicvoidactionPerformed(ActionEventevent)//接口监听
{
if(event.getSource()==b1)//判断是否是b