图书管理系统课程设计报告()

课程设计报告

2009~20##学年第二学期

20##年8月

图书管理系统

一、题目

名称:图书管理系统。

二、设计要求及问题的分析

     设计要求:设计小型的图书管理系统,需要用链表来存储图书的基本信息(包括书名、编号、作者、出版社情况等)图书维护、图书查询、离开等功能。

问题的分析:程序应提供的基本管理功能有:

插入:即增加一本图书的记录到系统中,在class  CBook类中定义插入图书函数CBook *Insert(CBook *head,CBook *p),通过函数将一本图书信息插入到链表中。

存储:即将图书信息保存在一个文件中;通过链表来存储图书的信息在,class  CBook类中定义将插入图书信息写入文件函数和将修改图书信息写入文件函数:void SaveInsert(CBook *head)和void SaveChange(CBook *head),通过函数可以将相应图书信息写入相应文件中,从而得到储存目的。

装入:即将文件中的信息读入程序,在class  CBook类中定义创建链表函数:CBook *Create(),通过函数将文件中信息装入链表,从而实现一系列操作。

查询:可根据书名、编号查找书的相关信息,若找到显示该书全部信息; 在class  CBook类中定义查找图书函数void FoundNumber(CBook *head,double Number)和void FoundBookname(CBook *head,string Bookname),通过函数可以实现按书名查询图书信息和按编号查询图书信息。           

修改:可修改一本书的除书名外其它信息; 在class  CBook类中定义删除图书信息函数CBook *Delete(CBook *head,double Number),通过函数可以对链表操作,删除相应编号图书信息。

状态:提供该书存在、不存在的状态。

显示:即显示图书的信息,在class  CBook类中定义显示图书信息函数,void Show(CBook *head),通过函数显示全部图书信息。

三、算法设计

(1) 根据要求,我设计了一个class  CBook类,利用类class  CBook定义了各自的对象item及对象指针对其函数进行调用实现各种功能。

以下是函数功能表:

数据功能表:

(2)设计菜单来实现功能设计如:

        图      书     查     询     管     理                                       1 按编号查找                                                 

   2 按书名查找

0 主菜单              

(3)主函数实现,调用各种函数。

四、上机调试过程

1、调试过程中遇到的问题及修改:

(1)括号的使用,在循环中最为重要。在函数中用到循环或选择的时候,经常忘记写后面的括号,导致程序老是出错。经过多次更改,使我对此错误有了深刻的认识,所以每次循环和选择语句写完时下意识里都注意一下有没有忘记写括号。

(2)静态常量和全局变量的声明和使用及其作用域。以前对这方面的理解就很模糊,但是这次课程设计并没有用到这个,因此对这个理解还是不透彻。

(3)文件的使用。这次程序设计用到了文件方面的知识,所以发现了几个问题,比如文件的存储,我在主函数中声明了文件库函数,也定义了构造函数将文件读入函数中,可是每次输入了数据后,退出后再进入时,以前输入的数据都消失了,这个问题困扰了我好久,后来在高手的帮助下明白了,我没有正常退出系统,导致数据丢失!再试,输入数据后正常退出,果然数据保存了下来。看来程序设计必须要严谨,一丁点的马虎都会导致错误。

(4)break的使用,在循环中最为重要。在函数中用到循环或选择的时候,经常忘记写后面的break,导致程序老是出错。经过多次更改,使我对此错误有了深刻的认识,所以每次循环和选择语句写完时下意识里都注意一下有没有忘记或多写

2、算法改进设想和体会:

对于图书的管理系统的程序设计,我通过粗写和不断改进,源程序基本上达到了老师所要求的功能。但实际情况肯定比要求的复杂的多,比如说图书被读者损坏或丢失了,按照什么标准来赔偿?图书有很多种,计算机、经济、历史、地理方面的等等,怎样来给图书分类,以便读者的查找?还有程序没有设定图书借阅的日期和期限。对于这些问题的解决,还需要不断累积编程的经验和更多的知识积累。

五、用户手册

(1)首先进入主页面提示要进行什么任务:

图      书     管     理     系     统

                                      1 输出所有图书信息

                                      2 添加一本图书信息

                                      3 修改图书信息

                                      4 查看图书信息

                                      5 删除图书信息

              "                       0 退出

(2)添加图书信息页面:

(3)修改图书信息页面:

图      书     修    改     管     理                                      1 按编号修改

   2 按书名修改

0 主菜单

(4)读查询图书信息页面:

图      书     查     询     管     理                                     1 按编号查找

   2 按书名查找

0 主菜单

(5)删除页面

六、测试结果及分析

1.主页面:

2.添加图书信息页面:

3. 修改图书信息页面:

4. 查询图书信息页面:

