第1页(共26页)库存物品信息管理1、设计目的:利用《数据结构》课程的相关知识完成一个具有一定难度的综合设计题目,利用C/C++语言进行程序设计,并规范地完成课程设计报告。通过课程设计,巩固和加深对线性表、栈、队列、字符串、树、图、查找、排序等理论知识的理解;掌握现实复杂问题的分析建模和解决方法(包括问题描述、系统分析、设计建模、代码实现、结果分析等);提高利用计算机分析解决综合性实际问题的基本能力。2、设计内容和要求:①、要求物品出库、入库信息管理,浏览、修改物品信息;②、物品信息按名称和代码存放,在程序出错时自动返回主页面③、可以按物品名称物品代码来查询物品信息,即在主菜单中增加查询功能选项,输入代码或名称即可显示;④、可以修改、删除某库存物品信息。二、运行环境(软、硬件环境)软件环境:Vc6.0编程软件运行平台:Win32硬件:普通个人PC机三、算法设计的思想1、输入物品信息函数:Add(Linkl)第2页(共26页)基本思想:根据物品代码(code)来输入物品信息,如果代码已存在,则按ENTER键返回主页面;如果代码不存在,则继续输入物品名称、物品数量、物品等级;若继续输入,就直接输入代码等信息,若返回上一级,就按“0”键,调用main(),返回主界面。2、物品出库函数:Del(Linkl)基本思想:根据输入的代码或名称,如果不存在该物品,就输出“不存在该物品”;然后输出是用代码出库或者名称出库,在选择操作后,输出该物品对应的信息,若输入“0”,则调用main(),返回主界面。3、查看库存物品信息函数:Qur(Linkl)基本思想:根据输入的信息判断有无该商品信息,如果没有该信息,则输出“你输入的信息有误”,有该物品,则输出该物品对饮的代码、名称、数量等信息,按enter键返回主界面。4、删除物品信息函数:Del(Linkl)基本思想:根据用户键入的选择,如果没有该物品信息,则输出没有改物品;调用该函数Del(Linkl),如果存在该物品,则输出该物品及信息已成功修改,然后用户键入任意键返回主界面。5、物品信息修改函数:Modify(Linkl)基本思想:根据用户键入的信息,判断有无该物品,若有,则继续进行。调用输出函数printc(),然后依次键入新的物品信息,在输出物品信息已成功修改然后用户键入任意键返回主界面。第3页(共26页)四、算法的流程图算法流程:用户进入物品库存管理用户进入查看物品信息系统开始结束用户进入物品进库系统用户进入物品信息出库系统用户进入修改物品信息系统用户进入浏览物品信息系统用户退出物品库存管理系统第4页(共26页)五、源代码//物品库存管理系统制作人:胡华张义江魏尹尹亮朱翀#includestdio.h#includestdlib.h#includestring.h#includeiostream.hintshoudsave=0;structitem//物品信息定义{charcode[10];//物品编码charname[20];//物品名称intnum;//商品数量intlevel;//物品等级}item;typedefstructnode{structitemdata;structnode*next;}Node,*Link;//定义为链表voidmenu()//页面显示函数{system(cls);//清屏函数printf(***********************************《物品库存管理》*****************************\n);printf(\n);printf(\n1物品入库管理\n\t\n第5页(共26页)2物品出库管理\n);printf(\n3浏览库内物品信息\n\t\n4修改物品信息\n);printf(\n5保存物品信息\n\t\n0退出库存管理\n);printf(\n);cout********************************************************************************endl;printf(\n请选择操作:);}voidprintstart(){printf(------------------------------------------\n);}voidWrong()//错误处理函数{printf(输入错误!\n);getchar();getchar();menu();return;}voidNofind(){printf(没有找到该物品!\n);}第6页(共26页)voidprintc()//本函数用于输出中文{printf(物品编码物品名称物品数量物品等级\n);}voidprinte(Node*p)//输出物品信息函数{coutendlp-data.codep-data.namep-data.nump-data.level;}Node*Locate(Linkl,charfindmess[],charnameorcode[])//用于定位连接中,符合要求的结点,并返回该指针{Node*r;if(strcmp(nameorcode,code)==0)//{r=l-next;while(r!=NULL){if(strcmp(r-data.code,findmess)==0)returnr;r=r-next;}}elseif(strcmp(nameorcode,name)==0)//按名称查询{r=l-next;第7页(共26页)while(r!=NULL){if(strcmp(r-data.name,findmess)==0)returnr;r=r-next;}}return0;}voidAdd(Linkl)//增加物品函数{Node*p,*r,*s;charcode[10];r=l;s=l-next;while(r-next!=NULL)r=r-next;while(l){system(cls);//清屏函数cout请输入商品编码(输入'0'返回上一级菜单):endl;scanf(%s,code);if(strcmp(code,0)==0)break;while(s){if(strcmp(s-data.code,code)==0)第8页(共26页){printf(物品编码为'%s'的物品已经存在,如果要修改请选择'4修改'!\n,code);printstart();printc();printe(s);printstart();printf(\n);return;}s=s-next;}p=(Node*)malloc(sizeof(Node));strcpy(p-data.code,code);printf(请输入物品名称:);scanf(%s,p-data.name);getchar();printf(请输入物品数量:);scanf(%d,&p-data.num);printf(请输入物品等级:);scanf(%d,&p-data.level);p-next=NULL;r-next=p;r=p;shoudsave=1;第9页(共26页)}menu();}voidQur(Linkl)//查询物品信息函数{intsel;charfindmess[20];Node*p;if(!l-next){printf(\n没有信息可查询!\n);getchar();getchar();menu();return;}system(cls);//清屏函数printf(\n1按物品编码查询\n2按物品名称查询\n);scanf(%d,&sel);if(sel==1)//{printf(请输入要查询的编码:\n);scanf(%s,findmess);p=Locate(l,findmess,code);if(p){printf(\t\t\t\t查询结果\n);第10页(共26页)printstart();coutendl;printc();coutendl;printe(p);coutendl;printstart();getchar();getchar();menu();return;}elseNofind();}elseif(sel==2)//{printf(请输入要查找的物品名称:);scanf(%s,findmess);p=Locate(l,findmess,name);if(p){printf(\t\t\t查询结果\n);printstart();coutendl;printc();第11页(共26页)coutendl;printe(p);coutendl;printstart();getchar();getchar();menu();return;}elseNofind();}elseWrong();getchar();system(cls);//清屏函数menu();}voidDel(Linkl)//删除{intsel;Node*p,*r;charfindmess[20];if(!l-next){system(cls);//清屏函数printf(\n您的仓库为空!\n);第12页(共26页)getchar();getchar();menu();return;}system(cls);//清屏函数printf(\n1按物品编码出仓\n2按物品名称出仓\n);scanf(%d,&sel);if(sel==1){printf(请输入要出仓的物品编码:);scanf(%s,findmess);p=Locate(l,findmess,code);if(p){r=l;while(r-next!=p)r=r-next;r-next=p-next;free(p);printf(\n该物品已经成功出仓\n);shoudsave=1;getchar();getchar();menu();return;}第13页(共26页)elseNofind();}elseif(sel==2){system(cls);//清屏函数printf(请输入要出仓的物品名:);scanf(%s,findmess);p=Locate(l,findmess,name);if(p){r=l;while(r-next!=p)r=r-next;r-next=p-next;free(p);printf(\n该物品已经成功出仓!\n);shoudsave=1;getchar();getchar();menu();return;}elseNofind();}第14页(共26页)elseWrong();}voidModify(Linkl)//物品信息修改{Node*p;charfindmess[20];if(!l-next){system(cls);//清屏函数printf(\n您的库存为空,无需修改!\n);getchar();getchar();menu();return;}printf(请输入要修改的物品编码:);scanf(%s,findmess);p=Locate(l,findmess,code);if(p){system(cls);//清屏函数printf(请输入新编码(原来的是%s):,p-data.code);scanf(%s,p-data.code);printf(请输入新名称(原来的是%s):,p-data.name);scanf(%s,p-data.name);第15页(共26页)getchar();printf(请输入新的物品数量(原来的是%d):,p-data.num);scanf(%d,&p-data.num);getchar();printf(请输入新的物品等级(原来的是%d):,p-data.level);scanf(%d,&p-data.level);getchar();pri