C語言課程設(shè)計(jì)(圖書銷售管理系統(tǒng))_第1頁
C語言課程設(shè)計(jì)(圖書銷售管理系統(tǒng))_第2頁
C語言課程設(shè)計(jì)(圖書銷售管理系統(tǒng))_第3頁
C語言課程設(shè)計(jì)(圖書銷售管理系統(tǒng))_第4頁
C語言課程設(shè)計(jì)(圖書銷售管理系統(tǒng))_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGYC語言程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告課設(shè)題目: 圖書銷售管理系統(tǒng) 專 業(yè): 電氣工程及其自動化 班 級: KT1223-1 姓 名: * 成 績: 完成日期: 2012年12月28日2013年1月11日 指導(dǎo)教師: * 目 錄目 錄112495.6圖書信息保存界面:225.7 退出程序:5.8圖書信息新建界面:5.9修改密碼2323271.課程設(shè)計(jì)目的1) 通過課程設(shè)計(jì),加深對結(jié)構(gòu)化程序設(shè)計(jì)思想的理解,能對系統(tǒng)功能進(jìn)行分析,并設(shè)計(jì)合理的模塊化結(jié)構(gòu)。2) 通過課程設(shè)計(jì),進(jìn)一步掌握C語言中重要的數(shù)據(jù)結(jié)

2、構(gòu)。掌握并熟練運(yùn)用指針、鏈表、結(jié)構(gòu)體、文件等數(shù)據(jù)結(jié)構(gòu)。3) 通過課程設(shè)計(jì),提高程序開發(fā)能力,能運(yùn)用合理的控制流編寫清晰高效的程序。4) 通過課程設(shè)計(jì),培養(yǎng)C語言知識運(yùn)用和自學(xué)能力,真正的把課堂上獲得的知識運(yùn)用起來,培養(yǎng)自己對程序編寫的興趣,并能獨(dú)立設(shè)計(jì)和實(shí)現(xiàn)一個(gè)小型系統(tǒng)。5) 通過課程設(shè)計(jì),加強(qiáng)了自己的程序分析能力。2.需求分析2.1要求1) 遵循軟件開發(fā)過程的基本規(guī)范;能靈活應(yīng)用,初步具備運(yùn)用C程序解決實(shí)際問題的能力。2) 運(yùn)用結(jié)構(gòu)化程序設(shè)計(jì)方法,按照課程設(shè)計(jì)題目要求,完成包括需求分析、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編寫代碼、調(diào)試和測試C程序等過程。3) 學(xué)會利用數(shù)組、結(jié)構(gòu)體、鏈表進(jìn)行相

3、關(guān)信息表示。4) 功能模塊劃分清晰,系統(tǒng)結(jié)構(gòu)圖符合功能操作要求,且有詳盡的功能描述5) 各主要功能模塊有詳盡的流程圖及描述,用函數(shù)的形式實(shí)現(xiàn),且調(diào)用入口、功能、出口等關(guān)系正確。6) 所設(shè)計(jì)的C程序較好的可讀性和可靠性;程序書寫風(fēng)格規(guī)范,注釋清晰。7) 界面友好(良好的人機(jī)互交),凡需要輸入信息時(shí),都有較詳盡的提示信息,并對輸入信息有較完善的值域分析。8) 程序經(jīng)上機(jī)調(diào)試通過,不應(yīng)出現(xiàn)語法型、功能型錯(cuò)誤,并獲得滿意的結(jié)果。9) 學(xué)會通過各功能性測試用例測試程序的能力,盡可能避免原則性錯(cuò)誤的出現(xiàn)。10) 掌握編寫、調(diào)試和測試C語言程序的基本技巧,充分理解結(jié)構(gòu)化程序設(shè)計(jì)的基本方法。11) C語言課程

4、設(shè)計(jì)報(bào)告的內(nèi)容反應(yīng)實(shí)際設(shè)計(jì)過程,且符合格式要求,無抄襲現(xiàn)象。2.2任務(wù)描述此系統(tǒng)以圖書銷售為背景,支持書店管理人員對圖書信息進(jìn)行新建、查詢、整體列表瀏覽、刪除(需要密碼),同時(shí)也支持圖書購買者進(jìn)行圖書信息的查詢。圖書信息從文件中載入,當(dāng)圖書信息變動過時(shí),亦可實(shí)現(xiàn)保存。具體功能實(shí)現(xiàn)如下:1)圖書信息載入:系統(tǒng)自動從文件中讀入書庫信息,以便操作者可以實(shí)現(xiàn)相關(guān)需求。2)新建功能:當(dāng)書庫進(jìn)了不同的新書回來時(shí),可通過此功能將新書加入書庫。3)圖書信息整體瀏覽功能:實(shí)現(xiàn)對書庫信息的整體瀏覽,使書庫管理人員對書庫信息有一個(gè)整體的了解。4)圖書信息查詢功能:實(shí)現(xiàn)對圖書按書號、書名或作者名進(jìn)行查詢。5)圖書信息

5、刪除功能:實(shí)現(xiàn)對已賣完的圖書進(jìn)行清理。6)修改密碼功能:書店管理人員可以擁有密碼,進(jìn)行圖書刪除。通過修改密碼,確保書庫信息安全2.3運(yùn)行環(huán)境1) WindowsXP/7系統(tǒng)2) VC+6.0編譯環(huán)境2.4開發(fā)工具C語言3.總體設(shè)計(jì)3.1系統(tǒng)流設(shè)計(jì)本系統(tǒng)的功能模塊如圖1所示,主要有以下模塊:圖書信息整體瀏覽自動導(dǎo)入書庫信息修改密碼圖書信息保存圖書信息刪除退出程序銷售圖書課程名稱界面主菜單界面程序歡迎界面圖書信息查詢圖書信息新建按書號刪除按書號刪除退出刪除按書名刪除按書名查詢退出查詢按書號查詢按書號查詢按書號查詢圖1系統(tǒng)功能模塊圖3.2系統(tǒng)模塊設(shè)計(jì)1) 課程名稱界面:構(gòu)造函數(shù)void auther

