zoukankan      html  css  js  c++  java
  • 成绩打分

      1 #include<stdio.h>
      2 #include<stdlib.h>
      3 #include <string.h>
      4 #define N 10
      5 
      6 
      7 struct  Data
      8 {
      9    char  Name[20];//姓名
     10    int   Num ;//编号
     11    int flags ;//评委是否打分  1:已经打分  0:未打分
     12    float Score[10];//10个人的成绩
     13    float Max;//最高分
     14    float Min;//最低分
     15    float Aver;//平均分(除去最高分和最低分)
     16 };
     17 
     18 struct Songer_info        //定义歌手信息数据结构体 
     19 {
     20    Data data ;
     21    Songer_info *next;
     22  };
     23 
     24 Songer_info *Create(Songer_info *Head);//创建
     25 void Input(Songer_info *Head);//添加信息
     26 void  Judge(Songer_info *Head);//打分
     27 void Search(Songer_info *Head); //查询
     28 Songer_info *Sort(Songer_info *Head);//冒泡排序
     29 void Look(Songer_info *Head);//查看信息
     30 void  Alter(Songer_info *Head);//修改数据
     31 void Save(Songer_info *Head);//保存文件
     32 
     33 int main()
     34 {
     35    Songer_info *Head = NULL;
     36    Head=Create(Head);
     37    int i;
     38    do                          //显示一个选择菜单 
     39    {
     40      printf("
    ");
     41      printf("**********************************
    ");
     42      printf("            歌手比赛系统          
    ");
     43      printf("**********************************
    ");
     44      printf("1************输入数据*************
    "); 
     45      printf("2************评委打分*************
    "); 
     46      printf("3************成绩排名*************
    ");
     47      printf("4************数据查询*************
    ");
     48      printf("5************修改数据*************
    ");
     49      printf("6************写入数据*************
    ");
     50      printf("7************退出系统*************
    ");
     51      printf("请选择您要进行的操作:");
     52      scanf("%d",&i);                                 //用户进行功能选择 
     53      switch(i)
     54      {                       
     55        case 1: Input(Head);                        //函数调用 
     56                break;
     57        case 2: Judge(Head);
     58                break;
     59        case 3: Look(Sort(Head));
     60                break;
     61        case 4: Search(Head);
     62                break;
     63        case 5: Alter(Head);
     64                Look(Head);
     65                break;
     66        case 6: Save(Head);
     67                break;
     68        case 7: break;
     69        default : printf("请输入正确选项!!!");
     70        break;
     71       }
     72    }while (i!=7);
     73     return 0;
     74 }
     75 
     76 Songer_info *Create(Songer_info *Head)//创建
     77 {
     78     Head = (Songer_info *)malloc(sizeof Songer_info);//分配存储块
     79     if(Head==NULL)//分配失败
     80     {
     81         printf("Fial to Create!
    ");
     82         exit(0);
     83     }
     84     Head->next=NULL;
     85     return Head;
     86 }
     87 
     88 void Input(Songer_info *Head)//添加信息
     89 {
     90     int Flags;//标记
     91     float max = 0,min = 100,sum = 0;
     92     Songer_info *Songer = NULL;
     93     Songer = Head->next;
     94     Data temp;
     95     printf("-------------------------------
    ");
     96     printf("*           添加              *
    ");
     97     printf("-------------------------------
    ");
     98     printf("**选手编号:");
     99     scanf("%d",&temp.Num);
    100    
    101     Flags = 1;
    102     while(Songer!=NULL)
    103     {
    104         if(Songer->data.Num==temp.Num)//编号存在
    105         {
    106             Flags = 0; 
    107             break;
    108         }
    109         Songer=Songer->next;
    110     }
    111 
    112     if(Flags==1)
    113     {
    114         //Songer_info *Songer=NULL;
    115         Songer_info *p=NULL;
    116         Songer_info *s=NULL;
    117         Songer=Head;
    118         p=Songer->next;
    119         while(p!=NULL)
    120         {
    121             Songer=p;
    122             p=Songer->next;
    123         }
    124         s=(Songer_info *)malloc(sizeof Songer_info);
    125         
    126                             //检查完毕,开始输入 
    127          
    128        printf("**姓名:");
    129        scanf("%s",&temp.Name);
    130 
    131        temp.flags = 0;//评委未打分
    132        s->data = temp ;
    133        Songer->next = s;
    134        s->next=p;
    135        printf("*           添加成功          *
    ");
    136     }else   printf("*           编号重复          *
    ");
    137     printf("-------------------------------
    
    ");
    138 }
    139 
    140 void  Judge(Songer_info *Head)//打分
    141 {
    142     int i,Flags;//标记
    143     float max = 0,min = 100,sum = 0;
    144     Songer_info *Songer = NULL;
    145     Songer = Head->next;
    146     Data temp;
    147     printf("-------------------------------
    ");
    148     printf("*           打分              *
    ");
    149     printf("-------------------------------
    ");
    150     printf("**选手编号:");
    151     scanf("%d",&temp.Num);
    152    
    153     Flags = 1;
    154     while(Songer!=NULL)
    155     {
    156         if(Songer->data.Num==temp.Num)//编号存在
    157         {
    158             printf("**请分别输入%d个评委的成绩:
    ",N);
    159             strcpy(temp.Name,Songer->data.Name);
    160             for(i=0;i<N;i++)
    161             {
    162                printf("第%d个评委给的成绩:",i+1);
    163                scanf("%f",&temp.Score[i]);
    164                if(max<temp.Score[i])max = temp.Score[i];
    165                if(min>temp.Score[i]) min = temp.Score[i];
    166                sum += temp.Score[i];
    167             }
    168        
    169            temp.Max = max;
    170            temp.Min = min;
    171            temp.Aver = ( sum - max - min ) / (N - 2);
    172            temp.flags = 1;//该选手已经打分
    173            Songer->data = temp;
    174            printf("*           打分成功          *
    ");
    175            Flags = 0; 
    176            break;
    177         }
    178         Songer=Songer->next;
    179     }  
    180     if(Flags==1)  printf("*           编号不存在         *
    ");
    181     printf("-------------------------------
    
    ");
    182 }
    183 
    184 void Search(Songer_info *Head)  //查询
    185 {
    186     int i;
    187     Songer_info *Songer;
    188     Songer=Head->next;
    189     int Num;
    190     printf("-------------------------------
    ");
    191     printf("*             查询             *
    ");
    192     printf("-------------------------------
    ");
    193     if(Songer!=NULL)
    194     {
    195         printf("***编号:");
    196         scanf("%d",&Num);
    197         int flags = 1;//用于判断编号是否存在
    198         while(Songer!=NULL){
    199             if(Num==Songer->data.Num) //找到相应的编号 
    200             {
    201                 printf("编号:%d	",Songer->data.Num);
    202                 printf("姓名:%s
    ",Songer->data.Name);
    203                 if(Songer->data.flags==1)
    204                 {
    205                     printf("成绩:
    ");
    206                     for(i=0;i<N;i++)    printf("%.1f  ",Songer->data.Score[i]);
    207                     printf("
    ");
    208                     printf("最高分:%.2f	",Songer->data.Max);
    209                     printf("最低分:%.2f
    ",Songer->data.Min);
    210                     printf("平均分:%.2f
    ",Songer->data.Aver);
    211                 }
    212                 flags = 0;
    213                 break;
    214             }
    215             Songer=Songer->next;
    216         }
    217         if(flags==1)printf("              没有查询到!!!
    ");
    218         printf("-------------------------------
    
    ");
    219     }
    220 } 
    221 
    222 Songer_info *Sort(Songer_info *Head)//冒泡排序
    223 {
    224     Songer_info *p,*p1,*p2,*p3;
    225     Songer_info h, t;
    226     if (Head == NULL) return NULL;
    227     h.next=Head;
    228     p=&h;
    229     while (p->next!=NULL)
    230     {
    231         p=p->next;
    232     }
    233     p=p->next=&t;
    234     while (p!=h.next)
    235     {
    236         p3=&h;
    237         p1=p3->next;
    238         p2=p1->next;
    239         while (p2!=p) 
    240         {
    241             if ((p1->data.Aver)>(p2->data.Aver))
    242             {
    243                 p1->next=p2->next;
    244                 p2->next=p1;
    245                 p3->next=p2;
    246 
    247                 p3=p2; 
    248                 p2=p1->next;
    249 
    250             } else {
    251                 p3=p1;
    252                 p1=p2;
    253                 p2=p2->next;
    254             }
    255         }
    256         p=p1;
    257     }
    258     while (p->next!=&t)
    259     {
    260         p=p->next;
    261     }
    262     p->next=NULL;
    263     return h.next;
    264 }
    265 
    266 void Look(Songer_info *Head)//查看信息
    267 {
    268     int i;
    269     Songer_info *q=NULL;
    270     q=Head->next;
    271     printf("-------------------------------
    ");
    272     printf("*           信息显示           *
    ");
    273     printf("-------------------------------
    ");
    274     
    275     while(q!=NULL)
    276     {
    277         printf("编号:%d	",q->data.Num);
    278         printf("姓名:%s
    ",q->data.Name);
    279         if(q->data.flags==1)
    280         {
    281             printf("成绩:
    ");
    282             for(i=0;i<N;i++)    printf("%.1f  ",q->data.Score[i]);
    283             printf("
    ");
    284             printf("平均分:%.2f
    ",q->data.Aver);
    285             printf("最高分:%.2f	",q->data.Max);
    286             printf("最低分:%.2f
    
    ",q->data.Min);
    287             
    288         }
    289         q=q->next;
    290     }
    291     printf("-------------------------------
    
    ");
    292 }
    293 
    294 void  Alter(Songer_info *Head)//修改数据
    295 {
    296     int i,Flags,select;//标记
    297     float max = 0,min = 100,sum = 0;
    298     Songer_info *Songer = NULL;
    299     Songer = Head->next;
    300     Data temp;
    301     printf("-------------------------------
    ");
    302     printf("*           修改              *
    ");
    303     printf("-------------------------------
    ");
    304     printf("**选手编号:");
    305     scanf("%d",&temp.Num);
    306    
    307     Flags = 1;
    308     while(Songer!=NULL)
    309     {
    310         if(Songer->data.Num==temp.Num)//编号存在
    311         {
    312             printf("**修改姓名:[1:修改;0:不修改]:");
    313             scanf("%d",&select);
    314             if(select==1)
    315             {
    316                 printf("**姓名:");
    317                 scanf("%s",&temp.Name);
    318             }
    319             printf("**修改评委分成绩:[1:修改;0:不修改]:");
    320             scanf("%d",&select);
    321             if(select==1)
    322             {
    323                 printf("**请分别输入%d个评委的成绩:
    ",N);
    324                 for(i=0;i<N;i++)
    325                 {
    326                    printf("第%d个评委给的成绩:",i+1);
    327                    scanf("%f",&temp.Score[i]);
    328                    if(max<temp.Score[i])max = temp.Score[i];
    329                    if(min>temp.Score[i]) min = temp.Score[i];
    330                    sum += temp.Score[i];
    331                 }
    332        
    333                temp.Max = max;
    334                temp.Min = min;
    335                temp.Aver = ( sum - max - min ) / (N - 2);
    336                temp.flags = 1;//该选手已经打分
    337             }
    338            Songer->data = temp;
    339            printf("*           修改成功          *
    ");
    340            Flags = 0; 
    341            break;
    342         }
    343         Songer=Songer->next;
    344     }  
    345     if(Flags==1)  printf("*           编号不存在         *
    ");
    346     printf("-------------------------------
    
    ");
    347 }
    348 
    349 void Save(Songer_info *Head)//保存文件
    350 {
    351     int i;
    352     Songer_info *q=NULL;
    353     q=Head->next;
    354 
    355     FILE *fp;
    356     if((fp=fopen("file.txt","w+"))==NULL)
    357     {
    358         printf("文件不存在
    ");
    359         
    360     }else{
    361          while(q!=NULL)
    362         {
    363              fprintf(fp,"%d	",q->data.Num);//编号存入文件
    364              fprintf(fp,"%s	",q->data.Name);//姓名存入文件
    365              fprintf(fp,"%d
    ",q->data.flags);
    366              if(q->data.flags==1)
    367              {
    368                  for(i = 0;i<N;i++)    fprintf(fp,"%.1f	",q->data.Score[i]);
    369              
    370              }
    371              fprintf(fp,"
    ");
    372              q=q->next;
    373         }
    374         printf("*         写入数据文件        *
    ");
    375         printf("-------------------------------
    
    ");
    376        fclose(fp);
    377     }
    378 }
  • 相关阅读:
    iOS开发 | 自定义不规则label
    监控redis的操作命令
    HTML常用标签
    前端学习【第一篇】: HTML内容
    MySQL数据库修改字段的长度
    python模块之:paramiko
    使用pymysql操作mysql数据库
    Python开发【第九篇】: 并发编程
    JNI调用实例
    JVM性能调优入门
  • 原文地址:https://www.cnblogs.com/minmsy/p/5240051.html
Copyright © 2011-2022 走看看