实现成绩表的初步想法

 利用结构体可以实现我们手动输入一些学生信息,进行自动排序打印的小程序;

首先在Main函数外面定义一个名字为student的结构体,下面没一个同学的信息存储都需要用到student结构体。

struct student
        {
            public int no;
            public string name;
            public int Cshap;
            public int web;
            public int datebase;
            public int sum;
      
        }  //定义一个student结构体

下面为Main函数开始;

 static void Main(string[] args)

{
            int i;  int j;//声明循环变量
            int no_x;string name_x;int Cshap_x;int web_x;int datebase_x;//定义元素变量

上面主要是定义两个循环变量i和j,i用来进行输入循环,j用来进行排序循环。no_x是输入学号的一个变量,name_x是输入名字的一个变量,Cshap_x是输入Cshap成绩的一个变量,web_x是输入网页成绩的一个变量,datebase_x是输入数据库成绩的一个变量。

            student a = new student();
            student b = new student();
            student c = new student();
            student d = new student();       //定义用于分别存放三个学生成绩的结构体,d用来进行交换

上面定义了4个student类型的结构体,a、b、c是存放三个学生成绩的结构体,d是在排序的时候用来交换数据的一个结构体。

下面是输入循环开始,总共需要输入三个学生的信息,因此i<=3,学号是自动+1,其他的信息都是需要主动输入,输入一个同学完成之后清一下屏。

 for (i = 1; i <=3; i++)
            {
                //提示输入数据,并保存在元素变量里
                no_x = i;
                Console.WriteLine("请输入第{0}位同学的姓名:", i);
                name_x = Console.ReadLine();
                Console.WriteLine("请输入第{0}位同学的Cshap成绩:", i);
                Cshap_x = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("请输入第{0}位同学的网页成绩:", i);
                web_x = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("请输入第{0}位同学的数据库成绩:", i);
                datebase_x = Convert.ToInt32(Console.ReadLine());

                Console.Clear();

//下面判断是不是第一个同学,是的话将他的基本数据存入第一个同学的结构体中,也就是a中。

 if(i==1)
                {
                        a.no = no_x;
                        a.name = name_x;
                        a.Cshap = Cshap_x;
                        a.web =web_x;
                        a.datebase = datebase_x;
                        a.sum = a.Cshap + a.web + a.datebase;

                }

//下面判断是不是第二个同学,是的话将他的基本数据存入第二个同学的结构体中,也就是b中。

                if (i == 2)
                {
                  
                        b.no = no_x;
                        b.name = name_x;
                        b.Cshap = Cshap_x;
                        b.web = web_x;
                        b.datebase = datebase_x;
                        b.sum = b.Cshap + b.web + b.datebase;
                  
                }

//下面判断是不是第三个同学,是的话将他的基本数据存入第三个同学的结构体中,也就是c中。

                if (i == 3)
                {
                   
                        c.no = no_x;
                        c.name = name_x;
                        c.Cshap = Cshap_x;
                        c.web = web_x;
                        c.datebase = datebase_x;
                        c.sum = c.Cshap + c.web + c.datebase;
                  
                }

 }

//储存完数据之后,开始排序,排序因为这里是用的a,b,c来储存的数据,暂时没想到直接用两套循环来冒泡排序的方法,可以用一个数组zf[]来存一下每个同学的总分,这样就可以用两套循环来进行排序

                for (j = 0; j < 2; j++)
                {
                    if (a.sum < b.sum)
                    {
                        d = a;
                        a = b;
                        b = d;
                    }
                     if (b.sum < c.sum)
                    {
                        d = b;
                        b = c;
                        c = d;
                       
                    }
                }

 //排序完成,进行打印,因为前面的语句已经将顺序排好,总分高的同学的数据放在了a里面,次高的放在b里面,低的放在c里面,所以打印直接按a,b,c打印就可以

            Console.WriteLine("学号 姓名 Cshap 网页 数据库 总分 ");
            Console.WriteLine(("{0} {1} {2} {3} {4} {5} "),a.no,a.name,a.Cshap,a.web,a.datebase,a.sum);
            Console.WriteLine(("{0} {1} {2} {3} {4} {5} "), b.no,b.name,b.Cshap, b.web, b.datebase, b.sum);
            Console.WriteLine(("{0} {1} {2} {3} {4} {5} "), c.no, c.name, c.Cshap, c.web, c.datebase, c.sum);

  }
        }
    }

基本实现成绩表的一个想法,但是当学生数量多的时候程序就显得很复杂,还需要用别的方法再试,最好能用循环解决

下面看一下效果:

输入学生信息的界面:
 
输入完成之后打印出的界面:
 
 
 
程序网盘地址:
原文地址:https://www.cnblogs.com/Alvin-ftd/p/3939753.html