1. 问题描述

大学的每个专业都要制订教学计划。假设任何专业都有固定的学习年限,每学年含两个学期,每学期的时间长度和学分上限值均相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。

要求实现的基本功能如下:

(1)录入课程目录。

(2)可以编辑课程目录,如课程增加、删除、信息修改等。

(3)满足一定条件的教学计划的输出。

2. 设计要求

(1)基本要求:输入参数包括:学期总数、一学期的学分上限、每门课的课程号(固定为占3为的字母和数字串)、学分和直接先修课程的课程号。

(2)允许用户指定下列两种编排策略之一:一是使学生在各学期中的学习负担尽量均匀;二是使课程尽量地集中在前几个学期中。

(3)若根据给定的条件无解,则报告适当的信息;否则将教学计划输出到用户指定的文件中。教学计划的表格格式自行设计。

3. 测试数据

学期总数:8;学分上限:10;该专业共开设16门课,课程号从C01~C16,学分顺序为2,3,4,3,2,3,4,4,4,5,4,4,2,3,2,3;先修关系自定义(画图)。

4. 实现提示

可设学期总数不超过10,课程总数不超过60。如果输入的先修课程号不在该专业开设的课程序列中,则作为错误处理。应建立内部课程序号与课程号之间的对应关系。

代码(已由codeblocks编译通过):

#include<bits/stdc++.h>
using namespace std;struct node
{char name[33];int xf;
};int all_terms, t_max_xf, t_V, t_E;
vector<node> G[1009];
map<string, int> mp;void create_graph()
{int i;printf("\t\t\t欢迎使用教学计划编制系统\n");printf("输入学期总数: ");scanf("%d", &all_terms);printf("请输入学期的学分上限: ");scanf("%d",&t_max_xf);printf("请输入教学计划的课程数: " );scanf("%d", &t_V);printf( "请输入各个课程的先修课程的总和(边总数): ");scanf("%d",&t_E);printf( "请输入%d个课程的课程号(最多30个字符,小写字母c+数字如c10)\n", t_V);node data;for(i = 1; i <= t_V; i++){printf ("请输入第%d个: ",i);scanf(" %s", data.name);G[i].push_back(data);mp[G[i][0].name] = i;}printf("请输入%d个课程分别对应的学分值:\n", t_V);for(i = 1; i <= t_V; i++) scanf("%d", &G[i][0].xf);printf("请输入下列课程的先修课程(输入以#结束)\n");char s[33];for(i = 1; i <= t_V; i++){printf(" %s的先修课程: ", G[i][0].name);while(true){scanf(" %s", s);if(s[0] == '#') break;G[i].push_back(G[mp[s]][0]);}}printf("\t\t\t录入数据成功\n");
}void display()
{int i, j;printf("有向图\n");printf("%d个顶点", t_V);for(i = 1; i <= t_V; ++i) printf("%s%c", G[i][0].name, i == t_V ? '\n' : ' ');printf("%d条弧边:\n", t_E);for(i = 1; i <= t_V; i++){int k = G[i].size();for(j = 0; j < k; j++)printf("%s---->%s\n", G[i][0].name, G[i][j].name);}
}void solve1(int ans[])
{int q = 1, cnt = 0;while (q <= all_terms){int num = t_V / all_terms;printf("\n第%d个学期应学课程: ", q);while(num--){printf("%s%c", G[ans[cnt++]][0].name, num != 0 ? ' ' : '\n');}if (q == all_terms) printf("OK Over!\n");q++;}
}void solve2(int ans[])
{int q = 1, cnt = 0;while (q <= all_terms){int C = G[ans[cnt]][0].xf;printf("\n第%d个学期应学课程: ", q);while(cnt < t_V && C <= t_max_xf){printf("%s ", G[ans[cnt]][0].name);if(cnt+1 < t_V) C = C + G[ans[cnt+1]][0].xf;cnt++;}if(cnt >= t_V || q == all_terms){cout << endl;printf("OK Over!\n");break;}q++;}
}void topo_sort()
{int i, j, vis[1009];memset(vis, 0, sizeof(vis));for(i = 1; i <= t_V; i++){int k = G[i].size();for(j = 1; j < k; j++)vis[mp[G[i][j].name]]++;}int ans[1009], cnt = 0;memset(ans, 0, sizeof(ans));stack<int> s;for(i = 1; i <= t_V; i++){if(!vis[i]) s.push(i);}while(!s.empty()){int cur = s.top(); s.pop();ans[cnt++] = cur;int k = G[cur].size();for(j = 1; j < k; j++){int num = mp[G[cur][j].name];vis[num]--;if(!vis[num]) s.push(num);}}if(cnt != t_V) puts("Error!");else{puts("OK!");while(true){printf("\n\t\t\t请选择功能:\n");printf("\t\t\t1.平均分配\n");printf("\t\t\t2.靠前分配\n");printf("\t\t\t3.退出\n");int sel;scanf("%d", &sel);switch(sel){case 1: solve1(ans); break;case 2: solve2(ans); break;}if(sel == 3) break;}}
}int main()
{create_graph();display();topo_sort();return 0;
}/*6
10
12
16
c1
c2
c3
c4
c5
c6
c7
c8
c9
c10
c11
c12
2 3 4 3 2 3 4 4 7 5 2 3
#
c1 #
c1 c2 #
c1 #
c3 #
c11 #
c5 c3 #
c3 c6 #
#
c9 #
c9 #
c9 c10 c1 #*/

数据结构——课程设计之~安排教学计划相关推荐

  1. 数据结构java教学计划编排_数据结构课程设计_教学计划编制问题

    数据结构课程设计_教学计划编制问题 (教学计划编制问题)目 录1.需求分析 -------.3-52.概要设计 -------.6-83.详细设计 ------ 8-134.调试分析 ------ 1 ...

  2. C/C++数据结构课程设计安排

    C/C++数据结构课程设计安排 数据结构课程设计安排 课程设计学时:32学时 课程设计目的:综合应用数据结构课程中所学的数据结构:线性表.栈.队列.数组.广义表.树.二叉树.图.查找表中的一种或多种数 ...

  3. 学生搭配问题数据结构报告c语言,数据结构课程设计_学生搭配问题.doc

    数据结构课程设计_学生搭配问题 数据结构课程设计 题 目: 学生搭配问题 学 院: 班 级: 学 生 姓 名: 学 生 学 号: 指 导 教 师: 2012 年 12 月 3 日 课程设计任务书 姓名 ...

  4. C/C++《数据结构课程设计》任务书[2022-12-27]

    C/C++<数据结构课程设计>任务书[2022-12-27] <数据结构课程设计>任务书 一.任务总体安排: 班级 设计时间 地点 指导老师 21软件开发 17周每周一至周五五 ...

  5. 数据结构 课程设计报告

    <数据结构课程设计> 课程题目 电话客服模拟系统 课程编号 j1620102 学生姓名 严乾聪 学生学号 201311671424 所在专业 信息管理与信息系统 所在班级 信管1134班 ...

  6. 《数据结构课程设计》 活期储蓄管理系统 实验报告

    <数据结构课程设计> 题目1:活期储蓄管理系统   学生姓名 胡泳行 所在专业 信息管理与信息系统专业 所在班级 信管1134班 任课老师 易学明 实习时间 2015年 1月 4 日 指导 ...

  7. 数据结构课程设计——机票售卖系统(C++)

    引言 这学期最后的数据结构课程设计需要我们完成一个简单的小程序,我选择了一个机票售卖系统,实现了一些基本的功能:因为时间给的比较短,又赶在复习周补课,所以并没有什么突出的地方,我就在这里聊聊我的代码实 ...

  8. 数据结构课程设计---最长公共子串

    数据结构课程设计,由用户输入两个字符串串X和Y,再由用户输入一个任意的字符串Z,实现以下功能: ①如果字符串Z是字符串X的子串,则显示Z在X中的位置并记录,如果字符串Z是字符串Y的子串,则显示Z在Y中 ...

  9. 设树采用孩子兄弟表示法存放.用类c语言设计算法计算树的高度.,(数据结构课程设计分类题目.doc...

    (数据结构课程设计分类题目 线性表 顺序表: 1.设有一元素为整数的线性表L=(a1,a2,a3,-,an),存放在一维数组A[N]中,设计一个算法,以表中an作为参考元素,将该表分为左.右两部分,其 ...

最新文章

  1. 33个非常有创意的404错误页面设计
  2. 如何快速搭建开放、多租户的电商云平台
  3. java小编程----四数之和
  4. REST资源何时应获得其自己的地址?
  5. unity 烘焙参数 设置_Unity通用渲染管线(URP)系列(九)——点光源和聚光灯
  6. java恐怖游戏_分享个经典恐怖游戏系列
  7. 函数的梯度方向和切线方向_梯度是函数变化最快的方向
  8. 【超参数】深度学习中 number of training epochs,iteration,batch-size
  9. 别总写代码,这130个网站比涨工资都重要
  10. 【爬虫】python爬取微信公众号
  11. 10个免费高清图片网站,良心推荐,收藏就是学会了
  12. 斗魔之残龙纹 第一章
  13. Android studio 如何连接手机
  14. Variant类型在各语言中的参数传递
  15. 哈尔滨华夏计算机学院赵娜,赵 娜(ZHAO Na)博士,副教授
  16. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第48讲:PHP绘图技术
  17. 电话号码分身(java小米校招17)
  18. 20144306《网络对抗》CAL_MSF基础运用
  19. qt QSqlQuery查询报错:无查询无法获取行
  20. 机箱电源专业术语解析[转]

热门文章

  1. 智慧燃气系统基于GIS技术的搭建
  2. python解常微分方程龙格库_数值常微分方程-欧拉法与龙格-库塔法
  3. ORA-14400错误
  4. C语言的access函数的用法
  5. postman使用自定义函数
  6. 正则匹配两个字符之间的字符串
  7. 动态设置html样式或style具体属性
  8. 云计算平台建设总体技术方案
  9. 【表单】表单数据的提交和处理
  10. python的flask框架