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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  課程報告任務書</b></p><p> 題 目圖書信息管理系統(tǒng)</p><p> 主要內(nèi)容開發(fā)一個圖書信息管理系統(tǒng),圖書信息包括:圖書編號、書名、作者、出版社、類別、出版時間、價格等基本信息(也可以根據(jù)自己情況進行擴充,比如是否借出、庫存量等)。使之能提供以下基本功能:(1)圖書信息錄入功能(圖書信息用文件保存)--輸入(2)圖書信息

2、瀏覽功能--輸出(3)查詢功能(至少一種查詢方式)、排序功能(至少一種排序方式): ①按書名查詢 ②按作者名查詢 ③ 按照價錢排序 ④按出版時間排序等等(4)圖書信息的刪除與修改擴展功能:可以按照自己的程度進行擴展。比如(1)簡單的權限處理 (2)報表打印功能(3)甚至根據(jù)自己情況,可以加上學生信息,并擴充為圖書借閱系統(tǒng)。(4)模糊查詢 (5)綜合查詢 (6)統(tǒng)計功能 比如統(tǒng)計處某一類別的圖書信息 或 篩選出小于指定數(shù)量庫存的圖書

3、信息等等,總之,可以根據(jù)自己需求進行分析功能。</p><p> 任務要求一、提交材料應包括:(1)系統(tǒng)源代碼 (2)課程報告二、整個設計過程具體要求(1)需求分析 要求學生對案例系統(tǒng)進行分析,設計出需要完成的功能,完善各個模塊的調(diào)用關系;(2)設計過程 要求學生進一步明確各模塊調(diào)用關系,進一步完善模塊函數(shù)細節(jié)(函數(shù)名、參數(shù)、返回值等)(3)實現(xiàn)過程 要求學生養(yǎng)成良好的編碼習慣、完成各個模塊并進行測試,最終完

4、成系統(tǒng)整體測試;(4)總結(jié)階段 按照要求完成系統(tǒng)設計和實現(xiàn)報告,并進行總結(jié)、答辯。</p><p> 成績評定報告撰寫情況(30分)系統(tǒng)完成情況(30分)答辯情況(40分)總分</p><p> 內(nèi)容20分規(guī)范程度5分程序測試5分基本功能20分擴展功能10分自述情況10分答辯情況30分</p><p><b>  1需求分析</b>&l

5、t;/p><p>  開發(fā)一個圖書管理系統(tǒng)。</p><p>  一、圖書信息包括圖書編號、書名、作者、價格、出版社、出版日期、類別、館藏地址、庫存量。</p><p><b>  二、系統(tǒng)功能包括</b></p><p><b>  1 新建圖書信息庫</b></p><p>

6、<b>  2查詢圖書信息</b></p><p><b>  全部查詢 </b></p><p><b>  按書名查詢 </b></p><p><b>  按作者查詢 </b></p><p><b>  按類別查詢</b>&

7、lt;/p><p><b>  3 圖書排序</b></p><p><b>  按編號排序 </b></p><p><b>  按價格排序</b></p><p>  4 圖書信息插入(插入后仍按編號順序排放的)</p><p>  5 圖書信息刪除(按

8、書名查找刪除)</p><p>  6 圖書信息修改(按書名查詢到書后可以進行選擇對各項信息進行修改)</p><p><b>  7 圖書數(shù)目統(tǒng)計</b></p><p>  8 圖書信息保存在文件中</p><p>  三、在主函數(shù)里設計各個功能選項,然后調(diào)用相應的自定義子函數(shù)來實現(xiàn)功能。</p>&l

9、t;p><b>  2 概要設計</b></p><p><b>  (1) 數(shù)據(jù)結(jié)構</b></p><p>  主要數(shù)據(jù)結(jié)構:單鏈表</p><p><b>  //圖書信息結(jié)構體</b></p><p>  struct book</p><p

