數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告-超市商品管理_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告-超市商品管理_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告-超市商品管理_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告-超市商品管理_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告-超市商品管理_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、1。需求分析在某個大型生活服務(wù)區(qū)內(nèi),有三個超市,每個超市中的商品包括:商品號,商品名稱,商品價格,庫存數(shù)量,每種商品總數(shù),生產(chǎn)日期等基本信息,假設(shè)三個超市的商品信息分別是用單鏈L1,L2,L3取存儲的,請寫一個程序?qū)崿F(xiàn)下列任務(wù)要求:知識點:線性表操作【任務(wù)要求】1. 當(dāng)超市有新的商品購入是能添加到單鏈表中;2. 能查找出三個超市中具有相同商品名稱的商品信息;3. 在超市商品信息L1中刪除那些與其他兩個超市都有的商品信息;4. 能修改各超市商品基本信息,如價格等.5. 能查找比較超市中相同商品的銷售情況,能統(tǒng)計每個超市中每種商品的銷售量及銷售額。6. 能輸出每個超市的所有商品信息;【測試數(shù)據(jù)】自

2、行設(shè)定,注意測試將活區(qū)刪空等特殊情況.2。概要設(shè)計2。1必要算法1。當(dāng)超市有新的商品購入是添加到單鏈表中算法概要:運用單鏈表的基本操作-插入一個新結(jié)點,即分配一個新的儲存空間,然后依次輸入結(jié)點所含的數(shù)據(jù),再插入到原結(jié)點的尾部即可。此算法時間復(fù)雜度為O(1).2。查找出三個超市中具有相同商品名稱的商品信息算法概要:1。尋找相同商品名稱算法:先比較前兩個鏈表(超市)l1,l2,運用比較字符串的strcmp()方法找出兩個鏈表中含有相同的商品名稱,然后將兩個鏈表中具有相同商品名稱的商品信息存儲到新建鏈表fs中,再比較鏈表fs和l3,重復(fù)上述步驟,找出鏈表l1,l2,l3中都具有相同商品名稱的商品,將

3、其商品信息存儲在鏈表fs中。此算法時間復(fù)雜度為O(n).2。輸出相同商品的商品信息:訪問fs中每個結(jié)點中的商品名稱,根據(jù)商品名稱分別遍歷原鏈表l1,l2,l3的商品信息找出原結(jié)點,然后將其信息輸出.此算法時間復(fù)雜度為O(n)。3.在超市商品信息L1中刪除那些與其他兩個超市都有的商品信息算法概要:首先運用上述的尋找相同商品名稱算法,找出l1中那些與其他兩個超市都有的商品名稱,再根據(jù)其名稱遍歷鏈表l1,找出其結(jié)點刪除并釋放-單鏈表的基本操作.此算法時間復(fù)雜度為O(n)。4修改各超市商品基本信息,如價格等算法概要:首先交互輸入需要修改信息的商品號,排除超市中沒有的商品后,定位到改商品的結(jié)點,然后選擇

4、需要修改的信息,比如價格,庫存數(shù)量等,或者全部修改即可修改信息.此算法時間復(fù)雜度為O(1)。5.查找比較超市中相同商品的銷售情況,統(tǒng)計每個超市中每種商品的銷售量及銷售額。算法概要:首先通過尋找相同商品名稱算法找出相同的商品,若沒有相同商品,則返回,若有(多個)相同商品,通過交互輸入商品號分別定位到3個鏈表中的相應(yīng)結(jié)點然后輸出其銷售信息,包括銷售量和銷售額,統(tǒng)計每個超市中每種商品的銷售量及銷售額是在輸出程序中一并輸出。此算法時間復(fù)雜度為O(n).6。輸出每個超市的所有商品信息算法概要:遍歷3個鏈表的所有結(jié)點,然后分別輸出每個結(jié)點的所有信息.此算法時間復(fù)雜度為O(n)。2。2輔助程序1.單鏈表存儲

