#include<iostream>
#include<fstream>
#include<string>
#include<map>
#include<string.h>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std;
class xuesheng
{
int no;
string name;
string classes;
double pscj;
double kscj;
public:
xuesheng(){pscj=0;kscj=0;}
xuesheng(int a,string b,string c,double d,double e):no(a),name(b),classes(c),pscj(d),kscj(e){};
int getno(){return no;}
void setno(int x){no=x;}
string getname(){return name;}
void setname(string x){name=x;}
string getclasses(){return classes;}
void setclasses(string x){classes=x;}
double getpscj(){return pscj;}
void setpscj(double x){pscj=x;}
double getkscj(){return kscj;}
void setkscj(double x){kscj=x;}
friend istream &operator>>(istream&is,xuesheng&r);
friend ostream &operator<<(ostream&os,const xuesheng&r);
};
istream &operator>>(istream&is,xuesheng&r)
{
cout<<"请以此按照学生学号、姓名、班级、平时成绩、考试成绩输入学生信息,输入-1结束:"<<endl;
is>>r.no;
if(r.no==-1)
return is;
is>>r.name>>r.classes>>r.pscj>>r.kscj;
return is;
}
ostream &operator<<(ostream&os,const xuesheng&r)
{
os<<r.no<<"\t"<<r.name<<"\t"<<r.classes<<"\t"<<r.pscj<<"\t"<<r.kscj<<endl;
return os;
}
class lesson//课程小类
{
string no1;
int no2;
string name;
double point;
string teach;
string place;
int time1;
int time2;
double score;
public:
lesson(){teach="无";score=0;}
string getno1(){return no1;}
void setno1(string x){no1=x;}
int getno2(){return no2;}
void setno2(int x){no2=x;}
string getname(){return name;}
void setname(string x){name=x;}
double getpoint(){return point;}
void setpoint(double x){point=x;}
string getteach(){return teach;}
void setteach(string x){teach=x;}
string getplace(){return place;}
void setplace(string x){place=x;}
int gettime1(){return time1;}
void settime1(int x){time1=x;}
int gettime2(){return time2;}
void settime2(int x){time2=x;}
double getscore(){return score;}
void setscore(double x){score=x;}
void makescore(xuesheng x){score=x.getpscj()*0.3+x.getkscj()*0.7;}
friend istream &operator>>(istream&is,lesson&r);
friend ostream &operator<<(ostream&os,const lesson&r);
};
istream &operator>>(istream&is,lesson&r)
{
cout<<"请依次按课号、班号、名称、学分、教师、地点、时 间输入课程信息,输入-1结束:"<<endl;
is>>r.no1;
if(r.no1=="-1")
return is;
is>>r.no2>>r.name>>r.point>>r.teach>>r.place>>r.time1>>r.time2;
return is;
}
ostream &operator<<(ostream&os,const lesson&r)
{
os<<r.no1<<"\t"<<r.no2<<"\t"<<r.name<<"\t"<<r.point<<"\t"<<r.teach<<"\t"<<r.place<<"\t"<<r.time1<<" "<<r.time2<<endl;
return os;
}
class course
{
string no1;
int no2;
string name;
double point;
string teach;
string place;
int time1;
int time2;
int course_cap;
int course_pop;//xs.size()
vector<xuesheng> xs;
vector<xuesheng>::iterator xsit;
multimap<int,int> xs1;//按照学号查找
multimap<int,int>::iterator xsit1;//查找完后判断是否与姓名相同
public:
course(){teach="无";course_pop=0;}
string getno1(){return no1;}
void setno1(string x){no1=x;}
int getno2(){return no2;}
void setno2(int x){no2=x;}
string getname(){return name;}
void setname(string x){name=x;}
double getpoint(){return point;}
void setpoint(double x){point=x;}
string getteach(){return teach;}
void setteach(string x){teach=x;}
string getplace(){return place;}
void setplace(string x){place=x;}
int gettime1(){return time1;}
void settime1(int x){time1=x;}
int gettime2(){return time2;}
void settime2(int x){time2=x;}
int getcourse_cap(){return course_cap;}
void setcourse_cap(int x){course_cap=x;}
int getcourse_pop(){return course_pop;}
void setcourse_pop(int x){course_pop=x;}
void addxuesheng(xuesheng x){xs.push_back(x);course_pop++;}
void delexuesheng(xuesheng x);
int xssize(){return xs.size();}
int xsno(int x){return xs[x].getno();}
double xspscj(int x){return xs[x].getpscj();}
double xskscj(int x){return xs[x].getkscj();}
void cinxscj();
friend istream &operator>>(istream&is,course&r);
friend ostream &operator<<(ostream&os,const course&r);
};
void course::delexuesheng(xuesheng x)
{
int i,j;
for(i=0;i<xs.size();i++)
if(xs[i].getno()==x.getno())
break;
j=xs.size();
for(;i<j-1;i++)
xs[i]=xs[i+1];
xs.erase(xs.end());
course_pop--;
}
void course::cinxscj()
{
int i;
double a,b;
for(i=0;i<xs.size();i++)
{
cout<<"请依次输入您的平时成绩、考试成绩:"<<endl;
cin>>a>>b;
xs[i].setpscj(a);
xs[i].setkscj(b);
}
}
istream &operator>>(istream&is,course&r)
{
xuesheng x;
cout<<"请依次按课号、班号、名称、学分、老师、地点、时 间、课容量、选课人数输入课程信息,输入-1结束:"<<endl;
is>>r.no1;
if(r.no1=="-1")
return is;
is>>r.no2>>r.name>>r.point>>r.teach>>r.place>>r.time1>>r.time2>>r.course_cap>>r.course_pop;
for(int i=0;i<r.course_pop;i++)
{
is>>x;
r.xs.push_back(x);
}
return is;
}
ostream &operator<<(ostream&os,const course&r)
{
os<<r.no1<<"\t"<<r.no2<<"\t"<<r.name<<"\t"<<r.point<<"\t"<<r.teach<<"\t"<<r.place<<"\t"<<r.time1<<" "<<r.time2<<"\t"<<r.course_cap<<"\t"<<r.course_pop<<endl;
for(int i=0;i<r.course_pop;i++)
os<<r.xs[i]<<endl;
return os;
}
class student
{
int no;
string name;
string classes;
double GPA;
int course_no;//课程门数=cou.size();
double course_score;//已选学分
int KCB[5][7];
string kcb[5][7];
vector<lesson> les;
vector<lesson>::iterator lesit;//只能用课号与班号查找
vector<course> cs;
public:
student()
{
GPA=0;course_no=0;course_score=0;
memset(KCB,0,sizeof(KCB));
int i,j;
for(i=0;i<5;i++)
for(j=0;j<7;j++)
kcb[i][j]="休息";
}
void rekcb();
string lesno1(int x){return les[x].getno1();}
int lesno2(int x){return les[x].getno2();}
string lesname(int x){return les[x].getname();}
double lespoint(int x){return les[x].getpoint();}
string lesteach(int x){return les[x].getteach();}
string lesplace(int x){return les[x].getplace();}
int lestime1(int x){return les[x].gettime1();}
int lestime2(int x){return les[x].gettime2();}
void lesscore(int x,double y){les[x].setscore(y);}
int lessize(){return les.size();}
int getno(){return no;}
void setno(int x){no=x;}
string getname(){return name;}
void setname(string x){name=x;}
string getclasses(){return classes;}
void setclasses(string x){classes=x;}
double getGPA(){return GPA;}
void setGPA(double x){GPA=x;}
int getcourse_no(){return course_no;}
void setcourse_no(){course_no=les.size();}
double getcourse_score(){return course_score;}
void setcourse_score(double x){course_score=x;}
int getKCB(int i,int j){return KCB[i][j];}
void setKCB(int i,int j,int s){KCB[i][j]=s;}
string getkcb(int i,int j){return kcb[i][j];}
void setkcb(int i,int j,string s){kcb[i][j]=s;}
void displaykcb();
void addlesson(lesson x){les.push_back(x);}
void delelesson(lesson x);
void loadc()
{
ifstream infile("D:\\course.dat",ios::in);
if(!infile)
{
return;
}
cs.clear();
while(1)
{
course w;
infile>>w;
if(w.getno1()=="-1")
break;
cs.push_back(w);
}
system("cls");
infile.close();
}
void makeGPA()
{
loadc();
system("cls");
int i;
int y,x;
for(y=0;y<les.size();y++)
{
for(i=0;i<cs.size();i++)
{
if(cs[i].getno1()==les[y].getno1()&&cs[i].getno2()==les[y].getno2())
break;
}
int j;
for(j=0;j<cs[i].xssize();j++)
if(cs[i].xsno(j)==no)
break;
int k;
k=cs[i].xspscj(j)*0.3+cs[i].xskscj(j)*0.7;
les[y].setscore(k);
if(les[y].getscore()>=60)
x=x+les[y].getscore()/10-5;
GPA=x/course_score;
}
}
friend istream &operator>>(istream&is,student&r);
friend ostream &operator<<(ostream&os,const student&r);
};
void student::rekcb()
{
int i;
for(i=0;i<les.size();i++)
{
setkcb(les[i].gettime2()-1,les[i].gettime1()-1,les[i].getname());
setKCB(les[i].gettime2()-1,les[i].gettime1()-1,1);
}
}
void student::delelesson(lesson x)
{
int i,j;
for(i=0;i<les.size();i++)
if(les[i].getno1()==x.getno1()&&les[i].getno2()==x.getno2())
break;
j=les.size();
for(;i<j-1;i++)
les[i]=les[i+1];
les.erase(les.end());
}
void student::displaykcb()
{
rekcb();
int i,j;
cout<<" "<<"\t"<<"周一"<<"\t"<<"周二"<<"\t"<<"周三"<<"\t"<<"周四"<<"\t"<<"周五"<<"\t"<<"周六"<<"\t"<<"周日"<<endl;
for(i=0;i<5;i++)
{
cout<<i+1<<"\t";
for(j=0;j<7;j++)
cout<<kcb[i][j]<<"\t";
cout<<endl;
}
}
istream &operator>>(istream&is,student&r)
{
lesson x;
cout<<"请依次按学号、姓名、班级、绩点、所选课程门数、所选学分、所选课程输入学生信息,输入-1结束:"<<endl;
is>>r.no;
if(r.no==-1)
return is;
is>>r.name>>r.classes>>r.GPA>>r.course_no>>r.course_score;
for(int i=0;i<r.course_no;i++)
{
is>>x;
r.les.push_back(x);
}
return is;
}
ostream &operator<<(ostream&os,const student&r)
{
os<<r.no<<"\t"<<r.name<<"\t"<<r.classes<<"\t"<<r.GPA<<"\t"<<r.course_no<<"\t\t"<<r.course_score<<endl;
for(int i=0;i<r.course_no;i++)
os<<r.les[i];
return os;
}
class teacher
{
int no;
string name;
string collage;
string system;
int course_num;
vector<course> cou;
vector<course> couit;//用课号和班号来查找。
int KCB[5][7];
string kcb[5][7];
public:
teacher()
{
course_num=0;
memset(KCB,0,sizeof(KCB));
int i,j;
for(i=0;i<5;i++)
for(j=0;j<7;j++)
kcb[i][j]="休息";
}
void tcou(int y,course x){cou[y]=x;}
void replacecou(int x,course y){cou[x]=y;}
int cousize(){return cou.size();}
string couno1(int x){return cou[x].getno1();}
int couno2(int x){return cou[x].getno2();}
void cdispaly(int x){cout<<cou[x];}
string getname(){return name;}
void setname(string x){name=x;}
模拟选课系统编写(C++)
最新推荐文章于 2024-06-28 11:25:05 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)