c++課程設計報告--小型圖書管理系統(tǒng)_第1頁
已閱讀1頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  《c++語言程序設計》</p><p><b>  課程設計報告</b></p><p>  設計題目: 小型圖書管理系統(tǒng) </p><p>  學 院: </p><p>  班 級: </

2、p><p>  姓 名: </p><p>  2013 年12月 27 日</p><p>  目 錄</p><p>  1.設計目標…………………………………………………3</p><p>  2.題目要求…………………………………………………3</p

3、><p>  3.設計思想…………………………………………………3</p><p>  4.類及對象設計……………………………………………4</p><p>  5.關鍵代碼…………………………………………………5</p><p>  6.調試記錄…………………………………………………14</p><p>  7. 總結…

4、……………………………………………………17</p><p><b>  1.設計目標</b></p><p>  設計一個小型的圖書管理系統(tǒng),用鏈表來存儲讀者的基本信息(包括姓名、讀者編號、讀者借書情況等),完成借書、還書、圖書維護、讀者維護、離開等功能。</p><p><b>  2. 題目要求</b></p&

5、gt;<p><b>  小型圖書管理系統(tǒng)</b></p><p><b>  1.需求分析:</b></p><p>  本系統(tǒng)對一個小型圖書館圖書、讀者以及借閱信息進行管理</p><p>  2.程序的基本功能:</p><p>  1)、增加、修改、刪除一個圖書資料。</

6、p><p>  2)、增加、修改、刪除一個讀者資料。</p><p>  3)、增加、修改、刪除借閱信息。</p><p>  4)、按條件顯示讀者、圖書以及借閱信息</p><p><b>  3.設計思想</b></p><p>  (1) 設計class Reader讀者信息庫,實現(xiàn)對讀者信息的

7、描敘; class RDatabase讀者類庫實現(xiàn)建立讀者的個人資料;class Book圖書類,實現(xiàn)對圖書的描述,圖書的編號,書名,借出,還入等;class BDatabase圖書庫類,實現(xiàn)對圖書的維護,查找,刪除等。以下是函數(shù)功能表: </p><p>  (2)用類的成員函數(shù)對鏈表的數(shù)據(jù)進行操作,其功能如上表所列。</p><p>  (3)設計菜單來實現(xiàn)功能設計</p>

8、<p><b>  1、 借 書</b></p><p><b>  2、 還 書</b></p><p>  3、 圖 書 維 護</p><p>  4 、讀 者 維 護</p><p><b>  0 、離 開</b></p><p>

