C语言课程设计——班级成绩管理系统,供大家参考,具体内容如下 题目: 对一个有N个学生的班级,每个学生有M门课程。该系统实现对班级成绩的录入、显示、修改、排序、保存等操
C语言课程设计——班级成绩管理系统,供大家参考,具体内容如下
题目:
对一个有N个学生的班级,每个学生有M门课程。该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。功能
要求:
(1)本系统采用一个结构体数组,每个数据的结构应当包括:学号、姓名、M门课程名称。
(2)本系统显示这样的菜单:
请选择系统功能项:
a、成绩录入
b、成绩显示
c、成绩保存
d、成绩排序
e、成绩修改(要求先输入密码)
f、成绩统计
1)显示每门课程成绩最高的学生的基本信息
2)显示每门课程的平均成绩
3)显示超过某门课程平均成绩的学生人数
g、退出系统
1)执行一个具体的功能之后,程序将重新显示菜单。
2)将学生成绩保存到文件中。
代码:
#include<vector> #include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #include<string> using namespace std; typedef struct Student{ int ID; /*学生学号*/ char name[15]; /*学生姓名*/ vector<double> subject; /*因未知课程数量,所以课程数量采用动态数组vector*/ double sum; /*学生各科成绩总分*/ }Student; struct Rule{ /*排序规则*/ bool operator()(const Student &stu1,const Student &stu2)const { if(stu1.sum!=stu2.sum) /*总分不相等按照总分从大到小排序*/ return stu1.sum>stu2.sum; return stu1.ID>stu2.ID; /*总分相等按照学号从大到小排序*/ } }; int N,M,i,j; /*N为学生人数,M为课程数量*/ double score; /*临时变量*/ Student temp; /*临时变量*/ vector<Student> Stu; /*本课设采用动态数组vector,防止浪费内存空间*/ bool condition=true; /*系统运行状态*/ char choice; /*用于输入来选择功能*/ /*---------------------------------------------a.成绩录入---------------------------------------------*/ void InsertScore(){ cout<<"请输入班级学生数量和课程数量:"; cin>>N>>M; cout<<endl<<"现在请依次输入每个学生的学号、姓名和"<<M<<"门课程的成绩:"<<endl<<endl; for(i=0;i<N;++i){ cin>>temp.ID>>temp.name; for(j=0;j<M;++j){ cin>>score; temp.subject.push_back(score); } Stu.push_back(temp); /*------------------------------这一行很重要------------------------------*/ /*------------------------------这一行很重要------------------------------*/ vector<double>().swap(temp.subject); /*------------------------------这一行很重要------------------------------*/ /*------------------------------这一行很重要------------------------------*/ } cout<<endl<<"成绩录入成功!"<<endl; } /*---------------------------------------------b.成绩显示---------------------------------------------*/ void ShowScore(){ cout<<"学号\t\t"<<"姓名\t\t"; for(i=0;i<M;++i) cout<<"课程"<<i+1<<"\t"; cout<<endl; for(i=0;i<N;++i){ cout<<Stu[i].ID<<"\t"<<Stu[i].name<<"\t"; for(int j=0;j<M;++j) cout<<Stu[i].subject[j]<<"\t"; cout<<endl; } } /*---------------------------------------------c.成绩保存---------------------------------------------*/ void SaveScore(){ FILE *fp; if((fp=fopen("stu.dat","wb"))==NULL){ cout<<"文件打开错误"; return; } for(i=0;i<N;++i){ if(fwrite(&Stu[i],sizeof(Student),1,fp)!=1) cout<<"写入错误!"<<endl; } fclose(fp); cout<<"成绩保存成功!"<<endl; } /*---------------------------------------------d.成绩排序---------------------------------------------*/ void SortScore(){ for(i=0;i<N;++i){ /*计算每个人的总成绩*/ Stu[i].sum=0; for(j=0;j<M;++j) Stu[i].sum+=Stu[i].subject[j]; } sort(Stu.begin(),Stu.end(),Rule()); /*使用排序函数排序*/ cout<<"成绩排序成功!"<<endl; } /*---------------------------------------------e.成绩修改---------------------------------------------*/ void ModifyScore(){ string password; int id,no; cout<<"请输入密码开启成绩修改权限:"; cin>>password; /*------------------------------密码输入错误------------------------------*/ while(password!="GUXUNMEI"){ cout<<endl<<"密码错误,请重新输入,若输入Q则中止进入成绩修改功能:"; cin>>password; if(password=="Q") return; } /*------------------------------密码输入正确------------------------------*/ cout<<endl<<"成功进入成绩修改功能,若学号输入-1则退出成绩修改功能!"<<endl; while(1){ cout<<endl<<"请输入需要修改成绩的学生的学号,第几门课程以及修改后的分数:"; cin>>id; if(id==-1){ cout<<endl<<"已成功退出成绩修改功能!"<<endl; return; } cin>>no>>score; if(no>M){ /*课程不存在*/ cout<<endl<<"不存在此课程!"<<endl; continue; } for(i=0;i<N;++i){ if(Stu[i].ID==id){ Stu[i].subject[no-1]=score; break; } } if(i==N){ /*学生不存在*/ cout<<endl<<"不存在此学生!"<<endl; continue; } cout<<endl<<"修改成功!"<<endl; } } /*---------------------------------------------f.成绩统计---------------------------------------------*/ void CountScore(){ int maxn[M],count[M]; double k,average[M]; memset(maxn,0,sizeof(maxn)); /*--------------------显示每门课程成绩最高的学生的基本信息--------------------*/ for(i=0;i<N;++i){ for(j=0;j<M;++j){ if(Stu[i].subject[j]>Stu[i].subject[maxn[j]]) maxn[j]=i; } } for(i=0;i<M;++i){ cout<<"课程"<<i+1<<"成绩最高分学生信息:"<<Stu[i].ID<<"\t"<<Stu[i].name<<"\t"; for(j=0;j<M;++j) cout<<Stu[i].subject[j]<<"\t"; cout<<endl; } cout<<endl; /*---------------------------显示每门课程的平均成绩---------------------------*/ for(j=0;j<M;++j){ k=0; for(i=0;i<N;++i) k+=Stu[i].subject[j]; average[j]=k/N; cout<<"课程"<<j+1<<"的平均成绩为:"<<average[j]<<endl; } cout<<endl; /*---------------------显示超过某门课程平均成绩的学生人数---------------------*/ for(j=0;j<M;++j){ count[j]=0; for(i=0;i<N;++i){ if(Stu[i].subject[j]>average[j]) ++count[j]; } cout<<"超过课程"<<j+1<<"平均成绩的学生人数为:"<<count[j]<<endl; } } /*---------------------------------------------g.退出系统---------------------------------------------*/ void ExitSystem(){ condition=false; /*全局变量condition控制程序运行*/ cout<<"已退出班级成绩管理系统"<<endl; } int main() { while(condition){ /*-----------------------------------系统菜单-----------------------------------*/ cout<<" "<<endl; cout<<"-------------------------系统菜单-------------------------"<<endl; cout<<" "<<endl; cout<<" 请选择系统功能项: "<<endl; cout<<" a.成绩录入 "<<endl; cout<<" b.成绩显示 "<<endl; cout<<" c.成绩保存 "<<endl; cout<<" d.成绩排序 "<<endl; cout<<" e.成绩修改 "<<endl; cout<<" f.成绩统计 "<<endl; cout<<" g.退出系统 "<<endl; cout<<" "<<endl; cout<<"----------------------------------------------------------"<<endl; cout<<" "<<endl; /*-----------------------------------选择系统功能项-----------------------------------*/ cout<<"请输入选项:"; cin>>choice; cout<<endl; switch(choice){ case 'a':InsertScore(); break; case 'b':ShowScore(); break; case 'c':SaveScore(); break; case 'd':SortScore(); break; case 'e':ModifyScore(); break; case 'f':CountScore(); break; case 'g':ExitSystem(); break; default:cout<<"不存在此项功能!"<<endl; } } return 0; }
关于管理系统的更多内容请点击《管理系统专题》进行学习
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。