C语言综合案例:学生成绩管理系统

打印 上一主题 下一主题

主题 850|帖子 850|积分 2550

C语言综合案例:学生成绩管理系统

需求

1.存储最多50名学生的信息(不利用结构体)
2.每个学生包罗:


  • 学号(字符数组)
  • 姓名(字符数组)
  • 3门课程成绩(一维数组)
3.实现功能菜单:


  • 添加学生信息
  • 显示所有学生信息
  • 盘算学生匀称分
  • 查找最高分科目
  • 退出系统
代码

  1. /*************************************************************************
  2.   > File Name:    demo.c
  3.   > Author:       张扣
  4.   > Description:C语言综合案例:学生成绩管理系统
  5.   > Created Time: 2025年02月27日 星期四 21时10分38秒
  6. ************************************************************************/
  7. #include <stdio.h>
  8. #include <string.h>
  9. //常量定义
  10. #define MAX_STU 50      //定义学生数量
  11. #define NAME_LEN 20     //名字的最大长度
  12. #define ID_LEN 8        //学号的最大长度
  13. #define COURSE_NUM 3    //课程数量
  14. //全局数组实现数据存储
  15. char stu_id[MAX_STU][ID_LEN];       //学号二维数组
  16. char stu_name[MAX_STU][NAME_LEN];   //姓名二维数组
  17. int scores[MAX_STU][COURSE_NUM];    //成绩二维数组
  18. int stu_count = 0;                  //当前实际学生数
  19. /**
  20. *输入校验成绩
  21. *course 课程名称
  22. */
  23. int get_valid_score(const char* course)//const修饰的变量,值不能改变
  24. {
  25.     int score;
  26.     while(1)
  27.     {
  28.         printf("请输入%s成绩(0~100):",course);
  29.         //校验:1.校验输入的数据格式 2.校验成绩的范围是否正确
  30.         if(scanf("%d",&score == 1 && score >= 0 && score <= 100))
  31.         {
  32.             return score;
  33.         }
  34.         //输入有误
  35.         while(getchar() != '\n');   //清空输入缓冲区
  36.         printf("成绩输入有误!\n");
  37.     }
  38. }
  39. /**
  40. *添加学生信息
  41. */
  42. void add_student()
  43. {
  44.     //判断数组是否已经存满
  45.     if(stu_count >= MAX_STU)
  46.     {
  47.         printf("存储已满!\n");
  48.         return;//函数返回,后续代码不再执行
  49.     }
  50.     printf("\n---添加第%d个学生---\n",stu_count + 1);
  51.     //输入学号
  52.     printf("请输入学号:");
  53.     scanf("%s",stu_id[stu_count]);
  54.     //输入姓名
  55.     printf("请输入姓名:");
  56.     getchar();
  57.     scanf("%[^\n]",stu_name[stu_count]);//%[^\n]匹配除了\n以外的输入
  58.     //输入各科成绩
  59.     scores[stu_count][0] = get_valid_score("语文");
  60.     scores[stu_count][1] = get_valid_score("数学");
  61.     scores[stu_count][2] = get_valid_score("英语");
  62.     stu_count++;
  63. }
  64. /**
  65. *显示所有学生信息
  66. */
  67. void show_all()
  68. {
  69.     if(stu_count == 0)
  70.     {
  71.         printf("暂无学生信息!\n");
  72.         return;//跳出函数,后续代码不执行
  73.     }
  74.     //格式化输出信息
  75.     printf("\n%-12s%-20s%-12s%-12s%-12s\n","学号","姓名","语文","数学","英语");
  76.     for(int i = 0; i < stu_count; i++)
  77.     {
  78.         //获取学号和姓名
  79.         printf("%-12s%-20s",stu_id[i],stu_name[i]);
  80.         for(int j = 0; j <  COURSE_NUM; j++)
  81.         {
  82.             printf("%-12d",scores[i][j]);
  83.         }
  84.         printf("\n");
  85.     }
  86.     printf("\n");
  87. }
  88. /**
  89. *计算平均分
  90. */
  91. void calc_average()
  92. {
  93.     if(stu_count == 0)
  94.     {
  95.         printf("暂无数据!\n");
  96.         return;
  97.     }
  98.     char target_id[ID_LEN];
  99.     printf("请输入要查询的学号:");
  100.     scanf("%s",target_id);
  101.     for(int i = 0; i < stu_count; i++)
  102.     {
  103.         if(strcmp(stu_id[i],target_id) == 0)
  104.         {
  105.             float sum = 0;
  106.             for(int j = 0; j < COURSE_NUM; j++)
  107.             {
  108.                 sum += scores[i][j];
  109.             }
  110.             printf("平均分:%.2f\n",sum/COURSE_NUM);
  111.             return;
  112.         }
  113.     }
  114.     printf("未找到该学生!\n");
  115. }
  116. /**
  117. *查找最高分科目
  118. */
  119. void find_max()
  120. {
  121.     int max_score = -1;
  122.     char max_course[20];
  123.     char max_stu[NAME_LEN];
  124.     for(int i = 0; i < stu_count; i++)
  125.     {
  126.         for(int j = 0; j < COURSE_NUM; j++)
  127.         {
  128.             if(scores[i][j] > max_score)
  129.             {
  130.                 max_score = scores[i][j];
  131.                 //最高成绩对应的姓名
  132.                 strcpy(max_stu,stu_name[i]);
  133.                 switch(j)
  134.                 {
  135.                     case 0:
  136.                         strcpy(max_course,"语文");
  137.                         break;
  138.                     case 1:
  139.                         strcpy(max_course,"数学");
  140.                         break;
  141.                     case 2:
  142.                         strcpy(max_course,"英语");
  143.                         break;
  144.                 }
  145.             }
  146.         }
  147.     }
  148.     if(max_score != -1)
  149.     {
  150.         printf("最高分记录:%s的%s获得%d分\n",max_stu,max_course,max_score);
  151.     }
  152.     else
  153.     {
  154.         printf("暂无数据!\n");
  155.     }
  156. }
  157. int main(int argc,char *argv[])
  158. {
  159.     //定义一个变量,用来接收用户的输入
  160.     int choice;
  161.     while(1)
  162.     {
  163.         //设计头
  164.         printf("\n=== 学生成绩管理系统 v1.0 ===\n");
  165.         printf("1.添加学生信息\n");
  166.         printf("2.显示所有学生信息\n");
  167.         printf("3.查看平均分\n");
  168.         printf("4.查看最高分\n");
  169.         printf("5.退出系统\n");
  170.         printf("请选择操作:");
  171.         //过滤非数字
  172.         int result = scanf("%d",&choice);
  173.         //该判断的作用,检测是否输入的是整数,输入的数据匹配scanf() == 1,不匹配scanf() != 1
  174.         if(result != 1)
  175.         {
  176.             //如果输入的不是数字,就执行这个判断
  177.             //清空输入缓冲区
  178.             while(getchar() != '\n');
  179.             printf("输入有误!\n");
  180.             continue;
  181.         }
  182.         //过滤掉1~5以外的数字
  183.         //校验
  184.         switch(choice)
  185.         {
  186.             case 1://添加学生信息
  187.                 add_student();
  188.                 break;
  189.             case 2://显示所有学生信息
  190.                 show_all();
  191.                 break;
  192.             case 3://查看平均分
  193.                 calc_average();
  194.                 break;
  195.             case 4://查找最高分
  196.                 find_max();
  197.                 break;
  198.             case 5://退出系统
  199.                 printf("系统已退出!\n");
  200.                 return 0;
  201.             default:
  202.                 printf("无效选项!\n");
  203.         }
  204.     }
  205.     return 0;
  206. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

瑞星

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表