• C语言项目:学生成绩管理系统


    C语言项目:学生成绩管理系统

       1、数据结构:学生信息:学号、姓名、年龄、性别、3课成绩
       2、功能:
      1)增加学生记录
       (2)  删除学生记录
       (3)  查找学生信息(学号、姓名)
       (4)  修改学生信息
     (5)按照成绩排序、求平均值、最大值、最小值
       3、用户界面
       主菜单
       子菜单
       4、 批量生成测试数据
     
      1 //
      2 //  main.c
      3 //  Student System
      4 //
      5 //  Created by ma c on 15/7/22.
      6 //  Copyright (c) 2015年. All rights reserved.
      7 //  要求:编写一个学生成绩管理系统。
      8 
      9 #include <stdio.h>
     10 #include<string.h>
     11 #include<stdlib.h>
     12 #define N 50
     13 struct Student{
     14     char name[20];
     15     int sno;
     16     int age;
     17     char gender;
     18     float EnglishScore;
     19     float mathScore;
     20     float chineseScore;
     21 }stu[N]={{"zhao",1000,20,'M',98,99,97},
     22          {"zhao",1001,21,'F',97,96,95},
     23          {"qian",1002,23,'M',95,96,92},
     24          {"hong",1003,22,'F',91,93,97},
     25          {"zhou",1004,25,'M',90,90,90},
     26          {"feng",1005,21,'F',96,93,96},
     27          {"wang",1006,23,'M',97,91,90},
     28          {"chen",1007,21,'F',94,92,91},
     29          {"geng",1008,20,'F',90,99,91},
     30          {"tang",1009,24,'M',99,99,99}};
     31 
     32 //添加数据
     33 void add(struct Student stu[],int pos,int nums);
     34 
     35 
     36 //删除数据
     37 void Delete_name(struct Student *stu,char Name[]);//(按姓名)
     38 void Delete_sno(struct Student *stu,int Sno);//(按学号)
     39 
     40 
     41 //修改数据
     42 void update(struct Student stu[],int Sno,int len);
     43 
     44 
     45 //查询子菜单
     46 void menu(struct Student stu[],int m);
     47 void search(struct Student stu[],int n,char Name[]);//按姓名查询
     48 void search1(struct Student stu[],int n,int Num);//按学号查询
     49 void sort(struct Student stu[],int n); //按总分高低排序
     50 void print(struct Student stu[],int n);
     51 void My_print_sum(struct Student stu[],int n);
     52 void max_min(struct Student stu[],int n);
     53 
     54 
     55 //主菜单
     56 void PrintScreen()
     57 {
     58     printf("------------------
    ");
     59     printf("** 1.增加学生记录 **
    ");
     60     printf("** 2.删除学生记录 **
    ");
     61     printf("** 3.查找学生记录 **
    ");
     62     printf("** 4.修改学生记录 **
    ");
     63     printf("** 0.退出管理系统 **
    ");
     64     printf("------------------
    ");
     65 }
     66 
     67 //删除子菜单
     68 void deleteScreen()
     69 {
     70     printf("------------------
    ");
     71     printf("** 0.按姓名删除数据**
    ");
     72     printf("** 1.按学号删除数据**
    ");
     73     printf("** 2.返回主菜单   **
    ");
     74     printf("------------------
    ");
     75     printf("please select 0-1:");
     76 }
     77 
     78 //查找子菜单
     79 void seekScreen()
     80 {
     81     printf("-------------------------
    ");
     82     printf("****** 1.按姓名查找信息    *
    ");
     83     printf("****** 2.按学号查找信息    *
    ");
     84     printf("****** 3.查看所有学生成绩  *
    ");
     85     printf("****** 4.成绩名次排序(总分)*
    ");
     86     printf("****** 5.查看成绩最优最差  *
    ");
     87     printf("****** 6.返回主菜单       *
    ");
     88     printf("-------------------------
    ");
     89     printf("please you select 1-6:");
     90 }
     91 
     92 //定义全局静态变量,统计目前结构体数组中的人数
     93 static int count = 10;
     94 
     95 
     96 
     97 
     98 //主函数
     99 int main(int argc, const char * argv[])
    100 {
    101  int nums,temp;
    102  int snos;
    103  char names[20];
    104  while(1)
    105  {
    106     PrintScreen();
    107     printf("please press enter_key continue!
    ");
    108     getchar();
    109     printf("please select 0-4:");
    110     char c = getchar();
    111     switch(c)
    112     {
    113         case '1':
    114               printf("please student'numbers you want to add:");
    115               scanf("%d",&nums);
    116               add(stu,count,nums);      //添加数据
    117               getchar();
    118               break;
    119         case '2':
    120               deleteScreen();
    121               scanf("%d",&temp);
    122               switch(temp)
    123               {
    124                   case 0:
    125                       printf("please input delete name:");
    126                       scanf("%s",names);;
    127                       Delete_name(stu,names);  //删除数据(按姓名删除)
    128                       break;
    129                   case 1:
    130                       printf("please input delete sno:");
    131                       scanf("%d",&snos);
    132                       Delete_sno(stu,snos); //删除数据(按学号删除)
    133                       break;
    134                   case 2:
    135                       break;
    136               }
    137               getchar();
    138               break;
    139         case '3':
    140               menu(stu,count);//查找数据
    141               getchar();
    142               break;
    143         case '4':
    144               printf("please input update sno:");
    145               scanf("%d",&snos);
    146               update(stu,snos,count);     //修改数据
    147               break;
    148         case '0':
    149               exit(0);                    //退出系统
    150         default:
    151               printf("data is illeagel!
    ");
    152               getchar();
    153               break;                      //输入非法
    154     }
    155  }
    156  return 0;
    157 }
    158 
    159 
    160 
    161 //添加数据
    162 void add(struct Student stu[],int pos,int nums)//开始位置、添加人数
    163 {
    164     for(int i=pos;i<pos+nums;i++)
    165     {
    166         printf("please input name:");
    167         scanf("%s",stu[i].name);
    168         int flag = 1,sno;
    169         while(flag)
    170         {
    171           printf("please input sno:");
    172           scanf("%d",&sno);
    173             for(int j=0;j<pos;j++)
    174             {
    175                 if(stu[j].sno==sno)
    176                 {
    177                     printf("sno is exist!
    ");
    178                     break;
    179                 }
    180                 else
    181                 {
    182                     flag = 0;
    183                 }
    184             }
    185             stu[i].sno = sno;
    186         }
    187         printf("please input age:");
    188         scanf("%d",&stu[i].age);
    189         printf("please input gender:(f/m or F/M)");
    190         getchar();
    191         scanf("%c",&stu[i].gender);
    192         printf("please input EnglishScore:");
    193         scanf("%f",&stu[i].EnglishScore);
    194         printf("please input mathScore:");
    195         scanf("%f",&stu[i].mathScore);
    196         printf("please input ChineseScore:");
    197         scanf("%f",&stu[i].chineseScore);
    198         printf("学生信息添加成功!
    ");
    199     }
    200     count = count + nums;
    201 }
    202 
    203 //按学号删除
    204 void Delete_sno(struct Student *stu,int Sno)
    205 {
    206     if(count==0)
    207     {
    208         printf("成员已为空!
    ");
    209         return;
    210     }
    211     int flag=0;
    212     for(int i=0;i<count;i++)
    213     {
    214         if((stu+i)->sno==Sno)
    215         {
    216             for(int j=i;j<count;j++)
    217             {
    218                 *(stu+j)=*(stu+j+1);
    219             }
    220             printf("
    ");
    221             printf("学号为%d的学生已被删除
    ",Sno);
    222             printf("
    ");
    223             flag=1;
    224             count = count-1;
    225             break;
    226         }
    227     }
    228     if(flag==0)
    229         printf("学号%d不存在.
    ",Sno);
    230 }
    231 
    232 //按姓名删除
    233 void Delete_name(struct Student *stu,char Name[])
    234 {
    235     if(count==0)
    236     {
    237         printf("成员已为空!
    ");
    238         return;
    239     }
    240     int flag=0;
    241     int n=count;
    242     for(int i=0;i<n;i++)
    243     {
    244         if(strcmp((stu+i-flag)->name,Name)==0)
    245         {
    246             for(int j=i-flag;j<count;j++)
    247             {
    248                 *(stu+j)=*(stu+j+1);
    249             }
    250             printf("
    ");
    251             printf("学生:%s 已被删除.
    ",Name);
    252             printf("
    ");
    253             flag=flag+1;
    254             count =count -1;
    255         }
    256     }
    257     if(flag==0)
    258         printf("学生:%s 不存在.
    ",Name);
    259 }
    260 
    261 //修改数据
    262 void update(struct Student stu[],int sno,int len)
    263 {
    264     char cs,cs1,cs2,cs3;
    265     char p[20];
    266     int grade,i;
    267     for(i=0; i<len; i++)
    268     {
    269         if(sno==stu[i].sno)
    270         {
    271             printf("please ask update name?(y/n):");
    272             getchar();
    273             cs = getchar();
    274             if(cs == 'y')
    275             {
    276                 printf("please input a new name:");
    277                 scanf("%s",p);
    278                 getchar();
    279                 strcpy(stu[i].name,p);
    280                 printf("update is succeed!
    ");
    281             }
    282             
    283             printf("please ask update EnglishScore?(y/n):");
    284             cs1 = getchar();
    285             if(cs1 == 'y')
    286             {
    287                 printf("please input a new grade:");
    288                 scanf("%d",&grade);
    289                 stu[i].EnglishScore = grade;
    290                 printf("update is succeed!
    ");
    291             }
    292  
    293             printf("please ask update mathScore?(y/n):");
    294             getchar();
    295             cs2 = getchar();
    296             if(cs2 == 'y')
    297             {
    298                 printf("please input a new grade:");
    299                 scanf("%d",&grade);
    300                 stu[i].mathScore = grade;
    301                 printf("update is succeed!
    ");
    302             }
    303 
    304             printf("please ask update chineseScore?(y/n):");
    305             getchar();
    306             cs3 = getchar();
    307             if(cs3 == 'y')
    308             {
    309                 printf("please input a new grade:");
    310                 scanf("%d",&grade);
    311                 stu[i].chineseScore = grade;
    312                 printf("update is succeed!
    ");
    313                 break;
    314             }
    315             else
    316             {
    317                 getchar();
    318                 break;
    319             }
    320         }
    321         else if(i==len-1)
    322         {
    323             printf("error,don't have the sno!");
    324             break;
    325         }
    326         else
    327         {
    328             continue;
    329         }
    330     }
    331 }
    332 
    333 //查询数据
    334 void menu(struct Student stu[],int m)
    335 {
    336     int logel = 1;
    337     while(logel)
    338     {
    339         seekScreen();
    340         int n;
    341         scanf("%d",&n);
    342         char name[20];
    343         int num;
    344         switch(n)
    345         {
    346             case 1 :
    347                 printf("请输入同学的姓名: ");
    348                 scanf("%s",name);
    349                 search(stu,count,name);
    350                 break;
    351             case 2 :
    352                 printf("
    请输入同学的学号: ");
    353                 scanf("%d",&num);
    354                 search1(stu,count,num);
    355                 break;
    356             case 3:
    357                 print(stu,count);
    358                 break;
    359             case 4:
    360                 sort(stu,count);
    361                 print(stu,count);
    362                 break;
    363             case 5:
    364                 max_min(stu,count);
    365                 break;
    366             case 6:
    367                 logel = 0;
    368                 break;
    369             default:
    370                 logel = 0;
    371                 printf("输入数字有误!
    ");
    372                 break;
    373         }
    374     }
    375 }
    376 void search(struct Student stu[],int n,char Name[])
    377 {
    378     char* p= Name;
    379     int flag = 0;
    380     for(int i=0;i<n;i++)
    381     {
    382         if(strcmp(stu[i].name,p)==0)
    383         {
    384             flag = 1;
    385             My_print_sum(stu,i);
    386         }
    387     }
    388     if(flag==0)
    389     {
    390         printf("the name is not exist!
    ");
    391     }
    392 }
    393 void search1(struct Student stu[],int n,int Num)
    394 {
    395     int flag = 0;
    396     for(int i=0;i<n;i++)
    397     {
    398         if(Num==stu[i].sno)
    399         {
    400             flag = 1;
    401             My_print_sum(stu,i);
    402         }
    403     }
    404     if(flag==0)
    405     {
    406         printf("the sno is not exist!
    ");
    407     }
    408 }
    409 void sort(struct Student stu[],int n)
    410 {
    411     float sum[N];
    412     for(int i=0;i<n;i++)
    413     {
    414         sum[i]=stu[i].EnglishScore+stu[i].mathScore+stu[i].chineseScore;
    415     }
    416     for(int i=0;i<n-1;i++)
    417     {
    418         for(int j=0;j<n-1-i;j++)
    419         {
    420             if(sum[j]<sum[j+1])
    421             {
    422                 float temp1 = sum[j];
    423                 sum[j] = sum[j+1];
    424                 sum[j+1] = temp1;
    425                 
    426                 struct Student temp;
    427                 temp=stu[j];
    428                 stu[j]=stu[j+1];
    429                 stu[j+1]=temp;
    430             }
    431         }
    432     }
    433 }
    434 void max_min(struct Student stu[],int n)
    435 {
    436     sort(stu,n);
    437 
    438     printf("成绩最优的同学:");
    439     My_print_sum(stu,0);
    440     
    441     printf("成绩最差的同学:");
    442     My_print_sum(stu,n-1);
    443 }
    444 
    445 void print(struct Student stu[],int n)
    446 {
    447     for(int i=0;i<n;i++)
    448     {
    449         My_print_sum(stu,i);
    450     }
    451 }
    452 
    453 void My_print_sum(struct Student stu[],int n)
    454 {
    455     printf("
    姓名:%s,学号:%d,年龄:%d,性别:%c,英语:%.2f,数学:%.2f,语文: %.2f,总分:%.2f
    ",
    456            stu[n].name,stu[n].sno,stu[n].age,stu[n].gender,
    457            stu[n].EnglishScore,stu[n].mathScore,stu[n].chineseScore,(stu[n].EnglishScore+stu[n].mathScore+stu[n].chineseScore));
    458 }
  • 相关阅读:
    1_Selenium环境搭建
    python functools
    python 参数注解inspect
    python 堆排序
    python functools
    python 装饰器
    python 柯里化
    python 高阶函数
    python 树
    python 函数销毁
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/4745371.html
Copyright © 2020-2023  润新知