




已阅读5页,还剩53页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C/S项目实训课程设计报告组别: 学生姓名学号:学生姓名:学号:学生姓名:学号:专业班级:题目:模拟ATM机网络编程指导教师:年 月 日摘 要本ATM系统的目的就是建立一个客户平台,用户使用此平台除了可以进行查询余额、存款、取款、转账、修改密码等基本业务办理,还可以进行查询明细,定期存款等ATM取款系统的针对的用户群是使用此软件系统的用户,用户做为系统的服务群体,可以使用数据库已有的账号与密码,登陆ATM系统。当用户成功登陆后就可以根据用户的需求进行各项业务的办理,办理完所有的手续后,用户的输入的新资料以及办理的业务处理后的信息都会反馈到数据库并且都会存入到数据库中。这样用户就完成了办理业务。关键词: ATM 数据库 客户端 服务器端目录第一章 引言1选题背景及意义1第二章 系统分析22.1需求分析22.1.1总体需求22.1.2具体事务22.2功能分析22.3主要难点32.4开发工具与环境32.4.1开发工具32.4.2开发环境3第三章 概要设计43.1设计思想43.2数据库设计43.2.1管理员表43.2.2用户表53.2.3用户信息表53.2.4定期存款表5第四章 详细设计64.1总设计流图64.2登录设计64.3开户设计114.4主界面设计144.5存款设计164.6取款设计194.7转账设计234.8解除挂失密码264.9销户设计294.10查询余额304.11查询交易明细334.12修改密码364.13挂失设计384.14服务器端设计40第五章 总结43参 考 文 献44附录45附录1 文件清单45附录2 用户使用说明45第一章 引言选题背景及意义随着信息时代科技的飞速发展,使用ATM取款机、计算机等技术的发展,不仅提高了工作效率,而且大大的提高了其安全性。对于一些复杂的信息,就能够充分的发挥它们的优越性。本系统就是为了更方便人们的生活而设计的。ATM系统作为一款数据传输的技术,用户信息和资金信息的繁杂,包含很多的数据的管理,以前的都是由一些柜员进行操作,而且手续很多。对于ATM取款系统数据的统计和核实等都是采用卡号进行核对的,对于用户的信息资料、以及等用人工办理。数据信息处理工作量大,繁琐。数据处理手工操作,工作量大,工作时需实时认真办理,一但出现错误将带来很大的损失。由于信息一定要准确真实,认真的进行各项核对工作,工作人员和管理员也只是当时对它比较清楚,时间一长,如再要进行查询,就得在众多的资料中翻阅、查找了,造成查询费时、费力。针对这一系列问题,我们设计了这一个系统,使得用户可以安全的进行操作,可以便捷、快速的进行取款、存款、修改密码、查询余额、查询交易明细、挂失、开户以及完成一些商业上的交易,如转账,大大地提高了办公效率,能够及时、准确、有效的帮用户办理各种繁琐的手续。第二章 系统分析2.1需求分析2.1.1总体需求开发一款系统软件,此软件运行于银行的ATM机器上,可以供用户使用,完成用户的经济交易,使得用户不需要专门到银行去办理业务,只需要到相关银行的ATM机器上操作即可。银行可以节约人力资源,不需要为每个客户人工服务。2.1.2具体事务用户:用户存钱,用户取钱,用户转账,用户查询账户信息,用户修改个人设置,用户查看个人交易记录。ATM机器:与用户交互界面,帮助提示信息,用户需要操作实现,用户操作纪录记录,与数据库实时同步。2.2功能分析实现ATM的基本功能,包括:查询余额、取款、存款、改密码、转账 等基本功能 ;查询余额:连接数据库,根据正确的用户名与密码登陆查询对应的余额; 取款、存款: 存款与取款的金额必需为100的整数倍,且每次操作不大于3000元,成功修改后,更新对应数据库的内容;修改密码:只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码;转账:每次转账的金额必需小于余额,只有输入的转账账号两次都相同的情况下,才可以成功转账;用数据库(或文件)保存当前用户的用户卡号、密码、姓名、余额2.3主要难点ATM取款系统是面向特定对象群是在此软件系统开户办理的用户,所以用户进入开户办理时的资料都需要严格核查,用户登陆系统后,应该能根据自己的需要进行各项业务的办理。鉴于软件系统使用环境一般在网络上或银行门口装置机械,为了考虑到软件的安全性,对于每个用户来说,系统的安全性直接影响着自身的利益,同时也有可能也使用此软件的银行带来很的损失。特别是网络环境,到处伴随着危险,ATM取款系统针对这一用户群,采取一些有效的措施,登陆后用户办理完的业务信息反馈到客户端数据库里,做好防止信息被拦截工作。2.4开发工具与环境2.4.1开发工具 开发语言:Java、SQL 数据库:MySql5.5 操作系统:Windows 8.02.4.2开发环境 硬件方面: 个人计算机 软件方面: Myeclipse7.0第三章 概要设计3.1设计思想 本ATM系统需要满足用户的需求,即可以进行各项业务的办理。用户可以根 据数据库中正确的卡号和密码登录到系统,登录成功后可进行操作,所有的数据都要从数据库中获取,当数据被修改后,则必须改变数据库中,相应账号中的数据,如存款后,则要更新相应账号中的余额;而修改密码后,则要更新相应账号中的密码信息,原来的密码就不能使用3.2数据库设计 数据库选择了Access2003的数据库作为后台,创建了客户的信息表,然后通过配置ODBC数据源,加载JDBC驱动程序,引用java.sql包来创建数据库连接,然后在程序中执行SQL语句来对数据进行读取和修改。数据库表如下图:3.2.1管理员表3.2.2用户表3.2.3用户信息表3.2.4定期存款表3.3功能模块划分本系统可以划分为如下功能模块:登录、开户、销户、挂失、解挂、修改密码、查询、取款、存款、转账等模块。第四章详细设计4.1总设计流图4.2登录设计(1)实现效果:(2)关键代码如下:public void actionPerformed(ActionEvent e) / TODO Auto-generated method stubif(e.getSource()=btOk)/提取账号和密码String account=tfAccount.getText();String pwd=new String(pfPwd.getPassword();/发送连接请求Socket s;try s = new Socket(InetAddress.getByName(127.0.0.1),8090);InputStream ips=s.getInputStream();OutputStream ops=s.getOutputStream();BufferedReader br=new BufferedReader(new InputStreamReader(ips);PrintWriter pw=new PrintWriter(ops);/发送消息头pw.write(Loginrn);pw.flush();/发送账号密码pw.write(account+rn);pw.write(pwd+rn);pw.flush();/接收服务器响应String echo=br.readLine();if(echo.equals(1)/账号有误JOptionPane.showMessageDialog(Login.this,账号有误!);tfAccount.setText();pfPwd.setText();if(echo.equals(2)/账号和密码都正确/接收卡的基本信息,并且创建一个card类float money=Float.parseFloat(br.readLine();boolean bool=Boolean.parseBoolean(br.readLine();String name=br.readLine();String sex=br.readLine();int age=Integer.parseInt(br.readLine();String id=br.readLine();String phone=br.readLine();/并且创建一个card类currCard=new Card(account,name,sex,age,id,pwd,phone,money,bool);/接收判断卡号是不是可以用的bool变量String str=br.readLine();if(str.equals(ok)/用户处于正常状态new Basic(br,pw,currCard).init();Login.this.dispose();else if(str.equals(error)/密码错误三次int i=JOptionPane.showConfirmDialog(null, 该账户已被冻结,是否解冻?,提示!,JOptionPane.YES_NO_OPTION);if(i=JOptionPane.OK_OPTION)new JieGua(br,pw,currCard).init();Login.this.dispose();elsetfAccount.setText();pfPwd.setText();else if(echo.equals(3)/密码错误JOptionPane.showMessageDialog(Login.this,您输入的密码有误!);tfAccount.setText();pfPwd.setText();else if(echo.equals(4)/密码错误三次JOptionPane.showMessageDialog(Login.this,您输入的密码已错误3次,即将吞卡!);System.exit(0);catch(IOException e1)e1.printStackTrace();else if(e.getSource()=btCancel)tfAccount.setText();pfPwd.setText();else if(e.getSource()=a)/new togerther().init();this.dispose();else if(e.getSource()=adduser)Socket s;try s = new Socket(InetAddress.getByName(127.0.0.1),8090);InputStream ips=s.getInputStream();OutputStream ops=s.getOutputStream();BufferedReader br=new BufferedReader(new InputStreamReader(ips);PrintWriter pw=new PrintWriter(ops);new AddUser(br,pw).init();this.setVisible(false); catch (UnknownHostException e1) / TODO Auto-generated catch blocke1.printStackTrace(); catch (IOException e1) / TODO Auto-generated catch blocke1.printStackTrace();4.3开户设计(1)实现效果:(2)关键代码如下:public void actionPerformed(ActionEvent arg0) / TODO Auto-generated method stubboolean flag2=true;String name=new String(tfname.getText();String account=new String(tfaccount.getText();String onepwd=new String(pffirstpwd.getPassword();String twopwd=new String(pfsecondpwd.getPassword();String idcard=new String(tfidcard.getText();String phone=new String (tfphone.getText();jb.addItemListener(new ItemListener()Overridepublic void itemStateChanged(ItemEvent arg0) / TODO Auto-generated method stub);if(onepwd.equals()&idcard.equals()&name.equals()&phone.equals()JOptionPane.showMessageDialog(AddUser.this, 请认真填写个人信息!);elseif(!onepwd.equals(twopwd)JOptionPane.showMessageDialog(AddUser.this, 两次输入的密码不一致!);elseJOptionPane.showMessageDialog(AddUser.this,sex);/new Login().init();/AddUser.this .dispose(); try pstmt=conn.prepareStatement(sql);pstmt.setString(1,transAccount);rs=pstmt.executeQuery();if(rs.next()transCard=new Card();transCard.setName(rs.getString(name);transCard.setSex(rs.getString(sex);transCard.setAge(rs.getInt(age);transCard.setID(rs.getString(id);transCard.setPhone(rs.getString(phone); return transCard; catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();4.4主界面设计(1) 实现效果: (2) 关键代码如下:public void actionPerformed(ActionEvent e) / TODO Auto-generated method stubif(e.getSource()=SaveM)new SaveM(br,pw,currCard).init();if(e.getSource()=TakeM)new TakeM2(br,pw,currCard).init();if(e.getSource()=TransM)new TranM(br,pw,currCard).init();if(e.getSource()=QueryM)new ChaXun(br,pw,currCard).init();if(e.getSource()=a1)new Mima(br,pw,currCard).init();this.dispose();if(e.getSource()=a2)JOptionPane.showMessageDialog(Basic.this, 请在30秒内取走你的卡片,否则将会被吞卡);new Login().init();this.setVisible(false);if(e.getSource()=DelUser)new DelUser(br,pw,currCard).init();this.setVisible(false);if(e.getSource()=GuaShi)new GuaShi(br,pw,currCard).init();this.setVisible(false);4.5存款设计(1)实现效果:(2)关键代码如下: this.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)pw.write(Logoffrn);pw.flush();SaveM.this.dispose(););Images images=new Images();images.AddImage(this,(image3.jpg);for(int i=0;i3000)JOptionPane.showMessageDialog(SaveM.this, 对不起,你一次最多只能存入3000元现金!);text.setText();elsepw.write(savern);pw.write(k+rn);pw.flush();String str;try str=br.readLine();if(str.equals(saveSuccess)/更新当前集合数据currCard.setMoney(currCard.getMoney()+k);text.setText();JOptionPane.showMessageDialog(SaveM.this, 存款成功!);elseJOptionPane.showMessageDialog(SaveM.this, 存款失败!); catch (IOException e1) / TODO Auto-generated catch blocke1.printStackTrace();elseJOptionPane.showMessageDialog(SaveM.this, 你输入的金额不对!););btCancel.addActionListener(new ActionListener()Overridepublic void actionPerformed(ActionEvent e) / TODO Auto-generated method stubSaveM.this.dispose(););4.6取款设计(1) 实现界面: (2) 关键代码如下:public void actionPerformed(ActionEvent e) / TODO Auto-generated method stub/把text里的数据取出来强制转换成int,用k来接受int k=Integer.parseInt(text.getText();if(k=0)JOptionPane.showMessageDialog(TakeM.this, 警告:请不要随意操作!);if(currCard.getMoney()=k)if(k%100=0)if(k3000)JOptionPane.showMessageDialog(TakeM.this, 对不起,你一次最多只能提取3000元现金!);text.setText();elsepw.write(takern);pw.write(k+rn);pw.flush();String str;try str=br.readLine();if(str.equals(takeSuccess)/更新当前集合数据currCard.setMoney(currCard.getMoney()-k);JOptionPane.showMessageDialog(TakeM.this, 恭喜你,取款成功!);text.setText();elseJOptionPane.showMessageDialog(TakeM.this, 取款失败!); catch (IOException e1) / TODO Auto-generated catch blocke1.printStackTrace();elseJOptionPane.showMessageDialog(TakeM.this, 你输入的金额不对!);elseJOptionPane.showMessageDialog(TakeM.this, 你的账户余额不足!);try pstmt=conn.prepareStatement(sql);pstmt.setString(1,transAccount);rs=pstmt.executeQuery();if(rs.next()transCard=new Card();transCard.setName(rs.getString(name);transCard.setSex(rs.getString(sex);transCard.setAge(rs.getInt(age);transCard.setID(rs.getString(id);transCard.setPhone(rs.getString(phone); return transCard; catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();4.7转账设计(1) 实现效果:(2) 关键代码如下:public void actionPerformed(ActionEvent e) / TODO Auto-generated method stubif(e.getSource()=btOk)String transAccount=b.getText();/只有当输入的转账卡号不是自己的卡号才向服务器端发送数据if(!transAccount.equals(currCard.getAccount()pw.write(transmoneyrn);pw.write(transAccount+rn);pw.flush();try String str=br.readLine();if(str.equals(1)new TranM2(br,pw,currCard).init();TranM.this.dispose();elseJOptionPane.showMessageDialog(TranM.this, 您输入的卡号不正确); catch (IOException e1) / TODO Auto-generated catch blocke1.printStackTrace();elseJOptionPane.showMessageDialog(TranM.this, 您输入的卡号不正确); else if(e.getSource()=btCancel)TranM.this.dispose();public void actionPerformed(ActionEvent e) / TODO Auto-generated method stubint k=Integer.parseInt(text.getText();if(currCard.getMoney()=k)pw.write(k+rn);pw.flush();try String str=br.readLine();if(str.equals(Success)currCard.setMoney(currCard.getMoney()-k);JOptionPane.showMessageDialog(TranM2.this, 恭喜你,转账成功!你当前的余额是:+currCard.getMoney();TranM2.this.dispose();elseJOptionPane.showMessageDialog(TranM2.this, 转账失败!); catch (IOException e1) / TODO Auto-generated catch blocke1.printStackTrace();elseJOptionPane.showMessageDialog(TranM2.this, 余额不足 !);4.8解除挂失密码(1) 实现效果:(2) 关键代码如下: public void actionPerformed(ActionEvent e) / TODO Auto-generated method stubString pwd1=new String(b2.getPassword();String id1=b5.getText();boolean flag=true;if(!pwd1.equals(currCard.getPwd()JOptionPane.showMessageDialog(JieGua.this,密码有误!);b2.setText();flag=false;if(!id1.equals(currCard.getId()JOptionPane.showMessageDialog(JieGua.this,身份证号有误!);b5.setText();flag=false;if(flag=true)pw.write(removeLossrn);pw.flush();try String string=br.readLine();if(string.equals(lossSuccess)JOptionPane.showMessageDialog(JieGua.this, 解挂成功,请重新登录!);new Login().init();JieGua.this.dispose();elseJOptionPane.showMessageDialog(JieGua.this, 挂失失败!);new Login().init();JieGua.this.dispose(); catch (IOException e1) / TODO Auto-generated catch blocke1.printStackTrace();4.9销户设计(1) 实现效果:(2) 关键代码如下:public void actionPerformed(ActionEvent arg0) / TODO Auto-generated method stubif(currCard.getMoney()!=0)JOptionPane.showMessageDialog(DelUser2.this, 你的卡上还有+currCard.getMoney()+元,请做处理余额!);new Basic(br,pw,currCard).init();DelUser2.this.dispose();elsepw.write(delUserrn);pw.flush();try String str=br.readLine();if(str.equals(Success)JOptionPane.showMessageDialog(DelUser2.this, 销户成功!);new Login().init();DelUser2.this.dispose();elseJOptionPane.showMessageDialog(DelUser2.this, 销户成功!);DelUser2.this.dispose(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();JOptionPane.showMessageDialog(DelUser2.this, 销户成功!);new Login().init();DelUser2.this.dispose();4.10查询余额(1) 效果实现:(2) 关键代码如下:pw.write(chaxunrn);pw.flush();int i=0;while(i5)try String type=br.readLine(); String time=br.readLine(); float money=Float.parseFloat(br.readLine(); rowDatei0=currCard.getAccount();rowDatei1=currCard.getName();rowDatei2=time;rowDatei3=type;rowDatei4=money;i+; catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();try st=conn.createStatement();/执行SQL语句rs=st.executeQuery(sql);if(rs.next()currCard=new Card();currCard.setMoney(rs.getFloat(money);currCard.setBool(rs.getBoolean(bool);currCard.setName(rs.getString(name);currCard.setSex(rs.getString(sex);currCard.setAge(rs.getInt(age);currCard.setID(rs.getString(id);currCard.setPhone(rs.getString(phone); currCard.setAccount(rs.getString(account);currCard.setPwd(rs.getString(pwd); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();4.11查询交易明细(1) 实现效果:(2) 关键代码如下:public void init()btOk=new JButton(确定);btCancel=new JButton(取消); String dbURL=jdbc:mysql:/127.0.0.1:3306/atm;String user=root; String password=root; Connection conn=null; ResultSet rs=null; PreparedStatement pstmt=null; Statement st=null;try /加载数据库连接驱动Class.forName(com.mysql.jdbc.Driver); catch (ClassNotFoundException e) / TODO Auto-generated catch blocke.printStackTrace();System.out.println(驱动加载失败!);try /创建数据库连接conn=DriverManager.getConnection(dbURL,user,password);/创建实例对象 catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();System.out.println(数据库连接失败!);try st=conn.createStatement();String sql=select * from card_informaion where account=111;/执行SQL语句rs=st.executeQuery(sql);int i=0;if(rs.next()rowDatei0=rs.getString(1);rowDatei1=rs.getString(2);rowDatei2=rs.getString(3);rowDatei3=rs.getString(4);rowDatei4=rs.getString(5);rowDatei5=rs.getString(6);i+; catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();Container cr=getContentPane();jt=new JTable(rowDate,columnName);this.add(cr);cr.add(new JScrollPane(jt);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 紧急医学救援基地项目建设工程方案
- 2025年智慧城市垃圾分类处理与新能源互补发展报告
- 全真模拟乐理试题及答案
- 金融行业反欺诈大数据在金融风控中的应用与优化报告
- 亲子野炊咨询活动方案
- 配管专业面试题及答案
- DB65T 4398-2021 棉花耐盐防病促生菌种衣剂和滴灌肥料施用技术规程
- DB65T 4383-2021 春播玉米减肥减药技术规程
- 英语语法大赛真题及答案
- DB65T 4335-2020 伊犁马饲养管理技术规范
- 2025年药典考试题大库及答案
- 血液净化治疗临床应用
- 年产12000吨水合肼(100%)项目环评报告书
- 建设工程施工合同(GF-2017-0201) 专用条款模板
- 国家电网有限公司十八项电网重大反事故措施(修订版)
- 养老中心公建民营(一期)项目委托运营合同模版
- 二年级健康成长上册教案
- 医院环境微生物 (3)
- 第七届全国中小学信息技术创新与实践活动
- 结构实体检测方案综合楼
- 百色RNA生物医药项目投资计划书(模板范本)
评论
0/150
提交评论