6、(),實(shí)現(xiàn)軟件名稱以及作者的顯示。2) 系統(tǒng)歡迎界面:構(gòu)造函數(shù)void welcome(),實(shí)現(xiàn)歡迎使用圖書銷售管理系統(tǒng)的顯示。3) 主菜單界面:構(gòu)造函數(shù)int menu(),實(shí)現(xiàn)系統(tǒng)主菜單的顯示。4) 圖書信息自動導(dǎo)入:構(gòu)造函數(shù)void loadrec(),實(shí)現(xiàn)系統(tǒng)自動導(dǎo)入圖書信息。5) 圖書信息新建:構(gòu)造函數(shù)void create(),實(shí)現(xiàn)新建圖書信息。6) 圖書信息查詢:構(gòu)造函數(shù)void search(),實(shí)現(xiàn)查詢界面的顯示。并通過對按按書號查詢函數(shù)search_by_bnum、按書名查找函數(shù)search_by_bname、按作者查找函數(shù)search_by_author的調(diào)用,實(shí)現(xiàn)對圖書

7、信息的查詢。7) 圖書信息整體瀏覽:構(gòu)造函數(shù)void list(),顯示當(dāng)前書庫所有書的信息。8) 圖書銷售:構(gòu)造函數(shù)void buy(),實(shí)現(xiàn)通過書號購書,并可調(diào)用查詢功能,實(shí)現(xiàn)從其他途徑找到書號。9) 圖書信息刪除:構(gòu)造函數(shù)void delet(),實(shí)現(xiàn)對已售完的圖書進(jìn)行清理,并通過對按書號刪除函數(shù)delet _by_bnum、按書名刪除函數(shù)delet _by_bname、按作者刪除函數(shù)delet _by_author的調(diào)用,實(shí)現(xiàn)對圖書信息的刪除。10) 圖書信息保存:構(gòu)造函數(shù)void save(),實(shí)現(xiàn)對圖書信息變動后的保存。11) 修改密碼:構(gòu)造函數(shù)void redef(),實(shí)現(xiàn)修改密

8、碼。12) 退出系統(tǒng):構(gòu)造函數(shù)void exit0(),實(shí)現(xiàn)退出系統(tǒng)。4.詳細(xì)設(shè)計(jì)4.1數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)根據(jù)系統(tǒng)要求,系統(tǒng)中需要保存的數(shù)據(jù)信息,其結(jié)構(gòu)如下:數(shù)據(jù)項(xiàng)名稱數(shù)據(jù)項(xiàng)系統(tǒng)表示數(shù)據(jù)類型數(shù)據(jù)長度備注書號bnumchar21書名bnameChar41作者authorChar11售價(jià)bpayFloat4書存在狀態(tài)benshuInt 4為了充分利用內(nèi)存空間和實(shí)現(xiàn)不受限制的新建、載入圖書信息,采用鏈表的結(jié)構(gòu)保存圖書信息,在新建或?qū)胍槐緢D書信息時(shí),創(chuàng)建一個(gè)圖書信息的節(jié)點(diǎn),將其插入到鏈表中,示意圖如下。 圖書信息1圖書信息2通訊錄信息1221圖書信息3圖書信息4為此,需聲明一個(gè)類型為struct book

9、的結(jié)構(gòu)體,其成員為圖書的基本信息。然后通過對指針、鏈表、文件等數(shù)據(jù)結(jié)構(gòu)的操作,實(shí)現(xiàn)對圖書信息信息的載入、新建、查詢、整體瀏覽、刪除、保存,銷售圖書入,等一系列操作。其中,結(jié)構(gòu)體定義如下:struct book char bnum21;char bname41;char author11;float bpay; int benshu;struct book *next; ;4.2模塊接口設(shè)計(jì)1) 所有函數(shù)模塊聲明如下:void auther();/*顯示課程名稱*/void welcome();/*顯示歡迎界面*/void menu();/*主菜單函數(shù),顯示主菜單,并返回用戶的選擇*/void

10、loadrec();/*自動導(dǎo)入書庫信息*/void create();/*新建圖書信息*/void list();/*圖書信息整體瀏覽*/void bpay(); /*銷售圖書*/void delet();/*刪除已售完的圖書信息*/void delet_by_bnum();/*通過書號刪除*/void delet_by_bname();/*通過書名刪除*/void delet_by_author();/*通過作者刪除*/void search();/*查詢書存在狀態(tài)*/void search_by_bnum();/*通過書號查詢*/void search_by_bname();/*通過書名

11、查詢*/void search_by_author();/*通過作者查詢*/void save();/*保存記錄*/void redef();/*修改密碼*/void exit0();/*退出*/2) 并定義14個(gè)全局變量:int save_flag=0;/*圖書信息是否保存標(biāo)志*/struct book *head=NULL, *p1,*p2,*p3;/*用于新建和導(dǎo)入圖書信息*/*head2=NULL, *p4,*p5,*p6;/*用于銷售圖書*/int buy_flag=0;/*買書時(shí),是否調(diào)用過查詢功能標(biāo)志*/int shan_flag=0;/*刪書時(shí),是否調(diào)用過顯示已售完書功能標(biāo)志*

12、/int T=0;/*記錄導(dǎo)入的書本數(shù)*/char mima11=""/*初始密碼*/3) 主要模塊的實(shí)現(xiàn)系統(tǒng)以主函數(shù)int main()為入口,首先通過調(diào)用void author()顯示軟件名稱及技術(shù)開發(fā)者、調(diào)用void welcome()顯示歡迎界面,再調(diào)用loadrec()函數(shù)導(dǎo)入書庫信息,然后通過switch(menu(),顯示主菜單,并利用int menu()接受用戶的返回值返回個(gè)主函數(shù),再調(diào)用相關(guān)的函數(shù)進(jìn)入到下一級菜單進(jìn)行相關(guān)操作。4.3 以下是幾個(gè)主要模塊的流程圖:1) 主函數(shù):主函數(shù) 調(diào)用void auther()、void welcome()、void l

