java课程设计报告自动取款机程序要点文档格式.docx
《java课程设计报告自动取款机程序要点文档格式.docx》由会员分享,可在线阅读,更多相关《java课程设计报告自动取款机程序要点文档格式.docx(74页珍藏版)》请在冰豆网上搜索。
(2)登陆后,用户可以进行查询余额、取款、存款和修改密码的操作;
(3)修改密码时,用户需输入两次新密码,确定无误后方可更改;
(4)取款和存款操作,有操作结果提示,如“操作成功”或“余额不足,操作失败”等。
三、数据库设计
程序中包括用户客户端和管理客户端,所以在数据库中需要设计用户信息表和管理员信息表分别来保存用户信息和管理员信息。
表1用户信息表(userse)
列名
数据类型及长度
是否为空
主键
说明
FID
varchar
NO
用户帐号
FName
用户名
FPsw
用户密码
FMon
钱数目
表2管理员信息表(gl)
管理员帐号
管理员密码
四、系统设计
1、总体设计
我所设计的ATM机主要是由登录页面模块还由选择服务模块组成,在登录时可选择用户登录或管理员登陆。
其中用户的选择服务模块由取款模块、存款模块、查询余额模块、修改密码模块、转账模块、退卡模块组成,管理员的选择服务模块由开户模块、销户模块、修改个人密码模块退出模块组成。
其功能结构图如下所示:
用户模块结构图
2、ATM柜员机界面设计
我觉得一个系统的界面应该要简单明了,当然样式美观就更好了。
我设计的界面主要是由窗体组成,操作简单。
而每一个窗口则执行相应的功能。
一个系统界面的好坏直接影响到用户的操作,界面设计要求样式美观、简单明了、方便易操作。
我设计的界面主要分为窗体、菜单、按钮和文本输入框几个部分,分别执行相应的操作。
(1)窗体的设计
窗体整个框架使用JFrame类构造,JFrame有自己的外边框和自己的标题,创建JFrame时可以指定其窗口标题,我创建的窗口标题是各个不同功能的模块的名字,比如说查询余额窗口,取款窗口等。
(2)窗体的主要结构的设计
我所设计的窗口的主要结构的特点就是每个窗口都对应着一个特定的功能。
比如说报各种各样的错,还有各种查询余额、取款、选择服务等,所以它们都是由各种按钮和文本框,标签组成的,而联系各个窗体成为一个整体的就是各个按钮的监听事件,另外所有窗口布局均为网格布局。
为了定义各个按钮所对应的命令和操作,首先需要将各个按钮注册给实现了动作事件的监听接口ActionListener的监听者,然后为监听者定义actionPerformed(ActionEvente)方法,在这个方法中调用e.getSource()或e.getActionCommand()来判断用户点击的菜单子项,并完成这个菜单子项定义的操作。
3、各功能模块设计
3.1登录页面模块设计
用户进入登录页面后要输入账号和密码,点击确定后系统会通过连接数据库验证密码是否正确,在密码正确的情况下界面跳转到功能选择界面,否则弹出警告密码错误窗口。
我定义了文本框累的对象FI,FPs。
主要是用于输入单行的文本;
文本区调用publicStringgetText()方法,获取用户想要的字符串。
因为要区分登录者是用户还是管理员,所以设置了两个JRadioButton来确定登录者的身份。
当登录者选择的身份为用户时通过Alogin()类驱动加载数据库,从用户表中获取相关信息并与用户输入信息比较,信息相符时登录成功,否则弹出警告窗口。
部分源码如下;
if(gl.isSelected())
{
DatabaseOperatemyLogin=newDatabaseOperate();
//连接数据库及相关操作
s=myLogin.Alogin(FI.getText().trim());
if((FI.getText().trim().equals(s[0].trim()))&
&
(FPs.getText().trim().equals(s[1].trim()))){
JOptionPane.showMessageDialog(null,”您好,AdministratorWelcome~!
"
);
dispose();
//关闭登录窗口
newAdminFrame();
//调出管理员操作窗口
}else{
JOptionPane.showMessageDialog(null,"
用户名或密码错误,请重新登录!
"
警告"
JOptionPane.ERROR_MESSAGE);
}
}
当登录者选择身份为管理员时身份验证源码如下:
elseif(us.isSelected()){
DatabaseOperatemyLogin=newDatabaseOperate();
s=myLogin.login(FI.getText().trim());
if((FI.getText().trim().equals(s[0].trim()))&
欢迎普通用户,登录成功!
dispose();
newMainFrame();
//调出主操作窗口
}else{
}}
图1登录窗口
3.2选择服务模块设计
在选择服务模块中,有各种ATM的服务功能,只要用户在该界面中选择按钮,它就会弹出各个相应的界面。
每一个按钮都有监听器,在选择了按钮后,java.awt.event中的ActionEvent类创建一个事件对象,并将它传递给方法publicvoidactionPerformed(ActionEvente)中的参数e,监视器就会知道所发生的事件,对此事件进行处理。
其中的部分源代码为:
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==deposit){
dispose();
newDepositFrame();
}elseif(e.getSource()==get){
newGetFrame();
}elseif(e.getSource()==transfer){
dispose();
newTransferFrame();
}elseif(e.getSource()==change){
newChange();
}elseif(e.getSource()==search){
DatabaseOperatemySearch=newDatabaseOperate();
String[]t=newString[2];
t=mySearch.schbalance(BankSystem.s[0].trim());
FMo.setText(t[1]);
}elseif(e.getSource()==exit){
JOptionPane.showMessageDialog(null,"
请取回您的磁卡!
}}
图2主操作窗口
3.3取款模块设计
在取款模块有两个取款窗口,取款窗口1和取款窗口2。
在取款窗口1中用户可以直接点击固定金额对应的按钮进行取款,当然了取款的时候也不能超过卡里的余额,否则就会弹出报错的窗口。
取款窗口1部分源代码如下:
DatabaseOperatemyGet=newDatabaseOperate();
String[]t=newString[2];
if(e.getSource()==money1){
Integermoneyi=100;
Stringmoney=moneyi.toString();
t=myGet.schbalance(BankSystem.s[0].trim());
if(100<
=Double.parseDouble(t[1].trim())){
myGet.get(money,BankSystem.s[0].trim());
JOptionPane.showMessageDialog(null,"
成功取款100元!
dispose();
newMainFrame();
}else
JOptionPane.showMessageDialog(null,
"
取款失败,您金额不足!
"
JOptionPane.ERROR_MESSAGE);
图3取款窗口1
当用户想要取款金额不存在对应的按钮时,用户可以点击其他面值按钮,然后系统将会关闭当前窗口弹出取款窗口2,在该窗口用户可以再文本框里输入任意整百的金额进行取款操作。
部分源代码如下:
if(e.getSource()==ok){
intmoney;
StringmyText;
myText=moneyField.getText();
money=Integer.parseInt(myText);
if(money%100==0){
t=myGet.schbalance(BankSystem.s[0].trim());
if(Double.parseDouble(moneyField.getText())<
myGet.get(moneyField.getText().trim(),BankSystem.s[0].trim());
取款成功!
newMainFrame();
}else
JOptionPane.showMessageDialog(null,"
JOptionPane.ERROR_MESSAGE);
请重新输入,请输入整百的数!
moneyField.setText(null);
}
图4取款窗口2
3.4存款模块设计
在存款模块中,用e.getSource()方法获取用户在文本框中输入的金额,然后调用DatabaseOperate()类的deposit(String,String)方法来更新数据库里的相关信息。
deposit(String,String)方法的源代码如下:
publicString[]deposit(Stringmoney,Stringnum){
DatabaseConnDB=newDatabaseConn();
this.FMon=money;
this.FID=num;
t=schbalance(FID);
doubletemp=Double.parseDouble(t[1].trim())
+Double.parseDouble(FMon);
sql="
updateusersesetFMon="
+temp
+"
whereFID="
+Integer.parseInt(t[0].trim())+"
"
;
try{DB.OpenConn();
DB.executeUpdate(sql);
}catch(Exceptione){
System.out.println(e);
JOptionPane.showMessageDialog(null,"
存款失败!
}finally{
DB.closeStmt();
DB.closeConn();
}returnt;
}
图5存款窗口
3.5修改密码模块设计
在修改密码模块中,首先你必须要输入你的旧密码是否正确,否则就会报错。
再一个就是要两次输入你的新密码,且两次要匹配,否则也会报错,然后再重新回到修改密码的界面。
在修改密码时用到的方法为:
DatabaseOperatemyChan=newDatabaseOperate();
if(e.getSource()==ok){//单击确定按钮后,判断两次输入的新密码是否一致
if(FPs1.getText().trim().equals(FPs2.getText().trim())){
myChan.change(FPs1.getText().trim(),BankSystem.s[0].trim());
JOptionPane.showMessageDialog(null,"
密码修改成功!
newMainFrame();
}
else{
JOptionPane.showMessageDialog(null,"
您再次输入的密码不一致,请重新输入!
!
图6用户修改密码窗口
3.6转账模块设计
在该模块中用两个文本框分别获取转账对方的账号和转账金额,通过Catch()方法连接数据库检索对方账号是否存在,在对方账号存在的情况下在调用schbalance()方法查看本人账户金额是否充足,若充足则调用get()和deposit()方法分别对本人账户进行取款操作对对方账户进行取款操作。
部分代码如下:
if(Double.parseDouble(moneyField.getText().trim())<
=Double.parseDouble(t[1].trim())){
myTransfer.get(moneyField.getText().trim(),BankSystem.s[0].trim());
//本人相当于取钱
myTransfer.deposit(moneyField.getText().trim(),FI.getText().trim());
//对方相当于存钱
JOptionPane.showMessageDialog(null,"
转账成功!
}elseJOptionPane.showMessageDialog(null,"
转账失败,您卡上余额不足!
}
图7转账窗口
3.7查询余额模块设计
查询余额功能是在主操作窗口中实现的,当用户点击查询余额按钮时在下面的文本框中显示出该账号的当前余额。
图8查询余额窗口
3.8管理员操作模块设计
管理员登录后可以进行的操作有开户、销户、修改个人密码。
在开户操作时要先检查新的账户是否已经存在,销户时可以先查询被销账户中的余额。
图9管理员操作窗口
开户部分代码如下:
info[0]=FID.getText().trim();
info[1]=FName.getText().trim();
DatabaseOperatemycatch=newDatabaseOperate();
a=mycatch.Catch(FID.getText().trim());
if(a==false){
DatabaseOperateinsertTable=newDatabaseOperate();
Stringsqluserse="
insertintouserse(FID,FName,FPsw,FMon)"
+
values('
+info[0]+"
'
'
+info[1]+"
+123456+"
'
+0+"
)"
insertTable.Insert(sqluserse);
客户信息已添加!
newAdminFrame();
}else{
此帐号已存在,请重新输入!
FID.setText(null);
FName.setText(null);
图10开户窗口
销户部分代码如下:
if(e.getSource()==logoff){//将找到的相关信息,删除
Stringdeluserse="
deletefromusersewhereFID="
+Integer.parseInt(FID.getText().trim())+"
myLogoff.Insert(deluserse);
客户所有信息已删除~!
newAdminFrame();
}elseif(e.getSource()==search){
DatabaseOperatemySearch=newDatabaseOperate();
t=mySearch.schbalance(FID.getText().trim());
FMo.setText(t[1])
图11销户窗口
图12管理员个人密码修改窗口
五、设计中遇到的问题
在此次课程设计中,我遇到了一些问题,如:
对于面向对象的方法了解不够透彻,运用到实际的软件开发中存在着困难;
对于Java语言,只学习到了一些最基本的知识,这导致编写程序时经常出现一些语法错误,而且要在短时间内用Java语言来设计一个具体的系统是一个较大的挑战;
还有对于正规开发一个系统的流程不熟悉,适应起来比较慢,编写各个模块相对应的操作时,自己感觉难以动手,这表明所学的知识不能灵活运用到实际中。
尤其是连接数据库的相关操作感觉更加困难,在此也花了很长时间。
对于以上的问题,自己有清楚的认识,解决办法是需要大量阅读相关的书籍,对于书上以及网站上下载的资料中的Java实例必须有清楚的理解,还有就是多跟精通此方面的老师和同学交流,取其精华。
对于实际动手能力与系统开发的流程的适应,必须多进行实际的练习与操作,才能有大的进步。
六、设计体会
在这次的课程设计中,主要是运用JAVA语言来编写一个小的应用程序,当然还可以用其他的技术来辅助了。
在这个小应用程序当中,我用了Java外还用了Swing控件。
由于以前学的不是很扎实,而且还有些知识我们都是没有学过的,这就要求我们去查相关的书籍,还有就是和同学之间的交流。
正因为这样,才锻炼了我的自学的能力,还有就是加深了我对各个知识点的认识,并且提高了我对专业的学习的兴趣,为我以后的学习打下了基础。
此外,我还感受到了面向对象语言的类库的强大的功能,掌握了运用JAVA中的类实现某些基本功能,并学会了自己查询使用类的方法,也就是要会用API文档,为以后更好的学习面向对象语言奠定了基础。
七、参考文献
[1]王桂彬、刘家兰,JAVA大学教程[M].清华大学出版社2008
[2]印昊,JAVA与面向对象程序设计[M].高等教育出版社2004
[3]李尊朝,JAVA语言程序设计[M].中国铁道出版社2004
[4]丁诚.JAVA完全自学手册[M].机械工业出版社2010
八、源代码
————————————登录相关代码————————————
packageabc;
importjava.awt.Color;
importjava.awt.Container;
importjava.awt.Font;
importjava.awt.GridLayout;
importjava.awt.TextField;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.ButtonGroup;