Day 13:Java 复习语法、流程控制、数组、方法,重写 ATM 控制台程序
2026/9/8 17:40:46 网站建设 项目流程

目录

第一部分:Day 12 练习答案

练习1:定义 3 行 4 列二维数组并打印,再求每一行的和

练习2:名单至少 5 人,连续点 5 次且不重复

练习3:3 个学生各 2 门课,求每人平均分和全班最高分(单个分数)

练习4:写 createRandomMatrix(rows, cols, bound) 生成随机矩阵并打印

第二部分:Day 13 详细教程

今日目标

一、今天复习什么?(先看地图)

二、ATM 业务流程图(先懂再写)

三、语法基础在 ATM 里怎么用

1)变量和类型

2)键盘输入

3)字符串比较(超容易错)

四、流程控制在 ATM 里怎么用

1)if:做业务校验

2)for:登录限次(次数明确)

3)while(true):菜单常驻(次数不明确)

4)switch:菜单多分支

break 和 return 对比

五、数组在 ATM 里怎么用(平行数组)

六、方法拆分(ATM 的骨架)

七、模块精讲:按块写 ATM

模块 A:数据 + 入口

模块 B:登录 + 查找

模块 C:菜单循环

模块 D:查询 / 存款 / 取款

模块 E:转账

八、完整 ATM 程序

九、建议练习顺序

十、还有没有别的写法?

十一、固定写法

第三部分:Day 13 课后练习

第一部分:Day 12 练习答案


练习1:定义 3 行 4 列二维数组并打印,再求每一行的和

