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

📄 525.cpp

📁 图书管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*                  课程题目:图书管理系统
  *问题描述:设计已图书管理系统,该图书管理系统分为借书、还书、图书维护和读者
             维护等四个部分,系统总框图如图所示:
  *算法分析:
  1、设计一个读者类Reader,包括一个读者的基本管理功能,具有以下私有数据:
          int tag;           //删除标记  1:已删   0:未删
          int no;            //读者编号
          char name[10];     //读者姓名
          int borbook[Marbor];     //所借图书
  2、设计一个读者库类RDatabase,具有以下私有数据:
          int top;       //读者记录指针
          Reader read[Maxr];      //读者记录
     在其构造函数中,将reader.txt文件的所有记录读到read[]中。处理完毕,在析构
  函数中将read[]中的所有未删记录写入到reader.txt文件中,中间的处理都是对
  read[]进行的。
  3、设计一个图书类Book,包括一本图书的基本管理功能,私有数据包括: 
           int tag;          //删除标记 1:已删   0:未删
           int no;          //图书编号
           char name[20];    //书名
           int onshelf;      //是否在架 1:在架   0:已借
  4、设计一个图书库类Bdatabase,私有数据包括:
            int top;         //图书记录指针
            Book book[Maxb];  //图书记录
      在其构造函数中,将book.txt文件的所有记录读到book[]中。处理完毕,在析构
   函数中讲book[]中的所有未删记录写入到book.txt文件中,中间的处理都是对book[]
   进行的。*/
  //各个模板的设计分析
  //1、调用系统库函数
      #include"iostream.h"
      #include"iomanip.h"
      #include"string.h"
      #include"fstream.h"
  //2、定义常数据
      const int Maxr=100;     //最多的读者数
      const int Marb=100;     //最多的图书数
      const int Maxbor=5;     //每位读者最多借5本书
  //3、定义读者类
       class Reader 
       {
	    private:
	        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 delbook()          //设置删除标记
              {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;
						  cout<<"\t 借书成功"<<endl; 
                          return ;
                       }
                    }
                }
             int retbook(int bookid)             //还书操作
                {
                   for(int i=0;i<Maxbor;i++)
                     {
                       if(borbook[i]==bookid)
                         {
                           borbook[i]=0;
						   cout<<"\t 还书成功"<<endl;
                           return 1;
                          }
					   cout<<"还书失败"<<endl;
                      }
                      return 0; 
                 }
              void disp()             //输出读者信息
                 {
                   cout<<setw(5)<<no<<setw(10)<<name<<"      借书编号:[";
                   for(int i=0;i<Maxbor;i++)
                         if(borbook[i]!=0)
                            cout<<borbook[i]<<"|";
                    cout<<"]"<<endl;
                  }
       }; 
  //定义读者库类
       class RDatabase
       {
         private:
           int top;                 //读者记录指针
           Reader read[Maxr];       //读者记录
         public:
           RDatabase()
           {
              Reader s;             //建立读者类的对象s
              top=-1;               
              fstream file("reader.txt",ios::in);        //构造函数,将reader.txt读到read[]中
              while(1)
              {
                   file.read((char *)&s,sizeof(s));
                   if(!file)
                     break;
                   top++;
                   read[top]=s;
               }
               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++)
                 read[i].disp();
            }
            void readerdata();          //读者维护 
            ~RDatabase()                //析构函数,将read[]写入reader.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;
                        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->delbook();
                        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         //图书类
       {
         private:
              int tag;             //删除标记  1:已删   0:未删 
              int no;              //图书编号
              char name[20];       //书名
              int onshelf;         //是否在架   1:在架  0:已借
         public:
              Book(){};

⌨️ 快捷键说明

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