A5下载 - 努力做内容最丰富最安全的下载站!

A5站长下载站

当前位置:A5下载 > 编程开发 > 网站开发 > C语言实现班级成绩管理系统

C语言实现班级成绩管理系统

时间:2020-07-24 17:30作者:qazwsxzxc人气:79

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<<"学号tt"<<"姓名tt";

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;

}

标签语言,实现,班级,成绩,管理系统,语言,课程,设计,班级,成

相关下载

查看所有评论+

网友评论

网友
您的评论需要经过审核才能显示

公众号