⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tsgl.cpp

📁 C语言编写的图书管理程序
💻 CPP
字号:
# include <iostream.h>
# include<iomanip.h>
# include<string.h>
# include<fstream.h>
const int Maxr=100;   //最多读者数
const int Maxb=100;   //最多图书数
const int Maxbor=5;   //每位读者最多借5本书
  


class Reader          //读者类
{
   int tag;           //删除标记: 1:已删  0:未删
   int no;            //读者编号
   char name[10];     //读者姓名
   int borbook[Maxbor];//所借图书
 public:
   Reader(){}
   char *getname(){return name;}  //获取姓名
   int gettag(){return tag;}      //获取删除标记
   int getno(){return no;}        //获取读者编号
   void setname(char na[])        //设置姓名
   {
      strcpy (name,na);
   }
   void delreader(){tag=1;}         //设置删除标记
   void addreader(int n,char *na) //增加读者
   {
      tag=0;
      no=n;
      strcpy(name,na);
      for(int i=0; i<Maxbor;i++)
         borbook[i]=0;
    }


    void borrowbook(int bookid)   //借书操作
    {
       for (int i=0;i<Maxbor;i++)
        {
          if (borbook[i]==0)
           {
             borbook[i]=bookid;
             return;
            }
         }
     }


     int  retbook(int bookid)     //还书操作
     {
         for (int i=0;i<Maxbor;i++)
          {
              if (borbook[i]==bookid)
               {
                   borbook[i]=0;
                    return 1;
                }
           }
           return 0;
      }
      void disp()                 //输出读者信息
      {
          cout<<setw(5)<<no<<setw(10)<<name<<setw(20)<<"借书编号: [";
          for (int i=0;i<Maxbor;i++)
              if (borbook[i]!=0)
                 cout<<borbook[i]<<"|";
           cout<<"]"<<endl;
       }
};




class RDatabase                  //读者库类
{
       int top;                  //读者记录指针
       Reader read[Maxr];        //读者记录
public:
       RDatabase()               //构造函数,将read.txt读到read[]中
       {
            Reader r;
            top=-1;
            fstream file("reader.txt",ios::in);
            while(1)
            {
                file.read((char*)&r,sizeof(r));
                if (!file)break;
                top++;
                read[top]=r;
            }
            file.close();
        }
        void clear()             //删除所有读者信息
        {
            top=-1;
        }
        int addreader(int n,char *na) //添加读者时先查找是否存在
        {
            Reader *p=query(n);
            if(p==NULL)
            {
                 top++;
                 read[top].addreader(n,na);
                 return 1;
             }
             return  0;
         }
         Reader *query(int readerid)   //按编号查找
         {
             for (int i=0;i<=top;i++)
                  if (read[i].getno()==readerid && read[i].gettag()==0)
                     return  &read[i];
             return NULL;
          }
          void disp()                //输出所有读者信息
          {
             for (int i=0;i<=top;i++)
if (read[i].gettag()==0)
                   read[i].disp();
          }

          void readerdata();         //读者库维护
          ~RDatabase()               //析构函数,将read[]写到read.txt中
          {
              fstream file ("reader.txt",ios::out);
              for (int i=0;i<=top;i++)
                    if (read[i].gettag()==0)
                        file.write((char*)&read[i],sizeof(read[i]));
              file.close();
           }
           };
           void RDatabase::readerdata()
           {  
              int choice=1;
              char rname[20];
              int readerid;
              Reader *r;
              while(choice!=0)
              {
                     cout<<"读者维护 1:新增  2:更改  3:删除  4:查找  5:显示  6:全删  0:退出=>";
                     cin>>choice;
                     switch(choice)
                     {

                     case 1:
                          cout<<"输入读者编号:";
                          cin>>readerid;
                          cout<<"输入读者姓名:";
                          cin>>rname;
                          
						  r=query(readerid);
						  if (r!=NULL)
						  {
							  cout<<"该读者编号已经存在,请重新增加"<<endl;
							  break;
						  }
                          addreader(readerid,rname);
                          break;

                     case 2:
                          cout<<"输入读者编号:";
                          cin>>readerid;
                          r=query(readerid);
                          if (r==NULL)
                          {
                              cout<<"该读者不存在"<<endl;
                              break;
                          }
                          cout<<"输入新的姓名:";
                          cin>>rname;
                          r->setname(rname);
                          break;

                     case 3:
                          cout<<"输入读者编号:";
                          cin>>readerid;
                          r=query(readerid);
                          if (r==NULL)
                          {
                              cout<<"该读者不存在"<<endl;
                              break;
                          }
                          r->delreader();
                            break;

                     case 4:
                          cout<<"输入读者编号:";
                          cin>>readerid;
                          r=query(readerid);
                          if (r==NULL)
                          {
                              cout<<"该读者不存在"<<endl;
                              break;
                          }
                          r->disp();
                          break;

                     case 5:
                          disp();
                          break;

                     case 6:
                          clear();
                          break; 
                     }
             }
};



class Book             //图书类
{
   int tag;            //删除标记1:已删0:未删
   int no;             //图书编号
   char name[20];      //书名
   int onshelf;        //是否在架1:在架0:已借
 public:
   Book(){}
   char *getname(){return name;} //获取姓名
   int gettag(){return tag;}     //获取删除标记
   int getno(){return no;}       //获取图书编号
   void setname(char na[])       //设置书名
   {
      strcpy (name,na);
   }
   void delbook(){tag=1;}       //删除图书
   void addbook(int n,char *na) //增加图书
   {
      tag=0;
      no=n;
      strcpy(name,na);
      onshelf=1;
    }


