阿婆主呢也是一个Java的初学者,这是最近复习面向对象的一个作业,希望点进来的看官们,不喜勿喷嗷,也希望看官们可以多多指导。
题目
定义一个银行卡类:BankCard,定义如下属性。(注:所有属性类型和初始值自己确定。)
银行卡序号( nextNo):每发一张卡,序号加1,不分哪家银行。
所有卡累计余额(totalBalance):将所有卡的余额加一起。
银行卡号 (cardNo)
客户姓名 (name)
客户身份证号 (personId)
卡上余额 (balance)
定义方法: 注:所有方法参数自己和返回类型自己确定,这里只给出方法名:
构造方法 BankCard()
取得所有卡累计余额 getTotalBalance
取得当前最后的卡号 getCurrentCardNo
取得下一个卡号 getNextCurrentNo
存款 deposit()
取款 withdraw()
取得本卡的余额 getBalance()
完整代码
银行卡类
/**
* 银行卡类
* 属性:
* 银行卡序号
* 所有卡余额
* 银行卡号
* 密码
* 卡上余额
*/
public class BankCard {
private int nextNo;
//因为刚开始的时候没有卡存在所以我在这就直接赋值为0;
private double totalBalance = 0.0;
private String cardNo;
private String password;
//余额也是因为刚创建生成的卡是没有存款所以直接赋值为0
private double balance = 0.0;
//这里余额和所有卡的累计余额我都采用的是double类型,用BigInteger类型可能会更合适
public BankCard() {
}
//这里我设定的是办卡就只是办卡,卡上余额随存款取款改变,所以不在创建的时候赋值
public BankCard(int nextNo, String cardNo, String password) {
this.nextNo = nextNo;
this.cardNo = cardNo;
this.password = password;
}
客户类
/*
客户姓名 name
客户身份证号 personId
客户电话号码
*/
public class Client {
private String name;
private String personId;
//银行办卡都需要预留手机号,所以添加了一个电话号码的属性
private String phone;
//因为是客户拥有银行卡所以将银行卡作为客户的一项属性
private BankCard bankCard;
public Client() {
}
public Client(String name, String personId, String phone, BankCard bankCard) {
this.name = name;
this.personId = personId;
this.phone = phone;
this.bankCard = bankCard;
}
对银行卡进行操作的操作类
/**
* 银行操作类
*/
import java.util.ArrayList;
import java.util.Scanner;
public class BankOperate {
//将会频繁使用到的对象定义在类体中,方便使用,不用多次创建
Scanner sc = new Scanner(System.in);
//定义在类体中以便能被所有的方法调用进行对数据的操作,也以免造成数据存储混乱
ArrayList<Client> clients = new ArrayList<>();
//创建银行卡类的对象,通过此对象进行来调用银行卡类里的的set和get方法取值赋值
BankCard bc = new BankCard();
//创建一个下标,获取登陆成功的客户存储的下标位置,方便客户进行存取款的时候不会错误的操作。
int cardIndex = -1;
//银行账户注册
public void loginMessage(){
System.out.println("请输入用户姓名: ");
String name = sc.next();
System.out.println("请输入身份证号码: ");
String personId = sc.next();
System.out.println("请输入电话号码: ");
String phone = sc.next();
//对银行卡的序号采用存放数据的数组长度加1的方式来赋值,确保每次创建新卡号时序号自动加1
int nextNo = clients.size() + 1;
//在这我对银行卡号的设置是去得当前毫秒数的一部分以及身份证号的一部分然后使用+拼接在一起组成的
String str1 = String.valueOf(System.currentTimeMillis()).substring(2);
String str2 = personId.substring(6,14);
String cardNo = str1 + str2;
System.out.println("请输入你的银行卡密码: ");
String password = sc.next();
BankCard bankCard = new BankCard(nextNo,cardNo,password);
Client c = new Client(name,personId,phone,bankCard);
clients.add(c);
System.out.println(clients.toString());
}
//取得所有卡余额
public void getTotalBalance(){
//这里我是为了方便自己不会搞混所以定义了一歌变量来获取卡的总余额来进行接下来的操作
double totalBalance = bc.getTotalBalance();
for (Client cc: clients) {
double sum = Double.sum(totalBalance,cc.getBankCard().getBalance());
bc.setTotalBalance(sum);
}
}
//取得当前最后的卡号
public void getCurrentCardNo(){
//因为我觉得卡号不会凭空生成所以取得当前已经存在集合中创建好的账户的最后一个就可以了
String s = clients.get(clients.size() - 1).getBankCard().getCardNo();
System.out.println(s);
}
//取得下一个卡号
public void getNextCurrentNo(){
System.out.println("输入当前卡号序号");
int cardNo = sc.nextInt();
//创建一个变量来获取输入的当前卡号序号存储的位置,以便找到下一个卡号存储的位置
int index = -1;
if (cardNo != 0 && cardNo != clients.get(clients.size() -1).getBankCard().getNextNo()){
for (int i = 0;i < clients.size();i++){
if (cardNo == clients.get(i).getBankCard().getNextNo()){
index = i;
break;
}
}
System.out.println(clients.get(clients.size() - 1).getBankCard().getCardNo());
}
System.out.println("卡号" + cardNo + "不存在,或者已是最后卡号");
}
//用户登录
public void login(){
System.out.println("请输入您的银行卡号");
String cardNo = sc.next();
System.out.println("请输入您的银行卡密码");
String pwd = sc.next();
if (cardNo != null){
for (int i = 0;i < clients.size();i ++){
if (cardNo.equals(clients.get(i).getBankCard().getCardNo())
&& pwd.equals(clients.get(i).getBankCard().getPassword())){
System.out.println("用户登陆成功");
//登录成功后将该用户的下标赋值给提前定义好的变量
cardIndex = i;
break;
}else {
System.out.println("用户名或密码错误,请重新登录");
}
}
}else{
System.out.println("当前卡号不存在,请注册后再进行此操作!");
}
}
//存款
public void deposit(){
System.out.println("请输入您的存款金额: ");
double money = sc.nextDouble();
double balance = clients.get(cardIndex).getBankCard().getBalance();
double afterDeposit = Double.sum(balance,money);
clients.get(cardIndex).getBankCard().setBalance(afterDeposit);
}
//取款
public void withdraw(){
System.out.println("请输入您的取款金额: ");
double money = sc.nextDouble();
double balance = clients.get(cardIndex).getBankCard().getBalance();
double afterWithdraw = balance - money;
clients.get(cardIndex).getBankCard().setBalance(afterWithdraw);
}
//取得本卡的余额
public void getBalance(){
System.out.println(clients.get(cardIndex).getBankCard().getBalance());
}
//查询所有客户信息
public void selectAll(){
for (Client cc : clients){
System.out.println(cc.toString());
}
}
//查询指定客户信息
public void selectOne(){
System.out.println("输入您想查找的客户姓名: ");
String name = sc.next();
System.out.println("输入您想查找的客户卡号: ");
String cardNo = sc.next();
if (cardNo != null){
for (int i = 0;i < clients.size();i ++){
if (clients.get(i).getName().equals(name)
&& clients.get(i).getBankCard().getCardNo().equals(cardNo)){
System.out.println(clients.get(i).toString());
}else {
System.out.println("该客户不存在或姓名与卡号有误,请重新查找");
}
}
}else {
System.out.println("您的输入有误,请重新输入");
}
}
菜单界面
public void menu(){
System.out.println("=============欢迎进入银行管理系统=============");
System.out.println("请问您的身份是: ");
System.out.println("1、银行工作人员");
System.out.println("2、用户");
System.out.println("0、退出系统");
int num = sc.nextInt();
switch (num){
case 1:
menu1();
break;
case 2:
menu2();
break;
default:
System.out.println("欢迎您的使用,系统已退出");
System.exit(0);
}
}
private void menu1() {
System.out.println("=============欢迎进入银行信息管理系统=============");
System.out.println("请问你要执行哪项功能: ");
System.out.println("1、查询所有客户信息");
System.out.println("2、查询指定客户信息");
System.out.println("3、获取所有卡号总余额");
System.out.println("4、取得下一个卡号");
System.out.println("5、取得当前最后的卡号");
System.out.println("0、结束使用,返回上一级目录");
int num = sc.nextInt();
switch (num){
case 1:
selectAll();
menu1();
break;
case 2:
selectOne();
menu1();
break;
case 3:
getTotalBalance();
menu1();
break;
case 4:
getNextCurrentNo();
menu1();
break;
case 5:
getCurrentCardNo();
menu1();
break;
default:
System.out.println("使用结束,返回上一级目录");
menu();
}
}
private void menu2() {
System.out.println("=============欢迎进入用户操作系统=============");
System.out.println("请问你要执行哪项功能: ");
System.out.println("1、注册账号");
System.out.println("2、登录账户");
System.out.println("0、结束使用,返回上一级目录");
int num = sc.nextInt();
switch (num){
case 1:
loginMessage();
menu2();
break;
case 2:
login();
menu3();
break;
default:
System.out.println("使用结束,返回上一级目录");
menu();
}
}
private void menu3() {
System.out.println("=============金额存取管理系统=============");
System.out.println("请问你要执行哪项功能: ");
System.out.println("1、存款");
System.out.println("2、取款");
System.out.println("3、查询账户余额");
System.out.println("0、结束使用,返回上一级目录");
int num = sc.nextInt();
switch (num){
case 1:
deposit();
menu3();
break;
case 2:
withdraw();
menu3();
break;
case 3:
getBalance();
menu3();
break;
default:
System.out.println("0、结束使用,返回上一级目录");
menu2();
}
}
在此我将目录分为了两部分,一种是银行对卡进行的相关操作,一部分是客户的操作
以上就是我写的所有内容了,可能有很多不足,在这谢谢各位看官的观看了!!!