C语言综合案例:学生成绩管理系统
需求
1.存储最多50名学生的信息(不利用结构体)
2.每个学生包罗:
- 学号(字符数组)
- 姓名(字符数组)
- 3门课程成绩(一维数组)
3.实现功能菜单:
- 添加学生信息
- 显示所有学生信息
- 盘算学生匀称分
- 查找最高分科目
- 退出系统
代码
- /*************************************************************************
- > File Name: demo.c
- > Author: 张扣
- > Description:C语言综合案例:学生成绩管理系统
- > Created Time: 2025年02月27日 星期四 21时10分38秒
- ************************************************************************/
- #include <stdio.h>
- #include <string.h>
- //常量定义
- #define MAX_STU 50 //定义学生数量
- #define NAME_LEN 20 //名字的最大长度
- #define ID_LEN 8 //学号的最大长度
- #define COURSE_NUM 3 //课程数量
- //全局数组实现数据存储
- char stu_id[MAX_STU][ID_LEN]; //学号二维数组
- char stu_name[MAX_STU][NAME_LEN]; //姓名二维数组
- int scores[MAX_STU][COURSE_NUM]; //成绩二维数组
- int stu_count = 0; //当前实际学生数
- /**
- *输入校验成绩
- *course 课程名称
- */
- int get_valid_score(const char* course)//const修饰的变量,值不能改变
- {
- int score;
- while(1)
- {
- printf("请输入%s成绩(0~100):",course);
- //校验:1.校验输入的数据格式 2.校验成绩的范围是否正确
- if(scanf("%d",&score == 1 && score >= 0 && score <= 100))
- {
- return score;
- }
- //输入有误
- while(getchar() != '\n'); //清空输入缓冲区
- printf("成绩输入有误!\n");
- }
- }
- /**
- *添加学生信息
- */
- void add_student()
- {
- //判断数组是否已经存满
- if(stu_count >= MAX_STU)
- {
- printf("存储已满!\n");
- return;//函数返回,后续代码不再执行
- }
- printf("\n---添加第%d个学生---\n",stu_count + 1);
- //输入学号
- printf("请输入学号:");
- scanf("%s",stu_id[stu_count]);
- //输入姓名
- printf("请输入姓名:");
- getchar();
- scanf("%[^\n]",stu_name[stu_count]);//%[^\n]匹配除了\n以外的输入
- //输入各科成绩
- scores[stu_count][0] = get_valid_score("语文");
- scores[stu_count][1] = get_valid_score("数学");
- scores[stu_count][2] = get_valid_score("英语");
- stu_count++;
- }
- /**
- *显示所有学生信息
- */
- void show_all()
- {
- if(stu_count == 0)
- {
- printf("暂无学生信息!\n");
- return;//跳出函数,后续代码不执行
- }
- //格式化输出信息
- printf("\n%-12s%-20s%-12s%-12s%-12s\n","学号","姓名","语文","数学","英语");
- for(int i = 0; i < stu_count; i++)
- {
- //获取学号和姓名
- printf("%-12s%-20s",stu_id[i],stu_name[i]);
- for(int j = 0; j < COURSE_NUM; j++)
- {
- printf("%-12d",scores[i][j]);
- }
- printf("\n");
- }
- printf("\n");
- }
- /**
- *计算平均分
- */
- void calc_average()
- {
- if(stu_count == 0)
- {
- printf("暂无数据!\n");
- return;
- }
- char target_id[ID_LEN];
- printf("请输入要查询的学号:");
- scanf("%s",target_id);
- for(int i = 0; i < stu_count; i++)
- {
- if(strcmp(stu_id[i],target_id) == 0)
- {
- float sum = 0;
- for(int j = 0; j < COURSE_NUM; j++)
- {
- sum += scores[i][j];
- }
- printf("平均分:%.2f\n",sum/COURSE_NUM);
- return;
- }
- }
- printf("未找到该学生!\n");
- }
- /**
- *查找最高分科目
- */
- void find_max()
- {
- int max_score = -1;
- char max_course[20];
- char max_stu[NAME_LEN];
- for(int i = 0; i < stu_count; i++)
- {
- for(int j = 0; j < COURSE_NUM; j++)
- {
- if(scores[i][j] > max_score)
- {
- max_score = scores[i][j];
- //最高成绩对应的姓名
- strcpy(max_stu,stu_name[i]);
- switch(j)
- {
- case 0:
- strcpy(max_course,"语文");
- break;
- case 1:
- strcpy(max_course,"数学");
- break;
- case 2:
- strcpy(max_course,"英语");
- break;
- }
- }
- }
- }
- if(max_score != -1)
- {
- printf("最高分记录:%s的%s获得%d分\n",max_stu,max_course,max_score);
- }
- else
- {
- printf("暂无数据!\n");
- }
- }
- int main(int argc,char *argv[])
- {
- //定义一个变量,用来接收用户的输入
- int choice;
- while(1)
- {
- //设计头
- printf("\n=== 学生成绩管理系统 v1.0 ===\n");
- printf("1.添加学生信息\n");
- printf("2.显示所有学生信息\n");
- printf("3.查看平均分\n");
- printf("4.查看最高分\n");
- printf("5.退出系统\n");
- printf("请选择操作:");
- //过滤非数字
- int result = scanf("%d",&choice);
- //该判断的作用,检测是否输入的是整数,输入的数据匹配scanf() == 1,不匹配scanf() != 1
- if(result != 1)
- {
- //如果输入的不是数字,就执行这个判断
- //清空输入缓冲区
- while(getchar() != '\n');
- printf("输入有误!\n");
- continue;
- }
- //过滤掉1~5以外的数字
- //校验
- switch(choice)
- {
- case 1://添加学生信息
- add_student();
- break;
- case 2://显示所有学生信息
- show_all();
- break;
- case 3://查看平均分
- calc_average();
- break;
- case 4://查找最高分
- find_max();
- break;
- case 5://退出系统
- printf("系统已退出!\n");
- return 0;
- default:
- printf("无效选项!\n");
- }
- }
- return 0;
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |