运用C语言班级成绩该系统实现对班级成绩的录入、显示、修改、
排序、保存等操作的管理。
修改及完善之后代码(已测试)参考如下:
#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;
}
麻烦查收一下
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 2 //方便以后修改班级人数
#define M 2 //方便以后修改班级人数
#pragma warning(disable:4996)
typedef struct score {
int math;//
int English;//
}SCO;
typedef struct student {
int sid;//学号
char sName[10];//姓名
SCO score[M];//成绩
}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");
printf("-------------4.显示超过英语课程平均成绩的学生人数----------------\n");
printf("-------------5.返回上一级----------------\n");
}
void ADD(CLASS* p) {
if (p->count == N) {
printf("班级已满,无法插入\n");
return;
}
STU temp;
printf("学号 姓名 数学成绩 英语成绩\n");
rewind(stdin);
scanf("%d %s %d %d", &p->num[p->count].sid, &p->num[p->count].sName,
&p->num[p->count].score->math, &p->num[p->count].score->English);
printf("插入成功\n");
getchar();
p->count++;
}
void BubbleSortMath(CLASS* cl){
STU * num = cl->num;
int count = cl->count;
STU temp = {0};
// 以math成绩排序
for(int i=0;i<count-1;i++){
for(int j=1;j<count-i;j++){
if((num+i)->score->math < (num+j)->score->math ){ // 交换
temp = *(num+i);
*(num+i)= *(num+j);
*(num+j)= temp;
}
}
}
}
void BubbleSortEnglish(CLASS* cl){
STU * num = cl->num;
int count = cl->count;
STU temp = {0};
// 以English成绩排序
for(int i=0;i<count-1;i++){
for(int j=1;j<count-i;j++){
if((num+i)->score->English < (num+j)->score->English ){ // 交换
temp = *(num+i);
*(num+i)= *(num+j);
*(num+j)= temp;
}
}
}
}
float GetMathAver(CLASS* cl) {
STU * num = cl->num;
int count = cl->count;
float sum = 0;
// 计算数学平均成绩
for(int i=0;i<count;i++){
sum += (num+i)->score->math;
}
return sum /count;
}
float GetEnglishAver(CLASS* cl) {
STU * num = cl->num;
int count = cl->count;
float sum = 0;
// 计算数学平均成绩
for(int i=0;i<count;i++){
sum += (num+i)->score->English;
}
return sum /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);
getchar();
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);
break;
}
}
if( i== p->count){
printf("该学生不存在。\r\n");
}
return;
}
void SELNAME(CLASS* p) {
int i;
STU temp;
rewind(stdin);
scanf("%s", temp.sName);
getchar();
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);
break;
}
}
if( i== p->count){
printf("该学生不存在。\r\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");
break;
}
}
if (flag == 0) {
printf("学号输入有误,该学生不存在\n");
return;
}
}
int main(int argc, const char* argv[])
{
CLASS hq51;//用结构体申请变量空间,系统分配相应内存
hq51.count = 0;//初始化学生个数
int choose, choose1,choose2;
int code;//密码为123456
float aver = 0;
STU * num = NULL;
int count = 0;
int Num = 0;
while (1) {
Menu();
rewind(stdin);
scanf("%d", &choose);
getchar();
switch (choose) {
case 1:
while (1) {
menu1();
rewind(stdin);
scanf(" %d", &choose1);
getchar();
if (choose1 == 2) {
break;
}
switch (choose1) {
case 1:
ADD(&hq51);
break;
default:
printf("输入错误,请重新输入\n");
break;
}
}
break;
case 2:
SEE(&hq51);
getchar();
break;
case 3:
while (1) {
menu2();
rewind(stdin);
scanf("%d", &choose1);
getchar();
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:
printf("**--按数学成绩降序--**\r\n");
BubbleSortMath(&hq51);
SEE(&hq51);
printf("*******************************\r\n");
printf("**--按英语成绩降序--**\r\n");
BubbleSortEnglish(&hq51);
SEE(&hq51);
getchar();
break;
case 5:
while (1) {
menu3();
rewind(stdin);
scanf(" %d", &choose1);
getchar();
if (choose1 == 2) {
break;
}
switch (choose1) {
case 1:
rewind(stdin);
scanf(" %d", &code);
getchar();
if (code == 123456) {
printf("密码1输入正确\n");
MOD(&hq51);
}
else {
printf("密码输入错误\n");
}
break;
default:
printf("输入错误,请重新输入\n");
break;
}
}
break;
case 6:
while (1) {
menu4();
rewind(stdin);
scanf(" %d", &choose1);
getchar();
if (choose1 == 5) {
break;
}
switch (choose1) {
case 1:
STU stuinfo;
printf("课程最高成绩信息统计:\r\n");
printf("**--数学成绩最高学生信息--**\r\n");
BubbleSortMath(&hq51);
stuinfo = hq51.num[0];
printf(" %d %s %d %d\n", stuinfo.sid, stuinfo.sName,
&stuinfo.score->math,&stuinfo.score->English);
printf("*******************************\r\n");
printf("**--英语成绩最高学生信息--**\r\n");
BubbleSortEnglish(&hq51);
stuinfo = hq51.num[0];
printf(" %d %s %d %d\n", stuinfo.sid, stuinfo.sName,
&stuinfo.score->math,&stuinfo.score->English);
getchar();
break;
case 2:
printf("课程平均成绩统计:\r\n");
aver = GetMathAver(&hq51);
printf("数学课程平均成绩:\t %.2f\r\n",aver);
printf("*******************************\r\n");
aver = GetEnglishAver(&hq51);
printf("英语课程平均成绩:\t %.2f\r\n",aver);
getchar();
break;
case 3:
aver = GetMathAver(&hq51);
num = (&hq51)->num;
count = (&hq51)->count;
Num = 0;
// 计算超过数学平均成绩 的人数
for(int i=0;i<count;i++){
if( (num+i)->score->math >aver) Num++;
}
printf("超过数学平均成绩的人数:\t%d\r\n",Num);
getchar();
break;
case 4:
aver = GetEnglishAver(&hq51);
num = (&hq51)->num;
count = (&hq51)->count;
Num = 0;
// 计算超过英语平均成绩 的人数
for(int i=0;i<count;i++){
if( (num+i)->score->English >aver) Num++;
}
printf("超过英语平均成绩的人数:\t%d\r\n",Num);
getchar();
break;
default:
printf("输入错误,请重新输入\n");
break;
}
}
break;
case 7:
exit(0);
break;
default:
printf("输入有误,程序退出\n");
exit(-1);
}
system("cls");
}
return 0;
}