13、oadrec()調(diào)用int menu()接受int menu()的返回值N是否合法 YYN是否為0調(diào)用相關(guān)函數(shù)退出系統(tǒng)圖2 主函數(shù)流程圖2) 導(dǎo)入書庫信息函數(shù)提示打開文件失敗關(guān)閉文件將信息放入空間中文件是否結(jié)束結(jié)束申請一個(gè)空間是否成功打開文件YNN Y圖3 信息瀏覽流程圖需要修改的學(xué)生學(xué)號是否存在修改界面是選擇修改內(nèi)容實(shí)現(xiàn)修改回主菜單圖3 導(dǎo)入書庫信息函數(shù)流程圖通過書號刪除通過書號刪除通過書號刪除選擇一種刪除方式n +是否正確重新輸入是否正確輸入密碼是否繼續(xù)刪除結(jié)束是否顯示已售完書是否繼續(xù)刪除刪除不能刪除是否售完提示不存在是否存在按選擇的刪除方式輸入3) 刪除圖書信息函數(shù):結(jié)束Yn>2Y

14、NNNYYNYYNYN圖4 刪除圖書信息函數(shù)流程圖4) 銷售圖書: 申請一個(gè)空間顯示已購圖書重新輸入書號將信息放入空間是否售完是否存在輸入書號申請一個(gè)空間是否為0提示售完顯示收費(fèi)是否調(diào)用查詢撤銷購買是否確認(rèn)購買是否結(jié)束購書N Y Y NNY N YN Y 圖5 銷售(購買)圖書函數(shù)流程圖5.運(yùn)行結(jié)果5.1主菜單界面:圖6主菜單界面輸入功能選擇,系統(tǒng)自動進(jìn)入相應(yīng)功能界面。5.2圖信息查找界面:圖7 圖書信息查找界面輸入選擇進(jìn)入相應(yīng)查詢方式圖8進(jìn)入書號查詢界面也可選其他選項(xiàng)進(jìn)入相應(yīng)查詢界面圖9通過書號查詢輸入書號錯(cuò)誤,按回車又返回查詢菜單 圖10 通過書號查找結(jié)果顯示一本書只有一個(gè)書號圖11通過書

15、名查找結(jié)果顯示同種書名的書可以有多本5.3圖書銷售界面:圖12圖書銷售界面默認(rèn)操作者知道書號圖13書號輸入有誤不知道書號可以選擇Y調(diào)用查詢功能通過其他方式找到所要購買的書的書 圖14通過書名查找后界面調(diào)用查詢后可以查到你要購買的書的書號圖15通過調(diào)用查詢購買了圖書界面此時(shí)可按N結(jié)束購書,按任意鍵繼續(xù)購書圖16不調(diào)用查詢圖17購買圖書界面通過書作者找到了想要的圖書圖18圖書購買后,已購圖書顯示界面圖19確認(rèn)購買界面圖20購買成功此時(shí)確認(rèn)了購買5.4圖書信息整體瀏覽界面:圖21圖書信息整體瀏覽5.5圖書信息刪除界面:圖22圖書信息刪除界面圖23密碼錯(cuò)誤界面有3次輸密碼的機(jī)會,防止惡意試密碼圖24密

16、碼多次錯(cuò)誤界面此時(shí)按回車會返回到主菜單圖25圖書刪除界面此時(shí)是密碼真確后進(jìn)入備注:接下來選擇相應(yīng)刪除方式進(jìn)入圖書刪除后和圖書購買操作相似,同樣可以調(diào)用其它函數(shù)(已售完圖書顯示函數(shù))以方便刪除,在此就不在重復(fù)操作演示。5.6圖書信息保存界面:圖26圖書信息保存界面此時(shí)是圖書信息變動過圖27重復(fù)保存界面圖書信息未變動時(shí)進(jìn)入保存也是此界面5.7退出程序界面:圖28退出程序界面此時(shí)圖書信息變動過,未變動時(shí)直接結(jié)束程序5.8圖書信息新建界面:(略)備注:圖書信息新建功能為附加的功能,程序本身沒有要求要有此項(xiàng)功能,在此就不演示。5.9修改密碼界面:(略)備注:修改密碼功能為附加的功能,程序本身沒有要求要有

