当时写这个程序的时候是一个通信学院的同学让我帮忙做课程设计,要求用C语言编写.所以本程序全部是用C语言写的.

主界面:

         1.成绩录入

         2.成绩查询

         3.成绩统计

         4.退     出

a.结构体的建立:

1 //定义一个学生成绩的结构体,解决多个变量问题
 2 struct Student
 3 {
 4     int num;  //学号
 5     char name[50];//姓名
 6     float chinese;//语文
 7     float math;//数学
 8     float english;//英语
 9     float ave;//平均成绩
10     float all;//总成绩
11 }stu[50];

b.单科排名的实现:就是用了一个冒泡排序法.

当然这里面的 count 是用来统计学生的个数的,我声明了一个全局的静态变量  static count;

1 //对语文单科成绩统计
 2 for (i = 0; i < count - 1; i++)
 3 {
 4     for (j = 0; j < count - i; j++)
 5     {
 6         if (stu[j].chinese < stu[j+1].chinese)
 7         {
 8             temp = stu[j].chinese;
 9             stu[j].chinese = stu[j+1].chinese;
10             stu[j+1].chinese = temp;
11         }
12     }
13 }

c.成绩查询:

   其中查询方式有两种:

                    1.学号查询

                    2.姓名查询

这里主要讲一下姓名查询:

               姓名查询:if (0 == strcmp(nam,stu[i].name)) 用这行代码来判断输入的汉字姓名是否一样.

1 printf("        请输入姓名:");
 2 scanf("%s",nam);
 3 
 4 system("cls");
 5 printf("\n\n\n");
 6 for (i = 0; i < count; i++)
 7 {
 8     if (0 == strcmp(nam,stu[i].name))
 9     {
10         flag = 1;//这个用来标记存在这个学号的学生么? 用于下面的if()判断
11         printf("           姓 名: %s\n",stu[i].name);
12         printf("           学 号: %d\n",stu[i].num);
13         printf("           语 文: %.2f\n",stu[i].chinese);
14         printf("           数 学: %.2f\n",stu[i].math);
15         printf("           英 语: %.2f\n\n\n",stu[i].english);
16     }
17 }

下面就是程序的所有源代码:

