一,实验目的
(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 users = new HashMap();
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 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 stub
Bank 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;
}
}
}
public void income(int num) {
int account = user.getAccount() + num;
user.setAccount(account);
System.out.println("存入金额" + 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 + "元");
}
public void changePwd(String cardPwd) {
user.setCardPwd(cardPwd);
}
}



