java课程设计报告_自动取款机程序_第1页
java课程设计报告_自动取款机程序_第2页
java课程设计报告_自动取款机程序_第3页
java课程设计报告_自动取款机程序_第4页
java课程设计报告_自动取款机程序_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

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

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

3、户客户端和管理客户端,所以在数据库中需要设计用户信息表和管理员信息表分别来保存用户信息和管理员信息。表1用户信息表(userse)列名数据类型及长度是否为空主键说明FIDvarcharNO主键用户帐号FNamevarcharNO用户名 FPswvarcharNO用户密码FMonvarcharNO钱数目表2管理员信息表(gl)列名数据类型及长度是否为空主键说明FIDvarcharNO主键管理员帐号 FPswvarcharNO管理员密码四、系统设计1、总体设计我所设计的ATM机主要是由登录页面模块还由选择服务模块组成,在登录时可选择用户登录或管理员登陆。其中用户的选择服务模块由取款模块、存款模块、

4、查询余额模块、修改密码模块、转账模块、退卡模块组成,管理员的选择服务模块由开户模块、销户模块、修改个人密码模块退出模块组成。其功能结构图如下所示:ATM取款机系统登入模块退出模块事物模块退卡修改密码转账存款查询余额取款输入账号输入密码 用户模块结构图 2 、ATM柜员机界面设计我觉得一个系统的界面应该要简单明了,当然样式美观就更好了。我设计的界面主要是由窗体组成,操作简单。而每一个窗口则执行相应的功能。一个系统界面的好坏直接影响到用户的操作,界面设计要求样式美观、简单明了、方便易操作。我设计的界面主要分为窗体、菜单、按钮和文本输入框几个部分,分别执行相应的操作。(1)窗体的设计窗体整个框架使用

5、JFrame类构造,JFrame有自己的外边框和自己的标题,创建JFrame时可以指定其窗口标题,我创建的窗口标题是各个不同功能的模块的名字,比如说查询余额窗口,取款窗口等。(2)窗体的主要结构的设计我所设计的窗口的主要结构的特点就是每个窗口都对应着一个特定的功能。比如说报各种各样的错,还有各种查询余额、取款、选择服务等,所以它们都是由各种按钮和文本框,标签组成的,而联系各个窗体成为一个整体的就是各个按钮的监听事件,另外所有窗口布局均为网格布局。为了定义各个按钮所对应的命令和操作,首先需要将各个按钮注册给实现了动作事件的监听接口ActionListener的监听者,然后为监听者定义action

6、Performed(ActionEvent e)方法,在这个方法中调用e.getSource()或e.getActionCommand()来判断用户点击的菜单子项,并完成这个菜单子项定义的操作。3 、各功能模块设计3.1 登录页面模块设计用户进入登录页面后要输入账号和密码,点击确定后系统会通过连接数据库验证密码是否正确,在密码正确的情况下界面跳转到功能选择界面,否则弹出警告密码错误窗口。我定义了文本框累的对象FI,FPs。主要是用于输入单行的文本;文本区调用public String getText()方法,获取用户想要的字符串。因为要区分登录者是用户还是管理员,所以设置了两个JRadioBu

