V9-V10
493 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("无效选项,请重新输入。");
}
}
}
}