C#基础篇五值类型和引用类型
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace P01Method
{
class Program
{
static void Main(string[] args)
{
//int a1 = 11;
//int b2 = 22;
//Add2Num(a1, b2);//在调用方法时,为 方法括号中 传递的 值 就叫做 实参(实际参数) //Add2Num(102, 205);//在调用方式时,也可以 直接 用 把值 传递个 方法的 形参 int res = Add2NumWith(222, 555);//使用 res 变量 接收 方法的返回值
Console.WriteLine("返回值为:" + res);
M01Review();
Console.ReadLine();
} #region 2.2 返回值: 计算两个 数值 的 和,并返回给方法的调用者
/// <summary>
/// 2.2 计算两个 数值 的 和
/// </summary>
static int Add2NumWith(int a, int b)//括号中的 “变量”,叫 形参(形式参数):本质就是 方法的局部变量
{
int x = a + b;
return x;//将计算的 结果 返回给 方法 的 调用
}
#endregion #region 2.1 形参:计算两个 数值 的 和
/// <summary>
/// 2.1 计算两个 数值 的 和
/// </summary>
static void Add2Num(int a,int b)//括号中的 “变量”,叫 形参(形式参数):本质就是 方法的局部变量
{
int x = a + b;
Console.WriteLine(x);
}
#endregion #region 1.0 方法(第一个方法)
/// <summary>
/// 1.0 方法(第一个方法)
/// 方法的好处: 复用代码-方便调用 和 统一修改
/// 减少代码的冗余(重复的代码)
/// 封装代码:管理业务思路,将不同业务的代码 分开!
/// </summary>
static void ShowLogo()
{
Console.WriteLine("*****************");
Console.WriteLine("* 小白 *");
Console.WriteLine("* I love u *");
Console.WriteLine("*****************");
}
#endregion #region 0.2 值类型和引用类型
/// <summary>
/// 0.2 值类型和引用类型
/// </summary>
static void M02StatckAndHeap()
{
int a = 110;
int b = a;
b = 112;
Console.WriteLine("a=" + a);//110 int[] arr = new int[1];
arr[0] = 220;
int[] arr2 = arr;
arr2[0] = 212; Console.WriteLine("arr[0]=" + arr[0]);//212
}
#endregion #region 0.1 复习 goto M01Review()
/// <summary>
/// 0.1 复习 goto
/// </summary>
static void M01Review()
{
//goto 语句的标签:
sss:
Console.WriteLine("我在循环之前哦~~~!"); for (int row = 0; row < 5; row++)
{
for (int col = 0; col < 5; col++)
{
if (row == 0 && col == 1)
{
//1.通过满足外部循环条件 的方式 退出 外部循环
//row = 100;
//2.goto语句 退出 外部循环
goto end;//直接 根据 标签名 跳到 标签后的代码 执行
break;
}
Console.Write("*");
}
Console.Write("\n");
} //goto 语句的标签:
end:
Console.WriteLine("");
}
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace P02StuManage
{
class Program
{
//------------0. 定义静态的全局变量(类成员变量)stuCount ,arrID ,arrName ,arrAge ,arrSex---------------
#region 0.0 定义静态的全局变量(类成员变量) stuCount ,arrID ,arrName ,arrAge ,arrSex
/// <summary>
/// 学员数量
/// </summary>
static int stuCount = 0; /// <summary>
/// 学员ID种子,作为新增学员时,自动生成ID号的 标志
/// </summary>
static int stuIdSeed = 1; /// <summary>
/// 0.1 保存所有学员的 id 数组
/// </summary>
static int[] arrID = new int[2]; /// <summary>
/// 0.2 保存所有学员的 名字 的数组
/// </summary>
static string[] arrName = new string[2]; /// <summary>
/// 0.3 保存所有学员的 年龄 的数组
/// </summary>
static int[] arrAge = new int[2]; /// <summary>
/// 0.4 保存所有学员的 性别 的数组
/// </summary>
static bool[] arrSex = new bool[2];
#endregion static void Main(string[] args)
{
do
{
Console.Clear();//清空屏幕
// 方法练习:学员管理
//1.询问用户要进行的操作,需要写一个方法,接收用户的操作
int usrOpeType = GetUserOperation();
//2.根据用户操作选择,执行操作业务
OperateByOneLevelType(usrOpeType);
//3.询问用户是否要继续操作
Console.WriteLine("操作已结束,您是否要继续操作呢?(y/n)");
} while (Console.ReadLine() == "y"); Console.ReadLine();
} //--------------------------------------1.0 程序开始操作级别的 代码------------------------------------
#region 1.0 获取用户操作 int GetUserOperation()
/// <summary>
/// 1.0 获取用户操作
/// </summary>
/// <returns>返回用户选择的操作类型(1-4的一个数值)</returns>
static int GetUserOperation()
{
do
{
Console.WriteLine("欢迎使用16期基础班学员管理系统");
Console.WriteLine("请选择您要进行的操作(1-4):");
Console.WriteLine("1.新增学员");
Console.WriteLine("2.删除学员");
Console.WriteLine("3.修改学员");
Console.WriteLine("4.查询学员"); string strOpeType = Console.ReadLine();//获取用户的操作选择
int opeType = 0;
//1.1检查 用户输入 是否是 1-4 之间的数值!
if (int.TryParse(strOpeType, out opeType) && (opeType >= 1 && opeType <= 4))
{
//1.2执行操作
return opeType;//将用户选择的操作 返回 给方法的调用,【注意:return后,方法结束运行!(循环也就不执行了!)】
}
else//1.3不通过,要求用户重新输入
{
Console.WriteLine("您的输入必须是1-4之间的数值,请重新选择~");
}
} while (true);
}
#endregion #region 2.0 接收用户选择的 一级 操作选择,并根据 选择,执行不同的业务 void OperateByType(int opeType)
/// <summary>
/// 2.0 接收用户选择的 一级 操作选择,并根据 选择,执行不同的业务
/// </summary>
/// <param name="opeType">用户一级操作选择(1-4)</param>
static void OperateByOneLevelType(int opeType)
{
switch (opeType)
{
case 1://新增学员
{
AddStu();
break;
}
case 2://删除学员
{
break;
}
case 3://修改学员
{
break;
}
case 4://查询学员
{
ChooseQueryType();
break;
}
default:
{
break;
}
}
}
#endregion //--------------------------------------3.0进行各项业务操作的方法------------------------------------ //--------------------------------------3.1新增业务------------------------------------
#region 3.1要能添加学员(ID,名字,年龄,性别)void AddStu()
/// <summary>
/// 3.1要能添加学员(ID,名字,年龄,性别)
/// </summary>
static void AddStu()
{
//1.接收用户的信息
Console.Write("请输入学员的名字:");
string strStuName = Console.ReadLine(); Console.Write("请输入学员的年龄:");
string strStuAge = Console.ReadLine(); Console.Write("请输入学员的性别:(男/女)");
string strStuSex = Console.ReadLine(); //2.将用户输入的信息 分别存入 不同的数组中!
//2.1问题.数组中是否已经存满了呢?如果满了,需要扩容(创建一个新的更大的数组来存放数据)
if (stuCount >= arrID.Length)//如果 学员的个数 已经 满了,就需要 【扩容】
{
//a.为 4 个数组 做扩容,创建 老数组长度 的 2倍 的新数组
int[] arrIDTemp = new int[arrID.Length * 2];
string[] arrNameTemp = new string[arrID.Length * 2];
int[] arrAgeTemp = new int[arrID.Length * 2];
bool[] arrSexTemp = new bool[arrID.Length * 2];
//b.将老数组里的数据 复制到 新数组中
arrID.CopyTo(arrIDTemp, 0);
arrName.CopyTo(arrNameTemp, 0);
arrAge.CopyTo(arrAgeTemp, 0);
arrSex.CopyTo(arrSexTemp, 0);
//c.将新数组对象 覆盖 老数组
arrID = arrIDTemp;
arrName = arrNameTemp;
arrAge = arrAgeTemp;
arrSex = arrSexTemp;
} //3.将新学员数据 根据 已添加的学员人数,放在 数组 对应的位置
arrID[stuCount] = stuIdSeed++;//学员ID自动生成,注意:先执行 =号,再 ++
arrName[stuCount] = strStuName;
arrAge[stuCount] = int.Parse(strStuAge);
arrSex[stuCount] = strStuSex == "男" ? true : false; //4.学员总数加1
stuCount++; Console.WriteLine("新增完毕~~");
}
#endregion //--------------------------------------3.2删除业务------------------------------------
#region 3.2根据 ID 删除 void RemoveStuById()
/// <summary>
/// 3.2要能移除学员(根据【ID】移除学员/根据【名字】移除学员)
/// </summary>
static void RemoveStuById()
{
}
#endregion #region 3.3 根据 姓名 删除 void RemoveStuByName()
/// <summary>
/// 3.3 根据 姓名 删除
/// </summary>
static void RemoveStuByName()
{
}
#endregion //--------------------------------------3.4修改业务------------------------------------
#region 3.4要能修改学员(除了 ID 不能改,其它都能改) void ModifyStu()
/// <summary>
/// 3.4要能修改学员(除了 ID 不能改,其它都能改)
/// </summary>
static void ModifyStu()
{
}
#endregion //--------------------------------------3.4 查询业务 要能根据条件查询学员(根据 ID/名字/年龄段/性别 单条件查询------------------------------------ #region 3.4 根据用户的选择,使用不同的查询方式 void ChooseQueryType()
/// <summary>
/// 3.4 根据用户的选择,使用不同的查询方式
/// </summary>
static void ChooseQueryType()
{
do
{
Console.WriteLine("请输入您要进行的查询方式(1-4):");
Console.WriteLine("1.根据【学员ID】查询");
Console.WriteLine("2.根据【学员名称】查询");
Console.WriteLine("3.根据【年龄段】查询");
Console.WriteLine("4.根据【学员性别】查询");
string strOpeType = Console.ReadLine();
int opeType = 0; if (int.TryParse(strOpeType, out opeType))
{
switch (opeType)
{
case 1://根据【学员ID】查询
{
QueryStuById();
break;
}
case 2://根据【学员名称】查询
{
QueryStuByName();
break;
}
case 3://根据【年龄段】查询
{
QueryStuByAge();
break;
}
case 4://根据【学员性别】查询
{
QueryStuBySex();
break;
}
} break;
}
else
{
Console.WriteLine("请输入1-4之间的数值~!");
}
} while (true);
}
#endregion #region 3.4.1 根据【学员id】查询 void QueryStuById()
/// <summary>
/// 3.4.1 根据【学员id】查询
/// </summary>
static void QueryStuById()
{
int stuId = 0;
while (true)
{
Console.WriteLine("请输入您要查询的【学员ID】");
string strStuId = Console.ReadLine();
if (int.TryParse(strStuId, out stuId))
{
break;
}
}
//1.根据id到 学员id数组 arrID 中 查找,看是否存在 相同的 ID
//根据 学员数量 循环 查找 id数组里是否有相同的id
for (int i = 0; i < stuCount; i++)
{
if (arrID[i] == stuId)
{
ShowStuMsgByIndex(i);
break;
}
}
}
#endregion #region 3.4.2 根据【学员名称】 void QueryStuByName()
/// <summary>
/// 3.4.2 根据【学员名称】
/// </summary>
static void QueryStuByName()
{
Console.WriteLine("请输入您要查询的【学员名称】");
string strName = Console.ReadLine();
//1.根据id到 学员id数组 arrID 中 查找,看是否存在 相同的 ID
//根据 学员数量 循环 查找 id数组里是否有相同的id
for (int i = 0; i < stuCount; i++)
{
if (arrName[i] == strName)
{
ShowStuMsgByIndex(i);
break;
}
}
}
#endregion #region 3.4.3 根据【年龄段】查询 void QueryStuByAge()
/// <summary>
/// 3.4.3 根据【年龄段】查询
/// </summary>
static void QueryStuByAge()
{
Console.WriteLine("请输入 开始年龄:");
int ageBegin = int.Parse(Console.ReadLine());
Console.WriteLine("请输入 结束年龄:");
int ageEnd = int.Parse(Console.ReadLine());
if (ageBegin > ageEnd)
{
Console.WriteLine("开始年龄必须 小于 或 等于 结束年龄");
}
else
{
for (int i = 0; i < stuCount; i++)
{
//如果找到 年龄 在要求的 年龄段 之间,则显示学员
if (arrAge[i] >= ageBegin && arrAge[i] <= ageEnd)
{
ShowStuMsgByIndex(i);
}
}
}
}
#endregion #region 3.4.4 根据性别查询 void QueryStuBySex()
/// <summary>
/// 3.4.4 根据性别查询
/// </summary>
static void QueryStuBySex()
{
Console.WriteLine("请输入您要查询的【学员性别】(男/女)");
bool boolGender = Console.ReadLine() == "男";// ? true : false; //1.根据 性别 到 学员 性别数组 arrID 中 查找,看是否存在 相同的 性别 学员
for (int i = 0; i < stuCount; i++)
{
if (arrSex[i] == boolGender)
{
ShowStuMsgByIndex(i);
}
}
}
#endregion //------------------------------ #region 9.0 根据学员 下标 ,显示 在4个数组中 保存的 对应学员信息 void ShowStuMsgByIndex(int stuIndex)
/// <summary>
/// 9.0 根据学员 下标 ,显示 在4个数组中 保存的 对应学员信息
/// </summary>
/// <param name="stuIndex"></param>
static void ShowStuMsgByIndex(int stuIndex)
{
int stuID = arrID[stuIndex];
string stuName = arrName[stuIndex];
int stuAge = arrAge[stuIndex];
string strSex = arrSex[stuIndex] ? "男" : "女"; string strMsg = string.Format("学员ID:{0} - 学员名称:{1} - 学员年龄:{2} - 学员性别:{3}", stuID, stuName, stuAge, strSex);
Console.WriteLine(strMsg);
}
#endregion
}
}
C#基础篇五值类型和引用类型的更多相关文章
- .NET基础知识(01)-值类型与引用类型
常见面试题目: 1. 值类型和引用类型的区别? 2. 结构和类的区别? 3. delegate是引用类型还是值类型?enum.int[]和string呢? 4. 堆和栈的区别? 5. 什么情况下会在堆 ...
- C#基础(四)--值类型和引用类型,栈和堆的含义
本文主要是讨论栈和堆的含义,也就是讨论C#的两种类据类型:值类型和引用类型: 虽然我们在.net中的框架类库中,大多是引用类型,但是我们程序员用得最多的还是值类型. 引用类型如:string,Obje ...
- c#1所搭建的核心基础之值类型和引用类型
这个主题很重要,在.NET中做的一切其实都是在和一个值类型或者引用类型打交道. 现实世界中的值和引用 假定你在读一份非常棒的东西,希望一个朋友也去读他.于是你到复印室里复印了一份.这个时候他获得了属于 ...
- 数往知来C#之接口 值类型与引用类型 静态非静态 异常处理 GC垃圾回收 值类型引用类型内存分配<四>
C# 基础接口篇 一.多态复习 使用个new来实现,使用virtual与override -->new隐藏父类方法 根据当前类型,电泳对应的方法(成员) -->override ...
- Net基础篇_学习笔记_第十二天_面向对象继承(命名空间 、值类型和引用类型)
命名空间可以认为类是属于命名空间的. 解决类的重名问题,可以看做类的“文件夹”如果在当前项目中没有这个类的命名空间,需要我们手动的导入这个类所在的命名空间.1).用鼠标去点2).alt+shift+F ...
- 【Unity|C#】基础篇(2)——栈与堆、值类型与引用类型
传送门:https://www.cnblogs.com/moonache/p/6008048.html [笔记] 图1:值类型与引用类型 存储方式 > 值类型:数据直接存在栈中 > 引用类 ...
- C#基础知识系列二(值类型和引用类型、可空类型、堆和栈、装箱和拆箱)
前言 之前对几个没什么理解,只是简单的用过可空类型,也是知道怎么用,至于为什么,还真不太清楚,通过整理本文章学到了很多知识,也许对于以后的各种代码优化都有好处. 本文的重点就是:值类型直接存储其值,引 ...
- c#基础系列1---深入理解值类型和引用类型
"大菜":源于自己刚踏入猿途混沌拾起,自我感觉不是一般的菜,因而得名"大菜",于自身共勉. 不知不觉已经踏入坑已10余年之多,对于c#多多少少有一点自己的认识, ...
- C#学习笔记(基础知识回顾)之值类型和引用类型
一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...
随机推荐
- EL表达式总结
EL表达式是在JSP中使用的 EL表达式的作用:简化jsp文件中的<% %>. [EL的概述] 什么是EL: 为什么学习EL: * 简化JSP的代码,而且减少<%%> 使用EL ...
- 第74讲:从Spark源码的角度思考Scala中的模式匹配
今天跟随王老师学习了从源码角度去分析scala中的模式匹配的功能.让我们看看源码中的这一段模式匹配: 从代码中我们可以看到,case RegisterWorker(id,workerHost,.... ...
- POJ3177tarjan缩点_构建双连通图
POJ3177tarjan缩点_构建双连通图 根据题意利用tarjan算法进行缩点处理后变成连通无环图,也可以说是一颗树,而且边是双向的所以,如果把这个图变成双连通,那就要对所有度为1的点进行加边处理 ...
- appcompat_v7报错
appcompat_v7如果报找不到资源,value-xx出错.一般就是因为appcompat_v7的版本问题,直接修改api版本至appcompat_v7对应value的最高版本. 我的v7包最高对 ...
- excel查找某一列的值在、不在另一列中
统计中遇到找出一列的值不在另一列的需求: 找出A列中不在B列的值 方法如下: 使用countif函数 比如找出A列中不在B列的值: 在C1中输入 COUNTIF(B:B,A1) 下拉单元格,在首行添加 ...
- 团队项目第6周 - Alpha阶段项目复审 - 天冷记得穿秋裤队
团队项目第六周 - Alpha阶段项目复审 - 天冷记得穿秋裤队 经小组讨论得出以下排名 小组 优点 缺点,bug报告 最终名次 冲鸭队 一款融合了2048和俄罗斯方块的小游戏,题材十分新颖,游戏充满 ...
- oc门
OC门电路,即集电极开路输出结构门电路,电路结构图为:
- 从0开始学Python---01
1.开始 Vim test.py #!/usr/bin/python print "hello,world!"; chmod +x test.py ./test.py 2.基本知 ...
- Java设计模式详尽资料
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- 9.json和jsonpath
数据提取之JSON与JsonPATH JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适 ...