自己写了一部分
有几个问题
1.验证登录账号的密码是否一致中没有管理员的密码
输入管理员密码 123456 依旧通过
2登录成功之后的小循环if语句一直不成功
不管写什么都会执行else
package ATMDemo;
import java.util.ArrayList;
//账户类
public class Account {
public static ArrayList<Account> normalUserList = new ArrayList<Account>();
private String name="";
private int role =0;
private String password="";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getRole() {
return role;
}
public void setRole(int role) {
this.role = role;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Account(String name, int role, String password) {
super();
this.name = name;
this.role = role;
this.password = password;
}
public Account() {
super();
}
}
package ATMDemo;
import java.io.*;
import java.util.Scanner;
//用户登陆界面
public class ATMtest {
public static void showMoney() {
}
public static void tranMoney(){
}
public static void quit() {
System.out.println("退出成功");
}
public static void query(){
System.out.println("查询成功");
}
public static void update(){
System.out.println("修改成功");
}
public static void main(String[] args) {
try {
//文件读取,且把文件中的数据转换成对象,在集合中保村
//读文件
File file = new File("src\\account.txt");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
String strAccount = bufferedReader.readLine();//读取文件中的一行(按照每行读取文件)
//管理员在文件的第一行(管理员放在链表的第一个)
Manager manager = new Manager();
String[] temp = strAccount.split(",");//把上面读的一个记录分割成字符串数组
manager.setManageAccount(temp[1]);//管理账户
manager.setName(temp[0]);//姓名
manager.setPassword(temp[3]);//密码
// manager.setRole(Integer.parseInt(temp[4]));
manager.setRole(1);
//角色
Account.normalUserList.add(manager);//把第一个用户(管理员)放到集合链表中
//继续读文件,普通用户在其他行
strAccount = bufferedReader.readLine();
while (strAccount != null) {
temp = strAccount.split(",");//把上面读到的数据分割成字符串数组
//把字符串数组中对应的每个字符串没转换成Account类中的对象,然后进行--一一绑定数据
NormalUser normalUser = new NormalUser();
normalUser.setName(temp[0]);//名字
normalUser.setId_card(temp[1]);//账户
normalUser.setMoney(Integer.parseInt(temp[2]));//金额
normalUser.setPassword(temp[3]);//密码
// normalUser.setRole(Integer.parseInt(temp[4]));
normalUser.setRole(0);
//0表示普通用户,1表示管理员
Account.normalUserList.add(normalUser);//把转换好的对象放到集合中(文件会一直读取,知道没有的数据转换成对象)
strAccount = bufferedReader.readLine();//读新的一行数据
}
//登陆及其他操作
while (true) {//登录页面的大循环
//登录页面及操作
System.out.println("======用户登录======");
System.out.println("======1,输入用户账号======");
Scanner scanner = new Scanner(System.in);
String strAccountTemp = scanner.next();
System.out.println("======2,输入用户密码======");
String strPasswordTemp = scanner.next();
System.out.println("======3,输入用户角色(1:管理员,0:普通用户)======");
while (true) {
try {
int role = Integer.parseInt(scanner.next());
if (role == 1 || role == 0) {
break; //输出的如果不是数字0或者1就会一直提醒
} else {
System.out.println("请再次输入角色,确定输入的是数字,且是0或1");
}
} catch (Exception e) {
System.out.println("请再次输入角色,确定输入的是数字,且是0或1");
}
}
//根据用户登录的角色验证登录的账号和密码是否一致
boolean boolResult = false;
for (Account account: Account.normalUserList){
if (account.getPassword().equals(strPasswordTemp)) {
boolResult = true;
} else {
boolResult = false;
}
}
//登录验证
if (boolResult) {
while (true) {//登录成功
//登录成功之后的小循环
for (int i = 1; i < Account.normalUserList.size(); i++) {//循环集合链表
NormalUser normalUserTmp = (NormalUser) Account.normalUserList.get(i);//向下转型,得到第i个值
if ("yanda".equals(normalUserTmp.getName()))
{
System.out.println("==========管理员系统==========");
System.out.println("1,查询用户信息");
System.out.println("2,修改用户信息");
int command1 = scanner.nextInt();
switch (command1){
case 1:
query();
break;
case 2:
update();
break;
}
}else if (normalUserTmp.id_card.equals(0)){
System.out.println("===========用户界面==========");
System.out.println("1,取钱");
System.out.println("2,转账");
System.out.println("3,退出");
int command = scanner.nextInt();
switch (command){
case 1:
showMoney();
break;
case 2:
tranMoney();
break;
case 3:
quit();
break;
}
}
}
//登陆成功后,操作(普通用户,系统管理员的操作)
//zhangsan3取钱,首先找到张三
//对对象集合accounts中的某一个对象进行操作,这个里面可以转账,取钱,登录等操作
// if ("zhangsan3".equals(normalUserTmp.getName())) {
// normalUserTmp.setMoney(normalUserTmp.getMoney() - 1000);
// }
}
} else {//登录失败
System.out.println("登录不成功");
System.out.println("按1继续登录,按2结束程序");
int iChoice = scanner.nextInt();
//按2结束程序,需要对程序中的所有操作数据进行保存到文件中
if (iChoice == 2) {
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(file, false)));
//写文档,就是把集合中所有的对象转换成文档要求的字符串,一一保存起来,以便下次读取
//度管理员(第一个位置)
String str = "";
Manager managerTmp = (Manager) Account.normalUserList.get(0);
//zhangsan2,201032124,1000460,123456,0
str = managerTmp.getName() + "," + managerTmp.getManageAccount() +
",," + managerTmp.getPassword() + "," + managerTmp.getRole();
bufferedWriter.write(str);//把str写入文档
bufferedWriter.newLine();//让文档换行
//度普通用户(非第一个的其他位置)
for (int i = 1; i < Account.normalUserList.size(); i++) {
NormalUser normalUserTmp = (NormalUser) Account.normalUserList.get(i);
str = normalUserTmp.getName() + "," + normalUserTmp.getId_card() +
",," + normalUserTmp.getMoney() + "," + normalUserTmp.getPassword()
+ "," + normalUserTmp.getRole();
bufferedWriter.write(str);//把str写入文档
bufferedWriter.close();//让文档换行
}
bufferedWriter.flush();//文档关闭操作
bufferedWriter.close();
System.out.println("程序结束");
break;
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
}
package ATMDemo;
//账户类
public class NormalUser extends Account{
private double money=0;
public String id_card="";
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public String getId_card() {
return id_card;
}
public void setId_card(String id_card) {
this.id_card = id_card;
}
}
package ATMDemo;
//管理员
public class Manager extends Account {
private String manageAccount="";
public static final String defaultedPassword="000000";
public String getManageAccount(){
return manageAccount;
}
public void setManageAccount(String manageAccount){
this.manageAccount=manageAccount;
}
}
yanda,000000000,,111111,1
zhangsan,201032123,100000,123456,0
lisi,201032124,10000460,123456,0
wangwu,201032125,1999111,123456,0
maliu,201032126,10000001,123456,0
zhaomeng,201032127,10000054,123456,0
wangqi,201032127,1211111,123456,0
解决以上两个问题即可
简单回答如下:
1.验证登录账号的密码是否一致中没有管理员的密码
输入管理员密码 123456 依旧通过
---->
遍历账户ArrayList时没有从0开始,0位置包含的是管理员的账号,以及一些其他小问题。
2登录成功之后的小循环if语句一直不成功
不管写什么都会执行else
----> 应该是含有break的那个if语句位置不对
具体看下修改代码处的注释,修改如下:
package ATMDemo;
import java.io.*;
import java.util.Scanner;
//用户登陆界面
public class ATMtest {
public static void showMoney() {
}
public static void tranMoney(){
}
public static void quit() {
System.out.println("退出成功");
}
public static void query(){
System.out.println("查询成功");
}
public static void update(){
System.out.println("修改成功");
}
public static void main(String[] args) {
try {
//文件读取,且把文件中的数据转换成对象,在集合中保村
//读文件
File file = new File("src\\account.txt");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
String strAccount = bufferedReader.readLine();//读取文件中的一行(按照每行读取文件)
//管理员在文件的第一行(管理员放在链表的第一个)
Manager manager = new Manager();
String[] temp = strAccount.split(",");//把上面读的一个记录分割成字符串数组
manager.setManageAccount(temp[1]);//管理账户
manager.setName(temp[0]);//姓名
manager.setPassword(temp[3]);//密码
// manager.setRole(Integer.parseInt(temp[4]));
manager.setRole(1);
//角色
Account.normalUserList.add(manager);//把第一个用户(管理员)放到集合链表中
//继续读文件,普通用户在其他行
strAccount = bufferedReader.readLine();
while (strAccount != null) {
temp = strAccount.split(",");//把上面读到的数据分割成字符串数组
//把字符串数组中对应的每个字符串没转换成Account类中的对象,然后进行--一一绑定数据
NormalUser normalUser = new NormalUser();
normalUser.setName(temp[0]);//名字
normalUser.setId_card(temp[1]);//账户
normalUser.setMoney(Integer.parseInt(temp[2]));//金额
normalUser.setPassword(temp[3]);//密码
// normalUser.setRole(Integer.parseInt(temp[4]));
normalUser.setRole(0);
//0表示普通用户,1表示管理员
Account.normalUserList.add(normalUser);//把转换好的对象放到集合中(文件会一直读取,知道没有的数据转换成对象)
strAccount = bufferedReader.readLine();//读新的一行数据
}
//登陆及其他操作
while (true) {//登录页面的大循环
//登录页面及操作
System.out.println("======用户登录======");
System.out.println("======1,输入用户账号======");
Scanner scanner = new Scanner(System.in);
String strAccountTemp = scanner.next();
System.out.println("======2,输入用户密码======");
String strPasswordTemp = scanner.next();
System.out.println("======3,输入用户角色(1:管理员,0:普通用户)======");
while (true) {
int role =-1;
try {
role = Integer.parseInt(scanner.next());
} catch (Exception e) {
//e.printStackTrace();
System.out.println("请再次输入角色,确定输入的是数字,且是0或1");
}
System.out.println("role="+role);
if (role == 1 || role == 0) { //好像必须把if从try-catch中提出来,才能break跳出while循环
break; //输出的如果不是数字0或者1就会一直提醒
} else {
System.out.println("请再次输入角色,确定输入的是数字,且是0或1");
}
}
//根据用户登录的角色验证登录的账号和密码是否一致
boolean boolResult = false;
for (Account account: Account.normalUserList){
if (account.getPassword().equals(strPasswordTemp)) {
System.out.println("account.getPassword()="+account.getPassword());
boolResult = true;
break;
} else {
boolResult = false;
}
}
//登录验证
if (boolResult) {
while (true) {//登录成功
//登录成功之后的小循环 ,遍历账户ArrayList必须从0开始,因为管理员放在第一个位置
for (int i = 0; i < Account.normalUserList.size(); i++) {//循环集合链表
//这里用父类Account来作normalUserTmp的类型,因为normalUserList里存放继承自父类的Manager类和NormalUser类
//用父类才能通用,到了具体需要使用的时候,如else-if时再转换为具体子类
Account normalUserTmp = (Account) Account.normalUserList.get(i);//向下转型,得到第i个值
if ("yanda".equals(normalUserTmp.getName()))
{
System.out.println("==========管理员系统==========");
System.out.println("1,查询用户信息");
System.out.println("2,修改用户信息");
int command1 = scanner.nextInt();
switch (command1){
case 1:
query();
break;
case 2:
update();
break;
}
}else if (((NormalUser)normalUserTmp).id_card.equals(0)){
System.out.println("===========用户界面==========");
System.out.println("1,取钱");
System.out.println("2,转账");
System.out.println("3,退出");
int command = scanner.nextInt();
switch (command){
case 1:
showMoney();
break;
case 2:
tranMoney();
break;
case 3:
quit();
break;
}
}
}
//登陆成功后,操作(普通用户,系统管理员的操作)
//zhangsan3取钱,首先找到张三
//对对象集合accounts中的某一个对象进行操作,这个里面可以转账,取钱,登录等操作
// if ("zhangsan3".equals(normalUserTmp.getName())) {
// normalUserTmp.setMoney(normalUserTmp.getMoney() - 1000);
// }
}
} else {//登录失败
System.out.println("登录不成功");
System.out.println("按1继续登录,按2结束程序");
int iChoice = scanner.nextInt();
//按2结束程序,需要对程序中的所有操作数据进行保存到文件中
if (iChoice == 2) {
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(file, false)));
//写文档,就是把集合中所有的对象转换成文档要求的字符串,一一保存起来,以便下次读取
//度管理员(第一个位置)
String str = "";
Manager managerTmp = (Manager) Account.normalUserList.get(0);
//zhangsan2,201032124,1000460,123456,0
str = managerTmp.getName() + "," + managerTmp.getManageAccount() +
",," + managerTmp.getPassword() + "," + managerTmp.getRole();
bufferedWriter.write(str);//把str写入文档
bufferedWriter.newLine();//让文档换行
//度普通用户(非第一个的其他位置)
for (int i = 1; i < Account.normalUserList.size(); i++) {
NormalUser normalUserTmp = (NormalUser) Account.normalUserList.get(i);
str = normalUserTmp.getName() + "," + normalUserTmp.getId_card() +
",," + normalUserTmp.getMoney() + "," + normalUserTmp.getPassword()
+ "," + normalUserTmp.getRole();
bufferedWriter.write(str);//把str写入文档
bufferedWriter.close();//让文档换行
}
bufferedWriter.flush();//文档关闭操作
bufferedWriter.close();
System.out.println("程序结束");
break;
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
}