• java毕业设计——基于java+eclipse+sqlserver的银行帐目管理系统设计与实现(毕业论文+程序源码)——银行帐目管理系统


    基于java+eclipse+sqlserver的银行帐目管理系统设计与实现(毕业论文+程序源码)

    大家好,今天给大家介绍基于java+eclipse+sqlserver的银行帐目管理系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴,可以进入我的博客主页查看左侧最下面栏目中的自助下载方法哦

    文章目录:

    1、项目简介

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

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

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


    2、资源详情

    项目难度:中等难度
    适用场景:相关题目的毕业设计
    配套论文字数:9778个字26页
    包含内容:整套源码+完整毕业论文


    3、关键词

    用户查询;帐目管理;查询统计;JAVA;eclipse

    4、毕设简介

    提示:以下为毕业论文的简略介绍,项目源码及完整毕业论文下载地址见文末。

    1 引言
    随着社会经济的发展,信息化程度的不断深入,银行的传统业务己愈来愈不能满足银行客户的需要。同时,随着我国加入世贸组织,我国的银行业面临更加激烈的同业竞争,如何提供更多的金融产品和更优质的服务,如何吸引更多的客户,如何利用计算机技术加强银行帐户信息管理,提高银行的工作效率和业务竟争能力是摆在各家银行面前的一个迫切需要解诀的问题。
    1.1 开发背景
    随着科技发展和社会进步,尤其是计算机大范围的普及,计算机应用逐渐由大规模科学计算的海量数据处理转向大规模的事务处理和对工作流的管理,这就产生了以台式计算机为核心的管理信息系统在大规模的事务处理和对工作流的管理等方面的应用,在银行帐目管理之中的应用日益增加。

    近年来我国信息产业发展迅速,手工管理方式在银行帐目管理等需要大量事务处理的应用中已显得不相适应,采用IT技术提高服务质量和管理水平势在必行。目前,对外开放必然趋势使银行业直面外国银行巨头的直接挑战,因此,银行必须提高其工作效率,改善其工作环境。这样,帐户管理的信息化势在必行。

    在传统的银行帐户管理中,其过程往往是很复杂的,繁琐的,帐户管理以入帐和出帐两项内容为核心,在此过程中又需要经过若干道手续,因为整个过程都需要手工操作,效率十分低下,且由于他们之间关联复杂,统计和查询的方式各不相同;且会出现信息的重复传递问题,因此该过程需要进行信息化,以利用计算机进行帐目管理。

    系统开发的整体任务是实现银行帐户管理的系统化、规范化、自动化和智能化,从而达到提高企业管理效率的目的。

    1.2 开发意义
    省略

    2 系统需求分析
    2.1 银行帐目管理系统的需求
    银行帐目管理系统是针对银行帐目的日常管理而设计。银行操作系统不仅要求操作方便而且要求界面简洁,它需要实现帐目管理,用户查询和查询统计等几个功能。其中帐目管理又包含了开户、销户、存款、取款和修改信息的功能。用户可以通过不同的方式来查询需要的信息。

    通过该系统的设计实现,使银行部门更好地进行业务管理,为客户提供更佳优质的服务。

    2.2 用户对系统的期望
    银行对帐目管理系统的要求主要有以下几个方面:

    1. 系统能够完成银行帐目管理系统的主要功能;
    2. 系统界面简洁,容易操作;
    3. 具有一定的稳定性,安全性;
    4. 访问速度快。

    2.3 编程语言和运行环境介绍
    银行帐目管理系统采用Java语言进行编程。Java语言是一种很优秀的语言,是目前软件设计中极为壮健的编程语言,只要提供了Java解释器,Java编写的软件在执行码上兼容。Java作为一种程序设计语言,它简单、面向对象、不依赖于机器的结构、具有可移植性、安全性、并且提供了并发的机制,具有很高的性能。其次,它最大限度地利用了网络,Java的小应用程序(applet)可在网络上运行而不受CPU和环境的限制。另外,Java还提供了丰富的类库,使程序设计者可以很方便地建立自己的系统。

    通过分析Java的特点,进一步指出它所具有的优点。
    Java语言有下面一些特点:简单、面向对象、与平台无关、解释执行、多线程、安全、动态性。

    1. 简单:Java语言是一种面向对象的语言,它通过提供最基本的方法来完成指定的任务,只需理解一些基本的概念,就可以用它编写出适合于各种情况的应用程序。Java略去了运算符重载、多重继承等模糊的概念,并且通过实现自动垃圾回收,大大简化了程序设计者的内存管理工作。
    2. 面向对象:Java语言的设计集中于对象及其接口,它提供了简单的类机制以及动态的接口模型。对象中封装了它的状态变量以及相应的方法,实现了模块化和信息隐藏;而类则提供了一类对象的原型,并且通过继承机制,子类可以使用父类所提供的方法,实现了代码的复用。
    3. 与平台无关:Java解释器生成与体系结构无关的字节码指令,只要安装了Java运行时系统,Java程序就可在任意的处理器上运行。这些字节码指令对应于Java虚拟机中的表示,Java解释器得到字节码后,对它进行转换,使之能够在不同的平台运行。
    4. 解释型:Java解释器直接对Java字节码进行解释执行。字节码本身携带了许多编译时信息,使得连接过程更加简单。
    5. 多线程:Java还有一特点就是内置对多线程的支持。多线程支持完成多个任务。
    6. 安全:用于网络、分布环境下的Java必须要防止病毒的入侵。Java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止程序员使用“特洛伊”木马等欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。
    7. 动态:Java的设计使它适合于一个不断发展的环境。在类库中可以自由地加入新的方法和实例变量而不会影响用户程序的执行。并且Java通过接口来支持多重继承,使之比严格的类继承具有更灵活的方式和扩展性。

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

    在这里插入图片描述

    3.2 功能模块介绍
    银行帐目管理系统包括五个模块,分别为系统管理、帐目管理、查询统计、用户查询和帮助。其具体的功能如下:
    帐目管理模块:主要处理用户的日常操作。
    (1)开户:新建一个帐户,为其指定一个唯一的帐号来标志该用户‘
    (2)销户:将指定用户的帐号删除。用户输入密码经过验证成功后,把帐户的余额全部取出,最后删除该帐户。
    (3)存款:向指定的帐户中存入一笔钱,经用户输入密码确认后,方可存入。
    (4)取款:从指定的帐户中取出一笔钱。取款前用户需要输入密码确认,取款后帐户余额不得少于帐户的最低存款额,否则不予处理。
    (5)修改信息:选择一个存在的帐户,然后输入密码经确认后进入用户信息窗口,可对里面的密码、联系电话和家庭住址进行修改,而帐号和帐户上的金额不能被用户修改。

    查询模块:按照指定方式进行查找帐户信息,包括按姓名、帐号和联系电话进行查找,也可以按照地址进行模糊查找。
    统计模块:对银行的数据进行统计,如对帐户数量的统计。

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

    在这里插入图片描述

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

    private void doExit() {
    		System.exit(0);
    	}
    在登录时如果管理员输入错误的帐号或密码,通过JOptionPane.showMessageDialog(this,"错误的用户名或密码!");提示管理员操作。
    为防止暴力破解,设计三次输入错误密码,则自动退出系统的机制.其代码如下:
     else if(count == 3) {
    JOptionPane.showMessageDialog(this,"连续三次输入错误,退出系统!");
    	   doExit();
    }		
    

    为了防止下个用户看到上个用户的信息,利用setUsername(“”);和setPassword(“”);来清空用户名和密码输入框中的内容。
    在设计登录界面的框架时,通过public class LoginWindow extends JFrame implements ActionListener{}定义一个登录窗口类,它继承于JFrame。
    在设计好登录界面的框架后,要初始化所有控件,实现的部分代码如下:

    public void initComponent() {
    		Container contentPane = this.getContentPane();
    		contentPane.setLayout(null);
    		
    		labelUsername	= new JLabel("管理员帐号:");
    		labelPassword	= new JLabel("管理员密码:");
    		txtUsername		= new JTextField();
    		txtPassword		= new JPasswordField();
    		btnConfirm		= new JButton("确定");
    		btnCancel		= new JButton("退出");
    		… …
    		}
    

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

    在这里插入图片描述

    图3 操作主界面示意图
    在设计银行帐目管理系统的操作主界面时,先利用public class MainWindow extends JFrame implements ActionListener{… …}来定义一个主窗口类MainWindow,然后在里面定义所需要的全部变量,变量定义为private型。
    在MainWindow类中,功能刻画的代码如下:

    public MainWindow(String title) {
    		setTitle(title);
    		setSize(WIDTH,HEIGHT);
    		setResizable(false);
    		setDefaultCloseOperation(EXIT_ON_CLOSE);
    		initMenu();
    		initComponent();
    		center();
    		loadAccountData();
    		loadBillData();
    	}
    

    操作主界面的设计主要包括几部分:一是菜单栏的设计,二是中间部分表格的设计,三是下面部分按钮的设计。主要设计过程如下:
    菜单栏的设计是先创建好菜单项,然后把菜单项添加到对应的菜单中,再将菜单添加至菜单栏中,最后把菜单添加到主窗体中。设计好操作主界面后,点击“查询统计”按钮,出现如图4所示的下拉菜单。
    在这里插入图片描述

    图4 菜单栏示意图
    实现的主要代码如下:

    public void initMenu() {
    	menuBar 			= new JMenuBar();
    //创建菜单
    queryCountMenu 	= new JMenu("查询统计");
          //创建菜单项
          queryCountMI 		= new JMenuItem("查询统计");
    //给菜单项添加监听器,监听菜单项的单击事件
    queryCountMI.addActionListener(this);
    //菜单项添加到菜单里面
    queryCountMenu.add(queryCountMI);
    setJMenuBar(menuBar);
    }
    

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

    在这里插入图片描述

    图5 表格示意图
    表格部分的设计主要代码如下:

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

    窗体下面部分的控件的设计主要就先将控件创建出来,再将不同功能的控件分组放置,便于操作。
    面板被只能创建一次,如果已经创建了该这块面板,直接返回创建好了的面板,提高效率。其实现代码如下:
    if(bottomPanel != null){return bottomPanel;}
    该面板的控件分三部分创建,分别放置在三个面板中,将实现不同功能的控件放在不同的面板中,达到界面美观,操作方便的目的。如图6所示。

    在这里插入图片描述

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

    private JPanel getBottomPanel() {
    		if(bottomPanel != null) {
    			return bottomPanel;
    		}
    		bottomPanel = new JPanel();
    		bottomPanel.setLayout(new GridLayout(1,3));
    		bottomPanel.add(getBottomLeftPanel());
    		bottomPanel.add(getBottomMiddlePanel());
    		bottomPanel.add(getBottomRightPanel());
    		return bottomPanel;
    	}
    

    4.3 功能界面的设计
    4.3.1 显示全部的功能实现
    在实现存款、取款、销户和修改信息的时候都需要显示出表格中的信息,然后选择一个帐户后进行操作。
    点击如图3操作主界面的“显示全部”按钮,在表格中出现已经存在的信息,当存款、取款、销户和修改信息等操作的时候,显示的信息会发生变化,这主要是随着操作的进行,系统会清除以前的数据。实现的代码如下:

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

    4.3.2 开户窗口的设计与实现
    在如图3所示的系统操作主界面单击右下角的“开户”按钮,进入如图7所示的开户窗口。

    在这里插入图片描述

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

    //验证是否输入正确的存款
    if(!getMoney().matches("[1-9][0-9]*")) {
    	JOptionPane.showMessageDialog(this,"请输入正确的存款!");
    	return;
    		}
    密码和电话号码是可以不填,密码不填写时默认是000000,如果要输入必须是六位数字,电话号码输入的话必须是合法的电话号码,主要验证代码如下:
    //验证密码是否合法
    if(!getPassword().matches("[0-9]{6}")) {
    	JOptionPane.showMessageDialog(this,"请输入六位数字的密码!");
    	return;
    		}
    //验证电话是否有效
    if(getPhone().length() > 0  && 
    !getPhone().matches("[0-9]{7}[0-9]*")) {
    	JOptionPane.showMessageDialog(this,"请输入正确的电话号码!");
    	return;
    		}
    信息收集完成后,保存该帐户的信息,并生成一张开户清单,将清单保存到另外的一个文件中备份。主要代码如下:
    //将帐户数据添加到帐户数据链表
    data.addAccount(account);
    //保存帐户信息到文件
    FileOutputStream fos    = new FileOutputStream(file);
    ObjectOutputStream oos  = new ObjectOutputStream (fos);
    oos.writeObject(listAccount);
    oos.close();
    //将新的存取清单添加到存取清单链表
    billData.addBill(bill);
    //保存存取清单数据到文件
    FileOutputStream fos    = new FileOutputStream(file);
    ObjectOutputStream oos  = new ObjectOutputStream (fos);
    oos.writeObject(listBill);
    oos.close();
    

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

    在这里插入图片描述

    图8 销户成功后的存取信息表
    当找到要销户的帐户之后,帐户要输入密码确认进行销户操作,具体的代码如下:

    //找到要取款的帐户后,要用户输入密码确认进行销户操作
    while(true) {	String strPassword = 
    JOptionPane.showInputDialog(this,"请输入密码:"); 						if(strPassword == null) { 
    				return;
    			}else 	if(account.getPassword().equals(strPassword)){			break;
    			} else if((++i) < 3) {							 JOptionPane.showMessageDialog(this,"密码错误!请重新输入!");
    							continue;
    			}
    		JOptionPane.showMessageDialog(this,"密码输错三次,帐号被锁定!");
    			return;
    			}
    用户确认后,将帐户中的余额全部取出。先删除帐户链表中该帐户的信息,然后在删除外部文件中该帐户的数据,打印出销户清单,主要的代码如下:
    //将新的存取清单添加到 存取清单链表中
    data.getAccountList().remove(account);
    //保存帐户信息到文件
    FileOutputStream fos    = new FileOutputStream(file);
    ObjectOutputStream oos  = new ObjectOutputStream (fos);
    oos.writeObject(listAccount);
    oos.close();
    //将新的存取清单添加到存取清单链表
    billData.addBill(bill);
    //保存存取清单数据到文件
    FileOutputStream fos    = new FileOutputStream(file);
    ObjectOutputStream oos  = new ObjectOutputStream (fos);
    oos.writeObject(listBill);
    oos.close();
    

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

    在这里插入图片描述

    图9帐户被选中示意图(蓝色标志)
    在没有选中帐户的时候点击存款按钮,系统会提示帐户,实现的代码为:

    if(row == -1) {
    			//如果没有选中记录,提示先选中记录才能存款
    			JOptionPane.showMessageDialog(this,"请先选择要存款的帐户!");
                  }
    选中要存款的帐户后,点击存款按钮,弹出输入密码框,帐户要输入密码验证后才能存款操作,当没有输入的密码或者输错3次,会自动退出系统,实现的代码如下:
    else{
    		//根据选择的行获得标识该帐户的唯一ID
    		String delId = (String)dm.getValueAt(table.getSelectedRow(), 1);
    		//根据ID在帐户链表中找到该帐户并返回该帐户的引用
    		while(iterator.hasNext()){
    			account = (Account)iterator.next();
    			if(account.getId().equals(delId)) {
    				break;
    				}
    			}
    		//找到要存款的帐户后,要用户输入密码确认进行存款操作
    		int number = 0;
    		while(true) { 
    	    String strPassword = JOptionPane.showInputDialog(this,"请输入密码:"); 						
    		  if(strPassword == null) { 
    			return;
    		  } else if (account.getPassword().equals(strPassword)) {
    				break;
    			} else if((++number) < 3) {
    			   JOptionPane.showMessageDialog(this,"密码错误!请重新输入!");
    				 continue;
    			 }
    			JOptionPane.showMessageDialog(this,"密码输错三次,帐号被锁定!");
    				return;
    			}
    

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

    在这里插入图片描述

    图10操作错误提示框
    实现的代码如下:

    //存款数目只能是数字
    String strNumber = null;
    while (true) {
    	strNumber = JOptionPane.showInputDialog(this, "请输入存款金额:");
    	if(strNumber == null) {
    		return;
    	} else if (strNumber.matches("[1-9][0-9]*")) {
    		break;
    	  }
    	JOptionPane.showMessageDialog(this, "输入错误!请输入数字!");
    }
    通过account.setMoney(account.getMoney() + 
    Integer.parseInt(strNumber));来实现存款操作。
    

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

    在这里插入图片描述

    图12 卡上余额变化
    实现的代码如下:

    bill = new Bill();
    //生成新的存取清单
    bill.setAccountId(account.getId());
    bill.setMoney(Integer.parseInt(strNumber));
    bill.setBalance(account.getMoney());
    bill.setName(account.getName());
    bill.setType("存款");
    //保存帐户信息到文件
    FileOutputStream fos    = new FileOutputStream(file);
    ObjectOutputStream oos  = new ObjectOutputStream (fos);
    oos.writeObject(listAccount);
    oos.close();
    

    4.3.5 修改信息窗口的设计与实现
    修改信息的窗口和开户窗口是一样的,他们继承于同一个类,但是他们完成的功能不一样。点击如图3所示操作主界面的“修改密码”按钮,弹出输入密码提示框,验证后可以修改用户名、密码、联系电话和家庭住址,点击“确定”按钮后显示修改信息成功。但是帐户没有权力利修改帐号和存款金额。修改窗口如图12所示:

    在这里插入图片描述

    图12 修改信息窗口
    主要功能实现代码与开户的功能代码相似,不同的地方是最后只对帐户信息进行更新,而不是新添加帐户,如下:

    //保存此帐户信息的更新
    account.setName(getAccountName());//更改帐户的姓名
    account.setPassword(getPassword());//更改帐户的密码
    account.setPhone(getPhone());//更改帐户的电话号码
    account.setAddress(getAddress());//更改帐户的住址
    //在链表中更新该帐户的信息
    data.getAccountList().set(pos,account);
    //保存帐户信息到文件
    

    4.3.6 查询功能的实现
    在图3所示的操作主界面,点击“用户查询”或“查找”都能进行查找操作,查找的时候必须选中一个查询方式,并且必须输入查找的关键字,否则会产生如图13的提示框。

    在这里插入图片描述

    图13提示信息框
    代码如下:

    if(getInput().trim().length() == 0) {
    		JOptionPane.showMessageDialog(this,"请输入查询关键字!");
    		return;
    帐户可以通过四种方式来查询,分别是查询姓名,查询帐号,查询电话号码和查询家庭住址。当查询结束为,为保证信息的安全,会清除表格中以前的数据,代码如下:
    while(table.getRowCount() != 0) {
    			dm.removeRow(0);
    		}
    根据查询方式进行查询,并在表格中显示出来,当查找方式为姓名时的代码如下:
    //根据用户选择的单选按钮  进行查询,在表格中显示符合条件的记录
    if(rab1.isSelected()) {		
    for(int i=0; i<data.getCount(); i++) {
    if(account[i].getName().equals(getInput())) {
      String[] strRow = {account[i].getName(), account[i].getId(), 
    account[i].getMoney()+"",account[i].getAddress(), 
    account[i].getPhone()};
      dm.addRow(strRow);
    
    }
    }
    

    4.3.7 查询统计的实现
    在如图3所示的操作主界面单击菜单上的“查询统计”,可以完成对帐户数的统计,代码如下:

    private void doCount() {
    JOptionPane.showMessageDialog(this,"共有"
    +AccountData.getInstance().getCount()+"个帐户!");
    }
    

    5 数据保存机制-采用链表和输入输出流
    银行帐目管理系统采用输入输出流对数据进行存取。I/O流提供一条通道程序,可以使用这条通道把与源中的字符序列送到目的地。把输入流的指向称做源,程序从指向源的输入流中读取源中的数据。而输出流的指向是字节要去的目的地,程序通过向输出流中写入数据把信息传递到目的地。

    程序中用到的是I/ O流中的对象流,即对象输入流(ObjectInputStream)和对象输出流(ObjectOutputStream)。当使用对象流写入和读出数据时,要保证对象是序列化的,一个类如果实现了Serializable接口,则这个类创建的对象就是序列化的对象。对象输出流使用writeObject(Object obj)方法将一个对象obj写入到一个文件,对象输入流使用readObject(Object obj)方法读取一个对象到程序中。

    在程序中对数据的操作是使用链表来实现的,所有对数据的操作都能在链表中表现出来,如数据的增加、删除、修改等。程序中有两张链表存储帐户数据的链表(listAccount)和存储所有存取清单的帐单链表(BillList),链表是通过Java.util包中的LinkedList类来创建。用户的所有操作都被记录在这两张链表中,当链表中的内容发生改变时,程序会调用对象输出流的writeObject(Object obj)方法将文件中的内容更新,从而实现数据的一致性。在存款,取款,修改信息还有销户的时候首先要在存取帐户信息的链表中找到这个相对应的帐号,然后在进行操作。借助Iterator类实现遍历链表,一个链表对象可以使用iterator()方法获取一个Iterator对象,使用next()方法遍历链表。

    帐户数据的链表listAccount建立的代码如下:

    //存储帐户数据的链表,且只能存储Account类
    private LinkedList<Account> listAccount = new LinkedList<Account>();
    在链表中查询帐户的代码为:以销户为例
    Iterator iterator = data.getAccountList().iterator();
    //根据选择的行获得标志该帐户的唯一ID
    String delId = (String)dm.getValueAt(table.getSelectedRow(),1);
    //根据ID在帐户链表中找到该帐户并返回该帐户的引用
    while (iterator.hasNext()){
    account = (Account) iterator. next();
         if(account.getId().equals(delId)){
    ……
    }
    ……
    }
    建立新的帐户并把它保存在链表,实现的代码如下:
    public void addAccount(Account account) {	
           listAccount.add(account)
    }
    读取帐户信息并保存到链表,实现的代码如下:
    FileInputStream fis   = new FileInputStream(file);
    ObjectInputStream ois = new ObjectInputStream (fis);
    listAccount = (LinkedList<Account>)ois.readObject();
    ois.close();
    

    6 测试

    6.2 测试结果
    银行帐目管理系统能够按照用户的需求实现各种功能,在登录以前运行整个系统,运行通过后弹出管理员登录框,输入姓名和密码,然后点击“确定”按钮,当验证通过后,进入操作主界面。可进行存款、取款、开户、销户、修改信息、查询和统计功能。在进行存款、取款、销户和修改信息时首先都必须选中一个帐户,然后再进行操作,通过点击“修改信息”按钮来查看具体的变化。在存款时当用户没有设置密码时,默认密码是000000,用户可以通过点击“修改信息”按钮来修改自己的密码。在输入密码时设置了输入次数,当超过输入次数后,帐户被锁定。进行查找操作时,可以通过两种方式,一是通过查找帐号、姓名和联系电话来查找帐户,二是通过查找住址来进行模糊查询,找到一些相匹配的帐户
    系统在上述软硬件环境下对系统的五个模块系统管理、帐目管理、用户查询、统计和帮助进行测试和运行,结果能达到预期目标。

    结 论
    到现在,银行帐目管理系统能够完成用户所要求实现的功能,能够进行系统管理操作来退出系统;实现帐目管理从而对开户、销户、存款、取款还有修改信息进行操作,除了开户功能在进行销户等操作时必须先选择一个帐户然后输入密码进行验证后才能进行下一步的操作;实现了用户查询,可以通过四种方式:姓名查询、地址查询、电话查询还有帐户查询,在查询的时候先选择查询方式然后必须输入关键字才能进行查询。最后实现了查询统计功能,通过这个功能能够查询到当前的帐户数量。在设计银行帐目管理系统时,多次用到继承,很多功能实现的代码是相似的,对数据的操作是使用链表来实现的,所有对数据的操作都能在链表中表现出来,如数据的增加、删除、修改等。
    省略

    参考文献
    [1] 汪志达.Java程序设计项目化教程[M].北方交通大学出版社,2003。
    [2] 吴其庆.JAVA编程思想与实践[M].冶金工业出版社,2002。
    [3] 孙印杰,刘斌,孙玉强等.Java编程案例精解[M].电子工业出版社,2005。
    [4] 陆正五,蒋武等.Java项目开发实践[M].中国铁道出版社,2004。
    [5] 张怀庆.Java案例精释150例[M].冶金工业出版社,2005。
    [6] 陈刚.Eclipse从入门到精通[M].清华大学出版社,2005。
    [7] 张云涛,龚玲.Eclipse精要与高级开发技术[M].电子工业出版社,2005。
    [8] 周竞涛.Eclipse完全手册[M].电子工业出版社,2006。
    [9] 耿祥义,张跃平,王克宏.《JAVA 2 实用教程》[M].清华大学出版社,2004。

    致 谢
    省略


    5、资源下载

    本项目源码及完整论文如下,有需要的朋友可以点击进行下载。如果链接失效可点击下方卡片扫码自助下载。

  • 相关阅读:
    大数据随记 —— Scala 环境搭建、插件安装
    Folly库实现阅读——FBString
    tokio::net学习
    在CentOS装个RocketMQ 然后用JAVA操作吧
    【FPGA教程案例57】深度学习案例4——基于FPGA的CNN卷积神经网络之卷积层verilog实现
    wget命令
    #新学期,新FLAG#:这些年,一直在路上
    如何使用C/C++刷新在终端上已经打印的内容
    本地Java代码打成镜像提交到K8S部署
    java基于ssm+vue的党员在线学习交流系统
  • 原文地址:https://blog.csdn.net/m0_66238867/article/details/127095889