《C語言課程設(shè)計(jì) 倉庫管理系統(tǒng)》由會(huì)員分享,可在線閱讀,更多相關(guān)《C語言課程設(shè)計(jì) 倉庫管理系統(tǒng)(22頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、《C語言程序設(shè)計(jì)》實(shí)訓(xùn)報(bào)告
實(shí)訓(xùn)題目: 倉庫管理系統(tǒng)
專業(yè):
班級(jí):
姓名:
成績:
一:需求分析
1:問題
該系統(tǒng)所應(yīng)包含的信息有以下一些:
產(chǎn)品,倉庫。
根據(jù)需求,該系統(tǒng)所應(yīng)實(shí)現(xiàn)的功能有以下一些:
輸入密碼進(jìn)入操作界面
產(chǎn)品入庫,產(chǎn)品出庫。
查詢指定倉庫編號(hào)的入庫記錄
查詢指定產(chǎn)品編號(hào)的入庫記錄
查詢指定入
2、庫時(shí)間的入庫記錄
查詢指定倉庫編號(hào)的出庫記錄
查詢指定產(chǎn)品編號(hào)的出庫記錄
查詢指定出庫時(shí)間的出庫記錄
查詢倉庫中的產(chǎn)品是否過期
可以在操作過程中修改密碼
2、系統(tǒng)
采用C語言實(shí)現(xiàn),開發(fā)環(huán)境為VC,可以運(yùn)行在操作系統(tǒng)windows98及以上皆可。
3.運(yùn)行要求
1)可以進(jìn)行隨便操作,不受限制。
2)界面友好,操作方便,例如在進(jìn)行產(chǎn)品出入庫和查詢時(shí)有提示操作。
二、總體設(shè)計(jì)
1、系統(tǒng)流程設(shè)計(jì)
根據(jù)系統(tǒng)要求,設(shè)計(jì)如下的系統(tǒng)流程
2.系統(tǒng)模塊設(shè)計(jì)如下,有三大基本功能:
1.出庫
2.入庫
3.查詢
倉庫管理
產(chǎn)品入庫
3、產(chǎn)品出庫
查詢指定倉庫入庫記錄
查詢指定倉庫出庫記錄
查詢指定產(chǎn)品入庫記錄
查詢指定產(chǎn)品出庫記錄
判斷倉庫和產(chǎn)品編號(hào)是否存在
判斷入庫日期是否合法
判斷入庫數(shù)量是否大于零
判斷字符長度
判斷閏年與非閏年
判斷每月天數(shù)是否合法
判斷倉庫和產(chǎn)品編號(hào)是否存在
判斷出庫日期是否合法
判斷入庫數(shù)量是否大于零
判斷出庫數(shù)量是否大于零
判斷是否小于當(dāng)前庫存量
判斷字符長度
判斷閏年與非閏年
判斷每月天數(shù)是否合法
查詢指定年月日的出入庫查詢
修改密碼
輸入密碼
三:總體思路
菜單顯示:實(shí)現(xiàn)操作某功能時(shí)有相應(yīng)的提示。
功能選擇:每一種功能用相應(yīng)的操作數(shù)
4、字相對(duì)應(yīng)。
產(chǎn)品出入庫:在原有鏈表的基礎(chǔ)上進(jìn)行插入操作。
查詢記錄:調(diào)用對(duì)應(yīng)的查詢函數(shù)來實(shí)現(xiàn)。
四:詳細(xì)設(shè)計(jì)
1:定義結(jié)構(gòu)體變量
日期:struct warehouse{
int wnum;
char wname[20];
char changename[20];
}wh[5];
產(chǎn)品:
struct product{
int pnum;
char pname[20];
char norms[10];
}pr[10];
鏈表:
struct manage{
int wnum;
int pnum;
char data[15];
int
5、 number;
int operate;
struct manage *next;
};
為了能實(shí)現(xiàn)不受限制的產(chǎn)品出入庫,采用鏈表的結(jié)構(gòu)保存產(chǎn)品的信息,在增加產(chǎn)品出入庫時(shí),創(chuàng)建一個(gè)新的節(jié)點(diǎn),將其插入到鏈表中,示意圖如下。
Wnum,pnum,data[15], Number,operate next
Wnum,pnum,
Number,operate next
Wnum,pnum, NULL
Number,operate
2:模塊化設(shè)計(jì)
進(jìn)入設(shè)計(jì):
以輸入密碼的方式進(jìn)入,最多可輸入三次,如果第三次輸入錯(cuò)誤,系統(tǒng)將自動(dòng)退出。
6、這樣保證了倉庫管理這一程序操作的保密性,保證了倉庫管理的安全性。
下一次輸入正確的密碼進(jìn)入,先顯示出倉庫的信息,如下圖:
閃動(dòng)經(jīng)大約5-8秒后進(jìn)入主界面。
主界面實(shí)現(xiàn):void screen();/*菜單界面函數(shù)*/
模塊功能:來清晰的實(shí)現(xiàn)人機(jī)對(duì)話完成不同功能的選擇。每完成相應(yīng)操作都會(huì)清空界面。
用戶輸入菜單項(xiàng)前面的數(shù)字,主菜單消失,進(jìn)入該模塊的相應(yīng)界面,進(jìn)行相應(yīng)的操作,完成后,回到主界面。
產(chǎn)品入庫:struct manage *Instore(struct manage *); /*插入入庫鏈表函數(shù)*/調(diào)用此函數(shù)整體實(shí)現(xiàn)產(chǎn)品入
7、庫。
1、 日期格式合法性:int date(char data[]); /*日期格式是否合法函數(shù)*/
模塊功能:判斷長度是否為十,第五位和第八位是否為‘-’,通過atoi()分離日期字符串保存到日期結(jié)構(gòu)體中調(diào)用閏年函數(shù)、月份和月份天數(shù)的合法性函數(shù)。各函數(shù)返回1或0來判斷成立與否。
2、 閏年判斷:int Isleapyear(int ); /*判斷是否為閏年函數(shù)*/是閏年返回1,否返回0.
3、 月份和天數(shù)合法判斷:int numday(struc
8、t data ); /*判斷輸入天數(shù)是否合法函數(shù)*/
模塊功能:定義一個(gè)月份數(shù)組t[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}、調(diào)用閏年函數(shù)判斷年份當(dāng)為閏年且為二月時(shí)注意t[2]要加1.月份要小于12,月份結(jié)構(gòu)體中天數(shù)要小于每月天數(shù)。成立返回1,不成立返回0.
4、 產(chǎn)品編號(hào)和倉庫編號(hào)、入庫數(shù)量判斷:int number(struct manage *); /*判斷倉庫和產(chǎn)品號(hào)存在和入庫數(shù)量函數(shù)*/
模塊功能:循環(huán)查詢倉庫數(shù)組和產(chǎn)品數(shù)組來判讀編號(hào)是否存在。
產(chǎn)品出庫:struct
9、manage *Outstore(struct manage *); /*插入出庫鏈表函數(shù)*/ 大致和入庫一樣,但要多調(diào)用判斷庫存量函數(shù)。
1:查詢庫存量函數(shù):int Search(struct manage *,struct manage *);
模塊功能:當(dāng)鏈表不為空,逐個(gè)比較結(jié)點(diǎn)存在入庫記錄則得到入庫數(shù)量,存在出庫記錄得到出庫數(shù)量,兩者差比較如果大于0返回1,反之返回0.
查詢倉庫記錄:void searchwarehouse(struct manage *,int); /*查詢記錄函數(shù)*/
模塊功能:輸入
10、你要查詢的倉庫編號(hào)和操作類型調(diào)用鏈表來實(shí)現(xiàn)查詢。存在調(diào)用打印函數(shù)。
查詢你產(chǎn)品記錄:void searchproduct(struct manage *,int);/*查詢產(chǎn)品記錄*/
模塊功能:輸入你要查詢的產(chǎn)品編號(hào)和操作類型調(diào)用鏈表來實(shí)現(xiàn)查詢。存在調(diào)用打印函數(shù)。
打印記錄:void print(struct manage *); /*輸出記錄函數(shù)*/
模塊功能:輸出記錄。
四:測(cè)試結(jié)果
1:產(chǎn)品入庫
輸入10001 11001 12 12,測(cè)試結(jié)果
原因:輸入日期長度不滿足1
11、0.
輸入10001 11001 2004-02-30 1,測(cè)試結(jié)果
原因:閏年二月份天數(shù)超過了29.
輸入10001 11001 2000-13-12 12,測(cè)試結(jié)果
原因:月份超過了12。
輸入1 11001 2000-11-11 12,測(cè)試結(jié)果
原因:倉庫編號(hào)錯(cuò)誤。
輸入10001 11001 2000-12-12 12,測(cè)試結(jié)果
入庫成功。
2:產(chǎn)品出庫
輸入 10002 11001 2001-12-12 12,測(cè)試結(jié)果
原因:10002倉庫中沒有此產(chǎn)品。
輸入10001 11001 2007-12-12 50,測(cè)試結(jié)果
12、
原因:庫存量小于50
輸入10001 11001 2001-12-12 11,測(cè)試結(jié)果
出庫成功。
3.查詢倉庫的入庫記錄
輸入倉庫編號(hào) 10005,測(cè)試結(jié)果
原因:倉庫沒有入庫記錄。
輸入倉庫編號(hào)10001,測(cè)試結(jié)果
結(jié)果如上。
4:查詢倉庫的出庫記錄
輸入10002,測(cè)試結(jié)果
輸入10003,測(cè)試結(jié)果如下:
原因:沒有庫存量
輸入10001,測(cè)試結(jié)果
打印多條記錄。
5:查詢產(chǎn)品入庫記錄
輸入11001,測(cè)試結(jié)果
輸入11003,測(cè)試結(jié)果
原因:不存在產(chǎn)品入庫記錄。
6:查詢產(chǎn)品出庫記錄
輸入10001
13、,測(cè)試結(jié)果
7:查詢指定日期的出庫和入庫記錄
輸入2000-12-12
輸入2005-01-01
原因:該時(shí)間沒有入庫和出庫記錄。
8.修改密碼
修改密碼操作采用網(wǎng)上大多數(shù)網(wǎng)站的密碼修改模式。即先輸入原密碼,再輸入要修改的密碼兩次,第一次輸后,第二次輸入的要和第一次相同,以便確認(rèn)其正確性。修改時(shí)輸入原密碼共有三次機(jī)會(huì),以保證安全性,如果三次輸入全錯(cuò),系統(tǒng)自動(dòng)退出,操作如下:
正確修改密碼如下;
9:查詢產(chǎn)品是否過期
輸入年份為2001,月份為01,天數(shù)為02,其結(jié)果如下:
10.按0退出程序,這一步并不是簡單的退出了程序,而是在退出之前,進(jìn)行了內(nèi)存
14、空間的釋放。其代碼如下:
void freerecord(struct manage *head)
{
struct manage *p=head;
while(head) /*釋放內(nèi)存*/
{
head=head->next;
free(p);
p=head;
}
}
五:實(shí)訓(xùn)總結(jié)
實(shí)訓(xùn)感想:通過實(shí)訓(xùn)我感覺到自己動(dòng)手編程能力的提高,把自己課堂上學(xué)到的知識(shí)應(yīng)用于實(shí)踐中,在編程過程中經(jīng)常遇到問題,但在老師耐心指導(dǎo)下一個(gè)一個(gè)的解決了,每次的練習(xí)都增長了新知識(shí)當(dāng)我一個(gè)程序運(yùn)行處結(jié)果時(shí)我激動(dòng)不已,這也逐漸培養(yǎng)了我對(duì)學(xué)習(xí)C語言的
15、興趣,尤其是這次綜合練習(xí)更是讓我看到精通C語言還有很多路要走,雖然實(shí)訓(xùn)即將結(jié)束但我學(xué)習(xí)C語言的腳步不會(huì)停止,我還會(huì)繼續(xù)上機(jī)培養(yǎng)我的編程能力。借助這門語言我會(huì)努力學(xué)好軟件工程中其他學(xué)科,我要在編程這條道路上一直走下去。
設(shè)計(jì)亮點(diǎn):1界面友好,較好實(shí)現(xiàn)了人-機(jī)對(duì)話。
2使用結(jié)構(gòu)化程序設(shè)計(jì)思路,步驟清晰通過不同函數(shù)來實(shí)現(xiàn)不同模塊功能。
3每操作一步就清理界面,讓人看起來清楚明了。
4程序清楚,分行恰當(dāng),注釋合理。
5 操作不受限制,可以隨時(shí)出入庫和進(jìn)行查詢。
不足: 有些細(xì)節(jié)沒有考慮清楚,程序還不夠優(yōu)化。