一,实验目的
(1)进一步巩固Java面向对象、集合和IO方面的知识;
(2)加强实践动手能力,能够将从书本上学习到的理论知识用到了实践上。。
二、实验内容
模拟网上银行业务,当用户登录时需判断银行卡号和银行卡密码,当输入的卡号和密码都正确时,登录成功,提示当前登录的账户名,并进入下一步选择操作类型。操作类型包括四种(存款:1 取款:2 余额:3 修改个人密码:4 退出:0),输入数字1、2时,将进行存取款操作,此时需要输入
存取的金额,并进行正确的金额加减计算;输入数字3时,显示当前账户的余额;输入数字4时,可修改当前账户的密码;输入数字0时将退出整个系统。提示:可利用HashMap集合存储模拟的账户信息,其中key值用于存储银行卡号,value值用于存储整个账户对象。
三、总体设计(设计原理、设计方案及流程等)
正在上传…重新上传取消正在上传…重新上传取消
- 利用类的封装的思想,创建银行帐户类User,在类中定义五个属性cardId、cardPwd、userName、call和account分别表示帐户的银行卡号、银行卡密码、账户名、手机号码和存款额。
- 创建UsersData类,该类用于模拟银行系统中的账户人信息,相当于数据库的功能。登录时需通过用户输入的信息和系统中保存的账户信息进行比较,从而判断登录是否成功。UsersData类中通过Map集合存储模拟的账户信息,其中key值用于存储银行卡号,value值用于存储整个账户对象。该类中还需提供两个方法,分别是获取单个账户信息的方法和获取所有个账户信息的方法。
- 创建一个Bank类,该类用于处理网上银行的登录、存取款和显示余额等所有业务逻辑。登录时需要验证用户输入的银行卡号和银行卡密码,是否存在于银行系统中,如果是提示登录成功,否则提示登录失败,让用户重新登录。登录成功后,需根据提示的四种操作类型,输入相应的数字,对当前账户存款进行存取和查询余额、修改账户密码操作。操作完成后,输入数字0将退出整个系统。
- 实验步骤(包括主要步骤、代码分析等)
1)User类模拟账户信息表示帐户的银行卡号、银行卡密码、账户名、手机号码和存款额,并含获得、设置各信息的功能。该类须最先创建,后续的类会使用到。
public class User {private String cardId; // 银行卡号private String cardPwd; // 银行卡密码private String userName;// 账户名private String call; // 手机号码private int account; // 存款额public String getCardId() {return cardId;}public void setCardId(String cardId) {this.cardId = cardId;}public String getCardPwd() {return cardPwd;}public void setCardPwd(String cardPwd) {this.cardPwd = cardPwd;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getCall() {return call;}public void setCall(String call) {this.call = call;}public int getAccount() {return account;}public void setAccount(int account) {this.account = account;}
2)UsersData类模拟账户信息库,构造方法初始化已存储的账户数据,并具有获取单个账户信息的方法和获取所有个账户信息的方法。
import java.util.HashMap;
public class UsersData {private static UsersData instance = null;private HashMap<String, User> users = new HashMap<String, User>();private UsersData() {// -------刘备--------------------User u1 = new User();u1.setCardId("1001");u1.setCardPwd("123456");u1.setUserName("刘备");u1.setCall("13281525712");u1.setAccount(1000);users.put(u1.getCardId(), u1);// ------关羽-------------------User u2 = new User();u2.setCardId("1002");u2.setCardPwd("234567");u2.setUserName("关羽");u2.setCall("13181527253");u2.setAccount(1000);users.put(u2.getCardId(), u2);// -----张飞-------------------User u3 = new User();u3.setCardId("1003");u3.setCardPwd("345678");u3.setUserName("张飞");u3.setCall("13041018869");u3.setAccount(1000);users.put(u3.getCardId(), u3);}// 懒汉式单例模式public static UsersData getInstance() {if (instance == null) {synchronized (UsersData.class) {if (instance == null) {instance = new UsersData();}}}return instance;}// 根据银行卡号获取对应单个账户的信息public User getUser(String cardId) {User user = (User) users.get(cardId);return user;}// 获取所有账户的信息public HashMap<String, User> getUsers() {return users;}
}
3)Bnak类模拟网上银行登录页面,实现存取、查询余额的方法。
首先要实现用户的登陆,判断卡号和密码。
登陆成功后,提示四种可操作类型(存款:1、取款:2、余额:3、退出:0),输入相应类型数字,进入其对应功能。
选择1,存款时输入金额后,要判断金额是否合理(输入金额不能小于0),合理显示存款成功,不合理回到操作类型选择功能,让其从新选择操作。
选择2,取款时输入相应金额后,也要进行金额是否合理判断,并且其取款金额不能大于账户余额,如果大于账户余额,则提示“余额不足,取款失败!”,并回到操作类型选择功能。
选择3,系统显示账户余额。
选择0,退出系统,程序运行结束。
import java.util.*;public class Bank {private UsersData dbutil = UsersData.getInstance();private static User user;public static void main(String[] args) {// TODO Auto-generated method stubBank b = new Bank();b.login();b.operate();}/*** 账户金额存入、取出和查询操作*/public void operate() {while (true) {System.out.println("请输入您要进行的操作类型,按回车键结束");System.out.println("存款:1" + "\t" + "取款:2"+ "\t"+"余额:3" +"\t "+"修改账户密码:4"+"\t" + "退出:0");Scanner in = new Scanner(System.in);String s = in.nextLine(); // 输入的操作类型if("1".equals(s) || "2".equals(s)){int num = 0;try{System.out.print("输入存取的金额:");num = Integer.parseInt(in.nextLine());}catch(Exception e){System.out.println("金额输入错误!");continue;}switch (s) {case "1": // 存款操作income(num);break;case "2": // 取款操作takeout(num);break;}}else if("3".equals(s)){show();}else if("4".equals(s)) {System.out.println("请输入您修改后的密码:");String cardPwd1=in.nextLine();changePwd(cardPwd1);}else if("0".equals(s)){System.out.println("退出系统!");return;}else{System.out.println("请输入0~4之间的数字选择相关操作!");}}}
/*** 用户登录网上银行*/public void login() {System.out.println("欢迎进入网上银行系统!");while (true) {Scanner in = new Scanner(System.in); // 键盘录入System.out.println("请输入银行卡号:");String cardId = in.nextLine();System.out.println("请输入银行卡密码:");String cardPwd = in.nextLine();user = dbutil.getUser(cardId);// 登录if (dbutil.getUsers().containsKey(cardId)&& String.valueOf(user.getCardPwd()).equals(cardPwd)) {System.out.println("登录成功!欢迎" + user.getUserName() + "先生");break;} else {System.out.println("银行卡号或密码错误!");continue;}}}/*** 存款** @param num*/public void income(int num) {int account = user.getAccount() + num;user.setAccount(account);System.out.println("存入金额" + num + "元成功!");}/*** 取款** @param num*/public void takeout(int num) {if(user.getAccount() >= num){int account = user.getAccount() - num;user.setAccount(account);System.out.println("取出金额" + num + "元成功!");}else{System.out.println("余额不足,取款失败!");}}/*** 查询余额*/public void show() {int account = user.getAccount();System.out.println("账户总余额为" + account + "元");}/*** 修改账户密码** @param cardPwd*/public void changePwd(String cardPwd) {user.setCardPwd(cardPwd);}}