请教高手检查代码?

java_player 2007-03-18 10:47:28
0390501班2006-2007学年第2学期
上机实习内容
实习主题:数据结构
二叉树的应用¬——简易MRP系统的实现
(Material Requirement Planning)
一、 实习目的
通过一个制造业工厂的简易MRP上机作业的设计和实现,学习和掌握二叉树在管理领域中的应用。本实验要求完成系统的功能结构设计、各模块的算法设计、用C语言实现对各模块的编程,并上机调试运行程序实现全部要求的功能。
二、 实习任务
1、MRP系统要求实现以下功能:
(1) 通过友好的界面提供主菜单,方便用户选择使用系统的各种功能;
(2) 输入数据和建树功能 通过友好的界面方便地输入产品所有零部件的各项物料需求的初始数据并生成结点,自动建立能正确表示产品结构关系的二叉树;
(3) 数据分解功能 准确快速地由上而下自动分解计算产品各零部件的生产要素数据,得到各种零部件的实际生产量、投产时间和产出时间等;
(4) 数据输出功能 遍历输出产品结构二叉树,按MRP方法分解前和分解后的结点数据,打印物料初始数据表和物料需求计划表;
(5) 数据调整功能 能根据对MRP分解得出的物料需求计划中各零部件生产要素数据的分析,清楚地表示各要素数据的合理性和物料需求计划可行性,对导致物料需求计划不可行的不合理初始数据能方便地加以反复调整,直到物料需求计划合理可行为止;
(6) 查询功能 能方便地查询任何零部件结点分解之前和之后的各项数据,尤其是实验生产量、投产时间和产出时间;
(7) 数据存储功能 能准确有效地将各零部件的初始数据和分解后得到的数据正确地存入指定的磁盘文件中,并能根据需要自动地将数据读入MRP树的相应结点中。
2、本实习任务要求完成以下工作:
(1)根据上述要求,设计MRP系统的功能结构,画出系统功能结构图;
(2)根据功能结构设计,进行功能模块结构设计,画出系统模块结构图;
(3)按照任务给定的电视机产品结构树及结点数据结构,设计并画出存放物料需求计划中各个零部件数据的产品结构二叉树;
(4)为每一个功能模块设计能较好地实现规定功能的算法,画出各模块的N—S图;
(5)根据确定的数据结构和设计的算法,应用C语言编写各模块程序;
(6)上机高度各个功能模块和菜单控制模块的程序。在高度过程中不断修改和完善模块功能,使其达到系统功能的要求;
(7)为产品结构树各个结点设定生产要素的初始数据,以此数据进行MRP分解,对分解结果进行反复调整,最后得到良好可行的物料需求计划。
三、 实习步骤
本次大型上机作业,分五次完成,每次三小时。学生应按实验任务的要求,按以下进度完成上机任务。
在首次上机之前,先完成实验任务要求完成的第(1)、(2)、(3)、(4)、(5)等项工作,完成这些工作的具体依据如下所述。
本任务假设为某电视机生产厂实现物料需求计划,其产品结构树及各数据项设定如下:
产品结构树:


结点记录的数据项:

