设计性实验报告
课程名称 | 面向对象程序设计(Java) | ||
项目名称 | 模拟银行存取款业务 | 实验类型 | 设计性 |
| |||
二、实验内容 模拟网上银行业务,当用户登录时需判断银行卡号和银行卡密码,当输入的卡号和密码都正确时,登录成功,提示当前登录的账户名,并进入下一步选择操作类型。操作类型包括四种(存款:1 取款:2 余额:3 修改个人密码:4 退出:0),输入数字1、2时,将进行存取款操作,此时需要输入存取的金额,并进行正确的金额加减计算;输入数字3时,显示当前账户的余额;输入数字4时,可修改当前账户的密码;输入数字0时将退出整个系统。可利用HashMap集合存储模拟的账户信息,其中key值用于存储银行卡号,value值用于存储整个账户对象。 | |||
三、总体设计(设计原理、设计方案及流程等) 我的代码使用了对象序列化和反序列化的方式 将对象属性保存到磁盘中去,从而实现记录底层数据,并且将序列化和反序列化写成两个独立的方法,我们只需在主类中调用方法即可;在对象类中实现了Serializable类。
在com.ggc包下创建了BankObject对象类和BankDemo主类 在BankObject类中定义了一些private属性和对应的public型setter和getter方法用于对成员变量赋值和引用 在主类中定义的mothod1方法用于对错误卡号报错并重新输入 Mothod2方法用于对错误密码报错并重新输入 卡号为键,对象为值。用keySet方法得到键的set集合,用增强for循环,并在循环中对输入的卡号进行判断,如果错误就一直调用mothod1方法,从而实现卡号报错并重新输入; 密码判断与卡号判断大致相同mothod2方法 1.存款 2.取款 3.余额查询 4.修改密码 0.退出 该业务使用switch开关语句,在语句中使用while语句检验输入的金额是否合法,并实现重新输入。 特点:在switch语句外面使用while语句来实现0.退出功能 使用方法循环调用的形式对错误内容报错并重新输入 逻辑性较强环环相扣
package com.ggc; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.HashMap; import java.util.Scanner; import java.util.Set; public class BankDemo { private static int ID; public static void main(String[] args) { BankDemo bd=new BankDemo(); //bd.objectInputStream(); HashMap<Integer,BankObject> map=new HashMap<Integer,BankObject>(); BankObject B1=(BankObject)bd.objectInputStream(); BankObject B2=(BankObject)bd.objectInputStream1(); //BankObject B1=new BankObject("刘德华", "男",123456,1000); //BankObject B2=new BankObject("赵瑞娜","女",654321,2000); map.put(666666, B1); map.put(888888, B2); Scanner scanner=new Scanner(System.in); int n=0; int k=1,deposit;//开关条件,存款金额 int withdrawals;//取款金额 int password; int Id,Code; boolean bl ;//返回值 Set<Integer> keySet=map.keySet(); //for(Integer key :keySet) { //BankObject value=map.get(keySet); System.out.println("----------欢迎使用G式银行服务系统-----------"); System.out.println("请输入银行卡号:"); Id=scanner.nextInt(); //BankDemo bd=new BankDemo(); //bd.mothod1(); for(Integer key : keySet) { //if(n>=1) System.out.println("银行卡号输入错误,请重新输入!"); if((int)key!=Id) { n++; if(n==2) { System.out.println("银行卡号输入错误,请重新输入!"); do { Id=scanner.nextInt(); bl=bd.mothod1(keySet, Id); //bl=bd.mothod1(keySet); }while(bl); //System.out.println("银行卡号正确!"); System.out.println("请输入密码!"); } }else { System.out.println("请输入密码:"); ID=Id; /*Code=scanner.nextInt(); if(map.get(key).getCode()==Code) { System.out.println("登陆成功!欢迎"+map.get(key).getName()); }else { System.out.println("密码错误,请重新输入!"); }*/ } } //BankObject value=map.get(Id); Id=ID; Code=scanner.nextInt(); do { if(Code!=map.get(Id).getCode()) { System.out.println("密码输入错误,请重新输入!"); bl=bd.mothod2(map.get(Id)); }else { bl=false; } }while(bl); System.out.println("登陆成功!欢迎"+map.get(Id).getName()+map.get(Id).getSex()+"士"+"!"); System.out.println("请选择您需要办理的业务:" + "1.存款 2.取款 3.余额查询 4.修改密码 0.退出"); while(k!=0) { k=scanner.nextInt(); switch(k) { case 1:{ System.out.println("请输入存款金额:"); deposit=scanner.nextInt(); while(deposit<0) { System.out.println("输入金额非法!请重新输入"); deposit=scanner.nextInt(); } map.get(Id).setBalance(map.get(Id).getBalance()+deposit); System.out.println("存款成功!您当前的余额为:"+map.get(Id).getBalance()); map.get(Id).setBalance(map.get(Id).getBalance()); System.out.println("请选择您需要办理的业务:" + "1.存款 2.取款 3.余额查询 4.修改密码 0.退出"); break; } case 2:{ System.out.println("请输入取款金额:"); withdrawals=scanner.nextInt(); while(withdrawals<0||withdrawals>map.get(Id).getBalance()) { System.out.println("输入金额非法!请重新输入"); withdrawals=scanner.nextInt(); } map.get(Id).setBalance(map.get(Id).getBalance()-withdrawals); System.out.println("取款成功!您当前的余额为:"+map.get(Id).getBalance()); map.get(Id).setBalance(map.get(Id).getBalance()); System.out.println("请选择您需要办理的业务:" + "1.存款 2.取款 3.余额查询 4.修改密码 0.退出"); break; } case 3:{ System.out.println("您当前的余额为:"+map.get(Id).getBalance()); System.out.println("请选择您需要办理的业务:" + "1.存款 2.取款 3.余额查询 4.修改密码 0.退出"); break; } case 4:{ System.out.println("请输入旧密码:"); password=scanner.nextInt(); while(password!=map.get(Id).getCode()) { System.out.println("旧密码输入错误!请重新输入"); password=scanner.nextInt(); } System.out.println("请输入新密码:"); password=scanner.nextInt(); map.get(Id).setCode(password); System.out.println("密码修改成功!"); System.out.println("请选择您需要办理的业务:" + "1.存款 2.取款 3.余额查询 4.修改密码 0.退出"); break; } } } bd.objectOutputStream(B1); bd.objectOutputStream1(B2); System.out.println("银行系统已退出!欢迎您再次使用!"); } public void objectOutputStream1(BankObject B) { ObjectOutputStream oos=null; try { oos=new ObjectOutputStream(new FileOutputStream("D:\\Java开发\\eclipse\\eclipse-workspace\\ggc\\oos1.txt")); oos.writeObject(B); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try { oos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public void objectOutputStream(BankObject B) { ObjectOutputStream oos=null; try { oos=new ObjectOutputStream(new FileOutputStream("D:\\Java开发\\eclipse\\eclipse-workspace\\ggc\\oos.txt")); oos.writeObject(B); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try { oos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public Object objectInputStream() { BankObject b=null; ObjectInputStream ois=null; try { ois=new ObjectInputStream(new FileInputStream("D:\\Java开发\\eclipse\\eclipse-workspace\\ggc\\oos.txt")); Object obj=ois.readObject(); b=(BankObject) obj; System.out.println(b.getName()+","+b.getSex()+","+b.getBalance()); ois.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try { ois.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return b; } public Object objectInputStream1() { BankObject b=null; ObjectInputStream ois=null; try { ois=new ObjectInputStream(new FileInputStream("D:\\Java开发\\eclipse\\eclipse-workspace\\ggc\\oos1.txt")); Object obj=ois.readObject(); b=(BankObject) obj; System.out.println(b.getName()+","+b.getSex()+","+b.getBalance()); ois.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try { ois.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return b; } public boolean mothod1(Set keySet,int Id) { //Scanner scanner=new Scanner(System.in); //int c=scanner.nextInt(); int m=0; for(Object key : keySet) { if((int)key!=Id) { m++; } } if(m>=2) { System.out.println("银行卡号输入错误,请重新输入!"); } if( m>=2) { return true; }else { ID=Id; return false; } } public boolean mothod2(BankObject value) { Scanner scanner=new Scanner(System.in); int c=scanner.nextInt(); int m=0; // for( m=0;m<=2;) { if((int)value.getCode()!=c) { m++; } //} if(m>=2) { System.out.println("密码输入错误,请重新输入!"); } if( m>=1) { return true; }else { return false; } } }
| |||
五、结果分析与总结
----------欢迎使用G式银行服务系统----------- 请输入银行卡号: 111111 银行卡号输入错误,请重新输入! 1111111 银行卡号输入错误,请重新输入! 888888 请输入密码! 444444 密码输入错误,请重新输入! 555555 密码输入错误,请重新输入! 654321 登陆成功!欢迎xxx女士! 请选择您需要办理的业务:1.存款 2.取款 3.余额查询 4.修改密码 0.退出 1 请输入存款金额: -10 输入金额非法!请重新输入 100 存款成功!您当前的余额为:2100 请选择您需要办理的业务:1.存款 2.取款 3.余额查询 4.修改密码 0.退出 2 请输入取款金额: 200000 输入金额非法!请重新输入 500 取款成功!您当前的余额为:1600 请选择您需要办理的业务:1.存款 2.取款 3.余额查询 4.修改密码 0.退出 1 请输入存款金额: 200 存款成功!您当前的余额为:1800 请选择您需要办理的业务:1.存款 2.取款 3.余额查询 4.修改密码 0.退出 3 您当前的余额为:1800 请选择您需要办理的业务:1.存款 2.取款 3.余额查询 4.修改密码 0.退出 4 请输入旧密码: 654444 旧密码输入错误!请重新输入 654321 请输入新密码: 123456 密码修改成功! 请选择您需要办理的业务:1.存款 2.取款 3.余额查询 4.修改密码 0.退出 0 银行系统已退出!欢迎您再次使用!
总结:功能较为完善,有较好的封装,对输入数据进行合法判断
|