5、結(jié)構(gòu):為3個超市分別創(chuàng)建單鏈表,鏈表中每個結(jié)點含有7個數(shù)據(jù),分別是:整型的商品號,字符數(shù)組型的商品名稱,整型的庫存數(shù)量,整型的商品總數(shù),整型的生產(chǎn)日期,整型的銷售數(shù)量。還有一個next指針.2.超市商品信息初始化:在每個鏈表當(dāng)中交互輸入每個結(jié)點的所有信息作為超市商品信息的初始化。3.銷售算法:銷售算法為了方便統(tǒng)計銷售信息而存在,實現(xiàn)思路是:輸入賣出的商品編號定位到鏈表中的相應(yīng)結(jié)點,然后輸入銷售數(shù)量保存但結(jié)點中,同時該結(jié)點庫存數(shù)量相應(yīng)地減少。此算法時間復(fù)雜度為O(1).2。3主程序主程序概要:主程序中首先創(chuàng)建3個鏈表然后初始化,再輸出所需的操作信息供選擇,通過交互式輸入選擇所要進(jìn)行的操作,直到輸

6、入退出程序按鈕。1. 詳細(xì)設(shè)計3。1必要算法1。當(dāng)超市有新的商品購入時添加到單鏈表中l(wèi)inklist *purchase(linklist l,int s) /超市有新的商品購入是添加到單鏈表中 linklist p,q,r,*head;int n;head=l;r=l;p=lnext;/輸入購入商品的基本信息 q=(linklist )malloc(sizeof(linklist);printf(”請依次輸入超市%d此次購入新商品的商品號、商品名稱、(出售)價格、購入量、生產(chǎn)日期:n”,s);scanf(”%d”,q-gno);scanf(”s”,qname);scanf(%f,&q-pri

7、ce);scanf(d,qamount);scanf(”d”,q-date);q-QuantityInStock=qamount;qsold=0;printf(”購入成功!n); /將新結(jié)點插入到表尾 qnext=NULL;while(p!=NULL)r=p;p=pnext;r-next=q;r=rnext;return head;2.查找出三個超市中具有相同商品名稱的商品信息算法1:尋找3個鏈表中具有相同商品名稱的商品linklist *findSame(linklist l1,linklist l2,linklist *l3) /尋找3個鏈表中具有相同商品名稱的商品 linklist p1

8、=l1next,p2,p3,fs,q,p;fs=(linklist *)malloc(sizeof(linklist)); /分配一個新的存儲空間用來保存相同商品的信息 fs-next=NULL;q=fs;int flag;/尋找l1,l2中具有相同商品名稱的商品 while(p1)p2=l2next;while(p2)flag=strcmp(p1name,p2name);if(flag=0)p=(linklist *)malloc(sizeof(linklist);strcpy(pname,p1name);pnext=NULL;qnext=p;q=qnext;p2=p2next;p1=p1-

9、next;/尋找l2,l3中具有相同商品名稱的商品 p=fs;while(p-next)p3=l3;while(p3next)flag=strcmp(pnext-name,p3-next-name);if(flag=0) break;if(p3-next=NULL)q=p-next;pnext=qnext;p3=p3-next;p=p-next;return fs;算法2:輸出3個鏈表中具有相同商品名稱的商品信息void outputSame(linklist *l1,linklist l2,linklist l3) /輸出3個鏈表中具有相同商品名稱的商品信息 linklist p1=l1ne

10、xt,p2=l2next,p3=l3next,fs,p;int flag;fs=findSame(l1,l2,l3);p=fsnext;printf(”*3個超市中具有相同名稱的商品信息*n”);while(p)/遍歷鏈表l1while(p1)flag=strcmp(p1-name,p-name);if(flag=0)printf(” 商品號t商品名稱t商品價格t庫存數(shù)量t商品總數(shù)t售出數(shù)量t生產(chǎn)日期n);printf(”超市1: dt stt%5.2ftt dtt dtt %dttdn, p1gno,p1-name,p1price,p1QuantityInStock,p1-amount,p1

11、-amountp1QuantityInStock,p1date);p1=p1-next;/遍歷鏈表l2while(p2)flag=strcmp(p2name,p-name);if(flag=0)printf(”超市2: dt stt5。2ftt dtt %dtt dtt%dn”, p2-gno,p2name,p2price,p2QuantityInStock,p2amount,p2amount-p2QuantityInStock,p2-date);p2=p2next;/遍歷鏈表l3while(p3)flag=strcmp(p3name,p-name);if(flag=0)printf(超市3:

12、 %dt %stt5。2ftt dtt dtt dttdn, p3-gno,p3-name,p3price,p3QuantityInStock,p3-amount,p3-amountp3QuantityInStock,p3date);p3=p3next;p=pnext;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(

13、pnext)q=l1;while(qnext)flag=strcmp(qnextname,p-nextname);if(flag=0)s=qnext;q-next=snext;free(s);printf(”n成功刪除超市1中與其他兩個超市都有的商品信息!);return;q=qnext;p=pnext;4。能修改各超市商品基本信息,如價格等void update(linklist *l) /修改商品信息 linklist *p=l,*q=l,s=lnext; int gno,m,price,QuantityInStock,amount,date,n=0,location=0,flag=0;

14、if (l=NULL) /鏈表為空 printf(”鏈表為空!n”); return; printf(”請輸入需要修改價格的商品號:”); scanf(%d”,gno);while(s)if(sgno=gno)flag=1;s=snext;if(!flag) /找不到此商品 printf(”沒有此商品!n”);return; while(q-gno!=gno)location+;q=qnext;printf(請選擇需要修改的商品信息:n”);printf(”1。商品價格 2.庫存數(shù)量 3。商品總數(shù) 4。生產(chǎn)日期 5。全部修改n);/選擇需要修改的信息 scanf(%d,m);switch(m)

15、case 1:printf(”請輸入新的價格:);scanf(”%d”,price);while (p) if (location=n) pprice=price; return; else p=pnext; n+; break;case 2:printf(請輸入新的庫存數(shù)量:”);scanf(”d,QuantityInStock);while (p) if (location=n) p-QuantityInStock=QuantityInStock; return; else p=p-next; n+; break;case 3:printf(”請輸入新的商品總數(shù):”);scanf(d”,a

16、mount);while (p) if (location=n) p-amount=amount; return; else p=p-next; n+; break;case 4:printf(”請輸入新的生產(chǎn)日期:);scanf(”d,&date);while (p) if (location=n) pdate=date; return; else p=p-next; n+; break;case 5:printf(”請輸入新的價格:”);scanf(”d”,price);printf(”請輸入新的庫存數(shù)量:”);scanf(%d”,QuantityInStock);printf(”請輸入新

17、的生產(chǎn)日期:);scanf(d”,date);printf(”請輸入新的商品總數(shù):);scanf(”%d”,date);while (p) if (location=n) pprice=price; pQuantityInStock=QuantityInStock; pamount=amount;p-date=date; return; else p=pnext; n+; break; 5。查找比較超市中相同商品的銷售情況void soldInformation(linklist l1,linklist l2,linklist *l3) /查找比較超市中相同商品的銷售情況linklist q1

18、=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) printf(”3個超市沒有相同商品!”);return; printf(請輸入需要查詢銷售信息的商品號:”); scanf(”%d”,gno); while(q1gno!=gno)location1+;q1=q1-next;/遍歷l1 while (p1) if (location1=n1) while(q2gno!=gno

19、)location2+;q2=q2next;/遍歷l2 while (p2) if (location2=n2) while(q3-gno!=gno)location3+;q3=q3next;/遍歷l3 while (p3) if (location3=n3) printf(”*商品s的銷售信息*n,q1-name);printf(”t 商品t銷售量t 銷售額n);printf(t超市1:%st %d t%5.0fn,q1-name,q1sold,q1-sold*q1price); printf(”t超市2:%st d t5。0fn,q2-name,q2sold,q2sold*q2price)

20、; printf(”t超市3:st d t%5.0fn”,q3-name,q2-sold,q3soldq3price); return; else p3=p3next; n3+; if(!p3)printf(”沒有此商品!);return; else p2=p2-next; n2+; if(!p2)printf(沒有此商品!”);return; else p1=p1next; n1+; if(!p1)printf(沒有此商品!”);return; 6.輸出每個超市的所有商品信息(包括銷售量、銷售額)void output(linklist l) /輸出每個超市的所有商品信息(包括銷售量、銷售額

21、) linklist p;p=lnext;printf(”*商品信息輸出*n);printf(”商品號t商品名稱t商品價格t庫存數(shù)量t商品總數(shù)t銷售量t銷售額t生產(chǎn)日期n”);while(p)printf(” dt stt5.2ftt dtt dtt dt5.2f t%dn”, pgno,p-name,p-price,p-QuantityInStock,p-amount,psold,p-soldpprice,pdate);p=p-next;4。調(diào)試分析4.1初始數(shù)據(jù)圖1調(diào)試過程分析:直接分別按順序輸入每個超市的每個商品的商品號、商品名稱、商品價格、庫存數(shù)量、生產(chǎn)日期即可存在的問題:在這里遇到的

22、問題在于輸入數(shù)據(jù)的時候非常繁瑣,一不小心輸入錯誤就要重新運行程序重新輸入,而且一下子輸入商品所有信息容易出現(xiàn)類型錯誤或者不能對應(yīng)的上相應(yīng)的信息。改進(jìn)設(shè)想:本來想改成一次輸入一個數(shù)據(jù),但是這樣在初始化數(shù)據(jù)時會有很長的一段程序,于是否決了這個想法。 4.2各模塊測試1。當(dāng)超市有新的商品購入時添加到單鏈表中圖2圖3調(diào)試過程分析:當(dāng)有新商品購入時,如圖2所示,對超市1進(jìn)行操作,依次輸入其信息并保存在鏈表末尾,再顯示超市1中的所有商品信息,如圖3所示,新購入的商品已添加進(jìn)超市1中。存在的問題:這里所說的問題是后面所有調(diào)試程序中都存在的問題,就是每次操作中都所有的操作選項都會出現(xiàn),這樣會占用大量的位置,用

23、戶體驗不佳。改進(jìn)設(shè)想:在主程序中選擇需要的操作時不帶上操作選項,操作選項僅在第一次出現(xiàn)。2。查找出三個超市中具有相同商品名稱的商品信息圖4調(diào)試過程分析:根據(jù)初始數(shù)據(jù),3個超市中具有的相同商品名稱是a,因此如圖4所示,分別顯示了3個超市名為a的商品的商品信息.存在的問題:無改進(jìn)設(shè)想:無3.在超市商品信息L1中刪除那些與其他兩個超市都有的商品信息調(diào)試過程分析:選擇刪除l1中那些與其他兩個超市都有的商品信息選項,即可完成操作,如圖5,這里l1中已刪除商品a。圖5存在的問題:無改進(jìn)設(shè)想:無4.修改各超市商品基本信息,如價格等。圖6調(diào)試過程分析:如圖6,在超市1中修改商品號為2的商品信息,在這里僅修改價

24、格,再顯示超市1中的商品信息,可見2號商品價格已經(jīng)改變.存在的問題:這個算法非常冗長,每一個修改信息都占據(jù)幾行代碼。改進(jìn)設(shè)想:構(gòu)建一個函數(shù)專門用于修改一個信息,這樣每次修改信息之需調(diào)用該函數(shù)即可,不過暫時未能實現(xiàn)此想法。5查找比較超市中相同商品的銷售情況圖7圖8圖9圖10調(diào)試過程分析:首先需要對每個超市進(jìn)行售出操作,圖7,8,9分別是對超市1,2,3進(jìn)行售出,售出的是商品號為1,即商品a。再顯示每個超市中商品a的銷售量和銷售信息,如圖10所示。存在的問題:輸出需要查詢的銷售信息的商品號時并不知道有哪些商品是3個超市都有的,一旦有許多商品時容易混亂.改進(jìn)設(shè)想:在此算法中插入輸出3個超市具有相同商

25、品的商品信息算法即可解決,但考慮到這里所測試的信息量少,沒有插入的必要。6輸出每個超市的所有商品信息,統(tǒng)計每個超市中每種商品的銷售量及銷售額.圖11調(diào)試過程分析:對超市1進(jìn)行操作,選擇輸出所有商品信息的選項,即可顯示所有商品信息,包括銷售量和銷售額。存在的問題:無改進(jìn)設(shè)想:無5。 總結(jié)5。1課程設(shè)計過程的收獲當(dāng)我決定選擇超市商品處理這個題目時,一開始想運用3個鏈表及指針來完成,但是在慢慢琢磨之后,覺得完全可以用一個鏈表即可,只要3個超市在初始化商品時調(diào)用一個函數(shù)即可.還有就是主程序中用了很多的循環(huán),因此對于循環(huán)的控制要十分小心,糾結(jié)了好久用while還是dowhile,最后選擇用while,因

26、為邏輯簡單,當(dāng)然缺點就是每次都會出現(xiàn)所有操作的選項,顯得冗長繁瑣。 這次的程序?qū)嵲O(shè)計實驗是對我們進(jìn)入大學(xué)以來學(xué)習(xí)程序設(shè)計語言結(jié)果的一次大檢驗。自己動手,自己發(fā)現(xiàn)和解決問題。發(fā)現(xiàn)了自己的許多不足。平時沒有掌握好的知識在這次實驗中徹底暴露出來,最主要就是單鏈表的頭結(jié)點和尾結(jié)點的判定,經(jīng)過不斷思考,不斷查閱資料和上機(jī)運行,解決其中大部分問題,當(dāng)然還存在一些問題沒有解決.我相信在以后的學(xué)習(xí)能夠解決好它們??偟膩碚f,收獲還是不小的,我不僅對C語言的操作有了進(jìn)一步的掌握,還了解到了程序設(shè)計的書寫風(fēng)格及其注釋的格式,可以說,這是我第一次為程序?qū)懽⑨尅?。2程序調(diào)試能力的思考在程序調(diào)試方面,這次的課程設(shè)計中,

