功能:成绩管理系统包含了学生的全部信息,每个学生是一个记录,包括学号,姓名,性别,班级,各科成绩(语数外)。

系统功能:

    1.信息录入——录入学生信息;

    2.信息输出——显示所有信息;

    3.信息查询——查询单个学生信息(按学号或按姓名),按性别,班级查询;

    4.信息排序——分别按各科成绩,平均成绩,学号,姓名,总分排名;

    5.信息插入——插入一学生信息(中间插入和最后插入);

    6.信息删除——删除一学生信息;(先打出学生信息然后确认删除);

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<string.h>
  4 #define MAXSIZE 1000
  5  typedef struct
  6  {
  7      int no;
  8      char name[11];
  9      char sex[9];
 10      char cla[11];
 11      int Chinese,math,Eng,sum,average;
 12  }Datatype;
 13 
 14  typedef  struct
 15  {
 16      Datatype data[MAXSIZE];
 17      int len;
 18  }SeqList;
 19 
 20 /*录入学生信息*/
 21  void input(SeqList *L)
 22  {
 23      int i;
 24      printf("请输入学生的人数:");
 25      scanf("%d",&L->len);
 26      printf("请输入学生的学号、姓名、性别、班级、语数英成绩:\n");
 27      printf("(之间用Tab键隔开)\n\n");
 28      printf("学号   姓名    性别    班级    语文    数学    英语\n");
 29      for(i=1;i<=L->len;i++)
 30      {
 31          scanf("%d%s%s%s%d%d%d",&L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,&L->data[i].Chinese,&L->data[i].math,&L->data[i].Eng);
 32          L->data[i].sum=L->data[i].Chinese+L->data[i].math+L->data[i].Eng;
 33          L->data[i].average=(int)L->data[i].sum/3;
 34      }
 35  }
 36 
 37 /*浏览学生信息*/
 38  void display(SeqList *L)
 39  {
 40      int i;
 41      printf("学号   姓名    性别    班级    语文    数学    英语    总分    平均分\n");
 42      for(i=1;i<=L->len;i++)
 43      {
 44          printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average);
 45      }
 46  }
 47 
 48  /*按学号查找学生信息*/
 49  int search_no(SeqList *L,Datatype x)
 50  {
 51      int i=1;
 52      while(i<=L->len&&L->data[i].no!=x.no)
 53      {
 54          i++;
 55      }
 56      if(i>L->len)
 57      {
 58          return 0;
 59      }
 60      else
 61      {
 62          return i;
 63      }
 64 
 65  }
 66 
 67  /*按姓名查找学生信息*/
 68  int search_name(SeqList *L,Datatype x)
 69  {
 70      int i=1;
 71      while(i<=L->len&&strcmp(L->data[i].name,x.name)!=0)
 72      {
 73          i++;
 74      }
 75      if(i>L->len)
 76      {
 77          return 0;
 78      }
 79      else
 80      {
 81          return i;
 82      }
 83  }
 84 
 85  /*按性别查找学生信息*/
 86  void search_sex(SeqList *L,Datatype x)
 87  {
 88      int i;
 89      for(i=1;i<=L->len;i++)
 90      {
 91          if(i<=L->len&&strcmp(L->data[i].sex,x.sex)==0)
 92          {
 93              printf("学号   姓名    性别    班级    语文    数学    英语    总分    平均分\n");
 94              printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average);
 95          }
 96      }
 97  }
 98 
 99  /*按班级查找学生信息*/