域名 含义 数据类型
num 部件编号 char[6]
fnum 父结点编号 char[6]
name 部件名称 char[6]
req 毛需要量 int
stock 库存量 int
allreq 净需要量 int
smtime 单件生产工时 real
wam 工位数 int
hd 工日时数 real
maketime 生产工日 real
intime 投产时间 real
outtime 产出时间 real
shop 生产车间 char[6]
sontag 真儿子标记 int(可选)
Lchild 左指针 指针型
Rchild 右指针 指针型
已知数据:
各零部件的编号、名称、毛需要量(装配需要量)、库存量、单件生产工时、工位数、工日时数、生产车间、父结点编号(根据二叉树确定)。
给定数据:
整机的生产量及其产出时间(由键盘输入)
待求数据:
各零部件的净需要量(实际生产量)、生产工日、投产时间、产出时间。
物料需求分解中的几个基本关系:
(1)、p->allreq=p->req*f->allreq-p->stock;
若p->stock>p->req*f->allreq;则p->allreq=0;且 p->stock=p->stock-p->req*f->allreq;
(2)、p->maketime=p->smtime*p->allreq/p->wam/p->hd;
p->outtime=f->intime;
p->intime=p->outtime-p->maketime;
注:(1)只有要结点(整机)的outtime和allreq是设定的,无需计算。
(2)产品结构树中各结点所示零部件的装配需要量为:
按键 12 伴音(电路) 3
线圈 4 电源(电路) 2
通道(电路) 2 其余 1
建议系统设以下功能模块:
(1) 输入初始数据模块 提供数据输入界面给结点输入初始数据;
(2) 插入建树模块 采用先序建树方法,插入已输入初始数据的结点,建立产品结构二叉树;
(3) 打印模块 采用先序遍历方法,列表输出产品结构二叉树各个结点的数据。可分设表头打印模块和数据打印模块,其中表头打印模块按分解前的初始数据表和分解后的物料需求计划表分别设置,以实现初始数据表和物料需求计划表的打印输出;
(4) 物料需求分解模块 通过先序遍历方法,根据上述几个基本关系分解计算各个结点的待求数据;
(5) 数据修改模块 采用先序遍历方法,查找待修改的结点,列出该结点数据,提供修改某一项初始数据的人机界面,实现数据修改;
(6) 查询初始数据 遍历分解前的产品二叉树,查询指定结点的初始数据;
(7) 查询材料需求计划数据 遍历分解后的产品二叉树,查询指定结点的物料需求计划数据;
(8) 存盘模块 将全部初始数据或材料需求计划数据分别存入指定的磁盘文件。
2.合理分配上机时间,在五次上机中完成本次上机作业的程序编辑、数据输入、功能模块程序调试、全系统程序调试的工作,保证正确实现物料需求计划的分解的输出。最后一次上机要输入老师提供的一组产品初始数据,输出物料需求计划数据供老师检测和评分。





附:初始数据表

编号 名称 毛需数 单件
产时 工位数 日工时 生产
时间 投产
时间 产出
时间 车间 库存量
1 整机 5000 4.0 40 8.0 0.0 0.0 400.0 总装 0
2 机箱 1 2.0 22 8.0 0.0 0.0 0.0 附件 220
3 机壳 1 0.3 3 8.0 0.0 0.0 0.0 附件 330
4 按键 10 0.2 12 8.0 0.0 0.0 0.0 附件 2222
5 显像 1 2.5 20 8.0 0.0 0.0 0.0 装配 200
6 显像管 1 4.0 36 8.0 0.0 0.0 0.0 供应 500
7 线圈 2 3.3 35 8.0 0.0 0.0 0.0 装配 330
8 电路 1 5.0 24 8.0 0.0 0.0 0.0 电路 240
9 电源 1 4.5 30 8.0 0.0 0.0 0.0 电路 120
10 通道 2 3.5 42 8.0 0.0 0.0 0.0 电路 420
11 扫描 2 2.5 25 8.0 0.0 0.0 0.0 电路 250
12 伴音 1 2.0 10 8.0 0.0 0.0 0.0 电路 100
13 高频头 2 2.0 20 8.0 0.0 0.0 0.0 供应 200
四、 组织方式
1、可按分组的方式进行,最多每组2个人,请分工明晰;
2、于第一次上机时将分组情况及分工情况上报老师处备案(请上机前确定好)。
五、 实习报告要求
1、 格式
实习报告采用学校的专用实习报告纸张书写或用A4幅面的纸张打印。
A. 根据功能结构设计,进行功能模块结构设计,画出系统模块结构图;
B. 为每一个功能模块设计能较好地实现规定功能的算法,画出各模块的N—S图;
C. 测试结果;
D. 试习中的心得、体会和建议;
E. 附录(源程序文件名清单)。
2、 程序提交
于最后一次上机时将源程序代码提交到机房网站上。
3、试验书面报告的上交
以班为单位由学习委员于第四周一下午5:00-6:00交到实验室办公室(数字图书馆负一楼)邓老师处。
注意:希望大家上机时将自己的设计用机房的计算机实现,其余时间可以用自己的计算机继续实现,并尽量充分发挥想象把系统设计得更完善。
六、 实习总成绩计算
1、考勤:20%(三次不到取消资格);
2、系统实现:50%(绝大部分的功能实现占80%,界面占20%);
3、上机报告30%。
4、实验报告必须包含以下表头:
实习主题
实验题目
实验时间 学年 学期 周 ( 年 月 日— 日)
学生姓名 学号 班级
同组姓名 学号 班级
实验地点 设备号 指导教师

