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:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...
随机推荐
- SAX vs. DOM (Event vs. Tree)
http://www.saxproject.org/event.html Events vs. Trees(大XML文档用SAX) There are two major types of XML ( ...
- War Chess (hdu 3345)
http://acm.hdu.edu.cn/showproblem.php?pid=3345 Problem Description War chess is hh's favorite game:I ...
- (动态规划)matrix -- hdu -- 5569
http://acm.hdu.edu.cn/showproblem.php?pid=5569 matrix Time Limit: 6000/3000 MS (Java/Others) Memo ...
- Android 百度云推送
http://developer.baidu.com/wiki/index.php?title=docs/cplat/push/sdk/clientsdk. public class DemoAppl ...
- whu暑期集训#1
题号:SGU123----SGU131 Problem A: 题意:求斐波那契的前N项和.. 做法:直接模拟,注意得用long long Problem B: 题意:给定一个封闭的多边形,求一个点在不 ...
- Android-Java-同步方法-synchronized
1.方法具有封装性: /** * 1.方法具有封装性: */ public void addMoney(double moneyAsset) { this.moneyAsset += moneyAss ...
- C#中类的属性的获取
/// <summary> /// 将多个实体转换成一个DataTable /// </summary> /// <typeparam name="T" ...
- WPF Adorner
之前做项目时,为了实现类似微信消息数目的效果 image.png ,我之前是修改的ControlTemplate.类似于将一个带数字的控件,放在另一个控件的右上角,来实现的这个效果. 原来WPF有 ...
- 【BZOJ5306】 [Haoi2018]染色
BZOJ5306 [Haoi2018]染色 Solution xzz的博客 代码实现 #include<stdio.h> #include<stdlib.h> #include ...
- 「PKUSC2018」星际穿越(倍增)
倍增好题啊! 我们我们预处理 \(f[x][i]\) 表示 \(x\) 点最左到达的端点,\(sum[x][i]\) 表示 \(x\) 点最左到达的端点时 \(f[x][i]\sim x\) 的答案, ...