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

📄 main.cpp

📁 简易图书管理系统说明文档 1.新书入库: 2.借书: 3.还书: 4.查询图书: 5.查询读者: 6.显示所有超期读者: 7
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************
/*title:面向对象程序设计大作业:简易图书管理系统                            *
/*请用C++,开发一个简易图书管理系统,至少需要提供如下功能:                 *
/*1.新书入库:                                                             *
/*2.借书:                                                                 *
/*3.还书:                                                                 *
/*4.查询图书:                                                             *
/*5.查询读者:                                                             *
/*6.显示所有超期读者:                                                     *
/*7.显示所有超期图书:                                                     *
/*读者有:                                                                  *
/*1.本科生 每人每证可借4 本书,每本书可以借60 天                           *
/*2.硕士研究生 每人每证可借8 本书,每本书可以借90 天                       *
/*3.博士研究生 每人每证可借10 本书,每本书可以借120 天                     *
/*4.教师 每人每证可借10 本书,每本书可以借120 天                           *
/*书有:书名、作者、出版社、出版时间、ISBN 号等信息,(不考虑同一个         *
/*书图书馆可能有多本的情况)。                                              *
/*×××××××××××××××××××××××××××××××××××××*
/* 姓名:徐冬  学号:220513052 专业:嵌入式软件工程                         *
/****************************************************************************/

#include <iostream.h> //cout
#include <stdlib.h>
#include <iomanip.h> //setw()
#include <conio.h>   //getch()
#include <string.h>
#include <fstream.h>
#include <time.h>
#include <stdio.h>


const int Maxbor=10;     //每个读者最多借借10本 
const int MaxReader=100; //读者上限 
const int MaxBook=100;   //图书上限 
const int f=50;//常数设置  输出域宽
//本科生每人每证可借4 本书,每本书可以借60 天
const int u_MaxBor=4;
const int u_MaxDay=60;
//硕士研究生 每人每证可借8 本书,每本书可以借90 天
const int m_MaxBor=8;
const int m_MaxDay=90;
//教师 博士研究生 每人每证可借10 本书,每本书可以借120 天 
const int dt_MaxBor=10;
const int dt_MaxDay=120;
//全局变量
int retno=0;//用于不同功能模块之间的切换
int userid; //用户id

//-------------------------Book类---------------------------------------------------
class Book
{
private:
	char BookName[30];//书名
    char author[10];  //作者 
	char publish[20]; //出版社
	int  onshelf;     //是否在架 1:在架 0:已借 
	int  bookid;      //图书id
    int  tag;         //删除标记 1:已删 0:未删 

    int curday;       //记录下借书时处于一年中的第几天
	int borrowDay;    //记录该书可以借多少天
public:
	Book() 
	{
	
	    onshelf=1;
        curday=0;
		borrowDay=0;
	}

	Book(char na[],char code[],char au[],char pub[],int no)
	{
        strcpy(BookName,na);
        strcpy(author,au);
	    strcpy(publish,pub);
	    bookid=no;
	    onshelf=1;
        curday=0;
		borrowDay=0;

	}
    //设置图书相关属性
    void setbook(int id,char *name,char *au,char *pub)
	{
	    bookid=id;
        strcpy(BookName,name);
		strcpy(author,au);
		strcpy(publish,pub);
        tag=0;
		onshelf=1;
        curday=0;
		borrowDay=0;
    }

    //设置书名 
	void setname(char na[])     { strcpy(BookName,na);}
	
    //设置作者 
    void setAuthor(char au[])   { strcpy(author,au); }

    //设置出版社
    void setPublish(char pub[]) { strcpy(publish,pub);}

    //设置借书时处于一年中的第几天
	void setCurDay(int day) {curday=day;}

    //设置该书可以借多少天
	void setBorrowDay(int day) {borrowDay=day;}

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

    //还书操作 
	void retbook()   { onshelf=1;} 
	 
    //设置图书ID
	void setId(int no) { bookid=no; }
	
     //输出图书
    void disp()  
	{ 
      cout<<bookid<<setw(18)<<BookName<<setw(20)<<author<<setw(20)<<publish<<setw(20)<<(onshelf==1? "在架":"已借")<<endl; 
	}

    //设置删除标记
	void delbook() {tag=1;} 

    //获得删除标记 
    int gettag() {return tag;} 

    //获得是否在架标记 
	int getonshelf() {return onshelf;}

    //获得书编号 
    int getid() {return bookid;} 
	char *getname() {return BookName;}
	char *getauthor() {return author;}
	char *getpub() {return publish;}
	int getCurDay() {return curday;}
	int getBorrowDay() {return borrowDay;}
};
//--------------------------Reader类----------------------------------------------------------
class Reader
{
private:
	char Name[20]; //姓名
	char sex[2];   //性别
	int  readerID; //证件号码
	char email[20];//邮件
	int  tag;      //删除标记 1:已删,0:未删