...全文
288 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
goodluckyxl 2007-03-19
把出问题的地方抽出来
这样一抹黑 看个p
回复
iamcaicainiao 2007-03-19
你写的。
你运行了哇?
有嘛问题嘛?
回复
jixingzhong 2007-03-19
楼主检查一下,
如果有问题,
描述一下问题情况,
然后贴相关代码部分 ~
回复
bargio_susie 2007-03-19
好长,只有帮顶了。。。
回复
java_player 2007-03-18
下面是我写的???

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<iostream.h>

int n; /*订单数量*/
char num[6]; /*零件编号*/
int outtime; /*交货时间*/

typedef struct node{
char num[6];
char fnum[6];
int partnum;
char name[6];
int req;
int number;
int stock;
int allreq;
int smtime;
int wam;
int hd;
int maketime;
int intime;
int outtime;
char shop[6];
int sontag;
struct node *Lchild;
struct node *Rchild;
}*Node;

Node head;

Node CreateBinTree(Node head)
{
char s;
Node tempnode;
tempnode=(Node)malloc(sizeof(struct node));
head=tempnode;
printf("请按先序顺序输入各零件信息");
printf("该结点为空请按'n',不为空请按'y':");
cin>>s;
printf("%c\n",s);
if(s=='n')
return 0;
else{
printf("请输入该零件编号:\n");
scanf("%s",&tempnode->num);
printf("%s",tempnode->num);
printf("请输入该零件父结点编号(根结点请输'empty'):\n");
scanf("%s",&tempnode->fnum);
printf("%s",tempnode->fnum);
printf("请输入该零件名称");
scanf("%s",&tempnode->name);
printf("%s",tempnode->name);
printf("请输入生产整机所需该零件数:\n");
scanf("%d",&tempnode->number);
printf("%d",tempnode->number);
printf("请输入该零件单位生产工时:\n");
scanf("%d",&tempnode->smtime);
printf("%d",tempnode->smtime);
printf("请输入生产该零件的工位数:\n");
scanf("%d",&tempnode->wam);
printf("%d",tempnode->wam);
printf("请输入生产该零件的工人的工日时数:\n");
scanf("%d",&tempnode->hd);
printf("%d",tempnode->hd);
printf("请输入该零件生产车间:\n");
scanf("%s",&tempnode->shop);
printf("%s",tempnode->shop);
printf("请问该零件所在结点是否为真孩子(是输'1',否输'0'):\n");
scanf("%d",&tempnode->sontag);
printf("%d",tempnode->sontag);
printf("\n");
tempnode->Lchild=CreateBinTree(tempnode->Lchild);
tempnode->Rchild=CreateBinTree(tempnode->Rchild);
return head;
}
}



Node search(Node head){
if(head)
{
if(strcmp(head->num,num)==0)
return head;
else
{
if(search(head->Lchild))
return search(head->Lchild);
else
return search(head->Rchild);
}
}
else
return 0;
}


Node Search(char tempnum[6]){
strcpy(num,tempnum);
printf("\n%s\n",num);
return search(head);
}


