本课堂要求我们自制一个工商银行的ATM机系统:虽然是以前没有系统的学过Java,但是毕竟还是有自学的经验。
以下是我的代码:
<Account.java>:
1 package ATM存款机;
2 //信1705-3班 201736** **
3 public class Account {
4
5 private String accountID;//存储学生用户账号
6 private String accountName;//存储账户的名称
7 private String operateDate;//存储操作时间,10位字符:2018-09-20
8 private int operateType;//存储操作账户的类型
9 //“1”表示存款,“2”表示取款,“3”表示转账汇款,“4”表示修改账户密码,“5”表示查询余额。
10 private String accountPassword;//用户密码,6位数
11 private int amount;//操作流水金额
12 private int accountbalance;//存储账户余额
13 //账号,姓名,操作日期,密码,流水
14 public Account(String accountID,String accountName,String operateDate,String accountPassword,int accountbalance) {
15 this.accountID = accountID;
16 this.accountPassword = accountPassword;
17 this.accountName = accountName;
18 this.operateDate = operateDate;
19 this.accountbalance = accountbalance;
20 }
21 public String getAccountID() {
22 return accountID;
23 }
24 public void setAccountID(String accountID) {
25 this.accountID = accountID;
26 }
27 public String getAccountname() {
28 return accountName;
29 }
30 public void setAccountname(String accountname) {
31 this.accountName = accountname;
32 }
33 public String getOperatedate() {
34 return operateDate;
35 }
36 public void setOperatedate(String operatedate) {
37 this.operateDate = operatedate;
38 }
39 public int getOperatetype() {
40 return operateType;
41 }
42 public void setOperatetype(int operatetype) {
43 this.operateType = operatetype;
44 }
45 public String getAccountpassword() {
46 return accountPassword;
47 }
48 public void setAccountpassword(String accountpassword) {
49 this.accountPassword = accountpassword;
50 }
51 public int getAmount() {
52 return amount;
53 }
54 public void setAmount(int amount) {
55 this.amount = amount;
56 }
57 public String getAccountName() {
58 return accountName;
59 }
60 public void setAccountName(String accountName) {
61 this.accountName = accountName;
62 }
63 public String getOperateDate() {
64 return operateDate;
65 }
66 public void setOperateDate(String operateDate) {
67 this.operateDate = operateDate;
68 }
69 public int getOperateType() {
70 return operateType;
71 }
72 public void setOperateType(int operateType) {
73 this.operateType = operateType;
74 }
75 public String getAccountPassword() {
76 return accountPassword;
77 }
78 public void setAccountPassword(String accountPassword) {
79 this.accountPassword = accountPassword;
80 }
81 public int getAccountbalance() {
82 return accountbalance;
83 }
84 public void setAccountbalance(int accountbalance) {
85 this.accountbalance = accountbalance;
86 }
87
88
89 }
<AccountTest.java>:
package ATM存款机;
//信1705-3班 201736** **
import java.util.Scanner;
public class AccountTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String ID;//输入的账号
int A = 0;// 判断对错,0为错
int T = 0;// 正确数
String password;// 密码
// 录入数据
Account account[] = new Account[5];
account[0] = new Account("20143602", "ms", "2018-09-19", "123456", 2000);
account[1] = new Account("20143603", "rose", "2018-09-19", "123456", 5000);
account[2] = new Account("20143604", "jak", "2018-09-19", "123456", 6000);
account[3] = new Account("20143605", "mark", "2018-09-19", "123456", 3000);
account[4] = new Account("20143606", "daad", "2018-09-19", "123456", 4000);
//
while (true) {
showMainMenu();//主菜单
ID = scanner.next();//输入账户
if (ID.length() != 8) {//判断长度
System.out.println("该卡不是银行卡! ");
} else {//长度符合
for (int i = 0; i < 5; i++) {// 循环寻找是否存在相同的账户
if (ID.equals(account[i].getAccountID())) {// 判断相等是否
A++;//相等则正确
T = i;//把该值的编号赋给T,正确数加1,为下一步做准备
}
}
if (A == 0) {
System.out.println("该账号不存在!");
} else {//A不等于0
System.out.println("输入成功!");
String name = account[T].getAccountname();//把姓名赋给name,以后利于调用
insertPasswordMenu(name);//输入密码菜单,引用name
password = scanner.next();//输入密码
int time = 0;//声明次数
for (int t = 0; t < 2; t++) {//三次内
if (password.equals(account[T].getAccountpassword())) {//密码相等
time++;//时间加1
// System.out.println(time);//时间测试
} else {//错误输出提示
System.out.println("输入错误,重新输入:");
password = scanner.next();
}
}
if (time != 0) {
int B = 0;// 当取款操作为 9或输入N时,B加1并转到主界面
while (B == 0) {
String choice;//声明选项
showInterFace(name);//显示系统主界面
choice = scanner.next();
if (choice.compareTo("q") == 0)
break;
else {
switch (choice) {
case "1": {
int cunMoney;//声明存款钱数
deposit(name);
cunMoney = scanner.nextInt();
if (cunMoney < 0) {
System.out.println("输入金额有误!");
} else {
account[T].setAccountbalance(account[T].getAccountbalance() + cunMoney);
checkCunMoney(account[T].getAccountbalance(), name);
}
}
break;// 存款ok
case "2": {
int chose;//声明钱总数与选择
double sum = 2;
withdraw(name, sum);
chose = scanner.nextInt();
if (chose == 9) {
System.out.println("退卡成功!");
B++;
break;
}
if (chose > 0 || chose < 9) {
switch (chose) {
case 1: {
int money = account[T].getAccountbalance();
int res = money - 100;
sum=sum-0.01;
if (res < 0) {
System.out.println("账户余额不足!");
} else {
account[T].setAccountbalance(res);
succedWithdraw(name, 100, res);
}
};
break;
case 2: {
int money = account[T].getAccountbalance();
int res = money - 500;
sum=sum-0.05;
if (res < 0) {
System.out.println("账户余额不足!");
} else {
account[T].setAccountbalance(res);
succedWithdraw(name, 500, res);
}
};
break;
case 3: {
int money = account[T].getAccountbalance();
int res = money - 1000;
sum=sum-0.1;
if (res < 0) {
System.out.println("账户余额不足!");
} else {
account[T].setAccountbalance(res);
succedWithdraw(name, 1000, res);
}
};
break;
case 4: {
int money = account[T].getAccountbalance();
int res = money - 1500;
sum=sum-0.15;
if (res < 0) {
System.out.println("账户余额不足!");
} else {
account[T].setAccountbalance(res);
succedWithdraw(name, 1500, res);
}
};
break;
case 5: {
int money = account[T].getAccountbalance();
int res = money - 2000;
sum=sum-0.2;
if (res < 0) {
System.out.println("账户余额不足!");
} else {
account[T].setAccountbalance(res);
succedWithdraw(name, 2000, res);
}
};
break;
case 6: {
int money = account[T].getAccountbalance();
int res = money - 5000;
sum=sum-0.5;
if (res < 0) {
System.out.println("账户余额不足!");
} else {
account[T].setAccountbalance(res);
succedWithdraw(name, 5000, res);
}
};
break;
case 7: {
insertMoney(name);
int anyMoney = scanner.nextInt();
int money = account[T].getAccountbalance();
int res = money - anyMoney;
sum=sum-anyMoney/10000.0000;
if (res < 0) {
System.out.println("账户余额不足!");
} else {
account[T].setAccountbalance(res);
succedWithdraw(name, anyMoney, res);
}
};
break;
case 8:
;
break;
}
}
doWithdraw();//
}
break;// 取款
case "3": {
String zzname;
int C = 0;// 与A相同
int Z=0;//转账账户编号
transferAccount(name);//转账菜单
zzname = scanner.next();//转账人账号
for (int i = 0; i < 5; i++) {// account[i].getAccountID()
if (zzname.equals(account[i].getAccountID())) {// 判断相等是否
C++;
Z=i;
}
}
if(zzname.equals(account[T].getAccountID())) {
C++;
}
if (C == 0) {
System.out.println("该账号不存在!");
}
else if(C==2) {
System.out.println("您不能向自己转账!");
}
else {
transferMenu(name);
StringBuffer nameZhuan;//声明被转账人姓名
int anyMoney = scanner.nextInt();//输入被转账钱数
int money = account[T].getAccountbalance();//将转账人的钱数赋值
int resOne = money - anyMoney;//查询余额
if (resOne < 0) {
System.out.println("账户余额不足!");
} else {//余额充足
nameZhuan=new StringBuffer(account[Z].getAccountName());//
nameZhuan.replace(0,1, "*");//首字母变*
insureMenu(name,nameZhuan,anyMoney);
String result=scanner.next();
if(result.compareTo("N")==0) {
B++;
break;
}else {
account[Z].setAccountbalance(account[Z].getAccountbalance()+anyMoney);//被转账人的余额
account[T].setAccountbalance(resOne);//转账人的余额
succeedTransfer(name,nameZhuan,anyMoney,resOne);//成功界面
}
}
}
}
break;// 转账汇率
case "4": {
String oldPassword, newPasswordOne, newPasswordTwo;
changePassword(name);
oldPassword = scanner.next();
String passw = account[T].getAccountPassword();
while (oldPassword.compareTo(passw) == 0) {
System.out.println("请输入修改密码:");
newPasswordOne = scanner.next();
System.out.println("请输入确认密码:");
newPasswordTwo = scanner.next();
if (newPasswordOne.equals(newPasswordTwo)) {
account[T].setAccountpassword(newPasswordOne);
succeedMenu(name);
break;
} else {
System.out.println("\t\t\t当前账户密码录入错误!");
}
}
}
break;// 修改密码 ok
case "5":
checkMoney(account[T].getAccountbalance(), name);
break;// 查询余额 ok
}
}
}
} // if
} // else
}
} // while
}// main
private static void succeedTransfer(String name, StringBuffer nameZhuan, int anyMoney, int oneres) {
System.out.println("*******************************************************");
System.out.println("\t\t欢迎" + name + "使用中国工商银行自动柜员系统");
System.out.println("*******************************************************");
System.out.println("\t\t\t当前账户向"+nameZhuan+"转账"+anyMoney+"元");
System.out.println("\t\t\t当前账户余额为:" + oneres);
System.out.println("*******************************************************");
}
private static void insureMenu(String name,StringBuffer sbName,int money) {
System.out.println("*******************************************************");
System.out.println("\t\t欢迎" + name + "使用中国工商银行自动柜员系统");
System.out.println("*******************************************************");
System.out.println("\t\t\t请确认是否向"+sbName+"转账"+money+"元");
System.out.println("\t\t\t(“N”表示不确认转账;“Y”表示确认转账。)");
System.out.println("\t\t\t请输入您的选择:");
}
private static void transferMenu(String name) {
System.out.println("*******************************************************");
System.out.println("\t\t欢迎" + name + "使用中国工商银行自动柜员系统");
System.out.println("*******************************************************");
System.out.println("\t\t\t请输入转账金额:");
}
private static void insertMoney(String name) {
System.out.println("*******************************************************");
System.out.println("\t\t欢迎" + name + "使用中国工商银行自动柜员系统");
System.out.println("*******************************************************");
System.out.println("\t\t\t请输入取款金额:");
}
private static void succedWithdraw(String name, int cmoney, int money) {
System.out.println("*******************************************************");
System.out.println("\t\t欢迎" + name + "使用中国工商银行自动柜员系统");
System.out.println("*******************************************************");
System.out.println("\t\t\t当前账户取款操作 " + cmoney + "成功!");
System.out.println("\t\t\t当前账户余额为:" + money);
System.out.println("*******************************************************");
}
private static void succeedMenu(String name) {
System.out.println("*******************************************************");
System.out.println("\t\t欢迎" + name + "使用中国工商银行自动柜员系统");
System.out.println("*******************************************************");
System.out.println("\t\t\t当前账户密码修改成功!");
System.out.println("*******************************************************");
}
private static void doWithdraw() {
}// 实行取款
// 查询余额
private static void checkMoney(int money, String name) {
System.out.println("*******************************************************");
System.out.println("\t\t欢迎" + name + "使用中国工商银行自动柜员系统");
System.out.println("*******************************************************");
System.out.println("您的余额为:" + money);
System.out.println("*******************************************************");
}
// 存款后余额
private static void checkCunMoney(int money, String name) {
System.out.println("*******************************************************");
System.out.println("\t\t欢迎" + name + "使用中国工商银行自动柜员系统");
System.out.println("*******************************************************");
System.out.println("您的余额为:" + money);
System.out.println("*******************************************************");
}
// 修改密码
private static void changePassword(String name) {
System.out.println("*******************************************************");
System.out.println("\t\t欢迎" + name + "使用中国工商银行自动柜员系统");
System.out.println("*******************************************************");
System.out.println("请输入当前密码:");
}
// 转账汇率
private static void transferAccount(String name) {
System.out.println("*******************************************************");
System.out.println("\t\t欢迎" + name + "使用中国工商银行自动柜员系统");
System.out.println("*******************************************************");
System.out.println("请输入转账账户:");
}
// 取款
private static void withdraw(String name, double sum) {
System.out.println("*******************************************************");
System.out.println("\t\t欢迎" + name + "使用中国工商银行自动柜员系统");
System.out.println("*******************************************************");
System.out.println("\t\t\t当前用户每日可支取" + sum + "万元.");
System.out.println("1.100元");
System.out.println("2.500元");
System.out.println("3.1000元");
System.out.println("4.1500元");
System.out.println("5.2000元");
System.out.println("6.5000元");
System.out.println("7.其他金额");
System.out.println("8.返回");
System.out.println("9.退卡");
System.out.println("*******************************************************");
}
// 存款
private static void deposit(String name) {
System.out.println("*******************************************************");
System.out.println("\t\t欢迎" + name + "使用中国工商银行自动柜员系统");
System.out.println("*******************************************************");
System.out.println("\t\t\t请输入存款金额:");
}
// 主菜单
public static void showMainMenu() {
System.out.println("*******************************************************");
System.out.println("\t\t欢迎使用中国工商银行自动柜员系统");
System.out.println("*******************************************************");
System.out.println("\t\t\t请输入您的账号:");
}
// 输入密码的菜单
public static void insertPasswordMenu(String name) {
System.out.println("*******************************************************");
System.out.println("\t\t欢迎" + name + "使用中国工商银行自动柜员系统");
System.out.println("*******************************************************");
System.out.println("\t\t\t请输入您的密码:");
}
// 系统主界面
public static void showInterFace(String name) {
System.out.println("*******************************************************");
System.out.println("\t\t欢迎" + name + "使用中国工商银行自动柜员系统");
System.out.println("*******************************************************");
System.out.println("\t\t\t1.存款");
System.out.println("\t\t\t2.取款");
System.out.println("\t\t\t3.转账汇款");
System.out.println("\t\t\t4.修改密码");
System.out.println("\t\t\t5.查询余额");
System.out.println("\t\t\t退出请输入‘q’");
System.out.println("\t\t\t请输入操作数:");
}
}
这就是我做了四天的一个ATM机的代码。功能除了与文件有关的地方没有完成,其他的功能应该都是完成了的。
通过做这个ATM机的代码,我了解到了Java语言的魅力,它有很多方法,虽然我现在学到的还很少,但我尽量在学习。每次在遇到一个新的问题时,我都会先去思考如何简便的做出来,(当然是在我的知识范围内),当然我也会去网上查找一些新的方法,就如我的这个代码中,就有很多我在这几天刚刚学到方法:如StringBuffer类以及它的replace(int start,int end,String replace),这个代替String类中从start到end的字符,当然还要把String类转化为String Buffer类,这就是我们经常见到的信息保护的一种了。
从第一次接触Java并安装好写我的第一个HelloWorld到现在已经有一个多月了吧!这其中的艰辛与困难是只有自己一步步走来的人才懂得,就当时安装eclipse时,就有数不尽的难题,就如在自己使用eclipse时,时不时冒出来一个框框,由于是全英文,自己也看不懂为啥,就去度娘,度娘出来的结果自己也只能一个一个筛选是不是自己的问题,然后跟着步骤一步一步的解决,往往是能解决问题的,但有时候的问题是版本问题或缺了啥东西,或是自己的软件或电脑问题,有事就要重新安装,重新安装就意味着卸载,从零开始,好在看了几个名师的视频后注意到在安装时应该注意的问题,加上对这款软件的一点一点的了解后,终于不用卸载了。
代码是建立在C与C++的基础上的,但是输入输出照样有很大的改变,尤其是输入,在刚开始的时候,我只会输出语句,这应该就是为什么helloworld很出名了吧。在这次的代码考试中我更是加深了对Java的了解,对这个语言有了更深的兴趣,在我们这一堆人中,已经有人开始用Java写界面了,我的下一步是将文件写入,并熟练地使用文件的各种方法,相信文件也是有不少方法等我去学习的。
在这个测试中我已经充分的了解到了自己的不足,就是对基础的掌握不够,如static,这个将一个函数或数据声明为静态类型的符号,我掌握的就是很差,所以在我写代码的时候,尽量先不去写关于static的函数与代码,我会在未来的学习中尽量补全自己的不足,毕竟基础知识一大片,完全补齐需要耗费很大的精力,而我还要学习Java的各种方法,虽然这不能成为我不学习的理由,但我会尽量都顾及到,现在只有一句话能表达我的内心了吧:路漫漫其修远兮,吾将上下而求索。
未来的我还是需要靠这些来吃饭,所以现在多学习一点,未来的资本就更高一层,所以现在趁我还有精力,还有动力,我会催促自己去学习,