27、我最主要是感悟到了一種調(diào)試程序的方法,就是逐行分析,原理很簡單,在出現(xiàn)錯誤的函數(shù)中插入一個printf語句,從頭開始,一行一行或者在每個循環(huán)中插入printf語句,如果printf語句的信息沒有顯示,說明此循環(huán)出現(xiàn)問題了,而且在這個課題中,編譯時的錯誤解決不難,難的是邏輯上的錯誤,在這里程序調(diào)試最大的問題就是不知道問題出在哪里了,所以這不失為一種好方法.5。3對數(shù)據(jù)結(jié)構(gòu)課程的認(rèn)識與思考這個學(xué)期數(shù)據(jù)結(jié)構(gòu)主要學(xué)習(xí)了,線性結(jié)構(gòu)(包括棧和隊列)、樹形結(jié)構(gòu)、圖狀結(jié)構(gòu).線性結(jié)構(gòu)包括順序表、鏈表、棧、隊列等,棧和隊列是操作受限的線性表,表中的數(shù)據(jù)元素本身也是一個數(shù)據(jù)結(jié)構(gòu)。除了線性表以外,棧是重點,因為棧和遞

28、歸緊密相連,遞歸是程序設(shè)計中很重要的一種工具。樹狀結(jié)構(gòu)中的重點自然是二叉樹和哈弗曼樹了。對于二叉樹的很多操作都是基于對二叉樹的遍歷,掌握了如何遍歷,很多問題也就迎刃而解了,比如對二叉樹結(jié)點的查找訪問、統(tǒng)計二叉樹中葉子結(jié)點的數(shù)目、求二叉樹的深度等.哈弗曼編碼也有著很廣泛的應(yīng)用。對于圖狀結(jié)構(gòu),主要學(xué)習(xí)圖的存儲結(jié)構(gòu)及圖的遍歷.要學(xué)好數(shù)據(jù)結(jié)構(gòu),最主要的就是要注重對算法的掌握.對于一個算法,如果我們不是很理解的話,可以手動將算法走一遍,慢慢理解該算法的思想.學(xué)習(xí)這門課程的最終目的,還是要學(xué)會如何設(shè)計算法,這需要我們長期的練習(xí)和思考。數(shù)據(jù)結(jié)構(gòu)是一門既重視理論,又重視實踐的課程,而在我的學(xué)習(xí)中,理論占了絕大

