当前位置:文档之家› 数据结构课程设计仓库管理

数据结构课程设计仓库管理

洛阳理工学院课程设计报告课程名称数据结构课程设计设计题目仓库管理系统专业软件工程班级学号姓名完成日期2018年1月12日课程设计任务书设计题目:仓库管理系统设计内容与要求:建立一个仓库管理程序,可以按顺序和货物名称查询仓库存储情况,也可以增加或删除货物信息、实现货物的入库出库,要求能用文件保存仓库货品信息。

【基本要求】(1)记录货物编号,货物名称,货物数量。

(2)能够实现按货物编号、按货物名称查询仓库中货物的库存情况。

(3)能够实现货物入库、出库,并及时更新库存数量。

指导教师:2017年12月27日课程设计评语成绩:指导教师:2018 年1月12日1.算法思想:根据题意我们需要建立一个仓库管理系统,满足可以按顺序和货物名称查询仓库存储情况,可以增加或删除货物信息、实现货物的入库出库,能用文件保存仓库货品信息要求。

经过考虑我用双链表来实现以上要求,双链表每个数据节点都有两个指针,分别指向直接后继和直接前驱,所以从双链表中的任意结点开始,都可以很方便地访问它的前驱结点和后继结点。

方便我们的操作。

2.模块划分:描述所设计程序的各个模块(即函数)功能,给出函数调用关系图,主要功能函数的流程图(至少画2个函数的)。