17、此項(xiàng)功能,在此就不演示。6.程序調(diào)試與測試6.1程序調(diào)試(1) 各模塊分別調(diào)試過程及結(jié)果。(1)程序歡迎界面和程序名稱界面做起來比較容易,沒有出錯(cuò)。題目顯示是老師臨時(shí)加的一個(gè)要求,做起來也沒出錯(cuò)。(2)主菜單界面我是按照老師給的一個(gè)參考程序做的,后來自己又優(yōu)化了一下,沒有出問題。(3)書庫信息導(dǎo)入函數(shù)void loadrec()。書庫信息導(dǎo)入到程序中,我是用的鏈表。最難得地方就是建立鏈表,剛開始時(shí),我用兩個(gè)指針進(jìn)行操作。但是存儲空間必須剛開始就要申請一個(gè),然后根據(jù)文件中的數(shù)據(jù),進(jìn)行循環(huán),動態(tài)申請。這樣就會多出一個(gè)結(jié)點(diǎn),當(dāng)最后釋放這個(gè)節(jié)點(diǎn)時(shí),兩個(gè)指針就操作不了。后來參考老師的程序,用三個(gè)指針,很

18、順利的就解決了。如果文件打開失敗的話,釋放結(jié)點(diǎn)就會出錯(cuò)。比如我的程序(導(dǎo)入書庫信息) 中的p3->next=NULL,因?yàn)槲募蜷_失敗,這樣就不會進(jìn)入動態(tài)申請存儲空間,這樣p3->next=NULL就會沒有意義。解決辦法:進(jìn)入導(dǎo)入書庫函數(shù)(void loadrec)時(shí),執(zhí)行p3=head.即使p3有所指向,就可以解決。(4)查詢函數(shù)void search()。通過書號查詢時(shí)實(shí)現(xiàn)比較容易,找不到時(shí)就直接顯示找不到,找到就輸出,因?yàn)橐粋€(gè)書號只會對應(yīng)一本書,循環(huán)好做。而通過書名和作者查詢時(shí),可以有多本同名的書或有多本同作者的書。這時(shí),就需要先做一個(gè)循環(huán),看操作者要查詢的書名或作者是否存在

19、,若在,就再弄一個(gè)循環(huán),從剛才找到的結(jié)點(diǎn)后面再開始查找,將與剛才找到的結(jié)點(diǎn)相同的信息的結(jié)點(diǎn)再輸出,直到結(jié)點(diǎn)全部檢查完。(5)圖書銷售函數(shù)void buy(),為了購買(任何操作者對管理系統(tǒng)來說都是圖書購買者)圖書操作簡便,我將程序限定在只能通過書號來購買圖書,因?yàn)橐粋€(gè)書號只會對應(yīng)一本書。但這樣就會產(chǎn)生一個(gè)問題,如果購買者不知道書號,但知道書名或作者,那他就購買不成圖書了。解決辦法:程序首先默認(rèn)購買者知道書號,當(dāng)沒有找到購買者所找的書號時(shí),程序就會提示,是否要調(diào)用查詢功能,當(dāng)執(zhí)行調(diào)用時(shí),購買者就可以根據(jù)自己知道的圖書信息(書名或作者),選擇相應(yīng)的查詢渠道,這樣購買者就可以查看自己要找的書在不在,

20、若在,就可以看著列表信息,重新輸入書號進(jìn)行購買,這樣就間接支持了多渠道購買。為了滿足多次購買,我用了一個(gè)循環(huán),當(dāng)購買者想結(jié)束購買時(shí),執(zhí)行相應(yīng)按鍵,才可結(jié)束購買。當(dāng)在最后結(jié)束購買時(shí),程序也會提示購買者是否確認(rèn)購買,此時(shí)亦可確認(rèn),也可撤銷,這樣就比較符合實(shí)際要就和人性化。(6)圖書信息整體瀏覽函數(shù)void list(),實(shí)現(xiàn)起來較簡單,直接輸出結(jié)點(diǎn),直至結(jié)束。(7)圖書信息刪除函數(shù)void delet(),進(jìn)入圖書刪除需要密碼,沒有密碼者不能進(jìn)行刪除操作,為了防止有人惡意試密碼,程序限制了密碼輸入次數(shù),超過了3次,程序就會返回到主菜單。程序要求支持通過書號、書名、作者,三種刪除方式,沒賣完的書不能

21、刪除。通過書號刪除時(shí)實(shí)現(xiàn)起來比較簡單,而通過書名和作者刪除就很麻煩,因?yàn)橥粋€(gè)書名或作者的書可以有多本,而這多本里面可能一部份已盡賣完,有些又沒賣完,要刪除的結(jié)點(diǎn)還可能不止一個(gè)。為了解決這個(gè)問題,在通過書號刪除時(shí),我通過while()循環(huán),找到要刪除的圖書書號,找到該結(jié)點(diǎn)直接刪除,但是通過書名和作者刪除時(shí),這種方式就行不通了,由于再刪除過程中需要判斷要刪除的結(jié)點(diǎn)的位置,這樣就不能同時(shí)刪除已售完的多本同書名或作者的書。于是再通過書名和作者刪除時(shí),我先創(chuàng)建一個(gè)鏈表,將滿足刪除要求的圖書儲存在一起,然后將做一個(gè)循環(huán)判斷,將書庫中與該鏈表儲存的相同的圖書(信息)一個(gè)個(gè)刪除(刪除方式同通過書號刪除),直

