数据结构课程设计_仓库库存管理系统.docx
库存物品信息管理1、 设计目的:利用数据结构课程的相关知识完成一个具有一定难度的综合设计题目,利用 C/C+语言进行程序设计,并规范地完成课程设计报告。通过课程设计,巩固和加深对线性表、栈、队列、字符串、树、图、查找、排序等理论知识的理解;掌握现实复杂问题的分析建模和解决方法(包括问题描述、系统分析、设计建模、代码实现、结果分析等);提高利用计算机分析解决综合性实际问题的基本能力。2、 设计内容和要求 :、要求物品出库、入库信息管理,浏览、修改物品信息;、物品信息按名称和代码存放,在程序出错时自动返回主页面、可以按物品名称物品代码来查询物品信息,即在主菜单中增加查询功能选项,输入代码或名称即可显示;、可以修改、删除某库存物品信息。二、 运行环境(软、硬件环境)软件环境:Vc6.0 编程软件运行平台: Win32硬件: 普通个人PC 机三、 算法设计的思想1、输入物品信息函数:Add(Link l)第 26 页(共 26 页)基本思想: 根据物品代码(code)来输入物品信息,如果代码已存在, 则按ENTER 键返回主页面;如果代码不存在,则继续输入物品名称、物品数量、物品等级;若继续输入,就直接输入代码等信息,若返回上一级, 就按“0”键,调用main(),返回主界面。2、物品出库函数:Del(Link l)基本思想: 根据输入的代码或名称,如果不存在该物品,就输出“不存在该物品”;然后输出是用代码出库或者名称出库,在选择操作后,输出该物品对应的信息,若输入“0”,则调用 main(),返回主界面。3、查看库存物品信息函数 :Qur(Link l)基本思想:根据输入的信息判断有无该商品信息,如果没有该信息, 则输出“你输入的信息有误”,有该物品,则输出该物品对饮的代码、名称、数量等信息,按enter 键返回主界面。4、删除物品信息函数:Del(Link l)基本思想:根据用户键入的选择,如果没有该物品信息,则输出没有改物品;调用该函数 Del(Linkl),如果存在该物品,则输出该物品及信息已成功修改,然后用户键入任意键返回主界面。5、物品信息修改函数:Modify(Link l)基本思想:根据用户键入的信息,判断有无该物品,若有,则继续进行。调用输出函数printc(),然后依次键入新的物品信息,在输出物品信息已成功修改然后用户键入任意键返回主界面。四、 算法的流程图开始用户进入物品库存管理用户进入物品进库系统用户进入查看物品信息系统用户进入物品信息出库系统用户进入修改物品信息系统用户进入浏览物品信息系统用户退出物品库存管理系统结束算法流程:五、 源代码/物品库存管理系统制作人:胡华 张义江 魏尹 尹亮 朱翀#include<stdio.h> #include<stdlib.h> #include<string.h> #include<iostream.h> int shoudsave=0;struct item/物品信息定义char code10;/物品编码char name20;/物品名称int num;/商品数量 int level;/物品等级item;typedef struct nodestruct item data; struct node * next;Node,*Link;/定义为链表void menu()/页面显示函数system("cls");/清屏函数printf("*物品库存管理*n"); printf("n");printf("n<1> 物品入库管理ntn<2> 物品出库管理n");printf("n<3> 浏览库内物品信息ntn<4> 修改物品信息n");printf("n<5> 保存物品信息ntn<0> 退出库存管理n");printf("n");cout<<"*"<<endl;printf("n请选择操作:");void printstart()printf("n");void Wrong()/错误处理函数printf("输入错误!n"); getchar();getchar(); menu(); return;void Nofind()printf("没有找到该物品!n");void printc()/本函数用于输出中文printf(" 物品编码物品名称物品数量物品等级n");void printe(Node *p)/输出物品信息函数cout<<endl<<""<<p->data.code<<""<<p->data.name<<" "<<p->data.num<<""<<p->data.level;Node *Locate(Link l,char findmess,char nameorcode) /用于定位连接中, 符合要求的结点,并返回该指针Node *r; if(strcmp(nameorcode,"code")=0)/r=l->next; while(r!=NULL)if(strcmp(r->data.code,findmess)=0) return r;r=r->next;elseif(strcmp(nameorcode,"name")=0)/按名称查询r=l->next;while(r!=NULL)if(strcmp(r->data.name,findmess)=0) return r;r=r->next;return 0;void Add(Link l)/增加物品函数Node *p,*r,*s; char code10; 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)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;menu();void Qur(Link l)/查询物品信息函数int sel;char findmess20; Node *p;if(!l->next)printf("n 没有信息可查询!n"); getchar();getchar(); menu();return;system("cls");/清屏函数printf("n 1 按物品编码查询n 2 按物品名称查询n"); scanf("%d",&sel);if(sel=1)/printf("请输入要查询的编码:n"); scanf("%s",findmess); p=Locate(l,findmess,"code"); if(p)printf("tttt 查询结果n");printstart(); cout<<endl; printc(); cout<<endl; printe(p); cout<<endl; printstart(); getchar(); getchar(); menu(); return;elseNofind();elseif(sel=2)/printf("请输入要查找的物品名称:"); scanf("%s",findmess); p=Locate(l,findmess,"name"); if(p)printf("ttt 查询结果n"); printstart();cout<<endl; printc();cout<<endl; printe(p); cout<<endl; printstart(); getchar(); getchar(); menu(); return;elseNofind();elseWrong(); getchar(); system("cls");/清屏函数menu();void Del(Link l)/删除int sel;Node *p,*r;char findmess20; if(!l->next)system("cls");/清屏函数printf("n 您的仓库为空!n");getchar(); getchar(); menu(); return ;system("cls");/清屏函数printf("n 1 按物品编码出仓n 2 按物品名称出仓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 ;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();elseWrong();void Modify(Link l)/物品信息修改Node *p;char findmess20; 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);getchar();printf("请输入新的物品数量(原来的是%d):",p->data.num); scanf("%d",&p->data.num);getchar();printf("请输入新的物品等级(原来的是%d):",p->data.level); scanf("%d",&p->data.level);getchar();printf("n 修改资料成功!n"); shoudsave=1;getchar(); menu();return;elseNofind(); getchar(); menu();void Disp(Link l)int count=0;Node *p;p=l->next; if(!p)printf("n 没有资料可以显示!n"); getchar();getchar(); menu();return;printf("tttt 显示结果n"); printstart();printc(); printf("n"); while(p)printe(p); p=p->next;printstart(); printf("n");void Save(Link l)/物品信息保存FILE *fp;Node *p;int flag=1,count=0; fp=fopen("c:student","wb"); if(fp=NULL)printf("n 重新打开文件时错误!n"); exit(1);p=l->next; while(p)if(fwrite(p,sizeof(Node),1,fp)=1)p=p->next; count+;elseflag=0; break;if(flag)system("cls");/清屏函数printf("n 文件保存成功.(有%d 条记录保存成功.)n",count); shoudsave=0;getchar(); getchar(); menu();fclose(fp);void main()/主函数menu();Link l;/链表Node *r;int sel; char ch;int count=0;l=(Node * )malloc(sizeof(Node); l->next=NULL;r=l; while(l)scanf("%d",&sel); if(sel=0)if(shoudsave=1)n)?n");getchar();printf("n 资料已改动,是否将改动的文件保存到文件中(y orscanf("%c",&ch); if(ch='y' | ch='Y')Save(l);printf("n 已退出系统!n"); break;switch(sel)case 1:Add(l);break;/物品进库case 2:Del(l);break;/物品出库case 3:Qur(l);break;/查询物品case 4:Modify(l);break;/修改物品信息case 5:Save(l);break;/保存物品信息default:Wrong();getchar();break;六、 运行结果分析1、截图显示及流程结果分析(用户使用说明):、运行程序进入“物品库存管理系统”主界面:、用户键入 1,即选择物品入库管理,随即调用清屏函数 system("cls")和Add(l),输入商品信息:、用户键入 2,进入出库操作,输入“1”按代码出库:、用户键入 4,进入修改物品信息系统:、用户接着键入编码,即进入修改页面:、用户键入 3,进入浏览物品信息查询系统:、用户又查看 5 编码的信息:2、程序创新及思路分析:. 算法简单性:本系统直接通过定义类struct item,并利用几个函数Wrong()、Nofind()、printc()、printe(Node *p)、*Locate(Link l,char findmess,char nameorcode) 来对输入的错误和输出做了相应的操作,主要用到了类,链表,串,数组等方面的知识来设计出库、入库、浏览、修改以及退出系统的操作,操作界面简单快捷,用户使用起来方便,安全。. 稳定性:我们充分考虑了程序运行中,用户可能进行的各种错误操作,例如:在选择程序功能时,用户可能输入了不正确的物品代码或物品名称。我们是这样解决的:添加一个判断用户输入的语句:if(),如果用户操作不当,则程序会提示:“该物品不存在!”等字样,提醒用户正确操作,或者根据帮助操作。. 布局的科学化性:主界面用户键入自用户键入退己所需项目出操作进入管理用户键入物 品信息用 户 执 行用户操作其他操作调用 mian(). 关键码的分布情况:、 struct item struct node、 void Add(Link l)、 void Qur(Link l)、 void Del(Link l)、 void Modify(Link l);七、 收获总结及体会好早的就开始准备课程设计,从开始的不知所措不知道从何处入手到现在看到一个由自己和小组的同学开发的不能算是成就的小成就有一种成就感,从刚开始被选择到这个专业,开始的排斥到感兴趣,从一点都不懂到现在慢慢的开始入门。虽然,现在的水平还是很低,自己对于专业知识掌握的不够,基础知识还是不很牢固,但是,经过这次的数据结构的课程设计我学到了很多,以前就还是认为是高中的学习思想,自己钻研究什么事情都好办,然后就一味的自己闷头研究,经历了很多弯路。迷茫过,绝望过,找不到学习的方向,现在我明白了,团队的力量,不懂就要问,这个学期的学习,数据结构虽然很多地方知识掌握的还是比较弱,但是最起码让我坚定了自己的信心,杨老师说过一句话如果感觉现在还是学的不怎么样的话现在努力依然来的及。只要付出了就会有回报的。生活就是这样,汗水预示着结果也见证着收获。劳动是人类生存生活永恒不变的话题。一个团队的任务,一起的工作可以让我们有说有笑,相互帮助,配合默契, 多少人间欢乐在这里洒下,大学里一年的相处还赶不上这十来天的合作,我感觉我和同学们之间的距离更加近了;我想说,确实很累,但当我们看到自己所做的成果时,心中也不免产生兴奋; 正所谓“三百六十行,行行出状元”。我们同样可以为社会作出我们应该做的一切,这有什么不好?我们不断的反问自己。也许有人不喜欢这类的工作,也许有人认为设计的工作有些枯燥,但我们认为无论干什么,只要人生活的有意义就可。社会需要我们,我们也可以为社会而工作。既然如此,那还有什么必要失落呢?于是我们决定沿着自己的路,执着的走下去。同时我认为我们的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神。某个人的离群都可能导致导致整项工作的失败。实习中只有一个人知道原理是远远不够的,必须让每个人都知道,否则一个人的错误,就有可能导致整个工作失败。团结协作是我们实习成功的一项非常重要的保证。而这次实习也正好锻炼我们这一点,这也是非常宝贵的。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题, 可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。参考文献1、结构教程上机实验指导李春葆编著清华大学出版社2、数据结构(C 语言)实践教程胡元义等编著西安电子科技大学出版社3、visual C+课程设计案例精选与编程指导陈清华朱红主编东南大学出版社4、c+程序设计教程钱能著清华大学出版社