第一次测验感想

题目要求:

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程序跑起来,只能让学长读,这样的水平对与老师的要求还是相差太远

在编程的思路上就一直没顺清题目的要求,仅仅局限在了一点,没有大题的框架,自己想的还非常复杂,还有没有清晰的思路,不知道下一步咋做。我发现自己对于一个程序的思路也不明确,编程中都是做一步看一步,没有在编程前先理清思路的习惯,也没有这个实力,这样就使得效率不高,程序混乱,让自己再返回去看的时候有些费劲,以后还应该多锻炼这方面的技能,养成这样一个良好的习惯,既然自己本身实力就不好,如果再不养成点好习惯,找点好方法,那么编程肯定难以有所造诣。

时间分配也不够合理,到最后后面的都没做出来,甚至还没看。还是自己的熟练度太低了。

程序的逻辑思路不清楚,再加上不熟练,尤其是文件的操作,以后得多加练习。

后来看了网上的代码,自己的水平确实还差好多啊,还有许多方法都还没有想出来, 应该广泛的吸取网上代码的有点以及思想,让自己的代码更加完善。

posted @ 2020-09-22 23:48  yasai  阅读(340)  评论(0编辑  收藏  举报