版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 課程報告任務(wù)書</b></p><p><b> 成績評定教師: </b></p><p> 題 目圖書信息管理系統(tǒng)</p><p> 主要內(nèi)容開發(fā)一個圖書信息管理系統(tǒng),圖書信息包括:圖書編號、書名、作者、出版社、類別、出版時間、價格等基本信息(也可以根據(jù)自己情況進(jìn)行擴(kuò)充,比如是否借出、庫
2、存量等)。使之能提供以下基本功能:(1)圖書信息錄入功能(圖書信息用文件保存)--輸入(2)圖書信息瀏覽功能--輸出(3)查詢功能(至少一種查詢方式)、排序功能(至少一種排序方式): ①按書名查詢 ②按作者名查詢 ③ 按照價錢排序 ④按出版時間排序等等(4)圖書信息的刪除與修改擴(kuò)展功能:可以按照自己的程度進(jìn)行擴(kuò)展。比如(1)簡單的權(quán)限處理 (2)報表打印功能(3)甚至根據(jù)自己情況,可以加上學(xué)生信息,并擴(kuò)充為圖書借閱系統(tǒng)。(4)模糊查詢
3、 (5)綜合查詢 (6)統(tǒng)計(jì)功能 比如統(tǒng)計(jì)處某一類別的圖書信息 或 篩選出小于指定數(shù)量庫存的圖書信息等等,總之,可以根據(jù)自己需求進(jìn)行分析功能。</p><p> 任務(wù)要求一、提交材料應(yīng)包括:(1)系統(tǒng)源代碼 (2)課程報告二、整個設(shè)計(jì)過程具體要求(1)需求分析 要求學(xué)生對案例系統(tǒng)進(jìn)行分析,設(shè)計(jì)出需要完成的功能,完善各個模塊的調(diào)用關(guān)系;(2)設(shè)計(jì)過程 要求學(xué)生進(jìn)一步明確各模塊調(diào)用關(guān)系,進(jìn)一步完善模塊函數(shù)細(xì)節(jié)
4、(函數(shù)名、參數(shù)、返回值等)(3)實(shí)現(xiàn)過程 要求學(xué)生養(yǎng)成良好的編碼習(xí)慣、完成各個模塊并進(jìn)行測試,最終完成系統(tǒng)整體測試;(4)總結(jié)階段 按照要求完成系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)報告,并進(jìn)行總結(jié)、答辯。</p><p> 成績評定報告撰寫情況(30分)系統(tǒng)完成情況(30分)答辯情況(40分)總分</p><p> 內(nèi)容20分規(guī)范程度5分程序測試5分基本功能20分?jǐn)U展功能10分自述情況10分答辯情況30
5、分</p><p><b> 1 需求分析</b></p><p> 經(jīng)過大一上學(xué)期的理論學(xué)習(xí),在基礎(chǔ)實(shí)驗(yàn)的基礎(chǔ)上,本學(xué)期我們繼續(xù)開設(shè)了C語言程序設(shè)計(jì)實(shí)踐課。課程要求我們對已經(jīng)學(xué)習(xí)的基礎(chǔ)實(shí)驗(yàn)進(jìn)行整合與銜接處理,并最終形成一個系統(tǒng)性質(zhì)的規(guī)模較大的程序。</p><p> 本次課程設(shè)計(jì)要求我們達(dá)到能獨(dú)立完成一個圖書管理系統(tǒng),完成后要求實(shí)現(xiàn)的功
6、能有對圖書信息的錄入、刪除、修改,瀏覽(即輸出), 按某種方式查詢(要求至少一種查詢方式),按某種方式排序(要求至少一種排序方式)。當(dāng)然,我們可以根據(jù)自己的能力對系統(tǒng)進(jìn)行完善性的拓展,例如自己加入簡單的權(quán)限處理,統(tǒng)計(jì)功能,模糊查詢等,甚至可以拓展為圖書借閱系統(tǒng)。</p><p> 通過整個程序的開發(fā)過程,最終使我們掌握利用計(jì)算機(jī)解決實(shí)際問題的基本方法,熟悉C語言開發(fā)的全過程,提高綜合應(yīng)用C語言的能力、編程和調(diào)試
7、能力,為學(xué)習(xí)計(jì)算機(jī)和通信專業(yè)的后續(xù)課程打好專業(yè)基礎(chǔ)。 </p><p><b> 2 概要設(shè)計(jì)</b></p><p><b> 圖書信息及數(shù)據(jù)格式</b></p><p><b> 圖書信息:</b></p><p> 圖書信息包括圖書編號、圖書類別、圖書書名、作者、
8、出版社、出版時間、圖書價格。</p><p><b> 數(shù)據(jù)格式:</b></p><p> 本系統(tǒng)采用單向鏈表來對圖書信息進(jìn)行各項(xiàng)操作。其中圖書的編號為整型數(shù)據(jù),價格為雙精度浮點(diǎn)型,其余的類別、書名、作者、出版社與出版時間均為字符串類型</p><p> struct tushu_node{</p><p>&l
9、t;b> int num; </b></p><p> char leibie[20];</p><p> char name[30];</p><p> char author[20];</p><p> char press[20];</p><p> char time[20];&l
10、t;/p><p> double price;</p><p> struct tushu_node*next;</p><p><b> };</b></p><p> 一個結(jié)點(diǎn)的示意圖如下圖所示:</p><p> ?。?)程序的整體框架</p><p><b
11、> (3)模塊劃分</b></p><p> 1、int quanxian(); 核查權(quán)限的函數(shù) </p><p> 2、int inputchioce(); 顯示主菜單的函數(shù) </p><p> 3、void save();
12、 保存鏈表為文件的函數(shù) 覆蓋以前的信息 </p><p> 4、void save1(); 保存鏈表為文件的函數(shù) 不覆蓋以前的信息 只在創(chuàng)建時調(diào)用</p><p> 5、struct tushu_node* wjtolb();從文件中讀取數(shù)據(jù)并建立圖書信息的鏈表的函數(shù) </p><p> 6、int luruxinxi();
13、 錄入學(xué)生信息的函數(shù) </p><p> 7、struct tushu_node * luruxinxi_chuangjian(); 創(chuàng)建圖書信息的函數(shù) </p><p> 8、struct tushu_node * luruxinxi_charu(); 插入圖書信息的函數(shù)</p><p> 9、str
14、uct tushu_node * luruxinxi_shanchu(); 刪除圖書信息的函數(shù)</p><p> 10、struct tushu_node * luruxinxi_xiugai(); 修改圖書信息的函數(shù)</p><p> 11、int liulantushu(); 瀏覽
15、圖書信息的函數(shù) </p><p> 12、int chaxuntushu(); 查詢圖書信息的函數(shù) </p><p> 13、void chaxuntushu_num(); 按編號查詢圖書 </p><p> 14、void chaxuntush
16、u_name(); 按書名查詢圖書 </p><p> 15、void chaxuntushu_price(); 按價格查詢圖書 </p><p> 16、void paixutushu(); 為圖書排序的函數(shù) </p&
17、gt;<p> 17、struct tushu_node* paixutushu_price(); 為圖書按價格排序的函數(shù) </p><p> 18、struct tushu_node* paixutushu_time(); 為圖書按出版時間排序的函數(shù) </p><p> 19、void sfjx() ;
18、 寫個函數(shù) 判斷是否繼續(xù) 排序中使用 </p><p> 20、int tongjitushu_shumu(); 統(tǒng)計(jì)圖書數(shù)目的函數(shù) </p><p> 21、void shiyongshuoming(); 使用說明的函數(shù) </p><p>
19、;<b> 3 詳細(xì)設(shè)計(jì)</b></p><p> 程序的主體設(shè)計(jì)思想是根據(jù)結(jié)構(gòu)化程序設(shè)計(jì)思想分模塊進(jìn)行設(shè)計(jì),有一個主函數(shù)和多個自定義函數(shù)構(gòu)成。</p><p><b> 主函數(shù)</b></p><p> 對于本程序來說,主函數(shù)很簡單,就是定義了一個變量chioce用來接受核查用戶是否有使用該管理系統(tǒng)的權(quán)限的函數(shù)q
20、uanxian()函數(shù)返回的值,若為1(即用戶獲得了使用權(quán)限),則調(diào)出顯示主菜單的函數(shù)進(jìn)行具體操作</p><p> int main()</p><p><b> {</b></p><p> int chioce; </p><p> chioce=quanxian(); 核查用戶是
21、否有使用該管理系統(tǒng)的權(quán)限的函數(shù)</p><p> if(chioce==1) 若取得權(quán)限 則返回值為1 </p><p><b> {</b></p><p> system("cls");</p><p> inputchioce(); 用
22、來顯示主菜單的函數(shù)</p><p><b> }</b></p><p><b> exit(0);</b></p><p><b> }</b></p><p><b> 權(quán)限函數(shù)</b></p><p> 核查用戶權(quán)限
23、的函數(shù)使用do-while語句來限制用戶輸入密碼的次數(shù)僅為三次,并且為了使界面更具親切感,會在用戶輸入密碼錯誤時進(jìn)行提示引起用戶注意及提示剩余輸入次數(shù)。</p><p> int quanxian()</p><p><b> {</b></p><p> int m=1,n=3,flag=0;</p><p>
24、 char mima[20];</p><p><b> do{</b></p><p> printf("\n\n 你好,歡迎使本圖書信息管理系統(tǒng)!\n"); printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
25、~~\n");</p><p> printf("【現(xiàn)在進(jìn)行權(quán)限核查】 \n--------------------友情提醒:你共有3次輸入密碼的機(jī)會!\n");</p><p> printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n ");&
26、lt;/p><p> if(n==2||n==1){printf("注意:你已輸入錯誤%d次 剩余輸入次數(shù): %d 請輸入密碼:",3-n,n);}</p><p> if(n==3) printf("剩余輸入次數(shù): %d 請輸入密碼:",n);</p><p> scanf("%s",m
27、ima); //第一次輸入和輸錯密碼后再次輸入顯示的也賣弄不同</p><p> if(strcmp(mima,"chenbo0916")==0)</p><p><b> {</b></p><p><b> flag=1;</b></p><p> return
28、flag;</p><p><b> } </b></p><p><b> m++;</b></p><p><b> n--;</b></p><p> system("cls");</p><p> }w
29、hile(strcmp(mima,"chenbo0916")!=0&&m<=3) ; // 限制輸入次數(shù)在3次之內(nèi)</p><p> printf("\n\n對不起,你連續(xù)三次輸入密碼錯誤,沒有使用該圖書管理系統(tǒng)的權(quán)限!\n");</p><p> exit(0); </p><p><b
30、> }</b></p><p><b> 顯示主菜單的函數(shù)</b></p><p> 本程序?qū)⒅鞑藛螁为?dú)作為一個函數(shù)是為了讓用戶進(jìn)入一次系統(tǒng)可以進(jìn)行多項(xiàng)操作(即為在每次用戶完成一個具體的操作后,都會有對是否繼續(xù)或返回主菜單有相應(yīng)的詢問,讓用戶在想退出系統(tǒng)時才退出),基本思路是通過函數(shù)的嵌套調(diào)用來實(shí)現(xiàn)多項(xiàng)操作。這個函數(shù)的功能就是顯示主菜單并對用戶
31、進(jìn)行的選擇調(diào)用不同的子菜單函數(shù)或進(jìn)入具體功能</p><p> int inputchioce() /* 主菜單 */</p><p><b> {</b></p><p> int mychioce,x=-1;</p><p>
32、; printf("\n++++++++++++++歡 迎 你++++++++++++++++++\n\n");</p><p> printf("**+++++++++++++ 主 菜 單 +++++++++++++++++++++**\n");</p><p> printf("**1-- 錄入(刪除 修改)圖書信息 ** **2
33、--(按規(guī)則)查詢圖書信息 **\n");</p><p> printf("** 3-- 瀏覽圖書信息**** 4-- 為圖書(按規(guī)則)排序 **\n");</p><p> printf("** 5-- 統(tǒng)計(jì)圖書(數(shù)目) **** 6-- 幫助 **\n");</p>&
34、lt;p> printf("** 0-- 退出系統(tǒng) ** ** **\n"); printf("**++++++++++++++++++++++++++++++++++++++++++++++++++++++++**\n");</p><p> printf("\n 恭喜你獲得使用權(quán)限
35、,請你選擇:");</p><p> scanf("%d",&mychioce);</p><p> switch(mychioce) </p><p><b> {</b></p><p><b> case 1:</b></p&
36、gt;<p> {luruxinxi();break;}</p><p><b> case 2:</b></p><p> { chaxuntushu();break;}</p><p><b> case 3:</b></p><p> {liulantushu()
37、;break;}</p><p><b> case 4:</b></p><p> {paixutushu();break;}</p><p><b> case 5:</b></p><p> { tongjitushu_shumu();</p><p>
38、 printf("\n\n是否繼續(xù)操作? 請選擇(繼續(xù)-1/退出-0)");</p><p> scanf("%d",&x);</p><p> if(x==1){system("cls");inputchioce();}</p><p><b> if(x==0){</b&
39、gt;</p><p> printf("\n\n謝謝你的使用! 再見\n");</p><p> exit (0); </p><p><b> }</b></p><p> if(x!=1&&x!=0){</p><p> system(&quo
40、t;cls"); </p><p> printf("選擇有誤,默認(rèn)返回主菜單,請重新選擇:\n");</p><p> inputchioce();}</p><p><b> break;</b></p><p><b> }</b></p>
41、<p><b> case 6:</b></p><p> {shiyongshuoming();break;}</p><p><b> case 0:</b></p><p> { printf(" \n\n 謝謝你的使用??!再見 \n\n");break;}
42、 </p><p><b> default:</b></p><p> { system("cls");</p><p> printf("\n 選擇有誤,請重新選擇:\n");</p><p> inputchioce();
43、</p><p><b> }break;</b></p><p><b> }</b></p><p><b> }</b></p><p> 關(guān)于一些錄入(刪除 修改)、查詢、排序等子菜單的原理及實(shí)現(xiàn)方法與主菜單那類似</p><p>&l
44、t;b> 創(chuàng)建(插入)函數(shù)</b></p><p><b> 算法如下圖:</b></p><p> 結(jié)束輸入控制條件Num!=0</p><p> 將鏈表數(shù)據(jù)保存為文件的函數(shù)</p><p> 首先打開文件以可讀寫(也可以只寫的方式打開 區(qū)別在于是否覆蓋以前的信息)的方式,p1作為形參來接受
45、實(shí)參head,只要不為空,寫入p1 后,下移一個節(jié)點(diǎn)</p><p> void save1(struct tushu_node* p1){ /*將鏈表保存為文件的函數(shù) 不覆蓋前面信息 */</p><p> if( (fpp=fopen("1.txt","a"))==NULL )</p><p><b>
46、{</b></p><p> printf("打開文件失??!");</p><p><b> exit(0);</b></p><p><b> }</b></p><p> while(p1!=NULL)</p><p><b&
47、gt; { </b></p><p> fprintf(fpp," %d %s %s %s %s %s %lf\n",p1->num,p1->leibie,p1-> </p><p> name,p1->author,p1->press,p1->time,p1->price);
48、 </p><p> p1=p1->next;</p><p><b> }</b></p><p> if(fclose(fpp))</p><p><b> { </b></p><p> printf("關(guān)閉文件失??!\n");
49、</p><p><b> exit(0);</b></p><p><b> }</b></p><p><b> }</b></p><p> 從文件中讀出數(shù)據(jù)并創(chuàng)建鏈表的函數(shù)</p><p> 在調(diào)用從文件讀取數(shù)據(jù)創(chuàng)建鏈表的函數(shù)前,先定義
50、head鏈表指針并賦值為空作為實(shí)參 。打開文件后,從文件中讀取一組數(shù)據(jù)賦給已經(jīng)被動態(tài)分配內(nèi)存的結(jié)點(diǎn)指針p</p><p> 第一次head為空時</p><p><b> Head</b></p><p><b> p1</b></p><p> 第二次以后head
51、 head</p><p> p2 p1</p><p><b> head</b></p><p> p2 p1</p><p><b> 刪除函數(shù) </b></p><p>
52、刪除函數(shù)執(zhí)行流程圖及算法如下圖所示:</p><p><b> Head=NULL</b></p><p> Head!=NULL</p><p> 相等(即刪除頭結(jié)點(diǎn))</p><p> 不相等(刪除其他結(jié)點(diǎn))</p><p> Ptr2!=NULL (即不是鏈表結(jié)尾 循環(huán)結(jié)束
53、條件)</p><p> While循環(huán) 相等</p><p><b> 不相等</b></p><p><b> 修改函數(shù)</b></p><p> 修改函數(shù)執(zhí)行流程圖如下:</p><p> If (Head!=Nul
54、l)</p><p><b> 不相等</b></p><p><b> 相等</b></p><p> 是 否</p><p><b> 瀏覽遍歷函數(shù)</b></p><p> 重新定義一組變量num、le
55、ibie、name、author、press、time、 price,將從文件中讀取一組數(shù)據(jù)后賦給這組變量并輸出它們,使用while(!feof(fp)),一直執(zhí)行上述過程實(shí)現(xiàn)遍歷瀏覽全部文件中的圖書信息。瀏覽完成后,同樣有對是否繼續(xù)其他操作的詢問,如果選擇繼續(xù),則會返回主菜單。</p><p> int liulantushu() /* 瀏覽圖書信息的函數(shù) */ </p>
56、<p> {int num; </p><p> char leibie[10];</p><p> char name[30];</p><p> char author[20];</p><p> char press[20];</p><p> char time[20];</p&
57、gt;<p> double price;</p><p> int x=-1;</p><p> if( (fpp=fopen("1.txt","r"))==NULL )</p><p><b> {</b></p><p> printf("
58、 打開文件失敗 ! ");</p><p><b> exit(0);}</b></p><p><b> else{</b></p><p> printf("\n\n編號 類別 書名 作者 出版社 出版時間 價格\n");</p><p>
59、while(!feof(fpp)){ fscanf(fpp,"%d%s%s%s%s%s%lf",&num,leibie,name,autho </p><p> r,press,time,&price); printf("%d %s %s %s %s %s %lf\n ",num,leibie,name
60、,author,press,time,price);}</p><p><b> }</b></p><p> if(fclose(fpp))</p><p> {printf("關(guān)閉文件失敗!\n");</p><p><b> exit(0);</b></p
61、><p><b> }</b></p><p> printf("\n\n是否繼續(xù)操作? 請選擇(繼續(xù)-1/退出-0)");</p><p> scanf("%d",&x);</p><p><b> if(x==1)</b></p>
62、<p> { system("cls");</p><p> inputchioce();}</p><p><b> if(x==0)</b></p><p> { printf("\n\n謝謝你的使用! 再見\n");</p><p> exit
63、 (0);}</p><p> if(x!=1&&x!=0)</p><p> { system("cls"); </p><p> printf("選擇有誤,默認(rèn)返回主菜單,請重新選擇:\n");</p><p> inputchioce();}</p>&l
64、t;p><b> }</b></p><p><b> 統(tǒng)計(jì)圖書數(shù)目的函數(shù)</b></p><p> 統(tǒng)計(jì)函數(shù)簡單的實(shí)現(xiàn)了對圖書數(shù)目的統(tǒng)計(jì),其實(shí)現(xiàn)思路可以看做在瀏覽函數(shù)的基礎(chǔ)上去掉一些不必要的輸出而是另外加上一個變量n用在while中執(zhí)行一次循環(huán)就n++一次,就能統(tǒng)計(jì)出圖書的數(shù)目了,不再具體敘述。由于feof()函數(shù)本身的原理,如果每
65、次寫入一行數(shù)據(jù)到文件中時最后有換行符號,則會出現(xiàn)n多加一問題或輸出時最后一行復(fù)制,只要將n減一即為圖書實(shí)際上的數(shù)目。</p><p><b> 查詢函數(shù)</b></p><p> 查詢函數(shù)算法如下圖所示:</p><p><b> P!=NULL</b></p><p><b>
66、不相等</b></p><p><b> 相等</b></p><p> 如果found依然為0 ,則輸出“未找到某圖書”</p><p> 是 否</p><p><b> 排序函數(shù)</b></p><p>
67、 排序函數(shù)算法敘述如下:</p><p> 排序函數(shù)使用冒泡排序的算法,定義了i j兩個變量來控制實(shí)現(xiàn)雙層循環(huán),for(i=1;i<n;i++)(n為調(diào)用統(tǒng)計(jì)函數(shù)統(tǒng)計(jì)的圖書總數(shù)目)來實(shí)現(xiàn)外循環(huán),一次外循環(huán)將鏈表中價格最高的(或出版時間最靠后的)圖書移動至鏈表的最后,具體實(shí)現(xiàn)過程(即內(nèi)循環(huán))如下圖所示:</p><p><b> 內(nèi)循環(huán):</b></p
68、><p><b> 初始化狀態(tài)為</b></p><p> P4 P4->next</p><p> 輔助 P3 p1 p2</p><p> 比較p1與p2的排序項(xiàng),如p1比 p2小,上圖所有指針的指針均后移一位</p><p> 相反
69、 ,若上圖中p1比 p2大,則變?yōu)?lt;/p><p> P3 P3->next</p><p> P2->next p1 p2</p><p> 簡單的說———始終是p1與p2比較,其中一個為前一次比較中的的大的一個,另一個向后移動</p><p><b&
70、gt; 內(nèi)循環(huán)源程序</b></p><p> p4=(struct tushu_node*)malloc(size);</p><p> p4->next=head; </p><p><b> p3=p4;</b></p><p><b> p1=head;</b>&
71、lt;/p><p> p2=head->next;</p><p> for(j=0;j<n-i;j++)</p><p><b> {</b></p><p> if(p2->price>p1->price)</p><p><b> {</b
72、></p><p><b> p3=p1;</b></p><p><b> p1=p2;</b></p><p> p2=p2->next;</p><p><b> }</b></p><p><b> else<
73、;/b></p><p><b> {</b></p><p> p1->next =NULL;</p><p> p1->next=p2->next;</p><p> p3->next=p2;</p><p> p2->next =p1;</
74、p><p><b> p3=p2;</b></p><p> p2=p1->next;</p><p><b> }</b></p><p><b> }</b></p><p> head=p4->next;free(p4);<
75、/p><p><b> 4 調(diào)試分析</b></p><p> 程序的編寫過程中調(diào)試時遇到的問題及如何解決:</p><p> 問題一 界面不美觀,進(jìn)入一次系統(tǒng)只能進(jìn)行一項(xiàng)操作的問題</p><p> 解決方法 通過將主菜單的顯示作為一個獨(dú)立的函數(shù)(inputchoice()),結(jié)合函數(shù)的嵌套調(diào)用實(shí)現(xiàn),與清屏函數(shù)
76、(system(“cls”))一起,在每次進(jìn)行完一次具體操作都有以下詢問</p><p> printf("\n\n是否繼續(xù)操作? 請選擇(繼續(xù)-1/退出-0)");</p><p> scanf("%d",&x);</p><p><b> if(x==1)</b></p>
77、<p><b> {</b></p><p> system("cls");</p><p> inputchioce();</p><p><b> }</b></p><p><b> if(x==0)</b></p>
78、<p><b> {</b></p><p> printf("\n\n謝謝你的使用! 再見\n");</p><p> exit (0); </p><p><b> }</b></p><p> if(x!=1&&x!=0)</p&
79、gt;<p><b> {</b></p><p> system("cls"); </p><p> printf("選擇有誤,默認(rèn)返回主菜單,請重新選擇:\n");</p><p> inputchioce();</p><p><b> }&
80、lt;/b></p><p> 實(shí)現(xiàn)了每次操作完成后,使只顯示主菜單可繼續(xù)進(jìn)行其他操作</p><p> 問題二 權(quán)限系統(tǒng)以前是輸入學(xué)號后三位(int)進(jìn)行驗(yàn)證并且只有一次輸入機(jī)會,一次輸入錯誤就退出系統(tǒng)</p><p> 解決方法 在權(quán)限函數(shù)中使用字符串變量(char)來作為密碼,使用do-while語句來實(shí)現(xiàn)對輸入次數(shù)的控制</p>
81、<p> 問題三 錄入時以前的思路是想在輸入的同時寫入文件只有一組數(shù)據(jù)想存入文件</p><p> 解決方法 將保存文件作為一個獨(dú)立的函數(shù)。在創(chuàng)建函數(shù)中有一組另外的參數(shù)來接收用戶輸入的數(shù)據(jù),然后再調(diào)用保存函數(shù)將數(shù)據(jù)存入文件</p><p> 問題四 文件的保存與讀取問題</p><p> 解決方法 由于系統(tǒng)要求結(jié)合文件的知識使用戶的數(shù)據(jù)
82、在一次輸入之后即使關(guān)閉退出系統(tǒng)后在次進(jìn)入系統(tǒng)時原有數(shù)據(jù)依然能繼續(xù)使用。并且在對數(shù)據(jù)進(jìn)行創(chuàng)建、刪除、修改、排序等相關(guān)的操作之后要重新保存,所以將將鏈表保存到文件和從文件讀取數(shù)據(jù)建立鏈表都重新寫作單獨(dú)的函數(shù),在進(jìn)行完相關(guān)的操作后都調(diào)用save()重新保存,在再次進(jìn)行操作前就先調(diào)用wjtolb()函數(shù)從文件中讀取數(shù)據(jù)創(chuàng)建鏈表,實(shí)現(xiàn)了對數(shù)據(jù)更及時的保存與利用</p><p> 問題五 保存數(shù)據(jù)時覆蓋不覆蓋原有數(shù)據(jù)的問
83、題</p><p> 解決問題 由于以前沒有注意細(xì)節(jié)問題導(dǎo)致雖然數(shù)據(jù)被修改或是刪除后保存成功,但數(shù)據(jù)不覆蓋原來的數(shù)據(jù)從而出現(xiàn)文件中數(shù)據(jù)重復(fù)保存的問題,解決方法很簡單,只要將打開文件的方式由可讀可寫(a)改為只寫方式打開(w)就行</p><p> 問題六 輸入時無法結(jié)束輸入的問題</p><p> 解決方法 由于在輸入時時先輸入圖書的編號,所以在輸入時除了輸
84、入第一本圖書的信息,</p><p> 即在輸入第一本圖書之后在輸入時先輸入圖書的編號,加上一個判斷循環(huán)while(num!=0)才繼續(xù)輸入完這本圖書的其他信息,即0可以作為輸入結(jié)束標(biāo)志</p><p> 問題七 程序漏洞,只有第二本圖書信息無法修改的問題</p><p> 解決方法 程序設(shè)計(jì)思路有問題及對do-while語句了解不充分導(dǎo)致了問題。修改函數(shù)
85、的思路是先讓用戶先輸入要修改的圖書編號再依次查詢,先看頭結(jié)點(diǎn)的圖書編號與要修改的編號是否相等,如果相等繼續(xù)選擇要修改的圖書信息成分修改,如果不相等,有個循環(huán)語句來使結(jié)點(diǎn)后移只帶相等再選擇要修改的圖書信息成分修改。有問題的寫法是使用了</p><p><b> do {</b></p><p> p=p->next;</p><p>
86、; } while(p!=NULL&&p->num!=numm) </p><p> 從而導(dǎo)致了如果要修改的圖書不是第一本而是第二本時,先執(zhí)行了后移一個結(jié)點(diǎn)直接到第三個結(jié)點(diǎn)即無法修改第二本圖書的信息。解決后是用while循環(huán)</p><p> while(p!=NULL&&p->num!=numm)</p><p>
87、<b> {</b></p><p> p=p->next;</p><p><b> }</b></p><p><b> 就不存在上述問題</b></p><p> 問題八 要對圖書的信息進(jìn)行刪除后修改前必須先瀏覽圖書不然不知道要選擇哪本圖書進(jìn)行操作的問題
88、</p><p> 解決方法 由于上述修改與刪除的操作是通過用戶對圖書編號的選擇來完成的所以在瀏覽前不知道圖書對于的編號就使操作具有盲目性即對圖書的信息進(jìn)行刪除后修改前必須先瀏覽圖書。解決時時讓修改于刪除函數(shù)中讓用戶輸入編號前默認(rèn)直接輸出所有圖書(遍歷所有圖書)</p><p><b> 5測試結(jié)果 </b></p><p> 編號 類
89、別 書名 作者 出版社 出版時間 價格</p><p> 4 傳記 讓世界因你而不同 李開復(fù) 北京工業(yè)出版社 2008.3 28.000000 </p><p> 2 英語 四級詞匯 俞敏洪 群言出版社 2008.9 32.000000 </p>
90、<p> 5 漫畫 我兔斯基你 王卯卯 動漫出版社 2009.3 32.000000 </p><p> 3 營銷 哈佛市場營銷策略 宋海峰 內(nèi)蒙古出版社 2010.4 28.000000 </p><p> 1 雜志 電腦愛好者 無 cfan雜志社 2010.9
91、 6.000000 </p><p> 6 教材 思修 羅國杰 高等教育出版社 2006.8 15.50</p><p> 7 教材 大學(xué)英語 王大偉 外研社 2005.1 34.9</p><p> 8 教材 高等數(shù)學(xué) 蔣青
92、 高等教育出版社 2007.6 25.9</p><p> 現(xiàn)在給出一組測試數(shù)據(jù)來全程展示本圖書管理系統(tǒng)的所有功能 </p><p> 功能一之核查用戶權(quán)限:</p><p> 首先進(jìn)入系統(tǒng),你會發(fā)現(xiàn)要求對用戶使用權(quán)限進(jìn)行核查的界面:(效果圖如下)</p><p> 若密碼為錯誤密碼,那么你會看到提醒“注意”的界面</p&
93、gt;<p> 上圖密碼正確,則仍然可以順利進(jìn)入系統(tǒng)見到主菜單 如下圖</p><p> 若三次輸入錯誤 將無法進(jìn)入系統(tǒng)</p><p> 功能二之瀏覽全部圖書:</p><p> 在主菜單界面選擇3則可遍歷現(xiàn)有全部圖書信息</p><p> 功能三之創(chuàng)建或添加圖書:</p><p> 選擇
94、1后進(jìn)入錄入(刪除 修改)子菜單</p><p> 繼續(xù)選擇1進(jìn)入創(chuàng)建添加圖書功能 以0結(jié)束輸入</p><p> 結(jié)束后自動返回主菜單 再次選擇3(瀏覽)可查看添加效果(瀏覽時剛才上圖添加的圖書信息“9 IT FLASH8 尹浩瓊 電子工業(yè)出版社 2006.9 41”顯示在最后一行說明程序已經(jīng)實(shí)現(xiàn)了添加功能)</p><p> 功能四之為圖書按規(guī)則排序:&
95、lt;/p><p> 選擇4后進(jìn)入排序子菜單進(jìn)一步選擇按何種規(guī)則排序(報告只演示按出版時間排序)</p><p> 當(dāng)選擇2—按出版時間排序 然后回車鍵你會看到</p><p> 選1繼續(xù)返回瀏覽看到圖書已經(jīng)按出版時間的先后排序完成</p><p> 功能五之按規(guī)則查詢圖書:</p><p> 同排序一樣你可以
96、在子菜單選擇按何種方式查詢(報告只演示按書名查詢)</p><p> 選擇按書名查詢后你可以輸入書名</p><p> 查詢圖書《當(dāng)代大學(xué)生》的結(jié)果是“沒有找到這本書”</p><p> 選擇1繼續(xù)按書名查找其他圖書</p><p> 查找到圖書《讓世界因你而不同》時,這本圖書的信息將被全部輸出,如圖:</p><
97、p> 功能六之修改已有圖書信息:</p><p> 從錄入子菜單1進(jìn)入后選擇3可以進(jìn)入修改功能 首先你會看到目前文件中所有圖書的信息方便你選擇要修改哪本圖書</p><p> 上圖選擇了修改編號為1的圖書 現(xiàn)在編號為1的圖書的信息單獨(dú)顯示出來 你可以再次根據(jù)提示界面選擇修改圖書1的哪一項(xiàng)成分</p><p> 我們看到圖書1的作者為“無” 決定將
98、它改為“陳波”(如下圖)</p><p> 完成后可以利用瀏覽函數(shù)同樣可以查看到修改后的效果</p><p><b> 修改成功</b></p><p> 功能七之按編號刪除某本圖書:</p><p> 選擇要刪除圖書的編號前你也會看到目前所有圖書的信息</p><p> 現(xiàn)在選擇刪除編
99、號為8的圖書</p><p> 瀏覽看到編號為8的圖書已被成功刪除</p><p> 功能八之簡單的統(tǒng)計(jì)功能(統(tǒng)計(jì)圖書總數(shù)目):</p><p> 主菜單中選擇5即可統(tǒng)計(jì)出圖書總數(shù)目(上圖看出還剩余編號為1、2、3、4、5、6、7、9)八本圖書</p><p> 統(tǒng)計(jì)正確 現(xiàn)在基本功能演示完畢 選擇0退出系統(tǒng)</p>
100、<p> 為了完善 系統(tǒng)也設(shè)計(jì)了一個幫助功能對系統(tǒng)的使用方法做了簡單的介紹</p><p><b> 6 課程心得總結(jié)</b></p><p> 經(jīng)歷了幾個星期的課程設(shè)計(jì),從設(shè)計(jì)前期的不知如何下手到開始設(shè)計(jì)時的各種錯誤的困擾再到一個個的攻破各個問題,最后到對程序的進(jìn)一步完善與課程報告的撰寫。這一段時間我們由被程序困擾到幾乎崩潰到最后成就感的油然而生
101、;從一整天的坐在電腦屏幕面前到現(xiàn)在的帶著喜悅一遍一遍運(yùn)行著程序;一遍遍的互相探討解決大家遇到的問題到越來越發(fā)現(xiàn)編程的有意思,我到現(xiàn)在真的感覺認(rèn)真自己做完這樣一個系統(tǒng)收獲頗大:</p><p> 對結(jié)構(gòu)化程序設(shè)計(jì)與函數(shù)的嵌套調(diào)用有了更清晰具體的認(rèn)識</p><p> 對鏈表的操作更加熟練,更清晰的認(rèn)識到鏈表與其他我們前面學(xué)習(xí)的數(shù)據(jù)類型(如結(jié)構(gòu)體)的區(qū)別與聯(lián)系,及使用方法上的異同</
102、p><p> 明確認(rèn)識到鏈表的循環(huán)操作要注意到的是前一部分對某某進(jìn)行操作處理,而后要分析好對于如何實(shí)現(xiàn)對某某重新賦值等變化來實(shí)現(xiàn)繼續(xù)循環(huán)</p><p> 引入了文件知識可以對電腦硬盤上的數(shù)據(jù)操作,改變了對C語言的狹義認(rèn)識,認(rèn)識 到C語言實(shí)際上還可以實(shí)現(xiàn)更復(fù)雜豐富的功能來利用開發(fā)的軟件來進(jìn)一步實(shí)現(xiàn)對現(xiàn)實(shí)中的問題的解決</p><p> 學(xué)習(xí)到C語言的學(xué)習(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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c語言課程設(shè)計(jì)--圖書管理系統(tǒng)
- c語言課程設(shè)計(jì)(圖書管理系統(tǒng))
- c語言課程設(shè)計(jì)-圖書管理系統(tǒng)
- c語言課程設(shè)計(jì)---圖書管理系統(tǒng)
- c語言課程設(shè)計(jì)--圖書管理
- c語言課程設(shè)計(jì)報告~圖書管理系統(tǒng)
- c語言圖書管理系統(tǒng)課程設(shè)計(jì)報告
- c語言圖書管理系統(tǒng)課程設(shè)計(jì)報告
- 圖書管理系統(tǒng)-c語言課程設(shè)計(jì)報告
- 小型圖書管理系統(tǒng)c語言課程設(shè)計(jì)報告
- c語言課程設(shè)計(jì)---某高校圖書管理系統(tǒng)
- c語言課程設(shè)計(jì)報告---圖書管理信息
- c課程設(shè)計(jì)---圖書管理系統(tǒng)課程設(shè)計(jì)
- c++課程設(shè)計(jì)--圖書管理系統(tǒng)
- 圖書管理系統(tǒng)c++課程設(shè)計(jì)
- c++圖書管理系統(tǒng)課程設(shè)計(jì)
- c++圖書管理系統(tǒng)課程設(shè)計(jì)
- c課程設(shè)計(jì)報告-- 圖書管理系統(tǒng)
- c#-圖書管理系統(tǒng)-課程設(shè)計(jì)
- c++圖書管理系統(tǒng)課程設(shè)計(jì)
評論
0/150
提交評論