《[毕业设计精品]仓库管理系统(线性表的应用).doc》由会员分享,可在线阅读,更多相关《[毕业设计精品]仓库管理系统(线性表的应用).doc(40页珍藏版)》请在三一办公上搜索。
1、数据结构课程设计报告信息工程学院计算机科学与技术专业题目:仓库管理系统(线性表的应用) 日期:2011 年12月30日程序设计书目录一、程序设计目标二、问题描述三、需求分析(说明课程设计的任务)四、概要设计(说明课程设计中用到的抽象数据类型的定义、主程序的流程以及各程序模块之间的调用关系等)五、详细设计(实现程序模块的具体算法)六、软件说明书(给出软件应如何使用,使用时的注意事项)七、源程序清单(要求400行以上,要有注释说明)八、测试报告(调试过程中遇到的问题及解决方法,并列出测试结果,包括输入和输出) 九、课程设计总结 程序设计书1. 程序设计目标: (1)程序设计我们可以巩固书本上的知识
2、,复习运用的语言,比如说你会对指针,结构体有更加深入的理解。全面的理解数据结构,并运用它 (2)我们一些书上的问题看似容易,但当我们自己动手的时候,就可以现,我们一些思想上的错误。 (3)在这编程中,我们养成了一种很好的编程习惯。以防错误的发生。 (4)处于将自己的程序装扮的更漂亮,我们发挥了各自的头脑,学习了不同的表现手法。 (5) 通过这次课程设计,培养了团队合作精神,为以后的多人任务的完成提供了基础。2. 问题描述 建立一个仓库管理程序,实现建立表,对货物的增加,删除,查找,更改,显示当前货物以及建立新仓库。3.需求分析 企业的库存管理往往是很复杂、很繁琐的。由于所掌握的物资种类众多,出
3、入库、管理、供销商的渠道各有差异,各个企业之间的管理体制不尽相同,因此仓库的库存管理必须编制一套库存管理系统,实现计算机化操作,而且必须根据企业的具体情况制定相应的方案。 3. 概要设计 仓库管理系统逻辑图(一)编号查找更改函数当前货物编号查找货名查找数量查找当前货物继续函数仓库的建立货物的查找货物的插入货物的删除货物的更改当前货物回主菜单功能菜单我的仓库新的仓库(初始化)主菜单插入,删除,更改略同编号查找插入函数当前货物编号查找删除函数当前货物编号查找更改函数当前货物Continual函数Continual函数Continual函数功能菜单函数功能菜单函数功能菜单函数仓库管理系统逻辑图(二)
4、(1) 定义一个货物结构体 int const max=10; int const time=10; int x;typedef struct dnodeinttype number; /编号chartype name10; /货名inttype counter; / 数量 struct dnode *prior,*next;dlnode,*dlist;(2)动画效果1action1();(3) 动画效果2Action2();(4) 动画效果3Action3();(5) 动画效果4Action4();(6) 尾插入法建表void AddHead(dlnode *head);(7)判断是否为空的
5、函数int IsEmpty(dlnode *head);(8)查找函数,有三个子函数,按编号,货名,数量void FindMe(dlnode *head);(9)按编号查找(返回节点)dlist FindNumber(dlnode *head);(10) 按货名查找void FindName(dlnode *head);(11) 按数量查找void FindCounter(dlnode *head);(12)显示当前货物存储情况void display(dlnode *head);(13) 是否继续,调用完相应功能函数,任意键继续void Continul(dlnode *head);(14)
6、删除函数,先显示当前情况,再删除.void Delet(dlnode *head);(15) 插入函数,先显示当前情况,再插入void Insert(dlnode *head);(16)修改函数, 先显示当前情况,再修改void Change(dlnode *head);(17) 功能菜单函数,包含增,删,查,改void Menu(dlnode *head);(18)主菜单,调用菜单函数void Menu1();(19)主函数,调用actin. void main();5.详细设计主要程序的介绍(1) 主函数先对head初始化,然后调用Action1(),Action2(),Action3()
7、,有Menu(head)调用Action4();程序:void main()system(color 2F); head-next=NULL; rear=head;action1();action2();action3(); Menu(head); (2) Action4用星号的方式,表现出主菜单1. 我的仓库2. 新的仓库然后调用void Menu();(3) Menu()函数负责接收数1,2然后进入功能菜单函数程序: void Menu(dlnode *head)system(cls);action4();cout输入你的选择m; while(m0!=1&m0!=2|m1!=0) cout
8、输入有误,请重新输入m; if(m0=1)Menu1(); else head-next=NULL;rear=head;Menu1(); (4) Menu1()附有增,删,查,改功能子选择,根据输入的数字的不同,使用switch分别调用相应函数,然后调用Continul函数程序: void Menu1() system(cls);for(x=-1;x10;x+) if(x=9) cout =8) cout*t1.仓库的建立t*7) cout*t2.货物的插入t*6) cout*t3.货物的查找t*5) cout*t4.货物的删除t*4) cout*t5.货物的更改t*3) cout*t6.当前
9、货物 t*2) cout *t7.回主菜单 t*1) cout tt=0)cout tt* *-1)cout t= 宗旨:精益求精 =endl; Sleep(time); if(x!=9)system(cls);cout输入你的选择m; while(m07|m1!=0)cout输入有误,请重新输入m; switch(m0) case 1:AddHead(head);Continul(head); break; case 2:Insert(head); Continul(head); break; case 3: FindMe(head);Continul(head);break; case 4
10、: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,如此便建立了一个双向链表,判断是否继续。
11、 程序: void AddHead(dlnode *head) system(cls);dlnode *q;q=head; cout1.继续操作endl;cout2.放弃操作endl; cout输入你的选择m; while(m0!=1&m0!=2|m1!=0) cout输入有误,请重新输入m; if(m0=2)Menu1();m0=y;while(m0=y|m0=Y) /编号为-1,作为结束标志cout请顺序”endl”输入编号,货名,数量ptr-numberptr-nameptr-counter;q-next=ptr;ptr-prior=q;q=ptr;cout是否继续建立(y/n)m;wh
12、ile(m0!=y&m0!=Y&m0!=n&m0!=N|m1!=0) cout输入有误,请重新输入m; if(q!=NULL) q-next=NULL;(6) 判断是否为空(已完好),判断head的下一个节点是否为空 int IsEmpty(dlnode *head) return head-next=NULL;(7)查找,并返回,给出三个选择,1为按编号查找,2为按货名查找,3为按数量查找。根据输入的不同数字,调用分别调用相应的函数void FindMe(dlnode *head) system(cls); if(IsEmpty(head)cout无货物储备endl;elsecout查找部分
13、endl;cout1.按编号查找endl;cout2.按货名查找endl;cout3.按数量查找endl;cout4.直接显示全部endl;cout5.回主菜单endl;cout请输入m;while(m05|m1!=0)cout输入有误,请重新输入m;switch(m0)case 1:cout请输入编号endl;FindNumber(head);break;case 2:FindName(head);break;case 3:cout请输入数量next,直到ptr的编号等于你要查询的编号。因为一个货物子对应与一个编号,所以可以用编号函数返回一个节点的形式,来辅助插入,删除,更改函数。 /* 按
14、编号查找*/dlist FindNumber(dlnode *head) cinx; ptr=head; m0=0; while(ptr&ptr-number!=x) ptr=ptr-next;if(ptr!=NULL) coutt编号 tt货名tt数量endl;couttnumbertt;coutnamett;coutcounterendl;m0=1; if(m0=0)cout无此货物next,直到结束。当发现ptr的ptr的货名与你查询的货名一样时,不能终止,因为有相同货名的货物。void FindName(dlnode *head) cout请输入货名m;ptr=head; x=0;wh
15、ile(ptr) if(strcmp(ptr-name,m)=0) coutt编号 tt货tt数量endl;couttnumbertt;coutnamett;coutcounternext; if(x=0)cout无此货物x; ptr=head; m0=0; while(ptr-next) if(ptr-counter=x) coutt编号tt货名tt数量endl;couttnumbertt;coutnamett;coutcounternext; if(m0=0)cout无此货物next;,直到为空 void display(dlnode *head)system(cls);ptr=head-
16、next;if(IsEmpty(head)cout无货物储备endl;else coutt编号tt货名tt数量endl;while(ptr) couttnumbertt;coutnamett;coutcounternext;(12) 插入函数,首先得显示当前情况,然客户知道是否有必要插入,可能已经处在了你想插入的货物。插入先确定你在哪个节点后面插入,所以调用按编号查找确定ptr。然后在分是否是最后一个节点,因为这两中情况操作不一样。 void Insert(dlnode *head)system(cls);display(head);cout1.继续操作endl;cout2.放弃操作endl;
17、 cout输入你的选择m; while(m0!=1&m0!=2|m1!=0) cout输入有误,请重新输入m; if(m0=2)Menu1(); if(IsEmpty(head); else cout输入你要插入节点的编号endl; ptr=FindNumber(head);if(ptr=NULL);else q=(dlnode*)malloc(sizeof(dlnode);cout输入新节点的编号,货名,数量q-numberq-nameq-counter; if(ptr-next=NULL)ptr-next=q;q-prior=ptr;q-next=NULL;cout插入成功next-pri
18、or=q;q-next=ptr-next;ptr-next=q;q-prior=ptr;cout插入成功endl;(13) 删除函数跟插入函数相近。也得分是不是最后一个节点。 void Delet(dlnode *head)system(cls);display(head);cout1.继续操作endl;cout2.放弃操作endl; cout输入你的选择m; while(m0!=1&m0!=2|m1!=0) cout输入有误,请重新输入m; if(m0=2)Menu1();if(head-next!=NULL)cout输入你要删除节点的编号next=NULL) q-prior-next=NU
19、LL;elseq-prior-next=q-next;q-next-prior=q-prior;free(q);cout删除成功!endl; (14) 更改函数,就直接按编号查找到一个节点,在从新输入。 void Change(dlnode *head)system(cls); display(head);cout1.继续操作endl;cout2.放弃操作endl; cout输入你的选择m; while(m0!=1&m0!=2|m1!=0) cout输入有误,请重新输入m; if(m0=2)Menu1(); if(IsEmpty(head); else cout输入你要修改节点的编号endl;
20、 q=FindNumber(head);if(ptr=NULL)cout无此货物endl;else cout输入新的”endl”编号,货名,数量q-numberq-nameq-counter; cout修改成功!endl;(6) 软件说明书 经过一番动画的欣赏后。出现选择字样的时候,你这时就正式进入了我们仓库。输入你的选择,开始时选择我的仓库和建立新的仓库时等同的。进入用便到了我们的功能菜单区,里面有一系列功能,因为有些功能是建立在有货物的前提之上的,所以你先要选择仓库的建立,然后在进行其他功能。每次建立仓库都会保存已有的货物,所以你并不用担心会导致货物信息的丢失。如果货物的堆积让你头痛,你可
21、以返回主菜单,建立新的仓库。事项:我们的程序就有比较高的健壮性,一般情况下你不用担心系统的崩溃,但在输入编号,货名,数量的时候请按就规范输入,否则将出现错误。(7) 源程序清单 #include iostream#include malloc.h /有的软件不需这个也可以识别malloc#include windows.h /能有延时,设置颜色等函数using namespace std;typedef int inttype; int const max=10; /将其声明为全局变量,可以方便维护int const time=10; int x;char m20;typedef char c
22、hartype;typedef struct dnodeinttype number; /编号chartype name10; /货名inttype counter; / 数量 struct dnode *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
23、=(dlnode*)malloc(sizeof(dlnode);/ 申请尾结点void AddHead(dlnode *head); /前向声明有利于函数间的调用int IsEmpty(dlnode *head);void FindMe(dlnode *head);dlist FindNumber(dlnode *head);void FindName(dlnode *head);void FindCounter(dlnode *head);void display(dlnode *head);void Continul(dlnode *head);void Delet(dlnode *hea
24、d);void Insert(dlnode *head);void Change(dlnode *head);void Menu(dlnode *head);void Menu1();/* 显示3*/void action1()int i;for(i=0;i5;i+)coutendl;coutttt *endl;coutttt *endl; coutttt *endl;coutttt *endl;coutttt *endl;coutttt *endl;coutttt *endl; coutttt *endl;coutttt *endl;coutttt *endl;coutttt *endl;c
25、outttt *endl; Sleep(1000);system(cls);/* 显示2*/void action2()int i;for(i=0;i5;i+)coutendl;coutttt *endl;coutttt *endl; coutttt *endl;coutttt *endl;coutttt *endl;coutttt *endl;coutttt *endl; coutttt *endl;coutttt *endl;coutttt *endl;coutttt *endl;coutttt *endl; Sleep(1000);system(cls);/* 显示1*/void act
26、ion3()int i;for(i=0;i5;i+)coutendl;couttttt *endl;couttttt *endl; couttttt *endl;couttttt *endl;couttttt *endl;couttttt *endl;couttttt *endl;couttttt *endl;couttttt *endl;couttttt *endl; Sleep(1000);system(cls);/* 显示房子与菜单*/void action4()int i;for(i=0;i2;i+)coutendl;couttt *endl;couttt * * *endl;couttt * * *endl;couttt * * *endl;couttt * * *endl;couttt * * * *endl; couttt * * * * endl; couttt * * * endl;couttt * * * endl;couttt * * * endl;couttt * 1. * 我的仓库 * endl;couttt * * * endl;couttt * * * endl;couttt * 2. * 新的仓库 * endl; couttt * * * endl; cou