100  void search_cla(SeqList *L,Datatype x)
101  {
102      int i;
103      for(i=1;i<=L->len;i++)
104      {
105          if(i<=L->len&&strcmp(L->data[i].cla,x.cla)==0)
106          {
107              printf("学号   姓名    性别    班级    语文    数学    英语    总分    平均分\n");
108              printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average);
109          }
110      }
111  }
112 
113  /*按语文成绩排序*/
114  void sort_Chinese(SeqList *L)
115  {
116      Datatype hold;
117      int pass,i;
118      for(pass=0;pass<((L->len)-1);pass++)
119      {
120          for(i=1;i<L->len;i++)
121          {
122              if(L->data[i].Chinese<L->data[i+1].Chinese)
123              {
124                  hold=L->data[i];
125                  L->data[i]=L->data[i+1];
126                  L->data[i+1]=hold;
127              }
128          }
129      }
130  }
131 
132   /*按数学成绩排序*/
133  void sort_math(SeqList *L)
134  {
135      Datatype hold;
136      int pass,i;
137      for(pass=0;pass<((L->len)-1);pass++)
138      {
139          for(i=1;i<L->len;i++)
140          {
141              if(L->data[i].math<L->data[i+1].math)
142              {
143                  hold=L->data[i];
144                  L->data[i]=L->data[i+1];
145                  L->data[i+1]=hold;
146              }
147          }
148      }
149  }
150 
151   /*按英语成绩排序*/
152  void sort_Eng(SeqList *L)
153  {
154      Datatype hold;
155      int pass,i;
156      for(pass=0;pass<((L->len)-1);pass++)
157      {
158          for(i=1;i<L->len;i++)
159          {
160              if(L->data[i].Eng<L->data[i+1].Eng)
161              {
162                  hold=L->data[i];
163                  L->data[i]=L->data[i+1];
164                  L->data[i+1]=hold;
165              }
166          }
167      }
168  }
169 
170   /*按平均分成绩排序*/
171  void sort_average(SeqList *L)
172  {
173      Datatype hold;
174      int pass,i;
175      for(pass=0;pass<((L->len)-1);pass++)
176      {
177          for(i=1;i<L->len;i++)
178          {
179              if(L->data[i].average<L->data[i+1].average)
180              {
181                  hold=L->data[i];
182                  L->data[i]=L->data[i+1];
183                  L->data[i+1]=hold;
184              }
185          }
186      }
187  }
188 
189   /*按学号排序*/
190  void sort_no(SeqList *L)
191  {
192      Datatype hold;
193      int pass,i;
194      for(pass=0;pass<((L->len)-1);pass++)
195      {
196          for(i=1;i<L->len;i++)
197          {
198              if(L->data[i].no>L->data[i+1].no)
199              {
200                  hold=L->data[i];
201                  L->data[i]=L->data[i+1];
202                  L->data[i+1]=hold;
203              }
204          }
205      }
206  }
207 
208   /*按姓名排序*/
209  void sort_name(SeqList *L)
210  {
211      Datatype hold;
212      int pass,i;
213      for(pass=0;pass<((L->len)-1);pass++)
214      {
215          for(i=1;i<L->len;i++)
216          {
217              if(strcmp(L->data[i].name,L->data[i+1].name)>0)
218              {
219                  hold=L->data[i];
220                  L->data[i]=L->data[i+1];
221                  L->data[i+1]=hold;
222              }
223          }
224      }
225  }
226 
227   /*按总分排序*/
228  void sort_sum(SeqList *L)
229  {
230      Datatype hold;
231      int pass,i;
232      for(pass=0;pass<((L->len)-1);pass++)
233      {
234          for(i=1;i<L->len;i++)
235          {
236              if(L->data[i].sum<L->data[i+1].sum)
237              {
238                  hold=L->data[i];
239                  L->data[i]=L->data[i+1];
240                  L->data[i+1]=hold;
241              }
242          }
243      }
244  }
245 
246  /*插入学生信息*/
247  void insert(SeqList *L,Datatype x)
248 {
249     int i=1,j;
250     while(i<=L->len&&(L->data[i].no<x.no))
251     {
252         i++;
253     }
254     if(L->len==MAXSIZE-1)
255     {
256         printf("系统存储空间已满,无法增加学生信息!!");
257     }
258     else
259     {
260         for(j=L->len;j>=i;j--)
261         {
262             L->data[j+1]=L->data[j];
263         }
264         L->data[i]=x;
265         L->len++;
266     }
267 }
268 
269 /*删除学生信息*/
270 void del(SeqList *L,Datatype x)
271 {
272     int i,j;
273     i=search_no(L,x);
274     if(i==0)
275     {
276         printf("学号有误!!\n");
277     }
278     else
279     {
280          for(j=i+1;j<=(L->len);j++)
281          {
282              L->data[j-1]=L->data[j];
283          }
284          L->len--;
285     }
286 }
287  void menu()
288  {
289      printf("*************************************\n");
290      printf("*         大学生成绩管理系统        *\n");
291      printf("*1----------------------录入学生信息*\n");
292      printf("*2----------------------浏览学生信息*\n");
293      printf("*3----------------------查找学生信息*\n");
294      printf("*4------------------------------排序*\n");
295      printf("*5----------------------插入学生信息*\n");
296      printf("*6----------------------删除学生信息*\n");
297      printf("*0----------------------退出管理系统*\n");
298      printf("*************************************\n");
299  }
300 
301  int main()
302  {
303      Datatype x;
304      SeqList *L;
305      int sel,k,s,i;
306      L=(SeqList *)malloc(sizeof(SeqList));
307      L->len=0;
308      printf("      欢迎使用大学生成绩管理系统         \n");
309      do
310      {
311          menu();
312          printf("\n请输入你的选择:");
313          scanf("%d",&sel);
314          switch(sel)
315          {
316              case 1:printf("\n你选择了录入学生信息:\n\n");
317                     input(L);
318                 break;
319              case 2:printf("\n你选择了浏览学生信息:\n\n");
320                     display(L);
321                 break;
322              case 3:printf("\n你选择了查找学生信息:\n\n");
323                     printf("**************************************\n");
324                     printf("*按<学号>查找请按1,按<姓名>查找请按2*\n");
325                     printf("*按<性别>查找请按3,按<班级>查找请按4*\n");
326                     printf("**************************************\n");
327                     scanf("%d",&s);
328                     if(s==1)
329                     {
330                         printf("请输入要查找的学生的学号:");
331                         scanf("%d",&x.no);
332                         k=search_no(L,x);
333                         if(k==0)
334                         {
335                             printf("学号有误!!\n");
336                         }
337                         else
338                         {
339                             printf("学号   姓名    性别    班级    语文    数学    英语    总分    平均分\n");
340                             printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[k].no,L->data[k].name,L->data[k].sex,L->data[k].cla,L->data[k].Chinese,L->data[k].math,L->data[k].Eng,L->data[k].sum,L->data[k].average);
341                         }
342                     }
343                     else if(s==2)
344                     {
345                         printf("请输入要查找的学生的姓名:");
346                         scanf("%s",x.name);
347                         k=search_name(L,x);
348                         if(k==0)
349                         {
350                             printf("姓名有误!!\n");
351                         }
352                         else
353                         {
354                             printf("学号   姓名    性别    班级    语文    数学    英语    总分    平均分\n");
355                             printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[k].no,L->data[k].name,L->data[k].sex,L->data[k].cla,L->data[k].Chinese,L->data[k].math,L->data[k].Eng,L->data[k].sum,L->data[k].average);
356                         }
357                     }
358                     else if(s==3)
359                     {
360                         printf("请输入性别(男或女):\n");
361                         scanf("%s",x.sex);
362                         search_sex(L,x);
363                     }
364                     else
365                     {
366                         printf("请输入班级:\n");
367                         scanf("%s",x.cla);
368                         search_cla(L,x);
369                     }
370                 break;
371             case 4:printf("\n你选择了排序:\n\n");
372                    printf("*********************************************\n");
373                    printf("*按<语文成绩>排序请按1,按<数学成绩>排序请按2*\n");
374                    printf("*按<英语成绩>排序请按3,按<平均成绩>排序请按4*\n");
375                    printf("*    按<学号>排序请按5,按<姓名>排序请按6    *\n");
376                    printf("*    按<总分>排序请按7                      *\n");
377                    printf("*********************************************\n");
378                    scanf("%d",&s);
379                    if(s==1)
380                    {
381                        sort_Chinese(L);
382                        printf("按语文成绩排序:\n");
383                        printf("学号   姓名    性别    班级    语文    数学    英语    总分    平均分\n");
384                        for(i=1;i<=L->len;i++)
385                        {
386                             printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average);
387                        }
388                    }
389                    if(s==2)
390                    {
391                        sort_math(L);
392                        printf("按数学成绩排序:\n");
393                        printf("学号   姓名    性别    班级    语文    数学    英语    总分    平均分\n");
394                        for(i=1;i<=L->len;i++)
395                        {
396                             printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average);
397                        }
398                    }
399                    if(s==3)
400                    {
401                        sort_Eng(L);
402                        printf("按英语成绩排序:\n");
403                        printf("学号   姓名    性别    班级    语文    数学    英语    总分    平均分\n");
404                        for(i=1;i<=L->len;i++)
405                        {
406                             printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average);
407                        }
408                    }
409                    if(s==4)
410                    {
411                        sort_average(L);
412                        printf("按平均分排序:\n");
413                        printf("学号   姓名    性别    班级    语文    数学    英语    总分    平均分\n");
414                        for(i=1;i<=L->len;i++)
415                        {
416                             printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average);
417                        }
418                    }
419                    if(s==5)
420                    {
421                        sort_no(L);
422                        printf("按学号排序:\n");
423                        printf("学号   姓名    性别    班级    语文    数学    英语    总分    平均分\n");
424                        for(i=1;i<=L->len;i++)
425                        {
426                             printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average);
427                        }
428                    }
429                    if(s==6)
430                    {
431                        sort_name(L);
432                        printf("按姓名排序:\n");
433                        printf("学号   姓名    性别    班级    语文    数学    英语    总分    平均分\n");
434                        for(i=1;i<=L->len;i++)
435                        {
436                             printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average);
437                        }
438                    }
439                    if(s==7)
440                    {
441                        sort_sum(L);
442                        printf("按总分排序:\n");
443                        printf("学号   姓名    性别    班级    语文    数学    英语    总分    平均分\n");
444                        for(i=1;i<=L->len;i++)
445                        {
446                             printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average);
447                        }
448                    }
449                 break;
450             case 5:printf("\n你选择了插入学生信息:\n\n");
451                    printf("请输入要插入的学生的学号、姓名、性别、班级、语数英成绩:\n");
452                    printf("学号   姓名    性别    班级    语文    数学    英语\n");
453                    scanf("%d%s%s%s%d%d%d",&x.no,x.name,x.sex,x.cla,&x.Chinese,&x.math,&x.Eng);
454                    x.sum=x.Chinese+x.math+x.Eng;
455                    x.average=(int)x.sum/3;
456                    insert(L,x);
457                 break;
458             case 6:printf("\n你选择了删除学生信息:\n\n");
459                    printf("请输入要删除的学生的学号:");
460                    scanf("%d",&x.no);
461                    k=search_no(L,x);
462                    if(k==0)
463                    {
464                         printf("学号有误!!\n");
465                    }
466                    else
467                    {
468                         printf("学号   姓名    性别    班级    语文    数学    英语    总分    平均分\n");
469                         printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[k].no,L->data[k].name,L->data[k].sex,L->data[k].cla,L->data[k].Chinese,L->data[k].math,L->data[k].Eng,L->data[k].sum,L->data[k].average);
470                         printf("\n是否要删除此学生的信息?\n");
471                         printf("(是请按1,否请按0)\n");
472                         printf("你的选择是:");
473                         scanf("%d",&s);
474                         if(s==1)
475                         {
476                             del(L,x);
477                         }
478                    }
479                 break;
480          }
481      }while(sel!=0);
482      printf("谢谢使用此系统!!");
483      return 0;
484  }

 

posted on 2013-11-25 13:28  ↗℡.Koen↘  阅读(1922)  评论(0编辑  收藏  举报