7、tton来确定登录者的身份。当登录者选择的身份为用户时通过Alogin()类驱动加载数据库,从用户表中获取相关信息并与用户输入信息比较,信息相符时登录成功,否则弹出警告窗口。部分源码如下; if(gl.isSelected() DatabaseOperate myLogin = new DatabaseOperate();/连接数据库及相关操作s = myLogin.Alogin(FI.getText().trim();if (FI.getText().trim().equals(s0.trim()&& (FPs.getText().trim().equals(s1.trim(

8、) JOptionPane.showMessageDialog(null,”您好,Administrator Welcome!");dispose(); / 关闭登录窗口new AdminFrame(); / 调出管理员操作窗口 else JOptionPane.showMessageDialog(null, "用户名或密码错误,请重新登录!","警告", JOptionPane.ERROR_MESSAGE); 当登录者选择身份为管理员时身份验证源码如下:else if(us.isSelected()DatabaseOperate myLogi

9、n = new DatabaseOperate();s = myLogin.login(FI.getText().trim();if (FI.getText().trim().equals(s0.trim()&& (FPs.getText().trim().equals(s1.trim() JOptionPane.showMessageDialog(null, "欢迎普通用户,登录成功!");dispose(); / 关闭登录窗口new MainFrame(); / 调出主操作窗口 else JOptionPane.showMessageDialog(nul

10、l, "用户名或密码错误,请重新登录!","警告", JOptionPane.ERROR_MESSAGE); 图1 登录窗口3.2 选择服务模块设计在选择服务模块中,有各种ATM的服务功能,只要用户在该界面中选择按钮,它就会弹出各个相应的界面。每一个按钮都有监听器,在选择了按钮后,java.awt.event中的ActionEvent类创建一个事件对象,并将它传递给方法public void actionPerformed(ActionEvent e)中的参数e,监视器就会知道所发生的事件,对此事件进行处理。其中的部分源代码为:public void a

11、ctionPerformed(ActionEvent e) if (e.getSource() = deposit) dispose();new DepositFrame(); else if (e.getSource() = get) dispose();new GetFrame(); else if (e.getSource() = transfer) dispose();new TransferFrame(); else if (e.getSource() = change) dispose();new Change();else if (e.getSource() = search)

12、DatabaseOperate mySearch = new DatabaseOperate(); String t = new String2; t = mySearch.schbalance(BankSystem.s0.trim(); FMo.setText(t1);else if (e.getSource() = exit) dispose();JOptionPane.showMessageDialog(null,"请取回您的磁卡!");dispose(); 图2 主操作窗口3.3 取款模块设计在取款模块有两个取款窗口,取款窗口1和取款窗口2。在取款窗口1中用户可以直

13、接点击固定金额对应的按钮进行取款,当然了取款的时候也不能超过卡里的余额,否则就会弹出报错的窗口。取款窗口1部分源代码如下:DatabaseOperate myGet = new DatabaseOperate();String t = new String2;if (e.getSource() = money1) Integer moneyi=100;String money=moneyi.toString(); t = myGet.schbalance(BankSystem.s0.trim(); if (100 <= Double.parseDouble(t1.trim() myGet

14、.get(money, BankSystem.s0.trim();JOptionPane.showMessageDialog(null, "成功取款100元!");dispose();new MainFrame(); elseJOptionPane.showMessageDialog(null,"取款失败,您金额不足!", "警告",JOptionPane.ERROR_MESSAGE);图3 取款窗口1当用户想要取款金额不存在对应的按钮时,用户可以点击其他面值按钮,然后系统将会关闭当前窗口弹出取款窗口2,在该窗口用户可以再文本框里输入

15、任意整百的金额进行取款操作。部分源代码如下:DatabaseOperate myGet = new DatabaseOperate();String t = new String2;if (e.getSource() = ok) int money;String myText;myText= moneyField.getText();money=Integer.parseInt(myText); if(money % 100 =0) t = myGet.schbalance(BankSystem.s0.trim();if (Double.parseDouble(moneyField.getTe

16、xt() <= Double.parseDouble(t1.trim() myGet.get(moneyField.getText().trim(), BankSystem.s0.trim();JOptionPane.showMessageDialog(null, "取款成功!");dispose();new MainFrame();elseJOptionPane.showMessageDialog(null,"取款失败,您金额不足!", "警告",JOptionPane.ERROR_MESSAGE); else JOption

17、Pane.showMessageDialog(null, "请重新输入,请输入整百的数!", "警告",JOptionPane.ERROR_MESSAGE); moneyField.setText(null); 图4 取款窗口23.4 存款模块设计 在存款模块中,用e.getSource()方法获取用户在文本框中输入的金额,然后调用DatabaseOperate()类的deposit(String,String)方法来更新数据库里的相关信息。deposit(String,String)方法的源代码如下:public String deposit(Stri

18、ng money, String num) DatabaseConn DB = new DatabaseConn();this.FMon = money;this.FID = num;String t = new String2;t = schbalance(FID);double temp = Double.parseDouble(t1.trim()+ Double.parseDouble(FMon);sql = "update userse set FMon = " + temp+ " where FID = " + Integer.parseInt

19、(t0.trim()+ " "try DB.OpenConn(); DB.executeUpdate(sql); catch (Exception e) System.out.println(e);JOptionPane.showMessageDialog(null, "存款失败!"); finally DB.closeStmt();DB.closeConn(); return t; 图5 存款窗口3.5修改密码模块设计在修改密码模块中,首先你必须要输入你的旧密码是否正确,否则就会报错。再一个就是要两次输入你的新密码,且两次要匹配,否则也会报错,然后再重

20、新回到修改密码的界面。在修改密码时用到的方法为:DatabaseOperate myChan = new DatabaseOperate(); if(e.getSource()=ok) /单击确定按钮后,判断两次输入的新密码是否一致 if(FPs1.getText().trim().equals(FPs2.getText().trim() myChan.change(FPs1.getText().trim(), BankSystem.s0.trim(); JOptionPane.showMessageDialog(null, "密码修改成功!"); dispose(); n

21、ew MainFrame(); else JOptionPane.showMessageDialog(null," 您再次输入的密码不一致,请重新输入!"); 图6 用户修改密码窗口3.6 转账模块设计在该模块中用两个文本框分别获取转账对方的账号和转账金额,通过Catch()方法连接数据库检索对方账号是否存在,在对方账号存在的情况下在调用schbalance()方法查看本人账户金额是否充足,若充足则调用get()和deposit()方法分别对本人账户进行取款操作对对方账户进行取款操作。部分代码如下:if(Double.parseDouble(moneyField.getTe

22、xt().trim() <= Double.parseDouble(t1.trim() myTransfer.get(moneyField.getText().trim(), BankSystem.s0.trim(); /本人相当于取钱 myTransfer.deposit(moneyField.getText().trim(), FI.getText().trim();/对方相当于存钱JOptionPane.showMessageDialog(null,"转账成功!"); dispose(); new MainFrame(); else JOptionPane.sh

23、owMessageDialog(null,"转账失败,您卡上余额不足!","警告",JOptionPane.ERROR_MESSAGE); 图7 转账窗口3.7查询余额模块设计查询余额功能是在主操作窗口中实现的,当用户点击查询余额按钮时在下面的文本框中显示出该账号的当前余额。图8 查询余额窗口3.8 管理员操作模块设计 管理员登录后可以进行的操作有开户、销户、修改个人密码。在开户操作时要先检查新的账户是否已经存在,销户时可以先查询被销账户中的余额。图9 管理员操作窗口开户部分代码如下:info0 = FID.getText().trim();info1

24、= FName.getText().trim();DatabaseOperate mycatch = new DatabaseOperate();a = mycatch.Catch(FID.getText().trim();if (a=false) DatabaseOperate insertTable = new DatabaseOperate();String sqluserse = " insert into userse(FID,FName,FPsw ,FMon)" +"values('"+info0+"', '

25、"+info1+"', '"+123456+"','"+ 0 +"')" insertTable.Insert(sqluserse); JOptionPane.showMessageDialog(null, "客户信息已添加!"); dispose(); new AdminFrame(); else JOptionPane.showMessageDialog(null, "此帐号已存在,请重新输入!","警告", JOptio

26、nPane.ERROR_MESSAGE);FID.setText(null);FName.setText(null);图10 开户窗口销户部分代码如下:if (e.getSource() = logoff) / 将找到的相关信息,删除String deluserse = "delete from userse where FID = "+ Integer.parseInt(FID.getText().trim() + ""myLogoff.Insert(deluserse);JOptionPane.showMessageDialog(null, &quo

27、t;客户所有信息已删除!");dispose();new AdminFrame();else if (e.getSource() = search) DatabaseOperate mySearch = new DatabaseOperate(); String t = new String2; t = mySearch.schbalance(FID.getText().trim(); FMo.setText(t1)图11 销户窗口图12 管理员个人密码修改窗口五、设计中遇到的问题在此次课程设计中,我遇到了一些问题,如:对于面向对象的方法了解不够透彻,运用到实际的软件开发中存在着困难

28、;对于Java语言,只学习到了一些最基本的知识,这导致编写程序时经常出现一些语法错误,而且要在短时间内用Java语言来设计一个具体的系统是一个较大的挑战;还有对于正规开发一个系统的流程不熟悉,适应起来比较慢,编写各个模块相对应的操作时,自己感觉难以动手,这表明所学的知识不能灵活运用到实际中。尤其是连接数据库的相关操作感觉更加困难,在此也花了很长时间。 对于以上的问题,自己有清楚的认识,解决办法是需要大量阅读相关的书籍,对于书上以及网站上下载的资料中的Java实例必须有清楚的理解,还有就是多跟精通此方面的老师和同学交流,取其精华。对于实际动手能力与系统开发的流程的适应,必须多进行实际的练习与操作

29、,才能有大的进步。六、设计体会在这次的课程设计中,主要是运用JAVA语言来编写一个小的应用程序,当然还可以用其他的技术来辅助了。在这个小应用程序当中,我用了Java外还用了Swing控件。由于以前学的不是很扎实,而且还有些知识我们都是没有学过的,这就要求我们去查相关的书籍,还有就是和同学之间的交流。正因为这样,才锻炼了我的自学的能力,还有就是加深了我对各个知识点的认识,并且提高了我对专业的学习的兴趣,为我以后的学习打下了基础。此外,我还感受到了面向对象语言的类库的强大的功能,掌握了运用JAVA中的类实现某些基本功能,并学会了自己查询使用类的方法,也就是要会用API文档,为以后更好的学习面向对象

30、语言奠定了基础。七、参考文献1 王桂彬、刘家兰,JAVA大学教程M.清华大学出版社 20082 印昊, JAVA与面向对象程序设计M.高等教育出版社 20043 李尊朝, JAVA语言程序设计M.中国铁道出版社 20044 丁诚.JAVA完全自学手册M.机械工业出版社 2010八、源代码登录相关代码package abc;import java.awt.Color;import java.awt.Container;import java.awt.Font;import java.awt.GridLayout;import java.awt.TextField;import java.awt.

31、event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.ButtonGroup;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JRadioButton;import DB.DatabaseOperate;class BankSystem ext

32、ends JFrame implements ActionListener static String s = new String4;private static final long serialVersionUID = 1L;JPanel p1 = new JPanel();JPanel p2 = new JPanel();JPanel p3 = new JPanel();JPanel p4 = new JPanel();JPanel p5 = new JPanel();JLabel label1 = new JLabel("账 号:");TextField FI =

33、 new TextField(15);JLabel label2 = new JLabel("密 码:");TextField FPs = new TextField(15);JButton Enter = new JButton("登 录");JButton Exit = new JButton("退 出");ButtonGroup bgp = new ButtonGroup();JRadioButton us = new JRadioButton("用 户");JRadioButton gl = new JRa

34、dioButton("管理员");JLabel label = new JLabel("欢迎进入ATM系统!");public BankSystem() this.setResizable(false);Container contentPane = this.getContentPane();/ 取出内容面板(获取当前类的窗口)contentPane.setLayout(new GridLayout(5, 1);/网格布局 setBackground(Color.LIGHT_GRAY); / 设置背景色 label.setFont(new Font(&

35、quot;Sans Serif", Font.BOLD, 30); p1.add(label); p2.add(label1); p2.add(FI); p3.add(label2); p3.add(FPs); p4.add(us); p4.add(gl); p5.add(Enter); p5.add(Exit); bgp.add(us);bgp.add(gl);contentPane.add(p1); / 将面板添加到内容面板contentPane.add(p2);contentPane.add(p3);contentPane.add(p4);contentPane.add(p5)

36、;Enter.addActionListener(this);Exit.addActionListener(this);setSize(500, 400);setLocation(400, 150);setTitle("登录窗口");setVisible(true);public void actionPerformed(ActionEvent e) if (e.getSource() = Enter) / 单击确定按钮后 if(gl.isSelected() DatabaseOperate myLogin = new DatabaseOperate();s = myLog

37、in.Alogin(FI.getText().trim();if (FI.getText().trim().equals(s0.trim()&& (FPs.getText().trim().equals(s1.trim() JOptionPane.showMessageDialog(null,"您好,Administrator Welcome!");dispose(); / 关闭登录窗口new AdminFrame(); / 调出管理员操作窗口 else JOptionPane.showMessageDialog(null, "用户名或密码错误,请

38、重新登录!","警告", JOptionPane.ERROR_MESSAGE); else if(us.isSelected()DatabaseOperate myLogin = new DatabaseOperate();s = myLogin.login(FI.getText().trim();if (FI.getText().trim().equals(s0.trim()&& (FPs.getText().trim().equals(s1.trim() JOptionPane.showMessageDialog(null, "欢迎普

39、通用户,登录成功!");dispose(); / 关闭登录窗口new MainFrame(); / 调出主操作窗口 else JOptionPane.showMessageDialog(null, "用户名或密码错误,请重新登录!","警告", JOptionPane.ERROR_MESSAGE); else if (e.getSource() = Exit) / 单击取消dispose();System.exit(0); public static void main(String args) new BankSystem();主操作窗口相关

40、代码package abc;import java.awt.Color;import java.awt.Container;import java.awt.Font;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import ja

41、vax.swing.JPanel;import javax.swing.JTextField;import DB.DatabaseOperate;class MainFrame extends JFrame implements ActionListener private static final long serialVersionUID = 1L;JPanel p1 = new JPanel();JPanel p2 = new JPanel();JPanel p3 = new JPanel();JPanel p4 = new JPanel();JPanel p5 = new JPanel

42、();JLabel label1 = new JLabel("O(_)O欢迎使用银行管理系统O(_)O");JButton deposit = new JButton(" 存 款 ");JButton get = new JButton(" 取 款 ");JButton search = new JButton(" 查询余额 ");JButton change = new JButton(" 修改密码 ");JButton transfer = new JButton(" 转 账 &q

43、uot;);JButton exit = new JButton(" 退 出 ");JTextField FMo = new JTextField(10);public MainFrame() setBackground(Color.LIGHT_GRAY);/ 设置背景色Container contentPane = this.getContentPane();/ 取出内容面板(获取当前类的窗口)contentPane.setLayout(new GridLayout(5, 1);label1.setFont(new Font("Sans Serif",

44、 Font.BOLD, 20);/ 设置字体p1.add(label1);p2.add(deposit);/存款p2.add(get);/取款p3.add(search);/ 将组件添加到中间容器p3.add(change);p4.add(transfer);/转账p4.add(exit); / 将组件添加到中间容器(取回磁条)p5.add(new JLabel(" 您当前可用余额为:"); p5.add(FMo); p5.add(new JLabel("元!");search.addActionListener(this);change.addActi

45、onListener(this);deposit.addActionListener(this);get.addActionListener(this);transfer.addActionListener(this);exit.addActionListener(this);contentPane.add(p1); / 将面板添加到内容面板contentPane.add(p2);contentPane.add(p3);contentPane.add(p4);contentPane.add(p5);setSize(500, 400);setLocation(400, 150);setTitle

46、("主操作窗口");setVisible(true);public void actionPerformed(ActionEvent e) if (e.getSource() = deposit) dispose();new DepositFrame(); else if (e.getSource() = get) dispose();new GetFrame(); else if (e.getSource() = transfer) dispose();new TransferFrame(); else if (e.getSource() = change) dispos

47、e();new Change();else if (e.getSource() = search) DatabaseOperate mySearch = new DatabaseOperate(); String t = new String2; t = mySearch.schbalance(BankSystem.s0.trim(); FMo.setText(t1);else if (e.getSource() = exit) dispose();/new BankSystem();JOptionPane.showMessageDialog(null,"请取回您的磁卡!"

48、);dispose();public static void main(String args) new BankSystem();取款窗口1相关代码package abc;import java.awt.Color;import java.awt.Container;import java.awt.Font;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.

49、JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import DB.DatabaseOperate;class GetFrame extends JFrame implements ActionListener private static final long serialVersionUID = 1L;JPanel p1 = new JPanel();JPanel p2 = new JPanel();JPanel p3 = new JPanel();JPane

50、l p4 = new JPanel();JLabel label1 = new JLabel("欢迎使用ATM取款业务!");JButton money1 = new JButton(" 100 ");JButton money2 = new JButton(" 200 ");JButton money3 = new JButton(" 500 ");JButton money4 = new JButton(" 1000 ");JButton other = new JButton("

51、 其他面值 ");JButton cancel = new JButton(" 返 回 ");public GetFrame() setBackground(Color.LIGHT_GRAY);/ 设置背景色Container contentPane = this.getContentPane();/ 取出内容面板contentPane.setLayout(new GridLayout(4 , 1);label1.setFont(new Font("DialogInput", Font.BOLD, 30);p1.add(label1);p2.a

52、dd(money1);p2.add(money2);p3.add(money3); p3.add(money4);p4.add(other);p4.add(cancel);/ 将组件添加到中间容器money1.addActionListener(this);money2.addActionListener(this);money3.addActionListener(this);money4.addActionListener(this);other.addActionListener(this);cancel.addActionListener(this);contentPane.add(p1);contentPane.add(p2);/ 将面板添加到内容面板 contentPane.add(p3);contentPane.add(p4);setSize(500, 400);setLocation(400, 150);setTitle("取款窗口1");setVisible(true);public void actionPerformed(ActionEvent e) DatabaseOperate myGet =

温馨提示

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

评论

0/150

提交评论