    int borrowbook()            //借书操作
    {
       
          if (onshelf==1)
           {
             onshelf=0;
             return 1;
           }
           return 0;
     }


     void  retbook()            //还书操作
     {
         onshelf=1;
      }
      void disp()               //输出图书 
      {
          cout<<setw(6)<<no<<setw(18)<<name<<setw(10)<<(onshelf==1?"在架":"已借")<<endl;

          
       }
};



class BDatabase               //图书库类
{
       int top;              //图书记录指针
       Book book[Maxb];      //图书记录
public:
       BDatabase()          //构造函数,将book.txt读到book[]中
       {
            Book b;
            top=-1;
            fstream file("book.txt",ios::in);
            while(1)
            {
                file.read((char*)&b,sizeof(b));
                if (!file)break;
                top++;
                book[top]=b;
            }
            file.close();
        }
        void clear()         //全删
        {
            top=-1;
        }

        int addbook(int n,char *na)  //增加图书
        {
            Book *p=query(n);
            if(p==NULL)
            {
                 top++;
                 book[top].addbook(n,na);
                 return 1;
             }
             return  0;
         }

         Book *query(int bookid)     //查找图书
         {
             for (int i=0;i<=top;i++)
                  if (book[i].getno()==bookid && book[i].gettag()==0)
                     return  &book[i];
             return NULL;
          }
          void bookdata();          //图书库维护
          void disp()
          {
             for (int i=0;i<=top;i++)
                if(book[i].gettag()==0)
                book[i].disp();
          }
          
          ~BDatabase()              //析构函数,将book[]写入book.txt中
          {
              fstream file ("book.txt",ios::out);
              for (int i=0;i<=top;i++)
                    if (book[i].gettag()==0)
                        file.write((char*)&book[i],sizeof(book[i]));
              file.close();
           }
           };
           void BDatabase::bookdata()
           {  
              int choice=1;
              char bname[10];
              int bookid;
              Book *b;
              while(choice!=0)
              {
                     cout<<"图书维护 1:新增  2:更改  3:删除  4:查找  5:显示  6:全删  0:退出=>";
                     cin>>choice;
                     switch(choice)
                     {

                     case 1:
                          cout<<"输入图书编号:";
                          cin>>bookid;
                          cout<<"输入图书书名:";
                          cin>>bname;
                         
                          b=query(bookid);
						  if (b!=0)
						  {
							  cout<<"该图书编号已经存在,请重新增加"<<endl;
						  }
 addbook(bookid,bname);
                          break;

                     case 2:
                          cout<<"输入图书编号:";
                          cin>>bookid;
                          b=query(bookid);
                          if (b==NULL)
                          {
                              cout<<"该图书不存在"<<endl;
                              break;
                          }
                          cout<<"输入新的书名:";
                          cin>>bname;
                          b->setname(bname);
                          break;

                     case 3:
                          cout<<"输入图书编号:";
                          cin>>bookid;
                          b=query(bookid);
                          if (b==NULL)
                          {
                              cout<<"该图书不存在"<<endl;
                              break;
                          }
                          b->delbook();
                            break;

                     case 4:
                          cout<<"输入图书编号:";
                          cin>>bookid;
                          b=query(bookid);
                          if (b==NULL)
                          {
                              cout<<"该图书不存在"<<endl;
                              break;
                          }
                          b->disp();
                          break;

                     case 5:
                          disp();
                          break;

                     case 6:
                          clear();
                          break; 
                     }
             }
};




void main()
{
      int choice=1,bookid,readerid;
      RDatabase ReaderDB;
      Reader *r;
      BDatabase BookDB;
      Book *b;
      while (choice!=0)
      {
         cout<<"1: 借书 2: 还书 3: 图书维护 4: 读者维护 0: 离开=>";
         cin>>choice;
         switch(choice)
          {

            case 1:
               cout<<" 借书  读者编号:";
               cin>>readerid;
               cout<<"图书编号:";
               cin>>bookid;
               r=ReaderDB.query(readerid);
                  if (r==NULL)
                  {
                      cout<<"不存在该读者,不能借书"<<endl;
                      break;
                  }
                  b=BookDB.query(bookid);
                    if (b==NULL)
                  {
                       cout<<"不存在该图书,不能借书"<<endl;
                      break;
                  } 
                  if (b->borrowbook()==0)
                  {
                       cout<<"该图书已借出,不能借书"<<endl;
                      break;
                  }
                  r->borrowbook(b->getno());
                  break;

         case 2:
             cout<<" 还书  读者编号:";
               cin>>readerid;
               cout<<"图书编号:";
               cin>>bookid;
               r=ReaderDB.query(readerid);
                  if (r==NULL)
                  {
                      cout<<"不存在该读者,不能还书"<<endl;
                      break;
                  }
                  b=BookDB.query(bookid);
                    if (b==NULL)
                  {
                       cout<<"不存在该图书,不能还书"<<endl;
                      break;
                  } 
                  b->retbook();
                  r->retbook(b->getno());
                  break;

        case 3:
           BookDB.bookdata();
           break;

        case 4:
           ReaderDB.readerdata();
           break;
        }
    }
}    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -