资源简介
问题描述:大学的每个专业都要制定教学计划。假设任何专业都有固定的学习年限,每学年含两个学期,每学期的时间长度和学分上限值均相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排上必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课程恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。
基本要求:输入参数包括学期总数,一学期的学分上限,每门课程的课程号、学分和直接先修课的课程号;允许两种策略,一是使学生在各学期的学习负担尽量均匀,二是使课程尽量集中在前几个学期;若根据给定的条件问题无解,则报告适当的信息,否则输出教学计划表(如每个学期所开设的课程的课程号及学分),同时将教学计划输出到用户指定的文件中。教学计划的表格格式自行设定, 可以从键盘读取数据也可以从文件读取数据, 结果保存到文件中。
测试数据:学期总数为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;i if(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
- 上一篇:基于plc的机械手设计程序
- 下一篇:unity3d5.1物体椭圆旋转选择界面实现
相关资源
- Qt开发的文本编辑器
- Linux下Qt开发的中国象棋
- qt aes加密 源代码
- 树和森林--清华大学课程讲义-数据结
- visual studio 2017中英文企业版离线安装
- 19年王道408+天勤数据结构讲解视频,
- 二叉树指定第i层输出以及打印叶子结
- 广工《算法和高级数据结构教程课程
- 广工《算法和高级数据结构教程》
- 数据结构课程设计——静态单链表操
- 基于Chan-Vese模型图像分割算法代码
- 简单的职工管理系统数据结构
- 求二叉树最大宽度 求二叉树最大宽度
- 数据结构和算法Flash动画演示
- 已知稀疏矩阵用三元组表示编写C=A*
- KMeans GMM
- swust西南科技大学OJ数据结构80题答案
- 非常完整的A*算法具体代码
- 图像的载入显示和输出程序by浅墨
- windef.h && windows.h
- 自己分装的一个winhttp类
- 纯C实现语音合成支持windows和linux,亲
- 数据结构课设-文学研究助手
- 小型公司工资管理系统设计
- VC中利用多线程技术实现线程之间的通
- KNN K-最近邻分类算法源代码
- 软件的层架构设计详解
- 数据结构课程设计报告:招聘模拟
- opencv3.4.1人脸识别小程序
- 二叉树先序、中序、后序三种遍历的
评论
共有 条评论