700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > C语言课程设计——班级成绩管理系统(附课设报告)

C语言课程设计——班级成绩管理系统(附课设报告)

时间:2019-04-20 13:47:31

相关推荐

C语言课程设计——班级成绩管理系统(附课设报告)

数据库课程设计——某工厂的物料管理系统(附Java源码与课程设计报告)

数据库课程设计——某商店进销存管理系统(附Java源码与课程设计报告)

数据库课程设计——某煤气公司送气管理系统(附课设报告)

数据库课程设计——基于JavaEE的企业进销存系统(附Java源码与课程设计报告)

Java课程设计——哈夫曼编码译码系统的Java语言实现

C语言课程设计——班级成绩管理系统(附课设报告)

C语言课程设计——排班系统 DFS解决(附课设报告)

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;}

实验报告:

/download/weixin_45953673/14011037

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。