版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、HUBEIUNIVERSITY OF AUTOMOTIVE TECHNOLOGYC語言程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告課設(shè)題目: 圖書銷售管理系統(tǒng) 專 業(yè):電氣工程及其自動(dòng)化班 級(jí):KT1223-1姓 名:*成 績(jī):完成日期:2012年12月28日2013年1月11日指導(dǎo)教師:*目錄目錄112495.6圖書信息保存界面:225.7 退出程序:5.8圖書信息新建界面:2323271.課程設(shè)計(jì)目的1) 通過課程設(shè)計(jì),加深對(duì)結(jié)構(gòu)化程序設(shè)計(jì)思想的理解,能對(duì)系統(tǒng)功能進(jìn)行分析,并設(shè)計(jì)合理的模塊化結(jié)構(gòu)。2) 通過課程設(shè)計(jì),進(jìn)一步掌握C語言中重要的數(shù)據(jù)結(jié)構(gòu)。掌握并熟練運(yùn)用指針、鏈表、結(jié)構(gòu)體、文件等數(shù)據(jù)結(jié)構(gòu)。3) 通過課程
2、設(shè)計(jì),提高程序開發(fā)能力,能運(yùn)用合理的控制流編寫清晰高效的程序。4) 通過課程設(shè)計(jì),培養(yǎng)C語言知識(shí)運(yùn)用和自學(xué)能力,真正的把課堂上獲得的知識(shí)運(yùn)用起來,培養(yǎng)自己對(duì)程序編寫的興趣,并能獨(dú)立設(shè)計(jì)和實(shí)現(xiàn)一個(gè)小型系統(tǒng)。5) 通過課程設(shè)計(jì),加強(qiáng)了自己的程序分析能力。要求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è)試C程序等過程。3) 學(xué)會(huì)利用數(shù)組、結(jié)構(gòu)體、鏈表進(jìn)行相關(guān)信息表示。4) 功能模塊劃分清晰,系統(tǒng)結(jié)構(gòu)圖符合功能操作要求,且有詳盡的功能描述5)
3、 各主要功能模塊有詳盡的流程圖及描述,用函數(shù)的形式實(shí)現(xiàn),且調(diào)用入口、功能、出口等關(guān)系正確。6) 所設(shè)計(jì)的C程序較好的可讀性和可靠性;程序書寫風(fēng)格規(guī)范,注釋清晰。7) 界面友好(良好的人機(jī)互交),凡需要輸入信息時(shí),都有較詳盡的提示信息,并對(duì)輸入信息有較完善的值域分析。8) 程序經(jīng)上機(jī)調(diào)試通過,不應(yīng)出現(xiàn)語法型、功能型錯(cuò)誤,并獲得滿意的結(jié)果。9) 學(xué)會(huì)通過各功能性測(cè)試用例測(cè)試程序的能力,盡可能避免原則性錯(cuò)誤的出現(xiàn)。10) 掌握編寫、調(diào)試和測(cè)試C語言程序的基本技巧,充分理解結(jié)構(gòu)化程序設(shè)計(jì)的基本方法。11) C語言課程設(shè)計(jì)報(bào)告的內(nèi)容反應(yīng)實(shí)際設(shè)計(jì)過程,且符合格式要求,無抄襲現(xiàn)象。描述此系統(tǒng)以圖書銷售為背景
4、,支持書店管理人員對(duì)圖書信息進(jìn)行新建、查詢、整體列表瀏覽、刪除(需要密碼),同時(shí)也支持圖書購(gòu)買者進(jìn)行圖書信息的查詢。圖書信息從文件中載入,當(dāng)圖書信息變動(dòng)過時(shí),亦可實(shí)現(xiàn)保存。具體功能實(shí)現(xiàn)如下:1)圖書信息載入:系統(tǒng)自動(dòng)從文件中讀入書庫信息,以便操作者可以實(shí)現(xiàn)相關(guān)需求。2)新建功能:當(dāng)書庫進(jìn)了不同的新書回來時(shí),可通過此功能將新書加入書庫。3)圖書信息整體瀏覽功能:實(shí)現(xiàn)對(duì)書庫信息的整體瀏覽,使書庫管理人員對(duì)書庫信息有一個(gè)整體的了解。4)圖書信息查詢功能:實(shí)現(xiàn)對(duì)圖書按書號(hào)、書名或作者名進(jìn)行查詢。5)圖書信息刪除功能:實(shí)現(xiàn)對(duì)已賣完的圖書進(jìn)行清理。6)修改密碼功能:書店管理人員可以擁有密碼,進(jìn)行圖書刪除。
5、通過修改密碼,確保書庫信息安全1) WindowsXP/7系統(tǒng)2)C語言本系統(tǒng)的功能模塊如圖1所示,主要有以下模塊:圖書信息整體瀏覽自動(dòng)導(dǎo)入書庫信息修改密碼圖書信息保存圖書信息刪除退出程序銷售圖書課程名稱界面主菜單界面程序歡迎界面圖書信息查詢圖書信息新建按書號(hào)刪除按書號(hào)刪除退出刪除按書名刪除按書名查詢退出查詢按書號(hào)查詢按書號(hào)查詢按書號(hào)查詢圖1系統(tǒng)功能模塊圖1) 課程名稱界面:構(gòu)造函數(shù)void auther(),實(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)主菜單的
6、顯示。4) 圖書信息自動(dòng)導(dǎo)入:構(gòu)造函數(shù)void loadrec(),實(shí)現(xiàn)系統(tǒng)自動(dòng)導(dǎo)入圖書信息。5) 圖書信息新建:構(gòu)造函數(shù)voidcreate(),實(shí)現(xiàn)新建圖書信息。6) 圖書信息查詢:構(gòu)造函數(shù)void search(),實(shí)現(xiàn)查詢界面的顯示。并通過對(duì)按按書號(hào)查詢函數(shù)search_by_bnum、按書名查找函數(shù)search_by_bname、按作者查找函數(shù)search_by_author的調(diào)用,實(shí)現(xiàn)對(duì)圖書信息的查詢。7) 圖書信息整體瀏覽:構(gòu)造函數(shù)void list(),顯示當(dāng)前書庫所有書的信息。8) 圖書銷售:構(gòu)造函數(shù)void buy(),實(shí)現(xiàn)通過書號(hào)購(gòu)書,并可調(diào)用查詢功能,實(shí)現(xiàn)從其他途徑找到
7、書號(hào)。9) 圖書信息刪除:構(gòu)造函數(shù)void delet(),實(shí)現(xiàn)對(duì)已售完的圖書進(jìn)行清理,并通過對(duì)按書號(hào)刪除函數(shù)delet _by_bnum、按書名刪除函數(shù)delet _by_bname、按作者刪除函數(shù)delet _by_author的調(diào)用,實(shí)現(xiàn)對(duì)圖書信息的刪除。10) 圖書信息保存:構(gòu)造函數(shù)void save(),實(shí)現(xiàn)對(duì)圖書信息變動(dòng)后的保存。11) 修改密碼:構(gòu)造函數(shù)void redef(),實(shí)現(xiàn)修改密碼。12) 退出系統(tǒng):構(gòu)造函數(shù)void exit0(),實(shí)現(xiàn)退出系統(tǒng)。根據(jù)系統(tǒng)要求,系統(tǒng)中需要保存的數(shù)據(jù)信息,其結(jié)構(gòu)如下:數(shù)據(jù)項(xiàng)名稱數(shù)據(jù)項(xiàng)系統(tǒng)表示數(shù)據(jù)類型數(shù)據(jù)長(zhǎng)度備注書號(hào)bnumchar21書名
8、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的結(jié)構(gòu)體,其成員為圖書的基本信息。然后通過對(duì)指針、鏈表、文件等數(shù)據(jù)結(jié)構(gòu)的操作,實(shí)現(xiàn)對(duì)圖書信息信息的載入、新建、查詢、整體瀏覽、刪除、保存,銷售圖書入,等一系列操作。其中,結(jié)構(gòu)體定義如下:struct book char bn
9、um21;char bname41;char author11;floatbpay; int benshu;struct book *next; ;1) 所有函數(shù)模塊聲明如下:void auther();/*顯示課程名稱*/void welcome();/*顯示歡迎界面*/void menu();/*主菜單函數(shù),顯示主菜單,并返回用戶的選擇*/void loadrec();/*自動(dòng)導(dǎo)入書庫信息*/void create();/*新建圖書信息*/void list();/*圖書信息整體瀏覽*/void bpay();/*銷售圖書*/void delet();/*刪除已售完的圖書信息*/void
10、delet_by_bnum();/*通過書號(hào)刪除*/void delet_by_bname();/*通過書名刪除*/void delet_by_author();/*通過作者刪除*/void search();/*查詢書存在狀態(tài)*/void search_by_bnum();/*通過書號(hào)查詢*/void search_by_bname();/*通過書名查詢*/void search_by_author();/*通過作者查詢*/void save();/*保存記錄*/void redef();/*修改密碼*/void exit0();/*退出*/2) 并定義14個(gè)全局變量:int save_fl
11、ag=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)志*/int T=0;/*記錄導(dǎo)入的書本數(shù)*/char mima11="123456"/*初始密碼*/3) 主要模塊的實(shí)現(xiàn)系統(tǒng)以主函數(shù)int main()為入口,首先通過調(diào)用void author()顯示軟件名稱及技術(shù)開發(fā)者、調(diào)用vo
12、id welcome()顯示歡迎界面,再調(diào)用loadrec()函數(shù)導(dǎo)入書庫信息,然后通過switch(menu(),顯示主菜單,并利用int menu()接受用戶的返回值返回個(gè)主函數(shù),再調(diào)用相關(guān)的函數(shù)進(jìn)入到下一級(jí)菜單進(jìn)行相關(guān)操作。4.3 以下是幾個(gè)主要模塊的流程圖:1) 主函數(shù):主函數(shù)調(diào)用void auther()、void welcome()、void loadrec()調(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é)束申請(qǐng)一個(gè)空間是否成功打開文件
13、YNNY圖3 信息瀏覽流程圖需要修改的學(xué)生學(xué)號(hào)是否存在修改界面是選擇修改內(nèi)容實(shí)現(xiàn)修改回主菜單圖3 導(dǎo)入書庫信息函數(shù)流程圖通過書號(hào)刪除通過書號(hào)刪除通過書號(hào)刪除選擇一種刪除方式n +是否正確重新輸入是否正確輸入密碼是否繼續(xù)刪除結(jié)束是否顯示已售完書是否繼續(xù)刪除刪除不能刪除是否售完提示不存在是否存在按選擇的刪除方式輸入3) 刪除圖書信息函數(shù):結(jié)束Yn>2YNNNYYNYYNYN圖4 刪除圖書信息函數(shù)流程圖4) 銷售圖書:申請(qǐng)一個(gè)空間顯示已購(gòu)圖書重新輸入書號(hào)將信息放入空間是否售完是否存在輸入書號(hào)申請(qǐng)一個(gè)空間是否為0提示售完顯示收費(fèi)是否調(diào)用查詢撤銷購(gòu)買是否確認(rèn)購(gòu)買是否結(jié)束購(gòu)書N Y Y NNY N
14、YN Y圖5銷售(購(gòu)買)圖書函數(shù)流程圖5.1主菜單界面:圖6主菜單界面輸入功能選擇,系統(tǒng)自動(dòng)進(jìn)入相應(yīng)功能界面。圖信息查找界面:圖7 圖書信息查找界面輸入選擇進(jìn)入相應(yīng)查詢方式圖8進(jìn)入書號(hào)查詢界面也可選其他選項(xiàng)進(jìn)入相應(yīng)查詢界面圖9通過書號(hào)查詢輸入書號(hào)錯(cuò)誤,按回車又返回查詢菜單圖10通過書號(hào)查找結(jié)果顯示一本書只有一個(gè)書號(hào)圖11通過書名查找結(jié)果顯示同種書名的書可以有多本界面:圖12圖書銷售界面默認(rèn)操作者知道書號(hào)圖13書號(hào)輸入有誤不知道書號(hào)可以選擇Y調(diào)用查詢功能通過其他方式找到所要購(gòu)買的書的書圖14通過書名查找后界面調(diào)用查詢后可以查到你要購(gòu)買的書的書號(hào)圖15通過調(diào)用查詢購(gòu)買了圖書界面此時(shí)可按N結(jié)束購(gòu)書,
15、按任意鍵繼續(xù)購(gòu)書圖16不調(diào)用查詢圖17購(gòu)買圖書界面通過書作者找到了想要的圖書圖18圖書購(gòu)買后,已購(gòu)圖書顯示界面圖19確認(rèn)購(gòu)買界面圖20購(gòu)買成功此時(shí)確認(rèn)了購(gòu)買界面:圖21圖書信息整體瀏覽5.5圖書信息刪除界面:圖22圖書信息刪除界面圖23密碼錯(cuò)誤界面有3次輸密碼的機(jī)會(huì),防止惡意試密碼圖24密碼多次錯(cuò)誤界面此時(shí)按回車會(huì)返回到主菜單圖25圖書刪除界面此時(shí)是密碼真確后進(jìn)入備注:接下來選擇相應(yīng)刪除方式進(jìn)入圖書刪除后和圖書購(gòu)買操作相似,同樣可以調(diào)用其它函數(shù)(已售完圖書顯示函數(shù))以方便刪除,在此就不在重復(fù)操作演示。5.6圖書信息保存界面:圖26圖書信息保存界面此時(shí)是圖書信息變動(dòng)過圖27重復(fù)保存界面圖書信息未
16、變動(dòng)時(shí)進(jìn)入保存也是此界面界面:圖28退出程序界面此時(shí)圖書信息變動(dòng)過,未變動(dòng)時(shí)直接結(jié)束程序5.8圖書信息新建界面:(略)備注:圖書信息新建功能為附加的功能,程序本身沒有要求要有此項(xiàng)功能,在此就不演示。5.9修改密碼界面:(略)備注:修改密碼功能為附加的功能,程序本身沒有要求要有此項(xiàng)功能,在此就不演示。(1) 各模塊分別調(diào)試過程及結(jié)果。(1)程序歡迎界面和程序名稱界面做起來比較容易,沒有出錯(cuò)。題目顯示是老師臨時(shí)加的一個(gè)要求,做起來也沒出錯(cuò)。(2)主菜單界面我是按照老師給的一個(gè)參考程序做的,后來自己又優(yōu)化了一下,沒有出問題。(3)書庫信息導(dǎo)入函數(shù)void loadrec()。書庫信息導(dǎo)入到程序中,我
17、是用的鏈表。最難得地方就是建立鏈表,剛開始時(shí),我用兩個(gè)指針進(jìn)行操作。但是存儲(chǔ)空間必須剛開始就要申請(qǐng)一個(gè),然后根據(jù)文件中的數(shù)據(jù),進(jìn)行循環(huán),動(dòng)態(tài)申請(qǐng)。這樣就會(huì)多出一個(gè)結(jié)點(diǎn),當(dāng)最后釋放這個(gè)節(jié)點(diǎn)時(shí),兩個(gè)指針就操作不了。后來參考老師的程序,用三個(gè)指針,很順利的就解決了。如果文件打開失敗的話,釋放結(jié)點(diǎn)就會(huì)出錯(cuò)。比如我的程序(導(dǎo)入書庫信息) 中的p3->next=NULL,因?yàn)槲募蜷_失敗,這樣就不會(huì)進(jìn)入動(dòng)態(tài)申請(qǐng)存儲(chǔ)空間,這樣p3->next=NULL就會(huì)沒有意義。解決辦法:進(jìn)入導(dǎo)入書庫函數(shù)(void loadrec)時(shí),執(zhí)行p3=head.即使p3有所指向,就可以解決。(4)查詢函數(shù)void
18、search()。通過書號(hào)查詢時(shí)實(shí)現(xiàn)比較容易,找不到時(shí)就直接顯示找不到,找到就輸出,因?yàn)橐粋€(gè)書號(hào)只會(huì)對(duì)應(yīng)一本書,循環(huán)好做。而通過書名和作者查詢時(shí),可以有多本同名的書或有多本同作者的書。這時(shí),就需要先做一個(gè)循環(huán),看操作者要查詢的書名或作者是否存在,若在,就再弄一個(gè)循環(huán),從剛才找到的結(jié)點(diǎn)后面再開始查找,將與剛才找到的結(jié)點(diǎn)相同的信息的結(jié)點(diǎn)再輸出,直到結(jié)點(diǎn)全部檢查完。(5)圖書銷售函數(shù)void buy(),為了購(gòu)買(任何操作者對(duì)管理系統(tǒng)來說都是圖書購(gòu)買者)圖書操作簡(jiǎn)便,我將程序限定在只能通過書號(hào)來購(gòu)買圖書,因?yàn)橐粋€(gè)書號(hào)只會(huì)對(duì)應(yīng)一本書。但這樣就會(huì)產(chǎn)生一個(gè)問題,如果購(gòu)買者不知道書號(hào),但知道書名或作者,那他
19、就購(gòu)買不成圖書了。解決辦法:程序首先默認(rèn)購(gòu)買者知道書號(hào),當(dāng)沒有找到購(gòu)買者所找的書號(hào)時(shí),程序就會(huì)提示,是否要調(diào)用查詢功能,當(dāng)執(zhí)行調(diào)用時(shí),購(gòu)買者就可以根據(jù)自己知道的圖書信息(書名或作者),選擇相應(yīng)的查詢渠道,這樣購(gòu)買者就可以查看自己要找的書在不在,若在,就可以看著列表信息,重新輸入書號(hào)進(jìn)行購(gòu)買,這樣就間接支持了多渠道購(gòu)買。為了滿足多次購(gòu)買,我用了一個(gè)循環(huán),當(dāng)購(gòu)買者想結(jié)束購(gòu)買時(shí),執(zhí)行相應(yīng)按鍵,才可結(jié)束購(gòu)買。當(dāng)在最后結(jié)束購(gòu)買時(shí),程序也會(huì)提示購(gòu)買者是否確認(rèn)購(gòu)買,此時(shí)亦可確認(rèn),也可撤銷,這樣就比較符合實(shí)際要就和人性化。(6)圖書信息整體瀏覽函數(shù)void list(),實(shí)現(xiàn)起來較簡(jiǎn)單,直接輸出結(jié)點(diǎn),直至結(jié)束
20、。(7)圖書信息刪除函數(shù)void delet(),進(jìn)入圖書刪除需要密碼,沒有密碼者不能進(jìn)行刪除操作,為了防止有人惡意試密碼,程序限制了密碼輸入次數(shù),超過了3次,程序就會(huì)返回到主菜單。程序要求支持通過書號(hào)、書名、作者,三種刪除方式,沒賣完的書不能刪除。通過書號(hào)刪除時(shí)實(shí)現(xiàn)起來比較簡(jiǎn)單,而通過書名和作者刪除就很麻煩,因?yàn)橥粋€(gè)書名或作者的書可以有多本,而這多本里面可能一部份已盡賣完,有些又沒賣完,要?jiǎng)h除的結(jié)點(diǎn)還可能不止一個(gè)。為了解決這個(gè)問題,在通過書號(hào)刪除時(shí),我通過while()循環(huán),找到要?jiǎng)h除的圖書書號(hào),找到該結(jié)點(diǎn)直接刪除,但是通過書名和作者刪除時(shí),這種方式就行不通了,由于再刪除過程中需要判斷要?jiǎng)h
21、除的結(jié)點(diǎn)的位置,這樣就不能同時(shí)刪除已售完的多本同書名或作者的書。于是再通過書名和作者刪除時(shí),我先創(chuàng)建一個(gè)鏈表,將滿足刪除要求的圖書儲(chǔ)存在一起,然后將做一個(gè)循環(huán)判斷,將書庫中與該鏈表儲(chǔ)存的相同的圖書(信息)一個(gè)個(gè)刪除(刪除方式同通過書號(hào)刪除),直至該鏈表中的結(jié)點(diǎn)走完。這種方式實(shí)現(xiàn)起來簡(jiǎn)單,但比較耗費(fèi)程序運(yùn)行的速度,解決思路不容易想到。再刪除過程中,為了便于刪除,防止操作者不知道有哪些書已經(jīng)賣完,程序可以調(diào)用函數(shù)void bover(),顯示已經(jīng)售完的書,看著列表信息進(jìn)行刪除。(8)保存記錄函數(shù)void save(),實(shí)現(xiàn)比較簡(jiǎn)單。(9)退出void exit0(),退出時(shí),為了防止操作者忘記保存
22、記錄,在退出程序時(shí),程序會(huì)提醒操作者是否需要保存,這時(shí)操作者可以以選擇保存或不保存,這樣在操作者操作失誤時(shí),在退出時(shí),也避免了強(qiáng)制保存。(10)新建書庫信息函數(shù)和修改密碼函數(shù),題目并未作要求,在此就不再介紹。(2) 集成調(diào)試過程及結(jié)果。在各模塊協(xié)調(diào)操作時(shí),幾乎各個(gè)功能模塊都需要得到頭指針(head),為此我將保存導(dǎo)入書庫信息的鏈表中需要用到的指針定義成全局的,這樣便于操作,可防止頭指針傳錯(cuò)。為了使在退出和記錄保存函數(shù)中,在不同的情況下給出不同的提示信息,我定義了一個(gè)標(biāo)志性全局變量int save_flag=0;/*信息變動(dòng)標(biāo)志*/。在可使書庫信息變動(dòng)的函數(shù)中,當(dāng)書庫信息變動(dòng)成功時(shí),就執(zhí)行sav
23、e_flag=1,這樣在退出或保存過程中就知道書庫信息是否變動(dòng)過,以便實(shí)現(xiàn)相應(yīng)功能。在購(gòu)書過程中,為了間接支持多渠道購(gòu)書,可以調(diào)用查詢函數(shù)void search(),在主菜單中也可執(zhí)行查詢功能,但是在這兩種調(diào)用過程中,要求卻不是一樣的,在購(gòu)書函數(shù)中調(diào)用時(shí),查詢功能是分次調(diào)用的,不能連續(xù)執(zhí)行查詢,而且顯示的查詢信息是不能清屏的,因?yàn)椴僮髡咝枰粗樵兊玫降牧斜硇畔⑤斎霑?hào)。在主函數(shù)中執(zhí)行此項(xiàng)功能時(shí),是要支持連續(xù)查詢的,而且需要清屏上次執(zhí)行查詢時(shí)顯示的信息。為了實(shí)現(xiàn)這個(gè)要求我定義了一個(gè)全局變量int buy_flag=0,在菜單中執(zhí)行查詢時(shí),首先執(zhí)行buy_flag=0,在購(gòu)買圖書函數(shù)中調(diào)用查詢功
24、能時(shí),首先執(zhí)行buy_flag=buy_flag的值,在查詢功能中實(shí)現(xiàn)相應(yīng)功能。在刪除圖書時(shí),在要?jiǎng)h除的圖書信息沒找到時(shí),程序會(huì)提醒操作者,是否要顯示已售完的圖書void bover(),在調(diào)用void bover()后,操作者可以看著列表圖書信息進(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é)合這些全局變量會(huì)使界面變得更流暢和美觀。密碼我將其定義成全局變量,
25、這樣當(dāng)我修改密碼(題目未作要求,是我自己加的)時(shí),進(jìn)行刪除操作的密碼就會(huì)跟著改變。導(dǎo)入書庫信息時(shí),程序讀文件時(shí)會(huì)將下一行的回車符讀進(jìn)來,這樣就會(huì)出現(xiàn)亂碼。如果我刪掉文件中的最后一個(gè)回車符,導(dǎo)入和整體瀏覽圖書信息會(huì)正常,但是當(dāng)我執(zhí)行新建圖書信息(題目為做要就,是我自己加的)或者圖信息變動(dòng)過后,保存信息時(shí),文件自身又會(huì)在數(shù)據(jù)最后加上一個(gè)回車符,后來我上網(wǎng)搜到資料,弄懂了是咋回事。我們一般讀取文件方式:head =p3=p1=(struct book*)malloc(LEN);/*開辟一個(gè)新單元*/p1->next=NULL;while(!feof(fp)n+;fscanf(fp,"
26、%s%s%s%f%d",p1->bnum,p1->bname,p1->author,&p1->bpay,&p1->benshu);p2=(struct book*)malloc(LEN);/*繼續(xù)開辟一個(gè)新單元,直到文件讀完*/p1->next=p2;p3=p1;p1=p2;p1->next=NULL;free(p2);p3->next=NULL;/*釋放多申請(qǐng)的一個(gè)單元*/這樣,當(dāng)fscanf讀到最后一個(gè)回車符時(shí),發(fā)現(xiàn)文件結(jié)束,但這時(shí),信息已經(jīng)讀入。真確讀取:head=p3=p1=(struct book*)mallo
27、c(LEN);/*開辟一個(gè)新單元*/p1->next=NULL;p7=(struct book*)malloc(LEN);fscanf(fp,"%s%s%s%f%d",p7->bnum,p7->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(f
28、p,"%s%s%s%f%d",p7->bnum,p7->bname,p7->author,&p7->bpay,&p7->benshu);free(p2);p3->next=NULL;/*釋放多申請(qǐng)的一個(gè)單元*/利用中間的一個(gè)變量p7做一個(gè)臨時(shí)存儲(chǔ)空間,文件沒結(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ù)后,對(duì)
29、比文件,看文件是否按程序操作的結(jié)果,正確改變了。將文件刪除,看程序是否會(huì)給出正確提示,并且限制某些沒有文件不能實(shí)現(xiàn)的功能。將文件置空,看是否會(huì)給出相應(yīng)提示以及程序是否運(yùn)行正常。各模塊測(cè)試用例數(shù)據(jù)及結(jié)果顯示結(jié)果一致(圖書整體瀏覽函數(shù))與文件結(jié)果一致(圖書查詢函數(shù))通過書名查找結(jié)果調(diào)用查詢功能購(gòu)買圖書購(gòu)買成功后與前面文件內(nèi)容對(duì)比,確實(shí)少了一題本(鬼谷子)通過書名刪除刪除成功后與前面的文件對(duì)比,顯示確實(shí)刪除了測(cè)試中出現(xiàn)的問題的原因和分析在測(cè)試數(shù)據(jù)過程中,若發(fā)現(xiàn)測(cè)試結(jié)果與文件中結(jié)果不相符檢查在執(zhí)行相關(guān)操作后,是否確認(rèn)了該操作,比如在購(gòu)書過程中,最后你是否確認(rèn)了購(gòu)買。檢查在退出程序時(shí)是否保存了修改記錄。
30、檢查文件是否一直沒關(guān)過,因?yàn)樾畔⒆儎?dòng)后,文件如果一直沒關(guān),文件中顯示的依舊是操作前的結(jié)果。(1) 需求分析中存在的問題和分析:該程序不支持插入新圖書,不支持統(tǒng)計(jì)銷售收入,不支持修改圖書信息,與實(shí)際不符。程序最后我雖然加了一個(gè)圖書信息新建功能和修改密碼功能,但圖書新建功能,不能完全識(shí)別操作者輸入的錯(cuò)誤信息。(2) 概要設(shè)計(jì)中存在的問題和分析:全局標(biāo)志性變量用的太多,在主體函數(shù)中定義變量時(shí),容易與全局標(biāo)志性產(chǎn)生混淆。全局指針也用的太多,雖然這樣避免了傳指針出錯(cuò),但沒有鍛煉我們傳參數(shù)的能力。(3) 詳細(xì)設(shè)計(jì)中存在的問題和分析:在圖書購(gòu)買過程中,不能夠直接支持通過書名和作者購(gòu)買圖書,而且也不支持一次性
31、購(gòu)買多本,購(gòu)買多本只能通過連續(xù)購(gòu)買。(4) 代碼編制中存在的問題和分析:由于程序中用了較多的循環(huán)和判斷,花括?。?)較多,容易缺少或多出花括弧。ALT+F8不僅能將代碼自動(dòng)整理成微軟的cpp文件格式,而且它還是檢查花括弧是否缺少或多出的有力工具。(5) 調(diào)試和測(cè)試中存在的問題和分析:在編寫程序代碼是,要注意全局變量和局部變量,防止二者混淆。當(dāng)文件打開失敗時(shí)要注意指針是否還有確定的指向,比喻在導(dǎo)入書庫信息函數(shù)void loadrec()中,當(dāng)文件打開失敗時(shí),p3->next=NUU就沒有意義,在這之前就需要為p3申請(qǐng)一個(gè)空間。課設(shè)題目有些地方自相矛盾(不是我的題目),建議老師能花點(diǎn)時(shí)間將課
32、設(shè)題目中有些不合理的地方改正一下。時(shí)間安排上,剛開始時(shí)覺得很不合理,因?yàn)橛锌荚嚕挠袝r(shí)間做課設(shè),但后來就發(fā)現(xiàn)這樣很好,因?yàn)槲覀兛梢月?,有時(shí)間考慮程序中的問題,避免抄襲,對(duì)自己的編程能力的提高有好處,因?yàn)樗械亩际亲约簩懙?。建議以后也這樣。剛開始準(zhǔn)備編代碼時(shí),感覺很茫然,不知道從何寫起。后來先看懂老師的程序,沒事時(shí)就時(shí)不時(shí)的想一下自己的課設(shè)題目。經(jīng)過一兩天的思考,整個(gè)課設(shè)的框架基本建好了,現(xiàn)在感覺其實(shí)做課設(shè)最難的地方就是基本框架的建立,只要建好了基本框架,動(dòng)起手來就會(huì)發(fā)現(xiàn)其實(shí)課設(shè)不是非常困難。做完課設(shè)學(xué)到了很多編程方面的技巧,比喻在編寫程序時(shí),不要將整個(gè)程序放在一起檢查語法錯(cuò)誤,那樣非常難操
33、作,可以保留主函數(shù),然后將主體函數(shù)一個(gè)個(gè)的檢查錯(cuò)誤,這樣便于錯(cuò)誤的查找和改正。以前見到一大堆的語法錯(cuò)誤,就頭痛,總是想放棄,其實(shí)有時(shí)候就一個(gè)地方出了一點(diǎn)小錯(cuò),現(xiàn)在檢查邏輯錯(cuò)誤的能力也比以前有提高,以前遇到錯(cuò)誤找了一會(huì)找不出來就不想找了,最主要的原因是以前沒有毅力,并不是自己找不出錯(cuò)誤。全局變量的巧妙運(yùn)用會(huì)給程序減少不少麻煩,對(duì)全局變量的運(yùn)用也是這次課設(shè)的一大收獲。這次還學(xué)到了一些課外知識(shí),比喻getch(),goto,continue,(int a ;if(a=getch()=27)(按【Esc】可以退出循環(huán)),的運(yùn)用,還有讀文件時(shí)應(yīng)注意的一些問題等。這些老師在課堂上沒提過或提及較少的東西在這
34、次課設(shè)中基本上都掌握了。課設(shè)將這半年學(xué)的東西串聯(lián)了起來,是對(duì)這半年來學(xué)的C語言的一個(gè)總結(jié)。很多東西別人講,你聽懂了是一回事,但自己做出來又是一回事,只有通過自己做出來了,才算是真正的學(xué)會(huì)了,課設(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
35、;/*書號(hào)*/char bname 41;/*書名*/char author 21;/*作者*/float bpay;/*書價(jià)*/int benshu;/*書存在本數(shù)*/struct book *next;/*函數(shù)聲明*/void loadrec();/*自動(dòng)讀入書庫信息*/void create();/*新建書庫*/void search();/*查詢書存在狀態(tài)*/void search_by_bnum();/*通過書號(hào)查詢*/void search_by_bname();/*通過書名查詢*/void search_by_author();/*通過作者查詢*/void auther();/*
36、軟件名稱及開發(fā)者顯示*/void welcome();/*歡迎界面顯示*/void buy();/*購(gòu)買書籍*/void list();/*列出書庫信息*/void delet();/*刪除書目*/void delet_by_bnum();/*通過書號(hào)刪除*/void delet_by_bname();/*通過書名刪除*/void delet_by_author();/*通過作者刪除*/void save();/*保存記錄*/void redef();/*修改密碼*/void bover();/*顯示已售完的書*/void exit0();/*退出*/int menu();/*主菜單*/voi
37、d jianjie();/*程序要求簡(jiǎn)介*/void print2();/*顯示查詢菜單*/void print3();/*顯示刪除菜單*/struct book *head=NULL,*head2=NULL;/*head和head2分別用于書庫的頭指針和已購(gòu)書的頭指針*/struct book *p1,*p2,*p3,*p4,*p5,*p6;/*p1、p2、p3用于操作書庫圖書,p4、p5、p6用于操作已購(gòu)書*/int save_flag=0;/*圖書信息變動(dòng)標(biāo)志*/int buy_flag=0;/*買書時(shí),是否調(diào)用過查詢功能標(biāo)志*/int shan_flag=0;/*刪書時(shí),是否調(diào)用過顯示
38、已售完書功能標(biāo)志*/int T=0;/*記錄導(dǎo)入的書本數(shù)*/char mima11="123456"/*初始密碼*/*主函數(shù)*/int main()auther();/*軟件名稱及開發(fā)者顯示*/welcome();/*歡迎界面顯示*/loadrec();/*自動(dòng)導(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")
39、;list();break;case 4:system("cls");delet();break;case 5:system("cls");save();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
40、("n選擇錯(cuò)誤,請(qǐng)按主菜單提示輸入您的正確選擇(08)n");printf("按任意鍵返回繼續(xù):");rewind(stdin);/*清空緩沖區(qū)*/getch();return 0;/*菜單*/int menu()int choice;system("cls");printf("n *主菜單*nn");printf("1.查詢圖書信息nn");printf("2.購(gòu)買圖書nn");printf("3.列出圖書信息nn");printf("4.刪除
41、圖書nn");printf("5.保存記錄nn");printf("6.新建書庫nn");printf("7.修改密碼nn");printf("8.程序要求簡(jiǎn)介nn");printf("0.退出nnn");printf("請(qǐng)輸入您的選擇(08):");rewind(stdin);/*清空緩沖區(qū)*/scanf("%d",&choice);return choice;/*返回用戶的選擇*/*程序要求簡(jiǎn)介*/void jianjie()printf("tttt程序要求簡(jiǎn)介:");printf("n20.圖書銷售管理系統(tǒng)");printf("題目描述n");printf("圖書租借信息包括:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- .7市場(chǎng)部培訓(xùn)紫琪爾項(xiàng)目
- 2025年全球及中國(guó)無人機(jī)測(cè)量軟件行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)珍珠奶茶配料行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)電信行業(yè)CRM軟件行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)便攜式四合一氣體檢測(cè)儀行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)塑料輔助設(shè)備行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球機(jī)器人滾珠絲杠行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)一次性發(fā)熱暖袋行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)金屬箔電流傳感貼片電阻行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球貓咪吹風(fēng)機(jī)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2024-2025學(xué)年廣東省深圳市南山區(qū)監(jiān)測(cè)數(shù)學(xué)三年級(jí)第一學(xué)期期末學(xué)業(yè)水平測(cè)試試題含解析
- 廣東2024年廣東金融學(xué)院招聘專職輔導(dǎo)員9人筆試歷年典型考點(diǎn)(頻考版試卷)附帶答案詳解
- DB31∕731-2020 船舶修正總噸單位產(chǎn)品能源消耗限額
- 2024年衛(wèi)生專業(yè)技術(shù)資格考試衛(wèi)生檢驗(yàn)技術(shù)(初級(jí)(師)211)相關(guān)專業(yè)知識(shí)試題及答案指導(dǎo)
- 《手衛(wèi)生知識(shí)培訓(xùn)》培訓(xùn)課件
- 江蘇省南京鼓樓區(qū)2024年中考聯(lián)考英語試題含答案
- 兒科護(hù)理學(xué)試題及答案解析-神經(jīng)系統(tǒng)疾病患兒的護(hù)理(二)
- 15篇文章包含英語四級(jí)所有詞匯
- 王陽明心學(xué)完整版本
- 四年級(jí)上冊(cè)豎式計(jì)算300題及答案
- 《智能投顧 大數(shù)據(jù)智能驅(qū)動(dòng)投顧創(chuàng)新》讀書筆記思維導(dǎo)圖
評(píng)論
0/150
提交評(píng)論