大家进来帮一下忙....关于排课的
题目是这样的..:问题描述
每位教师都有教学工作量,教师对他所希望讲授的课程表达为一个期望值,1,2…,n,其中1位最高的期望值。课程也有优先级,1,2…,n,用来决定将课程分给教师的顺序,其中1时最高的优先级。设计一个程序针对某些课程给某些教师进行排课。
基本要求
程序运行时,用户输入教师信息(姓名、教师号、工作量)、课程信息(课程名、课程号、周学时、总学时、优先级)、教师对所希望讲授课程的期望值以及教学工作量等相关信息,所有信息应保存在文件中,程序根据课程的优先级以及教师对课程的期望值进行排课。为了公平起见,程序随机分配课程,如果10门课程都有优先级1,程序以随机的顺序将这些课程分给教师,如果10位教师对某门课程的期望值为1,程序应从10位教师中随机选择一个。最后输出排课情况,即某位老师上某门课程,以及某位老师的工作量。
测试数据
程序应能实现对不少于20门课和10个教师的排课,并且使每个教师的满意度达到最大,不存在工作量不满的教师以及未分配的课等情况。
实现提示
可定义一个教师类存放教师信息,所有教师的信息可以用链表存储;定义一个课程类存放课程信息,所有课程的信息可以用链表存储;定义一个排课类进行排课,排课类可以访问课程和教师信息。
我做了一点做不下去了..5555
#include<iostream>
#include<fstream>
#include <cstdlib>
#include <ctime>
using namespace std;
////////////教师类..
class Teacher
{
public:
char name[10];
int num;
int worknum;
public:
Teacher()
{
static int i=0;
++i;
cout<<"请输入第"<<i<<"个老师的姓名"<<endl;
cin>>name;
cout<<"教师号"<<endl;
cin>>num;
cout<<"工作量"<<endl;
cin>>worknum;
}
void get(ofstream fout)//get函数,参数是文件流对象fout
{
fout.write((char*) this,sizeof(*this)); //读取文件
}
friend void getdata(Teacher t[],int n,ofstream &f);//友员函数getdata,参数是teacher类对象,整型,和文件流对象的引用
};
void getdata(Teacher t[],int n,ofstream &fout)//函数getdata,参数是teacher类对象,整型,和文件流对象
{
for(int i=0;i<n;i++)
fout.write((char *)&t[i],sizeof(t[i]));//输出teacher所有对象
}
class Subjust
{
public:
char name[10];
int kechenghao;
int zhouxueshi;
int zongxueshi;
int youxianji;
int qiwangzhi;
public:
Subjust()
{
static int i=0;
++i;
cout<<"请输入第"<<i<<"门课的课程名字"<<endl;
cin>>name;
cout<<"课程号"<<endl;
cin>>kechenghao;
cout<<"周学时"<<endl;
cin>>zhouxueshi;
cout<<"总学时"<<endl;
cin>>zongxueshi;
cout<<"优先级"<<endl;
cin>>youxianji;
cout<<"期望值"<<endl;
cin>>qiwangzhi;
}
void get(ofstream fout)
{
fout.write((char*) this,sizeof(*this));
}
friend void getdata(Subjust b[],int n,ofstream &f);
};
void getdata(Subjust b[],int n,ofstream &fout)
{
for(int i=0;i<n;i++)
fout.write((char *)&b[i],sizeof(b[i]));
}
int main()
{
Teacher t[3];
Subjust b[3];
cout<<"给老师分科后"<<endl;
ofstream fout;//二进制形式存储
fout.open("Teacher.txt",ios::binary);
getdata(t,3,fout);
getdata(b,3,fout);
int a[3];
int temp;
int i;
srand((unsigned)time(0));
for ( i = 0;i < 3;i++)
{
temp = 0 + rand() % 3;
for (int j = 0;j <= i;j++)
while (temp == a[j])
{
temp = 0 + rand() % 3;
j = 0;
}
a[i] = temp;
}
for(i=0;i<3;i++)
{
cout<<"第"<<i+1<<"个老师的名字 所教的课程 课时"<<endl;
cout<<'\t'<<t[i].name<<"\t\t"<<b[a[i]].name<<"\t\t"<<b[a[i]].zongxueshi<<endl;
}
fout.close();
return 0;
}
主函数那里我是乱来的....主要是那个排课类不会弄...高人帮忙啊...