题目一:
题目要求:
我们完成开户功能的实现。需求如下:

为了系统的代码结构更加清晰,在ATM类中,写一个开户的方法。
步骤如下:
-
1、创建一个账户对象,用于封装用户的开户信息
-
2、需要用户输入自己的开户信息,赋值给账户对象
-
输入账户名,设置给账户对象
-
输入性别,如果性别是'男'或者'女',将性别设置给账户对象;否则重新录入性别直到录入正确为止。
-
输入账户、并且输入两次密码,只有两次密码相同,才将账户和密码设置给账户对象。
-
输入提现限额,并且设置给账户对象
-
-
3、输出开户成功,的提示语句。
解题思路分析:
1.先创建Account实体类对象acc,用于存储所有的开户信息
2.用户名输入直接读取字符串并赋值;性别校验用while(true)循环输入,直到输入的性别正确为止,通过截取第一个字符,判断是否为“男”或者“女”,不正确则提示重新输入;密码校验用while(true)循环,要求用户输入两次密码,用equery()方法比较两次输入是否一致,不一致则提示重新输入。
3.提现额度直接读取double类型数值并赋值,卡号8位生成单独抽取createCardId()方法实现,方法内部通过Random生成8位随机数字,生成后通过setCardId()赋值给账户对象。
4.将完整的Account对象添加到accounts集合,最后通过getter方法读取用户名和卡号,打印成功提示。
代码过程:
//编写开户功能
public void createAccount() {
System.out.println("======系统开户操作======");
//创建账户对象
Account acc = new Account();
//手动用户输入对应的账户名 性别 密码 提现额度
//设置账户用户名
System.out.println("请您输入您的账号用户名:");
String name = sc.next();
acc.setUserName(name);
//设置性别
while (true) {
System.out.println("请您输入您的性别:");
char sex = this.sc.next().substring(0,1).charAt(0);
//判断
if (sex == '男' || sex == '女') {
acc.setSex(sex);
break;
} else {
System.out.println("您输入的性别有误,请重新输入…");
}
}
//设置密码
while (true) {
System.out.println("请您输入您的密码:");
String passwork = sc.next();
System.out.println("请再次输入您的密码:");
String okpasswork = sc.next();
//判断
if (passwork.equals(okpasswork)) {
//设置密码
acc.setPassword(okpasswork);
break;
} else {
System.out.println("密码不一致,请重新输入…");
}
}
//设置提现额度
System.out.println("请您输入您的提现额度:");
double limit = sc.nextDouble();
acc.setLimit(limit);
//重点(生成一个8位数的卡号) 单写一个方法生成
String cardId = this.createCardId();
acc.setCardId(cardId);
//将每一个账号信息存储到集合中
accounts.add(acc);
System.out.println("恭喜您,"+ acc.getUserName() + ",您开户成功,您的卡号是:"+acc.getCardId());
}
题目二:
题目要求:
刚才在完成开户功能的时候,并没有生成卡号,所以我们接着把生成卡号的功能完成。
解题思路分析:
1.生成8位随机数字卡号,初始化空字符串cardId用于拼接数字,创建Random对象生成随机数,通过for循环执行8次,每次生成0-9之间的随机整数,将随机数拼接到cardId中,最终得到8位数字组成的字符串。
2.校验卡号调用getAccountCardId(cardId)方法,检查新生成的卡号是否已存在于系统中,通过方法遍历存储所有账户的accounts集合,一个个取出集合中的Account对象,若找到匹配号卡则返回Account对象,若未找到匹配返回null。
3.若该方法返回null,则直接返回cardId并跳出循环,若返回null,则while循环重新执行,再次生成新的8位卡号,直到生成唯一卡号。
代码过程:
/**
* 生成8位随机数
*/
public String createCardId() {
while (true){
//定义一个变量用来接收生成数字的组合
String cardId = "";
Random rd = new Random();
//生成8个数
for (int i = 0; i < 8; i++) {
int date = rd.nextInt(10);//0-9以内
cardId += date;
}
//生成的当前卡号 与其他用户有没有一样的 随机生成有可能存在一样的卡号
//将我们生成的卡号 与 所有账户的每一个卡号比对 ==> 如果存在 重新生成,如果不存在直接使用
Account account = this.getAccountCardId(cardId); //对象/null
if (account == null){
//直接使用当前生成的卡号了
return cardId;
}
}
}
/**
* 根据生成的卡号与所有账户中的每一个卡号进行比对
* @param cardId 随机生成的卡号
*/
public Account getAccountCardId(String cardId){
//获取集合中的所有账户 ==> 遍历
for (int i = 0; i < accounts.size(); i++) {
Account account = accounts.get(i);
//判断
if (account.getCardId().equals(cardId)){
return account;
}
}
return null;
}



