问题描述
实现一个简单的银行储蓄系统,完成活期用户的存款和取款业务。
基本要求
1.实现描述银行的类,记录系统中现有哪些储户(提示:可用对象数组实现,但须注意判断数组越界的情况),该类中要求包含三个方法:
(1)生成新储户的方法;
(2)按照账户删除储户的方法;
(3)按照账户查询储户的方法,要求显示查询结果。
2.定义储户类。其属性包含账号,存款人姓名、身份证号、地址、存款余额;其操作有存款、取款、显示储户信息。
3.编写测试类,测试上述所要求的各项功能。
设计简单的菜单界面,以供功能选择。
实现的功能
1.增添账户信息
2.存(取)款操作
3.删除账户信息(按卡号/姓名检索)
4.读取账户信息(按卡号/姓名检索)
本程序用户的存储结构为对象数组
1)Despositor类
package BankSystem;
public class Depositor{
private int number; /*卡号*/
private String name; /*姓名*/
private String personId; /*身份证号*/
private String address; /*邮箱地址*/
private String password; /*密码*/
private float balance; /*余额*/
public Depositor(){ /*不带形参的构造函数,用来初始化*/
number=0;
name="0";
personId="0";
address="0";
password="123456";
balance=0;
}
public int shownumber() {return number;}
public String showname() {return name;}
public String showid() {return personId;}
public String showaddress() {return address;}
public String showkey() {return password;}
public float showbalance() {return balance;}
public void inputnumber(int number){this.number=number;}
public void inputname(String name){this.name=name;}
public void inputid(String id){this.personId=id;}
public void inputaddress(String address){this.address=address;}
public void inputkey(String password){this.password=password;}
public void inputbalance(float balance){this.balance=balance;}
public void inputbalance(int money){
this.balance +=money;
System.out.println("您已经存入" + money + "元,账户余额为" + balance );
}
public void deposit(int money) {
this.balance -= money;
System.out.println("您已经取出" + money + "元,账户余额为" + balance );
}
public void show() {
System.out.println("******************************");
System.out.println("*账户创建成功!您的账户信息如下:");
System.out.println("*银行卡号为:"+ number );
System.out.println("*密码为:"+ password);
System.out.println("*姓名为:"+ name);
System.out.println("*身份证号码为:"+ personId);
System.out.println("*邮箱地址为:"+ address);
System.out.println("*账户余额为:" + balance);
System.out.println("******************************");
}
public void show1() {
System.out.println("******************************");
System.out.println("*账户信息如下:");
System.out.println("*银行卡号为:"+ number );
//System.out.println("*密码为:"+ password);
System.out.println("*姓名为:"+ name);
System.out.println("*身份证号码为:"+ personId);
System.out.println("*邮箱地址为:"+ address);
System.out.println("*账户余额为:" + balance);
System.out.println("******************************");
}
};
2)增添账户信息
3)存取款操作
4)查询账户信息
Step1 输入管理员密码。正确执行Step2,否则执行Step7。
Step2 :
a) 选择按卡号检索,执行Step3,
b) 选择姓名检索,执行Step4。
Step3 输出所有账户卡号,输入卡号选择某一账户,执行Step5。
Step4 输出所有账户姓名,输入姓名选择某一账户。
Step5 输出该账户信息。
Step6 输入修改信息。
Step7 返回主菜单。
5)删除账户信息
输入管理员密码以及检索方式同4),此处不再赘述。
Step1 输入要删除的账户,给出删除警告,“是”则执行Step2,“否”则执行Step5。
Step2 如果该账户是已有对象数组的最后一个,则执行Step3,否则执行Step4。
Step3 同时将现有人数COUNT减一,执行Step。
Step4 将最后一个数组的信息赋给要删除的那一个,同时将现有人数COUNT减一。
Step5 返回主菜单。
6)数据的读取与保存(未实现)
采用OutStreamWriter和InputStreamReader,保存在txt文件中,数据用空格隔开,实现数据的读取与保存。
2.Bank类
银行管理员未用单独的类来实现,以Bank类中的manage()方法来实现
package BankSystem;
import java.util.Scanner;
public class Bank {
int i;
private Depositor[] depositor = new Depositor[100];
private int accountNum = 0;
private String password1;
int number = 100000;
int j=1;
private String manage_password = "@123456";
Scanner sc = new Scanner(System.in);
int insert;
public Bank() {
}
// 主界面
public void mainView() {
System.out.println("******欢迎登入银行管理系统********");
System.out.println("******请选择业务***************");
System.out.println("******1、创建账户**************");
System.out.println("******2、登入账户**************");
System.out.println("******3、管理员登录**************");
}
public void select() {
int select = sc.nextInt();
switch(select) {
case 1 : this.openAccount();
break;
case 2 : this.enter();
break;
case 3: this.manage();
break;
}
}
public void manage() {
boolean flag = false;
System.out.println("请输入您的密码");
String password = sc.next();
if(password.equals(manage_password)) {
flag = true;
}
if(flag == false) {
System.out.println("登录失败!!!");
}
if(flag == true) {
System.out.println("登录成功!!!");
do {
System.out.println("请选择操作:");
System.out.println("******1、查改账户信息*****************");
System.out.println("******2、删除账户信息*****************");
System.out.println("******3、按任意键退出*****************");
insert = sc.nextInt();
switch(insert) {
case 1 : //1、查询账户信息
System.out.println("请选择操作:");
System.out.println("******1、按卡号检索*****************");
System.out.println("******2、按姓名检索*****************");
insert = sc.nextInt();
switch(insert) {
case 1://按卡号
for(int i=0;i<accountNum;i++) {
System.out.println("用户"+ (++i) +":" + depositor[--i].shownumber());
}
System.out.println("请选择用户:");
insert = sc.nextInt();
if(insert-1<accountNum)
depositor[insert-1].show1();
else
System.out.println("无用户!");
break;
case 2://按姓名
for(int i=0;i<accountNum;i++) {
System.out.println("用户"+ (++i) +":" + depositor[--i].showname());
}
System.out.println("请选择用户:");
insert = sc.nextInt();
if(insert-1<accountNum)
depositor[insert-1].show1();
else
System.out.println("无用户!");
break;
}
break;
case 2:// 2、删除账户信息
System.out.println("请选择操作:");
System.out.println("******1、按卡号检索*****************");
System.out.println("******2、按姓名检索*****************");
insert = sc.nextInt();
switch(insert) {
case 1://按卡号
for(int i=0;i<accountNum;i++) {
System.out.println("用户"+ (++i) +":" + depositor[--i].shownumber());
}
System.out.println("请选择用户:");
insert = sc.nextInt();
if(insert == accountNum){
accountNum--;
System.out.println("剩余用户:");
for(int i=0;i<accountNum;i++) {
System.out.println("用户"+ (++i) +":" + depositor[--i].shownumber());
}
System.out.println("删除成功!");
}
else {
depositor[insert-1].inputname(depositor[accountNum-1].showname());
depositor[insert-1].inputnumber(depositor[accountNum-1].shownumber());
depositor[insert-1].inputid(depositor[accountNum-1].showid());
depositor[insert-1].inputkey(depositor[accountNum-1].showkey());
depositor[insert-1].inputaddress(depositor[accountNum-1].showaddress());
depositor[insert-1].inputbalance(depositor[accountNum-1].showbalance());
accountNum--;
System.out.println("剩余用户:");
for(int i=0;i<accountNum;i++) {
System.out.println("用户"+ (++i) +":" + depositor[--i].shownumber());
}
System.out.println("删除成功!");
}
//depositor[insert-1].show1();
break;
case 2://按姓名
for(int i=0;i<accountNum;i++) {
System.out.println("用户"+ (++i) +":" + depositor[--i].showname());
}
System.out.println("请选择用户:");
insert = sc.nextInt();
if(insert == accountNum){
accountNum--;
System.out.println("剩余用户:");
for(int i=0;i<accountNum;i++) {
System.out.println("用户"+ (++i) +":" + depositor[--i].showname());
}
System.out.println("删除成功!");
}
else {
depositor[insert-1].inputname(depositor[accountNum-1].showname());
depositor[insert-1].inputnumber(depositor[accountNum-1].shownumber());
depositor[insert-1].inputid(depositor[accountNum-1].showid());
depositor[insert-1].inputkey(depositor[accountNum-1].showkey());
depositor[insert-1].inputaddress(depositor[accountNum-1].showaddress());
depositor[insert-1].inputbalance(depositor[accountNum-1].showbalance());
accountNum--;
System.out.println("剩余用户:");
for(int i=0;i<accountNum;i++) {
System.out.println("用户"+ (++i) +":" + depositor[--i].showname());
}
System.out.println("删除成功!");
}
break;
}
break;
}
} while(insert == 1 || insert == 2 );
}
}
public Depositor openAccount(){
System.out.println("请输入您的姓名");
String name = sc.next();
System.out.println("请输入您的密码");
String password = sc.next();
System.out.println("请再次确认您的密码");
String password1 = sc.next();
while (!password1.equals(password)) {
System.out.println("对不起,两次输入的密码不一致,请重新输入");
System.out.println("请重新输入您的密码");
password = sc.next();
System.out.println("请再次确认您的密码");
password1 = sc.next();
}
System.out.println("请输入您的身份证号码");
String personId = sc.next();
System.out.println("请输入您的邮箱");
String email = sc.next();
depositor[accountNum] = new Depositor();
depositor[accountNum].inputnumber(100000 + j);
depositor[accountNum].inputname(name);
depositor[accountNum].inputkey(password);
depositor[accountNum].inputid(personId);
depositor[accountNum].inputaddress(email);
depositor[accountNum].show(); //显示账户信息
j++;
accountNum++;
return depositor[accountNum];
}
public Depositor enter() {
System.out.println("请输入您的银行卡号");
int id = sc.nextInt();
System.out.println("请输入您的密码");
String password = sc.next();
if (accountNum == 0) {
System.out.println("未注册账户,请先注册!");
this.openAccount();
this.mainView();
this.select();
}
boolean flag = false;
for (i = 0; i < accountNum; i++) {
if (id == depositor[i].shownumber() && password.equals(depositor[i].showkey())) {//判断Id和输入的账户密码是否一致
flag = true;
break;
}
}
if (!flag) {
System.out.println("登入失败!!!");
}
if (flag) {
System.out.println("登入成功!!!!");
do {
System.out.println("请选择业务");
System.out.println("******1、存款*****************");
System.out.println("******2、取款*****************");
System.out.println("******3、按任意键退出*************");
insert = sc.nextInt();
switch(insert) {
case 1 :
System.out.println("******请输入存款金额*****************");
int money = sc.nextInt();
depositor[i].inputbalance(money);
break;
case 2:
System.out.println("******请输入取款金额*****************");
money = sc.nextInt();
depositor[i].deposit(money);//调用取款方法
break;
}
} while(insert == 1 || insert == 2 );
}
return depositor[i];
}
}
3、Test类
package BankSystem;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Bank b = new Bank();
while (true) {
b.mainView();//调用界面函数
int select = sc.nextInt();
switch(select) {
case 1: b.openAccount();//创建账户
break;
case 2: b.enter();//登入
break;
case 3: b.manage();
break;
default: System.out.println("选择业务异常,请重新选择");
break;
}
System.out.println("是否继续选择其他业务");
System.out.println("退出请按 0");
System.out.println("继续选择其他业务请按 1");
select = sc.nextInt();
if (select == 0) {
break;
}
}
}
}
程序未实现修改用户信息的功能,没能实现文件流的处理操作。有需要的朋友可以自行改进。整体来看,代码有些繁琐,部分功能封装不到位,代码重复较多。此外,很多细节并未处理到位,例如对异常的处理等。