第一次测验感想
题目要求:
ATM机的账户记录Account有账户的唯一性标识(8个数字的组合),用户的姓名,操作日期(Date),操作类型,账户密码(六位的数字,可以用0开头),当前的余额(可以为0)。
1、定义Account类,其中包括七个私有变量(accountID,accountname,operatedate,operatetype,accountpassword, accountbalance,)。(3分)
各成员的含义如下:
变量accountID为字符串类型String,用于存储学生的用户账号(由八位数字组成)。
变量accountname为字符串类型String,用于存储账户的名称。
变量operatedate为字符串类型String,用于存储操作的时间,由十位字符组成,显示格式为“2018-09-20”。
变量operatetype为int类型,用于存储操作账户的类型,具体描述为“1”表示存款,“2”表示取款,“3”表示转账汇款,“4”表示修改账户密码,“5”表示查询余额。
变量accountpassword为字符串类型String,用于用户密码,由六位数字组成。
变量accountbalance为整数类型int,用于存储账户余额,缺省为0。
变量amount为整数类型int,表示操作流水金额。
2、对每个变量定义get()(读取变量信息)和set()(设置变量信息)的方法。(3分)
3、定义accountinformation.txt作为账户基本信息库,基本信息包括accountID,accountname,accountpassword, accountbalance,要求事先实现至少存储五个账户的信息,定义accountlist.txt作为账户操作流水信息数据库,操作流水信息包括(accountID,accountname,operatedate,operatetype, amount)。(要求将学号作为帐号,将考生信息作为第一条记录)。(2分)
三、功能要求:(12分)
该程序模拟ATM的功能设计,当用户插卡后显示,输入密码界面,用户输入正确密码(用户输入错误密码,则提示该卡已被锁定,无法操作),则弹出选择界面:存款、取款、转账汇款、修改密码、查询余额。
注意:对accountinformation.txt和accountlist.txt数据库中的信息进行读写操作时,必须调用get()和set()方法,否则,出现一处扣除0.5分,直至扣完为止。
(1) 需要在程序开始的注释中注明班级、学号、姓名。(1分)
(2) 定义AccountManager类实现下列要求
(3)程序开始运行模拟用户插卡显示用户输入账号功能;(1分)
①界面设计:
***************************************************************
欢迎使用中国工商银行自动柜员系统
**************************************************************** 请输入您的账号:
****************************************************************
②功能设计
用户在该界面输入账号信息,如果输入账号位数有误,提示“该卡不是工行卡”,如果输入账号信息在accountinformation.txt不存在,则提示“该账号不存在”,账号输入不成功,系统提示错误信息后返回输入账号界面;输入账号成功后,系统跳转到输入密码界面。
(4)用户输入密码功能;(1分)
①界面设计:
***************************************************************
欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统
**************************************************************** 请输入您的密码:
****************************************************************
②功能设计
用户在该界面输入账号密码信息,如果密码录入错误(出现位数不对或与文件中该账号对应的密码不服),则提示“密码录入错误”,如果密码录入三次错误,则提示“该账号三次录入密码错误,该卡已被系统没收,请与工行及时联系处理”。单次密码输入不成功,系统提示错误信息,返回输入密码界面;三次密码输入不成功,系统提示错误信息,返回输入账号界面,密码输入成功,系统跳转到主界面。
(5)系统主界面如下图所示,选择相应的数字执行相应的功能。(1分)
***************************************************************
欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统
****************************************************************
1、 存款;
2、 取款;
3、 转账汇款;
4、 修改密码;
5、 查询余额;
****************************************************************
(6)存款功能:(2分)
存款操作流程:
①系统进入存款界面:
***************************************************************
欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统
****************************************************************
请输入存款金额;
****************************************************************
②用户在该界面输入存款金额后,如果输入不是正整数,提示用户“输入金额有误,返回取款界面;输入字母“q”,则返回系统输入账号界面,表示退出柜员机操作;输入正整数,则跳转到下图存款成功界面。
***************************************************************
欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统
****************************************************************
当前账户存款操作成功。
当前账户余额为:XXXX元
****************************************************************
③存款成功后将该条记录作为操作流水信息记录到accountlist.txt文件中,并修改accountinformation.txt中的账户余额。
④点击“q”键,退回系统录入账号界面
(7)取款功能:则显示100元、500元、1000元、1500元、2000元、5000元、其他金额、退卡、返回操作供用户选择(3分)
取款流程设计:
① 系统进入取款界面:
***************************************************************
欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统
****************************************************************当前账户每日可以支取2万元。
1、100元
2、500元
3、1000元
4、1500元
5、2000元
6、5000元;
7、其他金额
8、退卡
9、返回
****************************************************************
②用户选择1-6选项时,判断账户余额是否不小于录入金额,如果小于,则提示“账户余额不足”,如果大于,则跳转到下图取款成功界面。
***************************************************************
欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统
****************************************************************
当前账户取款操作XXXX元成功。
当前账户余额为:XXXX元
****************************************************************
③用户选择7选项时,显示录入金额界面
***************************************************************
欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统
****************************************************************
请输入取款金额:
****************************************************************
判断账户余额是否不小于录入金额,如果小于,则提示“账户余额不足”,如果大于,则跳转到下图取款成功界面。
***************************************************************
欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统
****************************************************************
当前账户取款操作XXXX元成功。
当前账户余额为:XXXX元
****************************************************************
④取款成功后将该条记录作为操作流水信息记录到accountlist.txt文件中,并修改accountinformation.txt中的账户余额。
⑤用户选择“8”选项时,系统跳转到输入账户界面。
⑥用户选择“9”选项时,系统跳转到系统主界面。
(8)转账汇款功能:(1分)
系统流程如下所示:
①系统进入转账主界面
***************************************************************
欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统
****************************************************************
请输入转账账户;
****************************************************************
②用户在该界面输入判断该账户是否存在accountinformation.txt文件中,如果没有提示“该账户不存在”,如果有则跳转到转账金额界面。
***************************************************************
欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统
****************************************************************
请输入转账金额;
****************************************************************
③判断账户余额是否不小于录入金额,如果小于,则提示“账户余额不足”,如果大于,则跳转到下图转账确认成功界面。
***************************************************************
欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统
****************************************************************
请确认是否向*XX(将转账的用户名称第一个用*代替,其余正常显示)转账XXXX元。
****************************************************************
④单击“N”表示不确认转账,系统跳转到系统主界面;单击“Y”表示确认转账,系统跳转到转账成果界面,。
***************************************************************
欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统
****************************************************************
当前账户向*XX成功转账XXXX元。
当前账户余额为:XXXX元
****************************************************************
⑤转账汇款成功后将该条记录作为操作流水信息记录到accountlist.txt文件中,并修改accountinformation.txt中的账户余额。
⑥点击“q”键,退回系统录入账号界面
(9)修改密码功能:(1分)
修改密码操作流程:
① 系统进入修改密码界面:
***************************************************************
欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统
****************************************************************
请输入当前密码:
请输入修改密码:
请输入确认密码:
****************************************************************
② 当前密码录入错误,提示“当前密码录入错误”,系统返回修改密码界面,清空数据重新录入;修改后密码与确认密码不一致,提示“修改密码与确认密码不一致”,系统返回修改密码界面,清空数据重新录入。
③ 密码修改成功,系统跳转到密码修改成功界面。
***************************************************************
欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统
****************************************************************
当前账户密码修改成功
****************************************************************
④ 密码修改成功后将该条记录作为操作流水信息记录到accountlist.txt文件中,并修改accountinformation.txt中的账户密码。
⑤ 点击“q”键,退回系统录入账号界面
(10)查询功能:(1分)
查询操作流程:
①系统显示当前用户余额和操作流水信息:
***************************************************************
欢迎XXXXXXXX(账户名称)使用中国工商银行自助柜员系统
****************************************************************
当前账户余额为:XXXX元
账户清单信息为:
1、操作日期 操作类型(不用显示数字) 操作金额
2、操作日期 操作类型(不用显示数字) 操作金额
3、…………………………………………………………
****************************************************************
②点击“q”键,退回系统录入账号界面。
Account 类:
import java.text.SimpleDateFormat;
import java.util.Date;
class Account {
private String accountID;//账号,八位数字组成
private String accountname;//名称
private String operatedate;//时间
private int operatetype;//用于存储操作账户的类型
private String accountpassword;//用户密码
private int accountbalance;//用户余额
private int amount;//操作流水金额
//accountID
public String getAccountID() {
return accountID;
}
public void setAcountID(String accountID) {
this.accountID= accountID;
}
//accountname
public String getAccountname() {
return accountname;
}
public void setAccountname(String accountname) {
this.accountname= accountname;
}
//operatedate
public String getOperatedate() {
return operatedate;
}
public void setOperatedate(String operatedate) {
this.operatedate=operatedate;
}
//operatetype
public int getOperatetype() {
return operatetype;
}
public void setOperatetype(int operatetype) {
this.operatetype= operatetype;
}
//accountpassword
public String getAccountpassword() {
return accountpassword;
}
public void setAccountpassword(String accountpassword) {
this.accountpassword= accountpassword;
}
//accountbalance
public int getAccountbalance() {
return accountbalance;
}
public void setAccountbalance(int accountbalance) {
this.accountbalance= accountbalance;
}
//amount
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount= amount;
}
public Account(String a,String b,String c,int d,String e,int f,int g) {
this.accountID=a;
this.accountname=b;
this.operatedate=c;
this.operatetype=d;
this.accountpassword=e;
this.accountbalance=f;
this.amount=g;
}
Account(){}
}
package text2;
import java.util.Scanner;
public class AccountManager {
static Account[] acc = new Account[5];
static int n;
static AccountManager z = new AccountManager();// 用于调用方法
public AccountManager() {
for (int i = 0; i < n; i++) {
acc[i] = new Account();
}
acc[0] = new Account("00000001", "li", "2020-9-22", 1, "101010", 200, 20);
acc[1] = new Account("00000002", "wang", "2020-9-22", 1, "201010", 200, 20);
acc[2] = new Account("00000003", "zhang", "2020-9-22", 1, "301010", 200, 20);
acc[3] = new Account("00000004", "bai", "2020-9-22", 1, "401010", 200, 20);
acc[4] = new Account("00000005", "hei", "2020-9-22", 1, "501010", 200, 20);
}
// 初始界面
public static void first() {
System.out.println("***********************************************************");
System.out.println(" 欢迎使用中国工商银行自动柜员系统 ");
System.out.println("**********************************************************");
System.out.println(" 请输入您的账号 ");
System.out.println("**********************************************************");
@SuppressWarnings("resource")
Scanner scan = new Scanner(System.in);
String zhanghao = scan.next();
int e = 5;
for (int i = 0; i < 5; i++) {
if (zhanghao.equals(acc[i].getAccountID())) {
e = i;
}
}
if (e == 5) {
System.out.println("不是本银行的卡,即将返回初始界面");
first();
}
else {
mima(e);
}
}
// 密码界面
public static void mima(int pass) {
System.out.println("***************************************************************");
System.out.println(" 欢迎" + acc[pass].getAccountbalance() + "使用中国工商银行自助柜员系统");
System.out.println("***************************************************************");
System.out.println(" 请输入您的密码:");
int time = 0; // 记录输入密码的次数
@SuppressWarnings("resource")
Scanner scan = new Scanner(System.in);
while (time < 3) {
String save = scan.nextLine();
if (save.equals(acc[pass].getAccountpassword())) {
System.out.println("输入密码正确,成功跳转到主界面");
zhujiemian(pass);
}
else {
System.out.println("密码输入错误,请重新输入。");
time++;
}
if (time == 3) {
System.out.println("你已失去三次输入密码机会,即将返回初始界面。");
first();
}
}
}
// 一个返回界面方法
public static void fanhui(int pass) {
System.out.println("***************************************************************");
System.out.println("如要仍要进行其他操作,请输入111,将返回主界面;");
System.out.println("如不进行其他操作,请输入000,将结束程序");
System.out.println("***************************************************************");
@SuppressWarnings("resource")
Scanner scan = new Scanner(System.in);
int ch = scan.nextInt();
if (ch == 111) {
zhujiemian(pass);
}
if (ch == 000) {
System.exit(0);
}
}
// 主界面
public static void zhujiemian(int pass) {
System.out.println("***************************************************************");
System.out.println(" 欢迎" + acc[pass].getAccountname() + "使用中国工商银行自助柜员系统");
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("****************************************************************");
System.out.println(" 请输入:");
@SuppressWarnings("resource")
Scanner scan = new Scanner(System.in);
int temp = scan.nextInt();
switch (temp)
{
case 1: {
acc[pass].setOperatedate(1);
cunkuan(pass);
fanhui(pass);
}
break;
case 2: {
acc[pass].setOperatedate(2);
qukuan(pass);
fanhui(pass);
}
break;
case 3: {
acc[pass].setOperatedate(3);
zhuanzhanghuikuan(pass);
fanhui(pass);
}
break;
case 4: {
acc[pass].setOperatedate(4);
xiugaimima(pass);
fanhui(pass);
}
break;
case 5: {
acc[pass].setOperatedate(5);
chaxunyue(pass);
fanhui(pass);
}
break;
default: {
System.out.println("您未进行正确操作,返回主界面");
zhujiemian(pass);
}
break;
}
}
// 存款界面
public static void cunkuan(int pass) {
System.out.println("***************************************************************");
System.out.println(" 欢迎" + acc[pass].getAccountname() + "存款");
System.out.println("****************************************************************");
System.out.println(" 请输入存款金额:");
@SuppressWarnings("resource")
Scanner scan = new Scanner(System.in);
int cundeqian = scan.nextInt();
if (cundeqian < 0) {
System.out.println("输入的金额有误,返回主界面");
first();
} else {
acc[pass].setAmount(acc[pass].getAmount() + cundeqian);
acc[pass].setAccountbalance(acc[pass].getAccountbalance() + cundeqian);
System.out.println("****************************************************************");
System.out.println(" 当前账户存款操作成功。");
System.out.println(" 当前账户余额为:" + acc[pass].getAccountbalance() + "元");
}
}
// 取款界面
public static void qukuan(int pass) {
System.out.println("***************************************************************");
System.out.println(" 欢迎" + acc[pass].getAccountbalance() + "进行 取款");
System.out.println("****************************************************************");
System.out.println(" 当前账户每日可以支取2万元。");
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("****************************************************************");
System.out.println(" #:请选择");
@SuppressWarnings("resource")
Scanner scan = new Scanner(System.in);
int choice = scan.nextInt();
switch (choice) {
case 1: {
if (acc[pass].getAccountbalance() < 100) {
System.out.println("账户余额不足,返回取款界面");
qukuan(pass);
} else {
acc[pass].setAmount(acc[pass].getAmount() + 100);
acc[pass].setAccountbalance(acc[pass].getAccountbalance() - 100);
System.out.println("***************************************************************");
System.out.println(" 欢迎" + acc[pass].getAccountbalance() + "进行 取款");
System.out.println("****************************************************************");
System.out.println(" 当前账户取款操作100元成功。");
System.out.println(" 当前账户余额为:" + acc[pass].getAccountbalance() + "元");
}
break;
}
case 2: {
if (acc[pass].getAccountbalance() < 500) {
System.out.println("账户余额不足,返回取款界面");
qukuan(pass);
} else {
acc[pass].setAmount(acc[pass].getAmount() + 500);
acc[pass].setAccountbalance(acc[pass].getAccountbalance() - 500);
System.out.println("***************************************************************");
System.out.println(" 欢迎" + acc[pass].getAccountbalance() + "进行 取款");
System.out.println("****************************************************************");
System.out.println(" 当前账户取款操作500元成功。");
System.out.println(" 当前账户余额为:" + acc[pass].getAccountbalance() + "元");
}
break;
}
case 3: {
if (acc[pass].getAccountbalance() < 1000) {
System.out.println("账户余额不足,返回取款界面");
qukuan(pass);
} else {
acc[pass].setAmount(acc[pass].getAmount() + 1000);
acc[pass].setAccountbalance(acc[pass].getAccountbalance() - 1000);
System.out.println("***************************************************************");
System.out.println(" 欢迎" + acc[pass].getAccountbalance() + "进行 取款");
System.out.println("****************************************************************");
System.out.println(" 当前账户取款操作1000元成功。");
System.out.println(" 当前账户余额为:" + acc[pass].getAccountbalance() + "元");
}
}
break;
case 4: {
if (acc[pass].getAccountbalance() < 1500) {
System.out.println("账户余额不足,返回取款界面");
qukuan(pass);
} else {
acc[pass].setAmount(acc[pass].getAmount() + 1500);
acc[pass].setAccountbalance(acc[pass].getAccountbalance() - 1500);
System.out.println("***************************************************************");
System.out.println(" 欢迎" + acc[pass].getAccountbalance() + "进行 取款");
System.out.println("****************************************************************");
System.out.println(" 当前账户取款操作1500元成功。");
System.out.println(" 当前账户余额为:" + acc[pass].getAccountbalance() + "元");
}
break;
}
case 5: {
if (acc[pass].getAccountbalance() < 2000) {
System.out.println("账户余额不足,返回取款界面");
qukuan(pass);
} else {
acc[pass].setAmount(acc[pass].getAmount() + 2000);
acc[pass].setAccountbalance(acc[pass].getAccountbalance() - 2000);
System.out.println("***************************************************************");
System.out.println(" 欢迎" + acc[pass].getAccountbalance() + "进行 取款 ");
System.out.println("****************************************************************");
System.out.println(" 当前账户取款操作2000元成功。");
System.out.println(" 当前账户余额为:" + acc[pass].getAccountbalance() + "元");
}
break;
}
case 6: {
if (acc[pass].getAccountbalance() < 5000) {
System.out.println("账户余额不足,返回取款界面");
qukuan(pass);
} else {
acc[pass].setAmount(acc[pass].getAmount() + 5000);
acc[pass].setAccountbalance(acc[pass].getAccountbalance() - 5000);
System.out.println("***************************************************************");
System.out.println(" 欢迎" + acc[pass].getAccountbalance() + "进行 取款 ");
System.out.println("****************************************************************");
System.out.println(" 当前账户取款操作5000元成功。");
System.out.println(" 当前账户余额为:" + acc[pass].getAccountbalance() + "元");
}
break;
}
case 7: {
System.out.println("请输入你要取款的金额:");
int num = scan.nextInt();
if (acc[pass].getAccountbalance() < num) {
System.out.println("账户余额不足,返回取款界面");
qukuan(pass);
} else {
acc[pass].setAmount(acc[pass].getAmount() + num);
acc[pass].setAccountbalance(acc[pass].getAccountbalance() - num);
System.out.println("***************************************************************");
System.out.println(" 欢迎" + acc[pass].getAccountbalance() + "进行 取款");
System.out.println("****************************************************************");
System.out.println(" 当前账户取款操作" + num + "元成功。");
System.out.println(" 当前账户余额为:" + acc[pass].getAccountbalance() + "元");
}
break;
}
case 8: {
System.out.println("您执行了退卡操作,即将返回初始界面!");
first();
break;
}
case 9: {
System.out.println("您执行了返回操作,即将返回主界面!");
zhujiemian(pass);
break;
}
default: {
System.out.println("您没有输入正确的指令,即将重新返回取款界面!");
qukuan(pass);
}
break;
}
}
// 修改密码界面
public static void xiugaimima(int pass) {
System.out.println("请输入您想设置的新密码:");
@SuppressWarnings("resource")
Scanner scan = new Scanner(System.in);
String xinmima = scan.next();
System.out.println("新密码修改成功,新密码为:" + xinmima);
acc[pass].setAccountpassword(xinmima);
fanhui(pass);
}
// 转账汇款界面
public static void zhuanzhanghuikuan(int pass) {
@SuppressWarnings("resource")
Scanner scan = new Scanner(System.in);
System.out.println("您要转入的账号是?");
String zhanghao1 = scan.next();
int shuru = 0;
int flag = 0;
for (int i = 0; i < 5; i++) {
if (zhanghao1.equals(acc[i].getAccountID())) {
shuru = i;
break;
} else {
flag++;
}
}
if (flag == 5) {
System.out.println("您要转入的账号并不是本银行账号,即将返回主界面");
zhujiemian(pass);
}
System.out.println("您想转移的金额是?");
int zhuanzhang = scan.nextInt();
if (acc[pass].getAccountbalance() - zhuanzhang <= 0) {
System.out.println("您的余额不足,转账失败!");
} else {
acc[pass].setAccountbalance(acc[pass].getAccountbalance() - zhuanzhang);
acc[pass].setAmount(acc[pass].getAmount() + zhuanzhang);
acc[shuru].setAccountbalance(acc[shuru].getAccountbalance() + zhuanzhang);
acc[shuru].setAmount(acc[shuru].getAmount() + zhuanzhang);
System.out.println("转账" + zhuanzhang + "元操作成功!");
System.out.println(zhanghao1 + "的余额为:" + acc[shuru].getAccountbalance());
System.out.println("您的账号余额为:" + acc[pass].getAccountbalance());
}
}
// 查询余额界面
public static void chaxunyue(int pass) {
System.out.println("您的账户余额为:" + acc[pass].getAccountbalance());
fanhui(pass);
}
// 主函数
public static void main(String[] args) {
AccountManager.first();
}
}
开学第一次考试,看到题的时候有点懵,这题好难,一下就乱了。
刚开始的Account类还好,但是后面就乱了,尤其是设计文件的输入输出流,考试的时候还是乱的,即使老师讲了怎么写,也可以百度但是看不懂上面讲了点什么。现在一看,就可以用Scanner进行输入输出。
考试的时候还一直会出现红字,一直报错,显示空指针,还是对Java的运用不熟练,一直在纠结文件,一到文件就晕然而试了好半天,文件也不会,后来试了数组,又报出来了空指针,真的是很乱,很慌,考试就一直停留在了这儿,对Java的认识和了解说明还是不熟,就又反复纠结文件做不到取舍,然后就后面一直继续不了了。大小写的问题应该注意,不能小问题就不把他当问题,往往不起眼的小问题会导致失败,课下也应该多敲敲代码,在考核中,我甚至都不能让自己的Java程序跑起来,只能让学长读,这样的水平对与老师的要求还是相差太远
在编程的思路上就一直没顺清题目的要求,仅仅局限在了一点,没有大题的框架,自己想的还非常复杂,还有没有清晰的思路,不知道下一步咋做。我发现自己对于一个程序的思路也不明确,编程中都是做一步看一步,没有在编程前先理清思路的习惯,也没有这个实力,这样就使得效率不高,程序混乱,让自己再返回去看的时候有些费劲,以后还应该多锻炼这方面的技能,养成这样一个良好的习惯,既然自己本身实力就不好,如果再不养成点好习惯,找点好方法,那么编程肯定难以有所造诣。
时间分配也不够合理,到最后后面的都没做出来,甚至还没看。还是自己的熟练度太低了。
程序的逻辑思路不清楚,再加上不熟练,尤其是文件的操作,以后得多加练习。
后来看了网上的代码,自己的水平确实还差好多啊,还有许多方法都还没有想出来, 应该广泛的吸取网上代码的有点以及思想,让自己的代码更加完善。