您的位置:首页 > 编程语言 > C语言/C++

课程设计:学生管理系统(c++)

2014-07-06 17:04 555 查看
#include <iostream>
#include <string>
#include <set>
#include <fstream>
#include <cstdlib>
#include <vector>
#include <windows.h>
#include <algorithm>
using namespace std;

class score         //分数
{
public:

int s_total;
int s_ave;
int s_sum;

};

class course        //课程信息
{
public:
int cou_id;
string cou_name;
int mark;           //分数

};

class student:public score          //学生信息
{
public:
string name;
string sex;
int std_id;
int s_normal;       //平时成绩
double per;     //平时成绩所占百分比
int m;          //该学生选课的门数
vector<course> cour;        //该学生所选的课

};
bool operator < (const student &stu1,const student &stu2)
{
return stu1.std_id> stu2.std_id;
}

class grades        //班级
{
public:
string major;
int cla_id;
int peop_num;
multiset<student> stu;

void fread(int n);                  //对成绩的录入,n个学生
void revise(int t_ID);              //根据学号修改学生信息
void display(void);                 //打印班级成绩单
void seek(int t_ID);                //查找
void failshow(void);                //打印不及格学生名单

};
void grades::failshow()
{
ofstream outfile("outn.dat",ios::out);
multiset<student>::iterator iter;
for(iter=stu.begin();iter!=stu.end();iter++)
{
if((*iter).s_ave<60)
outfile<<(*iter).name<<" "<<(*iter).std_id<<" "<<endl;
}
outfile.close();
cout<<"完成:输出到:./outn.dat"<<endl;

}
void grades::seek(int t_ID)             //查找学号为t_ID的学生
{
student temstu;
temstu.std_id=t_ID;
multiset<student>::iterator iter=stu.find(temstu);
if(iter!=stu.end())
{
cout<<"姓名: "<<(*iter).name<<"学号:"<<(*iter).std_id<<endl;
for(int i=0;i<(*iter).m;i++)
{
cout<<(*iter).cour.at(i).cou_name<<": "<<(*iter).cour.at(i).mark;
}
cout<<"总成绩:"<<(*iter).s_sum<<"综评成绩:"<<(*iter).s_total<<endl;

}
else
cout<<"找不到该学生"<<endl;

}

void grades::display(void)          //输出班级成绩单
{
multiset<student>::iterator iter;
ofstream outfile("out.dat",ios::out);
if(!outfile)
{
cout<<"open error"<<endl;
exit(1);
}
outfile<<"专业:"<<major<<"班级:"<<cla_id<<"人数"<<peop_num<<endl;
outfile<<"姓名\t"<<"性别\t"<<"学号\t"<<"各科成绩\t"<<"总成绩\t\t"<<"综评成绩\t"<<endl;
for(iter=stu.begin();iter!=stu.end();iter++)
{
outfile<<(*iter).name<<"\t"<<(*iter).sex<<"\t"<<(*iter).std_id<<" ";
for(int i=0;i<(*iter).m;i++)
outfile<<(*iter).cour.at(i).cou_name<<" "<<(*iter).cour.at(i).mark<<" ";
outfile<<"\t"<<(*iter).s_sum<<"\t"<<(*iter).s_total<<"\t"<<endl;

}
outfile.close();
cout<<"完成,输出到:./out.dat"<<endl;

}

void grades::fread(int n)
{
student tem;
course t;
ifstream infile("in.dat",ios::in);
if(!infile)
{
cout<<"open error !"<<endl;
exit (1);
}
for(int i=0;i<n;i++)
{
infile>>tem.name>>tem.sex>>tem.std_id>>tem.per>>tem.s_normal;       //设置学生信息
infile>>tem.m;
tem.s_sum=0;
for(int j=0;j<tem.m;j++)
{
infile>>t.cou_id>>t.cou_name>>t.mark;
tem.s_sum+=t.mark;         //总分
tem.cour.push_back(t);
}

tem.s_ave=(tem.s_sum)/tem.m;                                             //平均分
tem.s_total=tem.s_normal*tem.per+tem.s_sum*(1-tem.per);              //总评成绩
stu.insert(tem);

}
infile.close();

}
void grades::revise(int t_ID)
{
student temstu;
temstu.std_id=t_ID;
temstu.s_sum=0;
vector<course>::iterator i;
multiset<student>::iterator iter=stu.find(temstu);
if(iter!=stu.end())
{
cout<<"请输入要修改的学生信息"<<endl;
/*for(i=(*iter).cour.begin();i!=(*iter).cour.end();i++)
{
cout<<(*iter).cour.at(i).cou_name<<":"<<endl;
cin>>temstu.cour.at(i).mark;
temstu.s_sum+=temstu.cour.at(i).mark;

}*/
cout<<"平时成绩"<<endl;
cin>>temstu.s_normal;
cout<<"平时成绩所占百分比"<<endl;
cin>>temstu.per;
temstu.s_ave=temstu.s_sum/temstu.m;
temstu.s_total=temstu.s_normal*temstu.per+temstu.s_sum*(1-temstu.per);
cout<<"姓名"<<endl;
cin>>temstu.name;
cout<<"性别:"<<endl;
cin>>temstu.sex;
stu.erase(iter);        //删除旧元素
stu.insert(temstu);     //插入新元素
cout<<"修改完成"<<endl;

}
else
cout<<"找不到该学生"<<endl;

}

int main()
{
system("color d0");
int c;
int t;
grades cla;
cout<<"********************************************************************************"<<endl;
cout<<"********************************学生管理系统************************************"<<endl;
cout<<"请输入学生人数:"<<endl;
cin>>cla.peop_num;
cout<<"请输入专业:"<<endl;
cin>>cla.major;
cout<<"请输入班级"<<endl;
cin>>cla.cla_id;
cla.fread(cla.peop_num);
while(1)
{
system("cls");
cout<<"********************************************************************************"<<endl;
cout<<"********************************************************************************"<<endl;
cout<<"                ~~~~~~~~~1_修改学生信息~~~~~~~~~"<<endl;
cout<<"                ~~~~~~~~2_打印班级成绩单~~~~~~~~"<<endl;
cout<<"                ~~~~~~~~3_打印个人成绩单~~~~~~~~"<<endl;
cout<<"                ~~~~~~4_打印不及格学生名单~~~~~~"<<endl;
cout<<"                ~~~~~~~~~~~~~~5_退出~~~~~~~~~~~~"<<endl;
cin>>c;
switch (c)
{
case 1:
cout<<"请输入要修改的学生学号:";
cin>>t;
cla.revise(t);
break;
case 2:
cla.display();
break;
case 3:
cout<<"请输入要打印的学生学号:";
cin>>t;
cla.seek(t);
break;
case 4:
cla.failshow();
break;
case 5:
return 0;

default:
cout<<"输入错误!"<<endl;

}
system("pause");
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++