	int readType;  //读者类型 1:本科本 2.硕士研究生 3.博士研究生 4.教师
    int BorBook;   //根据读者类型不同而借书本数不同
	int MaxDay;    //根据读者类型不同而借书天数不同
	int borbook[Maxbor]; //所借图书数组中存放所借图书ID号
	

public:
    Reader() 
	{
		BorBook=0;
	    MaxDay=0;
		tag=0; 
		readType=0;
		for (int i=0;i<Maxbor;i++) 
        borbook[i]=0;
	}
	
    char *getname() {return Name;}  //获取姓名
	char *getEmail() {return email;}//获取Email
	char *getSex() {return sex;}    //获取性别  
    int getID() {return readerID;}  //获取读者证件号码
	int gettag() {return tag;}      //获取删除标记 
    int getMaxDay() {return MaxDay;}//获取借书最大天数
	int getBorBook() {return BorBook;}//获取借书最大本数
	
	//设置姓名
	void setname(char na[])  { strcpy(Name,na); }

    //设置性别
    void setSex(char s[])  { strcpy(sex,s); }

    //设置mail
    void setEmail(char m[])  { strcpy(email,m); }

    //设置ID
	void setID(int id)  { readerID=id; }

    //设置最多借书本数
	void setBorBook(int Nbook) { BorBook=Nbook; }

    //设置最多借书天数
	void setMaxDay(int Nday) { MaxDay=Nday; }

    //设置读者类型
	void setType(int type) { readType=type; }

    //增加读者
	void setReader(int id,char *na,char *s,char *mail,int Nbook,int Nday)  
	{ 
      
       readerID=id; 
       strcpy(Name,na); 
       strcpy(sex,s); 
	   strcpy(email,mail);
	   BorBook=Nbook;
	   MaxDay=Nday;
     }
       
	
    //借书操作 
    void borrowbook(int bookid) 
	{
		

        for (int i=0;i<BorBook;i++) 
		{ 
             if (borbook[i]==0) 
			 { 
               borbook[i]=bookid; 
               cout<<"ok!"<<endl;
			   return;
			 } 
			  
		} 
	} 

	//还书操作
    int retbook(int bookid)  
	{ 
        for (int i=0;i<BorBook;i++) 
		{ 
           if (borbook[i]==bookid) 
		   { 
              borbook[i]=0; 
			  return 1; 
		   } 
		} 
              return 0; 
	} 
	//判断borbook[]是否为空 为空返回1,否则返回0
	int checkbook()
	{
       for (int i=0;i<BorBook;i++) 
	   { 
		   if(borbook[i]!=0)
			   return 0;

		}
	   return 1;
	}

    //删除读者
    int deluser() 
	{
		if(checkbook()==1)
		{
			tag=1;
		    return 1;
		}
		else
		{
			cout<<"该读者还有借书,不能删除!"<<endl;
			tag=0;
			return 0;
		}
	} 

   //输出读者信息 
	void disp() 
	{ 
        cout<<setw(5)<<readerID<<setw(10)<<Name<<setw(10)<<sex<<setw(15)<<"借书编号:["; 
        for (int i=0;i<BorBook;i++) 
        {
		if (borbook[i]!=0) 
        cout<<borbook[i]<<"|"; 
		}
        cout<<"]"<<endl; 
		
    } 

	//返回数组中有多少个值
	int retCount()
	{
        for (int i=0;i<BorBook;i++) 
	   { 
		   if(borbook[i]==0)
			   return i;

		}
	   return BorBook;
	}

};


//-------------------------读者数据库-----------------------------------------------------
class readerDB
{
private:
	int top; //读者记录指针 
     Reader read[MaxReader]; //读者记录 对象数组
public:
    //构造函数,将reader.txt读到read[]中
    readerDB()
	{
       Reader s; 
	   fstream file;
       top=-1; 
       
	   file.open("reader",ios::in); 

       while (1) 
	   { 
        file.read((char *)&s,sizeof(s)); 
        if (!file) break; 
        top++; 
        read[top]=s; 
	   } 

       file.close();
	}

    //增加用户到数据库中
	int addReader(int id,char *na,char *s,char *mail,int Nbook,int Nday)
	{
	 Reader *p=query(id); 
       if (p==NULL) 
	   { 
         top++; 
         read[top].setReader(id,na,s,mail,Nbook,Nday); 
         return 1; 
	   } 
         return 0;
	}

    //重载addReader(int id,char *na,char *s)
	int addReader(Reader &b)
	{
	 Reader *p=query(b.getID()); 
	 
       if (p==NULL) 
	   { 
         top++; 
         read[top].setReader(b.getID(),b.getname(),b.getSex(),b.getEmail(),b.getBorBook(),b.getMaxDay()); 
         return 1; 
	   } 
         return 0;
	}

    //删除所有读者信息
	void clear()  { top=-1;} 
	 
