

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課程報(bào)告任務(wù)書(shū)</b></p><p> 題 目圖書(shū)信息管理系統(tǒng)</p><p> 主要內(nèi)容開(kāi)發(fā)一個(gè)圖書(shū)信息管理系統(tǒng),圖書(shū)信息包括:圖書(shū)編號(hào)、書(shū)名、作者、出版社、類(lèi)別、出版時(shí)間、價(jià)格等基本信息(也可以根據(jù)自己情況進(jìn)行擴(kuò)充,比如是否借出、庫(kù)存量等)。使之能提供以下基本功能:(1)圖書(shū)信息錄入功能(圖書(shū)信息用文件保存)--輸入(2)圖書(shū)信息
2、瀏覽功能--輸出(3)查詢(xún)功能(至少一種查詢(xún)方式)、排序功能(至少一種排序方式): ①按書(shū)名查詢(xún) ②按作者名查詢(xún) ③ 按照價(jià)錢(qián)排序 ④按出版時(shí)間排序等等(4)圖書(shū)信息的刪除與修改擴(kuò)展功能:可以按照自己的程度進(jìn)行擴(kuò)展。比如(1)簡(jiǎn)單的權(quán)限處理 (2)報(bào)表打印功能(3)甚至根據(jù)自己情況,可以加上學(xué)生信息,并擴(kuò)充為圖書(shū)借閱系統(tǒng)。(4)模糊查詢(xún) (5)綜合查詢(xún) (6)統(tǒng)計(jì)功能 比如統(tǒng)計(jì)處某一類(lèi)別的圖書(shū)信息 或 篩選出小于指定數(shù)量庫(kù)存的圖書(shū)
3、信息等等,總之,可以根據(jù)自己需求進(jìn)行分析功能。</p><p> 任務(wù)要求一、提交材料應(yīng)包括:(1)系統(tǒng)源代碼 (2)課程報(bào)告二、整個(gè)設(shè)計(jì)過(guò)程具體要求(1)需求分析 要求學(xué)生對(duì)案例系統(tǒng)進(jìn)行分析,設(shè)計(jì)出需要完成的功能,完善各個(gè)模塊的調(diào)用關(guān)系;(2)設(shè)計(jì)過(guò)程 要求學(xué)生進(jìn)一步明確各模塊調(diào)用關(guān)系,進(jìn)一步完善模塊函數(shù)細(xì)節(jié)(函數(shù)名、參數(shù)、返回值等)(3)實(shí)現(xiàn)過(guò)程 要求學(xué)生養(yǎng)成良好的編碼習(xí)慣、完成各個(gè)模塊并進(jìn)行測(cè)試,最終完
4、成系統(tǒng)整體測(cè)試;(4)總結(jié)階段 按照要求完成系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)報(bào)告,并進(jìn)行總結(jié)、答辯。</p><p> 成績(jī)?cè)u(píng)定報(bào)告撰寫(xiě)情況(30分)系統(tǒng)完成情況(30分)答辯情況(40分)總分</p><p> 內(nèi)容20分規(guī)范程度5分程序測(cè)試5分基本功能20分?jǐn)U展功能10分自述情況10分答辯情況30分</p><p><b> 1需求分析</b>&l
5、t;/p><p> 開(kāi)發(fā)一個(gè)圖書(shū)管理系統(tǒng)。</p><p> 一、圖書(shū)信息包括圖書(shū)編號(hào)、書(shū)名、作者、價(jià)格、出版社、出版日期、類(lèi)別、館藏地址、庫(kù)存量。</p><p><b> 二、系統(tǒng)功能包括</b></p><p><b> 1 新建圖書(shū)信息庫(kù)</b></p><p>
6、<b> 2查詢(xún)圖書(shū)信息</b></p><p><b> 全部查詢(xún) </b></p><p><b> 按書(shū)名查詢(xún) </b></p><p><b> 按作者查詢(xún) </b></p><p><b> 按類(lèi)別查詢(xún)</b>&
7、lt;/p><p><b> 3 圖書(shū)排序</b></p><p><b> 按編號(hào)排序 </b></p><p><b> 按價(jià)格排序</b></p><p> 4 圖書(shū)信息插入(插入后仍按編號(hào)順序排放的)</p><p> 5 圖書(shū)信息刪除(按
8、書(shū)名查找刪除)</p><p> 6 圖書(shū)信息修改(按書(shū)名查詢(xún)到書(shū)后可以進(jìn)行選擇對(duì)各項(xiàng)信息進(jìn)行修改)</p><p><b> 7 圖書(shū)數(shù)目統(tǒng)計(jì)</b></p><p> 8 圖書(shū)信息保存在文件中</p><p> 三、在主函數(shù)里設(shè)計(jì)各個(gè)功能選項(xiàng),然后調(diào)用相應(yīng)的自定義子函數(shù)來(lái)實(shí)現(xiàn)功能。</p>&l
9、t;p><b> 2 概要設(shè)計(jì)</b></p><p><b> (1) 數(shù)據(jù)結(jié)構(gòu)</b></p><p> 主要數(shù)據(jù)結(jié)構(gòu):?jiǎn)捂湵?lt;/p><p><b> //圖書(shū)信息結(jié)構(gòu)體</b></p><p> struct book</p><p
10、><b> {</b></p><p> char num[L]; //圖書(shū)編號(hào)</p><p> char name[M]; //書(shū)名</p><p> char writer[M]; //作者</p><p> char publisher[M]; //出版社</p&
11、gt;<p> char time[N]; //出版日期</p><p> char category[n]; //類(lèi)別 </p><p> char room[N]; //館藏地址</p><p> double price; //價(jià)格</p><p> int amount;
12、 //庫(kù)存量</p><p> struct book *next;</p><p><b> };</b></p><p><b> (2) 模塊劃分</b></p><p><b> 主函數(shù)</b></p><p> void main
13、()</p><p> 自定義子函數(shù)即功能函數(shù)</p><p> struct book * create(); // 新建圖書(shū)信息庫(kù) </p><p> struct book * scanf1_(); //輸入單本書(shū)的信息</p><p> void pri
14、ntf1_(struct book *); //輸出單本書(shū)的信息</p><p> void chaxun_(struct book *); //綜合查詢(xún)</p><p> void chaxun_all(struct book *); //全部信息瀏覽</p><p> void chaxun_n
15、ame(struct book *); //按書(shū)名查詢(xún)</p><p> void chaxun_writer(struct book *); //按作者查詢(xún)</p><p> void chaxun_category(struct book *); //按類(lèi)別查詢(xún)</p><p> struct book *num_ord
16、er(struct book *); //按編號(hào)排序</p><p> struct book *price_order(struct book *); //按價(jià)格排序</p><p> struct book *delete_(struct book *); //圖書(shū)信息刪除</p><p> void change(struct book *
17、,char a[]); //圖書(shū)信息修改</p><p> struct book *insert(struct book *); //圖書(shū)信息插入</p><p> int count(struct book *); //圖書(shū)數(shù)目統(tǒng)計(jì)</p><p> void save(struct book *
18、); //保存到文件</p><p> struct book *load(); //從文件讀取信息到鏈表 </p><p> int quit(struct book *); //退出函數(shù)</p><p> (3) 程序總體框架</
19、p><p> (4) 主界面是如下</p><p><b> 3 詳細(xì)設(shè)計(jì)</b></p><p> 一main()主函數(shù)</p><p> 程序采用模塊化設(shè)計(jì),主函數(shù)是程序的入口,各模塊獨(dú)立,可分塊調(diào)整,均由主函數(shù)控制。采用while死循環(huán)和switch分支語(yǔ)句編寫(xiě)菜單選擇控制各個(gè)模塊的功能,每個(gè)模塊的功能由簡(jiǎn)單
20、的基本函數(shù)構(gòu)成。</p><p><b> 各個(gè)功能函數(shù)。</b></p><p> //輸入單本書(shū)的信息</p><p> 定義一個(gè)結(jié)構(gòu)體變量,輸入信息放在其中,然后將地址返回。源代碼如下</p><p> struct book * scanf1_()</p><p><b>
21、; {</b></p><p> struct book *p1;</p><p> p1=(struct book *)malloc(sizeof(struct book));</p><p> printf("請(qǐng)輸入圖書(shū)編號(hào):");</p><p> gets(p1->num);</p
22、><p> printf("請(qǐng)輸入書(shū)名:");</p><p> gets(p1->name);</p><p> printf("請(qǐng)輸入作者:");</p><p> gets(p1->writer);</p><p> printf("請(qǐng)輸入出版社
23、:");</p><p> gets(p1->publisher);</p><p> printf("請(qǐng)輸入出版日期(例如2011-01-01):");</p><p> gets(p1->time);</p><p> printf("請(qǐng)輸入圖書(shū)類(lèi)別:");</p
24、><p> gets(p1->category);</p><p> printf("請(qǐng)輸入館藏地址:");</p><p> gets(p1->room);</p><p> printf("請(qǐng)輸入價(jià)格和庫(kù)存量:");</p><p> scanf("
25、;%lf%d",&p1->price,&p1->amount);</p><p> getchar();</p><p> p1->next=NULL;</p><p> return p1;</p><p><b> }</b></p><p>
26、; //輸出單本書(shū)的信息</p><p> void printf1_(struct book *head)</p><p><b> {</b></p><p> struct book *p;</p><p><b> p=head;</b></p><p>
27、 printf("圖書(shū)編號(hào): ");</p><p> puts(p->num);</p><p> printf("書(shū)名: ");</p><p> puts(p->name);</p><p> printf("作者: ");</p><
28、p> puts(p->writer);</p><p> printf("出版社: ");</p><p> puts(p->publisher);</p><p> printf("出版日期: ");</p><p> puts(p->time);</p>
29、<p> printf("圖書(shū)類(lèi)別: ");</p><p> puts(p->category);</p><p> printf("館藏地址: ");</p><p> puts(p->room);</p><p> printf("價(jià)格 庫(kù)存量:%
30、5.1f%5d\n",p->price,p->amount);</p><p> printf("\n");</p><p><b> }</b></p><p> // 新建圖書(shū)信息庫(kù)</p><p> 創(chuàng)建動(dòng)態(tài)鏈表將信息放入其中,最后返回鏈表首地址表。</p&g
31、t;<p> struct book * create()</p><p><b> {</b></p><p> struct book *p1,*p2=NULL,*head=NULL;</p><p><b> int n=0;</b></p><p> char te
32、mpNum[N];</p><p> printf("注意:當(dāng)圖書(shū)編號(hào)為 0 時(shí)輸入結(jié)束\n");</p><p><b> do</b></p><p> {printf("請(qǐng)輸入圖書(shū)的編號(hào):");</p><p> gets(tempNum);</p&g
33、t;<p> if(strcmp(tempNum,"0")==0)</p><p><b> break;</b></p><p> p1=(struct book *)malloc(sizeof(struct book)); </p><p> strcpy(p1->num,tempNum);
34、</p><p> printf("請(qǐng)輸入書(shū)名:");</p><p> gets(p1->name);</p><p> printf("請(qǐng)輸入作者:");</p><p> gets(p1->writer);</p><p> printf("
35、請(qǐng)輸入出版社:");</p><p> gets(p1->publisher);</p><p> printf("請(qǐng)輸入出版日期:");</p><p> gets(p1->time);</p><p> printf("請(qǐng)輸入圖書(shū)類(lèi)別:");</p>&l
36、t;p> gets(p1->category);</p><p> printf("請(qǐng)輸入館藏地址:");</p><p> gets(p1->room);</p><p> printf("請(qǐng)輸入價(jià)格和庫(kù)存量:");</p><p> scanf("%lf%d&q
37、uot;,&p1->price,&p1->amount);</p><p> getchar();</p><p> printf("\n");</p><p> p1->next=NULL;</p><p> if(head==NULL)</p><p>
38、<b> {</b></p><p><b> head=p1;</b></p><p><b> p2=head;</b></p><p><b> }</b></p><p><b> else</b></p>
39、;<p><b> {</b></p><p> p2->next=p1;</p><p><b> p2=p1;</b></p><p><b> }</b></p><p> }while(1);</p><p> p
40、rintf("圖書(shū)信息輸入結(jié)束!\n按Enter鍵繼續(xù)!");</p><p> getchar();</p><p> return head;</p><p><b> }</b></p><p><b> //綜合查詢(xún)</b></p><p&g
41、t; 該函數(shù)的參數(shù)是head,指向鏈表的首地址</p><p> 用switch分支出四個(gè)不同的查詢(xún)方式全部信息查詢(xún)、按書(shū)名查詢(xún)、按作者查詢(xún)、按類(lèi)別查詢(xún)。</p><p> void chaxun_(struct book *head)</p><p><b> {</b></p><p> int n,x=1
42、;</p><p><b> while(x)</b></p><p><b> {</b></p><p> system("cls");</p><p> printf("歡迎使用查詢(xún)功能\n");</p><p> pr
43、intf("*******************************************************************\n");</p><p> printf(" 0--退出查詢(xún)功能 \n");</p><p> printf(" 1--全部信息查詢(xún) 2--按書(shū)名查詢(xún)\n"
44、;);</p><p> printf(" 3--按作者查詢(xún) 4--按類(lèi)別查詢(xún)\n");</p><p> printf("*******************************************************************\n");</p><p> printf("請(qǐng)選
45、擇:");</p><p> scanf("%d",&n);</p><p> getchar();</p><p><b> switch(n)</b></p><p><b> { </b></p><p><b>
46、; case 0:</b></p><p> x=0;printf("您已經(jīng)退出查詢(xún)功能\n按Enter鍵繼續(xù)");</p><p> getchar();</p><p><b> break;</b></p><p><b> case 1:</b>&
47、lt;/p><p> chaxun_all(head);</p><p> printf("按Enter鍵繼續(xù)"); </p><p><b> break;</b></p><p><b> case 2:</b></p><p> chaxun_
48、name(head);</p><p> printf("按Enter鍵繼續(xù)");</p><p> getchar();</p><p><b> break;</b></p><p><b> case 3: </b></p><p> c
49、haxun_writer(head);</p><p> printf("按Enter鍵繼續(xù)");</p><p> getchar();</p><p><b> break;</b></p><p><b> case 4: </b></p><
50、p> chaxun_category(head);</p><p> printf("按Enter鍵繼續(xù)");</p><p> getchar();</p><p><b> break;</b></p><p><b> default :</b></p
51、><p> printf("輸入有誤,請(qǐng)重新輸入!\n按Enter鍵繼續(xù)。");</p><p> getchar();</p><p><b> break;</b></p><p><b> }</b></p><p><b> }&l
52、t;/b></p><p><b> }</b></p><p> //全部圖書(shū)信息瀏覽</p><p> 使用參數(shù)head傳遞鏈表的首地址,首先判斷鏈表是否為空,如果為空,則輸出提示信息;如果不為空,設(shè)一個(gè)指針變量p1,先指向第一個(gè)結(jié)點(diǎn),輸出p1所指的結(jié)點(diǎn),然后使p1后移一個(gè)結(jié)點(diǎn),再輸出,直到鏈表的尾結(jié)點(diǎn)。即將鏈表中所有信息輸出。
53、</p><p> void chaxun_all(struct book *head)</p><p><b> {</b></p><p> struct book *p;</p><p><b> p=head;</b></p><p> if (head!
54、=NULL)</p><p><b> {</b></p><p> printf("書(shū)籍信息如下:\n\n");</p><p><b> do</b></p><p><b> { </b></p><p> print
55、f1_(p);</p><p> p=p->next;</p><p> }while(p!=NULL);</p><p><b> }</b></p><p> printf("按Enter鍵繼續(xù)");</p><p> getchar();</p>
56、;<p><b> }</b></p><p> 其他的查詢(xún)?yōu)樵阪湵碇羞M(jìn)行查找,查找到相匹配的就輸出信息。如</p><p> //根據(jù)書(shū)名查詢(xún)圖書(shū)的信息</p><p> void chaxun_name(struct book *head)</p><p><b> {</b&
57、gt;</p><p><b> int i=0;</b></p><p> char a[N];</p><p> struct book *p1;</p><p> printf("請(qǐng)輸入要查詢(xún)的書(shū)名:");</p><p> scanf("%s&quo
58、t;,a);</p><p><b> p1=head;</b></p><p> while(p1!=NULL)</p><p><b> {</b></p><p> if(strcmp(p1->name,a)==0){</p><p> printf(&
59、quot;查詢(xún)到的書(shū)籍信息如下:\n\n");</p><p> printf1_(p1);</p><p><b> i=1;</b></p><p><b> }</b></p><p> p1=p1->next;</p><p><b>
60、; }</b></p><p><b> if(i==0)</b></p><p> printf("沒(méi)有找到書(shū)名為 %s 的圖書(shū)!\n",a);</p><p> getchar();</p><p><b> }</b></p><p
61、> //用鏈表給書(shū)籍排序:按編號(hào)升序排序</p><p> 該函數(shù)按照?qǐng)D書(shū)的編號(hào)用交換法進(jìn)行排序。</p><p> struct book *num_order(struct book *head)</p><p><b> {</b></p><p> struct book *p1,*p2,
62、*p3,*p4,*p5,*p6,*p7; </p><p><b> int x=1; </b></p><p> for(p1=head;p1->next!=NULL;p4=p1,p1=p1->next) </p><p><b> { </b></p><p><b>
63、; p3=p1; </b></p><p> for(p2=p1->next,p5=p7=p2;p2->!=NULL;p7=p2,p2=p2->next) </p><p><b> { </b></p><p> if(strcmp(p3->num,p2->num)>0) </p&
64、gt;<p><b> { </b></p><p><b> p3=p2; </b></p><p><b> p5=p7; </b></p><p><b> } </b></p><p><b> } </b&
65、gt;</p><p> if(p3!=p1) </p><p> { </p><p> if(x&&p1==head) </p><p><b> { </b></p><p> p6=p1->next; </
66、p><p> p1->next=p3->next; </p><p> p3->next=p6; </p><p> p5->next=p1; </p><p><b> head=p3; </b></p><p><b> p1=p3; </b>
67、;</p><p><b> x=0; </b></p><p><b> } </b></p><p><b> else </b></p><p><b> { </b></p><p> p6=p1->next
68、; </p><p> p1->next=p3->next; </p><p> p3->next=p6; </p><p> p4->next=p3; </p><p> p5->next=p1; </p><p><b> p1=p3; </b><
69、/p><p><b> } </b></p><p><b> } </b></p><p><b> } </b></p><p> printf("排序成功!\n"); </p><p> return head; <
70、/p><p><b> } </b></p><p><b> //統(tǒng)計(jì)書(shū)書(shū)籍總數(shù)</b></p><p> int count(struct book *head)</p><p><b> {</b></p><p><b> int
71、 n=0;</b></p><p> struct book *p1;</p><p> for(p1=head;p1!=NULL;p1=p1->next)</p><p><b> n++;</b></p><p><b> return n;</b></p>
72、<p><b> }</b></p><p> //將圖書(shū)信息插入到順序排放的鏈表中,插入后也是編號(hào)順序排放的。</p><p> 該函數(shù)有一個(gè)參數(shù),head頭結(jié)點(diǎn)指向鏈表的首地址,通過(guò)調(diào)用struct book * scanf1_() 函數(shù)得到圖書(shū)信息,然后按編號(hào)添加到鏈表上</p><p> struct book *
73、insert(struct book *head)</p><p><b> {</b></p><p> struct book *p1,*p2,*p3;</p><p> p1=scanf1_();</p><p><b> p2=head;</b></p><p&g
74、t;<b> p3=p2;</b></p><p> while(p2!=NULL && (strcmp(p2->num,p1->num)<0) )</p><p><b> {</b></p><p><b> p3=p2;</b></p>&
75、lt;p> p2=p2->next;</p><p><b> }</b></p><p> if(p2==head)</p><p><b> {</b></p><p> p1->next=head;</p><p><b> he
76、ad=p1;</b></p><p><b> }</b></p><p><b> else </b></p><p><b> {</b></p><p> p3->next=p1;</p><p> p1->nex
77、t=p2;</p><p><b> }</b></p><p> printf("插入成功!\n按Enter鍵繼續(xù)!\n");</p><p> getchar();</p><p> return head;</p><p><b> }</b&g
78、t;</p><p><b> //刪除圖書(shū)信息</b></p><p> 該函數(shù)根據(jù)輸入圖書(shū)的書(shū)名,在鏈表中進(jìn)行查找如果有匹配的,就將該書(shū)的信息刪除掉。最后返回刪除后的鏈表的頭結(jié)點(diǎn)。</p><p> struct book *delete_(struct book *head)</p><p><b>
79、; {</b></p><p> char a[N];</p><p> struct book *p1,*p2,*p3;</p><p> printf("請(qǐng)輸入要?jiǎng)h除的書(shū)名:");</p><p><b> gets(a);</b></p><p>&
80、lt;b> p1=head;</b></p><p><b> p2=p1;</b></p><p> while((strcmp(p2->name,a)!=0)&&p2!=NULL)</p><p><b> {</b></p><p><b&
81、gt; p3=p2;</b></p><p> p2=p2->next;</p><p><b> }</b></p><p> if(p2==NULL)</p><p> printf("沒(méi)有找到要?jiǎng)h除的數(shù)據(jù)!\n");</p><p> els
82、e if(p2==head)</p><p><b> {</b></p><p> head=p2->next;</p><p><b> free(p2);</b></p><p> printf("刪除成功!\n按Enter鍵繼續(xù)!\n");</p>
83、;<p><b> }</b></p><p><b> else </b></p><p><b> {</b></p><p> p3->next=p2->next;</p><p><b> free(p2);</b&
84、gt;</p><p> printf("刪除成功!\n按Enter鍵繼續(xù)!\n");</p><p><b> }</b></p><p> getchar();</p><p> return head;</p><p><b> }</b>
85、</p><p> //修改圖書(shū)的信息。</p><p> 該函數(shù)根據(jù)在主函數(shù)中輸入圖書(shū)的書(shū)名,在鏈表中進(jìn)行查找如果有匹配的,就可以先輸出該書(shū)的原信息,然后進(jìn)行選擇對(duì)該圖書(shū)的各項(xiàng)信息進(jìn)行修改。</p><p> void change(struct book *head,char a[M])</p><p><b> {&l
86、t;/b></p><p> struct book *p1;</p><p> int k,x=1;</p><p><b> p1=head;</b></p><p> while(p1!=NULL)</p><p><b> {</b></p>
87、;<p> if(strcmp(p1->name,a)==0)</p><p><b> break;</b></p><p> p1=p1->next;</p><p><b> }</b></p><p> if(p1==NULL)</p>&l
88、t;p><b> {</b></p><p> printf("沒(méi)有要找的書(shū)籍信息!\n按Enter鍵繼續(xù)!\n");</p><p> getchar();</p><p><b> }</b></p><p><b> else</b>&
89、lt;/p><p><b> {</b></p><p><b> while(x)</b></p><p><b> {</b></p><p> system("cls");</p><p> printf("歡迎
90、使用圖書(shū)信息修改功能\n\n");</p><p> printf("你所要修改的書(shū)籍原信息如下:\n\n");</p><p> printf1_(p1);</p><p> printf("**************************************************\n");<
91、/p><p> printf("* 0---放棄修改 5---修改出版日期 *\n"); </p><p> printf("* 1---修改編號(hào) 6---修改圖書(shū)類(lèi)別 *\n");</p><p> printf("* 2---修改書(shū)名
92、 7---修改館藏地址 *\n");</p><p> printf("* 3---修改作者 8---修改價(jià)格 庫(kù)存量 *\n");</p><p> printf("* 4---修改出版社 *\n");</p>
93、;<p> printf("**************************************************\n");</p><p> printf("請(qǐng)選擇:");</p><p> scanf("%d",&k);</p><p> getchar();
94、</p><p><b> switch(k)</b></p><p><b> {</b></p><p><b> case 0:</b></p><p> x=0; printf("您已經(jīng)退出對(duì)該書(shū)的修改功能\n按Enter鍵繼續(xù)"); &
95、lt;/p><p> getchar();</p><p><b> break;</b></p><p><b> case 1: </b></p><p> printf("請(qǐng)重新輸入編號(hào):");</p><p> gets(p1->num
96、);</p><p> printf("修改成功!\n按Enter鍵繼續(xù)!");</p><p> getchar();</p><p><b> break;</b></p><p><b> case 2:</b></p><p> prin
97、tf("請(qǐng)重新輸入書(shū)名:");</p><p> gets(p1->name);</p><p> printf("修改成功!\n按Enter鍵繼續(xù)!");</p><p> getchar();</p><p><b> break;</b></p>
98、<p><b> case 3:</b></p><p> printf("請(qǐng)重新輸入作者:");</p><p> gets(p1->writer);</p><p> printf("修改成功!\n按Enter鍵繼續(xù)!");</p><p> getc
99、har();</p><p><b> break;</b></p><p><b> case 4:</b></p><p> printf("請(qǐng)重新輸入出版社:");</p><p> gets(p1->publisher);</p><p&
100、gt; printf("修改成功!\n按Enter鍵繼續(xù)!");</p><p> getchar();</p><p><b> break;</b></p><p> case 5: </p><p> printf("請(qǐng)重新輸入出版日期(例如2011-01-01):&qu
101、ot;);</p><p> gets(p1->time);</p><p> printf("修改成功!\n按Enter鍵繼續(xù)!");</p><p> getchar();</p><p><b> break;</b></p><p><b>
102、case 6:</b></p><p> printf("請(qǐng)重新輸入圖書(shū)類(lèi)別:");</p><p> gets(p1->category);</p><p> printf("修改成功!\n按Enter鍵繼續(xù)!!");</p><p> getchar();</p>
103、;<p><b> break;</b></p><p><b> case 7:</b></p><p> printf("請(qǐng)重新輸入館藏地址:");</p><p> gets(p1->room);</p><p> printf("
104、修改成功!\n按Enter鍵繼續(xù)!");</p><p> getchar();</p><p><b> break;</b></p><p><b> case 8:</b></p><p> printf("請(qǐng)重新輸入價(jià)格和庫(kù)存量:");</p>
105、;<p> scanf("%lf%d",&p1->price,&p1->amount);</p><p> printf("修改成功!\n按Enter鍵繼續(xù)!");</p><p> getchar();</p><p><b> break;</b>&l
106、t;/p><p><b> default:</b></p><p> printf("您的輸入有誤!\n按Enter鍵繼續(xù)!");</p><p> getchar();</p><p><b> break;</b></p><p><b&g
107、t; } </b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> //把鏈表中數(shù)據(jù)寫(xiě)入到文件</p><p> 在程序中的數(shù)據(jù)輸入和輸出是以終端
108、為對(duì)象的,當(dāng)程序關(guān)閉后,數(shù)據(jù)也就丟失了,所以為了能隨時(shí)查閱數(shù)據(jù),必須將數(shù)據(jù)輸出到磁盤(pán)文件上保存起來(lái),使用時(shí)人磁盤(pán)中讀入到內(nèi)存中,這就用到了磁盤(pán)文件的讀寫(xiě)操作。</p><p> void save(struct book *head)</p><p><b> {</b></p><p><b> FILE *fb;</b
109、></p><p> struct book *p1;</p><p> if((fb=fopen("圖書(shū)信息庫(kù).txt","w"))==NULL)</p><p><b> {</b></p><p> printf("文件 圖書(shū)信息庫(kù).txt 打
110、開(kāi)失敗");</p><p><b> exit(0);</b></p><p><b> }</b></p><p> for(p1=head;p1!=NULL;p1=p1->next)</p><p> fprintf(fb,"%15s%20s%15s%15s%
111、15s%15s%15s%10.2f%5d\n",p1->num,p1->name,p1->writer,p1->publisher,</p><p> p1->time,p1->category,p1->room,p1->price,p1->amount);</p><p> fclose(fb);</p>
112、<p> printf("文件成功保存到 圖書(shū)信息庫(kù).txt 中!\n按Enter鍵繼續(xù)!");</p><p> getchar();</p><p><b> }</b></p><p> //從文件讀入圖書(shū)信息</p><p> 為了程序關(guān)閉后丟失,我們將數(shù)據(jù)保存到磁
113、盤(pán)文件中,下一次對(duì)已經(jīng)有的數(shù)據(jù)進(jìn)行的時(shí)候可以直接從文件中讀取數(shù)據(jù)進(jìn)行操作。</p><p> struct book *load()</p><p><b> {</b></p><p> struct book *p1,*tail,*head;</p><p><b> FILE *fp;</b
114、></p><p> head=tail=NULL;</p><p> if((fp=fopen("圖書(shū)信息庫(kù).txt","r"))==NULL)</p><p><b> {</b></p><p> printf("文件 圖書(shū)信息.txt 打開(kāi)失敗\
115、n");</p><p><b> exit(0);</b></p><p><b> }</b></p><p> while(!feof(fp))</p><p><b> {</b></p><p> p1=(struct bo
116、ok*)malloc(sizeof(struct book));</p><p> fscanf(fp, "%s %s %s %s %s %s %s %lf %d\n",&p1->num,&p1->name,&p1->writer,&p1->publisher,&p1->time,&p1->category,
117、&p1->room,&p1->price,&p1->amount);</p><p> if(head==NULL)</p><p><b> head=p1;</b></p><p><b> else</b></p><p> tail->
118、next=p1;</p><p><b> tail=p1;</b></p><p><b> }</b></p><p> tail->next=NULL;</p><p> fclose(fp);</p><p> printf("文件信息讀出成
119、功!\n按Enter鍵繼續(xù)!");</p><p> getchar();</p><p> return head;</p><p><b> }</b></p><p><b> //退出函數(shù)</b></p><p> int quit(struct
120、 book *head)</p><p><b> {</b></p><p> int x=0,n;</p><p> system("cls");</p><p> printf("是否要保存你操作中對(duì)圖書(shū)信息的改動(dòng)?\n");</p><p>
121、 printf("************************************************\n");</p><p> printf(" 1---是 2---否 3---取消 \n");</p><p> printf("******************************
122、******************\n");</p><p> printf("請(qǐng)選擇:");</p><p> scanf("%d",&n);</p><p><b> switch(n)</b></p><p><b> {</b&g
123、t;</p><p><b> case 1:</b></p><p> if(head==NULL)</p><p><b> {</b></p><p> system("cls");</p><p> printf("沒(méi)有需要保存
124、的數(shù)據(jù)\n");</p><p> printf("您已經(jīng)退出程序\n謝謝使用\n");</p><p><b> }</b></p><p><b> else</b></p><p> { save(head);</p><p>
125、 system("cls");</p><p> printf("您已經(jīng)退出程序\n謝謝使用\n");</p><p><b> }</b></p><p><b> break;</b></p><p><b> case 2:</b
126、></p><p> system("cls");</p><p> printf("您已經(jīng)退出程序\n謝謝使用\n");</p><p><b> break;</b></p><p><b> default:</b></p>
127、<p><b> x=1;</b></p><p><b> break; </b></p><p><b> }</b></p><p><b> return x;</b></p><p><b> } </b
128、></p><p><b> 4 調(diào)試分析</b></p><p> 插入書(shū)籍信息函數(shù)中直接寫(xiě)進(jìn)輸入單本書(shū)信息的代碼時(shí)時(shí),顯得有些龐大。</p><p> 另外定義了一個(gè)函數(shù)struct book * scanf1_();//輸入單本書(shū)的信息。用作被插入函數(shù)調(diào)用。</p><p> 從文件中讀取信息時(shí)發(fā)生錯(cuò)
129、誤,</p><p> 原因是將信息寫(xiě)入文件與從文件中讀取信息使用的文件名不完全相同。</p><p> 綜合查詢(xún)函數(shù)開(kāi)始是每次只能查詢(xún)一次就退出功能了。</p><p> 解決方案:模仿主函數(shù),運(yùn)用了while循環(huán),switch分支結(jié)構(gòu)。是函數(shù)可以在推出前一直使用。并且加入了清屏函數(shù)讓使用更方便。</p><p> 修改函數(shù)原先每次
130、只能對(duì)一本書(shū)的一項(xiàng)信息進(jìn)行修改。</p><p> 解決方案:像綜合查詢(xún)函數(shù)一樣在函數(shù)中運(yùn)用了while循環(huán),可以對(duì)一本書(shū)的各項(xiàng)信息進(jìn)行修改。而且在主函數(shù)中運(yùn)用了while循環(huán),可以對(duì)多本書(shū)盡心修改。</p><p> 使用中有時(shí)候不知道下一步該干什么</p><p> 在程序中加入如printf("按Enter鍵繼續(xù)");的操作提示。&l
131、t;/p><p> 原來(lái)選擇退出時(shí)沒(méi)有后悔的余地,設(shè)計(jì)了一個(gè)退出函數(shù),最選擇退出后可以有文件保存提示和取消退出選擇</p><p><b> 5測(cè)試結(jié)果 </b></p><p><b> 6 課程心得總結(jié)</b></p><p> 這次編寫(xiě)圖書(shū)信息管理系統(tǒng),讓我對(duì)c語(yǔ)言程序設(shè)計(jì)有了更深的認(rèn)識(shí)和
132、體會(huì)。</p><p> 做一個(gè)系統(tǒng)就像完成一個(gè)工程。既要學(xué)會(huì)分步又要學(xué)會(huì)分塊。分步就是清楚整個(gè)程序的流程;分塊就是將整個(gè)程序分成各個(gè)相對(duì)獨(dú)立的模塊,一個(gè)個(gè)模塊完成,最后將其組合,就完成了整個(gè)程序。圖書(shū)管理系統(tǒng)中在主函數(shù)提供各個(gè)功能選項(xiàng),而各個(gè)功能又有相應(yīng)的功能函數(shù)實(shí)現(xiàn)。</p><p> C語(yǔ)言程序設(shè)計(jì)聽(tīng)不會(huì),也看不會(huì),只能做會(huì)。它是一門(mén)實(shí)踐技術(shù),程序有問(wèn)題了,一直想,根本不行,只要
133、到電腦上運(yùn)行一下就解決問(wèn)題了。</p><p> 編寫(xiě)程序不要害怕出問(wèn)題,只有通過(guò)不斷調(diào)試、改進(jìn)。程序才能達(dá)到完善。程序在運(yùn)行過(guò)程中要不斷地發(fā)現(xiàn)問(wèn)題,改進(jìn)系統(tǒng)。我在編寫(xiě)中就對(duì)綜合查詢(xún)函數(shù)進(jìn)行了多次改進(jìn),讓它可以循環(huán)使用,每次實(shí)現(xiàn)下次查詢(xún)功能前都會(huì)將上次的查詢(xún)結(jié)果清空。</p><p> 編寫(xiě)的系統(tǒng)是讓人使用的,應(yīng)讓系統(tǒng)運(yùn)行中顯得人性化。每一步都要讓人知道該怎么操作,要在程序運(yùn)行中對(duì)用戶(hù)
134、進(jìn)行必要的提示。我在系統(tǒng)加入了許多注意保存、歡迎進(jìn)入、按enter鍵繼續(xù)等語(yǔ)句。</p><p> 系統(tǒng)編寫(xiě)是精工細(xì)活,不可急功近利。編寫(xiě)系統(tǒng)過(guò)程中,要保持清醒的頭腦,也要有耐心。通過(guò)努力編寫(xiě)成功后,會(huì)很有成就感。每次編寫(xiě)程序先趕快完成時(shí),總不能完成,搞得自己心煩意亂。直到最后告誡自己要一步步來(lái)時(shí),程序編寫(xiě)便有了很快進(jìn)展。</p><p> 總之這次變成收獲很大,體會(huì)到了c語(yǔ)言的強(qiáng)大,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- c語(yǔ)言圖書(shū)館管理系統(tǒng)課程設(shè)計(jì)
- 圖書(shū)館管理系統(tǒng)c語(yǔ)言課程設(shè)計(jì)
- c語(yǔ)言課程設(shè)計(jì)-圖書(shū)館管理系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)--圖書(shū)館系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)報(bào)告---圖書(shū)館管理系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)-- 圖書(shū)館借閱管理系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)---圖書(shū)館管理信息系統(tǒng)
- c語(yǔ)言實(shí)現(xiàn)圖書(shū)館課程設(shè)計(jì)報(bào)告--圖書(shū)借閱管理系統(tǒng)
- c課程設(shè)計(jì)報(bào)告--圖書(shū)館管理系統(tǒng)
- c_課程設(shè)計(jì)-- 圖書(shū)館管理系統(tǒng)
- 圖書(shū)館管理系統(tǒng)課程設(shè)計(jì)c#
- c語(yǔ)言課程設(shè)計(jì)報(bào)告及源代碼_圖書(shū)館管理系統(tǒng)
- c++圖書(shū)館管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- 圖書(shū)館管理系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)--圖書(shū)館管理系統(tǒng)
- 圖書(shū)館管理系統(tǒng)課程設(shè)計(jì)
- 圖書(shū)館管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- 圖書(shū)館管理信息------系統(tǒng)課程設(shè)計(jì)
- jsp課程設(shè)計(jì)《圖書(shū)館管理系統(tǒng)》
- sqlserver課程設(shè)計(jì)——圖書(shū)館管理系統(tǒng)
評(píng)論
0/150
提交評(píng)論