zoukankan      html  css  js  c++  java
  • 同学课程设计的加工

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

    代码如下:

      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
  • 相关阅读:
    c# 第29节 类
    c# 第28节 面向对象概述
    c# 第27节 结构、枚举
    c# 第26节 Main方法
    c# 第25节 方法重载
    Python接口自动化之yaml配置文件
    Python接口自动化之数据驱动
    Python接口自动化之登录接口测试
    测试面试题集-逻辑推理题
    Python接口自动化之unittest单元测试
  • 原文地址:https://www.cnblogs.com/kingbk/p/5520049.html
Copyright © 2011-2022 走看看