	//按编号查找 
	Reader *query(int readerid) 
	{ 
      for (int i=0;i<=top;i++) 
      {
		  if (read[i].getID()==readerid && read[i].gettag()==0) 
              return &read[i]; 
	  }
		      return NULL; 
	}

   //输出所有读者信息
   void dispAll()  
   { 
       for (int i=0;i<=top;i++) 
		   if (read[i].gettag()==0)//未删除就输出
           read[i].disp(); 
	} 

   //将read[]写入reader.txt文件中 
   void	WriteDB() 
   { 
      fstream file("reader",ios::out); 
      for (int i=0;i<=top;i++) 
      if (read[i].gettag()==0) 
      file.write((char *)&read[i],sizeof(read[i])); 
      file.close(); 
   } 
};


//--------------------图书数据库------------------------------------------------
class bookDB
{
private:
         int top; //图书记录指针 
         Book book[MaxBook]; //图书记录

public:
    //构造函数,将book.txt读到book[]中 
	bookDB() 
	{ 
       Book b; 
       top=-1; 
       fstream file("book",ios::in); 
          while (1) 
		  { 
              file.read((char*)&b,sizeof(b)); 
              if (!file) break; 
              top++; 
              book[top]=b; 
		  } 

          file.close(); 
	}

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

     //增加图书 重载addbook(int n,char *na,char *au,char *pub) 
     int addbook(Book &b)  
	 { 
        Book *p=query(b.getid()); 
        if (p==NULL) 
		{ 
          top++; 
          book[top].setbook(b.getid(),b.getname(),b.getauthor(),b.getpub()); 
          return 1; 
		} 
        return 0; 
	 }

    //全删 
	 void clear()  { top=-1; } 
	  
	//查找图书 
	Book *query(int bookid) 
	{ 
       for (int i=0;i<=top;i++) 
       if (book[i].getid()==bookid && book[i].gettag()==0)  
		   return &book[i]; 
        
		   return NULL; 
	} 

    //显示所有图书信息
	void showbook()
	{
      for(int i=0;i<=top;i++) 
       if (book[i].gettag()==0) 
            book[i].disp(); 
	}

	// 将book[]写入book.txt文件中 
    void WriteDB() 
	{ 
            fstream file("book",ios::out); 
            for (int i=0;i<=top;i++) 
            if (book[i].gettag()==0) 
            file.write((char*)&book[i],sizeof(book[i])); 
            file.close(); 
	} 
};

//FFFFFFFFFFFFFFFFFFFFFF以下是功能函数FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

//新书入库
void bookIn(Book &b,bookDB &db)
{
	int id;
	char name[20];
	char pub[15];
	char author[10];
    int choose;
system("cls");  //清屏
cout<<"新书入库"<<endl<<endl;
cout<<"请输入图书ID:";
cin>>id;
cout<<"请输入图书名:";
cin>>name;
cout<<"请输入作者名:";
cin>>author;
cout<<"请输入出版社:";
cin>>pub;

if(db.query(id)!=NULL)  
{
	cout<<"该图书ID已存在,请按任意键重新输入:"<<endl;
    retno=51;
	getch();
}
else
{
b.setId(id);
b.setname(name);
b.setAuthor(author);
b.setPublish(pub);


cout<<"入库成功!"<<endl<<endl;

cout<<"按任意数字键继续..."<<endl<<endl;
cout<<"按数字0键退出...   "<<endl<<endl;
cout<<"返回上一层目录请按1键..."<<endl<<endl;

cin>>choose;

if(choose==0)  retno=3;

if(choose==1)  retno=41;

}



}

//删除图书
void bookOut(bookDB &db)
{
	Book *p;
	int id;
	char choose;
    system("cls");  //清屏
    cout<<"删除图书"<<endl<<endl;
    cout<<"请输入删除图书ID:";
    cin>>id;
    p=db.query(id); 

    if (p==NULL)  cout<<"该图书不存在"<<endl; 
	else if(p->getonshelf()==0) cout<<"该图书已借出,不能删除!"<<endl;
    else{p->delbook();    cout<<"该图书已删除"<<endl; }


    cout<<"是否继续删除y/n..."<<endl<<endl;
    cout<<"返回上一层目录请按B键..."<<endl<<endl;
    cin>>choose;

    if(choose=='n') retno=3;

    if(choose=='y') retno=55;

    if(choose=='b') retno=41;

}

//删除读者
void userOut(readerDB &db)
{
   int id;
   Reader *r;
   char choose;

   system("cls");  //清屏
   cout<<"删除读者"<<endl<<endl;
   cout<<"请输入删除读者ID:";
   cin>>id;
   r=db.query(id); 
     if (r==NULL) 
	{ 
	   cout<<"该读者不存在"<<endl; 
	  
	} 
	 else
	 {
	 if(r->deluser()==1)
	 cout<<"该读者已删除"<<endl; 
	 }

   cout<<"是否继续删除y/n..."<<endl<<endl;

⌨️ 快捷键说明

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