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

📄 main.cpp

📁 简易图书管理系统说明文档 1.新书入库: 2.借书: 3.还书: 4.查询图书: 5.查询读者: 6.显示所有超期读者: 7
💻 CPP
📖 第 1 页 / 共 2 页
字号:
   cout<<"返回上一层目录请按B键..."<<endl<<endl;
   cin>>choose;
   if(choose=='n') retno=3;

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

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

//借书操作
void borrowbook(bookDB &Bdb,readerDB &Rdb)
{
	int bookid;
	Book *b;
    Reader *r;
	char choose;
	//-----取时间函数------
	struct tm *local;
    time_t t;
    t=time(NULL);
    local=localtime(&t);
    //---------------------
    system("cls");  //清屏
    cout<<"借书操作..."<<endl<<endl;


    r=Rdb.query(userid);//获得userid的指针



	if(r->retCount()<r->getBorBook())//判断用户借书是否已满
	{
		    cout<<"你已借了"<<r->retCount()<<"本书,"<<"还有"<<(r->getBorBook())-(r->retCount())<<"本书可借!"<<endl<<endl;
            cout<<"请输入要借图书编号:";
            cin>>bookid;
            b=Bdb.query(bookid); //获得bookid的指针
            

            if (b==NULL) cout<<"该图书不存在,不能借书"<<endl; 
				
	        else if (b->borrowbook()==0)  cout<<"该书已借出,你不能借!"<<endl; 
					
	        else {
				r->borrowbook(bookid);
				cout<<"借书成功!"<<endl; 

				cout<<"当前时间为"<<local->tm_year-100+2000<<"年"<<local->tm_mon+1<<"月"<<local->tm_mday<<"日"<<endl;
				b->setCurDay(local->tm_yday);
				b->setBorrowDay(r->getMaxDay());
			    
			
			} 
	
            cout<<"是否继续借书y/n..."<<endl<<endl;
            cout<<"返回上一层目录请按B键..."<<endl<<endl;
            cin>>choose;
            if(choose=='n') retno=3;

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

            if(choose=='b') retno=42;
	}
	else
	{
		cout<<"你已借满"<<r->getBorBook()<<"本书"<<"不可再借!"<<endl;
        cout<<"返回上一层目录请按B键..."<<endl<<endl;
        cin>>choose;
		if(choose=='b') retno=42;
	}
}

//还书操作
void retbook(bookDB &Bdb,readerDB &Rdb)
{
	int bookid;
	Book *b;
    Reader *r;
	char choose;

    system("cls");  //清屏
    cout<<"还书操作..."<<endl<<endl;
    cout<<"输入要还图书编号:";
    cin>>bookid;
    b=Bdb.query(bookid);//查询图书
    r=Rdb.query(userid);//查询用户

   if (b==NULL) cout<<"不存在该图书,不能还书"<<endl; 

   else
   {				
    b->retbook();
    r->retbook(bookid); 
	cout<<"还书成功!"<<endl;			
   }

   cout<<"是否继续还书y/n..."<<endl<<endl;
   cout<<"返回上一层目录请按B键..."<<endl<<endl;
   cin>>choose;
   if(choose=='n') retno=3;

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

   if(choose=='b') retno=42;
}

//查询图书
void findbook(bookDB &db)
{
	int bookid;
	Book *b;
	char choose;
    system("cls");  //清屏
    cout<<"查询图书..."<<endl<<endl;

    cout<<"输入图书编号:"; 
    cin>>bookid; 
    b=db.query(bookid); //查询图书
    if (b==NULL)   cout<<"该图书不存在"<<endl; 
					
   else
	   b->disp(); //显示图书

   cout<<"是否继续输入y/n..."<<endl<<endl;
   cout<<"返回上一层目录请按B键..."<<endl<<endl;
   cin>>choose;
   if(choose=='n') retno=3;

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

   if(choose=='b') retno=42;
					
}

