数据结构与算法分析大作业示例2-仓库管理系统.pdf
《数据结构与算法分析大作业示例2-仓库管理系统.pdf》由会员分享,可在线阅读,更多相关《数据结构与算法分析大作业示例2-仓库管理系统.pdf(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 数据结构与算法设计大作业 数据结构与算法设计大作业题目名称:仓库管理系统班级:_ _ _ _ _ _ _ _姓名:_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _学号:_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _合作者:无日期:数据结构与算法设计大作业题 目 名 称一、选题 题 目 名 称:仓库管理系统应用背景;模拟仓库管理系统,可进行查询、添加、删除、修改货物信息的操作。需要实现简易的仓库管理系统以及给出提示操作。最终目标是能够进行询、添加、删除、修改货物信息的操作。二、需求分析软件的功能、性能要求:A.软件的功能要求:操作者可以根据自己的需求选择查
2、询、添加、删除、修改货物信息的操作,并能够根据操作者的操作显示出操作提示。若操作者的需要进行操作的信息能够找到便输出相应的结果。B.软件的性能要求:用操作者操作的方便性,操作者可以直接进行操作选择,页面简洁明了。系统的人性化,该系统会出现操作提示,操作者可根据提示来进行操作。系统的稳定性,该系统较为稳定,只要是操作者按照提示进行的操作都会得到合理正确的回应,不会出现毫无理由的系统错误或者系统崩溃。选取的测试用例及对应的验收数据:2 数据结构与算法设计大作业货物信息2记事本文件(F)编辑(E)格式(0)查看(V)帮助(H)初始数据:衣柜 b l a c k 7 6 8 3 9 9 6 7 5鞋架
3、 w h i t e 5 4 3 1 9 9 6 5 7桌子 p i n k 1 5 0 2 9 9 8 8 0三、概要设计(总体设计)设计 方案的论证:A.运用单链表:运用单链表将文件中的内容依次存放进其结点数据域,形成一一对应的关系,在删除以及添加操作时不涉及到其他元素的移动,同时其元素的存储单元是任意的,可连续也可不连续,不需要限定长度。但是,另一方面来说此方案也存在一定的缺点,要访问或者查找问特定元素,只能从链表头开始,遍历到该元素,其查找时间复杂度为O(n)。B.运用顺序表:运用顺序表用一组地址连续的存储单元依次存储数据元素,其优点在于其存储结构为随机存取结构,逻辑关系可直接用数组元
4、素下标表示。但是线性表的长度不确定,难以事先确定数组长度。同时线性表要求存储空间必须是连续的,易造成存储空间的“碎片”现象。而其在插入和删除操作需要移动大量元素。C.运用循环链表:运用循环链表将文件中的内容依次存放进其结点数据域,形成一一对应的关系。其优点在于无须增加存储量,仅对表的链接方式稍作改变,即可使得表处理更加方便灵活。同时,在循环链表中,从任一结点出发都可访问到表中所有结点,这样使得在某些运算中更加容易实现(如查询操作)。最终根据自己操作的熟练程度以及在添加、删除以及修改操作时3 数据结构与算法设计大作业的简便性选择了方案A。数据 结 构 的 设 计:为了实现对相应的查询、删除、添加
5、、修改操作,定义了结构体数组以及单链表,并用单链表来存放相应的货物信息。在后续操作中对相应结点中的相关数据进行直接调用。typedef int datatype;typedef structchar name20;char colour20;int number;int price;int sales;node;/定义结构体,其中信息包含名字、颜色、数量、价 格、销量typedef struct Goodsnode goods;struct Goods*next;Jlinklist;定义单链表,用来连接货物信息 各 模 块 的 描 述:linklist*CreatList尾插法建立单链表,返回
6、表头指针(并将“货物信息.txt”中的信息依次存入单链表的结点数据域)int Search(Iinklist*head)询货物信息,以及用户是否购买货物,4 数据结构与算法设计大作业查询相应信息时从链表头开始,遍历到该元素,然后若用户购买货物,则调用相应的数量以及销量(p-goods.number以及p-goods.sales)并对其进行相应的增减。int Inser(linklist*head)添加货物,输入相关信息并将它添加到头 结 点 的 位 置,并 在 文 件 中 修 改 信 息(用f=fopen(“货物信息.txt,”w);然后将单链表中存放的信息依次读入文件)int Delete(
7、Iinkiist*head)删除货物,先通过货物名称从头结点开始查询,直 至!)strcmp(p-goods.name,ch)=0为止,在链表中删除结点*p,然后调用货物信息的文件,将现在链表中的信息重新存入文件。int change(linklist*head)修改货物信息,从链表头开始,遍历到该元素,然后根据需要修改相关信息。修改销量、数量5 数据结构与算法设计大作业四、详细设计1、Search 函数模块算法描述。关键代码实现(附注释)。int Search(linklist*head)查询货物信息,以及用户是否购买货物(char ch50;int i,n,numl,num2;FILE*f
8、p;Iinklist*p,*s;printf(请输入您要查找的货物:nn);6 数据结构与算法设计大作业scanf(%s”,ch);p=(linklist*)malloc(sizeof(linklist);s=(linklist*)malloc(sizeof(linklist);p=head-next;for(p=head-next;p!=NULL;)/*查找要查询的货物,从头结点开始查询*/(if(strcmp(p-goods.name,ch)=0)(printf(该货物的相关信息为:n”);printf(u名 字:s颜 色:s数 量:%d 价 格:d销4 :%dnu,p-goods.nam
9、e,p-goods.colour,p-goods.number,p-goods.price,p-goods.sales);/*查找到要查询的货物信息,然后输出其相关信息*/printf(您是否要购买此货物?(1、是 2、否)n”);scanf(d”,&i);if(i=l)(printf(请输入您要购买的件数:nn);scanf(n%d,&n);numl=p-goods.number;num2=p-goods.sales;/*修改相应的数量以及销量*/7 数据结构与算法设计大作业numl=numl-n;num2=num2+n;p-goods.number=numl;p-goods.sales=n
10、um2;/*将修改后的值重新赋给结点数据域*/)break;)p=p-next;if(p=NULL)/*历遍整个链表仍未查找到要查询的货物信息*/printf(未查找到您要查找的货物!n);)fp=fopen(货物信息.txt”Jw);for(s=head-next;s!=NULL;)/*读入文件*/(fprintf(fp,n%s%s%d%d%dn,s-goods.name,s-goods.colour,s-goods.number,s-goods.price,s-goods.sales);s=s-next;)return 0;)2、Inser 函数8 数据结构与算法设计大作业模块算法描述。添
11、加输入相关信息读入文件 关键代码实现(附注释)。int Inser(linklist*head)添加货物|Iinklist*s,*q;FILE*f;s=(linklist*)malloc(sizeof(linkHst);/*分配存储空间*/s-next=head-next;head-next=s;/*在头结点处插入新结点*/printf(”请输入货物的相关信息(名字、颜色、数量、价格、销量):暧);scanf(%s%s%d%d%dn,&s-goods.name,&s-goods.colour,&s-goods.number,&s-goods.price,&s-goods.sales);f=fo
12、pen(货 物 信 息 打 开 文 件*/for(s=head-next;s!=NULL;)/*读入文件*/(fprintf(f,n%s%s%d%d%dnn,s-goods.name,s-goods.colour,9 数据结构与算法设计大作业s-goods.number,s-goods.price,s-goods.sales);s=s-next;fclose(f);return 0;)3、Delete 函数模块算法描述。删除输入名称s t r cm p 函数进行比较不存在存在删除该结点读入文件 关键代码实现(附注释)。int Delete(linklist*head)删除货物10 数据结构与算
13、法设计大作业char ch50;FILE*fp;int flag;linklist*p,*r,*s;s=(linklist*)malloc(sizeof(linklist);printf(请输入要删除的货物的名称:n);scanf(%s”,ch);r=head;for(p=head-next;p!=NULL;p=p-next)查找要查询的货物,从头结点开始查询(if(strcmp(p-goods.name,ch)=0)(printf(要删除的货物的相关信息为:nu);printf(名 字:s 颜 色:s 数 量:d 价 格:d 销i :%dn*,p-goods.name,p-goods.col
14、our,p-goods.number,p-goods.price,p-goods.sales);/*查找到要查询的货物信息,然后输出其相关信息*/r-next=p-next;/在链表中删除结点*pfree(p);释放结点*pflag=l;/*i=l时,查找到需要删除的货物信息*/break;)1 1 数据结构与算法设计大作业else flag=2;/*i=2,未查找到*/)if(flag=l)fp=fopen(货物信息.txt1*w);/*打开文件*/s=head-next;whiIe(s-next!=NULL)/*读入文件*/(fprintf(fp,%s%s%d%d%dnn,s-goods.
15、name,s-goods.colour,s-goods.number,s-goods.price,s-goods.sales);s=s-next;)fprintf(fp,n%s%s%d%d%dn,s-goods.name,s-goods.colour,s-goods.number,s-goods.price,s-goods.sales);)elseprintf(没有查找到您要删除的货物信息!n);fclose(fp);return 0;)4、change 函数12 数据结构与算法设计大作业模块算法描述。关键代码实现(附注释)。int change(linklist*head)/修改货物信息in
16、t num,i,m,flag;char ch50;13 数据结构与算法设计大作业Iinklist*p,*r,*s;FILE*f;printf(“您要修改的信息为:nl、数量 2、价格n”);scanf(n%du,&i);printf(“您要修改的货物信息的名称为:nn);scanf(n%sn,ch);if(i=l)/*修改数量*/p=(linklist*)malloc(sizeof(linklist);/*分配内存空间*/for(p=head-next;p!=NULL;p=p-next)if(strcmp(p-goods.name,ch)=0)/*查找到需要修改的信息*/printf(“您要把
17、值修改为:n”);scanf(H%d,&num);p-goods.number=num;/*修改货物信息*/flag=l;break;else flag=2;)if(i=2)/*修改价格*/p=(linklist*)malloc(sizeof(linldist);/*分配内存空间*/14 数据结构与算法设计大作业for(p=head-next;p!=NULL;p=p-next)if(strcmp(p-goods.name,ch)=0)/*查找到需要修改的信息*/printf(“您要把值修改为:n”);scanf(,%d,&num);p-goods.price=num;/*修改货物信息*/fla
18、g=l;/*flag=l时,需要修改的货物信息存在*/break;)else flag=2;/*flag=2时,需要修改的货物信息不存在*/)f=fopen(货物信息.txt J w);/*打开文件*/if(flag=l)/*将修改后的相关信息读入文件*/s=head-next;/*s 指向头结点*/whiIe(s-next!=NULL)(fprintf(f,n%s%s%d%d%dnu,s-goods.name,s-goods.colour,s-goods.number,s-goods.price,s-goods.sales);s=s-next;)15 数据结构与算法设计大作业fprintf(
19、f,u%s%s%d%d%dn*,s-goods.name,s-goods.colour,s-goods.number,s-goods.price,s-goods.sales);)else if(flag=2)printf(未查找到您要修改的相关货物信息!nn);fclose(f);return 0;)五、调试分析在调试分析中出现了以下问题:1、在查询操作中,选择购买此产品,在对相应货物数量变化以及销量 变 化 时,改 变 的 量 存在问题。逻辑错误 的 分 析:无法对p-goods.number p-goods.sales直接进行加减。解决方法:定义中间变量 numl、num 2,先将 p-g
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 分析 作业 示例 仓库 管理 系统
限制150内