同学课程设计的加工

对同学的课程设计加入两个功能——文件的输入和输出。

代码如下:

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