• 大小: 253KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-20
  • 语言: 其他
  • 标签: c++  数据结构  

资源简介

问题描述:大学的每个专业都要制定教学计划。假设任何专业都有固定的学习年限,每学年含两个学期,每学期的时间长度和学分上限值均相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排上必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课程恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。 基本要求:输入参数包括学期总数,一学期的学分上限,每门课程的课程号、学分和直接先修课的课程号;允许两种策略,一是使学生在各学期的学习负担尽量均匀,二是使课程尽量集中在前几个学期;若根据给定的条件问题无解,则报告适当的信息,否则输出教学计划表(如每个学期所开设的课程的课程号及学分),同时将教学计划输出到用户指定的文件中。教学计划的表格格式自行设定, 可以从键盘读取数据也可以从文件读取数据, 结果保存到文件中。 测试数据:学期总数为6,学分上限为10,该专业共开设12门。以10级某专业必修课与选修课为例,选择12门课程及相应学分,制定一个表明各门课程先后约束关系的有向图。 提高要求:产生多种不同的方案,并使方案之间的差异尽可能地大。 考核要求: (1)达到基本要求,成绩为良好,如果不能把结果保存到文件中,成绩为不及格。 (2)在达到基本要求的基础上,产生3种以上的解决方案,且用户界面友好,成绩为优秀。

资源截图

代码片段和文件信息

#include
#include
using namespace std;
ofstream output(“安排教学计划结果.txt“);//将输出结果保存在“安排教学计划结果”文本文档上

template 
class CirQueue
{
private:
T *base; // 存储空间基址
int front; // 队头指针
int rear; // 队尾指针
int queuesize; // 队容量
public:
CirQueue(int m=100);//构造空队列
~CirQueue(); // 析构函数,释放链队各结点的存储空间
void EnQueue(T x); // 元素x入队
T DeQueue(); // 队顶元素出队
int QueueEmpty(); // 判队空
};

template 
CirQueue::CirQueue(int m) //构造函数
{
base=new T[m];
front=rear=0;
queuesize=m;
}

template 
CirQueue::~CirQueue()
{
delete [] base;
rear=0;
front=0;
queuesize=0;
}

template 
void CirQueue::EnQueue(T x)
{
if((rear+1)%queuesize==front) throw “上溢,无法入队“;
base[rear]=x;
rear=(rear+1)%queuesize;
}

template 
T CirQueue::DeQueue()
{
T x;
if(front==rear) throw “下溢,不能出队“;
x=base[front];
front=(front+1)%queuesize;
return x;
}

template 
int CirQueue::QueueEmpty()
{
if(front==rear) return 1;
else return 0;
}



struct Course //课程的相关信息
{
int number; //编号(课程信息的主键,有系统分配,不能更改)
char *name; //名称
int Xuefen; //学分
int num;
};

#define MAX_VERTEX_NUM 100//最大课程数
struct ArcNode
{
int adjvex; //该弧所指向的后继课程的在顶点集的位置
struct ArcNode *nextarc; //指向下一个课程的指针
};

template 
struct VNode
{
T data; //存放课程信息 T=Course结构体类型
ArcNode *firstarc; //指向第一条依附该课程的后继课程指针
};

template 
struct ALGraph_1
{
VNode vertices[MAX_VERTEX_NUM]; //课程总数顶点集
int vexnum; //课程总数
int arcnum; //先修关系数
};

template 
class ALGraph
{
ALGraph_1 algraph;
public:
void CreateGraph(char*f1char*f2); //课程是顶点集,先修关系来建立图的邻接表
void CreateGraph1();//手动输入课程信息
int LocateVex (int u); //返回课程编号在图中的数组下标
void DisPlay_1(); //显示课程的编号,名称,学分
void InsertVex(char *f1char*f2); //编辑某科课程信息>>增加课程
void DeleteVex(char*f1char*f2); //编辑某科课程信息>>删除课程
void AlterVex(char*f1char*f2int childMendu); //编辑某科课程信息>>修改课程
void FindInDegree(int indegree[]); //求顶点的入度
void TopologicalSort(int Maxxueint Maxfenint choice); //不同教学计划类别输出不同的教学计划
};

template  //返回课程编号在图中的数组下标
int ALGraph::LocateVex(int u)
{
for(int i = 0;iif(algraph.vertices[i].data.number==u) //寻找编号是否相等
return i;
}


template 
void ALGraph::CreateGraph(char*f1char*f2) //读取数据,课程是顶点集,先修关系来建立邻接表
{
ifstream in(f1); //读取课程信息文件.txt
if(!in) { cout<<“无法打开文件,请建立文件!“<char sp[3][20];
int i=0;
while(in>>sp[0]) //创建顶点集
{
algraph.vertices[i].data.number=atoi(sp[0]); //C++文件的相关操作
in>>sp[1];
algraph.vertices[i].data.name=new char[strlen(sp[1])+1]; //申请名字的内存
strcpy(algraph.vertices[i].data.namesp[1]);
in>>sp[2]; algraph.vertices[i].data.Xuefen=atoi(sp[2]);
algraph.vertices[i].firstarc=false;
i++;
}
algraph.vexnum=i;
in.close();
ifstream in1(f2); //读取课程先修关系文件.txt
if(!in1) { cout<<“不能打开“<char p[2][5];
int j;
int k=0;
while(in1>>p[0]) //创建邻接表
{
in1>>p[1]; //C++文件的相关操作
i = LocateVex(atoi(p[0]));
j = LocateVex

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-03-27 23:36  2011081426曾毅\
     文件         563  2013-03-24 15:23  2011081426曾毅\readme.txt
     文件      405324  2013-03-24 16:28  2011081426曾毅\数据结构与算法课程设计报告.doc
     文件        1284  2013-03-21 15:03  2011081426曾毅\新建 文本文档.txt
     文件       16978  2013-03-21 16:08  2011081426曾毅\源代码.cpp
     文件         201  2013-03-21 14:47  2011081426曾毅\课程信息文件.txt
     文件          48  2013-03-18 15:07  2011081426曾毅\课程先修关系文件.txt

评论

共有 条评论