10、><b>  {</b></p><p>  char num[L]; //圖書編號</p><p>  char name[M]; //書名</p><p>  char writer[M]; //作者</p><p>  char publisher[M]; //出版社</p&

11、gt;<p>  char time[N]; //出版日期</p><p>  char category[n]; //類別 </p><p>  char room[N]; //館藏地址</p><p>  double price; //價格</p><p>  int amount;

12、 //庫存量</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(); // 新建圖書信息庫 </p><p>  struct book * scanf1_(); //輸入單本書的信息</p><p>  void pri

14、ntf1_(struct book *); //輸出單本書的信息</p><p>  void chaxun_(struct book *); //綜合查詢</p><p>  void chaxun_all(struct book *); //全部信息瀏覽</p><p>  void chaxun_n

15、ame(struct book *); //按書名查詢</p><p>  void chaxun_writer(struct book *); //按作者查詢</p><p>  void chaxun_category(struct book *); //按類別查詢</p><p>  struct book *num_ord

16、er(struct book *); //按編號排序</p><p>  struct book *price_order(struct book *); //按價格排序</p><p>  struct book *delete_(struct book *); //圖書信息刪除</p><p>  void change(struct book *

17、,char a[]); //圖書信息修改</p><p>  struct book *insert(struct book *); //圖書信息插入</p><p>  int count(struct book *); //圖書數(shù)目統(tǒng)計</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 詳細設計</b></p><p>  一main()主函數(shù)</p><p>  程序采用模塊化設計,主函數(shù)是程序的入口,各模塊獨立,可分塊調(diào)整,均由主函數(shù)控制。采用while死循環(huán)和switch分支語句編寫菜單選擇控制各個模塊的功能,每個模塊的功能由簡單

20、的基本函數(shù)構成。</p><p><b>  各個功能函數(shù)。</b></p><p>  //輸入單本書的信息</p><p>  定義一個結(jié)構體變量,輸入信息放在其中,然后將地址返回。源代碼如下</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("請輸入圖書編號:");</p><p>  gets(p1->num);</p

22、><p>  printf("請輸入書名:");</p><p>  gets(p1->name);</p><p>  printf("請輸入作者:");</p><p>  gets(p1->writer);</p><p>  printf("請輸入出版社

23、:");</p><p>  gets(p1->publisher);</p><p>  printf("請輸入出版日期(例如2011-01-01):");</p><p>  gets(p1->time);</p><p>  printf("請輸入圖書類別:");</p

24、><p>  gets(p1->category);</p><p>  printf("請輸入館藏地址:");</p><p>  gets(p1->room);</p><p>  printf("請輸入價格和庫存量:");</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、;  //輸出單本書的信息</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("圖書編號: ");</p><p>  puts(p->num);</p><p>  printf("書名: ");</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("圖書類別: ");</p><p>  puts(p->category);</p><p>  printf("館藏地址: ");</p><p>  puts(p->room);</p><p>  printf("價格 庫存量:%

30、5.1f%5d\n",p->price,p->amount);</p><p>  printf("\n");</p><p><b>  }</b></p><p>  // 新建圖書信息庫</p><p>  創(chuà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("注意:當圖書編號為 0 時輸入結(jié)束\n");</p><p><b>  do</b></p><p>  {printf("請輸入圖書的編號:");</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("請輸入書名:");</p><p>  gets(p1->name);</p><p>  printf("請輸入作者:");</p><p>  gets(p1->writer);</p><p>  printf("

35、請輸入出版社:");</p><p>  gets(p1->publisher);</p><p>  printf("請輸入出版日期:");</p><p>  gets(p1->time);</p><p>  printf("請輸入圖書類別:");</p>&l

36、t;p>  gets(p1->category);</p><p>  printf("請輸入館藏地址:");</p><p>  gets(p1->room);</p><p>  printf("請輸入價格和庫存量:");</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("圖書信息輸入結(jié)束!\n按Enter鍵繼續(xù)!");</p><p>  getchar();</p><p>  return head;</p><p><b>  }</b></p><p><b>  //綜合查詢</b></p><p&g

41、t;  該函數(shù)的參數(shù)是head,指向鏈表的首地址</p><p>  用switch分支出四個不同的查詢方式全部信息查詢、按書名查詢、按作者查詢、按類別查詢。</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("歡迎使用查詢功能\n");</p><p>  pr

