银行帐目管理系统

Coquettish

发布日期: 2019-01-30 08:23:38 浏览量: 765
评分:
star star star star star star star star star_border star_border
*转载请注明来自write-bug.com

摘 要

随着我国信息产业发展迅速以及中国加入世界贸易组织,国内银行之间以及与外国银行之间的竞争也越来越激烈,怎样发展业务以吸引更多顾客是各银行面队的当务之急。

而帐目管理是银行业务流程过程中十分重要且必备的环节之一,在银行业务流程当中起着相当重要的作用。现在银行的业务越来越多,吸引的客户也越来越多,银行帐目的管理就越显重要。

银行帐目管理系统是针对银行帐目的日常管理而设计。银行帐目管理系统不仅要求操作方便而且要求界面简洁,它还需要实现帐目管理,用户查询和查询统计功能。

针对上述情况和要求,采用软件工程的开发原理,依据软件流程过程规范,按照需求分析、概要设计、详细设计、程序编码、测试等过程开发了一个银行账目管理系统。采用JAVA作为编程语言,使用工具eclipse3.1设计实现了银行帐目管理系统,完成系统管理、帐目管理、查询统计、用户查询等功能。

关键词:用户查询;帐目管理;查询统计;JAVA;eclipse3.1

1 功能模块设计

1.1 银行帐目管理系统功能模块

银行帐目管理系统包括五个模块,分别为系统选项、帐目管理、查询统计、用户查询和帮助。其中帐目管理还包含了开户、销户、存款、取款和修改信息功能。用户查询包含了姓名查询、地址查询、帐号查询和电话查询。功能模块图如图所示。

1.2 功能模块介绍

银行帐目管理系统包括五个模块,分别为系统管理、帐目管理、查询统计、用户查询和帮助。其具体的功能如下:

  • 帐目管理模块:主要处理用户的日常操作

    • 开户:新建一个帐户,为其指定一个唯一的帐号来标志该用户
    • 销户:将指定用户的帐号删除。用户输入密码经过验证成功后,把帐户的余额全部取出,最后删除该帐户
    • 存款:向指定的帐户中存入一笔钱,经用户输入密码确认后,方可存入
    • 取款:从指定的帐户中取出一笔钱。取款前用户需要输入密码确认,取款后帐户余额不得少于帐户的最低存款额,否则不予处理
    • 修改信息:选择一个存在的帐户,然后输入密码经确认后进入用户信息窗口,可对里面的密码、联系电话和家庭住址进行修改,而帐号和帐户上的金额不能被用户修改
  • 查询模块:按照指定方式进行查找帐户信息,包括按姓名、帐号和联系电话进行查找,也可以按照地址进行模糊查找

  • 统计模块:对银行的数据进行统计,如对帐户数量的统计

2 系统的实现

2.1 登录界面的设计

在登录界面输入管理员姓名和密码,点击“确定”按钮,通过if(username.equals(getUsername())&&password.equals(getPassword()))语句进行比较; 判断是否通过验证,如果通过则释放,显示主窗体,进入操作主界面,如图所示。

当管理员打开登录界面后,如果不想登录,点击“退出”按钮退出系统,其代码如下:

  1. private void doExit() {
  2. System.exit(0);
  3. }

在登录时如果管理员输入错误的帐号或密码,通过JOptionPane.showMessageDialog(this,”错误的用户名或密码!”);提示管理员操作。

为防止暴力破解,设计三次输入错误密码,则自动退出系统的机制.其代码如下:

  1. else if(count == 3) {
  2. JOptionPane.showMessageDialog(this,"连续三次输入错误,退出系统!");
  3. doExit();
  4. }

为了防止下个用户看到上个用户的信息,利用setUsername(“”);和setPassword(“”);来清空用户名和密码输入框中的内容。

在设计登录界面的框架时,通过publicclass LoginWindow extends JFrame implements ActionListener{}定义一个登录窗口类,它继承于JFrame。