public class Day12Ex1 { // 公共类,文件名必须是Day12Ex1.java public static void main(String[] args) { // 程序入口,JVM从这里开始 int[][] arr = { // 定义并初始化3行4列二维数组 {1, 2, 3, 4}, // 第0行 {5, 6, 7, 8}, // 第1行 {9, 10, 11, 12} // 第2行 }; print2D(arr); // 调用打印整表 printRowSums(arr); // 调用打印每一行的和 } public static void print2D(int[][] arr) { // void:只负责打印 System.out.println("二维数组内容:"); // 打印标题 for (int i = 0; i < arr.length; i++) { // i表示行号 for (int j = 0; j < arr[i].length; j++) { // j表示列号 System.out.print(arr[i][j] + "\t"); // 打印第i行第j列 } System.out.println(); // 一行结束换行 } } public static void printRowSums(int[][] arr) { // 计算并打印每行和 System.out.println("每一行的和:"); // 打印标题 for (int i = 0; i < arr.length; i++) { // 逐行处理 int sum = 0; // 每一行累加器从0开始 for (int j = 0; j < arr[i].length; j++) { // 累加该行所有列 sum += arr[i][j]; // 加上当前元素 } System.out.println("第" + (i + 1) + "行和 = " + sum); // i+1方便人阅读 } } } /* 预期输出: 二维数组内容: 1 2 3 4 5 6 7 8 9 10 11 12 每一行的和: 第1行和 = 10 第2行和 = 26 第3行和 = 42 */

练习2:名单至少 5 人,连续点 5 次且不重复

import java.util.Random; // 导入随机数工具 public class Day12Ex2 { // 公共类 public static void main(String[] args) { // 程序入口 String[] names = {"张三", "李四", "王五", "赵六", "钱七"}; // 至少5人名单 callUnique(names, 5); // 连续点5次且不重复 } public static void callUnique(String[] names, int times) { // names名单,times次数 if (times > names.length) { // 要抽的人数超过名单,无法不重复 System.out.println("抽取人数不能超过名单人数"); // 提示 return; // 结束方法 } String[] copy = names.clone(); // 复制名单,避免打乱原数组 shuffle(copy); // 打乱副本 for (int i = 0; i < times; i++) { // 取前times个,保证不重复 System.out.println("第" + (i + 1) + "次点到:" + copy[i]); // 打印点名结果 } } public static void shuffle(String[] arr) { // 随机打乱数组 Random r = new Random(); // 创建随机数生成器 for (int i = 0; i < arr.length; i++) { // 每个位置参与交换 int j = r.nextInt(arr.length); // 随机下标0~length-1 String temp = arr[i]; // 交换三步曲:暂存 arr[i] = arr[j]; // 赋值 arr[j] = temp; // 放回 } } } /* 预期输出(随机,示例): 第1次点到:钱七 第2次点到:张三 第3次点到:王五 第4次点到:李四 第5次点到:赵六 */

练习3:3 个学生各 2 门课,求每人平均分和全班最高分(单个分数)

public class Day12Ex3 { // 公共类 public static void main(String[] args) { // 入口 String[] names = {"张三", "李四", "王五"}; // 姓名数组 int[][] scores = { // 成绩表:3行2列 {80, 90}, // 张三两门课 {70, 60}, // 李四两门课 {95, 85} // 王五两门课 }; printEachAvg(names, scores); // 打印每人平均分 System.out.println("全班最高分:" + findMaxScore(scores)); // 打印最高分 } public static void printEachAvg(String[] names, int[][] scores) { // 计算每人平均 for (int i = 0; i < names.length; i++) { // i同时对应姓名和成绩行 int sum = 0; // 当前学生总分 for (int j = 0; j < scores[i].length; j++) { // 遍历该学生每门课 sum += scores[i][j]; // 累加 } double avg = (double) sum / scores[i].length; // 转double再除,保留小数 System.out.println(names[i] + " 平均分:" + avg); // 打印平均分 } } public static int findMaxScore(int[][] scores) { // 找所有分数中的最大值 int max = scores[0][0]; // 先假设第一个分数最大 for (int i = 0; i < scores.length; i++) { // 遍历每个学生 for (int j = 0; j < scores[i].length; j++) { // 遍历每门课 if (scores[i][j] > max) { // 发现更大就更新 max = scores[i][j]; // 更新最大值 } } } return max; // 返回最高分 } } /* 预期输出: 张三 平均分:85.0 李四 平均分:65.0 王五 平均分:90.0 全班最高分:95 */

练习4:写 createRandomMatrix(rows, cols, bound) 生成随机矩阵并打印

import java.util.Random; // 导入随机数类 public class Day12Ex4 { // 公共类 public static void main(String[] args) { // 入口 int[][] matrix = createRandomMatrix(3, 4, 10); // 生成3行4列,值范围0~9 print2D(matrix); // 打印矩阵 } public static int[][] createRandomMatrix(int rows, int cols, int bound) { // 返回二维数组 int[][] arr = new int[rows][cols]; // 先创建空表 Random r = new Random(); // 随机数生成器 for (int i = 0; i < rows; i++) { // 逐行 for (int j = 0; j < cols; j++) { // 逐列 arr[i][j] = r.nextInt(bound); // 填入0~bound-1 } } return arr; // 返回填好的矩阵 } public static void print2D(int[][] arr) { // 打印二维数组 for (int i = 0; i < arr.length; i++) { // 行 for (int j = 0; j < arr[i].length; j++) { // 列 System.out.print(arr[i][j] + "\t"); // 打印元素 } System.out.println(); // 换行 } } } /* 预期输出(随机,示例): 2 7 1 9 0 4 6 3 8 5 2 1 */

第二部分:Day 13 详细教程

今日目标

  1. 系统复习:语法基础、流程控制、数组、方法
  2. 把这些知识点串成一个完整项目:ATM 控制台程序
  3. 学会用“平行数组 + 方法拆分 + 菜单循环”搭小系统
  4. 能独立写出:登录、查询、存款、取款、转账、退出

一、今天复习什么?(先看地图)

Day1~12 不是散的,今天用 ATM 把它们钉在一起:

复习模块你要会的点在 ATM 里出现的位置

语法基础

变量、类型、String、输入输出

账号、密码、余额、金额

流程控制

ifswitchforwhile

校验、菜单、登录重试

数组

一维数组、下标、遍历

多用户账号/密码/余额

方法

定义、调用、返回值、拆分

登录/查询/存取转各自成方法

语法负责存数据 流程控制负责做判断和重复 数组负责管一批用户 方法负责把功能拆干净 ATM = 四者组合拳

二、ATM 业务流程图(先懂再写)

启动程序 ↓ 登录(最多3次) ↓ 失败 → 退出 ↓ 成功 显示菜单(循环) ├─ 1 查询余额 ├─ 2 存款 ├─ 3 取款 ├─ 4 转账 └─ 5 退出 → 结束

对应代码结构:

main ├─ login() └─ menuLoop() ├─ query() ├─ deposit() ├─ withdraw() └─ transfer()

三、语法基础在 ATM 里怎么用

你学过的语法人话解释在 ATM 中的位置

变量

盒子,装数据

余额、账号、选项

Scanner

从键盘收用户输入

输密码、输金额、选菜单

if

满足条件才做

金额是否合法、余额够不够

switch

多选项分支

1查询 2存款 3取款…

for

次数明确的重复

登录最多试 3 次

while(true)

一直重复,直到手动停

菜单一直显示

方法

把一件事打包

每个功能一个方法

数组

一排格子

多个用户的账号/密码/余额

equals

比较字符串内容

判断账号密码对不对

1)变量和类型

String id = "1001"; // String:账号是文本 String pwd = "123456"; // String:密码是文本 double money = 1000.0; // double:余额可能有小数 int choice = 1; // int:菜单选项是整数 boolean ok = true; // boolean:登录成功/失败

2)键盘输入