9、;<b>  4.設計類及對象</b></p><p> ?。?) 本程序定義了三個類,定義如下:</p><p>  class Reader </p><p><b>  {</b></p><p><b>  private:</b></p><p&g

10、t;  char *getname() {return name;} //獲取姓名 </p><p>  int gettag() {return tag;} //獲取刪除標記 </p><p>  int getno() {return no;} //獲取讀者編號 </p><p>  void setname(char na[]) //設置姓名 </p

11、><p>  void delbook(){ tag=1; }//設置刪除標記 1:已刪 0:未刪 </p><p>  void addreader(int n,char *na)//增加讀者 </p><p>  int retbook(int bookid)//還書操作</p><p>  void disp()//讀出讀者信息</p

12、><p><b>  };</b></p><p>  class RDatabase </p><p><b>  { </b></p><p><b>  private: </b></p><p>  int top; //讀者記錄指針 </p&

13、gt;<p>  Reader read[Maxr];//讀者記錄 </p><p><b>  public: </b></p><p>  RDatabase() //構造函數(shù),將reader.txt讀到read[]中</p><p>  void clear()//刪除所有讀者信息</p><p> 

14、 int addreader(int n,char *na)//添加讀者時先查找是否存在 </p><p>  Reader *query(int readerid)//按編號查找</p><p>  void disp() //輸出所有讀者信息</p><p>  void readerdata();//讀者庫維護</p><p>  ~R

15、Database() //析構函數(shù),將read[]寫到reader.txt文件中</p><p><b>  };</b></p><p>  class Book </p><p><b>  { </b></p><p><b>  private:</b></p&g

16、t;<p>  char *getname() { return name; }//獲取姓名 </p><p>  int getno(){ return no; }//獲取圖書編號 </p><p>  int gettag(){ return tag; }//獲取刪除標記 </p><p>  void setname(char na[])//設置

17、書名 </p><p>  void delbook(){ tag=1;}//刪除圖書 </p><p>  void addbook(int n,char *na)//增加圖書</p><p>  int borrowbook()//借書操作 </p><p>  void retbook()//還書操作 </p><p

18、>  void disp()//輸出圖書</p><p>  class BDatabase </p><p><b>  { </b></p><p><b>  private:</b></p><p>  BDatabase()//構造函數(shù),將book.txt讀到book[]中</

19、p><p>  void clear()//全刪</p><p>  int addbook(int n,char *na)//增加圖書</p><p>  Book *query(int bookid)//查找圖書</p><p>  void bookdata();//圖書庫維護 </p><p>  ~BDataba

20、se()//析構函數(shù),將book[]寫到book.txt文件中</p><p><b>  };</b></p><p> ?。?)分別利用類class Reader 、class RDatabase、class Book 、class BDatabase 定義了各自的對象Book book[Maxb]、RDatabase ReaderDB; Reader *r; B

21、Database BookDB; Book *b;對其函數(shù)進行調用實現(xiàn)各種功能。</p><p> ?。?)主函數(shù)實現(xiàn),調用各種函數(shù)。</p><p><b>  5.關鍵代碼</b></p><p>  class Reader </p><p><b>  { </b></p>&

22、lt;p><b>  private: </b></p><p>  int tag; //刪除標記 1:已刪 0:未刪 </p><p>  int no; //讀者編號 </p><p>  char name[10]; //讀者姓名 </p><p>  int borbook[Maxbor];//所借圖書

23、</p><p><b>  public: </b></p><p>  Reader() {} </p><p>  char *getname() {return name;} //獲取姓名 </p><p>  int gettag() {return tag;} //獲取刪除標記 </p><

24、;p>  int getno() {return no;} //獲取讀者編號 </p><p>  void setname(char na[]) //設置姓名 </p><p><b>  { </b></p><p>  strcpy(name,na); </p><p><b>  } </b

25、></p><p>  void delbook(){ tag=1; }//設置刪除標記 1:已刪 0:未刪 </p><p>  void addreader(int n,char *na)//增加讀者 </p><p><b>  { </b></p><p><b>  tag=0; </b&

26、gt;</p><p><b>  no=n; </b></p><p>  strcpy(name,na); </p><p>  for(int i=0;i<Maxbor;i++) </p><p>  borbook[i]=0; </p><p><b>  } </b

27、></p><p>  void borrowbook(int bookid)//借書操作 </p><p><b>  { </b></p><p>  for(int i=0;i<Maxbor;i++) </p><p><b>  { </b></p><p&g

28、t;  if (borbook[i]==0) </p><p><b>  { </b></p><p>  borbook[i]=bookid; </p><p><b>  return; </b></p><p><b>  } </b></p><p

29、><b>  }</b></p><p><b>  } </b></p><p>  int retbook(int bookid)//還書操作 </p><p><b>  { </b></p><p>  for(int i=0;i<Maxbor;i++) &

30、lt;/p><p><b>  { </b></p><p>  if(borbook[i]==bookid) </p><p><b>  { </b></p><p>  borbook[i]=0; </p><p>  return 1; </p><p

31、><b>  } </b></p><p><b>  } </b></p><p>  return 0; </p><p><b>  } </b></p><p>  void disp()//讀出讀者信息 </p><p><b>

32、;  { </b></p><p>  cout << setw(5) << no <<setw(10) << name<<"借書編號:["; </p><p>  for(int i=0;i<Maxbor;i++) </p><p>  if(borbook[i]!=

33、0) </p><p>  cout << borbook[i] << "|"; </p><p>  cout << "]"<<endl; </p><p><b>  } </b></p><p><b>  }; &l

34、t;/b></p><p>  //讀者類庫,實現(xiàn)建立讀者的個人資料 </p><p>  class RDatabase </p><p><b>  { </b></p><p><b>  private: </b></p><p>  int top; //讀者

35、記錄指針 </p><p>  Reader read[Maxr];//讀者記錄 </p><p><b>  public: </b></p><p>  RDatabase() //構造函數(shù),將reader.txt讀到read[]中 </p><p><b>  { </b></p>

36、<p>  Reader s; </p><p><b>  top=-1; </b></p><p>  fstream file("reader.txt",ios::in);//打開一個輸入文件 </p><p>  while (1) </p><p><b>  { &