在设计好登录界面的框架后,要初始化所有控件,实现的部分代码如下:

  1. public void initComponent() {
  2. Container contentPane = this.getContentPane();
  3. contentPane.setLayout(null);
  4. labelUsername = new JLabel("管理员帐号:");
  5. labelPassword = new JLabel("管理员密码:");
  6. txtUsername = new JTextField();
  7. txtPassword = new JPasswordField();
  8. btnConfirm = new JButton("确定");
  9. btnCancel = new JButton("退出");
  10. }

2.2 操作主界面的设计

在操作主界面,可以进行各种操作,包括存款、取款、开户、销户、修改信息、显示全部和查找,而且界面简洁易于操作,如图所示。

在设计银行帐目管理系统的操作主界面时,先利用publicclass MainWindow extends JFrame implements ActionListener{… …}来定义一个主窗口类MainWindow,然后在里面定义所需要的全部变量,变量定义为private型。

在MainWindow类中,功能刻画的代码如下:

  1. public MainWindow(String title) {
  2. setTitle(title);
  3. setSize(WIDTH,HEIGHT);
  4. setResizable(false);
  5. setDefaultCloseOperation(EXIT_ON_CLOSE);
  6. initMenu();
  7. initComponent();
  8. center();
  9. loadAccountData();
  10. loadBillData();
  11. }

操作主界面的设计主要包括几部分:一是菜单栏的设计,二是中间部分表格的设计,三是下面部分按钮的设计。主要设计过程如下:

菜单栏的设计是先创建好菜单项,然后把菜单项添加到对应的菜单中,再将菜单添加至菜单栏中,最后把菜单添加到主窗体中。设计好操作主界面后,点击“查询统计”按钮,出现如图所示的下拉菜单。

实现的主要代码如下:

  1. public void initMenu() {
  2. menuBar = new JMenuBar();
  3. //创建菜单
  4. queryCountMenu = new JMenu("查询统计");
  5. //创建菜单项
  6. queryCountMI = new JMenuItem("查询统计");
  7. //给菜单项添加监听器,监听菜单项的单击事件
  8. queryCountMI.addActionListener(this);
  9. //菜单项添加到菜单里面
  10. queryCountMenu.add(queryCountMI);
  11. setJMenuBar(menuBar);
  12. }

操作主界面的表格如图所示。表格主要包含了姓名、帐号、卡上余额、家庭住址和电话,主要是方便查看信息。

表格部分的设计主要代码如下:

  1. //设置表格的列标题
  2. final String[] strColName = { "姓名", "帐号", "卡上余额", "家庭住址", "电话"};
  3. //获得表格的所显示数据的TableModel
  4. dm = (DefaultTableModel) table.getModel();
  5. //把列标题添加到表格中
  6. for ( int i = 0;i < strCOLName.length; i++ ){
  7. dm.addColumn(strCOLName[i]);
  8. }

窗体下面部分的控件的设计主要就先将控件创建出来,再将不同功能的控件分组放置,便于操作。

面板被只能创建一次,如果已经创建了该这块面板,直接返回创建好了的面板,提高效率。其实现代码如下:

  1. if(bottomPanel != null) {return bottomPanel;}

该面板的控件分三部分创建,分别放置在三个面板中,将实现不同功能的控件放在不同的面板中,达到界面美观,操作方便的目的。如图所示。

三个面板通过程序中的三个方法
getBottomLeftPanel(), getBottomMiddlePanel()以及getBottomRightPanel()。这样的划分增强了程序的可以读性,不同的方法实现不同的功能,一目了然。实现的主要代码如下:

  1. private JPanel getBottomPanel() {
  2. if(bottomPanel != null) {
  3. return bottomPanel;
  4. }
  5. bottomPanel = new JPanel();
  6. bottomPanel.setLayout(new GridLayout(1,3));
  7. bottomPanel.add(getBottomLeftPanel());
  8. bottomPanel.add(getBottomMiddlePanel());
  9. bottomPanel.add(getBottomRightPanel());
  10. return bottomPanel;
  11. }

2.3 功能界面的设计

2.3.1 显示全部的功能实现

在实现存款、取款、销户和修改信息的时候都需要显示出表格中的信息,然后选择一个帐户后进行操作。

点击操作主界面的“显示全部”按钮,在表格中出现已经存在的信息,当存款、取款、销户和修改信息等操作的时候,显示的信息会发生变化,这主要是随着操作的进行,系统会清除以前的数据。实现的代码如下:

  1. private void doShowAll() {
  2. Account[] account = new Account[data.getCount()];
  3. data.getAccountList().toArray(account);
  4. //清除表格中以前的数据
  5. while(table.getRowCount() != 0) {
  6. dm.removeRow(0);
  7. }
  8. //显示出所有帐户数据
  9. for(int i=0; i<data.getCount(); i++) {
  10. String[] strRow = {account[i].getName(), account[i].getId(),
  11. account[i].getMoney()+"", account[i].getAddress(), account[i].getPhone()};
  12. dm.addRow(strRow);
  13. }
  14. }

2.3.2 开户窗口的设计与实现

在系统操作主界面单击右下角的“开户”按钮,进入如图所示的开户窗口。

单击开户按钮或在菜单栏中选择开户菜单项后,会弹出一个信息收集框,收集用户信息。帐号是系统根据系统中已有帐户的数量自动生成的标识,是帐户的关键变量,一个帐号只能对应唯一的帐户。用户在银行的所有操作,即存款,取款,修改信息和销户,都是通过用户的帐号来确定唯一帐户的。开户时,窗体上会显示出该帐户的唯一帐号。姓名、存款和家庭住址是必填项,其中存款必须是大于1的整数,通过如下代码验证:

  1. //验证是否输入正确的存款
  2. if(!getMoney().matches("[1-9][0-9]*")) {
  3. JOptionPane.showMessageDialog(this,"请输入正确的存款!");
  4. return;
  5. }

密码和电话号码是可以不填,密码不填写时默认是000000,如果要输入必须是六位数字,电话号码输入的话必须是合法的电话号码,主要验证代码如下:

  1. //验证密码是否合法
  2. if(!getPassword().matches("[0-9]{6}")) {
  3. JOptionPane.showMessageDialog(this,"请输入六位数字的密码!");
  4. return;
  5. }
  6. //验证电话是否有效
  7. if(getPhone().length() > 0 &&
  8. !getPhone().matches("[0-9]{7}[0-9]*")) {
  9. JOptionPane.showMessageDialog(this,"请输入正确的电话号码!");
  10. return;
  11. }

信息收集完成后,保存该帐户的信息,并生成一张开户清单,将清单保存到另外的一个文件中备份。主要代码如下:

  1. //将帐户数据添加到帐户数据链表
  2. data.addAccount(account);
  3. //保存帐户信息到文件
  4. FileOutputStream fos = new FileOutputStream(file);
  5. ObjectOutputStream oos = new ObjectOutputStream (fos);
  6. oos.writeObject(listAccount);
  7. oos.close();
  8. //将新的存取清单添加到存取清单链表
  9. billData.addBill(bill);
  10. //保存存取清单数据到文件
  11. FileOutputStream fos = new FileOutputStream(file);
  12. ObjectOutputStream oos = new ObjectOutputStream (fos);
  13. oos.writeObject(listBill);
  14. oos.close();

2.3.3 销户窗口的设计与实现

在系统操作主界面单击右下角的“显示全部”按钮后选中一个要销户的帐户,然后点击“销户”按钮,弹出输入密码的信息框,经过验证后单击“确定”按钮能完成销户功能,同时弹出一个如图所示的信息框,显示存取信息,里面包含有用户名、帐号、操作类型、金额、余额、流水号和操作日期等信息。在销户的时候同时取完帐户上的存款金额,最后完成销户功能。点击操作主界面的“显示全部”按钮,可以看到销户的帐户已经不存在了。

当找到要销户的帐户之后,帐户要输入密码确认进行销户操作,具体的代码如下:

  1. //找到要取款的帐户后,要用户输入密码确认进行销户操作
  2. while(true) {
  3. String strPassword =
  4. JOptionPane.showInputDialog(this,"请输入密码:");
  5. if(strPassword == null) {
  6. return;
  7. }else if(account.getPassword().equals(strPassword)){
  8. break;
  9. } else if((++i) < 3) {
  10. JOptionPane.showMessageDialog(this,"密码错误!请重新输入!");
  11. continue;
  12. }
  13. JOptionPane.showMessageDialog(this,"密码输错三次,帐号被锁定!");
  14. return;
  15. }

