实验源码:
package 银行账户1;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
public class User { //客户端类
static int user=0; //当前客户在AccountList中的序号
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input =new Scanner(System.in);
System.out.print("是否开户?\n 请输入:是 \t 或者输入:否 \n");
if(input.next().equals("是")){
AccountList.create(); //开户,创造一个新的Account对象用来保存用户各类数据
}
while(true){ //多次处理用户命令操作
System.out.print("账户操作-->变更密码请输入:1;\t存款请输入:2;\t取款请输入:3;\n查询操作-->查询账户的标识:4;\t查询开户日期:5;\t查询当前余额:6;\t查询姓名:7;\n开户请输入:8;\n退出请输入:0\n"); //客户端页面
int number=input.nextInt();
if(number>=0&&number<=8){
corresponding(number); //处理数字相应的命令
}else{
System.out.print("错误的输入!自动退出!\n"); //如果并不是零到八的数字,就结束所有操作
break;
}
}
AccountList.printfAll(); //输出所有的Account对象的内容
}
public static void corresponding(int number){ //处理数字相应的命令
if(number==8){
opening(); //开户方法
return;
}
int i=trueOrFalse(number); //返回用户是否在AccountList表中有序号,有则返回正确的序号
if(i==-1)return;
if(number==1){
System.out.println("接下来输入您的新密码--->");
AccountList.List.get(i).setPassword(AccountList.inputPassword()); //设置密码为新输入的密码
System.out.println("密码修改完成!");
}else if(number==2){
System.out.print("输入您的存款数:\n");
int blance=AccountList.inputBlance(); //获取输入的存款值
if(blance>0){
AccountList.List.get(i).setBalance(AccountList.List.get(i).getBalance()+blance); //存款大于零就能存入
System.out.print("存款成功!");
}else{
System.out.print("错误的存款数!");
}
}else if(number==3){
System.out.print("输入您的取款数:\n");
int blance=AccountList.inputBlance(); //获取输入的取款值
if(blance>0&&blance<=AccountList.List.get(i).getBalance()){ //小于存款值并大于零就可以取款
AccountList.List.get(i).setBalance(AccountList.List.get(i).getBalance()-blance); // 改变存款值
System.out.println("取款成功!");
}else{
System.out.print("错误的取款数!");
}
}else if(number==4){
System.out.println("您的账户标识为:"+AccountList.List.get(i).getIdentifier());
}else if(number==5){
System.out.println("您的开户日期为:"+AccountList.List.get(i).getOpeningDate());
}else if(number==6){
System.out.println("您的当前余额为:"+AccountList.List.get(i).getBalance());
}else if(number==7){
System.out.println("您的姓名为:"+AccountList.List.get(i).getName());
}
}
public static void opening(){ //开户
Scanner input =new Scanner(System.in);
System.out.print("是否开户?\n 请输入:是 \t 或者输入:否 \n");
String s=input.next();
if(s.equals("是")){
AccountList.create(); //创建一个新的Account对象用来保存用户各类数据
}else if(s.equals("否")){
System.out.println("谢谢使用!");
}else{
System.out.println("请确认您的输入正确!");
}
}
public static int trueOrFalse(int number) //返回用户是否在AccountList表中有序号,有则返回正确的序号
{
if(number==0){
System.out.print("已安全退出!");
System.exit(1);
}else{
System.out.println("是否改变账户?");
Scanner input =new Scanner(System.in);
String s=input.nextLine().trim();
if(s.equals("是")){
int i=AccountList.search(AccountList.inputName()); //判断是否有输入的用户,有则返回大于等于零的序号
if(i!=-1){
if(AccountList.inputPassword().equals(AccountList.List.get(i).getPassword())){ //判断密码是否正确
user=i; //当前更改后的用户的序号
return i;
}else{
System.out.println("密码错误!请重新启动!");
return -1;
}
}else{
System.out.println("没有此用户!请重试!");
return -1;
}
}else if(s.equals("否")){
return user; //继续使用当前用户的序号
}else{
System.out.println("错误的输入!请新开始!");
}
}
return 0;
}
}
class Account { //保存用户的各类数据,不能直接访问,以免造成糟糕的后果
private static double id=1; //用户共享的内部id
private double userid; //用户本人的id
private String identifier; //用户唯一的标识码
private String name; //用户名
private String openingDate; //用户的开户日期
private String password="123456";//用户初始密码
private double balance=0; //用户初始余额
public Account(String name){ //构造函数,确定不可更改的用户id,唯一标识符,开户日期。
this.name=name;
this.userid=id;
this.setOpeningDate();
this.setUniqueid();
id++;
}
public double getUserid() {
return userid;
}
public String getOpeningDate() {
return openingDate;
}
public String getIdentifier() {
return identifier;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
private void setUniqueid(){ //设置唯一的标识符
if(id>=100){
this.identifier="uniqueid"+(int)id;
}else if(id>=10){
this.identifier="uniqueid0"+(int)id;
}else{
this.identifier="uniqueid00"+(int)id;
}
}
private void setOpeningDate(){ //不可更改的开户日期
Date now=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
this.openingDate=sdf.format(now);
}
}
class AccountList{ //保存所有用户各类数据的表
static ArrayList List=new ArrayList(); //Account对象类型的数组表
public static void create(){ //创造一个新的Account
Account account=new Account(AccountList.inputName()); //开户需要用户名,银行提供其他的数据
List.add(account);
System.out.print("请问您要存入初始资金吗?如果不需要请输入数字0;如果需要请输入金额:\n");
Scanner input =new Scanner(System.in);
double aom=input.nextDouble();
if(aom<=0){
System.out.print("您的初始金额为0元!\n");
}else{
account.setBalance(aom);
System.out.print("您的初始金额为"+account.getBalance()+"元!\n");
}
}
public static int search(String name){ //在现有的AccountList中寻找是否有这个用户,找到返回其序号,否则返回-1
int i;
for(i=0;i
if(List.get(i).getName().equals(name))
return i;
}
return -1;
}
public static void printfAll(){ //输出所有的用户信息
for(Account i:List){
System.out.println("用户名字:"+i.getName()+"\n用户自己ID:"+i.getUserid()+"\n用户标识码:"+i.getIdentifier().toString()+"\n开户日期:"+i.getOpeningDate()+"\n账户余额:"+i.getBalance()+"\n用户密码:"+i.getPassword()+"\n");
}
}
public static String inputName(){ //返回输入的用户名
Scanner input =new Scanner(System.in);
System.out.print("请输入您的姓名:\n");
String s=input.nextLine().trim();
System.out.print("您的姓名为: "+s+"\n");
return s;
}
public static String inputPassword(){ //返回输入的密码
System.out.print("请输入您的密码:\n");
Scanner input =new Scanner(System.in);
while(true){
String password=input.nextLine().trim();
char [] ch=password.toCharArray();
if(ch.length!=6){
System.out.println("不符合规定的密码!请重试!");
}else{
return password;
}
}
}
public static int inputBlance(){ //返回输入的存取款值
Scanner input =new Scanner(System.in);
return input.nextInt();
}
}