//显示所有读者 52
void showAllUser(readerDB &db)
{
   char choose;
   system("cls");  //清屏
   cout<<"显示所有读者..."<<endl<<endl;
   db.dispAll();

   cout<<endl;
   cout<<"返回上一层目录请按B键..."<<endl;

   cin>>choose;
   if(choose=='b') retno=41;
}

//显示所有图书53
void showAllbook(bookDB &db)
{
	char choose;
    system("cls");  //清屏
    
    cout<<"显示所有图书..."<<endl<<endl;
    db.showbook();
    cout<<endl;
	cout<<"返回上一层目录请按B键..."<<endl;
    cin>>choose;
    if(choose=='b') retno=41;

}

//用户菜单
void userMenu(void)
{
	     int choose;
	
	     system("cls");  //清屏
	
         cout<<setw(f)<<"*******************************"<<endl;
		 cout<<setw(f)<<"*     欢迎进入图书管理系统    *"<<endl;
		 cout<<setw(f)<<"*******************************"<<endl;
		 if(retno==41)
		 {
         cout<<setw(f)<<"            管理员             "<<endl<<endl;
		 cout<<setw(f)<<"1.新书入库:                  "<<endl<<endl;//51
		 cout<<setw(f)<<"2.显示所有读者:              "<<endl<<endl;//52
         cout<<setw(f)<<"3.显示所有图书:              "<<endl<<endl;//53
		 cout<<setw(f)<<"4.删除读者:                  "<<endl<<endl;//54
		 cout<<setw(f)<<"5.删除图书:                  "<<endl<<endl;//55
		 cout<<setw(f)<<"6.显示所有超期读者:          "<<endl<<endl;//56
         cout<<setw(f)<<"7.显示所有超期图书:          "<<endl<<endl;//57
		 }

         if(retno==42)
		 {
         cout<<setw(f-10)<<"你的ID号为:"<<userid<<endl<<endl;
         cout<<setw(f)<<"1.借书:                      "<<endl<<endl;//61
         cout<<setw(f)<<"2.还书:                      "<<endl<<endl;//62
         cout<<setw(f)<<"3.查询图书:                  "<<endl<<endl;//63
        
         }
		 cout<<setw(f)<<"0.退回到登录菜单:            "<<endl<<endl;
		 cout<<endl;
         cout<<"\t"<<"\t"<<"   请选择: ";
		 
		 cin>>choose;
		 if(cin.good())
		 {
			 if(retno==42&&choose>3)
			 {
				 cout<<"程序无此功能!请输入正确数字0-3!"<<endl;
				 getch();
			     userMenu();
			 }
			 else if(retno==41&&choose>7)
			 {
				 cout<<endl;
				 cout<<"程序无此功能!请输入正确数字0-3!"<<endl;
				 getch();
			     userMenu();
			 }
		     else 
			 {
			     if(choose==0) retno=25;
		         if(retno==41) retno=choose+50;
                 if(retno==42) retno=choose+60;
			 }
		 }
		 else 
		 {
			cout<<endl;
            cout<<"你输入是非数字型!按任意键程序退出!"<<endl;
			getch();
			exit(0);
           
		 }
        
}

//刚开始的初始化菜单
void InitMenu(void)//1.0
{
	
	system("cls");  //清屏
    cout<<endl;
    cout<<setw(f)<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
	cout<<setw(f)<<"~欢迎使用图书管理系统1.0版~"<<endl;
	cout<<setw(f)<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
	cout<<setw(f)<<"1. 登录                    "<<endl<<endl;
    cout<<setw(f)<<"2. 注册                    "<<endl<<endl;
	cout<<setw(f)<<"3. 退出                    "<<endl<<endl<<endl;
	cout<<setw(f-15)<<"请选择数字:  ";

	try{
	cin>>retno;
	if(retno!=1&&retno!=2&&retno!=3)
		throw 1;
	
	}
	catch (int i)
	{ 
		if(cin.good())
		
		{
			cout<<i<<"请输入正确数字0-3!"<<endl;
		    getch();
		    InitMenu();
		}
		else 
		{
			cout<<i<<"输入错误,程序退出!"<<endl;
		    cin.clear();
		    getch();
		    exit(0);
		}
	}
	
}

