目次
1.シンプルな現金自動預け払い機のトピック要件:
- ユーザークラスUser(カード番号、名前、パスワード、残高などの属性を含む)を作成し、ユーザーがカードを開いたときに入力した名前とパスワード(カード番号は自動的に割り当てられ、初期金額は0に設定されます) )。
- ArrayListまたはLinkedListを使用して、次の
ようなすべての登録ユーザーを格納します。ArrayList<User> userList = new ArrayList<User>();
- 機能の実現
(1)入金
(2)出金(残高が足りない場合はプロンプトを表示)
(3)残高を確認する(現在のカード番号の残高のみを確認する) - 技術的要件。例外を使用して、ユーザーの誤った入力(つまり、プログラム保護のフォールトトレランス)を処理します。
2.思考プロセス
先生は、プログラムを書くとき、最も重要なことは考えることだと言いました。考えた後、すべてがより具体的になります。これは必要なプロセスです。物事を考えるとき、物事を書き留めることで、物事間の論理的な関係をよりよく考えることができます。
したがって、いくつかの単純な問題について考えるときは、それらが実際にどのように達成されるかについても考える必要があります。これの各ステップはどのようにして起こりますか?これは非常に重要です。
3、コードの実装
IUserManagerインターフェイス:いくつかの抽象メソッド/ユーザーコレクションを作成するために使用されます
public interface IUserManager {
ArrayList<UserBean> ulist = new ArrayList<UserBean>();
}
UserBeanクラス:ユーザー標準クラス
ID、名前、パスワード、お金
toString:クラス
userBean構築メソッドの現在の状態を表示するメソッドを提供します:ユーザー名と今節約するお金を提供する必要があります
package com.hzyc.hw1209;
public class UserBean {
private int ID;
private String Name;
private String Password;
private int money;
public UserBean(int ID, String Name, int money) {
this.setID(ID);
this.setName(Name);
this.setMoney(money);
}
public String toString() {
return "卡号为[" + this.ID + "]的用户\n" +
this.Name + "的账户余额为:¥" + this.money;
}
public int getID() {
return ID;
}
public void setID(int ID) {
this.ID = ID;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getPassword() {
return Password;
}
public void setPassword(String password) {
Password = password;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
}
UserManager:ユーザー管理クラス
NewUserカード開封方法(newCountMoneyを含む:カード開封手数料を差し引く方法を提供)
saveMoney:入金方法を
提供getMoney:出金方法を提供します。出金金額が超過した場合、出金できません。
checkMoney:[当座預金]を表示するためのお金の方法を
提供しますfindUser:ログイン方法を提供し、パスワードに従ってulistからアカウントを検索します
。checkpsw:パスワードが正しいかどうかをチェックしてパスワードの正しさを確認する方法を提供します。
package com.hzyc.hw1209;
import com.sun.xml.internal.bind.v2.model.core.ID;
import java.util.Scanner;
public class UserManager implements IUserManager {
Scanner sc = new Scanner(System.in);
int flag = 2000;
public int findUser(int ID) {
try {
if (ID > flag) {
System.out.println("输入有误,请重新输入用户ID");
findUser(sc.nextInt());
}
//核验密码成功,则返回正确的index
if (checkpsw(ID)) {
int tub = 0;
for (int i = 0; i < ulist.size(); i++) {
if (ulist.get(i).getID() == ID) {
tub = i;
}
}
return tub;
}
} catch (Exception e) {
}
return -1;
}
public boolean checkpsw(int ID) {
System.out.println("请输入密码以核验身份");
String str = sc.next();
int index = 0;
//遍历所有用户,找到对应的ID
for (int i = 0; i < ulist.size(); i++) {
if (ulist.get(i).getID() == ID) {
index = i;
}
}
return ulist.get(index).getPassword().equals(str);
}
public void newUser() {
System.out.println("现在正在为您开卡,请输入姓名和储蓄:【姓名-金钱-密码】");
try {
String str = sc.next();
String[] newStr = str.split("-");
flag += 4;
UserBean user = new UserBean(flag, newStr[0], Integer.parseInt(newStr[1]));
//为用户设置密码
user.setPassword(newStr[2]);
//开户
newCountMoney(user);
ulist.add(user);
System.out.println("开卡成功,现在" + user);
} catch (Exception e) {
System.out.println("输入有误,请重新输入");
}
}
public void newCountMoney(UserBean u) {
u.setMoney(u.getMoney() - 5);
System.out.println("扣除开卡费:¥5,成功!");
}
public void saveMoney(int index) {
System.out.println("请输入您想要存储多少钱");
try {
ulist.get(index).setMoney(ulist.get(index).getMoney() + sc.nextInt());
System.out.println("存钱成功!");
System.out.println(ulist.get(index));
System.out.println("-----------------------------");
} catch (Exception e) {
System.out.println("您的存钱有误,请存入整数的钱");
}
}
public void getMoney(int index) {
System.out.println("请输入您想要取出多少钱");
int moneybe = ulist.get(index).getMoney() - sc.nextInt();
if (moneybe < 0) {
System.out.println("对不起,您的存款不够");
} else {
ulist.get(index).setMoney(moneybe);
}
}
public void checkMoney(int index) {
try {
System.out.println("您现在的账户状态为:");
System.out.println(ulist.get(index));
} catch (Exception e) {
System.out.println("密码错误!!正在返回系统主页面");
}
}
}
ワークフロープロセスクラス
外側のメニューの選択肢としてスターを
付ける:1。アカウント開設プロセス; 2。ログインプロセス; loginFlowは[パスワード確認]のプロセスです。ログイン
==アカウント情報が
正しいことを確認するには、次のステップのためにアカウントを入力できます、パスワードが間違っている場合は戻りますメインメニュー(スターメソッド)
loggedFlowは正常にログインしてこのメニューに入ります。
ログイン後、ユーザーのメニュー:
[プロセス]:1。入金; 2。引き出し; 3。表示; 4。終了;
import java.util.Scanner;
public class Workflow {
Scanner sc = new Scanner(System.in);
UserManager mgr = new UserManager();
int index = 0;
void star() {
System.out.println("\n\n*************欢迎使用本系统****************\n" +
"请开始您的操作:【1】开户【2】登录");
int choose1 = sc.nextInt();
switch (choose1) {
case 1:
mgr.newUser();
star();
break;
case 2:
//核对密码,密码错误则返回主菜单
loginFlow();
break;
}
loggedFlow();
}
void loginFlow() {
System.out.println("请输入您的卡号:");
Scanner sc = new Scanner(System.in);
index = mgr.findUser(sc.nextInt());
System.out.println("您的账户状态为:");
mgr.checkMoney(index);
if (index == -1){
star();
}
}
void loggedFlow() {
System.out.println("请进行您的操作:");
outhere:
while (true) {
System.out.println("\n\n*************欢迎多存钱****************\n" +
"请选择操作:【1】存款【2】取款【3】查询余额【4】退出系统");
try {
int choose = sc.nextInt();
switch (choose) {
case 1:
mgr.saveMoney(index);
break;
case 2:
mgr.getMoney(index);
break;
case 3:
mgr.checkMoney(index);
break;
case 4:
break outhere;
}
} catch (Exception e) {
System.out.println("您的输入有误,请重新输入。");
}
}
star();
}
}
平凡なテスト
public class tst {
public static void main(String[] args) {
Workflow w =new Workflow();
w.star();
}
}
四、お試しください!
5.要約:
1.手順
IUserManager
userManager
newUser开卡方法
newCountMoney\n提供扣除开卡费方法
saveMoney\n提供存钱方法
getMoney\n提供取钱方法,如果取钱数目超过,则不可以被取出。
checkMoney\n提供查看【当前账户】的钱财方法
findUser\n提供登录方法,根据自己的密码从ulist里面找到自己的账户
checkpsw\n提供一个查看密码是否正确的方法,用于核验密码的正确性。
userBean
ID、Name、password、money
标准用户类
toString\n提供一个查看当前类状态的方法
userBean构造方法:\n需要提供用户名称和现在要存的钱
Workflow
star作为外层菜单\n选择:\n1.开户流程;\n2.登录流程;
loginFlow是核验密码的流程\n需要登录==核对自己的账户信息\n正确则可以进入自己的账户进行下一步操作,密码错误则返回主菜单(star方法)
loggedFlow成功登录进入该菜单,登录后用户的菜单\n【流程】:\n1.存款;\n2.取款;\n3.查看;\n4.退出;
2.trycatchの理解
このプログラムでは、多くのtry / catchステートメントを追加し、trycatchの理解を深めました。try
-catchステートメントは、試行するステートメントブロックをマークし、例外が発生したときにスローされる応答を指定します。
trycatchの役割を個人的に考えてください。
(1)通常の使用でプログラムが突然終了するのを防ぎ、プログラムの堅牢性を強化できます。
(2)エラーを修正することができます。
淘宝網を使用している場合、コンピュータを使用しているときに、プログラムは「パスワードが間違って入力されました。再入力してください」というウィンドウをポップアップしませんが、一度にクラッシュするというシナリオを想定できます。ページ全体がなくなったので、trycatchの重要性を想像することができます。
3.ヒント:
Throwableクラスは、Error andExceptionの親クラスです。