1 //学生管理系统1.0版.cpp
  2 
  3 #include <stdio.h>
  4 #include <string.h>
  5 #include <stdlib.h>//exit(1);的头文件
  6 
  7 //定义一个学生成绩的结构体,解决多个变量问题
  8 struct Student
  9 {
 10     int num;  //学号
 11     char name[50];//姓名
 12     float chinese;//语文
 13     float math;//数学
 14     float english;//英语
 15     float ave;//平均成绩
 16     float all;//总成绩
 17 }stu[50];
 18 
 19 static count;//定义一个静态变量,记录录入成绩的学生个数。
 20 
 21 void input()
 22 {
 23     system("cls");//清屏
 24     
 25     int i = 0;
 26     
 27     printf("\n※当前目录:成绩录入\n");
 28     printf("\n注:当前版本只支持一次录入,第二次录入时直接覆盖上次录入的学生成绩.\n");
 29     printf("学生成绩录入中......(提示:学号为0,表示录入成绩结束.)\n\n");
 30     
 31     //学生成绩的录入
 32     while(1)
 33     {
 34         printf("\n你正在录入第%d个学生的成绩:\n",i+1);
 35         printf("        学号:");
 36         scanf("%d",&stu[i].num);
 37         
 38         if (0 != stu[i].num)
 39         {
 40             printf("        姓名:");
 41             scanf("%s",stu[i].name);
 42             printf("        语文:");
 43             scanf("%f",&stu[i].chinese);
 44             printf("        数学:");
 45             scanf("%f",&stu[i].math);
 46             printf("        英语:");
 47             scanf("%f",&stu[i].english);
 48             
 49             ++i;
 50         }
 51         else
 52         {
 53             if (0 == stu[0].num)
 54             {
 55                 system("cls");
 56                 printf("提示:你没有录入学生成绩.\n");
 57             }
 58             else
 59             {
 60                 system("cls");
 61                 printf("提示:学生成绩录入成功.\n");
 62             }
 63             
 64             count = i;
 65             
 66             printf("\n           按'enter'进入导航页面...");
 67             
 68             getchar();//吸收前面的回车键
 69             getchar();//暂停效果(表示从键盘接受一个字符)
 70             system("cls");
 71             
 72             break;
 73         }
 74     }
 75 }
 76 
 77 void tongji()
 78 {
 79     system("cls");
 80     
 81     int pai;
 82     int i;
 83     int j;
 84     float temp;
 85     
 86     printf("\n※当前目录:成绩统计\n");
 87     printf("\n学生单科成绩排名:\n\n\n");
 88     
 89     //判断是否录入了学生成绩
 90     if (0 == count)
 91     {
 92         printf("\n\n\n\n                提示:当前没有学生成绩记录,先去录入学生成绩\n\n\n");
 93     }
 94     else
 95     {
 96         printf("               选择要排序的单科:\n\n\n");
 97         printf("                        1.语   文\n\n");
 98         printf("                        2.数   学\n\n");
 99         printf("                        3.英   语\n\n");
100         printf("                        4.平均成绩\n\n");
101         printf("                        5.总体成绩\n\n");
102         printf("                                 我选择:[_]\b\b");
103         
104         //对总成绩和平均成绩进行统计
105         for (i = 0; i < count; i++)
106         {
107             stu[i].all = stu[i].chinese + stu[i].math + stu[i].english;
108             stu[i].ave = stu[i].all / 3;
109         }
110         
111         do
112         {
113             scanf("%d",&pai);
114             
115             switch(pai)
116             {
117             case 1:
118                 {
119                     //对语文单科成绩统计
120                     for (i = 0; i < count - 1; i++)
121                     {
122                         for (j = 0; j < count - i; j++)
123                         {
124                             if (stu[j].chinese < stu[j+1].chinese)
125                             {
126                                 temp = stu[j].chinese;
127                                 stu[j].chinese = stu[j+1].chinese;
128                                 stu[j+1].chinese = temp;
129                             }
130                         }
131                     }
132                     
133                     system("cls");
134                     printf("\n\n语文成绩单科排名:\n\n");
135                     //排序后输出成绩
136                     for (i = 0; i < count; i++)
137                     {
138                         printf("\n第%d名:  姓名:%s , 语文成绩: %.2f\t\n",i+1,stu[i].name,stu[i].chinese);
139                     }
140                 };
141                 break;
142                 
143             case 2:
144                 {
145                     //对数学单科成绩统计
146                     for (i = 0; i < count - 1; i++)
147                     {
148                         for (j = 0; j < count - i; j++)
149                         {
150                             if (stu[j].math < stu[j+1].math)
151                             {
152                                 temp = stu[j].math;
153                                 stu[j].math = stu[j+1].math;
154                                 stu[j+1].math = temp;
155                             }
156                         }
157                     }
158                     
159                     system("cls");
160                     printf("\n\n数学成绩单科排名:\n\n");
161                     //排序后输出成绩
162                     for (i = 0; i < count; i++)
163                     {
164                         printf("\n第%d名:  姓名:%s , 数学成绩: %.2f\t\n",i+1,stu[i].name,stu[i].math);
165                     }
166                 };
167                 break;
168                 
169             case 3:
170                 {
171                     //对英语单科成绩统计
172                     for (i = 0; i < count - 1; i++)
173                     {
174                         for (j = 0; j < count - i; j++)
175                         {
176                             if (stu[j].english < stu[j+1].english)
177                             {
178                                 temp = stu[j].english;
179                                 stu[j].english = stu[j+1].english;
180                                 stu[j+1].english = temp;
181                             }
182                         }
183                     }
184                     
185                     system("cls");
186                     printf("\n\n英语成绩单科排名:\n\n");
187                     //排序后输出成绩
188                     for (i = 0; i < count; i++)
189                     {
190                         printf("\n第%d名:  姓名:%s , 英语成绩: %.2f\t\n",i+1,stu[i].name,stu[i].english);
191                     }
192                 };
193                 break;
194             case 4:
195                 {
196                     //对平均成绩统计
197                     for (i = 0; i < count - 1; i++)
198                     {
199                         for (j = 0; j < count - i; j++)
200                         {
201                             if (stu[j].ave < stu[j+1].ave)
202                             {
203                                 temp = stu[j].ave;
204                                 stu[j].ave = stu[j+1].ave;
205                                 stu[j+1].ave = temp;
206                             }
207                         }
208                     }
209                     
210                     system("cls");
211                     printf("\n\n平均成绩排名:\n\n");
212                     //排序后输出成绩
213                     for (i = 0; i < count; i++)
214                     {
215                         printf("\n第%d名:  姓名:%s , 平均成绩: %.2f\t\n",i+1,stu[i].name,stu[i].ave);
216                     }
217                 };
218                 break;
219             case 5:
220                 {
221                     //对总成绩统计
222                     for (i = 0; i < count - 1; i++)
223                     {
224                         for (j = 0; j < count - i; j++)
225                         {
226                             if (stu[j].all < stu[j+1].all)
227                             {
228                                 temp = stu[j].all;
229                                 stu[j].all = stu[j+1].all;
230                                 stu[j+1].all = temp;
231                             }
232                         }
233                     }
234                     
235                     system("cls");
236                     printf("\n\n总成绩排名:\n\n");
237                     //排序后输出成绩
238                     for (i = 0; i < count; i++)
239                     {
240                         printf("\n第%d名:  姓名:%s , 总成绩: %.2f\t\n",i+1,stu[i].name,stu[i].all);
241                     }
242                 };
243                 break;
244             default : printf("输入有误!请重新输入:");
245                 break;
246         }
247         }while((1 != pai) && (2 != pai) && (3 != pai) && (4 != pai) && (5 != pai));
248     }
249     
250     printf("\n           按'enter'进入导航页面...");
251     
252     getchar();
253     getchar();
254     system("cls");
255 }
256 
257 void display()
258 {
259     system("cls");
260     
261     char nam[50];
262     int xuan;
263     int i;
264     int m;
265     int flag = 0;
266     
267     printf("\n※当前目录:成绩查询\n\n");
268     printf("注:当前版本支持学号,姓名两种查询方式,先选择查询方式:\n");
269     printf("\n     1.学号查询\n");
270     printf("\n     2.姓名查询\n");
271     printf("                   我选择:[_]\b\b");
272     
273     do
274     {
275         scanf("%d",&xuan);
276         
277         if ((1 != xuan) && (2 != xuan))
278         {
279             printf("输入错误!请重新输入:");
280         }
281     }while((1 != xuan) && (2 != xuan));
282     
283     printf("\n\n");
284     if (1 == xuan)
285     {
286         printf("        请输入学号:");
287         scanf("%d",&m);
288         
289         system("cls");
290         printf("\n\n\n");
291         for (i = 0; i < count; i++)
292         {
293             if (m == stu[i].num)
294             {
295                 flag = 1;//这个用来标记存在这个学号的学生么? 用于下面的if()判断
296                 printf("           姓 名: %s\n",stu[i].name);
297                 printf("           学 号: %d\n",stu[i].num);
298                 printf("           语 文: %.2f\n",stu[i].chinese);
299                 printf("           数 学: %.2f\n",stu[i].math);
300                 printf("           英 语: %.2f\n\n\n",stu[i].english);
301             }
302         }
303         
304         if (0 == flag)
305         {
306             printf("\n\n\n\n     提示:很遗憾,没找到你要找的学生.\n\n\n\n");
307         }
308     }
309     else
310     {
311         printf("        请输入姓名:");
312         scanf("%s",nam);
313         
314         system("cls");
315         printf("\n\n\n");
316         for (i = 0; i < count; i++)
317         {
318             if (0 == strcmp(nam,stu[i].name))
319             {
320                 flag = 1;//这个用来标记存在这个学号的学生么? 用于下面的if()判断
321                 printf("           姓 名: %s\n",stu[i].name);
322                 printf("           学 号: %d\n",stu[i].num);
323                 printf("           语 文: %.2f\n",stu[i].chinese);
324                 printf("           数 学: %.2f\n",stu[i].math);
325                 printf("           英 语: %.2f\n\n\n",stu[i].english);
326             }
327         }
328         
329         if (0 == flag)
330         {
331             printf("\n\n\n\n     提示:很遗憾,没找到你要找的学生.\n\n\n\n");
332         }
333     }
334     
335     printf("\n           按'enter'进入导航页面...");
336     
337     getchar();
338     getchar();
339     system("cls");
340 }
341 
342 int main()
343 {
344     int n;
345     
346 loop:
347     printf("\n※欢迎进入学生成绩管理系统1.0版.\n\n\n\n\n");
348     printf("                   1.成绩录入\n\n");
349     printf("                   2.成绩查询\n\n");
350     printf("                   3.成绩统计\n\n");
351     printf("                   4.退    出\n\n");
352     printf("\n                              我选择:[_]\b\b");
353     
354     //循环判断选择是是否正确
355     do
356     {
357         scanf("%d",&n);
358         
359         switch(n)
360         {
361         case 1: input(); goto loop; break; //成绩录入
362         case 2: display(); goto loop; break;  //成绩查询.
363         case 3: tongji(); goto loop; break; //成绩统计
364         case 4: printf("\n\n       已安全退出系统,感谢你的使用^@^...\n\n\n\n\n"); exit(1); break;  //退出系统.
365         default: printf("输入有误!请重新输入:"); break;
366         }
367     }while((n != 1) && (n != 2) && (n != 3));
368     
369     return 0;
370 }