//注册画面2.1
void enrol(void)
{
	int choose;
	system("cls");  //清屏
    cout<<endl;
    cout<<setw(f)<<"2.1  请输入你的注册类型:"<<endl;
	cout<<endl;
    cout<<setw(f)<<"1. 本科生              "<<endl<<endl;
    cout<<setw(f)<<"2. 硕士研究生          "<<endl<<endl;
    cout<<setw(f)<<"3. 博士研究生          "<<endl<<endl;
	cout<<setw(f)<<"4. 教师                "<<endl<<endl;
	cout<<setw(f)<<"5. 退回上一级目录      "<<endl<<endl;
    cout<<setw(f)<<"   请选择数字:    ";

	cin>>choose;
    if(cin.good())//输入是int型 
	{
           if(choose>5||choose<=0)
		   {  
			   cout<<"请输入正确数字0-5!"<<endl;
		       getch();
			   enrol();
		   }
		   else 
			   retno=choose+20;//21 22 23 24 25 分别代表 本科生 硕士研究生 博士研究生 教师 退回上一级目录


	}
	else //输入是非int型 
	{
            cout<<"输入错误,按任意键程序退出!"<<endl;
		    cin.clear();
		    getch();
		    exit(0);
	}


};

//具体注册内容2.1.1
void UGEnrol(int type,Reader &R)
{
	char ug[7]="本科生";
	char ma[11]="硕士研究生";
    char dt[11]="博士研究生";
	char tc[5]="教师";
	char rol[11];
	int borday;
	int borcount;

	switch(type)
	{
	case 21: //本科生
		  strcpy(rol,ug); 
          borday=u_MaxDay;
          borcount=u_MaxBor;

		  R.setType(1);
		  
		  break;
    case 22: //硕士研究生
		  strcpy(rol,ma); 
		  borday=m_MaxDay;
          borcount=m_MaxBor;

          R.setType(2);
          break;
	case 23: // 博士研究生
		  strcpy(rol,dt); 
		  borday=dt_MaxDay;
          borcount=dt_MaxBor;
		  R.setType(3);
		  break;
    case 24: //教师
		  strcpy(rol,tc); 
		  borday=dt_MaxDay;
          borcount=dt_MaxBor;
		  R.setType(4);
		  break;
	}

	R.setBorBook(borcount);//设置借书最大册数
	R.setMaxDay(borday);//设置借书最大天数

	system("cls");  //清屏
    cout<<endl;
    cout<<rol<<"注册"<<endl<<endl;
	cout<<"你可以借"<<borcount<<"本书"<<endl<<endl;
    cout<<"每本可以借"<<borday<<"天"<<endl<<endl;

    
	cout<<"按任意键开始注册..."<<endl;
	getch();

}

//填注册表单
void fillTable(Reader &R)
{
    cout<<endl;
    int id;
    char name[8];
    char sex[5];
    char email[20];

	cout<<"请输入ID:";
	cin>>id;
    cout<<"请输入姓名:";
	cin>>name;
    cout<<"请输入性别:";
	cin>>sex;
	cout<<"请输入Email:";
	cin>>email;
	
    R.setReader(id,name,sex,email,R.getBorBook(),R.getMaxDay());

}

//登录
void login(readerDB &db)
{
	Reader *a;
	system("cls");  //清屏
	cout<<endl;
    cout<<"请输入id号:";
    cin>>userid;

    if(cin.good())
	{
      a=db.query(userid);
      if(a!=NULL)
	  {
	     cout<<"登录成功!"<<endl;
         cout<<a->getname()<<"你好!"<<endl;
         
		 if(a->getID()==0) retno=41;//id==0 为管理员

         else retno=42;//其它用户
//-----------------------------
		 cout<<"按任意键进入用户菜单..."<<endl;
	     getch();
		 userMenu();//进入用户菜单
	  }
      else
	  {
		cout<<"登录失败,请先注册!!"<<endl;
		cout<<"按任意键注册..."<<endl;
		getch();
        retno=2;//注册
	  }
	}

    else //用户输入字符串
	{
	  cout<<"你输入非法字符,按任意键退出!"<<endl;
	  getch();
      exit(0);
	}

}