import java.util.Scanner; // 先导入 Scanner sc = new Scanner(System.in); // 创建扫描器,读键盘 String id = sc.next(); // 读字符串(账号/密码) int choice = sc.nextInt(); // 读整数(菜单) double amount = sc.nextDouble(); // 读小数(金额)

3)字符串比较(超容易错)

String a = "1001"; // 账号a String b = "1001"; // 账号b boolean same1 = a.equals(b); // 正确:比内容,结果true // boolean same2 = (a == b); // 危险:比地址,不适合比账号密码内容

四、流程控制在 ATM 里怎么用

1)if:做业务校验

if (amount <= 0) { // 金额不合法 System.out.println("金额必须大于0"); // 提示 return; // 结束当前方法,后面改余额的代码不执行 } if (amount > balance) { // 余额不够 System.out.println("余额不足"); // 提示 return; // 结束 }

2)for:登录限次(次数明确)

for (int i = 1; i <= 3; i++) { // 固定试3次 // 输入账号密码并校验 }

3)while(true):菜单常驻(次数不明确)

while (true) { // 一直循环 // 显示菜单并处理 // 选退出时 return 结束 }

4)switch:菜单多分支

switch (choice) { // 根据选项跳转 case 1: // 选1 query(); // 查余额 break; // 跳出switch,防止穿透 case 5: // 选5 return; // 结束菜单方法 default: // 其他值 System.out.println("无效选项"); // 提示 }

breakreturn对比

写法作用

break

离开switch,菜单循环还在,会再次显示菜单

return

离开整个方法,相当于退出菜单大厅


五、数组在 ATM 里怎么用(平行数组)

还没学面向对象前,多用户最实用写法:

下标 i=0 的用户:账号ids[0]=1001,密码pwds[0]=123456,余额moneys[0]=1000 下标 i=1 的用户:账号ids[1]=1002,密码pwds[1]=234567,余额moneys[1]=2000
static String[] ids = {"1001", "1002", "1003"}; // 账号排成一列 static String[] pwds = {"123456", "234567", "345678"}; // 密码排成一列 static double[] moneys = {1000.0, 2000.0, 3000.0}; // 余额排成一列 static int currentIndex = -1; // 当前是谁登录;-1=还没人登录

六、方法拆分(ATM 的骨架)

原则:一个方法只做一件事。

方法返回值干什么

login

boolean

登录成不成功

findUser

int

找到返回下标,找不到返回 -1

menuLoop

void

菜单循环

query

void

查询

deposit

void

存款

withdraw

void

取款

transfer

void

转账

业务方法固定节奏:

接收输入 → 校验 → 不合法就return → 合法才修改数据 → 打印结果

public static void main(String[] args) { // 入口:只安排大流程 System.out.println("===== 欢迎使用简易ATM ====="); if (!login()) { // 登录失败(返回false) System.out.println("登录失败,系统退出。"); return; // 结束程序 } menuLoop(); // 登录成功,进入功能大厅 System.out.println("感谢使用,再见!"); }

七、模块精讲:按块写 ATM

模块 A:数据 + 入口

import java.util.Scanner; // 导入输入工具 public class AtmApp { // ATM主类 static String[] ids = {"1001", "1002", "1003"}; // 账号 static String[] pwds = {"123456", "234567", "345678"}; // 密码 static double[] moneys = {1000.0, 2000.0, 3000.0}; // 余额 static Scanner sc = new Scanner(System.in); // 键盘输入 static int currentIndex = -1; // 当前用户下标 public static void main(String[] args) { // 入口只安排大流程 System.out.println("===== 欢迎使用简易ATM ====="); // 欢迎语 if (!login()) { // 登录失败 System.out.println("登录失败,系统退出。"); // 提示 return; // 结束程序 } menuLoop(); // 登录成功进入菜单 System.out.println("感谢使用,再见!"); // 结束语 } }

模块 B:登录 + 查找

public static boolean login() { // 返回是否登录成功 for (int i = 1; i <= 3; i++) { // 最多3次 System.out.print("请输入账号:"); // 提示账号 String id = sc.next(); // 读账号 System.out.print("请输入密码:"); // 提示密码 String pwd = sc.next(); // 读密码 int index = findUser(id, pwd); // 查找用户 if (index >= 0) { // 找到了 currentIndex = index; // 记住当前用户 System.out.println("登录成功,欢迎您:" + ids[currentIndex]); // 欢迎 return true; // 成功返回 } System.out.println("账号或密码错误,剩余次数:" + (3 - i)); // 失败提示 } return false; // 三次都失败 } public static int findUser(String id, String pwd) { // 按账号密码找下标 for (int i = 0; i < ids.length; i++) { // 遍历全部用户 if (ids[i].equals(id) && pwds[i].equals(pwd)) { // 内容都匹配 return i; // 返回下标 } } return -1; // 没找到 }

模块 C:菜单循环

public static void menuLoop() { // 菜单大厅 while (true) { // 一直循环直到退出 printMenu(); // 先打印菜单 System.out.print("请选择功能:"); // 提示选择 int choice = sc.nextInt(); // 读取选项 switch (choice) { // 分支处理 case 1: // 查询 query(); // 调查询 break; // 回菜单 case 2: // 存款 deposit(); // 调存款 break; case 3: // 取款 withdraw(); // 调取款 break; case 4: // 转账 transfer(); // 调转账 break; case 5: // 退出 return; // 离开菜单方法 default: // 非法选项 System.out.println("无效选项,请重新输入。"); // 提示 } } } public static void printMenu() { // 打印菜单文本 System.out.println("\n----- 菜单 -----"); // 标题 System.out.println("1. 查询余额"); // 选项1 System.out.println("2. 存款"); // 选项2 System.out.println("3. 取款"); // 选项3 System.out.println("4. 转账"); // 选项4 System.out.println("5. 退出"); // 选项5 }

模块 D:查询 / 存款 / 取款

public static void query() { // 查询当前用户 System.out.println("当前账号:" + ids[currentIndex]); // 打印账号 System.out.println("当前余额:" + moneys[currentIndex]); // 打印余额 } public static void deposit() { // 存款 System.out.print("请输入存款金额:"); // 提示 double money = sc.nextDouble(); // 读金额 if (money <= 0) { // 校验 System.out.println("金额必须大于0"); // 提示 return; // 结束 } moneys[currentIndex] += money; // 余额增加 System.out.println("存款成功,余额:" + moneys[currentIndex]); // 成功提示 } public static void withdraw() { // 取款 System.out.print("请输入取款金额:"); // 提示 double money = sc.nextDouble(); // 读金额 if (money <= 0) { // 金额校验 System.out.println("金额必须大于0"); // 提示 return; // 结束 } if (money > moneys[currentIndex]) { // 余额校验 System.out.println("余额不足"); // 提示 return; // 结束 } moneys[currentIndex] -= money; // 扣款 System.out.println("取款成功,余额:" + moneys[currentIndex]); // 成功提示 }

模块 E:转账

public static int findUserById(String id) { // 只按账号找 for (int i = 0; i < ids.length; i++) { // 遍历 if (ids[i].equals(id)) { // 账号匹配 return i; // 返回下标 } } return -1; // 不存在 } public static void transfer() { // 转账 System.out.print("请输入对方账号:"); // 提示 String toId = sc.next(); // 读对方账号 int toIndex = findUserById(toId); // 找对方下标 if (toIndex < 0) { // 不存在 System.out.println("对方账号不存在"); // 提示 return; // 结束 } if (toIndex == currentIndex) { // 不能转给自己 System.out.println("不能给自己转账"); // 提示 return; // 结束 } System.out.print("请输入转账金额:"); // 提示 double money = sc.nextDouble(); // 读金额 if (money <= 0) { // 金额校验 System.out.println("金额必须大于0"); // 提示 return; // 结束 } if (money > moneys[currentIndex]) { // 余额校验 System.out.println("余额不足"); // 提示 return; // 结束 } moneys[currentIndex] -= money; // 自己减钱 moneys[toIndex] += money; // 对方加钱 System.out.println("转账成功,余额:" + moneys[currentIndex]); // 成功提示 }

八、完整 ATM 程序

import java.util.Scanner; // 导入键盘输入类 public class AtmApp { // 公共类,文件名AtmApp.java static String[] ids = {"1001", "1002", "1003"}; // 账号平行数组 static String[] pwds = {"123456", "234567", "345678"}; // 密码平行数组 static double[] moneys = {1000.0, 2000.0, 3000.0}; // 余额平行数组 static Scanner sc = new Scanner(System.in); // 全类共享输入器 static int currentIndex = -1; // 当前登录用户下标,-1=未登录 public static void main(String[] args) { // 程序入口 System.out.println("===== 欢迎使用简易ATM ====="); // 欢迎 if (!login()) { // 登录失败则退出 System.out.println("登录失败,系统退出。"); // 提示 return; // 结束main } menuLoop(); // 进入菜单循环 System.out.println("感谢使用,再见!"); // 退出后提示 } public static boolean login() { // 登录,最多3次 for (int i = 1; i <= 3; i++) { // 第1~3次 System.out.print("请输入账号:"); // 提示 String id = sc.next(); // 读账号 System.out.print("请输入密码:"); // 提示 String pwd = sc.next(); // 读密码 int index = findUser(id, pwd); // 查找 if (index >= 0) { // 成功 currentIndex = index; // 记录当前用户 System.out.println("登录成功,欢迎您:" + ids[currentIndex]); // 欢迎 return true; // 返回成功 } System.out.println("账号或密码错误,剩余次数:" + (3 - i)); // 失败提示 } return false; // 三次失败 } public static int findUser(String id, String pwd) { // 账号+密码查找 for (int i = 0; i < ids.length; i++) { // 遍历用户 if (ids[i].equals(id) && pwds[i].equals(pwd)) { // 都匹配 return i; // 返回下标 } } return -1; // 未找到 } public static int findUserById(String id) { // 仅账号查找 for (int i = 0; i < ids.length; i++) { // 遍历 if (ids[i].equals(id)) { // 匹配账号 return i; // 返回下标 } } return -1; // 未找到 } public static void menuLoop() { // 菜单循环 while (true) { // 持续运行 printMenu(); // 显示菜单 System.out.print("请选择功能:"); // 提示 int choice = sc.nextInt(); // 读选项 switch (choice) { // 分支 case 1: // 查询 query(); // 调用 break; // 回菜单 case 2: // 存款 deposit(); // 调用 break; case 3: // 取款 withdraw(); // 调用 break; case 4: // 转账 transfer(); // 调用 break; case 5: // 退出 return; // 结束菜单 default: // 非法 System.out.println("无效选项,请重新输入。"); // 提示 } } } public static void printMenu() { // 打印菜单 System.out.println("\n----- 菜单 -----"); // 标题 System.out.println("1. 查询余额"); // 1 System.out.println("2. 存款"); // 2 System.out.println("3. 取款"); // 3 System.out.println("4. 转账"); // 4 System.out.println("5. 退出"); // 5 } public static void query() { // 查询 System.out.println("当前账号:" + ids[currentIndex]); // 账号 System.out.println("当前余额:" + moneys[currentIndex]); // 余额 } public static void deposit() { // 存款 System.out.print("请输入存款金额:"); // 提示 double money = sc.nextDouble(); // 金额 if (money <= 0) { // 校验 System.out.println("金额必须大于0"); // 提示 return; // 结束 } moneys[currentIndex] += money; // 加钱 System.out.println("存款成功,余额:" + moneys[currentIndex]); // 成功 } public static void withdraw() { // 取款 System.out.print("请输入取款金额:"); // 提示 double money = sc.nextDouble(); // 金额 if (money <= 0) { // 校验金额 System.out.println("金额必须大于0"); // 提示 return; // 结束 } if (money > moneys[currentIndex]) { // 校验余额 System.out.println("余额不足"); // 提示 return; // 结束 } moneys[currentIndex] -= money; // 扣钱 System.out.println("取款成功,余额:" + moneys[currentIndex]); // 成功 } public static void transfer() { // 转账 System.out.print("请输入对方账号:"); // 提示 String toId = sc.next(); // 对方账号 int toIndex = findUserById(toId); // 找对方 if (toIndex < 0) { // 不存在 System.out.println("对方账号不存在"); // 提示 return; // 结束 } if (toIndex == currentIndex) { // 转给自己 System.out.println("不能给自己转账"); // 提示 return; // 结束 } System.out.print("请输入转账金额:"); // 提示 double money = sc.nextDouble(); // 金额 if (money <= 0) { // 校验金额 System.out.println("金额必须大于0"); // 提示 return; // 结束 } if (money > moneys[currentIndex]) { // 校验余额 System.out.println("余额不足"); // 提示 return; // 结束 } moneys[currentIndex] -= money; // 自己减 moneys[toIndex] += money; // 对方加 System.out.println("转账成功,余额:" + moneys[currentIndex]); // 成功 } } /* 预期输出(示例): ===== 欢迎使用简易ATM ===== 请输入账号:1001 请输入密码:123456 登录成功,欢迎您:1001 ----- 菜单 ----- 1. 查询余额 2. 存款 3. 取款 4. 转账 5. 退出 请选择功能:1 当前账号:1001 当前余额:1000.0 请选择功能:2 请输入存款金额:200 存款成功,余额:1200.0 请选择功能:5 感谢使用,再见! */

九、建议练习顺序

按这个顺序自己敲,不要一次复制:

  1. 只写平行数组 +main打印欢迎语
  2. login+findUser,能登录成功/失败
  3. menuLoop+printMenu,能反复显示菜单
  4. query
  5. deposit/withdraw
  6. 最后加transfer

每加一块就运行一次,错了立刻定位,比一次写完再调快很多。


十、还有没有别的写法?

写法 A:账户信息放二维表

// 每一行一个用户:0账号 1密码 2余额(余额先用字符串,用时再转) String[][] users = { {"1001", "123456", "1000"}, {"1002", "234567", "2000"} };

写法 B:校验抽公共方法,减少重复

public static boolean isValidAmount(double money) { // 专判金额 if (money <= 0) { System.out.println("金额必须大于0"); return false; } return true; } // 存款里这样用: // if (!isValidAmount(money)) return;

写法 C:菜单用 if-else

if (choice == 1) query(); else if (choice == 2) deposit(); else if (choice == 3) withdraw(); else if (choice == 4) transfer(); else if (choice == 5) return; else System.out.println("无效选项"); if (choice == 1) { // 查询 query(); // 调用查询 } else if (choice == 2) { // 存款 deposit(); // 调用存款 } else if (choice == 5) { // 退出 return; // 结束菜单 } else { // 其他 System.out.println("无效选项"); // 提示 }

十一、固定写法

public class AtmApp // 定义公共类;类名必须和文件名一致 public static void main(String[] args) // 程序入口固定签名 // public可被JVM调用;static不用new;void无返回值;main名字固定 static String[] ids = {...}; static double[] moneys = {...}; // static表示全类共享 // 平行数组:相同下标对应同一用户 static int currentIndex = -1; // 保存当前登录用户下标 // -1表示未登录 Scanner sc = new Scanner(System.in); sc.next(); sc.nextInt(); sc.nextDouble(); // 读字符串/整数/小数固定用法 ids[i].equals(id) // 字符串内容比较用equals,不用== for (int i = 1; i <= 3; i++) { ... } // 登录限次:次数明确用for while (true) { ... return; } // 菜单常驻:次数不明,用死循环+退出条件 switch (choice) { case 1: ... break; } // 多菜单分支;break防止穿透 public static boolean login() // 成功失败用boolean返回 // 调用:if (!login()) { ... } public static void deposit() // 业务动作用void:改数据+打印即可 // 业务方法固定节奏: // 输入 → 校验 → return结束 → 改数据 → 提示成功

第三部分:Day 13 课后练习

练习1:给 ATM 增加“修改密码”功能(菜单第6项)

练习2:取款时增加限制:单次最多取 5000

练习3:用数组记录最近 5 笔操作金额(存款记正,取款记负),并提供“打印流水”菜单

练习4(挑战):登录成功后显示隐藏账号(如 1001 显示成 1**1),并统计今日登录失败总次数

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询