java课程设计报告_自动取款机模拟程序_第1页
java课程设计报告_自动取款机模拟程序_第2页
java课程设计报告_自动取款机模拟程序_第3页
java课程设计报告_自动取款机模拟程序_第4页
java课程设计报告_自动取款机模拟程序_第5页
免费预览已结束,剩余48页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学院计算机科学与技术系课程设计报告20142015学年第一学期课程 JAVA课程设计课程设计名称 自动取款机模拟程序学生姓名学号专业班级指导教师2014年9月自动取款机模拟程序课程设计过程概述这次课程设计的主要目的是结合面向对象程序设计课程,培养我们面向对象 软件开发的思维,初步了解软件开发的一般流程,提高用 JAVA编程的实际动手 能力并增强大家对面向对象的了解。这次课程设计的主要内容是独立用 JAVA语 言开发一个小的应用程序名称:自动取款机模拟程序内容:在PC机上设计一个自动取款机的模拟程序,实现现实中取款机的大部分 功能。二、任务和要求1 .程序分为两部分:管理端和客户端。2 .管理端

2、负责管理所有的银行卡,管理员可以增加和删除银行卡。(1)每张银行卡由卡号唯一标识,卡号由 9位阿拉伯数字组成;(2)新增的银行卡密码均为“ 123456,卡内金额均为0元;(3)只有管理员增加的银行卡才能登陆客户端;(4)删除后的银行卡将不能再登陆客户端。3 .客户端负责常见的取款机操作。(1)客户端需要登陆,用户输入正确的银行卡号和密码,系统核对无 误后才能进行操作;(2)登陆后,用户可以进行查询余额、取款、存款和修改密码的操作;(3)修改密码时,用户需输入两次新密码,确定无误后方可更改;(4)取款和存款操作,有操作结果提示,如“操作成功”或“余额不 足,操作失败”等。三、数据库设计程序中包