六、参考书目

[1].郑莉 等编著《C++语言程序设计(第三版)》北京:清华大学出版社

[2].郑莉 等编著《C++语言程序设计(第三版)学生用书》北京:清华大学出版社

[3].李春葆 等编著《C++程序设计学习与上机实验指导》 北京:清华大学出版社

[4].范辉 等编著《Visual C++6.0程序设计简明教程》 高等教育出版社

七、总结

   过这次编写图书管理系统我把这学期学习的知识系统的连起来了,并且温习了学习过的知识.而且也让我知道了学习不能只顾学习学校里的知识,同时也应该关注一些实用的讯息,增加自己的知识面,不断的充实自己,不然就算你学习的很好,但别的事都不知道那又有什么用呢?所以在学习知识的时候也要理解社会上的一些情况。

   通过这次课程设计,让我了解了更多关于设计时容易出现的错误,而且进一步的认识到平时学习积累的重要性。在刚进行编译的时候发现了很多的错误,都是平时应该注意的细节问题,还好与同学进行了很好的交流,得以纠正错误。

   由于能力问题,我只能设计这个简单的图书管理系统。它存在很多缺陷,在很多地方都存在不足。编写程序最重要的是谨慎,认真,因为哪怕是一个字符或一个标点的错误都会导致程序的错误,从而使程序无法调试运行。

   由这次编写课程设计的过程中让我更加了解到了自己的不足,那就是对编写程序的经验不足以及对理论知识的掌握不够透彻,以致程序中还存在许多缺点。

   经过本次课程设计,使我对计算机语言有了更深的认识,同时给我今后对计算机的学习有许多启示和帮助。

在编写程序的过程中我得到了一些启发,在编程时一定要心平气和细心在细心,因为有时候就是因为的小小的差错就会造成无法估量的后果,有时候一个错误我找半天才找到,结果令自己特别的生气,因为那是一个很不起眼的却因自己的大意而造成的错误,结果发费那么的时间去找那么小的错误,简直太浪费时间,但这却就是因为自己的一时疏忽而造成的,所以

在编写程序时一定要心静,要不然只会事半功半,那还不如不写。而且有时自己把问题解决了,有一种扬眉吐气的快感,很有成就感。

而且通过这次程序的设计,让我找到了自身的很多不足之处,就比如说本来该程序还可以加上排序和分类等,一些知识的,但由于能力有限,不能实现该功能,这让我感到很遗憾,我也知道要想成为个合格的程序员,必须要谨慎,不能粗细大意。同时这次的程序设计,也让我对自己的能力有了一定的了解,这让感觉很好。

源程序

#include "iostream"

#include "string"

#include "fstream"

#include "iomanip"

using namespace std;

class CBook

{

private:

double number;

string bookname,people,chu_ban_she;

    CBook *next;

public:

    CBook()

{  }

   void SetNumber(double Number);

   void SetPeople(string People);

   void SetBookname(string Bookname);

   void SetChu_ban_she(string Chu_ban_she);

 

   CBook *Create();

   void SaveInsert(CBook *head);

   void SaveChange(CBook *head);

   void Show(CBook *head);

 

   CBook *Insert(CBook *head,CBook *p);

   CBook *ChangeNumber(CBook *head,double Number);

   CBook *ChangeBookname(CBook *head,string Bookname);

   void FoundNumber(CBook *head,double Number);

   void FoundBookname(CBook *head,string Bookname);

   CBook *Delete(CBook *head,double Number);

  

};

void CBook::SetNumber(double Number)

{

  number=Number;

}

void CBook::SetPeople(string People)

{

  people=People;

}

void CBook::SetBookname(string Bookname)

{

  bookname=Bookname;

}

void CBook::SetChu_ban_she(string Chu_ban_she)

{

  chu_ban_she=Chu_ban_she;

}

CBook *CBook:: Create()                   //创建链表

{

  CBook *p,*q,*head;

  CBook item;

  char s[80];

  p=head=q=new CBook;

  ifstream file("图书.txt");

   file.getline(s,80);

 file>>number>>people>>bookname>>chu_ban_she;

  item.SetNumber(number);

  item.SetPeople(people);

 item.SetBookname(bookname);

 item.SetChu_ban_she(chu_ban_she);

 *p=item;

//cout<<item.DisplayNumber()<<setw(8)<<item.DisplayPeople()<<setw(20)<<item.DisplayBookname()<<setw(20)<<item.DisplayChu_ban_she(chu_ban_she)<<endl;

   while(!file.eof())

  {   p=new CBook;

  q->next=p;

  q=p;

  file>>number>>people>>bookname>>chu_ban_she;

      item.SetNumber(number);

      item.SetPeople(people);

  item.SetBookname(bookname);

  item.SetChu_ban_she(chu_ban_she);

 *p=item;

//cout<<item.DisplayNumber()<<setw(8)<<item.DisplayPeople()<<setw(20)<<item.DisplayBookname()<<setw(20)<<item.DisplayChu_ban_she()<<endl;

  }

  p->next=NULL;

 file.close();

  return head;

}