29、多數(shù)的時間,在更多時候,我過分注重一些算法的實現(xiàn)原理,但是卻很少自己編寫算法,這點在這次課程設(shè)計中就暴露了許多問題。因此以后學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的時候一定要舉一反三,對一個算法,不僅僅只弄懂這個算法是怎么來的,也要思考用其他方法實現(xiàn)此算法的功能,這樣才會讓自己的編程能力和解決問題能力得到提高.6。程序源代碼include include #include string。hdefine MAXNUM 20typedef struct nodeint gno;char nameMAXNUM;float price;int QuantityInStock;int amount;int date;int so

30、ld;struct node next;linklist;linklist create(int s) /初始化商品信息 linklist *head,*p,r;int i,n;head=(linklist )malloc(sizeof(linklist));headnext=NULL;r=head;printf(”n*超市d商品初始化*n,s);printf(”n請輸入超市d初始的商品種類數(shù):”,s);scanf(”d,&n);for(i=0;iname);scanf(”%f”,&pprice);scanf(d”,&p-amount);scanf(”d,&p-date);pQuantityI

31、nStock=pamount;psold=0;p-next=NULL;r-next=p;r=rnext;return head;linklist purchase(linklist l,int s) /超市有新的商品購入是添加到單鏈表中 linklist p,*q,r,head;int n;head=l;r=l;p=lnext;/輸入購入商品的基本信息 q=(linklist *)malloc(sizeof(linklist));printf(”請依次輸入超市d此次購入新商品的商品號、商品名稱、(出售)價格、購入量、生產(chǎn)日期:n”,s);scanf(%d”,q-gno);scanf(%s”,q

32、name);scanf(%f,qprice);scanf(”%d”,q-amount);scanf(”%d,qdate);q-QuantityInStock=qamount;q-sold=0;printf(”購入成功!n”); /將新結(jié)點插入到表尾 q-next=NULL;while(p!=NULL)r=p;p=pnext;rnext=q;r=rnext;return head;void sold(linklist l)linklist p=l,q=l; int gno,sold,n=0,location=0; if (l=NULL) printf(”鏈表為空!n); return; prin

