仓库管理系统线性表的应用.docx
- 文档编号:3808420
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:47
- 大小:232.28KB
仓库管理系统线性表的应用.docx
《仓库管理系统线性表的应用.docx》由会员分享,可在线阅读,更多相关《仓库管理系统线性表的应用.docx(47页珍藏版)》请在冰点文库上搜索。
仓库管理系统线性表的应用
《数据结构》课程设计报告
信息工程学院
计算机科学与技术专业
题目:
仓库管理系统(线性表的应用)
日期:
2011年12月30日
程序设计书目录
一、程序设计目标
二、问题描述
三、需求分析(说明课程设计的任务)
四、概要设计(说明课程设计中用到的抽象数据类型的定义、主程序的流程以及各程序模块之间的调用关系等)
五、详细设计(实现程序模块的具体算法)
六、软件说明书(给出软件应如何使用,使用时的注意事项)
七、源程序清单(要求400行以上,要有注释说明)
八、测试报告(调试过程中遇到的问题及解决方法,并列出测试结果,包括输入和输出)
九、课程设计总结
程序设计书
1.程序设计目标:
(1)程序设计我们可以巩固书本上的知识,复习运用的语言,比如说你会对指针,结构体有更加深入的理解。
全面的理解数据结构,并运用它
(2)我们一些书上的问题看似容易,但当我们自己动手的时候,就可以现,我们一些思想上的错误。
(3)在这编程中,我们养成了一种很好的编程习惯。
以防错误的发生。
(4)处于将自己的程序装扮的更漂亮,我们发挥了各自的头脑,学习了不同的表现手法。
(5)通过这次课程设计,培养了团队合作精神,为以后的多人任务的完成提供了基础。
2.问题描述
建立一个仓库管理程序,实现建立表,对货物的增加,删除,查找,更改,显示当前货物以及建立新仓库。
3.需求分析
企业的库存管理往往是很复杂、很繁琐的。
由于所掌握的物资种类众多,出入库、管理、供销商的渠道各有差异,各个企业之间的管理体制不尽相同,因此仓库的库存管理必须编制一套库存管理系统,实现计算机化操作,而且必须根据企业的具体情况制定相应的方案。
3.概要设计
(1)定义一个货物结构体
intconstmax=10;
intconsttime=10;
intx;
typedefstructdnode
{
inttypenumber;//编号
chartypename[10];//货名
inttypecounter;//数量
structdnode*prior,*next;
}dlnode,*dlist;
(2)动画效果1
action1();
(3)动画效果2
Action2();
(4)动画效果3
Action3();
(5)动画效果4
Action4();
(6)尾插入法建表
voidAddHead(dlnode*head);
(7)判断是否为空的函数
intIsEmpty(dlnode*head);
(8)查找函数,有三个子函数,按编号,货名,数量
voidFindMe(dlnode*head);
(9)按编号查找(返回节点)
dlistFindNumber(dlnode*head);
(10)按货名查找
voidFindName(dlnode*head);
(11)按数量查找
voidFindCounter(dlnode*head);
(12)显示当前货物存储情况
voiddisplay(dlnode*head);
(13)是否继续,调用完相应功能函数,任意键继续
voidContinul(dlnode*head);
(14)删除函数,先显示当前情况,再删除.
voidDelet(dlnode*head);
(15)插入函数,先显示当前情况,再插入
voidInsert(dlnode*head);
(16)修改函数,先显示当前情况,再修改
voidChange(dlnode*head);
(17)功能菜单函数,包含增,删,查,改
voidMenu(dlnode*head);
(18)主菜单,调用菜单函数
voidMenu1();
(19)主函数,调用actin.
voidmain();
5.详细设计
主要程序的介绍
(1)主函数先对head初始化,然后调用Action1(),Action2(),Action3(),有Menu(head)调用Action4();
程序:
voidmain()
{
system("color2F");
head->next=NULL;
rear=head;
action1();
action2();
action3();
Menu(head);
}
(2)Action4用星号的方式,表现出主菜单
1.我的仓库
2.新的仓库
然后调用voidMenu();
(3)Menu()函数负责接收数1,2然后进入功能菜单函数
程序:
voidMenu(dlnode*head)
{
system("cls");
action4();
cout<<"输入你的选择"< cin>>m; while(m[0]! ='1'&&m[0]! ='2'||m[1]! ='\0') { cout<<"输入有误,请重新输入"< cin>>m; } if(m[0]=='1')Menu1(); else { head->next=NULL; rear=head; Menu1(); } } (4)Menu1()附有增,删,查,改功能子选择,根据输入的数字的不同,使用switch分别调用相应函数,然后调用Continul函数 程序: voidMenu1() { system("cls"); for(x=-1;x<10;x++) { if(x==9)cout<<"======================================="< if(x>8)cout<<"*****\t1.仓库的建立\t*****"< if(x>7)cout<<"*****\t2.货物的插入\t*****"< if(x>6)cout<<"*****\t3.货物的查找\t*****"< if(x>5)cout<<"*****\t4.货物的删除\t*****"< if(x>4)cout<<"*****\t5.货物的更改\t*****"< if(x>3)cout<<"*****\t6.当前货物\t*****"< if(x>2)cout<<"*****\t7.回主菜单\t*****"< if(x>1)cout<<"\t\t==============================="< if(x>0)cout<<"\t\t****"< if(x>-1)cout<<"\t=====宗旨: 精益求精========="< Sleep(time); if(x! =9)system("cls"); } cout<<"输入你的选择"< cin>>m; while(m[0]<'1'||m[0]>'7'||m[1]! ='\0') { cout<<"输入有误,请重新输入"< cin>>m; } switch(m[0]) { case'1': AddHead(head); Continul(head); break; case'2': Insert(head); Continul(head); break; case'3': FindMe(head); Continul(head); break; case'4': Delet(head); Continul(head); break; case'5': Change(head); Continul(head); break; case'6': display(head); Continul(head); break; case'7': Menu(head);break; } } (5)功能菜单函数选择1,调用AddHead函数,先判断是否继续操作,输入1继续,输入2返回功能菜单。 尾插入法建表主要是先申请一个头结点。 每次循环申请一个ptr节点,首先将q指向head,然后q的下一个节点设为ptr,ptr的前一个节点设为head,q=ptr,如此便建立了一个双向链表,判断是否继续。 程序: voidAddHead(dlnode*head) { system("cls"); dlnode*q; q=head; cout<<"1.继续操作"< cout<<"2.放弃操作"< cout<<"输入你的选择"< cin>>m; while(m[0]! ='1'&&m[0]! ='2'||m[1]! ='\0') { cout<<"输入有误,请重新输入"< cin>>m; } if(m[0]=='2')Menu1(); m[0]='y'; while(m[0]=='y'||m[0]=='Y')//编号为-1,作为结束标志 { cout<<"请顺序”< ptr=(dlnode*)malloc(sizeof(dlnode)); cin>>ptr->number>>ptr->name>>ptr->counter; q->next=ptr; ptr->prior=q; q=ptr; cout<<"是否继续建立(y/n)"< cin>>m; while(m[0]! ='y'&&m[0]! ='Y'&&m[0]! ='n'&&m[0]! ='N'||m[1]! ='\0') { cout<<"输入有误,请重新输入"< cin>>m; } } if(q! =NULL)q->next=NULL; } (6)判断是否为空(已完好),判断head的下一个节点是否为空 intIsEmpty(dlnode*head) { returnhead->next==NULL; } (7)查找,并返回,给出三个选择,1为按编号查找,2为按货名查找,3为按数量查找。 根据输入的不同数字,调用分别调用相应的函数 voidFindMe(dlnode*head) { system("cls"); if(IsEmpty(head)) { cout<<"无货物储备"< } else { cout<<"查找部分"< cout<<"1.按编号查找"< cout<<"2.按货名查找"< cout<<"3.按数量查找"< cout<<"4.直接显示全部"< cout<<"5.回主菜单"< cout<<"请输入"< cin>>m; while(m[0]<'1'||m[0]>'5'||m[1]! ='\0') { cout<<"输入有误,请重新输入"< cin>>m; } switch(m[0]) { case'1': cout<<"请输入编号"< case'2': FindName(head);break; case'3': cout<<"请输入数量"< case'4': display(head);Continul(head);break; case'5': Menu1();break; } } } (8)按编号查找,不断的ptr=ptr->next,直到ptr的编号等于你要查询的编号。 因为一个货物子对应与一个编号,所以可以用编号函数返回一个节点的形式,来辅助插入,删除,更改函数。 /************************************** 按编号查找 **************************************/ dlistFindNumber(dlnode*head) { cin>>x; ptr=head; m[0]='0'; while(ptr&&ptr->number! =x) { ptr=ptr->next; } if(ptr! =NULL) { cout<<"\t编号\t\t"<<"货名\t\t"<<"数量"< cout<<"\t"< cout< cout< m[0]='1'; } if(m[0]=='0')cout<<"无此货物"< returnptr; } (9)按货名查找,不断的ptr=ptr->next,直到结束。 当发现ptr的ptr的货名与你查询的货名一样时,不能终止,因为有相同货名的货物。 voidFindName(dlnode*head) { cout<<"请输入货名"< cin>>m; ptr=head; x=0; while(ptr) { if(strcmp(ptr->name,m)==0) { cout<<"\t编号\t\t"<<"货\t\t"<<"数量"< cout<<"\t"< cout< cout< x=1; } ptr=ptr->next; } if(x==0)cout<<"无此货物"< } (10)按数量查询,与按编号查找相似,但也得考虑到货物的数量有可能相同。 voidFindCounter(dlnode*head) { cin>>x; ptr=head; m[0]='0'; while(ptr->next) { if(ptr->counter==x) { cout<<"\t编号\t\t"<<"货名\t\t"<<"数量"< cout<<"\t"< cout< cout< m[0]='1'; } ptr=ptr->next; } if(m[0]=='0')cout<<"无此货物"< } (11)显示当前的货物存储情况,不断输出ptr的编号,货名,数量。 然后ptr=ptr->next;,直到为空 voiddisplay(dlnode*head) { system("cls"); ptr=head->next; if(IsEmpty(head)) { cout<<"无货物储备"< } else {cout<<"\t编号\t\t"<<"货名\t\t"<<"数量"< while(ptr) { cout<<"\t"< cout< cout< ptr=ptr->next; } } } (12)插入函数,首先得显示当前情况,然客户知道是否有必要插入,可能已经处在了你想插入的货物。 插入先确定你在哪个节点后面插入,所以调用按编号查找确定ptr。 然后在分是否是最后一个节点,因为这两中情况操作不一样。 voidInsert(dlnode*head) { system("cls"); display(head); cout<<"1.继续操作"< cout<<"2.放弃操作"< cout<<"输入你的选择"< cin>>m; while(m[0]! ='1'&&m[0]! ='2'||m[1]! ='\0') { cout<<"输入有误,请重新输入"< cin>>m; } if(m[0]=='2')Menu1(); if(IsEmpty(head)); else { cout<<"输入你要插入节点的编号"< ptr=FindNumber(head); if(ptr==NULL); else { q=(dlnode*)malloc(sizeof(dlnode)); cout<<"输入新节点的编号,货名,数量"< cin>>q->number>>q->name>>q->counter; if(ptr->next==NULL) { ptr->next=q; q->prior=ptr; q->next=NULL; cout<<"插入成功"< } else { ptr->next->prior=q; q->next=ptr->next; ptr->next=q; q->prior=ptr; cout<<"插入成功"< } } } } (13)删除函数跟插入函数相近。 也得分是不是最后一个节点。 voidDelet(dlnode*head) { system("cls"); display(head); cout<<"1.继续操作"< cout<<"2.放弃操作"< cout<<"输入你的选择"< cin>>m; while(m[0]! ='1'&&m[0]! ='2'||m[1]! ='\0') { cout<<"输入有误,请重新输入"< cin>>m; } if(m[0]=='2')Menu1(); if(head->next! =NULL) { cout<<"输入你要删除节点的编号"< q=FindNumber(head); if(q==NULL); elseif(q->next==NULL)q->prior->next=NULL; else { q->prior->next=q->next; q->next->prior=q->prior; } free(q); cout<<"删除成功! "< } } (14)更改函数,就直接按编号查找到一个节点,在从新输入。 voidChange(dlnode*head) { system("cls"); display(head); cout<<"1.继续操作"< cout<<"2.放弃操作"< cout<<"输入你的选择"< cin>>m; while(m[0]! ='1'&&m[0]! ='2'||m[1]! ='\0') { cout<<"输入有误,请重新输入"< cin>>m; } if(m[0]=='2')Menu1(); if(IsEmpty(head)); else { cout<<"输入你要修改节点的编号"< q=FindNumber(head); if(ptr==NULL)cout<<"无此货物"< else { cout<<"输入新的”< cin>>q->number>>q->name>>q->counter; cout<<"修改成功! "< } } } (6)软件说明书 经过一番动画的欣赏后。 出现选择字样的时候,你这时就正式进入了我们仓库。 输入你的选择,开始时选择我的仓库和建立新的仓库时等同的。 进入用便到了我们的功能菜单区,里面有一系列功能, 因为有些功能是建立在有货物的前提之上的,所以你先要选择仓库的建立,然后在进行其他功能。 每次建立仓库都会保存已有的货物,所以你并不用担心会导致货物信息的丢失。 如果货物的堆积让你头痛,你可以返回主菜单,建立新的仓库。 事项: 我们的程序就有比较高的健壮性,一般情况下你不用担心系统的崩溃,但在输入编号,货名,数量的时候请按就规范输入,否则将出现错误。 (7)源程序清单 #include"iostream" #include"malloc.h"//有的软件不需这个也可以识别malloc #include"windows.h"//能有延时,设置颜色等函数 usingnamespacestd; typedefintinttype; intconstmax=10;//将其声明为全局变量,可以方便维护 intconsttime=10; intx; charm[20]; typedefcharchartype; typedefstructdnode { inttypenumber;//编号 chartypename[10];//货名 inttypecounter;//数量 structdnode*prior,*next; }dlnode,*dlist; dlnode*ptr=(dlnode*)malloc(sizeof(dlnode));//申请一个ptr指针节点 dlnode*q=(dlnode*)malloc(sizeof(dlnode));//申请一个q指针节点 dlnode*head=(dlnode*)malloc(sizeof(dlnode));//申请头结点 dlnode*rear=(dlnode*)malloc(sizeof(dlnode));//申请尾结
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 仓库 管理 系统 线性 应用