中北大学
数据结构
课程设计说明书
20##年12月20日
设计内容:
设计一个程序求出完成整项工程至少需要多少时间以及整项工程中的关键活动。
1、对一个描述工程的AOE网,应判断其是否能够顺利进行。
2、若该工程能顺利进行,输出完成整项工程至少需要多少时间,以及每一个关键活动所依附的两个顶点、最早发生时间、最迟发生时间。
设计要求:
(1) 符合课题要求,实现相应功能;
(2) 要求界面友好美观,操作方便易行;
(3) 注意程序的实用性、安全性;
1. 本设计所采用的数据结构(图)
程序流程图
2. 功能模块详细设计
2.1 详细设计思想
主函数switch()对条件进行选择判断,进入关键路径的程序,然后对结点数的接收,分配相应的存储空间,构建AOE-网,逐个对图结点信息(包括俩邻接点,权值)输入接收,并与分配存储空间。寻找关键路径:构建栈用与存储拓扑排序序列,求得每个接点的相应最早发生时间,最迟完成时间,关键事件的求取,并输出关键路径。
2.2 核心代码
#include "stdafx.h"
#include
#include
#include
#include
#include
using namespace std;
//#define PROJECTUNMBER 9//10
//#define PLANNUMBER 11//13
typedef struct node
{
int adjvex;
int dut;
struct node *next;
}edgenode;
typedef struct
{
int projectname;
int id;
edgenode *link;
}vexnode;
//vexnode Graphicmap[PROJECTNUMBER];
void GreateGraphic(vexnode* Graphicmap,int projectnumber,int activenumber)
{
int begin,end,duttem;
edgenode *p;
for(int i=0;i
{
Graphicmap[i].projectname=i;
Graphicmap[i].id=0;
Graphicmap[i].link=NULL;
}
printf("某项目的开始到结束在图中的节点输入\n");
printf("如:3,4,9回车表示第三节点到第四节点之间的活动用了9个单位时间\n");
printf("*********************************************\n");
for(int k=0;k
{
scanf("%d,%d,%d",&begin,&end,&duttem);
p=(edgenode*)malloc(sizeof(edgenode));
p->adjvex=end-1;
p->dut=duttem;
Graphicmap[end-1].id++;
p->next=Graphicmap[begin-1].link;
Graphicmap[begin-1].link=p;
}
}
int SearchMapPath(vexnode* Graphicmap,int projectnumber,int activenumber,int& totaltime)
{
int i,j,k,m=0;
int front=-1,rear=-1;
int* topologystack=(int*)malloc(projectnumber*sizeof(int)); //用来保存拓扑排列
int* vl=(int*)malloc(projectnumber*sizeof(int)); //用来表示在不推迟整个工程的前提下,vl允许最迟发生时间
int* ve=(int*)malloc(projectnumber*sizeof(int)); //用来表示vj最早发生时间
int* l=(int*)malloc(activenumber*sizeof(int)); //用来表示活动Ai最迟完成开始时间
int* e=(int*)malloc(activenumber*sizeof(int)); //表示活动最早开始时间
edgenode *p;
totaltime=0;
for(i=0;i
for(i=0;i
{
if(Graphicmap[i].id==0)
{
topologystack[++rear]=i;
m++;
}
}
while(front!=rear)
{
front++;
j=topologystack[front];
m++;
p=Graphicmap[j].link;
while(p)
{
k=p->adjvex;
Graphicmap[k].id--;
if(ve[j]+p->dut>ve[k])
ve[k]=ve[j]+p->dut;
if(Graphicmap[k].id==0)
topologystack[++rear]=k;
p=p->next;
}
}
if(m
{
printf("\n本程序说建立的图有回路不可计算出关键路径\n");
printf("将退出本程序\n");
return 0;
}
totaltime=ve[projectnumber-1];
for(i=0;i
vl[i]=totaltime;
for(i=projectnumber-2;i>=0;i--)
{
j=topologystack[i];
p=Graphicmap[j].link;
while(p)
{
k=p->adjvex;
if((vl[k]-p->dut)
vl[j]=vl[k]-p->dut;
p=p->next;
}
}
i=0;
printf("|起点 |终点|最早开始时间 |最迟完成时间 |差值| 备注 |\n");
for(j=0;j
{
p=Graphicmap[j].link;
while(p)
{
k=p->adjvex;
e[++i]=ve[j];
l[i]=vl[k]-p->dut;
printf("| %4d | %4d | %4d | %4d | %4d |",
Graphicmap[j].projectname+1,Graphicmap[k].projectname
+1,e[i],l[i],l[i]-e[i]);
if(l[i]==e[i])
printf("关键活动 |");
printf("\n");
p=p->next;
}
}
return 1;
}
void seekkeyroot()
{
int projectnumber,activenumber,totaltime=0;
system("cls");
printf("请输出这个工程的化成图形的节点数:");
scanf("%d",&projectnumber);
printf("\n");
printf("请输入这个工程的活动个数:");
scanf("%d",&activenumber);
printf("\n");
vexnode* Graphicmap=(vexnode*)malloc(projectnumber*sizeof(vexnode));
GreateGraphic(Graphicmap,projectnumber,activenumber);
SearchMapPath(Graphicmap,projectnumber,activenumber,totaltime);
printf("整个工程所用的最短时间为:%d个单位时间\n",totaltime);
system("pause");
}
int main()
{
char ch;
for(;;)
{
do
{
system("cls");
printf("| 欢迎进入求关键路径算法程序 |");
for(int i=0;i<80;i++)printf("*");
printf("\n");
printf("%s","(S)tart 开始输入工程的节点数据并求出关键路径\n");
printf("\n");
printf("%s","(E)xit 退出\n");
printf("\n");
printf("%s","请输入选择:");
scanf("%c",&ch);
ch=toupper(ch);
if(ch!='S'&&ch!='E')
printf("请输入正确的字符!\n");
system("pause");
}while(ch!='S'&&ch!='E');
switch(ch)
{
case'S':
seekkeyroot();
break;
case'E':
return 1;
}
}
}
2.3程序运行结果
输入S开始程序(如图)
输入节点数和活动个数(如图)
输入E,退出程序
3. 课程设计心得
这次的课程设计主要是对基础知识的灵活使用,这就让我进一步提高了对数据结构知识的巩固。这次设计的完成,有很多难题让我都曾不知所措,但通过努力最终解决它们让我体会到成就感,更重要的是我的能力在无形中得到了提升和优化。
今后我会更加的努力,去充分的提升自己。
数据结构课程设计报告学院计算机与通信工程专业网络工程班级学号学生姓名指导教师课程成绩完成日期20xx年2月27日数据结构程序设计学…
中北大学数据结构课程设计说明书20xx年12月20日设计内容设计一个程序求出完成整项工程至少需要多少时间以及整项工程中的关键活动1…
设计报告格式及要求一报告的基本格式与层次编排1基本格式报告题目居中3号黑体摘要顶格小4宋加粗或小4黑摘要正文200300字可另起行…
数据结构课程设计报告院系信息管理学院专业软件工程班级学号姓名李艳平教师邓沌华时间目录一问题的描述二系统需求及分析1简要介绍2需求分…
算法设计与分析实验报告姓名学号班级指导教师实验一1分别用递归法和动态规划法求Fibonacci数给出实2现代码并填写下表表2不同方…
设计报告格式及要求一报告的基本格式与层次编排1基本格式报告题目居中3号黑体摘要顶格小4宋加粗或小4黑摘要正文200300字可另起行…
编号20xx1号编制部门维修部生效日期20xx年7月1日关键设备定期检测及报告制度1总则11为推进基于设备状态的预知维修提高各工厂…
申报资料80拟生产产品的关键工序主要设备和产品工艺验证报告68验证情况报告根据兽药生产质量管理规范要求验证是企业在认证过程中的一个…
数据结构课程设计报告学院计算机与通信工程专业网络工程班级学号学生姓名指导教师课程成绩完成日期20xx年2月27日数据结构程序设计学…
数据结构课程设计报告院系信息管理学院专业软件工程班级学号姓名李艳平教师邓沌华时间目录一问题的描述二系统需求及分析1简要介绍2需求分…