ATM柜员机模拟系统.docx
- 文档编号:8051372
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:19
- 大小:194.95KB
ATM柜员机模拟系统.docx
《ATM柜员机模拟系统.docx》由会员分享,可在线阅读,更多相关《ATM柜员机模拟系统.docx(19页珍藏版)》请在冰豆网上搜索。
ATM柜员机模拟系统
兰州XXXX学院
信息工程系课程设计报告
设计题目:
ATM柜员机模拟系统
系别:
信息工程系
专业(方向):
信息管理与信息系统
年级、班:
学生姓名:
学生学号:
指导教师:
年月日
目录
一、系统开发的背景1
二、系统分析与设计1
(一)系统功能要求1
(二)系统模块结构设计2
三、系统的设计与实现3
(一)存款操作:
C()3
(二)取款操作:
Q()3
(三)修改密码操作:
Operation()4
(四)添加新用户:
Operation()4
(五)删除用户:
Operation()5
四、系统测试5
(一)测试Win()函数5
(二)测试Win()中的C()6
(三)测试Win()中的Q()6
五、总结9
六、附件(代码、部分图表)10
ATM柜员机模拟系统
一、系统开发的背景
随着市场经济的繁荣发展,人们的物质生活得到极大的提高,手中的剩余资金也曰益增多。
受传统观念影响,绝大多数人喜欢把资金投进银行,而在需要使用现金的时候再到银行提取现金。
这就导致银行业务的急剧增加。
虽然银行网点越来越多,银行的工作效率也随着信息化有较明显的增长,但是依旧不能满足广大用户的需要。
而一味的增加营业网点,从理论上虽然能稍微的缓解银行的压力,但是治标不治本,而且每增加一个网点,不仅要付出昂贵的资金成本,还需要长期投入人力资本,成本非常之昂贵。
这时候就迫切的需要一种自动的,易于普及的,低成本的设备来解决这一问题,于是ATM机系统应运而生了,下面就是我通过Java语言做的一个ATM柜员机模拟系统。
二、系统分析与设计
(一)系统功能要求
使用图形用户界面。
可以进行存取款,查询账户余额(初始余额为10000元),修改账户信息(修改密码,用户名),同时也可以添加新的用户,删除已有用户客户基本信息(包括卡号,用户名,密码,账户余额);
(二)系统模块结构设计
通过对系统功能的分析,ATM柜员机模拟系统功能如图1所示。
图1ATM柜员机模拟系统功能图
通过上图的功能分析,把整个系统划分为6个模块:
1、用户存款操作,该模块主要实现:
在账户原有存款金额的基础上存入现金,并计算更新账户现有余额;
2、用户取款操作,该模块主要实现取款操作,并在取款之后更新账户现有现金数目;
3、查询余额操作,该模块主要实现用户基本信息和现在有余额查询;
4、修改密码,用户在主界面输入需要修改密码的卡号,再输入新的密码完成功能;
5、添加新用户操作;
6、删除原有用户,即用户自己实现销户操作。
三、系统的设计与实现
(一)存款操作:
C()
分析:
首先输入用户卡号和密码,输入存款金额,然后在主界面点击“存款”按钮实现存款。
该模块的具体代码如下所示:
Connectioncon=null;
Statementsql;
ResultSetrs=null;
try{
doublen=2000;
con=DriverManager.getConnection("jdbc:
odbc:
XX","","");con.setAutoCommit(false);
sql=con.createStatement();
rs=sql.executeQuery("SELECT*FROMXXWHERE卡号='123456'");//查询
rs.next();
doublemoney=rs.getDouble(5);
System.out.println("操作前用户的余额:
"+money);
doublemoney1=money+n;//存款
sql.executeUpdate
("UPDATEXXSET余额=+'"+money1+"'WHERE卡号='123456'");//存款后更新余额
mit();
con.setAutoCommit(true);//提交事务结果到数据库
sql=con.createStatement();//创建数据库操作对象
}
catch(SQLExceptione1)
{try{con.rollback();}//如果操作失败则结束事务
catch(SQLExceptionexp){}
System.out.println(""+e);
}
(二)取款操作:
Q()
分析:
在主界面输入取款金额,然后在主界面点击“取款”按钮实现取款。
该模块的具体代码如下所示:
Connectioncon=null;
Statementsql;
ResultSetrs=null;
try{
doublen=1000;
con=DriverManager.getConnection("jdbc:
odbc:
XX","","");
con.setAutoCommit(false);
sql=con.createStatement();
rs=sql.executeQuery("SELECT*FROMXXWHERE卡号='123456'");
rs.next();
doublemoney=rs.getDouble(5);
System.out.println("操作前用户的余额:
"+money);
doublemoney2=money-n;//取款
sql.executeUpdate
("UPDATEXXSET余额=+'"+money2+"'WHERE卡号='123456'");
//取款后更新余额
mit();
con.setAutoCommit(true);
sql=con.createStatement();
}
catch(SQLExceptione1)
{try{con.rollback();}
catch(SQLExceptionexp){}
System.out.println(""+e);
}
(三)修改密码操作:
Operation()
分析:
在主界面输入要修改密码用户的卡号,在文本框中输入新密码,然后在主界面点击“修改密码”按钮实现。
该模块的具体代码如下所示:
modify.setSQL("UPDATEXXSETXX.密码=+'"+text[2].getText()+"'WHERE(((XX.卡号)=+'"+text[0].getText()+"'));");
StringbackMess=modify.modifyRecord();
show.append("修改密码"+backMess);
(四)添加新用户:
Operation()
分析:
在主界面输入要添加的新用户的相关信息,然后在主界面点击“添加新用户”按钮实现。
该模块的具体代码如下所示:
modify.setSQL("INSERTINTOXXVALUES('"+text[0].getText()+"','"+text[1].getText()+"','"+text[2].getText()+"','"+text[3].getText()+"')");
StringbackMess=modify.modifyRecord();
show.append("添加新用户"+backMess);
(五)删除用户:
Operation()
分析:
在主界面输入要删除的用户的卡号,然后在主界面点击“删除用户”按钮实现。
该模块的具体代码如下所示:
modify.setSQL("DELETE*FROMXXWHERE(((XX.卡号)=+'"+text[0].getText()+"'));");
StringbackMess=modify.modifyRecord();
show.append("删除用户信息"+backMess);
四、系统测试
(一)测试Win()函数
图2ATM柜员机模拟系统主界面
(二)
测试Win()中的C()
图3ATM柜员机模拟系统存款操作
(三)
测试Win()中的Q()
图4ATM柜员机模拟系统取款操作
(四)测试Operation()修改密码
图5ATM柜员机模拟系统修改密码操作
(五)测试Operation()添加用户
图6ATM柜员机模拟系统添加用户操作
(六)测试Operation()删除用户
图7ATM柜员机模拟系统删除用户操作
五、总结
系统借助数据库完成了基本的存取款、修改密码、查询用户信息和添加删除用户等功能。
系统的不足之处是未能按照实现构思的功能图实现部分功能,比如说是存款时如果输入的存款金额不符合要求,即就是输入存款金额数并非100的整数倍,而是其他(例如123元),就会自动弹出您的输入有误,,请重新输入;取款类似于存款;登陆账号时三次输入有误则不能进入系统。
通过这次课程设计实践操作,我发现自己的不足之处是未能将实践与理论相结合,没有把课本上的理论知识结合到具体的实践操作中。
刚开始做的时候采用的是Java语言,后来在行为事件中卡壳了,最终选择采取数据库来实现。
这次的课程设计做完之后没有以往的那种对课本知识更加熟知的感觉,倒觉得越迷茫。
在做设计的过程中,虽然有自己的想法,但很难实现,通过和老师同学的交流沟通才得以完成。
总的来说,是对Java语言的掌握不够,在后期的学习中,多和老师同学交流,结合实际操作以提高自身能力。
六、附件(代码、部分图表)
Win.java
importjava.awt.*;
importjavax.swing.*;
importjava.awt.event.*;
importjava.sql.*;
publicclassWinextendsJFrameimplementsActionListener{
JTextFieldtext[]=newJTextField[6];
JTextAreashow=newJTextArea(9,30);
JTabletable;//标签
JButtoninsert,update,select,delete,C,Q;
Win(){
setLayout(newFlowLayout());
for(inti=0;i<5;i++){
text[i]=newJTextField(10);
}
add(newJLabel("卡号:
"));
add(text[0]);
add(newJLabel("姓名:
"));
add(text[1]);
add(newJLabel("密码:
"));
add(text[2]);
add(newJLabel("余额:
"));
add(text[3]);
add(newJLabel("序号:
"));
add(text[4]);
C=newJButton("存款");
C.addActionListener(this);
add(C);
Q=newJButton("取款");
Q.addActionListener(this);
add(Q);
update=newJButton("修改密码");
update.addActionListener(this);
add(update);
insert=newJButton("添加新用户");
insert.addActionListener(this);
add(insert);
select=newJButton("查询用户信息");
select.addActionListener(this);
add(select);
delete=newJButton("删除用户信息");
delete.addActionListener(this);
add(delete);
add(newJScrollPane(show));
add(newJLabel("提示:
1.每次取款金额为100的倍数,总额不能超过5000元,支取金额不允许透支"));
add(newJLabel("2.存款金额不能为负存款"));
add(newJLabel("3.新密码长度不小于6位,不允许出现6位完全相同的情况"));
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
publicvoidactionPerformed(ActionEvente){
Operationmodify=newOperation();
modify.setDatasourceName("XX");
if(e.getSource()==insert)
{
modify.setSQL("INSERTINTOXXVALUES('"+text[4].getText()+"','"+text[0].getText()+"','"+text[1].getText()+"','"+text[2].getText()+"','"+text[3].getText()+"')");
StringbackMess=modify.modifyRecord();
show.append("添加新用户"+backMess);
}
elseif(e.getSource()==C)
{
Connectioncon=null;
Statementsql;
ResultSetrs=null;
try{
doublen=2000;
con=DriverManager.getConnection("jdbc:
odbc:
XX","","");
con.setAutoCommit(false);
sql=con.createStatement();
rs=sql.executeQuery("SELECT*FROMXXWHERE卡号='123456'");//查询
rs.next();
doublemoney=rs.getDouble(5);
System.out.println("操作前用户的余额:
"+money);
doublemoney1=money+n;//存款
sql.executeUpdate
("UPDATEXXSET余额=+'"+money1+"'WHERE卡号='123456'");//存款后更新余额
mit();
con.setAutoCommit(true);//提交事务结果到数据库
sql=con.createStatement();//创建数据库操作对象
}
catch(SQLExceptione1)
{try{con.rollback();}//如果操作失败则结束事务
catch(SQLExceptionexp){}
System.out.println(""+e);
}
}
elseif(e.getSource()==Q)
{Connectioncon=null;
Statementsql;
ResultSetrs=null;
try{
doublen=5000;
con=DriverManager.getConnection("jdbc:
odbc:
XX","","");
con.setAutoCommit(false);
sql=con.createStatement();
rs=sql.executeQuery("SELECT*FROMXXWHERE卡号='123456'");
rs.next();
doublemoney=rs.getDouble(5);
System.out.println("操作前用户的余额:
"+money);
doublemoney2=money-n;//取款
sql.executeUpdate
("UPDATEXXSET余额=+'"+money2+"'WHERE卡号='123456'");//取款后更新余额
mit();
con.setAutoCommit(true);
sql=con.createStatement();
}
catch(SQLExceptione1)
{try{con.rollback();}
catch(SQLExceptionexp){}
System.out.println(""+e);
}
}
elseif(e.getSource()==update)
{
modify.setSQL("UPDATEXXSETXX.密码=+'"+text[2].getText()+"'WHERE(((XX.卡号)=+'"+text[0].getText()+"'));");
StringbackMess=modify.modifyRecord();
show.append("修改密码"+backMess);
}
elseif(e.getSource()==delete)
{
modify.setSQL("DELETE*FROMXXWHERE(((XX.卡号)=+'"+text[0].getText()+"'));");
StringbackMess=modify.modifyRecord();
show.append("删除用户信息"+backMess);
}
elseif(e.getSource()==select)
{
Queryquery=newQuery();
query.setDatasoureName("XX");
query.setTableName("XX");
Objecta[][]=query.getRecord();
Stringb[]={"序号","卡号","姓名","密码","余额"};
table=newJTable(a,b);
JFrameframe=newJFrame();
frame.add(newJScrollPane(table));
frame.setVisible(true);
frame.setBounds(400,400,600,200);
}
}
publicvoidsetBounds(inti,intj,intk,intl){}
}
Operation.java
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.SQLException;
importjava.sql.Statement;
publicclassOperation{
StringdatasourceName="";//数据源名称
StringSQL,message="";//表名
publicOperation()//增删改的主代码
{
try{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");}//操作数据源
catch(Exceptione){}
}
publicvoidsetSQL(StringSQL)//建立一个新的数据源
{this.SQL=SQL;}
publicvoidsetDatasourceName(Strings)
{datasourceName=s.trim();}
publicStringmodifyRecord(){
Connectioncon=null;
Statementsql=null;
try{Stringuri="jdbc:
odbc:
"+datasourceName;
Stringid="";
Stringpassword="";
con=DriverManager.getConnection(uri,id,password);
sql=con.createStatement();
sql.execute(SQL);
message="操作成功";
con.close();
}
catch(SQLExceptione)
{message=e.toString();}
returnmessage;
}/*数据源读取初始化*/
publicvoidsetTableName(Stringstring){}//表名
publicObject[][]getRecord()//存放操作结果数组
{returnnull;}
}
Query.java
importjava.sql.*;
import.httpserver.Authenticator.Result;
publicclassQuery
{StringdatasourceName="";//数据源名
StringtableName="";//表名
Objecta[][];
publicQuery()
{
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}//桥接器
catch(ClassNotFoundExceptione)
{System.out.print(e);}
}
publicvoidsetDatasoureName(Strings)
{datasourceName=s.trim();}
publicvoidsetTableName(Strings)
{tableName=s.trim();}
publicObject[][]getRecord()//获取表中记录
{
Connectioncon;
PreparedStatementsql;//预处理命令
ResultSetrs;//结果集
try{
Stringuri="jdbc:
odbc:
"+datasourceName;
Stringnumber="";
Stringpassword="";
con=DriverManager.getConnection(uri,number,password);//初始化连接
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ATM 柜员机 模拟 系统