void fenjie(Node tempnode1){
Node tempnode2;
printf("\n");
if(tempnode1){
tempnode1->req=tempnode1->number*n;
tempnode1->allreq=tempnode1->req-tempnode1->stock;
tempnode1->maketime=tempnode1->allreq/tempnode1->wam/tempnode1->hd;
if(strcmp(tempnode1->fnum,"empty"))
{
tempnode2=Search(tempnode1->fnum);
if(tempnode1->sontag==1)
{
tempnode1->outtime=tempnode2->intime;
tempnode1->intime=tempnode1->outtime-tempnode1->maketime;
}
else
tempnode1->outtime=tempnode2->outtime;
tempnode1->intime=tempnode2->outtime-tempnode2->maketime;
}
else
{
tempnode1->outtime=outtime;
tempnode1->intime=outtime-tempnode1->maketime;
}
fenjie(tempnode1->Lchild);
fenjie(tempnode1->Rchild);
}
}


void preorder(Node tempnode){

if(tempnode)
{
printf("%9s%10d%11d%9d%8d\n",tempnode->name,tempnode->allreq,tempnode->maketime,
tempnode->intime,tempnode->outtime);
preorder(tempnode->Lchild);
preorder(tempnode->Rchild);
}
}

void dayin(){
Node tempnode=head;
printf("各零件需求和生产信息:\n");
printf("name allreq maketime intime outtime \n");
preorder(tempnode);
}

void Modify(Node tempnode){
if(tempnode){
if(!strcmp(tempnode->num,num)){
modify(tempnode->Lchild);
modify(tempnode->Rchild);
}
else{

printf("请重新输入该零件的信息:\n");
printf("请输入该零件编号:\n");
scanf("%s",&tempnode->num);
printf("%s",tempnode->num);
printf("请输入该零件父结点编号(根结点请输'empty'):\n");
scanf("%s",&tempnode->fnum);
printf("%s",tempnode->fnum);
printf("请输入该零件名称:\n");
scanf("%s",&tempnode->name);
printf("%s",tempnode->name);
printf("请输入生产整机所需该零件数:\n");
scanf("%d",&tempnode->number);
printf("%d",tempnode->number);
printf("请输入该零件单位生产工时:\n");
scanf("%d",&tempnode->smtime);
printf("%d",tempnode->smtime);
printf("请输入生产该零件的工位数,:\n");
scanf("%d",&tempnode->wam);
printf("%d",tempnode->wam);
printf("请输入生产该零件的工人的工日时数:\n");
scanf("%d",&tempnode->hd);
printf("%d",tempnode->hd);
printf("请输入该零件生产车间:\n");
scanf("%s",&tempnode->shop);
printf("%s",tempnode->shop);
printf("请问该零件所在结点是否为真孩子(是输'1',否输'0'):\n");
scanf("%s",&tempnode->sontag);
printf("%s\n",tempnode->sontag);
}
}
}


void Modify(){
printf("请输入你要修改的零件编号:");
scanf("%s",&num);
printf("%s",num);
modify(head);
}


void main(){
char ch1,ch2;
head=createbintree(head);
ch1='y';
while(ch1=='y'||ch1=='Y'){
printf("***************欢迎使用MRP系统****************\n");
printf("==============================================\n");
printf(" 1. 建立二叉树 2. 输出初始数据\n");
printf(" 3. 数据分解 4. 查找 \n");
printf(" 5. 修改 6. 打印 \n");
printf(" 7. 退出 \n");
printf("==============================================\n");
printf("请选择(1-7)...如果你是第一次使用,请选择'1'..\n");
scanf("\n%c",&ch2);
printf("%c",ch2);
switch(ch2){
case'1':
CreateBinTree();
break;
case'2':
preorder();
break;
case'3':
printf("请问你要订多少台电视机:");
scanf("%d",&n);
printf("\n何时交货:");
scanf("%d",&outtime);
fenjie();
break;
case'4':search();
break;
case'5':Modify();
break;
case'6':dayin();
break;
case'7':ch1='n';
break;
default:
ch1='n';

}
}
}
回复
相关推荐
发帖
C语言
创建于2007-09-28

6.4w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2007-03-18 10:47
社区公告
暂无公告