运用C语言班级成绩该系统实现对班级成绩的录入、显示、修改、
排序、保存等操作的管理。
2条回答 默认 最新
- it_hao528 2022-07-10 21:23关注
修改及完善之后代码(已测试)参考如下:
#include<stdio.h> #include <stdlib.h> #include <string.h> #define N 5 // 方便以后修改班级人数 #pragma warning(disable:4996) typedef struct score { int math;// int English;// }SCO; typedef struct student { int sid;//学号 char sName[10];//姓名 SCO score;//成绩 }STU; typedef struct Class { STU num[N]; //定义一个班级学生结构体数组 int count; //记录学生个数 }CLASS; void Menu();//起始菜单 void menu1();//输入学生信息与退出菜单 void ADD(CLASS* p);//录入函数 void SEE(CLASS* p);//全部显示函数 void SELID(CLASS* p);//根据学号查询函数 void SELNAME(CLASS* p);//根据姓名查询函数 void MOD(CLASS* p);//根据学号修改信息函数 void Menu() { printf("-----------------------------------------\n"); printf("| *************学生管理系统************* |\n"); printf("| 1. 学生成绩录入 2. 显示所有学生信息 |\n"); printf("| 3. 学生成绩查询 4.学生成绩降序排列 |\n"); printf("| 5. 学生成绩修改 6. 统计各种学生信息 |\n"); printf("| ***************7.退出***************** |\n"); printf("-----------------------------------------\n"); } void menu1() { printf("-------------1.输入学生信息--------------\n"); printf("-------------2.返回上一级----------------\n"); } void menu2() { printf("-------------1.输入学号查询--------------\n"); printf("-------------2.输入姓名查询--------------\n"); printf("-------------3.返回上一级----------------\n"); } void menu3() { printf("-------------1.输入密码------------------\n"); printf("-------------2.返回上一级----------------\n"); } void menu4() { printf("-------------1.数学成绩降序排序-----------\n"); printf("-------------2.英语成绩降序排序-----------\n"); printf("-------------3.返回上一级----------------\n"); } void ADD(CLASS* p) { if (p->count == N) { printf("班级已满,无法插入\n"); return; } STU temp; printf("学号 姓名 数学成绩 英语成绩\n"); rewind(stdin); scanf("%d %s %d %d", &temp.sid, temp.sName, &temp.score.math, &temp.score.English); p->num[p->count] = temp; printf("插入成功\n"); getchar(); p->count++; } void SEE(CLASS* p) { int i = 0; printf("当前班级学生信息如下:\n"); printf("学号 姓名 数学成绩 英语成绩\n"); for (i = 0; i < p->count; i++) { printf("%d %s %d %d\n", p->num[i].sid, p->num[i].sName, p->num[i].score.math, p->num[i].score.English); } return; } void SELID(CLASS* p) { int i; STU temp; rewind(stdin); scanf("%d", &temp.sid); printf("该学生信息如下:\n"); printf("学号 姓名 数学成绩 英语成绩\n"); for (i = 0; i < p->count; i++) { if (p->num[i].sid == temp.sid) { printf(" %d %s %d %d\n", p->num[i].sid, p->num[i].sName, p->num[i].score.math, p->num[i].score.English); } } if (i == p->count) { printf("该学生不存在。\n"); } return; } void SELNAME(CLASS* p) { int i; STU temp; rewind(stdin); scanf("%s", temp.sName); printf("该学生信息如下:\n"); printf("学号 姓名 数学成绩 英语成绩\n"); for (i = 0; i < p->count; i++) { if (strcmp(p->num[i].sName,temp.sName)==0) { printf(" %d %s %d %d\n", p->num[i].sid, p->num[i].sName, p->num[i].score.math, p->num[i].score.English); } } if (i == p->count) { printf("该学生不存在。\n"); } return; } void MOD(CLASS* p) { printf("请输入你想修改的学生学号\n"); int temp; scanf("%d", &temp); int i, flag = 0; for (i = 0; i < p->count; i++) { if (temp == p->num[i].sid) { flag = 1; printf("学生当前信息如下:\n"); printf("学号 姓名 数学成绩 英语成绩\n"); printf("%d %s %d %d\n", p->num[i].sid, p->num[i].sName, p->num[i].score.math, p->num[i].score.English); printf("请修改\n"); scanf("%d %s %d %d", &p->num[i].sid, p->num[i].sName, &p->num[i].score.math, &p->num[i].score.English); printf("修改成功!\n"); return; } } if (flag == 0) { printf("学号输入有误,该学生不存在\n"); return; } } // 排序 void SORT(CLASS *p, int type) { for (int i = 0; i < p->count - 1; i++) { for (int j = i + 1; j < p->count; j++) { if (type == 1) { if (p->num[i].score.math < p->num[j].score.math) { STU temp = p->num[i]; p->num[i] = p->num[j]; p->num[j] = temp; } } else if (type == 2) { if (p->num[i].score.English < p->num[j].score.English) { STU temp = p->num[i]; p->num[i] = p->num[j]; p->num[j] = temp; } } } } printf("完成按学号降序排序\n"); return; } // 统计 // 1)显示每门课程成绩最高的学生的基本信息 // 2)显示每门课程的平均成绩 // 3)显示超过某门课程平均成绩的学生人数 void STAT(CLASS *p) { if (p->count == 0) { printf("暂无学生\n"); return; } STU mMax = p->num[0]; // 数学成绩最高学生 STU eMax = p->num[0]; // 英语成绩最高学生 int mSum = 0; // 数学总成绩 int eSum = 0; // 英语总成绩 for (int i = 1; i < p->count; i++) { if (p->num[i].score.math > eMax.score.math) { mMax = p->num[i]; } if (p->num[i].score.English > eMax.score.English) { eMax = p->num[i]; } mSum += p->num[i].score.math; eSum += p->num[i].score.English; } float mAvg = 1.0 * mSum / p->count; float eAvg = 1.0 * mSum / p->count; int mUpAvgCount = 0; // 高于数学平均成绩人数 int eUpAvgCount = 0; // 高于英语平均成绩人数 for (int i = 0; i < p->count; i++) { if (p->num[i].score.math > mAvg) { mUpAvgCount++; } if (p->num[i].score.English > eAvg) { eUpAvgCount++; } } // 数学成绩统计 printf("数学成绩统计如下:\n"); printf("数学成绩最高学生信息如下:\n"); printf("学号 姓名 数学成绩 英语成绩\n"); printf("%d %s %d %d\n", mMax.sid, mMax.sName, mMax.score.math, mMax.score.English); printf("数学成绩平均分:%.2f\n", mAvg); printf("数学成绩平均分以上学生人数:%.d个\n", mUpAvgCount); // 英语成绩统计 printf("英语成绩统计如下:\n"); printf("英语成绩最高学生信息如下:\n"); printf("学号 姓名 数学成绩 英语成绩\n"); printf("%d %s %d %d\n", eMax.sid, eMax.sName, eMax.score.math, eMax.score.English); printf("英语成绩平均分:%.2f\n", eAvg); printf("英语成绩平均分以上学生人数:%.d个\n", eUpAvgCount); return; } int main(int argc, const char* argv[]) { CLASS hq51;//用结构体申请变量空间,系统分配相应内存 hq51.count = 0;//初始化学生个数 int choose, choose1; int code;//密码为123456 while (1) { Menu(); rewind(stdin); scanf("%d", &choose); switch (choose) { case 1: while (1) { menu1(); rewind(stdin); scanf(" %d", &choose1); if (choose1 == 2) { break; } switch (choose1) { case 1: ADD(&hq51); break; default: printf("输入错误,请重新输入\n"); break; } } break; case 2: SEE(&hq51); break; case 3: while (1) { menu2(); rewind(stdin); scanf(" %d", &choose1); if (choose1 == 3) { printf("choose1 == 3"); break; } switch (choose1) { case 1: SELID(&hq51); break; case 2: SELNAME(&hq51); break; default: printf("输入错误,请重新输入\n"); break; } } break; case 4: while (1) { menu4(); rewind(stdin); scanf(" %d", &choose1); if (choose1 == 3) { printf("choose1 == 3"); break; } switch (choose1) { case 1: SORT(&hq51, 1); break; case 2: SORT(&hq51, 2); break; default: printf("输入错误,请重新输入\n"); break; } } break; case 5: while (1) { menu3(); rewind(stdin); scanf(" %d", &choose1); if (choose1 == 2) { break; } switch (choose1) { case 1: rewind(stdin); scanf("%d", &code); if (code == 123456) { printf("密码输入正确\n"); MOD(&hq51); } else { printf("密码输入错误\n"); } break; default: printf("输入错误,请重新输入\n"); break; } } break; case 6: STAT(&hq51); break; case 7: exit(0); break; default: printf("输入有误,程序退出\n"); exit(-1); } system("cls"); } return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 2无用
悬赏问题
- ¥15 基于卷积神经网络的声纹识别
- ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
- ¥100 为什么这个恒流源电路不能恒流?
- ¥15 有偿求跨组件数据流路径图
- ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
- ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
- ¥15 CSAPPattacklab
- ¥15 一直显示正在等待HID—ISP
- ¥15 Python turtle 画图
- ¥15 stm32开发clion时遇到的编译问题