版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1.需求分析在某个大型生活服务区内,有三个超市,每个超市中商品涉及:商品号,商品名称,商品价格,库存数量,每种商品总数,生产日期等基本信息,假设三个超市商品信息分别是用单链L1,L2,L3取存储,请写一种程序实现下列任务规定:知识点:线性表操作【任务规定】当超市有新商品购入是能添加到单链表中;能查找出三个超市中具备相似商品名称商品信息;在超市商品信息L1中删除那些与其她两个超市均有商品信息;能修改各超市商品基本信息,如价格等。能查找比较超市中相似商品销售状况,能记录每个超市中每种商品销售量及销售额。能输出每个超市所有商品信息;【测试数据】自行设定,注意测试将活区删空等特殊状况。2.概要设计2.1必要算法1.当超市有新商品购入是添加到单链表中算法概要:运用单链表基本操作——插入一种新结点,即分派一种新储存空间,然后依次输入结点所含数据,再插入到原结点尾部即可。此算法时间复杂度为O(1)。2.查找出三个超市中具备相似商品名称商品信息算法概要:1.寻找相似商品名称算法:先比较前两个链表(超市)l1,l2,运用比较字符串strcmp()办法找出两个链表中具有相似商品名称,然后将两个链表中具备相似商品名称商品信息存储到新建链表fs中,再比较链表fs和l3,重复上述环节,找出链表l1,l2,l3中都具备相似商品名称商品,将其商品信息存储在链表fs中。此算法时间复杂度为O(n)。2.输出相似商品商品信息:访问fs中每个结点中商品名称,依照商品名称分别遍历原链表l1,l2,l3商品信息找出原结点,然后将其信息输出。此算法时间复杂度为O(n)。3.在超市商品信息L1中删除那些与其她两个超市均有商品信息算法概要:一方面运用上述寻找相似商品名称算法,找出l1中那些与其她两个超市均有商品名称,再依照其名称遍历链表l1,找出其结点删除并释放——单链表基本操作。此算法时间复杂度为O(n)。4修改各超市商品基本信息,如价格等算法概要:一方面交互输入需要修改信息商品号,排除超市中没有商品后,定位到改商品结点,然后选取需要修改信息,例如价格,库存数量等,或者所有修改即可修改信息。此算法时间复杂度为O(1)。5.查找比较超市中相似商品销售状况,记录每个超市中每种商品销售量及销售额。算法概要:一方面通过寻找相似商品名称算法找出相似商品,若没有相似商品,则返回,若有(各种)相似商品,通过交互输入商品号分别定位到3个链表中相应结点然后输出其销售信息,涉及销售量和销售额,记录每个超市中每种商品销售量及销售额是在输出程序中一并输出。此算法时间复杂度为O(n)。6.输出每个超市所有商品信息算法概要:遍历3个链表所有结点,然后分别输出每个结点所有信息。此算法时间复杂度为O(n)。2.2辅助程序1.单链表存储构造:为3个超市分别创立单链表,链表中每个结点具有7个数据,分别是:整型商品号,字符数组型商品名称,整型库存数量,整型商品总数,整型生产日期,整型销售数量。尚有一种next指针。2.超市商品信息初始化:在每个链表当中交互输入每个结点所有信息作为超市商品信息初始化。3.销售算法:销售算法为了以便记录销售信息而存在,实现思路是:输入卖出商品编号定位到链表中相应结点,然后输入销售数量保存但结点中,同步该结点库存数量相应地减少。此算法时间复杂度为O(1)。2.3主程序主程序概要:主程序中一方面创立3个链表然后初始化,再输出所需操作信息供选取,通过交互式输入选取所要进行操作,直到输入退出程序按钮。详细设计3.1必要算法1.当超市有新商品购入时添加到单链表中linklist*purchase(linklist*l,ints)//超市有新商品购入是添加到单链表中{ linklist*p,*q,*r,*head; intn; head=l; r=l; p=l->next; //输入购入商品基本信息 q=(linklist*)malloc(sizeof(linklist)); printf("请依次输入超市%d本次购入新商品商品号、商品名称、(出售)价格、购入量、生产日期:\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; returnhead;}2.查找出三个超市中具备相似商品名称商品信息算法1:寻找3个链表中具备相似商品名称商品linklist*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; intflag; //寻找l1,l2中具备相似商品名称商品 while(p1){ p2=l2->next; while(p2){ flag=strcmp(p1->name,p2->name); if(flag==0){ p=(linklist*)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; } returnfs;}算法2:输出3个链表中具备相似商品名称商品信息voidoutputSame(linklist*l1,linklist*l2,linklist*l3)//输出3个链表中具备相似商品名称商品信息{ linklist*p1=l1->next,*p2=l2->next,*p3=l3->next,*fs,*p; intflag; 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商品价格\t库存数量\t商品总数\t售出数量\t生产日期\n"); printf("超市1:%d\t%s\t\t%5.2f\t\t%d\t\t%d\t\t%d\t\t%d\n", 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:%d\t%s\t\t%5.2f\t\t%d\t\t%d\t\t%d\t\t%d\n", p2->gno,p2->name,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:%d\t%s\t\t%5.2f\t\t%d\t\t%d\t\t%d\t\t%d\n", p3->gno,p3->name,p3->price,p3->QuantityInStock,p3->amount,p3->amount-p3->QuantityInStock,p3->date); } p3=p3->next; } p=p->next; } }3.在超市商品信息L1中删除那些与其她两个超市均有商品信息voiddelSame(linklist*l1,linklist*l2,linklist*l3)//L1中删除那些与其她两个超市均有商品信息{ intflag; 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中与其她两个超市均有商品信息!"); return; } q=q->next; } p=p->next; }}4.能修改各超市商品基本信息,如价格等voidupdate(linklist*l)//修改商品信息{linklist*p=l,*q=l,*s=l->next;intgno,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->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){ case1: printf("请输入新价格:"); scanf("%d",&price); while(p){ if(location==n){ p->price=price; return; } else{ p=p->next; n++; } } break; case2: printf("请输入新库存数量:"); scanf("%d",&QuantityInStock); while(p){ if(location==n){ p->QuantityInStock=QuantityInStock; return; } else{ p=p->next; n++; } } break; case3: printf("请输入新商品总数:"); scanf("%d",&amount); while(p){ if(location==n){ p->amount=amount; return; } else{ p=p->next; n++; } } break; case4: printf("请输入新生产日期:"); scanf("%d",&date); while(p){ if(location==n){ p->date=date; return; } else{ p=p->next; n++; } } break; case5: 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->amount=amount; p->date=date; return; } else{ p=p->next; n++; } } break; }}5.查找比较超市中相似商品销售状况voidsoldInformation(linklist*l1,linklist*l2,linklist*l3)//查找比较超市中相似商品销售状况{ linklist*q1=l1,*p1=l1,*q2=l2,*p2=l2,*q3=l3,*p3=l3,*s;intgno,n1=0,location1=0,n2=0,location2=0,n3=0,location3=0;s=findSame(l1,l2,l3);if(s->next==NULL){ printf("3个超市没有相似商品!"); return; }printf("请输入需要查询销售信息商品号:");scanf("%d",&gno);while(q1->gno!=gno){ location1++; q1=q1->next; } //遍历l1 while(p1){if(location1==n1){while(q2->gno!=gno){ location2++; q2=q2->next; } //遍历l2 while(p2){ if(location2==n2){ while(q3->gno!=gno){ location3++; q3=q3->next; } //遍历l3 while(p3){ if(location3==n3){ printf("************商品%s销售信息**************\n",q1->name); printf("\t商品\t销售量\t销售额\n"); printf("\t超市1:%s\t%d\t%5.0f\n",q1->name,q1->sold,q1->sold*q1->price); printf("\t超市2:%s\t%d\t%5.0f\n",q2->name,q2->sold,q2->sold*q2->price); printf("\t超市3:%s\t%d\t%5.0f\n",q3->name,q2->sold,q3->sold*q3->price); return; } else{ p3=p3->next; n3++; } } if(!p3){ printf("没有此商品!"); return; } } else{ p2=p2->next; n2++; } } if(!p2){ printf("没有此商品!"); return; }}else{p1=p1->next;n1++;}}if(!p1){ printf("没有此商品!"); return; }}6.输出每个超市所有商品信息(涉及销售量、销售额)voidoutput(linklist*l)//输出每个超市所有商品信息(涉及销售量、销售额){linklist*p; p=l->next; printf("*********************************************商品信息输出***************************************************\n"); printf("商品号\t商品名称\t商品价格\t库存数量\t商品总数\t销售量\t销售额\t生产日期\n"); while(p){ printf("%d\t%s\t\t%5.2f\t\t%d\t\t%d\t\t%d\t%5.2f\t%d\n", p->gno,p->name,p->price,p->QuantityInStock,p->amount,p->sold,p->sold*p->price,p->date); p=p->next; }}4.调试分析 4.1初始数据图1调试过程分析:直接分别按顺序输入每个超市每个商品商品号、商品名称、商品价格、库存数量、生产日期即可存在问题:在这里遇到问题在于输入数据时候非常繁琐,一不小心输入错误就要重新运营程序重新输入,并且一下子输入商品所有信息容易浮现类型错误或者不能相应上相应信息。改进设想:本来想改成一次输入一种数据,但是这样在初始化数据时会有很长一段程序,于与否决了这个想法。4.2各模块测试1.当超市有新商品购入时添加到单链表中图2图3调试过程分析:当有新商品购入时,如图2所示,对超市1进行操作,依次输入其信息并保存在链表末尾,再显示超市1中所有商品信息,如图3所示,新购入商品已添加进超市1中。存在问题:这里所说问题是背面所有调试程序中都存在问题,就是每次操作中都所有操作选项都会浮现,这样会占用大量位置,顾客体验不佳。改进设想:在主程序中选取需要操作时不带上操作选项,操作选项仅在第一次浮现。2.查找出三个超市中具备相似商品名称商品信息图4调试过程分析:依照初始数据,3个超市中具备相似商品名称是a,因而如图4所示,分别显示了3个超市名为a商品商品信息。存在问题:无改进设想:无3.在超市商品信息L1中删除那些与其她两个超市均有商品信息调试过程分析:选取删除l1中那些与其她两个超市均有商品信息选项,即可完毕操作,如图5,这里l1中已删除商品a。图5存在问题:无改进设想:无4.修改各超市商品基本信息,如价格等。图6调试过程分析:如图6,在超市1中修改商品号为2商品信息,在这里仅修改价格,再显示超市1中商品信息,可见2号商品价格已经变化。存在问题:这个算法非常冗长,每一种修改信息都占据几行代码。改进设想:构建一种函数专门用于修改一种信息,这样每次修改信息之需调用该函数即可,但是暂时未能实现此想法。5查找比较超市中相似商品销售状况图7图8图9图10调试过程分析:一方面需要对每个超市进行售出操作,图7,8,9分别是对超市1,2,3进行售出,售出是商品号为1,即商品a。再显示每个超市中商品a销售量和销售信息,如图10所示。存在问题:输出需要查询销售信息商品号时并不懂得有哪些商品是3个超市均有,一旦有许多商品时容易混乱。改进设想:在此算法中插入输出3个超市具备相似商品商品信息算法即可解决,但考虑到这里所测试信息量少,没有插入必要。6输出每个超市所有商品信息,记录每个超市中每种商品销售量及销售额。图11调试过程分析:对超市1进行操作,选取输出所有商品信息选项,即可显示所有商品信息,涉及销售量和销售额。存在问题:无改进设想:无5.总结5.1课程设计过程收获当我决定选取超市商品解决这个题目时,一开始想运用3个链表及指针来完毕,但是在慢慢揣摩之后,觉得完全可以用一种链表即可,只要3个超市在初始化商品时调用一种函数即可。尚有就是主程序中用了诸多循环,因而对于循环控制要十分小心,纠结了好久用while还是do—while,最后选取用while,由于逻辑简朴,固然缺陷就是每次都会浮现所有操作选项,显得冗长繁琐。这次程序实设计实验是对咱们进入大学以来学习程序设计语言成果一次大检查。自己动手,自己发现和解决问题。发现了自己许多局限性。平时没有掌握好知识在这次实验中彻底暴露出来,最重要就是单链表头结点和尾结点鉴定,通过不断思考,不断查阅资料和上机运营,解决其中大某些问题,固然还存在某些问题没有解决。我相信在后来学习可以解决好它们。总来说,收获还是不小,我不但对C语言操作有了进一步掌握,还理解到了程序设计书写风格及其注释格式,可以说,这是我第一次为程序写注释。5.2程序调试能力思考在程序调试方面,这次课程设计中,我最重要是感悟到了一种调试程序办法,就是逐行分析,原理很简朴,在浮现错误函数中插入一种printf语句,从头开始,一行一行或者在每个循环中插入printf语句,如果printf语句信息没有显示,阐明此循环浮现问题了,并且在这个课题中,编译时错误解决不难,难是逻辑上错误,在这里程序调试最大问题就是不懂得问题出在哪里了,因此这不失为一种好办法。5.3对数据构造课程结识与思考这个学期数据构造重要学习了,线性构造(涉及栈和队列)、树形构造、图状构造。线性构造涉及顺序表、链表、栈、队列等,栈和队列是操作受限线性表,表中数据元素自身也是一种数据构造。除了线性表以外,栈是重点,由于栈和递归紧密相连,递归是程序设计中很重要一种工具。树状构造中重点自然是二叉树和哈弗曼树了。对于二叉树诸多操作都是基于对二叉树遍历,掌握了如何遍历,诸多问题也就迎刃而解了,例如对二叉树结点查找访问、记录二叉树中叶子结点数目、求二叉树深度等。哈弗曼编码也有着很广泛应用。对于图状构造,重要学习图存储构造及图遍历。要学好数据构造,最重要就是要注重对算法掌握。对于一种算法,如果咱们不是很理解话,可以手动将算法走一遍,慢慢理解该算法思想。学习这门课程最后目,还是要学会如何设计算法,这需要咱们长期练习和思考。数据构造是一门既注重理论,又注重实践课程,而在我学习中,理论占了绝大多数时间,在更多时候,我过度注重某些算法实现原理,但是却很少自己编写算法,这点在这次课程设计中就暴露了许多问题。因而后来学习数据构造时候一定要举一反三,对一种算法,不但仅只弄懂这个算法是怎么来,也要思考用其她办法实现此算法功能,这样才会让自己编程能力和解决问题能力得到提高。6.程序源代码#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<string.h>#defineMAXNUM20typedefstructnode{ intgno; charname[MAXNUM]; floatprice; intQuantityInStock; intamount; intdate; intsold; structnode*next;}linklist;linklist*create(ints)//初始化商品信息{ linklist*head,*p,*r; inti,n; head=(linklist*)malloc(sizeof(linklist)); head->next=NULL; r=head; printf("\n*********************超市%d商品初始化**********************\n",s); printf("\n请输入超市%d初始商品种类数:",s); scanf("%d",&n); for(i=0;i<n;i++){ p=(linklist*)malloc(sizeof(linklist)); printf("请依次输入超市%d初始商品%d商品号、商品名称、(出售)价格、库存数量、生产日期:\n",s,i+1); scanf("%d",&p->gno); scanf("%s",&p->name); scanf("%f",&p->price); scanf("%d",&p->amount); scanf("%d",&p->date); p->QuantityInStock=p->amount; p->sold=0; p->next=NULL; r->next=p; r=r->next; } returnhead;}linklist*purchase(linklist*l,ints)//超市有新商品购入是添加到单链表中{ linklist*p,*q,*r,*head; intn; head=l; r=l; p=l->next; //输入购入商品基本信息 q=(linklist*)malloc(sizeof(linklist)); printf("请依次输入超市%d本次购入新商品商品号、商品名称、(出售)价格、购入量、生产日期:\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; returnhead;}voidsold(linklist*l){ linklist*p=l,*q=l;intgno,sold,n=0,location=0;if(l==NULL){printf("链表为空!\n"); return;}printf("请输入售出商品号:");scanf("%d",&gno);while(q->gno!=gno){ location++; q=q->next; } printf("请输入售出数量:"); scanf("%d",&sold); if(p->QuantityInStock<=sold){ printf("此商品库存量局限性!"); return; } while(p){if(location==n){p->sold+=sold;p->QuantityInStock-=sold;printf("售出成功!\n");return;}else{p=p->next;n++;}if(p->QuantityInStock==0){ printf("此物品已售完!"); return; }}}linklist*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; intflag; //寻找l1,l2中具备相似商品名称商品 while(p1){ p2=l2->next; while(p2){ flag=strcmp(p1->name,p2->name); if(flag==0){ p=(linklist*)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; } returnfs;}voidoutputSame(linklist*l1,linklist*l2,linklist*l3)//输出3个链表中具备相似商品名称商品信息{ linklist*p1=l1->next,*p2=l2->next,*p3=l3->next,*fs,*p; intflag; 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商品价格\t库存数量\t商品总数\t售出数量\t生产日期\n"); printf("超市1:%d\t%s\t\t%5.2f\t\t%d\t\t%d\t\t%d\t\t%d\n", 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:%d\t%s\t\t%5.2f\t\t%d\t\t%d\t\t%d\t\t%d\n", p2->gno,p2->name,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:%d\t%s\t\t%5.2f\t\t%d\t\t%d\t\t%d\t\t%d\n", p3->gno,p3->name,p3->price,p3->QuantityInStock,p3->amount,p3->amount-p3->QuantityInStock,p3->date); } p3=p3->next; } p=p->next; } }voiddelSame(linklist*l1,linklist*l2,linklist*l3)//L1中删除那些与其她两个超市均有商品信息{ intflag; 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中与其她两个超市均有商品信息!"); return; } q=q->next; } p=p->next; }}voidupdate(linklist*l)//修改商品信息{linklist*p=l,*q=l,*s=l->next;intgno,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->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){ case1: printf("请输入新价格:"); scanf("%d",&price); while(p){ if(location==n){ p->price=price; return; } else{ p=p->next; n++; } } break; case2: printf("请输入新库存数量:"); scanf("%d",&QuantityInStock); while(p){ if(location==n){ p->QuantityInStock=QuantityInStock; return; } else{ p=p->next; n++; } } break; case3: printf("请输入新商品总数:"); scanf("%d",&amount); while(p){ if(location==n){ p->amount=amount; return; } else{ p=p->next; n++; } } break; case4: printf("请输入新生产日期:"); scanf("%d",&date); while(p){ if(location==n){ p->date=date; return; } else{ p=p->next; n++; } } break; case5: 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->amount=amount; p->date=date; return; } else{ p=p->next; n++; } } break; }}voidsoldInformation(linklist*l1,linklist*l2,linklist*l3)//查找比较超市中相似商品销售状况{ linklist*q1=l1,*p1=l1,*q2=l2,*p2=l2,*q3=l3,*p3=l3,*s;intgno,n1=0,location1=0,n2=0,location2=0,n3=0,location3=0;s=findSame(l1,l2,l3);if(s->next==NULL){ printf("3个超市没有相似商品!"); return; }printf("请输入需要查询销售信息商品号:");scanf("%d",&gno);while(q1->gno!=gno){ location1++; q1=q1->next; } //遍历l1 while(p1){if(location1==n1){while(q2->gno!=gno){ location2++; q2=q2->next; } //遍历l2 while(p2){ if(location2==n2){ while(q3->gno!=gno){ location3++; q3=q3->next; } //遍历l3 while(p3){ if(location3==n3){ printf("************商品%s销售信息**************\n",q1->name); printf("\t商品\t销售量\t销售额\n"); printf("\t超市1:%s\t%d\t%5.0f\n",q1->name,q1->sold,q1->sold*q1->price); printf("\t超市2:%s\t%d\t%5.0f\n",q2->name,q2->sold,q2->sold*q2->price); printf("\t超市3:%s\t%d\t%5.0f\n",q3->name,q3->sold,q3->sold*q3->price); return; } else{ p3=p3->next; n3++; } } if(!p3){ printf("没有此商品!"); return; } } else{ p2=p2->next; n2++; } } if(!p2){ printf("没有此商品!"); return; }}else{p1=p1->next;n1++;}}if(!p1){ printf("没有此商品!"); return; }}voidoutput(linklist*l)//输出每个超市所有商品信息(涉及销售量、销售额){linklist*p; p=l->next; printf("***************************************商品信息输出********************************************\n"); printf("商品号\t商品名称\t商品价格\t库存数量\t商品总数\t销售量\t销售额\t生产日期\n"); while(p){ printf("%d\t%s\t\t%5.2f\t\t%d\t\t%d\t\t%d\t%5.2f\t%d\n", p->gno,p->name,p->price,p->QuantityInStock,p->amount,p->sold,p->sold*p->price,p->date); p=p->next; }}intmain(){ ints,c; linklist*L1,*L2,*L3,*same; //初始化3个链表 L1=create(1); L2=create(2); L3=create(3); while(1){ printf("\n请选取你要管理超市序号(1/2/3):"); scanf("%d",&s); switch(s){ //管理超市1 case1: printf("\n********************超市%d商品管理***********************\n",s); printf("|------------------------------------------------------|\n"); printf("|1.购入商品|\n"); printf("|2.售出商品|\n"); printf("|3.查找3个超市中具备相似商品名称商品信息|\n"); printf("|4.删除l1中与其她两个超市均有商品信息|\n"); printf("|5.修改商品信息|\n"); printf("|6.比较各超市相似商品销售状况|\n"); printf("|7.输出超市所有商品信息|\n"); printf("|8.退出程序|\n"); printf("|------------------------------------------------------|\n"); printf("请输入你选取:"); scanf("%d",&c); switch(c){ case1: L1=purchase(L1,1); break; case2: sold(L1); break; case3: outputSame(L1,L2,L3); break; case4: delSame(L1,L2,L3); break; case5: update(L1); break; case6: soldInformation(L1,L2,L3); break; case7: output(L1); break; case8: exit(0); default: printf("选取错误,请重新选取\n!"); } break; //管理超市2 case2: printf("\n********************超市%d商品管理
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论