產(chǎn)品進(jìn)銷存管理系統(tǒng) 課程設(shè)計報告書
《產(chǎn)品進(jìn)銷存管理系統(tǒng) 課程設(shè)計報告書》由會員分享,可在線閱讀,更多相關(guān)《產(chǎn)品進(jìn)銷存管理系統(tǒng) 課程設(shè)計報告書(17頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 中北大學(xué) 數(shù) 據(jù) 結(jié) 構(gòu) 課 程 設(shè) 計 說 明 書 學(xué)生姓名: 宋立群 學(xué) 號: 1021011803 學(xué) 院: 軟件學(xué)院 專 業(yè): 軟件開發(fā)與測試 題 目: 產(chǎn)品進(jìn)銷存管理系統(tǒng) 指導(dǎo)教師 何志英 2011年12月20日 0 / 17 (一)設(shè)計任務(wù)概述 針對某一種行業(yè)的庫房的產(chǎn)品進(jìn)銷存情況進(jìn)行管理。 1、采用一定的存儲結(jié)構(gòu)對庫房的貨品及其數(shù)量進(jìn)行分類管理; 運(yùn)用鏈表進(jìn)行存儲,同時用到指針變量,運(yùn)用循環(huán)存儲,對存儲產(chǎn)品的信息要用到日期結(jié)構(gòu)體和產(chǎn)品結(jié)構(gòu)體,對存儲要用到文件指針以及文
2、件的一些方法的使用。 2、可以進(jìn)行產(chǎn)品類的添加、產(chǎn)品的添加、產(chǎn)品數(shù)量的添加; 首先要找到鏈表的指針變量,對指針變量進(jìn)行修改,然后再進(jìn)行產(chǎn)品的出入。 3、能夠查詢庫房每種產(chǎn)品的總量、進(jìn)貨日期、銷出數(shù)量、銷售時間等; 首先要定義一個查詢函數(shù),對產(chǎn)品類的指針變量進(jìn)行循環(huán)查詢,再對產(chǎn)品的指針變量進(jìn)行循環(huán)查詢,找到產(chǎn)品時,在調(diào)用顯示產(chǎn)品信息函數(shù),顯示查詢到的產(chǎn)品的各項信息。 (二)本設(shè)計所采用的數(shù)據(jù) 運(yùn)用鏈表進(jìn)行存儲,同時用到指針變量,循環(huán)存儲 (三)功能模塊詳細(xì)設(shè)計 3.1詳細(xì)設(shè)計思想 1、順序表掛接鏈表的抽象定義類型: ADT sqmountlink{
3、 數(shù)據(jù)對象:D={ai|ai∈kindlist,i=1,2,…,n,n>=0}
數(shù)據(jù)關(guān)系:R={
4、i已存在 操作結(jié)果:向順序表掛接鏈表L中的產(chǎn)品類i中添加N種產(chǎn)品 ProQuantity_add(&L,I,e,n) 初始條件:順序表掛接鏈表L已存在且需要添加的產(chǎn)品及產(chǎn)品所屬的類也存在 操作結(jié)果:添加順序表掛接鏈表L的產(chǎn)品類i中的產(chǎn)品e的數(shù)量 Visit(&L,i,e) 初始條件:順序表掛接鏈表L已存在且待查詢的產(chǎn)品所屬產(chǎn)品類i也存在 操作結(jié)果:在順序表掛接鏈表L中查詢產(chǎn)品e的各項信息 DisplayList(&L) 初始條件:順序表掛接鏈表L已存在 操作結(jié)果:現(xiàn)實順序表掛接鏈表L的內(nèi)容 3.2核心代
5、碼
#include
6、har pname[30]; //產(chǎn)品名稱 int totalquantity; //產(chǎn)品總量 date goodsdate; //進(jìn)貨日期 int salesquantity; //消除數(shù)量 date salestime; //銷售時間 struct productlnode *nextproduct; }productlnode,*plinklist; typedef struct kindlnode{ productlnode *firstproduct; char pkindna
7、me[30]; }kindlnode; typedef struct{ kindlnode *kindelem; int length; int listsize; }sqmountlink; int InitMountList(sqmountlink &L){ //初始化一個空的順序表掛接鏈表L int i; L.kindelem=(kindlnode*)malloc(SQMOUNTLINK_INIT_SIZE*sizeof(kindlnode)); if(!L.kindelem) exit(overflow); L.l
8、ength=0;
L.listsize=SQMOUNTLINK_INIT_SIZE;
for(i=0;i
9、newbase=(kindlnode*)realloc(L.kindelem,(L.listsize+n)*sizeof(kindlnode));
if(!newbase) exit(overflow);
L.kindelem=newbase;
L.listsize+=n;
}
printf("需添加的產(chǎn)品類名稱:\n");
for(i=0;i 10、product=NULL;
L.length++;
}
return ok;
}//KindInsert
int ProductInsert(sqmountlink &L,char pkindname2[],int n){ //向順序表掛接鏈表L的某產(chǎn)品類中添加N個產(chǎn)品
plinklist p,q;
int k,j;
for(k=0;k 11、 else
break;
}
if(L.kindelem[k].firstproduct==NULL){
q=(plinklist)malloc(sizeof(productlnode));
printf("輸入此產(chǎn)品類所含產(chǎn)品的產(chǎn)品名稱、總量、進(jìn)貨日期、銷售數(shù)量、銷售時間:\n");
scanf("%s %d %d,%d,%d %d %d,%d,%d",&(q->pname),&(q->totalquantity),&((q->goodsdate).year),&((q->goodsdate).month), 12、&((q->goodsdate).day),&(q->salesquantity),&((q->salestime).year),&((q->salestime).month),&((q->salestime).day));
q->nextproduct=NULL;
(L.kindelem[k]).firstproduct=q;
for(j=1;j 13、銷售數(shù)量、銷售時間:\n");\
scanf("%s %d %d,%d,%d %d %d,%d,%d",&(p->pname),&(p->totalquantity),&((p->goodsdate).year),&((p->goodsdate).month),&((p->goodsdate).day),&(p->salesquantity),&((p->salestime).year),&((p->salestime).month),&((p->salestime).day));
p->nextproduct=q->nextproduct;
14、 q->nextproduct=p;
q=p;
}
}
else{
for(q=L.kindelem[k].firstproduct; ;q=q->nextproduct){
if(!(q->nextproduct))
break;
}
printf("需添加產(chǎn)品的名稱、總量、進(jìn)貨日期、銷售數(shù)量、銷售時間:\n");
for(j=0;j 15、roductlnode));
scanf("%s %d %d,%d,%d %d %d,%d,%d",&(p->pname),&(p->totalquantity),&((p->goodsdate).year),&((p->goodsdate).month),&((p->goodsdate).day),&(p->salesquantity),&((p->salestime).year),&((p->salestime).month),&((p->salestime).day));
p->nextproduct=q->nextproduct;
16、 q->nextproduct=p;
q=p;
}
}
return ok;
}//ProductInsert
void ProQuantity_add(sqmountlink &L,char pkindname1[],char pname1[],int n){ //添加順序表掛接鏈表L的某產(chǎn)品類中的某產(chǎn)品的總量,且需添加的產(chǎn)品總量為n
int i,k;
plinklist p;
for(i=0;i 17、,pkindname1)!=0)
continue;
else
break;
}
if(i 18、項輸出:%s %d %d,%d,%d %d %d,%d,%d\n",p->pname,p->totalquantity,(p->goodsdate).year,(p->goodsdate).month,(p->goodsdate).day,p->salesquantity,(p->salestime).year,(p->salestime).month,(p->salestime).day);
}
}
}
}//ProQuantity_add
void ProQuantity_subtract(sqmountlink &L,char 19、 pkindname4[],char pname4[],int n){ //添加順序表掛接鏈表L的某產(chǎn)品類中的某產(chǎn)品銷出數(shù)量,且銷出的數(shù)量n
int i,k;
plinklist p;
for(i=0;i 20、uct;p!=NULL;p=p->nextproduct){
k=strcmp(p->pname,pname4);
if(k==0){
p->salesquantity=p->salesquantity+n;
printf("查看添加后產(chǎn)品的各項輸出:%s %d %d,%d,%d %d %d,%d,%d\n",p->pname,p->totalquantity,(p->goodsdate).year,(p->goodsdate).month,(p->goodsdate).day, 21、p->salesquantity,(p->salestime).year,(p->salestime).month,(p->salestime).day);
}
}
}
}//ProQuantity_subtract
void Visit(sqmountlink &L,char pkindname3[],char pname3[]){ //在順序表掛接鏈表L中,查詢屬于某產(chǎn)品類的某產(chǎn)品的各項信息
int i,k;
plinklist p;
for(i=0;i 22、L.kindelem[i]).pkindname,pkindname3)!=0)
continue;
else
break;
}
if(i 23、產(chǎn)品不存在:\n");
else{
printf("輸出待查詢產(chǎn)品的各項信息:\n");
printf("產(chǎn)品類★產(chǎn) 品★產(chǎn)品總量★進(jìn) 貨 日 期★銷售數(shù)量★銷 售 時 間\n");
printf("%s %s %d %d,%d,%d %d %d,%d,%d\n",(L.kindelem[i]).pkindname,p->pname,p->totalquantity,(p->goodsdate).year,(p->goodsdate).month,(p->goodsdate).day,p-> 24、salesquantity,(p->salestime).year,(p->salestime).month,(p->salestime).day);
}
}
}//Visit
void DisplayList(sqmountlink &L){ //顯示各產(chǎn)品所屬產(chǎn)品類、產(chǎn)品名稱、產(chǎn)品總量、進(jìn)貨日期、銷售數(shù)量、銷售時間
int i;
plinklist p;
printf("產(chǎn)品類★產(chǎn) 品★產(chǎn)品總量★進(jìn) 貨 日 期★銷售數(shù)量★銷 售 時 間\n");
for(i=0;i 25、elem[i].firstproduct))
printf("%s\n",(L.kindelem[i]).pkindname);
for(p=L.kindelem[i].firstproduct;p;p=p->nextproduct)
printf("%s %s %d %d,%d,%d %d %d,%d,%d\n",(L.kindelem[i]).pkindname,p->pname,p->totalquantity,(p->goodsdate).year,(p->goodsdate).month,(p->g 26、oodsdate).day,p->salesquantity,(p->salestime).year,(p->salestime).month,(p->salestime).day);
}
}//DisplayList
void menu_operation(){//操作菜單
printf("┌──────────┐\n");
printf("│輸入所要執(zhí)行的操作:│\n");
printf("│1、產(chǎn)品類添加: │\n");
printf("│2、產(chǎn)品添加: │\n");
printf("│3、產(chǎn)品數(shù)量添加: 27、 │\n");
printf("│4、產(chǎn)品售出: │\n");
printf("│5、查詢產(chǎn)品: │\n");
printf("│0、退出程序: │\n");
printf("└──────────┘\n");
}//mene_operation
/*------------------------------主程序---------------------------*/
void main(void){
int order;
int i,n;
char a[30];
char b[ 28、30];
sqmountlink L;
InitMountList(L);
printf("☆輸入時間時請按照“年,月,日”格式輸入.☆\n");
loop:
menu_operation();
printf("輸入命令:");
scanf("%d",&order);
switch(order){
case 1:
printf("需添加產(chǎn)品類的個數(shù):");
scanf("%d",&i);
KindInsert(L,i);
printf(" 29、修改后的產(chǎn)品庫存管理表:\n");
DisplayList(L);
goto loop;
case 2:
printf("需添加產(chǎn)品所屬產(chǎn)品類的名稱:");
scanf("%s",&a);
printf("需向此產(chǎn)品類添加產(chǎn)品的個數(shù):");
scanf("%d",&i);
ProductInsert(L,a,i);
printf("修改后的產(chǎn)品庫存管理表:\n");
DisplayList(L) 30、;
goto loop;
case 3:
printf("輸入需添加數(shù)量的產(chǎn)品所屬產(chǎn)品類的名稱:");
scanf("%s",&a);
printf("輸入需添加數(shù)量的產(chǎn)品的名稱:");
scanf("%s",&b);
printf("輸入需添加產(chǎn)品的數(shù)量:");
scanf("%d",&n);
ProQuantity_add(L,a,b,n);
printf("修改后的產(chǎn)品庫存管理表:\n");
31、 DisplayList(L);
goto loop;
case 4:
printf("輸入售出產(chǎn)品所屬產(chǎn)品類的名稱:");
scanf("%s",&a);
printf("輸入售出產(chǎn)品的名稱:");
scanf("%s",&b);
printf("輸入售出產(chǎn)品的數(shù)量:");
scanf("%d",&n);
ProQuantity_subtract(L,a,b,n);
printf("修 32、改后的產(chǎn)品庫存管理表:\n");
DisplayList(L);
goto loop;
case 5:
printf("輸入待查詢產(chǎn)品所屬產(chǎn)品類的名稱:");
scanf("%s",&a);
printf("輸入待查詢產(chǎn)品的名稱:");
scanf("%s",&b);
Visit(L,a,b);
goto loop;
case 0:
exit(0);
}
}
3.3程序運(yùn)行結(jié)果 33、
程序啟動界面。
產(chǎn)品類的添加。
產(chǎn)品的添加。
產(chǎn)品數(shù)量的添加。
產(chǎn)品售出。
產(chǎn)品查詢。
(四) 課程設(shè)計心得,存在問題及解決方法
拿到這道題時,我沒有選擇自己去編寫,我想我從來沒有編過這么復(fù)雜的程序,一定編不成,我選擇了上網(wǎng)去查,值得慶幸的是我找到了一部分的程序,然后拷貝上程序在機(jī)房運(yùn)行,發(fā)現(xiàn)有許多錯誤,我就開始一個一個解決問題,其中有些問題是一些符號的丟失,還有頭文件的錯誤運(yùn)用,還有對一些輸入超出程序范圍的數(shù)據(jù)進(jìn)行修改,才使程 34、序得以繼續(xù)進(jìn)行,最后我通過自己和請教同學(xué),最終整個程序得以運(yùn)行,不過最重要的不是僅僅讓程序運(yùn)行成功,而是了解整個程序的思想設(shè)計和功能的實現(xiàn),然后我開始翻譯程序,把每一句都弄的清清楚楚為止,從中我復(fù)習(xí)了很多知識點(diǎn),也學(xué)到了很多我以前不知道的東西。通過對本系統(tǒng)的開發(fā),我對軟件開發(fā)過程有了更清楚地了解,首先是問題的定義,需求分析,然后概要設(shè)計,詳細(xì)設(shè)計等,讓我知道了僅僅學(xué)習(xí)課本知識是不行的,還得經(jīng)常去自己設(shè)計一些小的項目去發(fā)現(xiàn)問題,必須培養(yǎng)動手能力,這樣才能既復(fù)習(xí)了知識點(diǎn),又可以學(xué)會詳細(xì)的數(shù)據(jù)結(jié)構(gòu)思想和設(shè)計,所以我在以后一定要加強(qiáng)這方面的學(xué)習(xí)。
溫馨提示:最好仔細(xì)閱讀后才下載使用,萬分感謝!
- 溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案