{
public struct Student //定义名为student的结构 {
public int no; //学号
public double chnese, math;//各科成绩 public double english, csharp;
public double ave, all; //平均成绩、总成绩 public string name; //学生姓名
public void ShowStuInfo() //该方法用于显示学生信息 {
//输出学生信息
Console.WriteLine(\学生信息:\ Console.Write(\学号:{0}\
Console.Write(\姓名:{0}\Console.Write(\语文:{0}\Console.Write(\数学:{0}\Console.Write(\英语:{0}\Console.Write(\Console.Write(\平均:{0}\Console.Write(\总成绩:{0}\Console.WriteLine();
} }
class Smanage //学生管理类 {
int x = 0;
//声明数组stud
Student[] stud = new Student[10];
public void Add() //用Add()方法添加学生信息 {
//学生信息的输入并以student的结构中定义的数组储存 Console.WriteLine(\请输入要添加的学生信息:\ Console.WriteLine(\请输入学号:\
stud[x].no =int.Parse(Console.ReadLine()); Console.WriteLine(\请输入姓名:\ stud[x].name = Console.ReadLine(); Console.WriteLine(\语文成绩:\
stud[x].chnese=double.Parse(Console.ReadLine());
Console.WriteLine(\数学成绩:\
stud[x].math=double.Parse(Console.ReadLine( ));
Console.WriteLine(\英语成绩:\
stud[x].english=double.Parse(Console.ReadLine());
Console.WriteLine(\成绩:\
stud[x].csharp=double.Parse(Console.ReadLine());
//定义数组对输入成绩储存
double[]infom=new double[]{stud[x].chnese,
stud[x].math,stud[x].english, stud[x].csharp }; //以循环计算总成绩、平均成绩
for (int i = 0; i < infom.Length; i++)
{
stud[x].all += infom[i];
stud[x].ave = stud[x].all / 4; }
stud[x].ShowStuInfo();//显示计算后学生信息 x= x+1; }
public void Delete() //删除信息 {
int n = -1;
int no = int.Parse(Console.ReadLine());
//用循环对获取的no进行判断
for (int i = 0; i < x; i++)
{
if (no == stud[i].no) {
n = i;
for (int c = n + 1; c < x; c++) {
//交换数组索引值对指定元素进行删除 stud[c - 1] = stud[c]; }
x=x- 1; break; } }
Console.WriteLine(\学号为{0}的学生已删除!\ if (n == -1) {
Console.WriteLine(\输入信息有误,请重新输入!\ } }
public void Searchno() //信息查询(按学号) {
int n = -1;
int no = int.Parse(Console.ReadLine());
//用循环对获取的no进行判断
for (int i = 0; i < x; i++)
{
//对输入的no判断
if (no == stud[i].no) {
n = i;
//判断后输出显示
stud[i].ShowStuInfo(); break; } }
if (n == -1) {
Console.WriteLine(\输入信息有误,请重新输入!\ } }
public void Searchname() //信息查询(按姓名) {
int n = -1;
string name = Console.ReadLine();
//用循环对获取的字符串进行判断
for (int i = 0; i < x; i++)
{
//对输入的字符串判断 if (name == stud[i].name) {
n = i;
//判断后输出显示
stud[i].ShowStuInfo(); break; } }
if (n == -1) {
Console.WriteLine(\输入信息有误,请重新输入!\ } }
public void score() //信息查询(成绩单)
{
//用循环对成绩进行排序
for (int i = x - 1; i >= 0; i--)
for (int j = 0; j <= i; j++) {
if (stud[j].all < stud[j + 1].all) {
//用冒泡排序法对学生成绩排序
stud[x] = stud[j];
stud[j] = stud[j + 1]; stud[j + 1] = stud[x]; break; } }
int[] mc = new int[x]; //用循环输出排序后成绩
for (int i = 0; i < x; i++)
{
mc[i] = i + 1;
Console.Write(mc[i]+\
Console.Write(stud[i].no+\ Console.Write(stud[i].name+\ Console.Write(stud[i].chnese+\ Console.Write(stud[i].math+\ Console.Write(stud[i].english+\ Console.Write(stud[i].csharp+\
Console.Write(stud[i].ave+\Console.Write(stud[i].all +\Console.WriteLine();
} }
public void Check() //操作模块 {
do {
Console.WriteLine(\请选择:\\n1、添加学生信息 \\n2、删除
学生信息 \\n3、查询(按学号) \\n4、查询(按姓名)\\n5、查询(成绩单)\\n6、退出\
//输入number
int number=int.Parse(Console.ReadLine());
if (number > 6 || number < 1) //对输入的number判断
{
Console.WriteLine(\输入有误请重新输入\ }
switch (number) {
case 1:
Add(); //调用Add()方法添加学生信息 break; case 2:
Console.WriteLine(\请输入要删除学生的学号:\ Delete(); //调用Delete()方法删除学生信息
break; case 3:
Console.WriteLine(\请输入学号:\
Searchno(); //调用该方法按学号查询学生信息 break; case 4:
Console.WriteLine(\请输入姓名:\
Searchname(); //调用该方法按姓名查询学生信息 break; case 5:
Console.WriteLine(\成绩单:\
Console.WriteLine(\名次\\t学号\\t姓名\\t语文\\t数
学\\t英语\\t C #\\t平均\\t总成绩\
score(); //调用该方法显示排序后的成绩单
break;
case 6:
Environment.Exit(0); //调用该方法退出程序 break;
}
Console.WriteLine(\是否继续!\ } while (true); // } }
class Test {
public static void Main(string[] args) {
//在主程序中对Check()方法调用
Smanage myuser = new Smanage();
myuser.Check();
} } }
八、 设计总结:
这是进入大学的第一次编程实训,两周的时间编出一个学生成绩管理的控制台应用程序,因为以前上机练习的时间很少,再加上对学习到的知识点没有系统的认识,所以刚开始编写起来比较困难,感觉每一天都是很茫然的过,不过这只是开始,谁都会有这种心理。编程靠的就是毅力,不能因为困难就放弃。
接下来的时间里,通过同学之间的讨论对这次编程所需要的程序结构逐渐明白了,结构虽然有了,但是细节更重要,在编程是因为一个字母的不同都会影响到整个程序的运行,因此每一次编写程序都要有细心和耐心。编出的程序一定要有自己的想法,这样才能达到锻炼自己的目的,并且能让自己在熟练掌
握所学的知识的同时收获成功的喜悦。
这一次两周的编程实训过程中,让我收获了不少:编程过程中最为重要的是我对细心谨慎也理解深,每次调试程序出现错误时会感到很苦恼,可能是一个符号一个字母或者,程序就会出错,而这样的错误又很小还不容易找到,这时我们就要有耐心和细心的去找,因为程序都是我们辛苦编出来的,不能轻易的就放弃。
在这为期两周的实训中掌握并理解了方法的调用和循环结构的实际应用,这次对Switch选择结构的应用有了很好的把握,对循环结构套用也有很深刻地理解;在Student结构中用数组进行学生信息的储存比起简单的使用数组方便多了,和同学讨论过程中有人提到用到动态数组,集合来储存,这是不错的想法,编程需要的就是这种活力。
这次编程实训可以看做是我们学习过程中的一次小的总结,它让我们对编程有了一个系统的认识,但仅仅停留在认识的层面是远远不够的,编程需要的是敢想,勤奋和坚持的毅力,这样我们在学习C#的过程中才会有更高层次的发展,让我们朝着这个方向一起努力。
九、 参考文献:
《C#程序设计教程(第二版)》 《C#行家设计手册》 《Head First C#》