37、lt;/b></p><p>  file.read((char *)&s,sizeof(s)); </p><p>  if (!file)break; </p><p><b>  top++; </b></p><p>  read[top]=s; </p><p><b

38、>  } </b></p><p>  file.close(); //關閉 reader.txt </p><p><b>  } </b></p><p>  void clear()//刪除所有讀者信息 </p><p><b>  { </b></p><

39、;p><b>  top=-1; </b></p><p><b>  } </b></p><p>  int addreader(int n,char *na)//添加讀者時先查找是否存在 </p><p><b>  { </b></p><p>  Reader

40、*p=query(n); </p><p>  if (p==NULL) </p><p><b>  { </b></p><p><b>  top++; </b></p><p>  read[top].addreader(n,na); </p><p>  retur

41、n 1; </p><p><b>  } </b></p><p>  return 0; </p><p><b>  } </b></p><p>  Reader *query(int readerid)//按編號查找 </p><p><b>  { &l

42、t;/b></p><p>  for (int i=0;i<=top;i++) </p><p>  if (read[i].getno()==readerid && </p><p>  read[i].gettag()==0) </p><p><b>  { </b></p>

43、;<p>  return &read[i]; </p><p><b>  } </b></p><p>  return NULL; </p><p><b>  }</b></p><p>  void disp() //輸出所有讀者信息 </p><

44、p><b>  { </b></p><p>  for (int i=0;i<=top;i++) </p><p>  read[i].disp(); </p><p><b>  } </b></p><p>  void readerdata();//讀者庫維護 </p>

45、;<p>  ~RDatabase() //析構函數(shù),將read[]寫到reader.txt文件中 </p><p><b>  { </b></p><p>  fstream file("reader.txt",ios::out); </p><p>  for (int i=0;i<=top;i++

46、) </p><p>  if (read[i].gettag()==0) </p><p>  file.write((char *)&read[i],sizeof(read[i])); </p><p>  file.close(); </p><p><b>  } </b></p><

47、p><b>  }; </b></p><p>  void RDatabase::readerdata() </p><p><b>  { </b></p><p>  char choice; </p><p>  char rname[20]; </p><p>

48、;  int readerid; </p><p>  Reader *r; </p><p>  while (choice!='0') </p><p><b>  { </b></p><p>  cout <<"\n\n\t\t\t讀 者 維 護\n\n\n\t\t 1 新

49、增\n\n\t\t 2 更改\n\n\t\t 3 刪 除\n\n\t\t 4 查 找\n\n\t\t 5 顯 示\n\n\t\t 6 全 刪\n\n\t\t 0 退出"<<endl; </p><p>  cin >> choice; </p><p>  switch (choice) </p><p><b>  {

50、</b></p><p>  case '1': </p><p>  cout << "輸入讀者編號:"; </p><p>  cin >> readerid; </p><p>  cout << "輸入讀者姓名:"; </p&

51、gt;<p>  cin >> rname; </p><p>  addreader (readerid,rname); </p><p><b>  break; </b></p><p>  case '2': </p><p>  cout << "

52、輸入讀者編號:"; </p><p>  cin >> readerid; </p><p>  r=query(readerid); </p><p>  if (r==NULL) </p><p><b>  { </b></p><p>  cout <<

53、" 該讀者不存在 "<<endl; </p><p><b>  break; </b></p><p><b>  } </b></p><p>  cout << "輸入新的姓名:"; </p><p>  cin >>

54、 rname; </p><p>  r->setname(rname); </p><p><b>  break; </b></p><p>  case '3': </p><p>  cout << " 輸入讀者編號:"; </p><p&

55、gt;  cin >> readerid; </p><p>  r=query(readerid); </p><p>  if (r==NULL) </p><p><b>  { </b></p><p>  cout <<" 該讀者不存在" << endl;

56、 </p><p><b>  break; </b></p><p><b>  } </b></p><p>  r->delbook(); </p><p><b>  break; </b></p><p>  case '4

57、9;: </p><p>  cout << "讀入讀者編號:"; </p><p>  cin >> readerid; </p><p>  r=query(readerid); </p><p>  if (r==NULL) </p><p><b>  {

58、</b></p><p>  cout <<"該讀者不存在"<< endl; </p><p><b>  break; </b></p><p><b>  } </b></p><p>  r->disp(); </p>

59、<p><b>  break; </b></p><p>  case '5': </p><p><b>  disp(); </b></p><p><b>  break; </b></p><p>  case '6': &

60、lt;/p><p><b>  clear(); </b></p><p><b>  break; </b></p><p>  default:cout<<"輸入錯誤,請從新輸入:";break; </p><p><b>  } </b><