33、tf(”請輸入售出的商品號:”); scanf(”d”,gno); while(q-gno!=gno)location+;q=qnext;printf(”請輸入售出數(shù)量:);scanf(”d,&sold); if(p-QuantityInStocksold+=sold; pQuantityInStock=sold; printf(”售出成功!n”); return; else p=pnext; n+; if(p-QuantityInStock=0)printf(”此物品已售完!”);return; linklist findSame(linklist *l1,linklist l2,linkl

34、ist l3) /尋找3個鏈表中具有相同商品名稱的商品 linklist p1=l1next,p2,*p3,fs,q,p;fs=(linklist )malloc(sizeof(linklist)); /分配一個新的存儲空間用來保存相同商品的信息 fsnext=NULL;q=fs;int flag;/尋找l1,l2中具有相同商品名稱的商品 while(p1)p2=l2next;while(p2)flag=strcmp(p1name,p2name);if(flag=0)p=(linklist )malloc(sizeof(linklist);strcpy(pname,p1name);p-next

35、=NULL;q-next=p;q=qnext;p2=p2next;p1=p1next;/尋找l2,l3中具有相同商品名稱的商品 p=fs;while(p-next)p3=l3;while(p3next)flag=strcmp(pnext-name,p3nextname);if(flag=0) break;if(p3next=NULL)q=pnext;p-next=q-next;p3=p3next;p=pnext;return fs;void outputSame(linklist l1,linklist l2,linklist l3) /輸出3個鏈表中具有相同商品名稱的商品信息 linklis

36、t p1=l1-next,p2=l2-next,*p3=l3-next,*fs,p;int flag;fs=findSame(l1,l2,l3);p=fsnext;printf(”*3個超市中具有相同名稱的商品信息*n”);while(p)/遍歷鏈表l1while(p1)flag=strcmp(p1-name,pname);if(flag=0)printf( 商品號t商品名稱t商品價格t庫存數(shù)量t商品總數(shù)t售出數(shù)量t生產(chǎn)日期n”);printf(”超市1: dt stt5。2ftt dtt dtt dtt%dn”,p1gno,p1name,p1price,p1-QuantityInStock,

37、p1amount,p1amount-p1-QuantityInStock,p1date);p1=p1next;/遍歷鏈表l2while(p2)flag=strcmp(p2name,pname);if(flag=0)printf(”超市2: %dt stt5.2ftt dtt dtt %dttdn”, p2-gno,p2name,p2-price,p2-QuantityInStock,p2amount,p2-amount-p2QuantityInStock,p2date);p2=p2-next;/遍歷鏈表l3while(p3)flag=strcmp(p3name,pname);if(flag=0

38、)printf(”超市3: dt stt%5。2ftt dtt %dtt dttdn”, p3-gno,p3name,p3price,p3-QuantityInStock,p3amount,p3amountp3-QuantityInStock,p3-date);p3=p3-next;p=p-next;void delSame(linklist l1,linklist *l2,linklist *l3) /L1中刪除那些與其他兩個超市都有的商品信息int flag;linklist p,s,q,*fs;fs=findSame(l1,l2,l3);p=fs;while(pnext)q=l1;whi

39、le(qnext)flag=strcmp(qnextname,pnext-name);if(flag=0)s=qnext;qnext=snext;free(s);printf(”n成功刪除超市1中與其他兩個超市都有的商品信息!”);return;q=qnext;p=p-next;void update(linklist l) /修改商品信息 linklist p=l,q=l,s=lnext; int gno,m,price,QuantityInStock,amount,date,n=0,location=0,flag=0; if (l=NULL) /鏈表為空 printf(”鏈表為空!n”);

40、 return; printf(”請輸入需要修改價格的商品號:”); scanf(d,&gno);while(s)if(s-gno=gno)flag=1;s=s-next;if(!flag) /找不到此商品 printf(”沒有此商品!n”);return; while(qgno!=gno)location+;q=qnext;printf(”請選擇需要修改的商品信息:n);printf(1。商品價格 2.庫存數(shù)量 3.商品總數(shù) 4。生產(chǎn)日期 5。全部修改n);/選擇需要修改的信息 scanf(”d,m);switch(m)case 1:printf(請輸入新的價格:”);scanf(%d”,&

41、price);while (p) if (location=n) pprice=price; return; else p=pnext; n+; break;case 2:printf(請輸入新的庫存數(shù)量:);scanf(”d”,QuantityInStock);while (p) if (location=n) p-QuantityInStock=QuantityInStock; return; else p=pnext; n+; break;case 3:printf(”請輸入新的商品總數(shù):);scanf(”d,amount);while (p) if (location=n) pamou

42、nt=amount; return; else p=pnext; n+; break;case 4:printf(”請輸入新的生產(chǎn)日期:”);scanf(d”,date);while (p) if (location=n) pdate=date; return; else p=pnext; n+; break;case 5:printf(”請輸入新的價格:);scanf(”%d,price);printf(請輸入新的庫存數(shù)量:);scanf(”d”,QuantityInStock);printf(”請輸入新的生產(chǎn)日期:);scanf(”d”,&date);printf(”請輸入新的商品總數(shù):)

43、;scanf(d”,date);while (p) if (location=n) p-price=price; p-QuantityInStock=QuantityInStock; pamount=amount;p-date=date; return; else p=p-next; n+; break; 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,locatio

44、n1=0,n2=0,location2=0,n3=0,location3=0; s=findSame(l1,l2,l3); if(snext=NULL)printf(”3個超市沒有相同商品!);return; printf(”請輸入需要查詢銷售信息的商品號:”); scanf(”%d,&gno); while(q1gno!=gno)location1+;q1=q1next;/遍歷l1 while (p1) if (location1=n1) while(q2gno!=gno)location2+;q2=q2next;/遍歷l2 while (p2) if (location2=n2) while(q3gno!=gno)location3+;q3=q3next;/遍歷l3 while (p3) if

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論