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

📄 bookadmin.txt

📁 一个简单的实验室管理系统源代码
💻 TXT
字号:
  
  #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   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;   
  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   
  <<   "   借书编号:[";   
  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()//构造函数,将reader.txt读到read[]中   
  {   
  Reader   s;   
  top=-1;   
  fstream   file("reader.txt",ios∷in);   
  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;   
  }   
  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   getno()   {   return   no;   }//获取图书编号   
  int   gettag()   {   return   tag;   }   //获取删除标记   
  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[40];   
  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;   
  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 + -