22、至該鏈表中的結(jié)點(diǎn)走完。這種方式實(shí)現(xiàn)起來簡單,但比較耗費(fèi)程序運(yùn)行的速度,解決思路不容易想到。再刪除過程中,為了便于刪除,防止操作者不知道有哪些書已經(jīng)賣完,程序可以調(diào)用函數(shù)void bover(),顯示已經(jīng)售完的書,看著列表信息進(jìn)行刪除。(8)保存記錄函數(shù)void save(),實(shí)現(xiàn)比較簡單。(9)退出void exit0(),退出時(shí),為了防止操作者忘記保存記錄,在退出程序時(shí),程序會提醒操作者是否需要保存,這時(shí)操作者可以以選擇保存或不保存,這樣在操作者操作失誤時(shí),在退出時(shí),也避免了強(qiáng)制保存。(10)新建書庫信息函數(shù)和修改密碼函數(shù),題目并未作要求,在此就不再介紹。(2) 集成調(diào)試過程及結(jié)果。在各模塊

23、協(xié)調(diào)操作時(shí),幾乎各個(gè)功能模塊都需要得到頭指針(head),為此我將保存導(dǎo)入書庫信息的鏈表中需要用到的指針定義成全局的,這樣便于操作,可防止頭指針傳錯(cuò)。為了使在退出和記錄保存函數(shù)中,在不同的情況下給出不同的提示信息,我定義了一個(gè)標(biāo)志性全局變量int save_flag=0;/*信息變動標(biāo)志*/。在可使書庫信息變動的函數(shù)中,當(dāng)書庫信息變動成功時(shí),就執(zhí)行save_flag=1,這樣在退出或保存過程中就知道書庫信息是否變動過,以便實(shí)現(xiàn)相應(yīng)功能。在購書過程中,為了間接支持多渠道購書,可以調(diào)用查詢函數(shù)void search(),在主菜單中也可執(zhí)行查詢功能,但是在這兩種調(diào)用過程中,要求卻不是一樣的,在購書函

24、數(shù)中調(diào)用時(shí),查詢功能是分次調(diào)用的,不能連續(xù)執(zhí)行查詢,而且顯示的查詢信息是不能清屏的,因?yàn)椴僮髡咝枰粗樵兊玫降牧斜硇畔⑤斎霑?。在主函?shù)中執(zhí)行此項(xiàng)功能時(shí),是要支持連續(xù)查詢的,而且需要清屏上次執(zhí)行查詢時(shí)顯示的信息。為了實(shí)現(xiàn)這個(gè)要求我定義了一個(gè)全局變量int buy_flag=0,在菜單中執(zhí)行查詢時(shí),首先執(zhí)行buy_flag=0,在購買圖書函數(shù)中調(diào)用查詢功能時(shí),首先執(zhí)行buy_flag=1.然后通過判斷buy_flag的值,在查詢功能中實(shí)現(xiàn)相應(yīng)功能。在刪除圖書時(shí),在要刪除的圖書信息沒找到時(shí),程序會提醒操作者,是否要顯示已售完的圖書void bover(),在調(diào)用void bover()后,操作者

25、可以看著列表圖書信息進(jìn)行刪除,此時(shí)程序就不能再可以返回到刪除方式菜單,為此我定義了一個(gè)全局變量int shan_flag=0,當(dāng)調(diào)用了void bover()后執(zhí)行shan_flag=1,當(dāng)刪除操作成功后,執(zhí)行shan_flag=0,這樣在顯示刪除菜單時(shí)根據(jù)shan_flag的值,就可以完成相應(yīng)的功能。結(jié)合這些全局變量會使界面變得更流暢和美觀。密碼我將其定義成全局變量,這樣當(dāng)我修改密碼(題目未作要求,是我自己加的)時(shí),進(jìn)行刪除操作的密碼就會跟著改變。導(dǎo)入書庫信息時(shí),程序讀文件時(shí)會將下一行的回車符讀進(jìn)來,這樣就會出現(xiàn)亂碼。如果我刪掉文件中的最后一個(gè)回車符,導(dǎo)入和整體瀏覽圖書信息會正常,但是當(dāng)我執(zhí)

