数据结构课程设计报告-超市商品管理.docx
《数据结构课程设计报告-超市商品管理.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告-超市商品管理.docx(52页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1.需求分析在某个大型生活服务区内,有三个超市,每个超市中的商品包括:商品号,商品名称, 商品价格,库存数量,每种商品总数,生产日期等基本信息,假设三个超市的商品信息分别是用单链 L1,L2, L3 取存储的,请写一个程序实现下列任务要求:知识点:线性表操作【任务要求】1. 当超市有新的商品购入是能添加到单链表中;2. 能查找出三个超市中具有相同商品名称的商品信息;3. 在超市商品信息 L1 中删除那些与其他两个超市都有的商品信息;4. 能修改各超市商品基本信息,如价格等。5. 能查找比较超市中相同商品的销售情况,能统计每个超市中每种商品的销售量及销售额。6. 能输出每个超市的所有商品信息;【
2、测试数据】自行设定,注意测试将活区删空等特殊情况。2. 概要设计2.1 必要算法1. 当超市有新的商品购入是添加到单链表中页脚内容算法概要:运用单链表的基本操作插入一个新结点,即分配一个新的储存空间,然后依次输入结点所含的数据,再插入到原结点的尾部即可。此算法时间复杂度为 O(1)。2. 查找出三个超市中具有相同商品名称的商品信息算法概要:1.寻找相同商品名称算法:先比较前两个链表(超市)l1,l2,运用比较字符串的 strcmp()方法找出两个链表中含有相同的商品名称,然后将两个链表中具有相同商品名称的商品信息存储到新建链表 fs 中,再比较链表 fs 和 l3, 重复上述步骤,找出链表 l
3、1,l2,l3 中都具有相同商品名称的商品,将其商品信息存储在链表 fs 中。此算法时间复杂度为 O(n)。2. 输出相同商品的商品信息:访问 fs 中每个结点中的商品名称,根据商品名称分别遍历原链表 l1,l2,l3 的商品信息找出原结点,然后将其信息输出。此算法时间复杂度为 O(n)。3. 在超市商品信息 L1 中删除那些与其他两个超市都有的商品信息算法概要:首先运用上述的寻找相同商品名称算法,找出 l1 中那些与其他两个超市都有的商品名称,再根据其名称遍历链表 l1,找出其结点删除并释放单链表的基本操作。此算法时间复杂度为 O(n)。4 修改各超市商品基本信息,如价格等算法概要:首先交互
4、输入需要修改信息的商品号,排除超市中没有的商品后,定位到改商品的结点,然后选择需要修改的信息,比如价格,库存数量等,或者全部修改即可修改信息。此算法时间复杂度为 O(1)。5. 查找比较超市中相同商品的销售情况,统计每个超市中每种商品的销售量及销售额。算法概要:首先通过寻找相同商品名称算法找出相同的商品,若没有相同商品,则返回, 若有(多个)相同商品,通过交互输入商品号分别定位到 3 个链表中的相应 结点然后输出其销售信息,包括销售量和销售额,统计每个超市中每种商品 的销售量及销售额是在输出程序中一并输出。此算法时间复杂度为 O(n)。6. 输出每个超市的所有商品信息算法概要:遍历 3 个链表
5、的所有结点,然后分别输出每个结点的所有信息。此算法时间复杂度为 O(n)。2.2 辅助程序1. 单链表存储结构:为 3 个超市分别创建单链表,链表中每个结点含有 7 个数据,分别是: 整型的商品号,字符数组型的商品名称,整型的库存数量,整型的商品总数,整型的生产日期,整型的销售数量。还有一个 next 指针。2. 超市商品信息初始化:在每个链表当中交互输入每个结点的所有信息作为超市商品信息的初始化。3. 销售算法:销售算法为了方便统计销售信息而存在,实现思路是:输入卖出的商品编号定位到链表中的相应结点,然后输入销售数量保存但结点中,同时该结点库存数量相应地减少。此算法时间复杂度为 O(1)。2
6、.3 主程序主程序概要:主程序中首先创建 3 个链表然后初始化,再输出所需的操作信息供选择, 通过交互式输入选择所要进行的操作,直到输入退出程序按钮。1. 详细设计3.1 必要算法1. 当超市有新的商品购入时添加到单链表中linklist *purchase(linklist *l,int s) /超市有新的商品购入是添加到单链表中linklist *p,*q,*r,*head;int n;head=l;r=l;p=l-next;/输入购入商品的基本信息q=(linklist *)malloc(sizeof(linklist);printf(请依次输入超市%d 此次购入新商品的商品号、商品名称
7、、(出售)价格、购入量、生产日期:n,s); scanf(%d,&q-gno);scanf(%s,&q-name);scanf(%f,&q-price);scanf(%d,&q-amount);scanf(%d,&q-date);q-QuantityInStock=q-amount;q-sold=0;printf(购入成功!n);/将新结点插入到表尾q-next=NULL;while(p!=NULL)r=p;p=p-next;r-next=q;r=r-next;return head;2. 查找出三个超市中具有相同商品名称的商品信息算法 1:寻找 3 个链表中具有相同商品名称的商品linkli
8、st *findSame(linklist *l1,linklist *l2,linklist *l3) /寻找 3 个链表中具有相同商品名称的商品linklist *p1=l1-next,*p2,*p3,*fs,*q,*p;fs=(linklist *)malloc(sizeof(linklist); /分配一个新的存储空间用来保存相同商品的信息fs-next=NULL;q=fs;int flag;/寻找 l1,l2 中具有相同商品名称的商品while(p1)p2=l2-next;while(p2)flag=strcmp(p1-name,p2-name);if(flag=0)p=(linkl
9、ist *)malloc(sizeof(linklist);strcpy(p-name,p1-name);p-next=NULL;q-next=p;q=q-next;p2=p2-next;p1=p1-next;/寻找 l2,l3 中具有相同商品名称的商品p=fs;while(p-next)p3=l3;while(p3-next)flag=strcmp(p-next-name,p3-next-name);if(flag=0) break;if(p3-next=NULL)q=p-next;p-next=q-next;p3=p3-next;p=p-next;return fs;算法 2:输出 3 个
10、链表中具有相同商品名称的商品信息void outputSame(linklist *l1,linklist *l2,linklist *l3) /输出 3 个链表中具有相同商品名称的商品信息linklist *p1=l1-next,*p2=l2-next,*p3=l3-next,*fs,*p;int flag;fs=findSame(l1,l2,l3);p=fs-next;printf(*3 个超市中具有相同名称的商品信息*n); while(p)/遍历链表 l1 while(p1)flag=strcmp(p1-name,p-name);if(flag=0)printf(商品号t 商品名称t
11、商品价格t 库存数量t 商品总数t 售出数量t 生产日期n);printf( 超 市 1: %dt %stt%5.2ftt %dtt %dtt %dtt%dn,p1-gno,p1-name,p1-price,p1-QuantityInStock,p1-amount,p1-amount-p1-QuantityInStock,p1-date);p1=p1-next;/遍历链表 l2 while(p2)flag=strcmp(p2-name,p-name);if(flag=0)printf( 超 市 2: %dt %stt%5.2ftt %dtt %dtt %dtt%dn,p2-gno,p2-nam
12、e,p2-price,p2-QuantityInStock,p2-amount,p2-amount-p2-QuantityInStock,p2-date);p2=p2-next;/遍历链表 l3 while(p3)flag=strcmp(p3-name,p-name);if(flag=0)printf( 超 市 3: %dt %stt%5.2ftt %dtt %dtt %dtt%dn,p3-gno,p3-name,p3-price,p3-QuantityInStock,p3-amount,p3-amount-p3-QuantityInStock,p3-date);p3=p3-next;p=p-
13、next;3. 在超市商品信息 L1 中删除那些与其他两个超市都有的商品信息void delSame(linklist *l1,linklist *l2,linklist *l3) /L1 中删除那些与其他两个超市都有的商品信息int flag;linklist *p,*s,*q,*fs;fs=findSame(l1,l2,l3);p=fs;while(p-next)q=l1;while(q-next)flag=strcmp(q-next-name,p-next-name);if(flag=0)s=q-next;q-next=s-next;free(s);printf(n 成功删除超市 1 中
14、与其他两个超市都有的商品信息!); return;q=q-next;p=p-next;4. 能修改各超市商品基本信息,如价格等void update(linklist *l) /修改商品信息linklist *p=l,*q=l,*s=l-next;int gno,m,price,QuantityInStock,amount,date,n=0,location=0,flag=0;if (l=NULL) /链表为空printf(链表为空!n); return;printf(请输入需要修改价格的商品号:); scanf(%d,&gno);while(s)if(s-gno=gno)flag=1;s=s
15、-next;if(!flag) /找不到此商品printf(没有此商品!n);return;while(q-gno!=gno)location+;q=q-next;printf(请选择需要修改的商品信息:n);printf(1.商品价格 2.库存数量 3.商品总数 4.生产日期 5.全部修改n);/选择需要修改的信息scanf(%d,&m);switch(m)case 1:printf(请输入新的价格:); scanf(%d,&price);while (p) if (location=n) p-price=price;return;else p=p-next;n+;break;case 2:
16、printf(请输入新的库存数量:); scanf(%d,&QuantityInStock);while (p) if (location=n) p-QuantityInStock=QuantityInStock;return;else p=p-next;n+;break;case 3:printf(请输入新的商品总数:); scanf(%d,&amount);while (p)if (location=n) p-amount=amount;return;else p=p-next;n+;break;case 4:printf(请输入新的生产日期:); scanf(%d,&date);whil
17、e (p)if (location=n) p-date=date;return;else p=p-next;n+;break;case 5:printf(请输入新的价格:); scanf(%d,&price);printf(请输入新的库存数量:); scanf(%d,&QuantityInStock);printf(请输入新的生产日期:); scanf(%d,&date);printf(请输入新的商品总数:); scanf(%d,&date);while (p)if (location=n)p-price=price;p-QuantityInStock=QuantityInStock;p-am
18、ount=amount;p-date=date;return;elsep=p-next;n+;break;5. 查找比较超市中相同商品的销售情况void soldInformation(linklist *l1,linklist *l2,linklist *l3) /查找比较超市中相同商品的销售情况linklist *q1=l1,*p1=l1,*q2=l2,*p2=l2,*q3=l3,*p3=l3,*s;int gno,n1=0,location1=0,n2=0,location2=0,n3=0,location3=0;s=findSame(l1,l2,l3);if(s-next=NULL)p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告 超市 商品 管理
限制150内