用户确认后,将帐户中的余额全部取出。先删除帐户链表中该帐户的信息,然后在删除外部文件中该帐户的数据,打印出销户清单,主要的代码如下:

  1. //将新的存取清单添加到 存取清单链表中
  2. data.getAccountList().remove(account);
  3. //保存帐户信息到文件
  4. FileOutputStream fos = new FileOutputStream(file);
  5. ObjectOutputStream oos = new ObjectOutputStream (fos);
  6. oos.writeObject(listAccount);
  7. oos.close();
  8. //将新的存取清单添加到存取清单链表
  9. billData.addBill(bill);
  10. //保存存取清单数据到文件
  11. FileOutputStream fos = new FileOutputStream(file);
  12. ObjectOutputStream oos = new ObjectOutputStream (fos);
  13. oos.writeObject(listBill);
  14. oos.close();

2.3.4 存款和取款窗口的设计与实现

存款和取款的操作方法都是一样的,都是首先在操作主界面里选中一个需要存款(取款)的帐户,如图所示,然后点击按钮(存款或取款按钮),弹出输入密码的信息框,帐户输入密码经验证后。

在没有选中帐户的时候点击存款按钮,系统会提示帐户,实现的代码为:

  1. if(row == -1) {
  2. //如果没有选中记录,提示先选中记录才能存款
  3. JOptionPane.showMessageDialog(this,"请先选择要存款的帐户!");
  4. }

选中要存款的帐户后,点击存款按钮,弹出输入密码框,帐户要输入密码验证后才能存款操作,当没有输入的密码或者输错3次,会自动退出系统,实现的代码如下:

  1. else{
  2. //根据选择的行获得标识该帐户的唯一ID
  3. String delId = (String)dm.getValueAt(table.getSelectedRow(), 1);
  4. //根据ID在帐户链表中找到该帐户并返回该帐户的引用
  5. while(iterator.hasNext()){
  6. account = (Account)iterator.next();
  7. if(account.getId().equals(delId)) {
  8. break;
  9. }
  10. }
  11. //找到要存款的帐户后,要用户输入密码确认进行存款操作
  12. int number = 0;
  13. while(true) {
  14. String strPassword = JOptionPane.showInputDialog(this,"请输入密码:");
  15. if(strPassword == null) {
  16. return;
  17. } else if (account.getPassword().equals(strPassword)) {
  18. break;
  19. } else if((++number) < 3) {
  20. JOptionPane.showMessageDialog(this,"密码错误!请重新输入!");
  21. continue;
  22. }
  23. JOptionPane.showMessageDialog(this,"密码输错三次,帐号被锁定!");
  24. return;
  25. }

验证密码通过后,在输入框中输入存款金额,金额必须为数字,如果输入其他信息,系统会报错,如图所示。

实现的代码如下:

  1. //存款数目只能是数字
  2. String strNumber = null;
  3. while (true) {
  4. strNumber = JOptionPane.showInputDialog(this, "请输入存款金额:");
  5. if(strNumber == null) {
  6. return;
  7. } else if (strNumber.matches("[1-9][0-9]*")) {
  8. break;
  9. }
  10. JOptionPane.showMessageDialog(this, "输入错误!请输入数字!");
  11. }

通过account.setMoney(account.getMoney()+ Integer.parseInt(strNumber));来实现存款操作。

存款完后显示一张存取信息表,如图所示。产生的存取清单会存储到存取清单链表中去,点击“显示全部”按钮,显示新的信息,此时的卡上余额信息已经发生变化。

参考文献

[1] 汪志达.Java程序设计项目化教程[M].北方交通大学出版社

[2] 吴其庆.JAVA编程思想与实践[M].冶金工业出版社

[3] 孙印杰,刘斌,孙玉强等.Java编程案例精解[M].电子工业出版社

[4] 陆正五,蒋武等.Java项目开发实践[M].中国铁道出版社

上传的附件 cloud_download 银行帐目管理系统.zip ( 269.33kb,?15次下载 )
error_outline 下载需要7点积分
eject