银行帐目管理系统—免费毕业设计论文内容摘要:

ches([19][09]*)) { (this,请输入正确的存款 !)。 return。 } 密码和电话号码是可以不填,密码不填写时默认是 000000,如果要输入必须是六位数字,电话号码输入的话必须是合法的电话号码,主要验证代码如下: //验证密码是否合法 if(!getPassword().matches([09]{6})) { (this,请输入六位数字的密码 !)。 return。 } //验证电话是否有效 if(getPhone().length() 0 amp。 amp。 !getPhone().matches([09]{7}[09]*)) { (this,请输入正确的电话号码 !)。 return。 } 信息收集完成后 ,保存该帐户的信息,并生成一张开户清单,将清单保存到另外的一个文件中备份。 主要代码如下: //将帐户数据添加到帐户数据链表 (account)。 //保存帐户信息到文件 FileOutputStream fos = new FileOutputStream(file)。 ObjectOutputStream oos = new ObjectOutputStream (fos)。 (listAccount)。 ()。 //将 新的存取清单添加到存取清单链表 (bill)。 //保存存取清单数据到文件 FileOutputStream fos = new FileOutputStream(file)。 ObjectOutputStream oos = new ObjectOutputStream (fos)。 (listBill)。 ()。 销户窗口的设计与实现 在如图 3 所示的系统操作主界面单击右下角的“ 显示全部 ”按钮 后选中一个要销户的帐户,然 后点击“销户”按钮,弹出输入密码的信息框,经过验证后单击“确定”按钮能完成销户功能,同时弹出一个如图 8所示的信息框,显示存取信息,里面包含有用户名、帐号、操作类型、金额、余额、流水号和操作日期等信息。 在销户的时候同时取完帐户上的存款金额,最后完成销户功能。 点击图 3操作主界面的“显示全部”按钮,可以看到销户的帐户已经不存在了。 图 8 销户成功后的存取信息表 当找到要销户的帐户之后,帐户要输入密码确认进行销户操作,具体的代码如下: //找到要取款的帐户后,要用户输入密码确认进行销户 操作 while(true) { String strPassword = (this,请输入密码: )。 if(strPassword == null) { return。 }else if(().equals(strPassword)){ break。 } else if((++i) 3) { (this,密码错误 !请重新输入 !)。 continue。 } (this,密码输错三次 ,帐号被锁定 !)。 return。 } 用户确认后,将帐户中的余额全部取出。 先删除帐户链表中该帐户的信息,然后在删除外部文件中该帐户的数据,打印出销户清单,主要的代码如下: //将新的存取清单添加到 存取清单链表中 ().remove(account)。 //保存帐户信息到文件 FileOutputStream fos = new FileOutputStream(file)。 ObjectOutputStream oos = new ObjectOutputStream (fos)。 (listAccount)。 ()。 //将新的存取清单添加到存取清单链表 (bill)。 //保存存取清单数据到文件 FileOutputStream fos = new FileOutputStream(file)。 ObjectOutputStream oos = new ObjectOutputStream (fos)。 (listBill)。 ()。 存款和取款窗口的设计与实现 存款和取款的操作方法都是一样的,都是首先在如图 3所示的操作主界面里选中一个需要存款(取款)的帐户,如图 9 所示,然后点击按钮(存款或取款按钮),弹出输入密码的信息框,帐户输入密码经验证后。 图 9帐户被选中示意图(蓝色标志) 在没有选中帐户的时候点击存款按钮,系统会提 示帐户,实现的代码为: if(row == 1) { //如果没有选中记录,提示先选中记录才能存款 (this,请先选择要存款的帐户 !)。 } 选中要存款的帐户后,点击存款按钮,弹出输入密码框,帐户要输入密码验证后才能存款操作,当没有输入的密码或者输错 3次,会自动退出系统,实现的代码如下: else{ //根据选择的行获得标识该帐户的唯一 ID String delId = (String)((), 1)。 //根据 ID在帐户链表中找到该帐户并返回该帐户的引用 while(()){ account = (Account)()。 if(().equals(delId)) { break。 } } //找到要存款的帐户后,要用户输入密码确认进行存款操作 int number = 0。 while(true) { String strPassword = (this,请输入密码: )。 if(strPassword == null) { return。 } else if (().equals(strPassword)) { break。 } else if((++number) 3) { (this,密码错误 !请重新输入 !)。 continue。 } (this,密码输错三次 ,帐号被锁定 !)。 return。 } 验证密码通过后,在输入框中输入存款金额,金额必须为数字,如果输入其他信息,系统会报错,如图 10所示。 图 10操作错误提示框 实现的代码如下: //存款数目只能是数字 String strNumber = null。 while (true) { strNumber = (this, 请输入存款金额:)。 if(strNumber == null) { return。 } else if (([19][09]*)) { break。 } (this, 输入错误 !请输入数字 !)。 } 通过 (() + (strNumber))。 来实现存款操作。 存款完后显示一张存取信息表,如图 11 所示。 产生的 存取清单会存储到存取清单链表中去,点击“显示全部”按钮,显示新的信息,此时的卡上余额信息已经发生变化,通过图 11和图 12 可以发现金额的变化。 图 11存款后的信息表 图 12 卡上余额变化 实现的代码如下: bill = new Bill()。 //生成新的存取清单 (())。 ((strNumber))。 (())。 (())。 (存款 )。 //保存帐户信息到文件 FileOutputStream fos = new FileOutputStream(file)。 ObjectOutputStream oos = new ObjectOutputStream (fos)。 (listAccount)。 ()。 修改信息窗口的设计与实现 修改信息的窗口和开户窗口是一样的,他们继承于同一个类,但是 他们 完成的功能不一样。 点击如图 3所示操作主界面的“修改密码”按钮,弹出输入密码提示框,验证后可以修改用户名、密码、联系电话和家庭住址, 点击“确定”按钮后显示修改信息成功。 但是帐户没有权 力 利修改帐号和存款金额。 修改窗口如图 12 所示: 图 12 修改信息窗口 主要功能实现代码与开户的功能代码相似,不同的地方是最后只对帐户信息进行更 新,而不是新添加帐户,如下: //保存此帐户信息的更新 (getAccountName())。 //更改帐户的姓名 (getPassword())。 //更改帐户的密码 (getPhone())。 //更改帐户的电话号码 (getAddress())。 //更改帐户的住址 //在链表中更新该帐户的信息 ().set(pos,account)。 //保存帐户信息到文件 查询功能的实现 在图 3所示的操作主界面,点击“用户查询”或“查找”都能进行查找操作,查找的时候必须选中一个查询方式 ,并且必须输入查找的关键字,否则会产生如图 13 的提示框。 图 13提示信息框 代码如下: if(getInput().trim().length() == 0) { (this,请输入查询关键字 !)。 return。 帐户可以通过四种方式来查询,分别是查询姓名,查询帐号,查询电话号码和查询家 庭住址。 当查询结束为,为保证信息的安全,会清除表格中以前的数据,代码如下: while(() != 0) { (0)。 } 根据查询方式进行查询,并在表格中显示出来, 当查找方式为姓名时的 代码如下: //根据用户选择的单选按钮 进行查询,在表格中显示符合条件的记录 if(()) { for(int i=0。 i()。 i++) { if(account[i].getName().equals(getInput())) { String[] strRow = {account[i].getName(), account[i].getId(), account[i].getMoney()+,account[i].getAddress(), account[i].getPhone()}。 (strRow)。 } } 查询统计的实现 在如图 3 所示的操作主界面单击菜单上的“查询统计”,可以完成对帐户数的统计,代码如下: private void doCount() { (this,共有 +().getCount()+个帐户 !)。 } 5 数据保存机制 采用 链表和输入输出流 银行帐目管理系统 采用输入输出流对数据进行存取。 I/O 流提供一条通道程序,可以使用这条通道把与源中的字符序列送到目的地。 把输入流的指向称做源,程序从指向源的输入流中读取源中的数据。 而输出流的指向是字节要去的目的地,程序通过向输出流中写入数据把信息传递到目的地。 程序中用到的是 I/ O流 中的对象流,即对象输入流 (ObjectInputStream)和对象输出流 (ObjectOutputStream)。 当使用对象流写入和读出数据时,要保证对象是序列化的,一个类如果实现了 Serializable 接口,则这个类创建的对象就是序列化的对象。 对象输出流使用 writeObject(Object obj)方法将一个对象 obj写入到一个文件,对象输入流使用 readObject(Object obj)方法读取一个对象到程序中。 在程序中对数据的操作是使用 链表来实现 的,所有对数据的操作都能在链表中表现出 来,如 数据的 增加 、 删除、 修改 等。 程序中有两张链表存储帐户数据的链表 (listAccount)和存储所有存取清单的帐单链表 (BillList),链表是通过 包中的 LinkedList 类来创建。 用户的所有操作都被记录在这两张链表中,当链表中的内容发生改变时,程序会调用对象输出流的writeObject(Object obj)方法将文件中的内容更新,从而实现数据的一致性。 在存款,取款,修改信息还有销户的时候首先要在存取帐户信息的链表中找到这个相对应的帐号,然后在进行操作。 借助 Iterator 类实现 遍历链表,一个链表对象可以使用 iterator()方法获取一个 Iterator 对象,使用 next()方法遍历链表。 帐户数据的链表 listAccount 建立的代码如下: //存储帐户数据的链表,且只能存储 Account 类 private LinkedListAccount listAccount = new LinkedListAccount()。 在链表中查询帐户的代码为:以销户为例 Iterator iterator = ().iterator()。 //根。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。