61、;/p><p><b>  } </b></p><p><b>  } </b></p><p>  //圖書類,實現(xiàn)對圖書的描述,圖書的編號,書名,借出,還入等 </p><p>  class Book </p><p><b>  { </b><

62、;/p><p><b>  private: </b></p><p>  int tag;//刪除標記 1:已刪 0:未刪 </p><p>  int no;//圖書編號 </p><p>  char name[20];//書名 </p><p>  int onshelf;//是否再架 1:再

63、架 2:已借 </p><p><b>  public: </b></p><p><b>  Book(){} </b></p><p>  char *getname() { return name; }//獲取姓名 </p><p>  int getno(){ return no; }//

64、獲取圖書編號 </p><p>  int gettag(){ return tag; }//獲取刪除標記 </p><p>  void setname(char na[])//設置書名 </p><p><b>  { </b></p><p>  strcpy(name,na); </p><p

65、><b>  } </b></p><p>  void delbook(){ tag=1;}//刪除圖書 </p><p>  void addbook(int n,char *na)//增加圖書 </p><p><b>  { </b></p><p><b>  tag=0;

66、 </b></p><p><b>  no=n; </b></p><p>  strcpy(name,na); </p><p>  onshelf=1; </p><p><b>  } </b></p><p>  int borrowbook()//借書

67、操作 </p><p><b>  { </b></p><p>  if (onshelf==1) </p><p><b>  { </b></p><p>  onshelf=0; </p><p>  return 1; </p><p>&l

68、t;b>  } </b></p><p>  return 0; </p><p><b>  } </b></p><p>  void retbook()//還書操作 </p><p><b>  { </b></p><p>  onshelf=1;

69、</p><p><b>  } </b></p><p>  void disp()//輸出圖書 </p><p><b>  { </b></p><p>  cout << setw(6) << no << setw(18) << name &l

70、t;< setw(10) </p><p>  <<(onshelf==1? "在架":"已借") <<endl; </p><p><b>  } </b></p><p><b>  }; </b></p><p>  //圖

71、書庫類,實現(xiàn)對圖書的維護,查找,刪除等 </p><p>  class BDatabase </p><p><b>  { </b></p><p><b>  private: </b></p><p>  int top; //圖書記錄指針 </p><p>  Bo

72、ok book[Maxb]; //圖書記錄 </p><p><b>  public: </b></p><p>  BDatabase()//構造函數(shù),將book.txt讀到book[]中 </p><p><b>  { </b></p><p><b>  Book b; <

73、/b></p><p><b>  top=-1; </b></p><p>  fstream file("book.txt",ios::in); </p><p>  while (1) </p><p><b>  { </b></p><p>

74、;  file.read((char *)&b,sizeof(b)); </p><p>  if (!file) break; </p><p><b>  top++; </b></p><p>  book[top]=b; </p><p><b>  } </b></p>

75、<p>  file.close(); </p><p><b>  } </b></p><p>  void clear()//全刪 </p><p><b>  { </b></p><p><b>  top=-1; </b></p><

76、;p><b>  } </b></p><p>  int addbook(int n,char *na)//增加圖書 </p><p><b>  { </b></p><p>  Book *p=query(n); </p><p>  if (NULL==p) </p>&

77、lt;p><b>  { </b></p><p><b>  top++; </b></p><p>  book[top].addbook(n,na); </p><p>  return 1; </p><p><b>  } </b></p><

78、;p>  return 0; </p><p><b>  } </b></p><p>  Book *query(int bookid)//查找圖書 </p><p><b>  { </b></p><p>  for (int i=0;i<=top;i++) </p>

79、<p>  if (book[i].getno()==bookid &&book[i].gettag()==0) </p><p><b>  { </b></p><p>  return &book[i]; </p><p><b>  } </b></p><

80、p>  return NULL; </p><p><b>  } </b></p><p>  void bookdata();//圖書庫維護 </p><p>  void disp() </p><p><b>  { </b></p><p>  for (in

