##################################################
目录
##################################################
——————————
还记得我们之前 Java 的循环经常做什么吗?
提取数组元素的值!
Java 中有三种循环:
while
do-while
for
C# 中也是这三种! 而且语法和执行过程完全一样
——————————
while、do-while 这哥俩眼熟不?
while 是
先判断条件
后执行循环体
语法:
- while (条件表达式)
- {
- // 循环体
- }
do-while 是
先至少执行一次循环体
后判断条件
语法:
- do
- {
- // 循环体
- } while (条件表达式);
——————————
for 循环常用在确定循环次数的情况下使用
也是我们用的最多的的一种。。
语法:
- for (表达式_1; 表达式_2; 表达式_3)
- {
- // 循环体
- }
——————————
没错就是 foreach 这种绝伦遍历
Java foreach:
- foreach (数据类型 变量名 : 数组) {
-
- // 循环体
- }
而 C# 的 foreach 跟 Java 的也差不多 就是冒号变成了 in
表示从哪个变量中取出元素
each 是 每个 的意思
所以 foreach 用于遍历一个 数据集合 的每一项
不过我们目前只学了一个 数组 所以我们用她遍历数组
需要先设置一个 变量 依次表示其中的每一项
然后才可以在循环期间对 元素 进行处理
C# foreach:
- foreach (元素类型 元素变量名 in 数组)
- {
- // 循环体
- }
这里的 元素 是一个只读变量
并且括号中 声明的变量类型 必须与 目标变量类型 一致
foreach 结构的执行过程是循环体依次取出 数组 中的每一个元素
然后对每个元素进行处理
另外 foreach 结构不能改变数组中各变量的值
所以我们需要改变元素值的时候就用 for 结构吧!
——————————
总结一下:
- while 先判断条件 成立则执行循环体 否则结束循环
- do-while 循环体先执行一次 再判断条件是否成立 成立则继续循环 否则结束循环
- for 循环必须使用整形变量做 循环计算器 然后通过条件表达式限定 计数器变量值 来控制循环
- foreach 循环用于遍历给定数组的所有值
##################################################
——————————
没错就是 break、continue
就是跳转的位置不同罢了
%%%%%
可以跳出 switch、do-switch、for、foreach 循环结构
然后执行该循环后面的语句
%%%%%
也出现在 switch、do-switch、for、foreach 循环结构中
但是不是退出当前整个循环体 而是退出本次循环 进入下一次循环
##################################################
——————————
%%%%%
我们前几次完善的 SBS 系统 用户在执行完一个菜单项的操作之后 便会退出程序
这次我们让用户继续选择菜单中的操作
VSCode code:
- namespace _11.SBS_取款业务
- {
- /* 思路
- *
- * 当用户选择其她值时 显示菜单
- * 只有当用户选择 退出 时才会退出程序
- * 我们一般都是使用 do-while + switch 来控制多次选择菜单的操作!
- */
-
- ///
- /// 银行类
- ///
- public class Bank
- {
- /* 字段暂缺
- * ... ...
- */
-
- /* 一定要声明全局对象 因为不止一个方法要用! */
- User usr = new User();
-
- ///
- /// 菜单模块
- ///
- public void ShowCustomMenu()
- {
- do
- {
- Console.WriteLine();
- Console.WriteLine("##########欢迎使用自动银行服务##########");
- Console.WriteLine("1.存款 2.取款 3.转账 4.查询 5.退出");
- Console.WriteLine("##################################################");
- Console.Write("请选择 <<< ");
- string option = Console.ReadLine();
- switch (option)
- {
- /* 这里真的很有意思
- * 如果用户选择 5 执行 break 后再执行 break 退出 do-while 结构
- * 如果用户选择 1 ~ 4 则应用 continue ! 进行下一次循环!
- */
-
- default:
- // 错误提示
- Console.WriteLine("..> 输入的无效值!");
- continue; // 进行下一轮外循环
- case "1":
- // 存款模块
- continue;
- case "2":
- // 取款模块
- WithDraw(); // 调用取款方法
- continue;
- case "3":
- // 转账模块
- continue;
- case "4":
- // 查询模块
- continue;
- case "5":
- // 退出系统
- break; // 退出 switch 结构
- }
- break; // 注意这个 break 很有意思的结束死循环 _(:з」∠)_ 。。
- } while (true); // 注意此为死循环 _(:з」∠)_
- // 程序结束
- Console.ReadLine();
- }
-
- ///
- /// 开户方法
- ///
- public void CreateAccount()
- {
- /* 初始化 */
- string account = "163729837463"; // 随机指定的账号
- /* 接收数据 */
- usr._account = account; // 得到账号
- Console.Write("请输入用户名 <<< ");
- usr._name = Console.ReadLine(); // 得到用户名
- Console.Write("请输入用户密码 <<< ");
- usr._pass = Console.ReadLine(); // 得到用户密码
- Console.Write("请输入用户身份证号 <<< ");
- usr._identityNum = Console.ReadLine(); // 得到用户身份证号
- Console.Write("请输入用户存款金额 <<< ");
- usr._balance = double.Parse(Console.ReadLine()); // 得到用户存款金额
- /* 输出信息 */
- Console.WriteLine("\n\t账户 {0}\n\t用户名 {1}\n\t存款金额 {2}\n\t创建成功!",
- usr._account, usr._name, usr._balance);
- /* 调用取款业务 */
- WithDraw();
- }
-
- ///
- /// 取款方法
- ///
- public void WithDraw()
- {
- /* 准备 */
- string account; // 账号
- string pwd; // 密码
- double money; // 取款金额
- double result; // 返回余额
- /* 接收账号验证 */
- Console.WriteLine();
- Console.Write("请输入账号 <<< ");
- account = Console.ReadLine();
- if (account.Length == 0)
- { /* 此处偷懒 仅判断账号长度 _(:з」∠)_ ! */
- Console.WriteLine("..> 输入的账号不正确..\n");
- return; // 还记得吗? 熟悉的 return !如果长度不对则返回调用方法处
- }
- /* 接收密码验证 */
- Console.Write("请输入账户密码 <<< ");
- pwd = Console.ReadLine();
- if (usr._pass != pwd)
- { /* 这回没偷懒 将刚得到的密码与 User 类的 密码字段 比较 */
- Console.WriteLine("..> 密码有误!\n");
- return;
- }
- /* 取款操作 */
- Console.Write("请输入取款金额 <<< ");
- money = double.Parse(Console.ReadLine()); // 调用 double.Parse() 将得到的字符串转换为 double 再赋给 money
- result = usr.MinusMoney(money); // 调用 User 类的 取款实现模块 得到取款后的余额
- /* 结果输出 */
- if (result == -1)
- { /* 若结果 -1 则表示取款失败辽。。 */
- Console.WriteLine("..> 取款失败!\n");
- }
- else
- {
- Console.WriteLine("..> 取款成功!当前余额: {0}\n", result);
- }
- /* 程序结束 */
- Console.ReadLine();
- }
- }
-
- ///
- /// 账户类
- ///
- public class User
- {
- public string _name; // 用户名
- public string _account; // 账号
- public string _pass; // 用户密码
- public string _identityNum; // 身份证号
- public double _balance; // 存款余额
-
- ///
- /// 取款实现方法
- ///
- /// 要取得的金额
- ///
返回余额 若为 -1 则输入有误 - public double MinusMoney(double money)
- {
- if (money > 0)
- { /* 判断取款金额是否大于 0 */
- if (money <= _balance)
- { /* 判断取款金额是否大于余额 */
- _balance -= money; // -= 熟悉吗? 相当于 _balance = _balance - money
- return _balance;
- }
- else
- {
- return -1;
- }
- }
- else
- {
- return -1;
- }
- }
- }
-
- ///
- /// 主类
- ///
- class Program
- {
- ///
- /// Main 方法
- ///
- static void Main(string[] args)
- {
- Bank ba = new Bank();
- ba.CreateAccount(); // 开户成功后
- ba.ShowCustomMenu(); // 显示系统窗口 然后选择 取款 功能即可!
- }
- }
- }
VSCode demo:
- 请输入用户名 <<< first
- 请输入用户密码 <<< 123456
- 请输入用户身份证号 <<< 111111111111111111
- 请输入用户存款金额 <<< 999666
- 账户 163729837463
- 用户名 first
- 存款金额 999666
- 创建成功!
-
- 请输入账号 <<< 163729837463
- 请输入账户密码 <<< 123
- ..> 密码有误!
- ##########欢迎使用自动银行服务##########
- 1.存款 2.取款 3.转账 4.查询 5.退出
- ##################################################
- 请选择 <<< 1
- ##########欢迎使用自动银行服务##########
- 1.存款 2.取款 3.转账 4.查询 5.退出
- ##################################################
- 请选择 <<< 3
- ##########欢迎使用自动银行服务##########
- 1.存款 2.取款 3.转账 4.查询 5.退出
- ##################################################
- 请选择 <<< 4
- ##########欢迎使用自动银行服务##########
- 1.存款 2.取款 3.转账 4.查询 5.退出
- ##################################################
- 请选择 <<< 2
- 请输入账号 <<< 163729837463
- 请输入账户密码 <<< 123456
- 请输入取款金额 <<< 521
- ..> 取款成功!当前余额: 999145
- ##########欢迎使用自动银行服务##########
- 1.存款 2.取款 3.转账 4.查询 5.退出
- ##################################################
- 请选择 <<< 5
一个循环结构就能测试所有的功能哦~