26、行新建圖書信息(題目為做要就,是我自己加的)或者圖信息變動過后,保存信息時(shí),文件自身又會在數(shù)據(jù)最后加上一個(gè)回車符,后來我上網(wǎng)搜到資料,弄懂了是咋回事。我們一般讀取文件方式:head =p3=p1=(struct book*)malloc(LEN);/*開辟一個(gè)新單元*/p1->next=NULL;while(!feof(fp)n+;fscanf(fp,"%s%s%s%f%d",p1->bnum,p1->bname,p1->author,&p1->bpay,&p1->benshu);p2=(struct book*)mall

27、oc(LEN);/*繼續(xù)開辟一個(gè)新單元,直到文件讀完*/p1->next=p2;p3=p1;p1=p2;p1->next=NULL;free(p2);p3->next=NULL;/*釋放多申請的一個(gè)單元*/這樣,當(dāng)fscanf讀到最后一個(gè)回車符時(shí),發(fā)現(xiàn)文件結(jié)束,但這時(shí),信息已經(jīng)讀入。真確讀?。篽ead=p3=p1=(struct book*)malloc(LEN);/*開辟一個(gè)新單元*/p1->next=NULL;p7=(struct book*)malloc(LEN);fscanf(fp,"%s%s%s%f%d",p7->bnum,p7-&g

28、t;bname,p7->author,&p7->bpay,&p7->benshu);while(!feof(fp)n+;*p1=*p7;p2=(struct book*)malloc(LEN);/*繼續(xù)開辟一個(gè)新單元,直到文件讀完*/p1->next=p2;p3=p1;p1=p2;p1->next=NULL;fscanf(fp,"%s%s%s%f%d",p7->bnum,p7->bname,p7->author,&p7->bpay,&p7->benshu);free(p2);p3-&

29、gt;next=NULL;/*釋放多申請的一個(gè)單元*/利用中間的一個(gè)變量p7做一個(gè)臨時(shí)存儲空間,文件沒結(jié)束,再將其信息給p1。(3) 功能調(diào)試過程及結(jié)果。首先根據(jù)題目,新建一個(gè)文件,執(zhí)行程序,看程序是否能夠正常讀取文件。讀取正常。分別執(zhí)行不同的函數(shù)看,是否能正常運(yùn)行。各個(gè)程序單獨(dú)執(zhí)行正常。在運(yùn)行一次的情況下,連續(xù)執(zhí)行不同函數(shù),檢查是否有邏輯錯(cuò)誤。在執(zhí)行了相應(yīng)的函數(shù)后,對比文件,看文件是否按程序操作的結(jié)果,正確改變了。將文件刪除,看程序是否會給出正確提示,并且限制某些沒有文件不能實(shí)現(xiàn)的功能。將文件置空,看是否會給出相應(yīng)提示以及程序是否運(yùn)行正常。6.2程序測試各模塊測試用例數(shù)據(jù)及結(jié)果顯示結(jié)果一致(

30、圖書整體瀏覽函數(shù))與文件結(jié)果一致(圖書查詢函數(shù))通過書名查找結(jié)果調(diào)用查詢功能購買圖書購買成功后與前面文件內(nèi)容對比,確實(shí)少了一題本(鬼谷子)通過書名刪除刪除成功后與前面的文件對比,顯示確實(shí)刪除了測試中出現(xiàn)的問題的原因和分析在測試數(shù)據(jù)過程中,若發(fā)現(xiàn)測試結(jié)果與文件中結(jié)果不相符檢查在執(zhí)行相關(guān)操作后,是否確認(rèn)了該操作,比如在購書過程中,最后你是否確認(rèn)了購買。檢查在退出程序時(shí)是否保存了修改記錄。檢查文件是否一直沒關(guān)過,因?yàn)樾畔⒆儎雍?,文件如果一直沒關(guān),文件中顯示的依舊是操作前的結(jié)果。7.問題與不足(1) 需求分析中存在的問題和分析:該程序不支持插入新圖書,不支持統(tǒng)計(jì)銷售收入,不支持修改圖書信息,與實(shí)際不符

31、。程序最后我雖然加了一個(gè)圖書信息新建功能和修改密碼功能,但圖書新建功能,不能完全識別操作者輸入的錯(cuò)誤信息。(2) 概要設(shè)計(jì)中存在的問題和分析:全局標(biāo)志性變量用的太多,在主體函數(shù)中定義變量時(shí),容易與全局標(biāo)志性產(chǎn)生混淆。全局指針也用的太多,雖然這樣避免了傳指針出錯(cuò),但沒有鍛煉我們傳參數(shù)的能力。(3) 詳細(xì)設(shè)計(jì)中存在的問題和分析:在圖書購買過程中,不能夠直接支持通過書名和作者購買圖書,而且也不支持一次性購買多本,購買多本只能通過連續(xù)購買。(4) 代碼編制中存在的問題和分析:由于程序中用了較多的循環(huán)和判斷,花括弧( )較多,容易缺少或多出花括弧。ALT+F8不僅能將代碼自動整理成微軟的cpp文件格式,

32、而且它還是檢查花括弧是否缺少或多出的有力工具。(5) 調(diào)試和測試中存在的問題和分析:在編寫程序代碼是,要注意全局變量和局部變量,防止二者混淆。當(dāng)文件打開失敗時(shí)要注意指針是否還有確定的指向,比喻在導(dǎo)入書庫信息函數(shù)void loadrec()中,當(dāng)文件打開失敗時(shí),p3->next=NUU就沒有意義,在這之前就需要為p3申請一個(gè)空間。8.建議課設(shè)題目有些地方自相矛盾(不是我的題目),建議老師能花點(diǎn)時(shí)間將課設(shè)題目中有些不合理的地方改正一下。時(shí)間安排上,剛開始時(shí)覺得很不合理,因?yàn)橛锌荚嚕挠袝r(shí)間做課設(shè),但后來就發(fā)現(xiàn)這樣很好,因?yàn)槲覀兛梢月?,有時(shí)間考慮程序中的問題,避免抄襲,對自己的編程能力的提

33、高有好處,因?yàn)樗械亩际亲约簩懙?。建議以后也這樣。9.編程體會剛開始準(zhǔn)備編代碼時(shí),感覺很茫然,不知道從何寫起。后來先看懂老師的程序,沒事時(shí)就時(shí)不時(shí)的想一下自己的課設(shè)題目。經(jīng)過一兩天的思考,整個(gè)課設(shè)的框架基本建好了,現(xiàn)在感覺其實(shí)做課設(shè)最難的地方就是基本框架的建立,只要建好了基本框架,動起手來就會發(fā)現(xiàn)其實(shí)課設(shè)不是非常困難。做完課設(shè)學(xué)到了很多編程方面的技巧,比喻在編寫程序時(shí),不要將整個(gè)程序放在一起檢查語法錯(cuò)誤,那樣非常難操作,可以保留主函數(shù),然后將主體函數(shù)一個(gè)個(gè)的檢查錯(cuò)誤,這樣便于錯(cuò)誤的查找和改正。以前見到一大堆的語法錯(cuò)誤,就頭痛,總是想放棄,其實(shí)有時(shí)候就一個(gè)地方出了一點(diǎn)小錯(cuò),現(xiàn)在檢查邏輯錯(cuò)誤的能力