3、括用户客户端和管理客户端,所以在数据库中需要设计用户信息表 和管理员信息表分别来保存用户信息和管理员信息(数据库采用MySQL。表1用户信息表(user)列名数据类型及长度是否为空主键默认值说明cardNumVarchar (12)NO主键用户帐号passwordInt(6)NO123456用户密码balanceInt(10)NO0余额表2管理员信息表(admin)列名数据类型及长度是否为空主键默认值说明adminNameVarchar (10)NO主键管理员帐号passwordVarchar (10)NOadmin管理员密码四、系统设计1、设计框架图一总体设计框架2、总体设计我所设计的ATM

4、机主要是由登录页面模块还由选择服务模块组成, 在登录时 可选择用户登录或管理员登陆。其中用户的选择服务模块由取款模块、存款模块、 查询余额模块、修改密码模块、退卡模块组成,管理员的选择服务模块由新建用 户模块、删除用户模块、退出模块组成。其功能结构图如下所示:word资料ATM取款机摹杀整人模块一退出模块4取存款+1款/事物模块,输入密码退出系绛修改密回退 卡*用户模块结构图4图二用户模块设计框图ATM取款机系统.登入.模块输入密理新 建 用 户*退出系统退 卡+管理员模决结构图4图三管理员模块设计框图3、ATMIX款机界面设计我觉得一个系统的界面应该要简单明了,当然样式美观就更好了。我设计的

5、界面主要是由窗体组成,操作简单。而每一个窗口则执行相应的功能。一个系统界面的好坏直接影响到用户的操作,界面设计要求样式美观、简单明了、方便易操作。我设计的界面主要分为窗体、菜单、按钮和文本输入框几个 部分,分别执行相应的操作。(1)窗体的设计窗体整个11架使用JFrame类构造,JFrame有自己的外边框和自己的标题,创建JFrame时可以指定其窗口标题,我创建的窗口标题是各个不同功能的模块 的名字,比如说查询余额窗口,取款窗口等。(2)窗体的主要结构的设计我所设计的窗口的主要结构的特点就是每个窗口都对应着一个特定的功能。 比如说报各种各样的错,还有各种查询余额、取款、选择服务等,所以它们都是

6、 由各种按钮和文本框,标签组成的,而联系各个窗体成为一个整体的就是各个按 钮的监听事件,另外所有窗口布局均为网格布局。为了定义各个按钮所对应的命令和操作,首先需要将各个按钮注册给实现了 动作事件的监听接口 ActionListener 的监听者,然后为监听者定义 actionPerformed(ActionEvent e) 方法,在这个方法中调用e.getSource()或e.getActionCommand()来判断用户点击的菜单子项,并完成这个菜单子项定义的 操作。4、各功能模块设计4.1登录页面模块设计用户进入登录页面后要输入账号和密码,并选择相应的用户,点击确定后系 统会通过连接数据库

7、验证密码是否正确,在密码正确的情况下界面跳转到功能选择界面,否则弹出警告账号或密码错误窗口图四登录窗口界面我采用的是MyEclipse中的Swing插件所做,简单、方便、实用。文本 区调用getText()方法,获取用户想要的字符串。因为要区分登录者是用户还是 管理员,所以设置了两个 JRadioButton来确定登录者的身份。当登录者选择的 身份为用户时通过UserDao类驱动加载数据库,从用户表中获取相关信息并与用 户输入信息比较,信息相符时登录成功,否则弹出警告窗口。部分源码如下;*用户登录*/private void generalUserLogon()String cardNum =

8、 userNameTxt .getText();String password = new String( passwordTxt .getPassword(); if (StrUtil. isEmpty (cardNum) JOptionPane. showMessageDialog (null ,账号不能为空!”); return ; if (StrUtil. isEmpty (password) JOptionPane. showMessageDialog (null ,密码不能为空!”); return ; List users = new ArrayList(); users = U

9、serDao.select (select cardNum,password,balance from user where cardNum = and password = ? ; ,cardNum, password);if (users.isEmpty() JOptionPane. showMessageDialog (null ,登录失败,账号或密码错误!”);return ; else this .dispose();SaveUserInfo. users = users;GeneralUserFrm generalUserFrm = new GeneralUserFrm(); ge

10、neralUserFrm.setVisible( true ); /*管理员登录*/private void adminLogon().getPassword();String adminName = userNameTxt .getText();String password = new String( passwordTxtif(StrUtil.isEmpty (adminName) JOptionPane. showMessageDialog (null , return ;账号不能为空!);if(StrUtil.isEmpty (password) JOptionPane. showM

11、essageDialog (null , return ;密码不能为空!);List admins =admins = UserDao. selectAdminnew ArrayList();(select adminName,passwordfrom adminwhereadminName= ? and password = ?;,adminName, password);if(admins.isEmpty() JOptionPane. showMessageDialog ( null ,登录失败,账号或密码错误! return ;else this .dispose();SaveUserI

12、nfo. admins = admins;AdminFrm adminFrm = new AdminFrm(););adminFrm.setVisible(true );4.2 选择服务模块设计在选择服务模块中,有各种ATM勺服务功能,只要用户在该界面中选择按钮, 它就会弹出各个相应的界面。每一个按钮都有监听器,在选择了按钮后, java.awt.event 中的 ActionEvent 类创建一个事件对象,并将它传递给方法 public void actionPerformed(ActionEvent e) 中的参数 e,监视器就会知道所 发生的事件,对此事件进行处理。其中的部分源代码为:图

13、五主操作窗口/*查询余额*/private void b_queryBalanceActionPerformed(java.awt.event.ActionEventevt) /*this .dispose。; QueryBalanceFrm balanceFrm= new QueryBalanceFrm(); balanceFrm.setVisible( true );存款*/private void jb_depositMoneyActionPerformed(java.awt.event.ActionEvent evt)this .dispose。;/*/DisposeMoneyFrm

14、disposeMoneyFrm = new DisposeMoneyFrm(); disposeMoneyFrm.setVisible( true );修改密码private void modifyPasswordActionPerformed(java.awt.event.ActionEventevt) this .dispose。; ModifyPasswordFrm modifyPasswordFrm =new ModifyPasswordFrm();/*/modifyPasswordFrm.setVisible( true );取款private void jb_withdrawalM

15、oneyActionPerformed(/*/java.awt.event.ActionEvent evt) this .dispose。; WithdrawMoneyFrm withdrawMoney = new WithdrawMoneyFrm(); withdrawMoney.setVisible( true );退出系统private void jb_exitActionPerformed(java.awt.event.ActionEvent evt) int result = JOptionPane. showConfirmDialog (null ,是否要退出系统!); if (r

16、esult = 0) this .dispose。;4.3取款模块设计当用户点击取款按钮时,可以输入取款金额进行取款,当用户输入的不是整百或者不是数字时,会提示用户重新输入正确的金额;该ATM只允许用取3WZ下金额,否则会提示用户到柜台去取。部分界面和源代码如下:图六取款窗口word资料*确认取款事件*/private void jb_confirmActionPerformed(java.awt.event.ActionEvent evt) int balance = this .queryBalance();/ 调用取款方法,获得余额String cardNum = users .get(

17、0).getCardNum();/获取用户卡号int withdrawMoney;if (StrUtil. isEmpty (jWithdrawMoneytxt .getText()/判断输入是否为空JOptionPane. showMessageDialog ( null ,请输入金额!); return ; else if (!InputJudge. isFigure (jWithdrawMoneytxt .getText() JOptionPane. showMessageDialog ( null ,请输入金额!); setNull();/ 置空 return ; /获得取款金额 wi

18、thdrawMoney = Integer. parseInt (jWithdrawMoneytxt .getText()/ 将字符 转换成数值/只能取面值100元 int temp=withdrawMoney/100*100; if (tempbalance)JOptionPane. showMessageDialog ( null ,余额不足!); this .setNull(); else if (temp=30000KJOptionPane. showMessageDialog ( null ,请到柜台取款); setNull(); else if ( generalUser .wit

19、hdrawingMoney(temp, balance, cardNum)/ 取款成功、更新数据库 JOptionPane. showMessageDialog ( null ,取款成功); this .setNull(); else JOptionPane. showMessageDialog (null ,取款失败!”); this .setNull(); /置空 private void setNull() word资料 jWithdrawMoneytxt.setText();4.4存款模块设计图七存款窗口word资料当用户输入存款金额时,如果输入的不是正确的数字或者整百的金额,会提示用

20、户重新输入;如果用户输入正确,则会提示用户存款成功。/*存款* param evt*/private void jb_confirmActionPerformed(java.awt.event.ActionEvent evt) /存款金额int money;if ( this . jDisposeMoneytxt .getText().isEmpty() money = 0;else if (!InputJudge. isFigure (jDisposeMoneytxt .getText() JOptionPane. showMessageDialog (null ,请输入正确的金额!);se

21、tNull(); return ;else money = Integer. parseInt (this . jDisposeMoneytxt .getText();int balance = this .queryBalance();String cardNum = users .get(0).getCardNum();int temp = money / 100 * 100;if (temp = 0) JOptionPane. showMessageDialog (null ,请输入正确的金额 ”); setNull(); else if ( generalUser .depositMo

22、ney(temp, balance, cardNum) JOptionPane. showMessageDialog ( null ,存款成功); setNull(); else JOptionPane. showMessageDialog ( null ,存款失败); setNull();private void setNull() this . jDisposeMoneytxt .setText( );word资料4.5修改密码模块设计考虑到银行卡密码为6为数字,用户输入的金额必须为6为数字,否则提示 密码格式不正确;另外,用户需要两次输入新密码,且两次要匹配,否则会提示 用户两次密码不一

23、致,请重新输入,然后再重新回到修改密码的界面。 在修改密 码时用到的方法为:图八用户修改密码窗口word资料/*修改密码*/private void jb_confirmActionPerformed(java.awt.event.ActionEvent evt) /获取两次密码String passwordOne =new String(jPasswordOne .getPassword();String passwordTwo =new String(jPasswordTwo .getPassword();/获取卡号String cardNum = users .get(0).getCar

24、dNum();if (StrUtil. isEmpty (passwordOne) | StrUtil.isEmpty (passwordTwo) / 判断两次密码是否为空JOptionPane. showMessageDialog (null ,密码不能为 空); setNull(); return ;/判断密码是否是六位数字 elseif (!(InputJudge. isPassword (passwordOne)|!(InputJudge.isPassword (passwordTwo)JOptionPane. showMessageDialog ( null ,密码由 6位阿拉伯数字

25、组成 ); setNull(); return ;/判断两次密码是否一致else if (!StrUtil. isEqual (passwordOne, passwordTwo) JOptionPane. showMessageDialog (null ,两次密码输入不一致!”);setNull(); return ;/修改密码成功,更新数据库 else if ( generalUser.changePassword(passwordOne, passwordTwo, cardNum) JOptionPane. showMessageDialog (null ,修改密码成功); setNull

26、();this .dispose。; /返回主窗口 GeneralUserFrm generalUserFrm =new GeneralUserFrm();generalUserFrm.setVisible(true ); else JOptionPane. showMessageDialog (null ,修改密码失败);setNull(); return ; private void setNull() jPasswordOne .setText();jPasswordTwo .setText();4.6查询余额模块设计查询余额功能是在主操作窗口中实现的,当用户点击查询余额按钮时在下面的文

27、本框中显示出该账号的当前余额图九查询余额窗口public QueryBalanceFrm() this . users = SaveUserInfo. users ;/获得卡号int balance = neralUser .QueryBalance( users .get(0).getCardNum(); initComponents();this .setLocation(400, 200);this . jBalanceTxt .setText(balance +);word资料4.7管理员操作模块设计管理员登录后可以进行的操作有开户、销户等功能。在开户操作时要先检查新的账户是否已经存在

28、,同时检查新增用户的卡号(12为数字)、密码(6位数字)是否正确;如果密码和余额不填写,默认会添加密码为12345&余额0元图十管理员操作窗口图十一新增用户word资料*修改密码*/private void jb_confirmActionPerformed(java.awt.event.ActionEventevt)/获取两次密码String passwordOne =new String(jPasswordOne .getPassword();String passwordTwo =new String(jPasswordTwo .getPassword();/获取卡号String car

29、dNum = users .get(0).getCardNum();if (StrUtil. isEmpty (passwordOne) |StrUtil. isEmpty (passwordTwo) / 判断两次密码是否为空JOptionPane. showMessageDialog (null ,密码不能为空);setNull(); return ;/判断密码是否是六位数字 elseif (!(InputJudge. isPassword (passwordOne)|!(InputJudge.isPassword (passwordTwo)JOptionPane. showMessageD

30、ialog ( null ,密码由 6位阿拉伯数字组成 ); setNull(); return ; /判断两次密码是否一致else if (!StrUtil. isEqual (passwordOne, passwordTwo) JOptionPane. showMessageDialog (null ,两次密码输入不一致!);setNull(); return ;/修改密码成功,更新数据库 else if ( generalUser .changePassword(passwordOne, passwordTwo, cardNum) JOptionPane. showMessageDial

31、og ( null ,修改密码成功); setNull();this .dispose。; /返回主窗口 GeneralUserFrm generalUserFrm =new GeneralUserFrm();generalUserFrm.setVisible(true ); else JOptionPane. showMessageDialog ( null ,修改密码失败); setNull(); return ;图十二销户窗口* 刷新* param evt* /private void jb_refreshActionPerformed(java.awt.event.ActionEven

32、t evt) this .fillTable();jcardNumTxt .setText();word资料/*将数据现实在表格中*/private void f川Table() DefaultTableModel dtm = (DefaultTableModel) jt_userInfo .getModel(); / 获取模型 dtm.setRowCount(0);String sql =select * from userResultSet rs = UserDao.selectAllUser (sql);/ 获取数据库中数据try /处理结果集while (rs.next() Vecto

33、r v = v.add(rs.getString( v.add(rs.getInt( v.add(rs.getInt( dtm.addRow(v);catch (SQLException e) e.printStackTrace();new Vector();/cardNum);password);balance);添加行* 删除按响应* param evt* /private void jb_deleteActionPerformed(java.awt.event.ActionEvent evt) String cardNum = jcardNumTxt .getText();if (Str

34、Util. isEmpty (cardNum) JOptionPane. showMessageDialog ( null ,请输入要删除的卡号!);return ; else if ( admin .delete(cardNum) JOptionPane. showMessageDialog (null ,删除成功);this .fillTable();jcardNumTxt .setText( ); else JOptionPane. showMessageDialog (null ,删除失败!请检查用户账 号!”); jcardNumTxt .setText( ); word资料 五、设

35、计中遇到的问题在此次课程设计中,我遇到了一些问题,如:对于面向对象的方法了解不够 透彻,运用到实际的软件开发中存在着困难;对于 Java语言,只学习到了一些 最基本的知识,这导致编写程序时经常出现一些语法错误, 而且要在短时间内用 Java语言来设计一个具体的系统是一个较大的挑战;还有对于正规开发一个系 统的流程不熟悉,适应起来比较慢,编写各个模块相对应的操作时,自己感觉难 以动手,这表明所学的知识不能灵活运用到实际中。尤其是连接数据库的相关操作感觉更加困难,在此也花了很长时间。对于以上的问题,自己有清楚的认识,解决办法是需要大量阅读相关的书 籍,对于书上以及网站上下载的资料中的Java实例必

36、须有清楚的理解,还有就是多跟精通此方面的老师和同学交流,取其精华。对于实际动手能力与系统开发 的流程的适应,必须多进行实际的练习与操作,才能有大的进步。六、设计体会在这次的课程设计中,主要是运用 JAVA语言来编写一个小的应用程序,当 然还可以用其他的技术来辅助了。在这个小应用程序当中,我用了 Java外还用 了 Swing控件。由于以前学的不是很扎实,而且还有些知识我们都是没有学过的, 这就要求我们去查相关的书籍,还有就是和同学之间的交流。正因为这样,才锻 炼了我的自学的能力,还有就是加深了我对各个知识点的认识,并且提高了我对专业的学习的兴趣,为我以后的学习打下了基础。止匕外,我还感受到了面

37、向对象 语言的类库的强大的功能,掌握了运用 JAVA中的类实现某些基本功能,并学会 了自己查询使用类的方法,也就是要会用API文档,为以后更好的学习面向对象 语言奠定了基础。七、参考文献1王桂彬、刘家兰,JAVA大学教程M.清华大学出版社20082印昊,JAVA与面向对象程序设计M.高等教育出版社20043李尊朝,JAVA语言程序设计M.中国铁道出版社20044 丁诚.JAVA完全自学手册M.机械工业出版社2010八、源代码clientpackage edu.hfuu.client;import erfacedesign.LogOnFrm;/*客户端* author T

38、hunder - king*/public class Client public static void main(String口 args) LogOnFrm logOnFrm = newLogOnFrm(); / 登录 logOnFrm.setVisible( true );Dao:package edu.hfuu.dao;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.L

39、ist;import edu.hfuu.domain.AdminDomain;import edu.hfuu.domain.UserDomain;import edu.hfuu.util.DbUtil;public class UserDao /* 创建 Preparestatment 语句* paramsql* return* /public static PreparedStatement creatPreparedStatement(String sql) PreparedStatement st = null ;try st = DbUtil. getConnection ().pre

40、pareStatement(sql); catch (SQLException e) e.printStackTrace(); return st;/* 更新信息包括增、删、改* paramsql* paramparam* return是否删除成功* /public static boolean update(String sql, Object. param) int affected = 0;PreparedStatement st = null ;if (DbUtil. getConnection () != null ) try st = creatPreparedStatement

41、(sql);for ( int i = 0; i 0) try DbUtil. getConnection ().close(); catch (SQLException e) e.printStackTrace();return true ;try DbUtil. getConnection ().close(); catch (SQLException e) e.printStackTrace(); return false ;/* 查询用户信息* paramsql* paramparam* /public static List select(String sql, Object. pa

42、ram) ResultSet rs = null ;PreparedStatement st = null ;List users = new ArrayList();if (DbUtil. getConnection () != null ) st = creatPreparedStatement (sql); for ( int i = 0; i param. length ; i+) try st.setObject(i + 1, parami); catch (SQLException e) e.printStackTrace(); try rs = st.executeQuery()

43、; catch (SQLException e) e.printStackTrace(); dealResult (rs, users);try rs.close(); catch (SQLException e) e.printStackTrace();try word资料DbUtil. getConnection ().close(); catch (SQLException e) e.printStackTrace(); return users;/*处理结果集* paramrs*/public static void dealResult(ResultSet rs, List user

44、s) try while (rs.next() UserDomain user = new UserDomain();user.setCardNum(rs.getString(cardNum);/*/user.setPassword(rs.getInt(user.setBalance(rs.getInt(users.add(user); catch (SQLException e) e.printStackTrace();查询用户信息paramsqlparamparampassword);balance);public static List selectAdmin(String sql, O

45、bject. param) ResultSet rs = null ;PreparedStatement st = null ;List admins = new ArrayList();if (DbUtil.st =getConnection () != null ) creatPreparedStatement (sql);for (int i = 0; i param.length ; i+) try st.setObject(i + 1, parami); catch (SQLException e) e.printStackTrace();try rs = st.executeQue

46、ry(); catch (SQLException e) e.printStackTrace();dealAdminResult (rs, admins);try rs.close();DbUtil. getConnection ().close(); catch (SQLException e) e.printStackTrace(); return admins;/*处理结果集* paramrs*/public static void dealAdminResult(ResultSet rs, List admins) try while (rs.next() AdminDomain ad

47、min = new AdminDomain();admin.setAdminName(rs.getString( adminName);admin.setPassword(rs.getString( password);admins.add(admin); catch (SQLException e) e.printStackTrace();/*杳询所有用户信息paramsqlparamparam*/public static ResultSet selectAllUser(String sql) ResultSet rs = null ;PreparedStatement st = null

48、 ;if (DbUtil. getConnection () != null ) st = creatPreparedStatement (sql);try rs = st.executeQuery(); catch (SQLException e) e.printStackTrace();try DbUtil. getConnection ().close(); catch (SQLException e) e.printStackTrace(); return rs;AdminDomain:package edu.hfuu.domain;/*管理员* author Thunder - ki

49、ng* */public classAdminDomain privateprivateStringStringadminNamepassword ;public String getAdminName() return adminName;public void setAdminName(String adminName) this . adminName = adminName;public String getPassword() return password ;public void setPassword(String password) this . password = pas

50、sword;UserDomain:package edu.hfuu.domain;/* user 类* author Thunder - king*/public class UserDomain /用户名private String cardNum;_/密码privateint password ;/余额privateint balance ;public UserDomain() UserDomain(String cardNum, int password, int balance) this . cardNum = cardNum;this . password = password;this . balance = balance;public String getCardNum() return cardNum;public void setCardNum(String cardNum) this . cardNum = cardNum;public int getPassword() return password ;public void setPassword( int password) t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论