//超期图书处理
void OverBook(bookDB &db)
{
//-----取时间函数-------
   struct tm *local;
   time_t t;
   t=time(NULL);
   local=localtime(&t);
//----------------------
   int CouDay;
   int NowDay;
   NowDay=local->tm_yday;
   Book *b;
   for(int i=0;i<MaxBook;i++)
   {
	   b=db.query(i);
	   if(b!=NULL)
	   {
	       if(b->getonshelf()==0)
		   {
             CouDay=(NowDay-(b->getCurDay())+365)%365;
	         if(CouDay>b->getBorrowDay())
		      b->disp();
	         //else
		     //cout<<b->getCurDay();
		   
		   }
	   }
   }
}


//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM主函数MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
void main()
{
    //产生四个对象
	Reader R;
    Book B;
	readerDB readerdb;
	bookDB bookdb;
    char choose;

	InitMenu();
	int isRegister=0;//是否已注册 0 未注册 1 已注册
while(1)
{
  
  switch(retno)
  {
        case 1:                 //登录
			login(readerdb);
		    break;
		case 2:                 //注册
			enrol();
			if(retno!=25)
			{
			    UGEnrol(retno,R);
			    fillTable(R);
			    isRegister=readerdb.addReader(R);
			    readerdb.WriteDB();//写数据到物理文件reader.txt中

			    if(isRegister==1)
				{
				      cout<<"注册成功"<<endl;
			          
				}
			    else 
				{
				      cout<<"该用户已存在! ,请重新输入用户名!"<<endl;
			          getch();
				}
               cout<<"返回上一层目录请按B键,否则退出..."<<endl<<endl;
               cin>>choose;
               if(choose=='b') retno=2;
			   else retno=3;
               
			}
               
			break;
		case 3:  //退出系统
			exit(1);
			break;
		case 25: //系统登录菜单
            InitMenu();
			break;

		case 51:
            bookIn(B,bookdb);//新书入库
            bookdb.addbook(B);//加对象到bookdb数据库中
			bookdb.WriteDB();//写数据到物理文件book.txt中
			break;
        case 55://删除图书
			bookOut(bookdb);
            bookdb.WriteDB();//写数据到物理文件book.txt中
			break;
        case 54://删除读者
            userOut(readerdb);
			readerdb.WriteDB();//写数据到物理文件reader.txt中
			break;

		case 41://返回上一级目录(管理员)
			userMenu();
			break;
		case 42://返回上一级目录(普通用户)
			userMenu();
			
			break;
		case 61://借书
            borrowbook(bookdb,readerdb);
			bookdb.WriteDB();//写数据到物理文件book.txt中
            readerdb.WriteDB();//写数据到物理文件reader.txt中
			break;
		case 62://还书
            retbook(bookdb,readerdb);
			bookdb.WriteDB();//写数据到物理文件book.txt中
            readerdb.WriteDB();//写数据到物理文件reader.txt中
			break;
        case 63://查阅图书
			findbook(bookdb);
            break;
		case 52://显示所有读者
            showAllUser(readerdb);
			break;
		case 53://显示所有图书:
            showAllbook(bookdb);
			break;
		case 56:
			system("cls");  //清屏
			//OverBook(bookdb);
			cout<<"按任意键返回..."<<endl;
			retno=41;
            getch();
			break;
		case 57://超期图书处理
			system("cls");  //清屏
			OverBook(bookdb);
			cout<<"按任意键返回..."<<endl;
			retno=41;
			getch();
			break;

  }
  

}
}//main()

⌨️ 快捷键说明

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