版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、課程設(shè)計報告完成日期2012年6月8日課程名稱數(shù)據(jù)結(jié)構(gòu)設(shè)計題目運(yùn)動會分?jǐn)?shù)統(tǒng)計計算機(jī)科學(xué)與技術(shù)課程設(shè)計任務(wù)書倉庫管理系統(tǒng)設(shè)計內(nèi)容與要求:【設(shè)計內(nèi)容】為倉庫設(shè)計一個倉庫管理系統(tǒng),記錄存儲貨物的編號、名稱、數(shù)量。并且可以 隨時進(jìn)行出貨和出庫操作、可隨時查看貨物信息?!净疽蟆?)建立一個倉庫管理程序,可以按順序和貨物名稱查詢倉庫存儲情況;2)可以增加或刪除貨物;3)可以實現(xiàn)貨物的入庫出庫;4)能用文件保存?zhèn)}庫貨品信息;指導(dǎo)教師:2012年6月8日成績:課程設(shè)計評語指導(dǎo)教師:年 月 日1、問題描述 建立一個倉庫管理程序,可以按順序和貨物名稱查詢倉庫存儲情況,也可以 增加或刪除貨物信息、實現(xiàn)貨物的入庫
2、出庫,要求能用文件保存?zhèn)}庫貨品信息。2、基本要求(1) 、數(shù)據(jù)要求1) 建議輸入貨物的名稱,編號,數(shù)量等,其余信息學(xué)生自行設(shè)計;2) 輸出形式:有合理的提示,編號,名稱,數(shù)量對應(yīng);3) 數(shù)據(jù)的存儲結(jié)構(gòu)自行設(shè)計。4) 倉庫貨物的相關(guān)數(shù)據(jù)要存儲在數(shù)據(jù)文件中。(2) 、操作要求 建立一個倉庫管理程序,可以按順序和貨物名稱查詢倉庫存儲情況,也可以增加或刪除貨物 信息、實現(xiàn)貨物的入庫出庫,要求能用文件保存?zhèn)}庫貨品信息。(3) 、測試數(shù)據(jù)要求 測試數(shù)據(jù)要求使用:1、全部合法數(shù)據(jù);2、整體非法數(shù)據(jù);3、局部非法數(shù)據(jù)。進(jìn)行程序測試,以保證程序的穩(wěn)定。(4) 、界面要求 有合理的提示,每個功能可以設(shè)立菜單,根據(jù)
3、提示,能完成相關(guān)的功能操作并符合要求。(5) 、存儲結(jié)構(gòu)要求 學(xué)生自己根據(jù)系統(tǒng)功能要求自己設(shè)計,但是要求倉庫貨物的相關(guān)數(shù)據(jù)要存儲 在數(shù)據(jù)文件中。(數(shù)據(jù)文件的數(shù)據(jù)讀寫方法等相關(guān)內(nèi)容在 c 語言程序設(shè)計的書上, 請自學(xué)解決)請在最后的上交資料中指明你用到的存儲結(jié)構(gòu)。3、數(shù)據(jù)結(jié)構(gòu)(1) 、定義貨物數(shù)據(jù)類型 定義貨物數(shù)據(jù)類型雙向鏈表,用于存放貨物的信息,包括貨物名稱,數(shù)量, 編號等信息。typedef struct dnode/ 貨物編號/ 貨物名稱/ 貨物數(shù)量int Number;char Namemax;int Counter;struct dnode *prior,*next;dlnode,*d
4、linklist;4、總體設(shè)計根據(jù)倉庫管理系統(tǒng)的分析及設(shè)計要求,可以將此系統(tǒng)分為四個模塊:信息統(tǒng)計模塊、信息排序輸出模塊、信息查詢模塊、信息調(diào)用模塊。(1) 、信息統(tǒng)計模塊實現(xiàn)信息的輸入、統(tǒng)計,涉及函數(shù)有:void Input()、(2) 、信息輸出模塊實現(xiàn)信息的輸出,涉及函數(shù)有: void OutputByNameO、void Out pu tByNum()void in it_li nklist()void Show()(3) 、信息查詢模塊實現(xiàn)信息的查詢,涉及函數(shù)有:(4) 、信息調(diào)用模塊實現(xiàn)信息的調(diào)用,即從文件中讀出信息并輸出、保存信息, 涉及函數(shù)有:void Load(), void
5、 Save()主函數(shù)與各函數(shù)調(diào)用關(guān)系流程圖、結(jié)構(gòu)圖:開始輸入功能序號總分顯示菜單界面貨物的入庫和出庫信息排序輸出模塊流程圖信息查詢模塊流程圖主菜單退出返回主菜單按貨物名稱查詢按貨物編號查詢5、詳細(xì)設(shè)計(1)、貨物入庫功能void lnput()、void InitList()是信息輸入、雙鏈表初始化函數(shù),可以按用戶執(zhí)意 輸入信息、包括貨物的名稱編號和數(shù)量。其主要功能流程圖如下:(2)、貨物出庫功能void OutputByNameO、void OutputByNum()兩個函數(shù)分別可實現(xiàn)通過名稱查找出 庫和通過編號查找出庫其主要功能流程圖如下:(3)、貨物查詢功能()void Show()函數(shù)
6、是一個信息查詢函數(shù)及查詢菜單函數(shù),顯示一個查詢菜單,利用switch語句實現(xiàn)按貨物編號查詢和按名稱查詢,利用循環(huán)語句do-whileO返回查詢菜單,break 語句終止循環(huán)。其主要功能流程如下:(4)、信息保存及讀取void save()、void Readlnfo(這兩個函數(shù)分別實現(xiàn)信息保存到文件以及從文件中 讀取信息的功能。把信息保存到文件中以及讀取保存在文件里的信息并輸出。由 于采用的是鏈?zhǔn)酱鎯?,可以很方便的一下把文件里的信息全部讀取出來,再依次 創(chuàng)建生成雙鏈表,將信息全部讀到兩個雙鏈表中存儲。其主要功能流程圖如下:6、測試與調(diào)試1、輸出界面運(yùn)行程序,進(jìn)入主菜單界面,用戶可以選擇貨物入庫
7、出庫、加載貨物信息、 信息查詢、保存信息到文件、從文件中讀入信息、退出系統(tǒng)等操作選項。為了避 免再次輸入大量信息,可以先選擇從文件中讀入信息,將以前輸入的信息重新顯 示在屏幕上,再進(jìn)行后續(xù)操作。主菜單界面如圖所示:X物物物保虹物載看詢岀TF1 Q T、崗擇選請誰出息 起和息息息信 葫W5信信存 ZL L* nJ. nJ njlt(1)、貨物的入庫、物的A庫;、8物的出庫; 遺回主菜單丫 請選擇操作=杲 殊1 1蘋. :量 "r"FIN鸚es物物H;請請請請按照程序引導(dǎo)輸入貨物信息 輸入蘋果、橘子、饅頭各10個。(2)、輸出所有貨物信息信息在主菜單輸入3進(jìn)入貨物查看界面,所有
8、貨物信息如下圖顯示所示:尹出i .J i自心 律和息息息信 涓-庫信信信存 沁入物物物保 翳載看詢出 灶皿茄查查退 狼乍號編123rj r F F F '""T1 2 3 4 0-弔身耳/胃(3) 、貨物出庫在主菜單中輸入1進(jìn)行貨物出庫選擇按名稱出庫31/身蘋貨 出出£的; 程有上剰庫是t 名編回出自倉春重物編名數(shù)貸 樂的的的的入 3請翦物物物輸 請吐擺BS薔請?zhí)O佃庫輸出出庫結(jié)果1,;2, 抵編導(dǎo)岀區(qū)b返回上一 Bi請歆物的編號=2貨物的編號;2資物的名#,桶子費(fèi)物的數(shù)薑:i0請輸入貨物出庫旳數(shù)量! 5輸出出庫結(jié)果:剩 量子- 數(shù)橘-出盤 物鍵 入成任 .
9、fe 二苗請(4) 、查詢信息輸入4進(jìn)入信息查詢界面,用戶可根據(jù)自己喜好選擇按貨物編號查詢、按貨 物名稱查詢或者退出返回主菜單。信息查詢界面如圖所示:1, 按編V查詢:2, S名稱查詢:3, 返回主菜單, 請選擇操作.用戶可根據(jù)自己喜好選擇按哪種方式查詢,查詢結(jié)束后,按任意鍵返回信息 查詢界面。輸入3則返回主菜單。以下是分別按照貨物編號、貨物名稱查詢的情 況。按貨物編號查詢情況:蔽編芳查詢:2. fe葛襪章詢5詢底功L貨物閑信息是二:2氛近回主菜單5 咨體鑲曲號,* 貸物的名帝橘子 贄務(wù)的載Mi 5 請按任憊犍繼續(xù)-按貨物名稱查詢:J按跚號查詢;2. 按名稱查訕3、返回主萊崑遍選擇換作:2蘋果
10、賽物的名稱蘋杲贄物的數(shù)a: 5 請按任意捷繼續(xù)-(5) 、調(diào)用信息為了避免每次運(yùn)行程序時都要輸入大量數(shù)據(jù),在第一次運(yùn)行程序后,就已經(jīng) 將信息自動存檔,再次運(yùn)行時,可以先直接調(diào)用信息,按任意鍵返回主菜單,再 進(jìn)行后續(xù)操作。調(diào)用的信息如圖所示:爭出; 覚 癢和息息息信 浦庫信信信存 5入物物物保0 魏物載看詢出V 查查退“顯示文件中讀取的信息如圖所示:J歡迎進(jìn)A倉庫§理系統(tǒng)I X戾韌甬A庫和由岸i 載戾物信息* -3.查看賽物信息, 4,杳詢貞物信息; 臥退出#保存信息;請選擇操作0-4: 2 加羲數(shù)據(jù)成功! 請技任S犍繼續(xù)-數(shù)里5C1Q友迎逬A倉庫W理系筑I 貨物的入庫利出庫5 2,加
11、載P物信息i 一3查看貞物宿息 一乩查詢覧物信息; 4退出#保薦信息; 請鶴i 3編號I?2複頭3請按任意犍繼續(xù).(6) 退出系統(tǒng)輸入0則退出系統(tǒng),并保存信息。如圖所示:3、調(diào)試分析進(jìn)入主菜單界面,用戶可以根據(jù)編號選擇運(yùn)行程序,測試數(shù)據(jù):選擇1號功能進(jìn)入輸入信息模塊,根據(jù)提示信息將以下信息輸入系統(tǒng)中。名稱:蘋果。編號:1。數(shù)量:10名稱:橘子。編號:2。數(shù)量:10名稱:饅頭。編號:3。數(shù)量:10存在問題的思考及算法的改進(jìn)設(shè)想:1顯示的內(nèi)容堆積在一個屏幕上,看著很混亂,用C語言里的cIrscrO函數(shù)在VC+1似乎不能用,上網(wǎng)查了下資料,找到了一個頭文件為的清屏函數(shù)system(”cls”)。2調(diào)
12、試程序時,遇到了屏幕一閃又回到原來界面的情況,沒有輸出想要得到的信息,原來是信息在屏幕上顯示后,程序執(zhí)行到了清屏函數(shù),所以立馬清屏了, 為了看到輸出信息,調(diào)用system (”pause”函數(shù),使程序暫停,以讓用戶看到輸 出地信息,然后再按任意鍵繼續(xù)執(zhí)行程序。3對于讀寫文件不是很熟悉,fread和fwrite函數(shù)不是很會用,在讀出文件里 的信息并輸出時花了很長時間,不過,最后總算是會用了。4、設(shè)計總結(jié)本次課程設(shè)計是圍繞數(shù)據(jù)結(jié)構(gòu)進(jìn)行。根據(jù)問題描述可知,需要解決問題并不復(fù)雜,整個問題只需要實現(xiàn)一個員工管理系統(tǒng)功能,那就是在這個系統(tǒng)中實現(xiàn)對職工信息的插入、刪除、查詢、排序、修改。但是,為了實現(xiàn)該功能
13、,卻需要一定的算法和數(shù)據(jù)結(jié)構(gòu)以保證實現(xiàn)的時間和空間效率。把職工信息存儲在一個單鏈表中,利用指針實現(xiàn)對職工信息的各項基本操作。經(jīng)過這次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計,我們不僅及時鞏固的了數(shù)據(jù)結(jié)構(gòu)、 算法、以及軟件工程的知識,并明白數(shù)據(jù)結(jié)構(gòu)和算法對于程序時間和 空間性能的影響,及軟件工程提供的開發(fā)流程和工具對于實現(xiàn)特定功 能程序的重要意義。當(dāng)我們面對一個實際問題,應(yīng)該迅速根據(jù)問題性質(zhì)和特點(diǎn)抽象成 特定的數(shù)據(jù)結(jié)構(gòu),當(dāng)然每個問題都有可能能夠抽象成多種數(shù)據(jù)結(jié)構(gòu), 每種數(shù)據(jù)結(jié)構(gòu)適應(yīng)于不同的算法。 因此應(yīng)該綜合考慮這樣的數(shù)據(jù)結(jié)構(gòu)、 算法以及它們的空間和時間效率,然后從中選擇一個作為實現(xiàn)程序的 基礎(chǔ)。此外,對程序的測試應(yīng)該
14、要仔細(xì),根據(jù)模塊的特點(diǎn)和測試階段,采 用各種軟件測試方法對程序進(jìn)行測試,確保各個模塊的正確性和完整 性,最后集成起來測試其是否正確和完整地實現(xiàn)了問題描述中要求的 功能。7、源程序清單 源代碼: #include<> #include<> #include<> #define OK 1 #define ERROR 0 #define max 20 typedef struct dnode int Number;char Namemax; int Counter;struct dnode *prior,*next;dlnode,*dlinklist; int M
15、enu()int Menu1()int flag; system("cls"); printf("ttt printf("ttt printf("ttt printf("ttt scanf("%d",&flag); return flag;int Menu2()int flag; system("cls"); printf("ttt printf("ttt printf("ttt printf("ttt scanf("%d",&
16、amp;flag); return flag;int Menu3()int flag; system("cls");1、貨物的入庫;2、貨物的出庫;3、返回主菜單; 請選擇操作: ");1、按編號查詢;2、按名稱查詢;3、返回主菜單; 請選擇操作: ");printf("ttt1、按名稱出庫;n");n");n");n");n");n");n");int flag;system("cls");printf("tt歡迎進(jìn)入倉庫管理系統(tǒng)! print
17、f("tt-1、貨物的入庫和出庫;n");printf("tt-2、加載貨物信息;n");printf("tt-3、查看貨物信息;n");printf("tt-4、查詢貨物信息;n");printf("tt-0、退出并保存信息;n");printf("tt請選擇操作 <0-4>:");scanf("%d",&flag);return flag;n");printf("ttt2、按編號出庫;printf("t
18、tt3、返回上一層;printf("ttt請選擇操作: ");scanf("%d",&flag);return flag;void init_linklist(dlinklist *l)*l=(dlinklist)malloc(sizeof(dnode);(*l)->prior=NULL;(*l)->next=NULL;void Input(dlinklist L)dlnode *s,*p;int number,counter;char namemax;printf("ttt 請輸入貨物編號: scanf("%d&
19、quot;,&number);getchar();printf("ttt請輸入貨物名稱:scanf("%s",name);n");n");");");printf("ttt請輸入貨物的數(shù)量: ");scanf("%d",&counter);getchar(); s=(dlnode*)malloc(sizeof(dnode); s->Number=number;strcpy(s->Name,name); s->Counter=counter; if(L-
20、>next=NULL)L->next=s;s->prior=L; s->next=NULL;elsewhile(L=L->next)!=NULL) if(s->Number<=L->Number)break; p=L;if(L=NULL)p->next=s; s->prior=p;s->next=NULL;elseif(L->Number=s->Number)L->Counter=L->Counter+s->Counter; elses->prior=L->prior;L->pri
21、or->next=s;s->next=L;L->prior=s;入庫成功! n");");printf("ttt printf("ttt system("pause");void Show(dlinklist L)dlinklist p; p=L->next; printf("ttt 名稱 tt 編號 tt 數(shù)量 n");while(p!=NULL) printf("ttt%stt%dtt%dn",p->Name,p->Number,p->Counter
22、); p=p->next;printf("ttt "); system("pause");void OutputByNum(dlinklist L,int num)int num1;dlnode *p;p=L;while(p=p->next)!=NULL)if(p->Number=num)break;if(p=NULL) printf("ttt 倉庫中沒有該編號的貨物! n"); elseprintf("ttt 貨物的信息是 :n"); printf("ttt 貨物的編號: printf
23、("%dn",p->Number); printf("ttt 貨物的名稱: printf("%sn",p->Name); printf("ttt 貨物的數(shù)量: printf("%dn",p->Counter);");");");printf("ttt 請輸入貨物出庫的數(shù)量: "); scanf("%d",&num1);getchar();if(p->Counter>num1) p->Counter=p-
24、>Counter-num1; printf("ttt 出 庫 成 功 ! 倉 庫 中 %s 剩 余 的 數(shù) 量 為: %dn",p->Name,p->Counter); else if(p->Counter=num1) if(p->next=NULL) p->prior->next=NULL; free(p); else printf("tttelse printf("ttt出庫成功!貨物已經(jīng)全部出庫! n");p->prior->next=p->next; p->next-&g
25、t;prior=p->prior; free(p);倉庫中貨物數(shù)量不夠出庫數(shù)量,請核實貨物信息! n");printf("ttt ");system("pause");void OutputByName(dlinklist L,char namemax)int num1;dlnode *p;p=L;while(p=p->next)!=NULL) if(strcmp(name,p->Name)=0)break;if(p=NULL)printf("ttt 倉庫中沒有叫該名稱的貨物! elseprintf("tt
26、t 貨物的信息是 :n"); printf("ttt 貨物的編號: printf("%dn",p->Number); printf("ttt 貨物的名稱: printf("%sn",p->Name); printf("ttt 貨物的數(shù)量: printf("%dn",p->Counter);n");");");");printf("ttt 請輸入貨物出庫的數(shù)量: ");scanf("%d",&
27、num1);getchar();if(p->Counter>num1) p->Counter=p->Counter-num1; printf("ttt 出 庫 成 功 ! 倉 庫 中 為: %dn",p->Name,p->Counter);else if(p->Counter=num1) if(p->next=NULL) p->prior->next=NULL; free(p);else%s 剩 余 的 數(shù) 量p->prior->next=p->next; p->next->prior
28、=p->prior; free(p);printf("ttt else printf("ttt出庫成功!貨物已經(jīng)全部出庫!n");倉庫中貨物數(shù)量不夠出庫數(shù)量,請核實貨物信息! n");printf("ttt "); system("pause");void Save(dlinklist L) dlnode *p; p=L->next;FILE *fp;if(fp=fopen("","w")=NULL)printf("ttt 文件打開失敗 !n"
29、);return;while(p!=NULL)fprintf(fp,"%d %s %d ",p->Number,p->Name,p->Counter); p=p->next;數(shù)據(jù)存儲成功!謝謝使用!!n");"); fclose(fp); printf("ttt printf("ttt system("pause");void Load(dlinklist L)dlnode *r,*s;r=L;FILE *fp; if(fp=fopen("","r")
30、=NULL) printf("tttt 文件打開失敗 !n"); return; while(!feof(fp) s=(dlnode*)malloc(sizeof(dnode); fscanf(fp,"%d %s %d ",&s->Number,&s->Name,&s->Counter); r->next=s; s->prior=r;r=s; r->next=NULL; fclose(fp);printf("tttt 加載數(shù)據(jù)成功! n");printf("tttt
31、"); system("pause");dlnode *SrchByName(dlinklist L,char namemax)dlnode *p; p=L->next;while (p!=NULL)if (strcmp(p->Name,name)!=0) p=p->next;elsebreak;return p;dlnode *SrchByNumber(dlinklist L,int num)dlnode *p;p=L->next;while (p!=NULL)if (p->Number!=num) p=p->next;els
32、ebreak;return p;void main()int num1,num2;int flag=1,flag1=1,flag2=1; char name1max,name2max; dlinklist L;init_linklist(&L); while(1)switch(Menu()case 1:while(1)switch(Menu1()case 1:Input(L);break;case 2: while(1)switch(Menu3()case 1:printf("ttt 請輸入要出庫的貨物的名稱: "); scanf("%s",na
33、me1);OutputByName(L,name1); break;case 2: printf("ttt 請輸入要出庫的貨物的編號: "); scanf("%d",&num1);getchar(); OutputByNum(L,num1);break;case 3: flag=0; break; default: printf("ttt 選擇錯誤 ! 請重新選擇 <1-3>!n"); printf("ttt "); system("pause");if(flag=0)bre
34、ak;break;case 3:flag1=0;break;default:printf("ttt選擇錯誤 ! 請重新選擇 <1-3>!n");printf("ttt "); system("pause");if(flag1=0)break;break;case 2:Load(L);break;case 3:Show(L);break;case 4:while(1)switch(Menu2()case 1:printf("ttt 請輸入您要查詢的貨物的編號: "); scanf("%d",&num2);getchar();if(SrchByNumber(L,num2)!=NULL)printf("ttt 查詢成功!貨物的信息是 :n"); printf("ttt 貨
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)技術(shù)智能監(jiān)控系統(tǒng)布設(shè)協(xié)議2024版B版
- 個性化2024版動力煤托盤協(xié)議示例版
- 專業(yè)教師2024年度聘用協(xié)議范例版B版
- 閱讀理解技巧講座
- 二零二四年云服務(wù)租賃協(xié)議
- 2025年度科技園區(qū)場地?zé)o償使用及知識產(chǎn)權(quán)共享協(xié)議4篇
- 2025年度叉車維修及配件供應(yīng)一體化服務(wù)合同4篇
- 2025年度場崗位員工保密協(xié)議執(zhí)行細(xì)則4篇
- 專屬委托銷售代表協(xié)議樣式(2024)版A版
- 2025年度影視基地場地租賃合同24篇
- Unit 3 We should obey the rules. Lesson15(說課稿)-2023-2024學(xué)年人教精通版英語五年級下冊
- 綿陽市高中2022級(2025屆)高三第二次診斷性考試(二診)語文試卷(含答案)
- 2024年聊城市東昌府區(qū)中醫(yī)院招聘備案制工作人員考試真題
- 2025年極兔速遞有限公司招聘筆試參考題庫含答案解析
- 一般固廢處理流程
- 《健康體檢知識》課件
- 《AIGC應(yīng)用實戰(zhàn)(慕課版)》-課程標(biāo)準(zhǔn)
- 政府機(jī)關(guān)辦公用品配送方案
- 生產(chǎn)計劃主管述職報告
- 永威置業(yè)項目交付前風(fēng)險排查表
- 《儲能材料與器件》課程教學(xué)大綱(新能源材料與器件專業(yè))
評論
0/150
提交評論