各功能模块:void main()//主函数DNode *create(DNode *L)//创建链表头节点DNode *input(DNode *L)//入库函数DNode *output(DNode *L)//按编号出库函数void search(DNode *L)//查找的主要菜单void save(DNode *L)//输出到文件函数void search_bianhao(DNode *L)//按编号查找的函数void search_name(DNode *L)//按名称查找的函数void display(DNode *L) //显示货物清单DNode* add(DNode *L) //更新数据函数调用关系图:主函数创建链表头结点保存到文件入库函数出库函数查找函数显示货物清单按编号查询按名称查找更新数据入库函数流程图:L->bianhao<in->bianhao直接入库插入L 之前插入L 之后输入货物名称、编号、数量L->next 是否是头结点开始N NY结束更新数据函数:表内是否有元素 编号是否存在更新数据选择添加或减少 表内无元素编号不存在 开始NNYY减少添加结束3.数据结构:int ifempty=0;//标志,判断链表是无否为空typedef struct DNode //定义双向链表结构体{int bianhao; //货物编号char name[20]; //货物名称int shuliang; //货物数量struct DNode *prior, *next; // 定义两指针,分别指向其前驱和后继}DNode;4.测试测试菜单:测试入库函数: 输入:名称:shui 编号:1001 数量:100测试出库函数输入出库货物编号:1001测试显示货物清单函数:在菜单栏选择4测试查找货物函数:1.按编号查询: 输入10022:按名称查询: 输入yifu:测试更新货物函数: 1. 添加货物: 输入1002;输入添加数量2002. 减少货物: 输入编号1003 输入减少货物50测试输出到文件函数:5.源程序:#include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> #include<windows.h>int ifempty=0;//标志,判断链表是无否为空typedef struct DNode //定义双向链表结构体 { int bianhao; //货物编号char name[20]; //货物名称int shuliang; //货物数量struct DNode *prior, *next; // 定义两指针,分别指向其前驱和后继}DNode;void main();//主函数DNode *create(DNode *L);//创建链表头节点DNode *input(DNode *L);//入库函数DNode *output(DNode *L);//按编号出库函数void search(DNode *L);//查找的主要菜单void save(DNode *L);//输出到文件函数void search_bianhao(DNode *L);//按编号查找的函数void search_name(DNode *L);//按名称查找的函数void display(DNode *L) ; //显示货物清单DNode* add(DNode *L); //更新数据void main(){int x;DNode *L;L=(DNode *)malloc(sizeof(DNode));create(L);while(1){printf(" 菜单\n\n");printf(" 1. 货物入库\n");printf(" 2. 货物出库\n");printf(" 3. 查找货物表\n");printf(" 4. 显示仓库货物表\n");printf(" 5. 输出到文件\n");printf(" 6. 更新数据\n");printf(" 0. 退出\n\n");printf(" 请选择操作(0-6):");scanf("%d",&x);switch(x){case 1:input(L);break;//调用入库出库函数case 2:output(L);break;//调用出库函数case 3:search(L);break;//调用查找函数case 4:display(L);break;//调用显示输出函数case 5:save(L);break;//调用存储函数case 6:add(L);break;//调用更新数据函数case 0:printf("\n 再见!!\n");getchar();exit(0);//退出程序default:printf("输入错误,请输入(0-6):");getchar();}}}DNode *create(DNode *L)//创建链表头节点{printf(" 欢迎使用");getchar();system("cls");ifempty=0;L->next=NULL;L->prior=NULL;L->bianhao=0;L->shuliang=0;strcpy(L->name," "); //初始化return L;}DNode *input(DNode *L)//入库函数{DNode *in,*head;head=in=(DNode *)malloc(sizeof(DNode));head=L;system("cls");printf("\n请输入货物数据:\n");printf("名称:");scanf("%s",&in->name);printf("编号:");scanf("%d",&in->bianhao);printf("数量:");scanf("%d",&in->shuliang);if(L->next==NULL) //如果只有头节点,{L->next=in;L->prior=in;in->next=L;in->prior=L;ifempty++;printf("成功!!\n");}else //如果当前L的下一个节点不是头节点{while((L=L->next)!=head)//如果输入的数大于L->bianhao,则插到L的前面{if(L->bianhao<in->bianhao){in->next=L;in->prior=L->prior;L->prior->next=in;L->prior=in;ifempty++;printf("成功!!\n");return(head);}}//输入的编号比其它编号都小,则插到最后个节点,并首尾相连head->prior->next=in;in->prior=head->prior;head->prior=in;in->next=head;printf("成功!!\n");ifempty++;}return head;}DNode *output(DNode *L)//按编号出库函数{int bianhao;DNode *head=L;system("cls");if(ifempty==0){printf("没有货物输入系统\n");getchar();return(head);}printf("请输入出库货物的编号:");scanf("%d",&bianhao);while((L=L->next)!=head){if(L->bianhao==bianhao)//如果找到就删除节点{L->prior->next=L->next;L->next->prior=L->prior;ifempty--;printf("编号为%d的货物成功出库",bianhao);getchar();return head;}}printf("没有此编号的货物,请查看是否还有货物。

\n\n"); getchar();return (head);}void search(DNode *L) //查找的主要菜单{int y;system("cls");if(ifempty==0){printf("没有输入货物!\n");getchar();return;}else{while(1){printf("1.按编号查询\n");printf("2.按货物名称查询\n");printf("0.返回上一层\n");printf("选择0--2:");scanf("%d",&y);switch(y){case 1:search_bianhao(L);break;//调用按编号查找的函数case 2:search_name(L);break;//调用按名称查找的函数case 0:return;//返回default:printf("输入错误请输入(0--2)\n\n");getchar();printf("\n\n");}}}}void search_bianhao(DNode *L)//按编号查找的函数{int bianhao,flag=0;//(1找到0没找到) DNode *head=L;system("cls");if(ifempty==0){printf("没有货物被输入\n");getchar();return;}printf("输入你要查找的货物编号:\n"); scanf("%d",&bianhao);while((L=L->next)!=head){if(L->bianhao==bianhao){flag=1;printf("找到指定编号货物\n");printf("\n编号:%d\n",L->bianhao);printf("名称:%s\n",L->name) ;printf("数量:%d\n\n",L->shuliang);}}if(flag==0)printf("没有找到指定编号货物,请查看是否还有货物。

相关主题