JavaATM自动取款机.docx
《JavaATM自动取款机.docx》由会员分享,可在线阅读,更多相关《JavaATM自动取款机.docx(19页珍藏版)》请在冰豆网上搜索。
![JavaATM自动取款机.docx](https://file1.bdocx.com/fileroot1/2022-12/31/e43ddeb0-9ba0-44b7-a268-b730070ed8cb/e43ddeb0-9ba0-44b7-a268-b730070ed8cb1.gif)
JavaATM自动取款机
Java课程设计报告
项目:
ATM自动取款机
姓名:
学号:
10592127
班级:
10级网络一班
分数:
角色
姓名
学号
任务分配
组长
10592127
数据库连接,主页代码,取款,查询,系统提示,和整理代码。
组员
10592235
欢迎界面,登陆界面,
修改密码,退出界面
项目说明
第一部分、项目整体概述………………………………………………页
第二部分、数据库信息描述……………………………………………页
第三部分、自己承担部分的实验报告………………………………页
第四部分、心得体会……………………………………………………页
一、项目整体概述
我们的ATN机系统设计的实现根据结构程序设计原理,将每个模块的功能用相应的标准语句表示出来。
包括代码设计、数据库设计、用户界面设计、处理过程设计。
代码设计是指把系统管理对象数字化或字符化,便于计算机的处理。
遵照代码设计的原则:
合理性、简明性、系统性、稳定性、可扩充性、标准化、便于识别和记忆。
数据库设计指对系统所采用的数据模式、子模式、应用程序、数据库等根据用户的具体要求进行分析和设计。
它也是管理信息系统设计的重要组成部分。
数据库设计的基本原则是尽可能提高数据组织的相对独立性,简化其结构,即用规范化方法设施数据存储的结构,提高数据的可维护性、完整性、一致性。
通过收集和分析用户需求,确定了数据库要保存的信息。
我们这次实训课设计的ATM机,主要应用java图形用户界面开发的知识,主要界面有欢迎界面,登陆界面,选择业务界面和退出,其中选择业务界面又包括修改密码,取款服务和查询余额。
能让人们通过我们的设计完成想要的操作。
为人们带来方面。
(1)模拟ATM柜员机程序;
(2)欢迎界面点击Login(登录)跳到登陆界面,点击quit(退出)则退出。
(3)登陆界面包括输入卡号和密码,不正确时则不能进入提示没有该用户名称或密码错误,请核对后重新输入。
当密码和用户名都正确时则进入选择服务界面。
(4)选择页面可以选择修改密码,查询余额,和取款3个服务。
(2)修改密码。
当用户需要修改密码时,可以用这个功能,新密码不能为空,确定密码时不能为空,旧密码必须正确,且新密码和确定密码两次输入相同的情况下才可以成功修改密码。
(3)取款。
用户根据自己需要取多少钱,点击自定义按钮输入要取的金额,每次取款金额为大于0的数就可以了,但取款金额不允许透支。
还可以点击按钮进行取款,如果选择的金额大于自己账户的金额则提示金额不足。
(4)查询余额。
用户需要知道自己账户还剩多少钱时,可以查询自己账户的余额。
实验流程图如下:
二、数据库信息描述
建立的数据库是根据代码的完成建立的其数据库为ATM,表名为guest。
在表中建立id字段其类型为自动编号,并设置其为主键,用户名字段为gid,密码字段为pwd,金额字段为gmoney。
在表中分别输入我的和组员信息。
金额类型为数字。
建立好数据库知道连接到程序中运行即可。
三、自己承担部分的实验报告
连接数据库现在控制面板管理工具中建立数据源
连接数据库代码为
importjava.sql.*;
importjava.io.*;
publicclassdataAccess
{privateConnectionconn;
privateStatementstmt;
publicdataAccess()//构造函数设置连接数据库
{try
{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Stringdburl="jdbc:
odbc:
driver={MicrosoftAccessDriver(*.mdb)};DBQ=Data\\atm.mdb";
conn=DriverManager.getConnection(dburl);
stmt=conn.createStatement();
}
catch(Exceptione1)
{System.out.println(e1.toString());}}
publicResultSetgetData(Stringsqlstr)//返回查询的数据集
{try
{ResultSetrs=this.stmt.executeQuery(sqlstr);
returnrs;}
catch(Exceptione)
{System.out.println(e.toString());
returnnull;
}}
publicintgetRowcount(Stringsqlstr)
{inti=0;
try
{ResultSetrs=this.getData(sqlstr);
while(rs.next())i++;}
catch(Exceptione)
{System.out.println(e.toString());
}
finally
{returni;
}}
publicbooleanexeSql(Stringsqlstr)//执行无返回的SQL语句
{try
{stmt.execute(sqlstr);
returntrue;}
catch(Exceptione)
{System.out.println(e.toString());
returnfalse;}}
publicvoidsleep(intsecond)
{try
{Threadth=newThread();
th.sleep(second*1000);}
catch(Exceptione)
{System.out.println(e.toString());
}}
protectedvoidfinalize()//析构函数
{try
{if(stmt!
=null)stmt.close();
if(conn!
=null)conn.close();}
catch(Exceptione)
{}
}}
选择服务界面:
它是由取款,查询金额,和修改密码构成点击按钮的时候跳到相应的界面有四个按钮分别布局于东西南北四个方向,选择服务字放在中间。
选择服务页面代码:
publicvoidshowMenu()
{
PnlMenu=newPanel();
GridLayoutgdo3=newGridLayout(4,3,4,3);
Labelalbl=newLabel("请选择业务");
//albl.setBackground(Color.green);
albl.setAlignment(Label.CENTER);
a1=newButton("1、取款服务");a2=newButton("2、查询余额");
a3=newButton("3、修改密码");a4=newButton("4、退出");
a1.addActionListener(this);a3.addActionListener(this);
a2.addActionListener(this);a4.addActionListener(this);
PnlMenu.setLayout(gdo3);
PnlMenu.add(albl);PnlMenu.add(a1);
PnlMenu.add(a2);PnlMenu.add(a3);
PnlMenu.add(a4);
a1.setSize(200,200);
a2.setSize(600,200);
a3.setSize(200,200);
a4.setSize(600,200);
albl.setSize(200,200);
a1.setFont(newFont("楷体",Font.BOLD,18));
a2.setFont(newFont("楷体",Font.BOLD,18));
a3.setFont(newFont("楷体",Font.BOLD,18));
a4.setFont(newFont("楷体",Font.BOLD,18));
albl.setFont(newFont("楷体",Font.BOLD,24));
albl.setForeground(Color.red);
PnlMenu.setLayout(newBorderLayout());
PnlMenu.add(a1,BorderLayout.WEST);
PnlMenu.add(a4,BorderLayout.SOUTH);
PnlMenu.add(a2,BorderLayout.NORTH);
PnlMenu.add(a3,BorderLayout.EAST);
PnlMenu.add(albl,BorderLayout.CENTER);
}
用于点击按钮跳转到页面代码:
if(e.getSource()==a1)//进入取款界面
{
clt.show(fram,"Getmoney");
return;
}
if(e.getSource()==a2)//进入余额查看界面
{
floatmleft=act.queryBalance(gid);
lbleft.setText("帐号余额为:
¥"+mleft);
lbleft.setFont(newFont("楷体",Font.BOLD,15));
clt.show(fram,"Queryleft");
return;
}
if(e.getSource()==a3)//进入密码修改界面
{
clt.show(fram,"Chgpwd");
return;
}
取款页面可以根据想要去的金额去点击按钮取钱,也可以输入自定义金额取钱,但两种方法都不能透支。
取款页面代码:
publicvoidshowGetMoney()
{
PnlGetmoney=newPanel();
GridLayoutgdo4=newGridLayout(4,2);
PnlGetmoney.setLayout(newBorderLayout());
Labelblbl=newLabel("请选择取款金额");
blbl.setFont(newFont("楷体",Font.BOLD,24));
msg3=newLabel("");
p1=newPanel();
b1=newButton("100");b2=newButton("500");
b3=newButton("1000");b4=newButton("3000");
b5=newButton("5000");b6=newButton("自定义");
b1.setFont(newFont("楷体",Font.BOLD,15));
b2.setFont(newFont("楷体",Font.BOLD,15));
b3.setFont(newFont("楷体",Font.BOLD,15));
b4.setFont(newFont("楷体",Font.BOLD,15));
b5.setFont(newFont("楷体",Font.BOLD,15));
b6.setFont(newFont("楷体",Font.BOLD,15));
b1.addActionListener(this);b5.addActionListener(this);
b2.addActionListener(this);b6.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b7=newButton("返回");
b7.setFont(newFont("楷体",Font.BOLD,15));
b7.addActionListener(this);
b8=newButton("退出");
b8.setFont(newFont("楷体",Font.BOLD,15));
b8.addActionListener(this);
Panelbpnl1=newPanel();
bpnl1.add(blbl);
Panelbpnl3=newPanel();
bpnl3.add(b7);bpnl3.add(b8);
Panelbpnl2=newPanel();
bpnl2.setLayout(gdo4);
bpnl2.add(b1);bpnl2.add(newLabel());bpnl2.add(b4);
bpnl2.add(b2);bpnl2.add(msg3);bpnl2.add(b5);
bpnl2.add(b3);bpnl2.add(newLabel());bpnl2.add(b6);
bpnl2.add(newLabel());bpnl2.add(bpnl3);bpnl2.add(newLabel());
PnlGetmoney.add(bpnl1,BorderLayout.NORTH);
PnlGetmoney.add(bpnl2,BorderLayout.CENTER);
PnlGetmoney.add(bpnl3,BorderLayout.SOUTH);
}
publicbooleanreduceMoney(Stringtgid,floatmoney)
{
Stringssql;
if(this.queryBalance(tgid)ssql="updateguestsetgmoney=gmoney-"+money+"wheregid='"+tgid+"'";
if(das.exeSql(ssql))returntrue;//扣款成功
elsereturnfalse;//扣款未成功
}
protectedvoidfinalize()//析构函数
{
das.finalize();
}
}
点击对应按钮跳到相应的页面代码机取钱过程代码:
if(e.getSource()==b1)//执行取款100操作
{
if(!
act.reduceMoney(gid,100))
lblMsg.setText("余额不足!
!
");
else
{
lblMsg.setText(mce.printBill(100,gid,act.queryBalance(gid)));
}
nstate=3;
clt.show(fram,"Msg");
return;
}
if(e.getSource()==b2)//执行取款500操作
{
if(!
act.reduceMoney(gid,500))
lblMsg.setText("余额不足!
!
");
else
{
lblMsg.setText(mce.printBill(500,gid,act.queryBalance(gid)));
}
nstate=3;
clt.show(fram,"Msg");
return;
}
if(e.getSource()==b3)//执行取款1000操作
{
if(!
act.reduceMoney(gid,1000))
lblMsg.setText("余额不足!
!
");
else
{
lblMsg.setText(mce.printBill(1000,gid,act.queryBalance(gid)));
}
nstate=3;
clt.show(fram,"Msg");
return;
}
if(e.getSource()==b4)//执行取款3000操作
{
if(!
act.reduceMoney(gid,3000))
lblMsg.setText("余额不足!
!
");
else
{
lblMsg.setText(mce.printBill(3000,gid,act.queryBalance(gid)));
}
nstate=3;
clt.show(fram,"Msg");
return;
}
if(e.getSource()==b5)//执行取款5000操作
{
if(!
act.reduceMoney(gid,5000))
lblMsg.setText("余额不足!
!
");
else
{
lblMsg.setText(mce.printBill(5000,gid,act.queryBalance(gid)));
}
nstate=3;
clt.show(fram,"Msg");
return;
}
if(e.getSource()==b6)//进入手动输入金额取款界面
{
y2.setVisible(true);
msgstr.setText("请输入金额");
msgstr.setFont(newFont("楷体",Font.BOLD,15));
ta.setText("");
msghint.setText("");
clt.show(fram,"input");
return;
}
自定义取款:
if((msgstr.getText().indexOf("金额"))>0)//手动输入金额操作
{
try
{
gmoney=Float.parseFloat(ta.getText());
if(act.reduceMoney(gid,gmoney))
{
lblMsg.setText(mce.printBill(gmoney,gid,act.queryBalance(gid)));
nstate=3;
}
else
{
lblMsg.setText("余额不足!
!
");
lblMsg.setFont(newFont("楷体",Font.BOLD,15));
nstate=3;
}
}
catch(NumberFormatExceptione2)//输入非法的金额
{
lblMsg.setText("您输入的金额错误!
!
!
");
nstate=2;
}
finally
{
clt.show(fram,"Msg");
return;
}
}
}
if(e.getSource()==a4||e.getSource()==b8||e.getSource()==c2||e.getSource()==d2||
e.getSource()==x1||e.getSource()==y1||e.getSource()==quit)//退出系统
{
this.gid="";
this.pwd="";
act.finalize();
dac.finalize();
rcd.exitCard();
}
查询界面;
publicvoidshowQueryLeft()
{
PnlQueryleft=newPanel();
PnlQueryleft.setLayout(newBorderLayout());
Labelclbl=newLabel("帐户余额");
clbl.setFont(newFont("楷体",Font.BOLD,24));
clbl.setAlignment(Label.CENTER);
lbleft=newLabel("");
Panelcpnl1=newPanel();
cpnl1.add(lbleft);
Panelcpnl2=newPanel();
c1=newButton("返回");
c1.setFont(newFont("楷体",Font.BOLD,15));
c1.addActionListener(this);
c2=newButton("退出");
c2.setFont(newFont("楷体",Font.BOLD,15));
c2.addActionListener(this);
//cpnl2.add(edok);Buttonedok=newButton("确定");
cpnl2.add(c1);cpnl2.add(c2);
PnlQueryleft.add(clbl,BorderLayout.NORTH);
PnlQueryleft.add(cpnl1,BorderLayout.CENTER);
PnlQueryleft.add(cpnl2,BorderLayout.SOUTH);
}
publicfloatqueryBalance(Stringgid)
{
ResultSetrs;
Stringssql="select*fromguestwheregid='"+gid+"'";
floatbalance=0;
try
{
rs=das.getData(ssql);
rs.next();
balance=rs.getFloat("gmoney");
}
catch(Excepti