43、intf("*******************************************************************\n");</p><p>  printf(" 0--退出查詢功能 \n");</p><p>  printf(" 1--全部信息查詢 2--按書名查詢\n"

44、;);</p><p>  printf(" 3--按作者查詢 4--按類別查詢\n");</p><p>  printf("*******************************************************************\n");</p><p>  printf("請選

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)退出查詢功能\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("輸入有誤,請重新輸入!\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>  //全部圖書信息瀏覽</p><p>  使用參數(shù)head傳遞鏈表的首地址,首先判斷鏈表是否為空,如果為空,則輸出提示信息;如果不為空,設一個指針變量p1,先指向第一個結(jié)點,輸出p1所指的結(jié)點,然后使p1后移一個結(jié)點,再輸出,直到鏈表的尾結(jié)點。即將鏈表中所有信息輸出。

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("書籍信息如下:\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>  其他的查詢?yōu)樵阪湵碇羞M行查找,查找到相匹配的就輸出信息。如</p><p>  //根據(jù)書名查詢圖書的信息</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("請輸入要查詢的書名:");</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;查詢到的書籍信息如下:\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("沒有找到書名為 %s 的圖書!\n",a);</p><p>  getchar();</p><p><b>  }</b></p><p

61、>  //用鏈表給書籍排序:按編號升序排序</p><p>  該函數(shù)按照圖書的編號用交換法進行排序。</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)計書書籍總數(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>  //將圖書信息插入到順序排放的鏈表中,插入后也是編號順序排放的。</p><p>  該函數(shù)有一個參數(shù),head頭結(jié)點指向鏈表的首地址,通過調(diào)用struct book * scanf1_() 函數(shù)得到圖書信息,然后按編號添加到鏈表上</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>  //刪除圖書信息</b></p><p>  該函數(shù)根據(jù)輸入圖書的書名,在鏈表中進行查找如果有匹配的,就將該書的信息刪除掉。最后返回刪除后的鏈表的頭結(jié)點。</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("請輸入要刪除的書名:");</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("沒有找到要刪除的數(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>  //修改圖書的信息。</p><p>  該函數(shù)根據(jù)在主函數(shù)中輸入圖書的書名,在鏈表中進行查找如果有匹配的,就可以先輸出該書的原信息,然后進行選擇對該圖書的各項信息進行修改。</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("沒有要找的書籍信息!\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、使用圖書信息修改功能\n\n");</p><p>  printf("你所要修改的書籍原信息如下:\n\n");</p><p>  printf1_(p1);</p><p>  printf("**************************************************\n");<

91、/p><p>  printf("* 0---放棄修改 5---修改出版日期 *\n"); </p><p>  printf("* 1---修改編號 6---修改圖書類別 *\n");</p><p>  printf("* 2---修改書名

92、 7---修改館藏地址 *\n");</p><p>  printf("* 3---修改作者 8---修改價格 庫存量 *\n");</p><p>  printf("* 4---修改出版社 *\n");</p>

93、;<p>  printf("**************************************************\n");</p><p>  printf("請選擇:");</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)退出對該書的修改功能\n按Enter鍵繼續(xù)"); &

95、lt;/p><p>  getchar();</p><p><b>  break;</b></p><p><b>  case 1: </b></p><p>  printf("請重新輸入編號:");</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("請重新輸入書名:");</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("請重新輸入作者:");</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("請重新輸入出版社:");</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("請重新輸入出版日期(例如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("請重新輸入圖書類別:");</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("請重新輸入館藏地址:");</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("請重新輸入價格和庫存量:");</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ù)寫入到文件</p><p>  在程序中的數(shù)據(jù)輸入和輸出是以終端

108、為對象的,當程序關閉后,數(shù)據(jù)也就丟失了,所以為了能隨時查閱數(shù)據(jù),必須將數(shù)據(jù)輸出到磁盤文件上保存起來,使用時人磁盤中讀入到內(nèi)存中,這就用到了磁盤文件的讀寫操作。</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("圖書信息庫.txt","w"))==NULL)</p><p><b>  {</b></p><p>  printf("文件 圖書信息庫.txt 打

110、開失敗");</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("文件成功保存到 圖書信息庫.txt 中!\n按Enter鍵繼續(xù)!");</p><p>  getchar();</p><p><b>  }</b></p><p>  //從文件讀入圖書信息</p><p>  為了程序關閉后丟失,我們將數(shù)據(jù)保存到磁

113、盤文件中,下一次對已經(jīng)有的數(shù)據(jù)進行的時候可以直接從文件中讀取數(shù)據(jù)進行操作。</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("圖書信息庫.txt","r"))==NULL)</p><p><b>  {</b></p><p>  printf("文件 圖書信息.txt 打開失敗\

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("是否要保存你操作中對圖書信息的改動?\n");</p><p>

121、  printf("************************************************\n");</p><p>  printf(" 1---是 2---否 3---取消 \n");</p><p>  printf("******************************

122、******************\n");</p><p>  printf("請選擇:");</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("沒有需要保存

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ù)中直接寫進輸入單本書信息的代碼時時,顯得有些龐大。</p><p>  另外定義了一個函數(shù)struct book * scanf1_();//輸入單本書的信息。用作被插入函數(shù)調(diào)用。</p><p>  從文件中讀取信息時發(fā)生錯

129、誤,</p><p>  原因是將信息寫入文件與從文件中讀取信息使用的文件名不完全相同。</p><p>  綜合查詢函數(shù)開始是每次只能查詢一次就退出功能了。</p><p>  解決方案:模仿主函數(shù),運用了while循環(huán),switch分支結(jié)構。是函數(shù)可以在推出前一直使用。并且加入了清屏函數(shù)讓使用更方便。</p><p>  修改函數(shù)原先每次

130、只能對一本書的一項信息進行修改。</p><p>  解決方案:像綜合查詢函數(shù)一樣在函數(shù)中運用了while循環(huán),可以對一本書的各項信息進行修改。而且在主函數(shù)中運用了while循環(huán),可以對多本書盡心修改。</p><p>  使用中有時候不知道下一步該干什么</p><p>  在程序中加入如printf("按Enter鍵繼續(xù)");的操作提示。&l

131、t;/p><p>  原來選擇退出時沒有后悔的余地,設計了一個退出函數(shù),最選擇退出后可以有文件保存提示和取消退出選擇</p><p><b>  5測試結(jié)果 </b></p><p><b>  6 課程心得總結(jié)</b></p><p>  這次編寫圖書信息管理系統(tǒng),讓我對c語言程序設計有了更深的認識和

132、體會。</p><p>  做一個系統(tǒng)就像完成一個工程。既要學會分步又要學會分塊。分步就是清楚整個程序的流程;分塊就是將整個程序分成各個相對獨立的模塊,一個個模塊完成,最后將其組合,就完成了整個程序。圖書管理系統(tǒng)中在主函數(shù)提供各個功能選項,而各個功能又有相應的功能函數(shù)實現(xiàn)。</p><p>  C語言程序設計聽不會,也看不會,只能做會。它是一門實踐技術,程序有問題了,一直想,根本不行,只要

133、到電腦上運行一下就解決問題了。</p><p>  編寫程序不要害怕出問題,只有通過不斷調(diào)試、改進。程序才能達到完善。程序在運行過程中要不斷地發(fā)現(xiàn)問題,改進系統(tǒng)。我在編寫中就對綜合查詢函數(shù)進行了多次改進,讓它可以循環(huán)使用,每次實現(xiàn)下次查詢功能前都會將上次的查詢結(jié)果清空。</p><p>  編寫的系統(tǒng)是讓人使用的,應讓系統(tǒng)運行中顯得人性化。每一步都要讓人知道該怎么操作,要在程序運行中對用戶

134、進行必要的提示。我在系統(tǒng)加入了許多注意保存、歡迎進入、按enter鍵繼續(xù)等語句。</p><p>  系統(tǒng)編寫是精工細活,不可急功近利。編寫系統(tǒng)過程中,要保持清醒的頭腦,也要有耐心。通過努力編寫成功后,會很有成就感。每次編寫程序先趕快完成時,總不能完成,搞得自己心煩意亂。直到最后告誡自己要一步步來時,程序編寫便有了很快進展。</p><p>  總之這次變成收獲很大,體會到了c語言的強大,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論