利用结构体可以实现我们手动输入一些学生信息,进行自动排序打印的小程序;
首先在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("学号\t姓名\tCshap\t网页\t数据库\t总分\t");
Console.WriteLine(("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t"),a.no,a.name,a.Cshap,a.web,a.datebase,a.sum);
Console.WriteLine(("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t"), b.no,b.name,b.Cshap, b.web, b.datebase, b.sum);
Console.WriteLine(("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t"), c.no, c.name, c.Cshap, c.web, c.datebase, c.sum);
}
}
}
基本实现成绩表的一个想法,但是当学生数量多的时候程序就显得很复杂,还需要用别的方法再试,最好能用循环解决
下面看一下效果:
输入学生信息的界面:
输入完成之后打印出的界面:
程序网盘地址:
http://pan.baidu.com/s/1qWNmAUo