void CBook::SaveInsert(CBook *head)          //将插入信息写进文件

CBook *p;

ofstream file("图书(插入).txt");

    p=head;

    file<<"编号        作者           书名              出版社"<<endl;

while(p!=NULL)

     file<<p->number<<setw(12)<<p->people<<setw(15)<<p->bookname<<setw(20)<<p->chu_ban_she<<endl;

        p=p->next;

}

file.close();

}

void CBook::SaveChange(CBook *head)          //将修改信息写入文件

CBook *p;

ofstream file("图书(修改).txt");

    p=head;

    file<<"编号        作者           书名              出版社"<<endl;

while(p!=NULL)

     file<<p->number<<setw(12)<<p->people<<setw(15)<<p->bookname<<setw(20)<<p->chu_ban_she<<endl;

        p=p->next;

}

file.close();

}

void menu()                             //主菜单

{

  

         cout<<"                图      书     管     理     系     统 "<<endl;

              cout<<"                          1 输出所有图书信息           "<<endl;

         cout<<"                          2 添加一本图书信息           "<<endl;

         cout<<"                          3 修改图书信息               "<<endl;

         cout<<"                          4 查看图书信息               "<<endl;

          cout<<"                          5 删除图书信息               "<<endl;

         cout<<"                          0 退出                       "<<endl;

}

void Menu()

{

 

  cout<<"\n\n\n\n\n\n";

  cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;

  cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$                        $$$$$$$$$$$$$$$$$$$$$$$$"<<endl;

  cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$         进入系统       $$$$$$$$$$$$$$$$$$$$$$$$"<<endl;

  cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$                        $$$$$$$$$$$$$$$$$$$$$$$$"<<endl;

  cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;

}

        

void Foundmenu()                   //查询菜单

{

         cout<<"                图      书     查     询     管     理 "<<endl;

              cout<<"                          1 按编号查找                 "<<endl;

         cout<<"                          2 按书名查找                 "<<endl;

          cout<<"                          0 主菜单                     "<<endl;

}

void Changemenu()                 //修改菜单

{

         cout<<"                图      书     修     改     管     理 "<<endl;

              cout<<"                          1 按编号修改                 "<<endl;

         cout<<"                          2 按书名修改                 "<<endl;

          cout<<"                          0 主菜单                     "<<endl;

}

void CBook::Show(CBook *head)              //输出

 {

  CBook *p;

   p=head;

  while(p!=NULL)

  {

  cout<<p->number<<setw(12)<<p->people<<setw(13)<<p->bookname<<setw(28)<<p->chu_ban_she<<endl;

  p=p->next;

  }

}

CBook * CBook::Insert(CBook *head,CBook *n)          //插入

{

CBook *q,*p;

  p=head;

if(head==NULL)  

    { head=n;   head->next=NULL;}

 else

    {

      while(p->number<n->number&&p->next!=NULL)

      { q=p;

        p=p->next;

      }

   

  if(n->number<=p->number)

        { if(head==p)   

              head=n;  

           else

              q->next=n;      

           n->next=p;

        }

   else

        {

          p->next=n;

          n->next=NULL;

        }

     }

return  head;

}

CBook  *CBook::ChangeNumber(CBook *head,double Number)          //按编号修改

{

CBook *p;

p=head;

while(p->number!=Number)

{  

  p=p->next;

  if(p==NULL)

  {cout<<"您要查找的书籍不存在"<<endl;  break;}

}

if(p->number==Number)

{  cout<<"请输入要修改的信息:编号        作者                       出版社"<<endl;

  double Number;

  string People,Chu_ban_she;

  cin>>Number>>People>>Chu_ban_she; 

  p->number=Number; 

  p->people=People;

  p->chu_ban_she=Chu_ban_she;

cout<<"修改后的信息:\n编号       作者         书名               出版社"<<endl;

cout<<p->number<<setw(8)<<p->people<<setw(16)<<p->bookname<<setw(20)<<p->chu_ban_she<<endl;

 system("pause");

     system("cls"); 

}

 return head;

}

CBook *CBook::ChangeBookname(CBook *head,string Bookname)                //按书名修改

