V9-V10

Created Diff never expires
212 removals
Lines
Total
Removed
Words
Total
Removed
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
493 lines
327 additions
Lines
Total
Added
Words
Total
Added
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
602 lines
import java.awt.geom.NoninvertibleTransformException;
import java.io.*;
import java.util.*;
import java.util.*;


public class V9 {
public class V10 {


// 定义银行账户类
static class BankAccount {
static class BankAccount {
private String username;
private String username;
private String childPassword;
private String childPassword;
private String parentPassword;
private String parentPassword;
private String phoneNumber;
private String phoneNumber;
private double currentBalance; // 活期账户余额
private double currentBalance;
private double savingsBalance; // 储蓄账户余额
private double savingsBalance;
private Map<String, Double> tasks;
private Map<String, Double> tasks;
private List<String> transactions;
private List<String> transactions;
private long lastInterestCalculation; // 上次利息结算时间
private long lastInterestCalculation;
private int weeksElapsed;
private int weeksElapsed;


private static Map<String, BankAccount> accounts = new HashMap<>();
private static final String ACCOUNTS_FILE = "C:\\Users\\Peter\\IdeaProjects\\VirtualBankApplication\\src\\accounts.csv";
private static Map<String, Double> leaderboard = new HashMap<>();
private static final String LEADERBOARD_FILE = "C:\\Users\\Peter\\IdeaProjects\\VirtualBankApplication\\src\\leaderboard.csv";
private static Map<Integer, String> rewards = new HashMap<>();
private static final String REWARDS_FILE = "C:\\Users\\Peter\\IdeaProjects\\VirtualBankApplication\\src\\rewards.csv";
private static Map<Integer, Integer> prices = new HashMap<>();
private static final String PRICES_FILE = "C:\\Users\\Peter\\IdeaProjects\\VirtualBankApplication\\src\\prices.csv";

static {
rewards.put(1, "iPhone 14 Pro Max 冷锋蓝");
rewards.put(2, "PlayStation 5");
rewards.put(3, "Apple Watch Series 7");
rewards.put(4, "Nintendo Switch");
rewards.put(5, "Bose Noise Cancelling Headphones 700");
rewards.put(6, "Sony WH-1000XM4 Wireless Headphones");
rewards.put(7, "Kindle Paperwhite");
rewards.put(8, "Fitbit Charge 5");
rewards.put(9, "LEGO Star Wars Millennium Falcon");
rewards.put(10, "Amazon Gift Card ($50)");
}

static {
prices.put(1, 9000);
prices.put(2, 12000);
prices.put(3, 5000);
prices.put(4, 4000);
prices.put(5, 4000);
prices.put(6, 2000);
prices.put(7, 900);
prices.put(8, 500);
prices.put(9, 250);
prices.put(10, 50);
}


public BankAccount(String username, String childPassword, String parentPassword, String phoneNumber) {
public BankAccount(String username, String childPassword, String parentPassword, String phoneNumber) {
this.username = username;
this.username = username;
this.childPassword = childPassword;
this.childPassword = childPassword;
this.parentPassword = parentPassword;
this.parentPassword = parentPassword;
this.phoneNumber = phoneNumber;
this.phoneNumber = phoneNumber;
this.currentBalance = 0.0;
this.currentBalance = 0.0;
this.savingsBalance = 0.0;
this.savingsBalance = 0.0;
this.tasks = new HashMap<>();
this.tasks = new HashMap<>();
this.transactions = new ArrayList<>();
this.transactions = new ArrayList<>();
this.lastInterestCalculation = System.currentTimeMillis(); // 初始化上次利息结算时间为当前时间
this.lastInterestCalculation = System.currentTimeMillis();
this.weeksElapsed = 0;
this.weeksElapsed = 0;
accounts.put(username, this);
saveAccount(this);
accounts.put(phoneNumber, this);
}

private static void saveAccount(BankAccount account) {
// 检查是否已存在相同账户信息
if (accountExists(account)) {
// 如果账户已存在,则更新账户信息
updateAccount(account);
System.out.println("账户信息已更新!");
return;
}

try (PrintWriter writer = new PrintWriter(new FileWriter(ACCOUNTS_FILE, true))) {
// 写入新的账户信息
writer.println(account.username + "," + account.childPassword + "," + account.parentPassword + "," + account.phoneNumber + "," + account.currentBalance + "," + account.savingsBalance);
System.out.println("账户信息保存成功!");
} catch (IOException e) {
e.printStackTrace();
}
}

public void deleteAccount() {
try {
// 从账户文件中删除账户信息
removeAccountFromFile(ACCOUNTS_FILE, this.username, this.phoneNumber);
// 从排行榜文件中删除账户信息
removeAccountFromFile(LEADERBOARD_FILE, this.username, this.phoneNumber);
// 更新排行榜
updateLeaderboard();
System.out.println("账户删除成功!");
} catch (IOException e) {
e.printStackTrace();
System.out.println("删除账户时出现错误!");
}
}

private void removeAccountFromFile(String fileName, String username, String phoneNumber) throws IOException {
File file = new File(fileName);
if (file.exists()) {
List<String> updatedRecords = new ArrayList<>();
try (Scanner scanner = new Scanner(file)) {
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if (!(line.startsWith(username) || line.endsWith(phoneNumber))) {
updatedRecords.add(line);
}
}
}
try (PrintWriter writer = new PrintWriter(new FileWriter(file))) {
for (String record : updatedRecords) {
writer.println(record);
}
}
}
}

private static void updateAccount(BankAccount account) {
List<String> updatedAccounts = new ArrayList<>();
// 读取账户文件中的所有行
try (Scanner scanner = new Scanner(new File(ACCOUNTS_FILE))) {
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
// 如果该行包含当前账户的用户名,则替换为新的账户信息
if (line.contains(account.username)) {
line = account.username + "," + account.childPassword + "," + account.parentPassword + "," + account.phoneNumber + "," + account.currentBalance + "," + account.savingsBalance;
}
updatedAccounts.add(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}

// 将更新后的账户信息写回文件
try (PrintWriter writer = new PrintWriter(new FileWriter(ACCOUNTS_FILE))) {
for (String line : updatedAccounts) {
writer.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}

private static boolean accountExists(BankAccount account) {
// 读取文件中的每一行,检查是否存在相同账户信息
try (Scanner scanner = new Scanner(new File(ACCOUNTS_FILE))) {
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String[] parts = line.split(",");
if (parts[0].equals(account.username) && parts[3].equals(account.phoneNumber)) {
return true; // 存在相同的账户信息
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return false; // 不存在相同的账户信息
}
}


public void deposit(double amount) {
public void deposit(double amount) {
currentBalance += amount;
currentBalance += amount;
System.out.println("成功存入 " + amount + " 元。当前活期余额:" + currentBalance + " 元");
System.out.println("成功存入 " + amount + " 元。当前活期余额:" + currentBalance + " 元");
addTransaction("存款:" + amount + " 元");
addTransaction("存款:" + amount + " 元");
saveAccount(this);
updateLeaderboard();
updateLeaderboard();
}
}


public void withdraw(double amount) {
public void withdraw(double amount) {
if (currentBalance >= amount) {
if (currentBalance >= amount) {
currentBalance -= amount;
currentBalance -= amount;
System.out.println("成功取出 " + amount + " 元。当前活期余额:" + currentBalance + " 元");
System.out.println("成功取出 " + amount + " 元。当前活期余额:" + currentBalance + " 元");
addTransaction("取款:" + amount + " 元");
addTransaction("取款:" + amount + " 元");
saveAccount(this);
updateLeaderboard();
updateLeaderboard();
} else {
} else {
System.out.println("活期余额不足,无法取款。当前活期余额:" + currentBalance + " 元");
System.out.println("活期余额不足,无法取款。当前活期余额:" + currentBalance + " 元");
}
}
}
}


public void transferToSavings(double amount) {
public void transferToSavings(double amount) {
if (currentBalance >= amount) {
if (currentBalance >= amount) {
currentBalance -= amount;
currentBalance -= amount;
savingsBalance += amount;
savingsBalance += amount;
System.out.println("成功转入储蓄账户:" + amount + " 元");
System.out.println("成功转入储蓄账户:" + amount + " 元");
addTransaction("转入储蓄账户:" + amount + " 元");
addTransaction("转入储蓄账户:" + amount + " 元");
saveAccount(this);
updateLeaderboard();
updateLeaderboard();
} else {
} else {
System.out.println("活期账户余额不足,无法转入储蓄账户。");
System.out.println("活期账户余额不足,无法转入储蓄账户。");
}
}
}
}


public void transferToCurrent(double amount) {
public void transferToCurrent(double amount) {
if (savingsBalance >= amount) {
if (savingsBalance >= amount) {
savingsBalance -= amount;
savingsBalance -= amount;
currentBalance += amount;
currentBalance += amount;
System.out.println("成功转入活期账户:" + amount + " 元");
System.out.println("成功转入活期账户:" + amount + " 元");
addTransaction("转入活期账户:" + amount + " 元");
addTransaction("转入活期账户:" + amount + " 元");
saveAccount(this);
updateLeaderboard();
updateLeaderboard();
} else {
} else {
System.out.println("储蓄账户余额不足,无法转入活期账户。");
System.out.println("储蓄账户余额不足,无法转入活期账户。");
}
}
}
}


public double getCurrentBalance() {
public double getCurrentBalance() {
return currentBalance;
return currentBalance;
}
}


public double getSavingsBalance() {
public double getSavingsBalance() {
return savingsBalance;
return savingsBalance;
}
}


public void addTask(String taskName, double reward) {
public void addTask(String taskName, double reward) {
tasks.put(taskName, reward);
tasks.put(taskName, reward);
System.out.println("任务添加成功!");
System.out.println("任务添加成功!");
}
}


public void viewTasks() {
public void viewTasks() {
if (tasks.isEmpty()) {
if (tasks.isEmpty()) {
System.out.println("暂无任务。");
System.out.println("暂无任务。");
} else {
} else {
System.out.println("任务列表:");
System.out.println("任务列表:");
tasks.forEach((taskName, reward) -> {
tasks.forEach((taskName, reward) -> {
System.out.println(taskName + " - 报酬:" + reward);
System.out.println(taskName + " - 报酬:" + reward);
});
});
}
}
}
}


public void completeTask(int taskNumber) {
public void completeTask(int taskNumber) {
if (tasks.containsKey(Integer.toString(taskNumber))) {
if (tasks.containsKey(Integer.toString(taskNumber))) {
tasks.remove(Integer.toString(taskNumber));
tasks.remove(Integer.toString(taskNumber));
System.out.println("任务已完成!");
System.out.println("任务已完成!");
} else {
} else {
System.out.println("任务不存在!");
System.out.println("任务不存在!");
}
}
}
}


public void showTransactions() {
public void showTransactions() {
System.out.println("交易流水:");
System.out.println("交易流水:");
if (transactions.isEmpty()) {
if (transactions.isEmpty()) {
System.out.println("暂无交易记录。");
System.out.println("暂无交易记录。");
} else {
} else {
transactions.forEach(System.out::println);
transactions.forEach(System.out::println);
}
}
}
}


private void addTransaction(String transaction) {
private void addTransaction(String transaction) {
transactions.add(transaction);
transactions.add(transaction);
}
}


private void updateLeaderboard() {
private void updateLeaderboard() {
leaderboard.put(username, currentBalance);
// 创建一个列表来存储所有账户及其余额信息
List<String> accountsAndBalances = new ArrayList<>();

// 遍历账户文件,计算每个账户的总余额并加入列表
try (Scanner scanner = new Scanner(new File(ACCOUNTS_FILE))) {
// 忽略第一行,这是列名
if (scanner.hasNextLine()) {
scanner.nextLine();
}

while (scanner.hasNextLine()) {
String[] parts = scanner.nextLine().split(",");
double currentBalance = Double.parseDouble(parts[4]); // 活期余额
double savingsBalance = Double.parseDouble(parts[5]); // 储蓄余额
double totalBalance = currentBalance + savingsBalance; // 总余额
// 添加账户名、总余额、活期余额和储蓄余额
accountsAndBalances.add(parts[0] + "," + totalBalance + "," + currentBalance + "," + savingsBalance);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}

// 按照总余额排序
Collections.sort(accountsAndBalances, new Comparator<String>() {
@Override
public int compare(String account1, String account2) {
double balance1 = Double.parseDouble(account1.split(",")[1]);
double balance2 = Double.parseDouble(account2.split(",")[1]);
return Double.compare(balance2, balance1); // 降序排列
}
});

// 将排行榜结果写入文件
try (PrintWriter writer = new PrintWriter(new FileWriter(LEADERBOARD_FILE, false))) {
// 写入排行榜文件之前先清空文件内容
writer.println("username,totalBalance,currentBalance,savingsBalance");

// 接下来写入排行榜内容
for (String account : accountsAndBalances) {
writer.println(account);
}
System.out.println("排行榜信息已更新!");
} catch (IOException e) {
e.printStackTrace();
}
}
}



private void calculateInterest() {
private void calculateInterest() {
long currentTime = System.currentTimeMillis();
long currentTime = System.currentTimeMillis();
long elapsedTime = currentTime - lastInterestCalculation;
long elapsedTime = currentTime - lastInterestCalculation;
double weeklyInterestRate = 0.01 / 52;
double weeklyInterestRate = 0.01 / 52;
double interestEarned = savingsBalance * weeklyInterestRate * weeksElapsed; // Calculate interest based on weeks elapsed
double interestEarned = savingsBalance * weeklyInterestRate * weeksElapsed;
savingsBalance += interestEarned;
savingsBalance += interestEarned;
lastInterestCalculation = currentTime;
lastInterestCalculation = currentTime;
addTransaction("利息结算:" + interestEarned + " 元"); // Add interest transaction to the transaction list
addTransaction("利息结算:" + interestEarned + " 元");
}
}


public static BankAccount findAccount(String identifier) {
public static BankAccount findAccount(String identifier) {
return accounts.get(identifier);
try (Scanner scanner = new Scanner(new File(ACCOUNTS_FILE))) {
while (scanner.hasNextLine()) {
String[] parts = scanner.nextLine().split(",");
if (parts[0].equals(identifier) || parts[3].equals(identifier)) {
return new BankAccount(parts[0], parts[1], parts[2], parts[3]);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return null;
}
}


public void changePhoneNumber(String newPhoneNumber) {
public void changePhoneNumber(String newPhoneNumber) {
accounts.remove(phoneNumber);
try (Scanner scanner = new Scanner(new File(ACCOUNTS_FILE));
this.phoneNumber = newPhoneNumber;
PrintWriter writer = new PrintWriter(new FileWriter(ACCOUNTS_FILE + ".tmp"))) {
accounts.put(newPhoneNumber, this);
while (scanner.hasNextLine()) {
String[] parts = scanner.nextLine().split(",");
if (parts[0].equals(username)) {
writer.println(username + "," + childPassword + "," + parentPassword + "," + newPhoneNumber + "," + currentBalance + "," + savingsBalance);
} else {
writer.println(String.join(",", parts));
}
}
} catch (IOException e) {
e.printStackTrace();
}
new File(ACCOUNTS_FILE).delete();
new File(ACCOUNTS_FILE + ".tmp").renameTo(new File(ACCOUNTS_FILE));
phoneNumber = newPhoneNumber;
System.out.println("手机号已更改为:" + newPhoneNumber);
System.out.println("手机号已更改为:" + newPhoneNumber);
}
}


public void changeUsername(String newUsername) {
public void changeUsername(String newUsername) {
accounts.remove(username);
try (Scanner scanner = new Scanner(new File(ACCOUNTS_FILE));
this.username = newUsername;
PrintWriter writer = new PrintWriter(new FileWriter(ACCOUNTS_FILE + ".tmp"))) {
accounts.put(newUsername, this);
while (scanner.hasNextLine()) {
String[] parts = scanner.nextLine().split(",");
if (parts[0].equals(username)) {
writer.println(newUsername + "," + childPassword + "," + parentPassword + "," + phoneNumber + "," + currentBalance + "," + savingsBalance);
} else {
writer.println(String.join(",", parts));
}
}
} catch (IOException e) {
e.printStackTrace();
}
new File(ACCOUNTS_FILE).delete();
new File(ACCOUNTS_FILE + ".tmp").renameTo(new File(ACCOUNTS_FILE));
username = newUsername;
System.out.println("用户名已更改为:" + newUsername);
System.out.println("用户名已更改为:" + newUsername);
}
}


public void changeChildPassword(String newChildPassword) {
public void changeChildPassword(String newChildPassword) {
this.childPassword = newChildPassword;
childPassword = newChildPassword;
System.out.println("孩子密码已更改");
System.out.println("孩子密码已更改");
}
}


public void changeParentPassword(String newParentPassword) {
public void changeParentPassword(String newParentPassword) {
this.parentPassword = newParentPassword;
parentPassword = newParentPassword;
System.out.println("家长密码已更改");
System.out.println("家长密码已更改");
}
}


public void purchaseReward(int rewardNumber) {
public void purchaseReward(int rewardNumber) {
if (currentBalance >= prices.get(rewardNumber)) {
try (Scanner scanner = new Scanner(new File(PRICES_FILE))) {
currentBalance -= prices.get(rewardNumber);
// 忽略第一行,这是列名
System.out.println("成功购买奖励:" + rewards.get(rewardNumber));
if (scanner.hasNextLine()) {
System.out.println("当前活期余额:" + currentBalance + " 元");
scanner.nextLine();
addTransaction("购买奖励:" + rewards.get(rewardNumber) + ",价格:" + prices.get(rewardNumber) + " 元");
}
} else {

System.out.println("活期余额不足,无法购买奖励。");
int i = 1;
while (scanner.hasNextLine()) {
// 继续按原来的逻辑处理
if (i == rewardNumber) {
int price = Integer.parseInt(scanner.nextLine());
if (currentBalance >= price) {
currentBalance -= price;
System.out.println("成功购买奖励:" + readRewardName(rewardNumber));
System.out.println("当前活期余额:" + currentBalance + " 元");
addTransaction("购买奖励:" + readRewardName(rewardNumber) + ",价格:" + price + " 元");
} else {
System.out.println("活期余额不足,无法购买奖励。");
}
break;
}
scanner.nextLine();
i++;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
}


private String readRewardName(int rewardNumber) {
try (Scanner scanner = new Scanner(new File(REWARDS_FILE))) {
int i = 1;
while (scanner.hasNextLine()) {
if (i == rewardNumber) {
return scanner.nextLine();
}
scanner.nextLine();
i++;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return null;
}

public static void showLeaderboard() {
public static void showLeaderboard() {
if (leaderboard.isEmpty()) {
try (Scanner scanner = new Scanner(new File(LEADERBOARD_FILE))) {
System.out.println("暂无排行榜信息。");
while (scanner.hasNextLine()) {
} else {
String[] parts = scanner.nextLine().split(",");
List<Map.Entry<String, Double>> sortedList = new ArrayList<>(leaderboard.entrySet());
System.out.println(parts[0] + " - 总余额:" + parts[1] + " 元,活期余额:" + parts[2] + " 元,储蓄余额:" + parts[3] + " 元");
Collections.sort(sortedList, (entry1, entry2) -> {
// Compare based on the total balance
BankAccount account1 = accounts.get(entry1.getKey());
BankAccount account2 = accounts.get(entry2.getKey());
double totalBalance1 = account1.getCurrentBalance() + account1.getSavingsBalance();
double totalBalance2 = account2.getCurrentBalance() + account2.getSavingsBalance();
return Double.compare(totalBalance2, totalBalance1); // Sort in descending order
});

System.out.println("存款排行榜:");
for (Map.Entry<String, Double> entry : sortedList) {
String username = entry.getKey();
BankAccount account = accounts.get(username);
double currentBalance = account.getCurrentBalance();
double savingsBalance = account.getSavingsBalance();
double totalBalance = currentBalance + savingsBalance;
System.out.println(username + " - 总余额:" + totalBalance + " 元,活期余额:" + currentBalance + " 元,储蓄余额:" + savingsBalance + " 元");
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
}



public static void showRewards() {
public static void showRewards() {
System.out.println("奖励商城:");
try (Scanner scanner = new Scanner(new File(REWARDS_FILE));
for (int i = 1; i <= 10; i++) {
Scanner scanner2 = new Scanner(new File(PRICES_FILE))) {
System.out.println(i + ". " + rewards.get(i) + " - 价格:" + prices.get(i) + " 元");
int i = 1;
while (scanner.hasNextLine() && scanner2.hasNextLine()) {
System.out.println(i + ". " + scanner.nextLine() + " - 价格:" + scanner2.nextLine() + " 元");
i++;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
}


// Method to increase weeks elapsed
public void increaseWeeks(int weeks) {
public void increaseWeeks(int weeks) {
weeksElapsed += weeks;
weeksElapsed += weeks;
calculateInterest(); // Calculate interest after increasing weeks
calculateInterest();
updateLeaderboard();
}
}


// Method to display weeks elapsed
public void displayWeeksElapsed() {
public void displayWeeksElapsed() {
System.out.println("已经过 " + weeksElapsed + " 周。");
System.out.println("已经过 " + weeksElapsed + " 周。");
}
}
}
}


public static void main(String[] args) {
public static void main(String[] args) {
final String ACCOUNTS_FILE = "C:\\Users\\Peter\\IdeaProjects\\VirtualBankApplication\\src\\accounts.csv";
final String LEADERBOARD_FILE = "C:\\Users\\Peter\\IdeaProjects\\VirtualBankApplication\\src\\leaderboard.csv";

// 使用一个Map来存储排行榜中每个用户的余额信息
Map<String, Double[]> leaderboardData = new HashMap<>();

// 检查排行榜文件是否存在
File leaderboardFile = new File(LEADERBOARD_FILE);
if (leaderboardFile.exists()) {
try (Scanner scanner = new Scanner(leaderboardFile)) {
// 忽略排行榜文件的第一行,因为它是列名
if (scanner.hasNextLine()) {
scanner.nextLine();
}

// 逐行读取排行榜文件,并将每行数据存储到Map中
while (scanner.hasNextLine()) {
String[] parts = scanner.nextLine().split(",");
String username = parts[0];
double totalBalance = Double.parseDouble(parts[1]);
double currentBalance = Double.parseDouble(parts[2]);
double savingsBalance = Double.parseDouble(parts[3]);

// 将排行榜中的每个账户数据存储到Map中
leaderboardData.put(username, new Double[]{currentBalance, savingsBalance});
}
} catch (IOException e) {
e.printStackTrace();
}
}

// 将排行榜数据写入到账户文件中
try (PrintWriter writer = new PrintWriter(new FileWriter(ACCOUNTS_FILE))) {
// 写入账户文件的列名
writer.println("Username,Child_Password,Parent_Password,Phone_Number,Current_Balance,Savings_Balance");

// 逐行写入排行榜中每个用户的余额信息到账户文件中
for (Map.Entry<String, Double[]> entry : leaderboardData.entrySet()) {
String username = entry.getKey();
Double[] balances = entry.getValue();
double currentBalance = balances[0];
double savingsBalance = balances[1];

// 将排行榜中的每个用户的余额信息写入到账户文件中
writer.println(username + "," + currentBalance + "," + savingsBalance);
}
} catch (IOException e) {
e.printStackTrace();
}

Scanner scanner = new Scanner(System.in);
Scanner scanner = new Scanner(System.in);


while (true) {
while (true) {
System.out.println("\n请选择操作:");
System.out.println("\n请选择操作:");
System.out.println("1. 创建账号");
System.out.println("1. 创建账号");
System.out.println("2. 登录");
System.out.println("2. 登录");
System.out.println("3. 排行榜");
System.out.println("3. 排行榜");
System.out.println("4. 退出");
System.out.println("4. 退出");
System.out.print("请输入选项:");
System.out.print("请输入选项:");


int choice = scanner.nextInt();
int choice = scanner.nextInt();
scanner.nextLine();
scanner.nextLine();


switch (choice) {
switch (choice) {
case 1:
case 1:
System.out.print("请输入用户名:");
System.out.print("请输入用户名:");
String newUsername = scanner.nextLine();
String newUsername = scanner.nextLine();
System.out.print("请输入孩子密码:");
System.out.print("请输入孩子密码:");
String newChildPassword = scanner.nextLine();
String newChildPassword = scanner.nextLine();
System.out.print("请输入家长密码:");
System.out.print("请输入家长密码:");
String newParentPassword = scanner.nextLine();
String newParentPassword = scanner.nextLine();
System.out.print("请输入手机号:");
System.out.print("请输入手机号:");
String newPhoneNumber = scanner.nextLine();
String newPhoneNumber = scanner.nextLine();
BankAccount newAccount = new BankAccount(newUsername, newChildPassword, newParentPassword, newPhoneNumber);
BankAccount newAccount = new BankAccount(newUsername, newChildPassword, newParentPassword, newPhoneNumber);
System.out.println("账号创建成功!");
System.out.println("账号创建成功!");
break;
break;
case 2:
case 2:
System.out.print("请输入用户名或手机号:");
System.out.print("请输入用户名或手机号:");
String identifier = scanner.nextLine();
String identifier = scanner.nextLine();
BankAccount account = BankAccount.findAccount(identifier);
BankAccount account = BankAccount.findAccount(identifier);
if (account != null) {
if (account != null) {
System.out.print("请选择登录类型(1. 孩子密码 2. 家长密码):");
System.out.print("请选择登录类型(1. 孩子密码 2. 家长密码):");
int loginType = scanner.nextInt();
int loginType = scanner.nextInt();
scanner.nextLine();
scanner.nextLine();
if (loginType == 1) {
if (loginType == 1) {
System.out.print("请输入密码:");
System.out.print("请输入密码:");
String password = scanner.nextLine();
String password = scanner.nextLine();
if (password.equals(account.childPassword)) {
if (password.equals(account.childPassword)) {
System.out.println("孩子账户登录成功!");
System.out.println("孩子账户登录成功!");
operateChildAccount(account, scanner);
operateChildAccount(account, scanner);
} else {
} else {
System.out.println("密码错误,登录失败。");
System.out.println("密码错误,登录失败。");
}
}
} else if (loginType == 2) {
} else if (loginType == 2) {
System.out.print("请输入密码:");
System.out.print("请输入密码:");
String password = scanner.nextLine();
String password = scanner.nextLine();
if (password.equals(account.parentPassword)) {
if (password.equals(account.parentPassword)) {
System.out.println("家长账户登录成功!");
System.out.println("家长账户登录成功!");
operateParentAccount(account, scanner);
operateParentAccount(account, scanner);
} else {
} else {
System.out.println("密码错误,登录失败。");
System.out.println("密码错误,登录失败。");
}
}
} else {
} else {
System.out.println("无效登录类型,登录失败。");
System.out.println("无效登录类型,登录失败。");
}
}
} else {
} else {
System.out.println("账号不存在。");
System.out.println("账号不存在。");
}
}
break;
break;
case 3:
case 3:
BankAccount.showLeaderboard();
BankAccount.showLeaderboard();
break;
break;
case 4:
case 4:
System.out.println("感谢使用虚拟银行应用程序!");
System.out.println("感谢使用虚拟银行应用程序!");
return;
return;
default:
default:
System.out.println("无效选项,请重新输入。");
System.out.println("无效选项,请重新输入。");
}
}
}
}
}
}


private static void operateParentAccount(BankAccount account, Scanner scanner) {
private static void operateParentAccount(BankAccount account, Scanner scanner) {
while (true) {
while (true) {
System.out.println("\n请选择操作:");
System.out.println("\n请选择操作:");
System.out.println("1. 给孩子账户添加任务");
System.out.println("1. 给孩子账户添加任务");
System.out.println("2. 查看任务");
System.out.println("2. 查看任务");
System.out.println("3. 查看孩子账户余额");
System.out.println("3. 查看孩子账户余额");
System.out.println("4. 查看交易流水");
System.out.println("4. 查看交易流水");
System.out.println("5. 排行榜");
System.out.println("5. 排行榜");
System.out.println("6. 奖励商城");
System.out.println("6. 奖励商城");
System.out.println("7. 增加周数");
System.out.println("7. 增加周数");
System.out.println("8. 修改家长密码");
System.out.println("8. 修改家长密码");
System.out.println("9. 退出账户");
System.out.println("9. 退出账户");
System.out.println("10. 删除账户");
System.out.print("请输入选项:");
System.out.print("请输入选项:");


int choice = scanner.nextInt();
int choice = scanner.nextInt();
scanner.nextLine();
scanner.nextLine();


switch (choice) {
switch (choice) {
case 1:
case 1:
System.out.print("请输入任务名称:");
System.out.print("请输入任务名称:");
String taskName = scanner.nextLine();
String taskName = scanner.nextLine();
System.out.print("请输入任务报酬:");
System.out.print("请输入任务报酬:");
double reward = scanner.nextDouble();
double reward = scanner.nextDouble();
scanner.nextLine(); // Consume newline
scanner.nextLine(); // Consume newline
account.addTask(taskName, reward);
account.addTask(taskName, reward);
break;
break;
case 2:
case 2:
account.viewTasks();
account.viewTasks();
break;
break;
case 3:
case 3:
System.out.println("孩子账户余额:");
System.out.println("孩子账户余额:");
System.out.println("活期余额:" + account.getCurrentBalance() + " 元");
System.out.println("活期余额:" + account.getCurrentBalance() + " 元");
System.out.println("储蓄余额:" + account.getSavingsBalance() + " 元");
System.out.println("储蓄余额:" + account.getSavingsBalance() + " 元");
break;
break;
case 4:
case 4:
account.showTransactions();
account.showTransactions();
break;
break;
case 5:
case 5:
BankAccount.showLeaderboard();
BankAccount.showLeaderboard();
break;
break;
case 6:
case 6:
BankAccount.showRewards();
BankAccount.showRewards();
System.out.print("请输入您想购买的奖励编号:");
System.out.print("请输入您想购买的奖励编号:");
int rewardNumber = scanner.nextInt();
int rewardNumber = scanner.nextInt();
scanner.nextLine();
scanner.nextLine();
account.purchaseReward(rewardNumber);
account.purchaseReward(rewardNumber);
break;
break;
case 7:
case 7:
System.out.print("请输入要增加的周数:");
System.out.print("请输入要增加的周数:");
int newWeekNum = scanner.nextInt();
int newWeekNum = scanner.nextInt();
scanner.nextLine();
scanner.nextLine();
account.increaseWeeks(newWeekNum);
break;
case 8:
System.out.print("请输入新密码:");
String newPassword = scanner.nextLine();
account.changeParentPassword(newPassword);
break;
case 9:
System.out.println("已退出账户。");
return;
default:
System.out.println("无效选项,请重新输入。");
}
}
}

private static void operateChildAccount(BankAccount account, Scanner scanner) {
while (true) {
System.out.println("\n请选择操作:");
System.out.println("1. 存款");
System.out.println("2. 取款");
System.out.println("3. 查询账户余额");
System.out.println("4. 转账到储蓄账户");
System.out.println("5. 转账到活期账户");
System.out.println("6. 增加周数");
System.out.println("7. 排行榜");
System.out.println("8. 奖励商城");
System.out.println("9. 查看任务");
System.out.println("10. 完成任务");
System.out.println("11. 查看交易流水");
System.out.println("12. 换绑手机号");
System.out.println("13. 更换用户名");
System.out.println("14. 更换密码");
System.out.println("15. 退出账号");

System.out.print("请输入选项:");

int choice = scanner.nextInt();
scanner.nextLine();

switch (choice) {
case 1:
System.out.print("请输入存款金额:");
double depositAmount = scanner.nextDouble();
account.deposit(depositAmount);
break;
case 2:
System.out.print("请输入取款金额:");
double withdrawAmount = scanner.nextDouble();
account.withdraw(withdrawAmount);
break;
case 3:
System.out.println("孩子账户余额:");
System.out.println("活期余额:" + account.getCurrentBalance() + " 元");
System.out.println("储蓄余额:" + account.getSavingsBalance() + " 元");
break;
case 4:
System.out.print("请输入转账至储蓄账户金额:");
double transferAmount = scanner.nextDouble();
account.transferToSavings(transferAmount);
break;
case 5:
System.out.print("请输入转账至活期账户金额:");
double transferToCurrentAmount = scanner.nextDouble();
account.transferToCurrent(transferToCurrentAmount);
break;
case 6:
System.out.print("请输入要增加的周数:");
int newWeekNum = scanner.nextInt();
scanner.nextLine();
account.increaseWeeks(newWeekNum);
break;
case 7:
BankAccount.showLeaderboard();
break;
case 8:
BankAccount.showRewards();
System.out.print("请输入您想购买的奖励编号:");
int rewardNumber = scanner.nextInt();
scanner.nextLine();
account.purchaseReward(rewardNumber);
break;
case 9:
account.viewTasks();
break;
case 10:
System.out.print("请输入要完成的任务序号:");
int taskNumber = scanner.nextInt();
scanner.nextLine(); // Consume newline
account.completeTask(taskNumber);
break;
case 11:
account.showTransactions();
break;
case 12:
System.out.print("请输入新手机号:");
String newPhoneNumber = scanner.nextLine();
account.changePhoneNumber(newPhoneNumber);
break;
case 13:
System.out.print("请输入新用户名:");
String newUsername = scanner.nextLine();
account.changeUsername(newUsername);
break;
case 14:
System.out.print("请输入新密码:");
String newPassword = scanner.nextLine();
account.changeChildPassword(newPassword);
break;
case 15:
System.out.println("已退出账号。");
return;
default:
System.out.println("无效选项,请重新输入。");
}
}
}
}