圖書(shū)館管理系統(tǒng)c語(yǔ)言課程設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論