{

CBook *p;

p=head;

while(p->bookname!=Bookname)

{   

  p=p->next;

  if(p==NULL)

  {cout<<"您要查找的书籍不存在"<<endl;  break;}

}

if(p->bookname==Bookname)

{  cout<<"请输入要修改的信息:编号        作者                         出版社"<<endl;

  double Number;

  string People,Chu_ban_she;

  cin>>Number>>People>>Chu_ban_she; 

  p->number=Number; 

  p->people=People;

  p->chu_ban_she=Chu_ban_she;

cout<<"修改后的信息:\n编号       作者         书名               出版社"<<endl;

cout<<p->number<<setw(8)<<p->people<<setw(16)<<p->bookname<<setw(20)<<p->chu_ban_she<<endl; 

 system("pause");

     system("cls");

}

  return head;

}

void CBook::FoundNumber(CBook *head,double Number)                 //按编号查找

{  

CBook *p;

    p=head;

 while(p->number!=Number)

  {  

 

  p=p->next;

  if(p==NULL)

  {cout<<"您要查找的书籍不存在"<<endl;  break;}

 

  }

  if(p->number==Number)

cout<<"本图书的信息:\n编号        作者         书名                 出版社"<<endl;

   cout<<p->number<<setw(12)<<p->people<<setw(13)<<p->bookname<<setw(30)<<p->chu_ban_she<<endl;

    system("pause");

     system("cls");

}

}

void CBook::FoundBookname(CBook *head,string Bookname)                 //按书名查找

{  

CBook *p;

    p=head;

  while(p->bookname!=Bookname)

  {  

 

  p=p->next;

  if(p==NULL)

  {cout<<"您要查找的书籍不存在"<<endl;  break;}

 

  }

if(p->bookname==Bookname)

cout<<"本图书的信息:\n编号        作者         书名                 出版社"<<endl;

    cout<<p->number<<setw(12)<<p->people<<setw(13)<<p->bookname<<setw(30)<<p->chu_ban_she<<endl;

 system("pause");

    system("cls");

}

}

CBook *CBook::Delete(CBook *head,double Number)               //删除

{

CBook *p,*q;

p=head;

if(p->number==Number)

{ p=p->next; free(p);  return  head;  }

while(p!=NULL&&p->number==Number)

  { 

     q=p;

     p=p->next ;

         free(q);        

      }

 if(p==NULL)

   return NULL;

 q=p->next;

 while(q!=NULL)

   {  if(q->number==Number)

        {  p->next=q->next;

           free(q);

        }

       else

         p=q;  

     q=p->next;

   }

 return  head;

}

void main()

{

CBook item;

CBook *head;

double Number;

string Bookname,People,Chu_ban_she;

int choice,choice3,choice4;

head=item.Create();

Menu();

 system("pause");

system("cls");

while('1')

{   

menu();

cout<<"请选择要执行的操作:";

cin>>choice;

system("pause");

     system("cls");

switch(choice)

{

 case 1: cout<<"编号        作者         书名                 出版社"<<endl;

          item.Show(head);

          system("pause");

              system("cls"); 

          break;

 case 2:  cout<<"请输入要添加图书的信息:编号        作者        书名        出版社"<<endl;

          CBook *p;

          p=new CBook;

          cin>>Number>>People>>Bookname>>Chu_ban_she;

          item.SetNumber(Number);

          item.SetPeople(People);

          item.SetBookname(Bookname);

          item.SetChu_ban_she(Chu_ban_she);

          *p=item;

          head=item.Insert(head,p);

          item.SaveInsert(head);

              break;

 case 3: while('1')

          {  Changemenu();

            cout<<"请选择要执行的操作:";

                 cin>>choice3;

            system("pause");

                 system("cls");

             switch(choice3)

             { 

             case 1: cout<<"请输入要修改图书的编号:";

                     cin>>Number;

                     head=item.ChangeNumber(head,Number);

                     item.SaveChange(head);

                     break;

             case 2: cout<<"请输入要修改图书的书名:";

                     cin>>Bookname;

                     head=item.ChangeBookname(head,Bookname);

                     item.SaveChange(head);

                     break;

             default:    break;

             }break;

          }  break;     

     case 4: while('1')

          {  Foundmenu();

            cout<<"请选择要执行的操作:";

                 cin>>choice4;

            system("pause");

                 system("cls");

                 switch(choice4)

             { 

             case 1: cout<<"请输入要查看图书的编号:";

                     cin>>Number;

                     item.FoundNumber(head,Number);

                     break;

             case 2: cout<<"请输入要查看图书的书名:";

                     cin>>Bookname;

                     item.FoundBookname(head,Bookname);

                     break;

                default:     break;

                }break;

          } break;

          

     case 5: cout<<"请输入要删除图书编号"<<endl;

          cin>>Number;

          item.Delete(head,Number);

 }

 if(choice==0)

   break;

}

}

相关推荐