帮初中同学做的简单的课程设计

因为同学没学链表,结构体,只能简单并且麻烦的做了一个课程设计。内容为存储学生信息和考试成绩,对成绩单进行编辑,排序,删除,显示等功能。

 

代码如下:

  1 #include <stdio.h>
  2 #include <conio.h>
  3 #include <string.h>
  4 #define NUMSTU 5000      /*最大学生人数*/
  5 #define NUMSCORE 4    /*成绩个数*/
  6 #define NAMELEN 100    /*姓名的最大长度<10*/
  7 void main()
  8 {
  9     char menuItem,subItem;        /*用户输入的菜单项*/
 10     int i,j,l;
 11     unsigned long tempNo;       //用于排序对调内存的中间变量
 12     char tempName[NAMELEN];
 13     float  sum,k;
 14 
 15     /*主要数据结构*/
 16     unsigned long no[NUMSTU]={0};        /*学号*/
 17     char name[NUMSTU][NAMELEN]={""};    /*姓名*/
 18     float score[NUMSTU][NUMSCORE]={0};    /*数学、语文、英语、平均成绩*/
 19     int excellentNum[3]={0};            /*每科成绩为优秀(>=90)的人数*/
 20     char subject[NUMSCORE][NAMELEN]={"数学","语文","英语","平均"};
 21     int currentNumStu;                    /*当前表中的学生人数*/
 22     
 23     currentNumStu=0;
 24     do
 25     {    
 26         printf("|-------------------------------------------------------|\n");
 27         printf("|\t\t\t\t\t\t\t|\n");
 28         printf("|\t\t  请输入选项编号(0 ~~ 7):  \t\t|\n");
 29         printf("|\t\t\t\t\t\t\t|\n");
 30         printf("|-------------------------------------------------------|\n");
 31         printf("|\t\t\t\t\t\t\t|\n");
 32         printf("|\t\t    1——创建成绩单          \t\t|\n");
 33         printf("|\t\t    2——添加学生          \t\t|\n");
 34         printf("|\t\t    3——编辑学生          \t\t|\n");
 35         printf("|\t\t    4——删除学生          \t\t|\n");
 36         printf("|\t\t    5——统计成绩          \t\t|\n");
 37         printf("|\t\t    6——排序成绩单        \t\t|\n");
 38         printf("|\t\t    7——显示成绩         \t\t|\n");
 39         printf("|\t\t    0——退出                 \t\t|\n");
 40         printf("|-------------------------------------------------------|\n");
 41     
 42         printf("请输入选项编号(0 ~ 7): ");
 43         /*清除键盘缓冲区*/
 44         fflush(stdin);
 45         scanf("%c",&menuItem);
 46 
 47         switch(menuItem)
 48         {
 49             case '1':/*创建成绩单*/
 50                    if(currentNumStu>0)
 51                    {
 52                        printf("\n不能重新创建学生成绩单\n");
 53                    }
 54                    else
 55                    {
 56                        printf("注意:输入的结束标志为学号为0!\n");
 57                        i=0;
 58                        printf("请输入学号:");
 59                        scanf("%lu",&no[i]);
 60                        
 61                        /*清除键盘缓冲区*/
 62                        fflush(stdin);
 63                        while(no[i]!=0&&currentNumStu<NUMSTU)
 64                        {
 65                            printf("请输入姓名:");
 66                            gets(name[i]);
 67                           for(j=0; j<NUMSCORE-1; j++)
 68                           {
 69                               printf("请输入%s成绩:",subject[j]);
 70                               scanf("%f",&score[i][j]);
 71                           }
 72 
 73                           /*计算平均成绩*/
 74                           sum=0;
 75                           for(j=0; j<NUMSCORE-1; j++) 
 76                                 sum = sum+score[i][j];
 77                           score[i][3] =    sum/3;
 78                         
 79                           currentNumStu++;
 80                            if(currentNumStu==NUMSTU) 
 81                            {   printf("成绩单已满!结束创建!!\n");
 82                                break;
 83                            }
 84                            i++;
 85                            
 86                            printf("请输入学号:");
 87                            scanf("%lu",&no[i]);
 88                            /*清楚键盘缓冲区*/
 89                            fflush(stdin);
 90                        }
 91                    }
 92                    break;
 93             case '2':
 94                   /*添加学生*/
 95                    if(currentNumStu>=NUMSTU)
 96                    {
 97                        printf("成绩单已满!不可再加学生信息!!\n");
 98                    }
 99                    else
100                    {
101                        i=currentNumStu;
102                        printf("请输入学号:");
103                        scanf("%lu",&no[i]);
104                        fflush(stdin);
105                        printf("请输入姓名:");
106                        gets(name[i]);
107                        for(j=0; j<NUMSCORE-1; j++)
108                        {
109                            printf("请输入%s成绩:",subject[j]);
110                            scanf("%f",&score[i][j]);
111                        }
112 
113                           /*计算平均成绩*/
114                        sum=0;
115                        for(j=0; j<NUMSCORE-1; j++) 
116                            sum = sum+score[i][j];
117                        score[i][3] =sum/3;
118                        currentNumStu++;
119                        printf("添加成功!");
120                    }
121                    break;
122             case '3':/*编辑学生信息*/
123                    scanf("%lu",&tempNo);
124                    for(i=0;i<currentNumStu;i++)
125                        if(no[i]==tempNo)
126                            break;
127                    if(i!=currentNumStu)
128                    {
129                        for(j=0; j<NUMSCORE-1; j++)
130                        {
131                            printf("请输入%s成绩:",subject[j]);
132                            scanf("%f",&score[i][j]);
133                        }
134 
135                           /*计算平均成绩*/
136                        sum=0;
137                        for(j=0; j<NUMSCORE-1; j++) 
138                            sum = sum+score[i][j];
139                        score[i][3] =sum/3;
140                        printf("编辑成功!");
141                    }
142                    else
143                        printf("不存在该学生!\n");
144                    break;
145             case '4':/*删除指定学号的学生信息*/
146                    printf("请输入学号:");
147                    scanf("%lu",&tempNo);
148                    for(i=0;i<currentNumStu;i++)
149                        if(no[i]==tempNo)
150                            break;
151                    if(i!=currentNumStu)
152                    {
153                        for(;i<currentNumStu-1;i++)
154                        {
155                            no[i]=no[i+1];
156                            strcpy(name[i],name[i+1]);
157                            for(j=0; j<NUMSCORE; j++)
158                            {
159                               score[i][j]=score[i+1][j];
160                            }
161                        }
162                        currentNumStu--;
163                        printf("删除成功!");
164                    }
165                    else
166                        printf("不存在该学生!\n");
167                     break;
168             case '5':/*统计每科成绩>=90分以上的学生人数*/
169                     if(currentNumStu==0)
170                         printf("目前无记录,请添加成绩单信息!\n");
171                     else
172                     {
173                         for(i=0;i<currentNumStu;i++)
174                             for(j=0; j<NUMSCORE-1; j++)
175                             {
176                                 if(score[i][j]>=90)
177                                     excellentNum[j]++;
178                             }
179                         printf("%10s%10s%10s\n","数学成绩","语文成绩","英语成绩");
180                         for(j=0; j<NUMSCORE-1; j++)
181                             printf("%10d",  excellentNum[j]);
182                         printf("\n");
183                     }
184                     break;
185             case '6':/*按学号升序或降序排列实现*/
186                     printf("|---------------------------------------|\n");
187                     printf("|                                       |\n");
188                     printf("|               排序菜单                |\n");
189                     printf("|                                       |\n");
190                     printf("|---------------------------------------|\n");
191                     printf("|                                       |\n");
192                     printf("|          1——按学号升序排列          |\n");
193                     printf("|          2——按学号降序排列          |\n");
194                     printf("|---------------------------------------|\n");
195 
196                     printf("请输入选项编号(1 ~2): ");
197                     fflush(stdin);
198                     scanf("%c",&subItem);
199 
200                     switch(subItem)
201                     {
202                         case '1':
203                                 if(currentNumStu<2)
204                                 {
205                                     printf("成绩表中少于2人则不做排序!\n");
206                                 }
207                                 else
208                                 {
209                                     /*按学号升序排列*/
210                                     for(i=0;i<currentNumStu-1;i++)
211                                        for(j=i+1; j<currentNumStu; j++)
212                                        {
213                                            if(no[i]>no[j])
214                                            {
215                                                tempNo=no[i];
216                                                no[i]=no[j];
217                                                no[j]=tempNo;
218                                                strcpy(tempName,name[i]);
219                                                strcpy(name[i],name[j]);
220                                                strcpy(name[j],tempName);
221                                                for(l=0; l<NUMSCORE; l++)
222                                                {
223                                                    k=score[i][l];
224                                                    score[i][l]=score[j][l];
225                                                    score[j][l]=k;
226                                                }
227                                            }
228                                        }
229                                     printf("排序结束,请选择菜单项显示信息!\n");
230                                 }
231                                 break;
232                         case '2':
233                                 if(currentNumStu<2)
234                                 {
235                                     printf("成绩表中少于2人则不做排序!\n");
236                                 }
237                                 else
238                                 {
239                                         /*按学号降序排列*/
240                                     for(i=0;i<currentNumStu-1;i++)
241                                        for(j=i+1; j<currentNumStu; j++)
242                                        {
243                                            if(no[i]<no[j])
244                                            {
245                                                tempNo=no[i];
246                                                no[i]=no[j];
247                                                no[j]=tempNo;
248                                                strcpy(tempName,name[i]);
249                                                strcpy(name[i],name[j]);
250                                                strcpy(name[j],tempName);
251                                                for(l=0; l<NUMSCORE; l++)
252                                                {
253                                                    k=score[i][l];
254                                                    score[i][l]=score[j][l];
255                                                    score[j][l]=k;
256                                                }
257                                            }
258                                        }
259                                         printf("排序结束,请选择菜单项显示信息!\n");
260                                 }
261                                 break;
262                         default:printf("非法输入\n");
263                     }
264                 break;
265             case '7':/*显示学生信息*/
266                 if(currentNumStu==0)
267                 {
268                     printf("无学生记录,请创建成绩单!\n");
269                 }
270                 else
271                 {
272                     printf("学生信息如下:\n");
273                     printf("%15s%15s%10s%10s%10s%10s\n","学号","姓名","数学成绩","语文成绩","英语成绩","平均成绩");
274                     for(i=0; i<currentNumStu; i++)
275                     {
276                         printf("%15lu",no[i]);
277                         printf("%15s",name[i]);
278                         for(j=0; j<NUMSCORE; j++)
279                             printf("%10.1f",  score[i][j]);
280                         printf("\n");
281                     }
282                 }
283                   break;
284             case '0':printf("您选择了“0——退出”\n");break;
285             default:printf("非法输入\n");
286         }
287 
288     }while(menuItem!='0');
289 }
View Code

 

posted @ 2016-05-21 18:50  BK-X  阅读(254)  评论(0编辑  收藏  举报