81、t i=0;i<=top;i++) </p><p>  if (book[i].gettag()==0) </p><p>  book[i].disp(); </p><p><b>  } </b></p><p>  ~BDatabase()//析構函數(shù),將book[]寫到book.txt文件中 </

82、p><p><b>  { </b></p><p>  fstream file("book.txt",ios::out); </p><p>  for (int i=0;i<=top;i++) </p><p>  if (book[i].gettag()==0) </p>&l

83、t;p>  file.write((char *)&book[i],sizeof(book[i])); </p><p>  file.close(); </p><p><b>  } </b></p><p><b>  }; </b></p><p>  void BDataba

84、se::bookdata() </p><p><b>  { </b></p><p>  char choice; </p><p>  char bname[40]; </p><p>  int bookid; </p><p><b>  Book *b; </b>

85、</p><p>  while (choice!='0') </p><p><b>  { </b></p><p>  cout <<"\n\n\n\t\t\t圖 書 維 護 "<<endl<<endl; </p><p>  cout<

86、<"\t\t1 新 增\n \t\t2 更 改\n\t\t3 刪 除\n\t\t4 查 找\n\t\t5 顯示\n\t\t6 全 刪\n\t\t0 退 出"<<endl; </p><p>  cin >> choice; </p><p>  switch (choice) </p><p><b>  

87、{ </b></p><p>  case '1': </p><p>  cout << "輸入圖書編號:"<<endl; </p><p>  cin >> bookid; </p><p>  cout << "輸入圖書書名:&qu

88、ot;<<endl; </p><p>  cin >> bname; </p><p>  addbook(bookid,bname); </p><p><b>  break; </b></p><p>  case '2': </p><p>  c

89、out << "輸入圖書編號:"<<endl; </p><p>  cin >> bookid; </p><p>  b=query(bookid); </p><p>  if (b==NULL) </p><p><b>  { </b></p>

90、<p>  cout << " 該圖書不存在 "<<endl; </p><p><b>  break; </b></p><p><b>  } </b></p><p>  cout << "輸入新的書名:"<<en

91、dl; </p><p>  cin >> bname; </p><p>  b->setname(bname); </p><p><b>  break; </b></p><p>  case '3': </p><p>  cout <<&q

92、uot; 讀入圖書編號:"<<endl; </p><p>  cin >> bookid; </p><p>  b=query(bookid); </p><p>  if (b==NULL) </p><p><b>  { </b></p><p>  c

93、out <<" 該圖書不存在" << endl; </p><p><b>  break; </b></p><p><b>  } </b></p><p>  b->delbook(); </p><p><b>  break; &

94、lt;/b></p><p>  case '4': </p><p>  cout << " 讀入圖書編號:"<<endl; </p><p>  cin >> bookid; </p><p>  b=query(bookid); </p><

95、;p>  if (b==NULL) </p><p><b>  { </b></p><p>  cout <<" 該圖書不存在"<< endl; </p><p><b>  break; </b></p><p><b>  } &l

96、t;/b></p><p>  b->disp(); </p><p><b>  break; </b></p><p>  case '5': </p><p><b>  disp(); </b></p><p><b>  bre

97、ak; </b></p><p>  case '6': </p><p><b>  clear(); </b></p><p><b>  break; </b></p><p>  default:cout<<"輸入錯誤,請從新輸入:"

98、;; </p><p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p><p><b>  6.調試紀錄 </b></p><p>  1、讀者維護界面,新增讀者

99、功能</p><p>  2、程序的主界面以及圖書維護界面 </p><p>  3、查找讀者功能界面</p><p><b>  7.總結</b></p><p>  通過這次課程設計,讓我了解了更多關于設計時容易出現(xiàn)的錯誤,而且進一步的認識到平時學習積累的重要性。在剛進行編譯的時候發(fā)現(xiàn)了很多的錯誤,都是平時應該注意的

100、細節(jié)問題,還好與同學進行了很好的交流,得以糾正錯誤。</p><p>  由于能力問題,我只能設計這個簡單的圖書管理系統(tǒng)。它存在很多缺陷,在很多地方都存在不足。編寫程序最重要的是謹慎,認真,因為哪怕是一個字符或一個標點的錯誤都會導致程序的錯誤,從而使程序無法調試運行。</p><p>  由這次編寫課程設計的過程中讓我更加了解到了自己的不足,那就是對編寫程序的經(jīng)驗不足以及對理論知識的掌握不

溫馨提示

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

評論

0/150

提交評論