zoukankan      html  css  js  c++  java
  • C语言学生管理系统源码分享

      1 大家好
      2 我就是如假包换的...陈玲
      3 自从运营了C语言程序设计微信公众号
      4 很多粉丝都给我备注
      5 ...奇葩
      6 实在是不敢当
      7 也被人开始叫玲玲姐
      8 我知道
      9 很多人都想看我出境
     10 我本人也有 1 年多的舞台演讲训练
     11 实话告诉大家 —— 我喜欢出境
     12 
     13 不过,既然我们做编程语言公众号的,就要去掉其他因素,我们挖掘文字本身所蕴含的力量。所以,这次分享的表达方式就是 —— 纯文字。
     14 
     15 今天的分享,只有一个目的
     16 就是上代码
     17 那么,准备好了
     18 #include<stdio.h> 
     19 #include<stdlib.h> 
     20 //结构体可以存放的学生信息最大个数,不可变变量
     21  int const MAX_LENGTH=100; 
     22  //学生信息结构体数组,最多可以存放100个学生信息 
     23  struct student{
     24     int id; //学号 
     25     char *name; //姓名 
     26     int age; //年龄
     27     float c_score; //C语言成绩 
     28     float english_score; //英语成绩 
     29     float database_score; //数据库成绩
     30     float total_score; //总分 
     31  }student_array[MAX_LENGTH]; 
     32  
     33  //学生信息数量 
     34  int student_count=0; 
     35 
     36  //函数声明 
     37  void print_all_students();
     38  void input_info(); 
     39  void query_info();
     40  void modify_info();
     41  void delete_info(); 
     42  void compute_total_score();
     43  void sort_info(); 
     44  int search_one_student(); 
     45  void print_one_student(struct student one);
     46  void delete_one_student(int student_index);
     47  char * get_item_name(int item_index);
     48  void modify_one_student(int student_index);
     49  void sort_by_id();
     50  void sort_by_c_score(); 
     51  void sort_by_english_score(); 
     52  void sort_by_database_score();
     53 
     54  //主函数 
     55  int main()
     56  {
     57     while(1)
     58     { 
     59         printf("请选择要使用的功能:
    ");
     60         printf("录入信息,请输入1,然后回车!
    ");
     61         printf("查询信息,请输入2,然后回车!
    "); 
     62         printf("修改信息,请输入3,然后回车!
    "); 
     63         printf("删除信息,请输入4,然后回车!
    "); 
     64         printf("计算总分,请输入5,然后回车!
    "); 
     65         printf("排序信息,请输入6,然后回车!
    "); 
     66         printf("输出全部,请输入0,然后回车!
    ");
     67         printf("退出程序,请输入-1,然后回车!
    "); 
     68         //函数选择变量 
     69         int function=0;
     70         //输入选择的函数编号值 
     71         scanf("%d",&function); 
     72         //根据输入的函数编号,执行对应的功能
     73         switch(function){
     74         case -1: 
     75             exit(1);
     76         case 0: 
     77             print_all_students(); 
     78             break;
     79         case 1: 
     80             input_info();
     81             break;
     82         case 2:
     83             query_info();
     84             break; 
     85         case 3: 
     86             modify_info();
     87             break; 
     88         case 4: 
     89             delete_info();
     90             break; 
     91         case 5: 
     92             compute_total_score(); 
     93             break; 
     94         case 6:
     95             sort_info(); 
     96             break; 
     97         default: 
     98             printf("请输入正确的功能编号!!!
    
    ");
     99             break;
    100         } 
    101     } 
    102     return 0; 
    103  } 
    104  
    105  //录入信息函数
    106 void input_info()
    107  {
    108     printf("当前功能————录入信息!
    "); 
    109     //判断是否还有空间 
    110     if(student_count<MAX_LENGTH)
    111     {
    112         //声明一些临时变量
    113         int id=0; char *name=(char *)malloc(100);
    114         int age=0; float c_score=0; 
    115         float english_score=0;
    116         float database_score=0; 
    117         printf("请输入学生信息,格式为:学号,姓名,年龄,C语言成绩,英语成绩,数据库成绩
    ");
    118         scanf("%d %s %d %f %f %f",&id,name,&age,&c_score,&english_score,&database_score);
    119         printf("学生信息校对:学号:%d,姓名:%s,年龄:%d,C语言成绩:%f,英语成绩:%f,数据库成绩:%f
    ",id,name,age,c_score,english_score,database_score); 
    120         //学生信息加入结构体数组 
    121         student_array[student_count].id=id;
    122         student_array[student_count].name=name;
    123         student_array[student_count].age=age;
    124         student_array[student_count].c_score=c_score; 
    125         student_array[student_count].english_score=english_score; 
    126         student_array[student_count].database_score=database_score; 
    127         student_count++; 
    128         //是否继续录入信息
    129         printf("是否继续录入信息?继续请输入y,返回主菜单输入n
    ");
    130         char go_on; 
    131         scanf("%s",&go_on); 
    132         if(go_on=='y')
    133         { 
    134             input_info();
    135         } 
    136     }
    137     else
    138     { 
    139         printf("学生结构体数据已满,可以删除一部分学生信息!
    ");
    140     }
    141  } 
    142 
    143 
    144  //查询信息函数 
    145 void query_info()
    146  {
    147     printf("当前功能————查询信息!
    ");
    148     printf("请输入学生的学号
    "); 
    149     int id=0; 
    150     scanf("%d",&id);
    151     //查找输入id学生的序号
    152     int student_index=search_one_student(id);
    153     if(student_index!=-1)
    154     {
    155         print_one_student(student_array[student_index]); 
    156     }
    157     else
    158     { 
    159         printf("没有该学号的学生!
    ");
    160     } 
    161     //是否继续查询信息 
    162     printf("是否继续查询信息?继续请输入y,返回主菜单输入n
    ");
    163     char go_on; 
    164     scanf("%s",&go_on);
    165     if(go_on=='y') 
    166         query_info();
    167  } 
    168  
    169  
    170  //修改信息函数
    171 void modify_info()
    172  { 
    173     printf("当前功能————修改信息!
    ");
    174     printf("请输入学生的学号
    ");
    175     int id=0; 
    176     scanf("%d",&id);
    177     //查找输入id学生的序号
    178     int student_index=search_one_student(id);
    179     if(student_index!=-1)
    180     { 
    181         modify_one_student(student_index); 
    182     }
    183     else
    184     { 
    185         printf("没有该学号的学生!
    ");
    186     } 
    187 } 
    188  
    189  
    190  //删除信息函数 
    191 void delete_info()
    192  { 
    193     printf("当前功能————删除信息!
    ");
    194     printf("请输入学生的学号
    "); 
    195     int id=0;
    196     scanf("%d",&id);
    197     //查找输入id学生的序号
    198     int student_index=search_one_student(id);
    199     if(student_index!=-1)
    200     { 
    201         //防止student_index被改变,传入temp_index计算
    202         int temp_index=student_index;
    203         print_one_student(student_array[temp_index]);
    204         //删除前进行确认
    205         printf("确定删除学号 %d 同学的信息?继续请输入y
    ",id);
    206         char be_true; 
    207         scanf("%s",&be_true);
    208         if(be_true=='y')
    209         { 
    210             printf("%d
    ", student_index); 
    211             //执行删除动作 
    212             delete_one_student(student_index); 
    213         } 
    214     }
    215     else
    216     { 
    217         printf("没有该学号的学生!
    "); 
    218     } 
    219     //是否继续删除信息
    220     printf("是否继续删除信息?继续请输入y,返回主菜单输入n
    ");
    221     char go_on; 
    222     scanf("%s",&go_on);
    223     if(go_on=='y') 
    224     delete_info();
    225  } 
    226  
    227  
    228  //计算总分函数 
    229 void compute_total_score()
    230  { 
    231      printf("当前功能————计算总分!
    "); 
    232     for (int i = 0; i < student_count; ++i)
    233     { 
    234          student_array[i].total_score=student_array[i].c_score+student_array[i].english_score+student_array[i].database_score; 
    235          print_one_student(student_array[i]);
    236          printf("总成绩:%f
    ", student_array[i].total_score);
    237     } 
    238     printf("总分计算完成!!!
    ");
    239  } 
    240  
    241  
    242  //成绩排序函数
    243 void sort_info()
    244  {
    245     printf("当前功能————成绩排序!
    "); 
    246     printf("排序前所有学生信息如下:
    ");
    247     print_all_students();
    248     int sort_type;
    249     while(1)
    250     { 
    251      printf("请输入排序字段,学号:1,C语言成绩:2,英语成绩:3,数据库成绩:4
    ");
    252      scanf("%d",&sort_type);
    253      if(sort_type>=1&&sort_type<=4)
    254      break; 
    255     }
    256     switch(sort_type)
    257     { 
    258     case 1: 
    259         sort_by_id(); 
    260         break; 
    261     case 2:
    262         sort_by_c_score();
    263         break;
    264     case 3: 
    265         sort_by_english_score(); 
    266         break; 
    267     case 4: 
    268         sort_by_database_score(); 
    269         break;
    270     } 
    271      printf("排序后所有学生信息如下:
    ");
    272      print_all_students(); 
    273      //是否继续删除信息 
    274      printf("是否继续排序信息?继续请输入y,返回主菜单输入n
    "); 
    275      char go_on;
    276      scanf("%s",&go_on);
    277     if(go_on=='y')
    278         sort_info();
    279  } 
    280 
    281 
    282 //根据输入的学号,遍历结构体数组,若存在该学生,返回数组下标,不存在返回-1
    283 int search_one_student(int id)
    284  {
    285     for (int i = 0; i < student_count; ++i)
    286     { 
    287         if(student_array[i].id==id)
    288         { 
    289             return i;
    290         }
    291     } 
    292     return -1; 
    293  } 
    294 
    295 
    296 //输出某个学生的信息 
    297 void print_one_student(struct student one)
    298 {
    299     printf("学生信息:学号:%d,姓名:%s,年龄:%d,C语言成绩:%f,英语成绩:%f,数据库成绩:%f
    ",one.id,one.name,one.age,one.c_score,one.english_score,one.database_score);
    300 } 
    301 
    302 
    303 //输出所有学生的信息
    304 void print_all_students()
    305 { 
    306     if(student_count==0)
    307     {
    308         printf("暂无学生信息
    
    
    ");
    309     }
    310     for (int i = 0; i < student_count; ++i)
    311     { 
    312         print_one_student(student_array[i]);
    313     } 
    314 } 
    315 
    316 
    317 void modify_one_student(int student_index)
    318 { 
    319     //修改前,输出学生信息 
    320     print_one_student(student_array[student_index]); 
    321     //字段序号初始值 
    322     int item_index=0; 
    323     //不允许修改学号字段 
    324     while(1)
    325     { 
    326         printf("请输入要修改的字段序号,姓名:1,年龄:2,C语言成绩:3,英语成绩:4,数据库成绩:5
    "); 
    327         scanf("%d",&item_index); 
    328         if(item_index>=1&&item_index<=5)
    329         break; 
    330     } 
    331     switch(item_index)
    332     { 
    333         case 1: 
    334             printf("请输入 %s 字段的新值
    ", get_item_name(item_index)); 
    335             char* item_value_1=(char *)malloc(100);
    336             ; 
    337             scanf("%s",item_value_1);
    338             student_array[student_index].name=item_value_1;
    339             break;
    340         case 2:
    341             printf("请输入 %s 字段的新值
    ", get_item_name(item_index));
    342             int item_value_2; 
    343             scanf("%d",&item_value_2);
    344             student_array[student_index].age=item_value_2;
    345             break;
    346         case 3: 
    347             printf("请输入 %s 字段的新值
    ", get_item_name(item_index));
    348             float item_value_3;
    349             scanf("%f",&item_value_3); 
    350             student_array[student_index].c_score=item_value_3;
    351             break; 
    352         case 4:
    353             printf("请输入 %s 字段的新值
    ", get_item_name(item_index));
    354             float item_value_4;
    355             scanf("%f",&item_value_4); 
    356             student_array[student_index].english_score=item_value_4;
    357             break; 
    358         case 5:
    359             printf("请输入 %s 字段的新值
    ", get_item_name(item_index)); 
    360             float item_value_5;
    361             scanf("%f",&item_value_5); 
    362             student_array[student_index].database_score=item_value_5;
    363             break; 
    364     }
    365     printf("修改成功!新的学生信息如下:
    ");
    366     //修改后输出学生信息 
    367     print_one_student(student_array[student_index]);
    368     //是否继续删除信息 
    369     printf("是否继续修改该学生信息?继续请输入y,返回主菜单输入n
    ");
    370     char go_on; 
    371     scanf("%s",&go_on);
    372     if(go_on=='y') 
    373         modify_one_student(student_index);
    374 } 
    375 
    376 
    377 //删除数组对应序号的学生信息,把i位置后面的数据组元素向前移动覆盖i,student_count计数器减1 
    378 void delete_one_student(int student_index)
    379 {
    380     for (int i = student_index; i < student_count-1; ++i) 
    381     { 
    382         student_array[i]=student_array[i+1]; 
    383     } 
    384     student_count--;
    385     printf("删除完成
    
    
    "); 
    386 } 
    387 
    388 
    389 //根据输入的字段序号,返回字段名称
    390 char * get_item_name(int item_index)
    391 { 
    392     switch(item_index)
    393     {     
    394         case 0:
    395             return "学号";     
    396         case 1: 
    397             return "姓名"; 
    398         case 2:
    399             return "年龄";
    400         case 3:
    401             return "C语言成绩"; 
    402         case 4:
    403             return "英语成绩";
    404         case 5: 
    405             return "数据库成绩";
    406         default: 
    407                 return "";
    408     } 
    409 } 
    410 
    411 
    412 //按照id排序,使用最简单的冒泡排序法
    413 void sort_by_id()
    414 { 
    415     for (int i = 0; i < student_count; ++i)
    416     {
    417         for (int j = i; j < student_count; ++j) 
    418         { 
    419             if(student_array[i].id>student_array[j].id)
    420             {                     
    421                 struct student temp=student_array[i]; 
    422                 student_array[i]=student_array[j];
    423                 student_array[j]=temp;
    424             } 
    425         } 
    426     } 
    427     printf("按照 学号 排序完成
    ");
    428 } 
    429 
    430 
    431 //按照C语言成绩排序,使用最简单的冒泡排序法
    432 void sort_by_c_score()
    433 { 
    434     for (int i = 0; i < student_count; ++i)
    435     { 
    436         for (int j = i; j < student_count; ++j)
    437         {
    438             if(student_array[i].c_score>student_array[j].c_score)
    439             { 
    440                 struct student temp=student_array[i];
    441                 student_array[i]=student_array[j]; 
    442                 student_array[j]=temp;
    443             } 
    444         } 
    445     }
    446     printf("按照 C语言成绩 排序完成
    ");
    447 } 
    448 
    449 
    450 //按照英语成绩排序,使用最简单的冒泡排序法 
    451 void sort_by_english_score()
    452 { 
    453     for (int i = 0; i < student_count; ++i)
    454     { 
    455         for (int j = i; j < student_count; ++j)
    456         { 
    457             if(student_array[i].english_score>student_array[j].english_score)
    458             { 
    459                 struct student temp=student_array[i]; 
    460                 student_array[i]=student_array[j]; 
    461                 student_array[j]=temp;
    462             }
    463         }
    464     }
    465     printf("按照 英语成绩 排序完成
    "); 
    466 } 
    467 
    468 
    469 //按照数据库成绩排序,使用最简单的冒泡排序法 
    470 void sort_by_database_score()
    471 { 
    472     for (int i = 0; i < student_count; ++i)
    473     { 
    474         for (int j = i; j < student_count; ++j)
    475         {
    476             if(student_array[i].database_score>student_array[j].database_score)
    477             { 
    478                 struct student temp=student_array[i]; 
    479                 student_array[i]=student_array[j]; 
    480                 student_array[j]=temp;
    481             } 
    482         }
    483     } 
    484     printf("按照 数据库成绩 排序完成
    ");
    485 }
    486 
    487 转发自:微信公众号 xs-cyy
  • 相关阅读:
    杭电 HDU 1279 验证角谷猜想
    C# SQL 整表插入
    iframe截取站点的部分内容
    Thrift安装介绍
    赵雅智_Swift(3)_swift凝视
    Android API 文档 离线秒开方法
    xml文件的根节点layout_width或者layout_height设置无效果的原因分析
    函数指针使用演示样例(參考Linux-内核代码)
    eclipse中的项目受svn管理
    野人与传教士问题
  • 原文地址:https://www.cnblogs.com/zhubinglong/p/6640710.html
Copyright © 2011-2022 走看看