34、也比以前有提高,以前遇到錯(cuò)誤找了一會找不出來就不想找了,最主要的原因是以前沒有毅力,并不是自己找不出錯(cuò)誤。全局變量的巧妙運(yùn)用會給程序減少不少麻煩,對全局變量的運(yùn)用也是這次課設(shè)的一大收獲。這次還學(xué)到了一些課外知識,比喻getch(),goto,continue,(int a ;if(a=getch()=27)(按【Esc】可以退出循環(huán)),的運(yùn)用,還有讀文件時(shí)應(yīng)注意的一些問題等。這些老師在課堂上沒提過或提及較少的東西在這次課設(shè)中基本上都掌握了。課設(shè)將這半年學(xué)的東西串聯(lián)了起來,是對這半年來學(xué)的C語言的一個(gè)總結(jié)。很多東西別人講,你聽懂了是一回事,但自己做出來又是一回事,只有通過自己做出來了,才算是真正

35、的學(xué)會了,課設(shè)就起了這個(gè)作用。10.程序源代碼:#include <stdio.h>#include <string.h>#include <malloc.h>#include <stdlib.h>#include <conio.h>#define LEN sizeof(struct book)/*結(jié)構(gòu)體定義*/struct bookchar bnum 12;/*書號*/char bname 41;/*書名*/char author 21;/*作者*/float bpay;/*書價(jià)*/int benshu;/*書存在本數(shù)*/struc

36、t book *next;/*函數(shù)聲明*/void loadrec();/*自動讀入書庫信息*/void create();/*新建書庫*/void search();/*查詢書存在狀態(tài)*/void search_by_bnum();/*通過書號查詢*/void search_by_bname();/*通過書名查詢*/void search_by_author();/*通過作者查詢*/void auther();/*軟件名稱及開發(fā)者顯示*/void welcome();/*歡迎界面顯示*/void buy();/*購買書籍*/void list();/*列出書庫信息*/void delet()

37、;/*刪除書目*/void delet_by_bnum();/*通過書號刪除*/void delet_by_bname();/*通過書名刪除*/void delet_by_author();/*通過作者刪除*/void save();/*保存記錄*/void redef();/*修改密碼*/void bover();/*顯示已售完的書*/void exit0();/*退出*/int menu();/*主菜單*/void jianjie();/*程序要求簡介*/void print2();/*顯示查詢菜單*/void print3();/*顯示刪除菜單*/struct book *head=NU

38、LL,*head2=NULL;/*head和head2分別用于書庫的頭指針和已購書的頭指針*/struct book *p1,*p2,*p3,*p4,*p5,*p6;/*p1、p2、p3用于操作書庫圖書,p4、p5、p6用于操作已購書*/int save_flag=0;/*圖書信息變動標(biāo)志*/int buy_flag=0;/*買書時(shí),是否調(diào)用過查詢功能標(biāo)志*/int shan_flag=0;/*刪書時(shí),是否調(diào)用過顯示已售完書功能標(biāo)志*/int T=0;/*記錄導(dǎo)入的書本數(shù)*/char mima11=""/*初始密碼*/*主函數(shù)*/int main()auther();/*軟

39、件名稱及開發(fā)者顯示*/welcome();/*歡迎界面顯示*/loadrec();/*自動導(dǎo)入書庫信息*/while(1)switch(menu()case 1:buy_flag=0;system("cls");search();break;case 2:system("cls");buy();break;case 3:system("cls");list();break;case 4:system("cls");delet();break;case 5:system("cls");save()

40、;break;case 6:system("cls");create();break;case 7:system("cls");redef();break;case 8:system("cls");jianjie();break;case 0:system("cls");exit0();break;default:printf("n選擇錯(cuò)誤,請按主菜單提示輸入您的正確選擇(08)n");printf("按任意鍵返回繼續(xù):");rewind(stdin);/*清空緩沖區(qū)*/ge

41、tch();return 0;/*菜單*/int menu()int choice;system("cls");printf("n *主菜單*nn");printf("1.查詢圖書信息nn");printf("2.購買圖書nn");printf("3.列出圖書信息nn");printf("4.刪除圖書nn");printf("5.保存記錄nn");printf("6.新建書庫nn");printf("7.修改密碼nn"

42、;);printf("8.程序要求簡介nn");printf("0.退出nnn");printf("請輸入您的選擇(08):");rewind(stdin);/*清空緩沖區(qū)*/scanf("%d",&choice);return choice;/*返回用戶的選擇*/*程序要求簡介*/void jianjie()printf("tttt程序要求簡介:");printf("n20.圖書銷售管理系統(tǒng)");printf("題目描述n");printf(&q

43、uot;圖書租借信息包括:書號、書名、作者名、書價(jià)、存在狀態(tài)(每個(gè)書名有5本書)、銷售價(jià)格為:總費(fèi)用在50元以內(nèi),95折收費(fèi),超過100元按90折收費(fèi),超過200元按80折收費(fèi),超過300元,按75折收費(fèi),超過500元以上,一律按70折收費(fèi),售書時(shí),顯示該書存在情況,并顯示收費(fèi)標(biāo)準(zhǔn)及總費(fèi)。n");printf("試設(shè)計(jì)一圖書銷售管理系統(tǒng),使之能提供以下功能:n");printf("(1)系統(tǒng)以菜單方式工作(用鍵盤輸入16之間的數(shù)來選擇功能,其中6為退出)n");printf("(2)圖書信息錄入功能(圖書信息用文件保存)n"

44、);printf("(3)圖書信息整體瀏覽功能(包括書號、書名、作者名、書價(jià)、存在狀態(tài))n");printf("(4)查詢功能:按書號、書名、作者名狀況查詢(至少一種查詢方式)n");printf("(5)圖書的銷售功能:售書時(shí)顯示存在狀態(tài)及收費(fèi)標(biāo)準(zhǔn),為0的不能銷售n");printf("(6)圖書信息的刪除(給定密碼,按書號、書名或作者進(jìn)行刪除,未銷售完的圖書信息不能刪除)n");printf("(7)所有數(shù)據(jù)符合實(shí)際應(yīng)用要求n");printf("題目要求n");prin

45、tf("(1)按分析、設(shè)計(jì)、編碼、調(diào)試和測試的軟件開發(fā)過程完成這個(gè)應(yīng)用程序。n");printf("(2)圖書銷售信息應(yīng)該包括:書號、書名、作者名、書價(jià)、存在狀態(tài)等。n");printf("(3)為各項(xiàng)操作功能設(shè)計(jì)一個(gè)菜單。應(yīng)用程序運(yùn)行后,先顯示這個(gè)菜單,然后用戶通過菜單項(xiàng)選擇希望進(jìn)行的操作項(xiàng)目。n");printf("(4)每個(gè)功能操作中,不應(yīng)有原則性的錯(cuò)誤出現(xiàn);n");printf("(5)對輸入值用測試用例測試,不應(yīng)有錯(cuò)誤出現(xiàn);n");printf("(6)界面應(yīng)友好,操作應(yīng)流暢

46、。n");printf("輸入要求n");printf("應(yīng)用程序運(yùn)行后,在屏幕上顯示一個(gè)菜單。用戶可以根據(jù)需求,選定相應(yīng)的操作項(xiàng)目。進(jìn)入每個(gè)操作后,一般應(yīng)有相應(yīng)的子菜單,或有相應(yīng)的提示信息,根據(jù)提示信息的要求,從鍵盤或文件輸入相應(yīng)的信息。n");printf("輸出要求n");printf("(1)應(yīng)用程序運(yùn)行后,要在屏幕上顯示一個(gè)菜單。n");printf("(2)要求用戶輸入數(shù)據(jù)時(shí),要給出清晰、明確的的提示信息,包括輸入的數(shù)據(jù)內(nèi)容、格式及結(jié)束方式等。n");printf(&quo

47、t;提示n");printf("設(shè)計(jì)一個(gè)結(jié)構(gòu)體類型和一維數(shù)組類型,用來存放圖書信息。n");printf("擴(kuò)展功能n");printf("將所有圖書信息存儲在一個(gè)文件中,并實(shí)現(xiàn)文件讀寫的操作。nn");printf("ttt按任意鍵繼續(xù):");rewind(stdin);/*清空緩沖區(qū)*/getch();/*軟件名稱及開發(fā)者顯示*/void auther()printf("nnnnnnnnnttt 軟件名稱:圖書銷售管理系統(tǒng)nn");printf("ttt 技術(shù)開發(fā):王啟峰

48、nn");printf("ttt 按回任意鍵進(jìn)入系統(tǒng):");getch();/*歡迎界面顯示*/void welcome() system("cls");printf("nntt*歡迎使用圖書銷售管理系統(tǒng)*nn");/*開始導(dǎo)入書庫信息*/void loadrec()FILE *fp;struct book *p7;if(fp=fopen("w.txt","r")=NULL)/*打開文件*/printf("nn文件打開失敗或文件不存在n");printf("

49、;nn按回車鍵繼續(xù):");getchar();return;head=p3=p1=(struct book*)malloc(LEN);/*開辟一個(gè)新單元*/p1->next=NULL;p7=(struct book*)malloc(LEN);/*作為一個(gè)臨時(shí)存儲空間,避免讀取文件最后的回車符*/fscanf(fp,"%s%s%s%f%d",p7->bnum,p7->bname,p7->author,&p7->bpay,&p7->benshu);while(!feof(fp)T+;*p1=*p7;/*文件沒結(jié)束就將

50、p7中的信息給p1*/p2=(struct book*)malloc(LEN);/*繼續(xù)開辟一個(gè)新單元,直到文件讀完*/p1->next=p2;p3=p1;p1=p2;p1->next=NULL;fscanf(fp,"%s%s%s%f%d",p7->bnum,p7->bname,p7->author,&p7->bpay,&p7->benshu);free(p2);p3->next=NULL;/*釋放多申請的一個(gè)單元*/printf("nnttt%d項(xiàng)圖書信息已經(jīng)由系統(tǒng)自動載入.nnttt按任意鍵顯示主

51、菜單:",T);rewind(stdin);/*清空緩沖區(qū)*/getch();if(fclose(fp)printf("文件關(guān)閉失敗!n");exit(0);/*查詢書庫信息*/void search()int choice;p1=head;if(p1=NULL|T=0)/*文件不存在或書庫中沒書*/printf("nnnntttt當(dāng)前書庫沒書!");printf("nntt按任意鍵返回:");rewind(stdin);/*清空緩沖區(qū)*/getch();return;while(1)printf("n *查詢方式

52、*nn");printf("1.通過書號查找nn");printf("2.通過書名查找nn");printf("3.通過作者查找nn");printf("0.退出圖書查詢nn");printf("nn請選擇一種查詢方式(03):");rewind(stdin);/*清空緩沖區(qū)*/scanf("%d",&choice);while(choice<0|choice>3)system("cls");print2();/*調(diào)用顯示查詢方式菜單*/printf("nttt輸入錯(cuò)誤!nn");printf("ttt請重新輸入:");rewind(stdin);/*清空緩沖區(qū)*/scanf("%d",&

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論