java课实验作业-银行账户
这是一个记录java课实验作业的专栏,博主是一个前oier,现acmer,目的在于记录以一个算法竞赛参赛者的码风习惯解决一些大学中的实验课作业
题目表述

完成一个银行账户类,需要完成取钱,存钱,开户,验证密码,查询余额
我又在要求的基础上添加了使用随机数生成银行卡号,用Map存放卡号-数组下标的映射,使用Map查询卡号是否存在,并添加了一些异常处理。
项目结构:

代码展示:
package bank_account;
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
package bank_account;
import java.util.Scanner;
public class Bank_account{
private String Account_name;
private long ID;
private int Balance;
private String Password;
private boolean check(String password){
//使用String类方法equals判断密码是否正确
if(Password.equals(password)) return true;
else return false;
}
public void query_balance(String password){
if(check(password)){
System.out.println("您的余额为:"+Balance);
}
else{
System.out.println("您的密码错误,请重试!");
}
}
public void deposit(String password,int money){
if(check(password)){
Balance+=money;
System.out.printf("您已存入%d元\n",money);
}
else{
System.out.println("您的密码错误,请重试!");
}
}
public void draw(String password,int money){
if(check(password)){
//对余额不足的特判
if(Balance<money){
System.out.println("余额不足!");
return ;
}
Balance-=money;
System.out.printf("您已取出%d元,请妥善保管\n",money);
}
else{
System.out.println("您的密码错误,请重试!");
}
}
public void set_ID(long id){
ID=id;
}
public long set_account(String account_name,String password){
Account_name=account_name;
Password=password;
return ID;
}
}
package pair;
package pair;
import java.util.HashMap;
import java.util.Map;
import bank_account.Bank_account;
public class pair{
//三元组,first是Bank_account类类型,second是Map类型,third是int类型
public Bank_account first=new Bank_account();
public Map<Integer,Integer> second=new HashMap<Integer,Integer>();
public int third;
}
package operator;
package operator;
import java.util.Scanner;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;
import bank_account.Bank_account;
import pair.pair;
public class bank_operate{
Scanner s=new Scanner(System.in);
private long creat_ID(long seed){
//生成随机数并用时间随机种子取模获得ID
long INF=1000000000L;
long ID=(int)(Math.random()*INF)%seed;
return ID;
}
private long Get_seed(){
//生成时间随机种子
Date date=new Date();
SimpleDateFormat now=new SimpleDateFormat("ddhhmmss");
String Time=now.format(date);
long seed=0;
for(int i=0;i<Time.length();i++)
seed=seed*10+(int)(Time.charAt(i)-'0');
return seed;
}
public pair build_accout(Map<Integer,Integer> map,int tot){
//开户操作,返回类型是三元组类
Bank_account man=new Bank_account();
pair tw=new pair();
System.out.println("您已进入开户操作,如果操作无误请输入1以确认,若有误请输入0以撤回!");
int par=s.nextInt();
if(par==0){
tw.third=-1;
return tw;
}
System.out.println("您已确认开户操作,请输入您的账户名称与密码");
String account_name,password;
account_name=s.next();
password=s.next();
long seed=Get_seed();
long ID=creat_ID(seed);
man.set_ID(ID);
man.set_account(account_name,password);
map.put((int)ID,tot);
System.out.printf("您已开户成功,请记好您的银行卡号:\n%d\n",ID);
tw.first=man;tw.second=map;tw.third=1;
return tw;
}
public int query(Bank_account man[],Map<Integer,Integer> map){
//查余额操作
System.out.println("您已进入余额查询操作,如果操作无误请输入1以确认,若有误请输入0以撤回!");
int par=s.nextInt();
if(par==0){
return -1;
}
System.out.println("您已确认余额查询操作,请输入您的卡号");
String password;
long ID;
ID=s.nextLong();
boolean isEmpty=map.containsKey((int)ID);//判断卡号是否为空号
while(!isEmpty){
System.out.println("您的银行卡号为空号,请重新输入");
ID=s.nextLong();
isEmpty=map.containsKey((int)ID);
}
System.out.println("请输入您的密码:");
password=s.next();
int w=map.get((int)ID);
man[w].query_balance(password);
return 1;
}
public int save_money(Bank_account man[],Map<Integer,Integer> map){
System.out.println("您已进入存钱操作,如果操作无误请输入1以确认,若有误请输入0以撤回!");
int par=s.nextInt();
if(par==0){
return -1;
}
System.out.println("您已确认存钱操作,请输入您的卡号");
String password;
long ID;
ID=s.nextLong();
boolean isEmpty=map.containsKey((int)ID);
while(!isEmpty){
System.out.println("您的银行卡号为空号,请重新输入");
ID=s.nextLong();
isEmpty=map.containsKey((int)ID);
}
System.out.println("请输入您的密码与存钱金额:");
password=s.next();
int w=map.get((int)ID);
int sv=s.nextInt();
man[w].deposit(password,sv);
return 1;
}
public int draw_money(Bank_account man[],Map<Integer,Integer> map){
System.out.println("您已进入取钱操作,如果操作无误请输入1以确认,若有误请输入0以撤回!");
int par=s.nextInt();
if(par==0){
return -1;
}
System.out.println("您已确认取钱操作,请输入您的卡号");
String password;
long ID;
ID=s.nextLong();
boolean isEmpty=map.containsKey((int)ID);
while(!isEmpty){
System.out.println("您的银行卡号为空号,请重新输入");
ID=s.nextLong();
isEmpty=map.containsKey((int)ID);
}
System.out.println("请输入您的密码与取钱金额:");
password=s.next();
int w=map.get((int)ID);
int sv=s.nextInt();
man[w].draw(password,sv);
return 1;
}
}
package Test;//主类
import java.util.Scanner;
import java.util.HashMap;
import java.util.Map;
import bank_account.Bank_account;
import operator.bank_operate;
import pair.pair;
public class Test{
public static void main(String args[]) {
Scanner s=new Scanner(System.in);
bank_operate nowtry=new bank_operate();
Map<Integer,Integer> map=new HashMap<Integer,Integer>();
int tot=0;
Bank_account man[]=new Bank_account[101];
for(int i=1;i<=100;i++) man[i]=new Bank_account();
System.out.println("请输入您的操作数目:");
int m=s.nextInt();
for(int i=1;i<=m;i++){
System.out.println("请输入您的这次操作:");
System.out.println("输入o以进行开户");
System.out.println("输入c以进行余额查询");
System.out.println("输入e以进行存钱");
System.out.println("输入r以进行取钱");
String read=s.next();
char c=read.charAt(0);//取读入字串首字符
if(c=='o'){
pair tw=new pair();
tw=nowtry.build_accout(map,++tot);
if(tw.third==-1){
i--;tot--;continue;//撤回操作的处理,循环次数和开户数目都要减少
}
man[tot]=tw.first;
map=tw.second;
}
if(c=='c'){
if(nowtry.query(man,map)==-1){
i--;continue;
}
}
if(c=='e'){
if(nowtry.save_money(man,map)==-1){
i--;continue;
}
}
if(c=='r'){
if(nowtry.draw_money(man,map)==-1){
i--;continue;
}
}
}
}
}
总结
第一次写关于分包的代码,技术还很不成熟,可能写的比较乱。
各位大佬有各种建议也可以多多交流

这篇博客介绍了一个基于Java实现的银行账户管理系统,包括开户、验证密码、查询余额、存取款等功能。博主通过随机数生成银行卡号,并使用Map存储卡号与账户信息,实现了异常处理和用户交互。代码分为Bank_account、pair和bank_operate三个包,分别对应账户类、账户数据结构和操作类。博主在实践中尝试了分包和异常处理,期望能从算法竞赛的角度提升编程风格。
5561





