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

📄 libsystem.cpp

📁 图书管理系统
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#include "List.h"

#include <iostream.h>
#include <fstream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <conio.h>

char USERTYPE[10];	  //标志当前用户类型,进行权限管理,其中ADMIN具有3级权限,其中POWERUSER具有3级权限,其中USER具有3级权限,
bool BOOKFILE;		//标志需要打开BOOKDATAS文件,向链表摸板中录入bookData类数据
bool USERFILE;		//标志需要打开USERINFO文件,向链表摸板中录入userInfo类数据
bool READERFILE;	//标志需要打开READERINFO文件,向链表摸板中录入readerInfo类数据

//**********************************************************************************
//进行当前用户权限验证 。其中ADMIN具有3级权限,其中POWERUSER具有3级权限,其中USER具有3级权限,
//通过级别验证返回TRUE,否则返回FALSE。
bool POPEDOM(int PopedomRequire)	//PopedomRequire:当前要求权限等级
{									//其中ADMIN具有3级权限,其中POWERUSER具有3级权限,其中USER具有3级权限,
	int popedom;						
	if(strcmp(USERTYPE,"USER") == 0)				
		popedom = 1;
	if(strcmp(USERTYPE,"POWERUSER") == 0)			
		popedom = 2;
	if(strcmp(USERTYPE,"ADMIN") == 0)				
		popedom = 3;

	if(popedom < PopedomRequire)
	{
		cout<<"您的权限不够,不能访问此功能!"<<endl<<endl;
		cout<<"按任意键继续.........."<<endl<<endl;
		getch();
		return false;
	}
	else 
		return true;
}

//**********************************************************************************
//打开特定文件,初始化LIST。
//此函数中用IF语句进行判断打开文件的顺序不能变,因为主程序中对对象初始化有顺序要求
template <class T>
void FILEOPEN(List <T> & list)		//打开特定文件,初始化LIST,
{
	fstream file;
	
	if(USERFILE == true)								//USERFILE标志打开USERINFO文件
		file.open("USERINFO.txt",ios::in|ios::binary);
	else if(READERFILE == true)							//READERFILE标志打开READERINFO文件	
		file.open("READERINFO.txt",ios::in|ios::binary);
	else if(BOOKFILE == true)							//BOOKFILE标志打开BOOKDATAS文件
		file.open("BOOKDATAS.txt",ios::in|ios::binary);
	else
	{ 
		cout<<"打开文件初始化LIST时选择出错!"<<endl;
		cout<<"按任意键继续.........."<<endl<<endl;
		getch();
		return;
	}
	
	if(!file)
		{
			cout<<"文件打开失败!";
			return;
		}
	if(!file.eof())
		list.creatList(file);		//使用当前打开文件创建链表
	file.close();
	return ;
}

//************************************************************************************
//主菜单
void MAINMENU()					
{
	void SEARCHMENU();				//信息查询菜单
	void CHECKMENU();				//借书菜单
	void RETURNBOOKMENU();			//还书菜单
	void LIBABOUTMENU();			//书库管理菜单
	void USERABOUT();				//用户管理菜单
	void READERABOUT();				//读者管理菜单
	
	char select;					

	for(;;)
	{
		system("cls");
		cout<<"********************************************************************************";
		cout<<"**********************************"<<"图 书 馆 理 系 统"<<"*****************************";
		cout<<"**********************************************************************作者:孔辉"<<endl<<endl;
		cout<<setw(47)<<"主   菜   单"<<endl<<endl<<endl<<endl;
		cout<<setw(48)<<"a.信 息 查 询"<<endl			
			<<setw(48)<<"b.图 书 借 阅"<<endl					//含超期罚款
			<<setw(48)<<"c.还 书 管 理"<<endl	
			<<setw(48)<<"d.书 库 管 理"<<endl
			<<setw(48)<<"e.用 户 管 理"<<endl
			<<setw(48)<<"f.读 者 管 理"<<endl
			<<setw(48)<<"g.退 出 系 统"<<endl<<endl<<endl<<endl<<endl<<endl;
		cout<<"请输入相应的序号进行(a~g)选择:"<<endl;
		select = getch();
		switch(select)
		{
			case 'a':		cout<<endl<<endl<<endl;	
							SEARCHMENU();				//信息查询菜单
							break;
			case 'b':		cout<<endl<<endl<<endl;		
							CHECKMENU();				//借书菜单
							break;
			case 'c':		cout<<endl<<endl<<endl;	
							RETURNBOOKMENU();			//还书菜单
							break;
			case 'd':		cout<<endl<<endl<<endl;   
							LIBABOUTMENU();				//书库管理菜单
							break;
			case 'e':		cout<<endl<<endl<<endl;	
							USERABOUT();				//用户管理菜单		 
							break;
			case 'f':		cout<<endl<<endl<<endl;		
							READERABOUT();				//读者管理菜单	 
							break;
			case 'g':		return;
			default:		cout<<"输入有误!请重新输入:"<<endl;	 
							break;
		}
	}	
	return;
}

//**************************************************************************************
//登录页面
void ENTRYMENU()				
{
	List<userInfo> UserList;
	userInfo FirstUser;	//创建链表
	USERFILE = true;		//标志打开USERFILE文件		
	dataNode<userInfo> * curNodePtr;//由来接受UserList.returnCurPtr()返回的当前数据的地址,
									//以对该数据进行操作
//	userInfo UserForCheck;
	FILEOPEN(UserList);
	
	char userName[30];
	char passWord[30];
	if(UserList.listIsEmpty())		//判断系统是否第一次使用
	{
		cout<<"本系统第一次使用,请输入管理员信息:"<<endl;
		FirstUser.setForFirst();				//设置第一个用户信息,其中以默认权限为ADMIN
		UserList.insert(FirstUser);				
		strcpy(USERTYPE,FirstUser.getType());	//设置当前用户类型

		cout<<"按任意键继续.........."<<endl<<endl;
		getch();
	}

	else 
	{
		for(;strcmp(passWord,"n");)			//退出按n
		{
			cout<<"请输入用户名:"<<endl;
			cin>>userName;
			if(!UserList.search(userName))		//查询用户是否存在
				cout<<"该用户不存在!请重新输入:"<<endl;
			else
			{
				curNodePtr = UserList.returnCurPtr();
				cout<<"请输入密码:"<<endl;
				
				for(int i=1; i<=3&&strcmp(passWord,"n");i++)
				{
					cin>>passWord;
					if(!strcmp(passWord,(curNodePtr->data).getPassword()))	//验证密码
					{
						strcpy(USERTYPE,(curNodePtr->data).getType());	//设置当前用户类型
				//		USERTYPE = (curNodePtr->data).type;
						cout<<"登录成功!按任意键继续.........."<<endl;
						getch();
						return;
					}
					else					
						cout<<"密码输入不正确!请重新输入:(退出请按n)"<<endl;		
				}
			}	
		}
		exit(0);
	}
}

//************************************************************************************
//信息查询页面菜单
void SEARCHMENU()
{
	char select;

	for(;;)
	{
		system("cls");			//清屏
		cout<<"********************************************************************************";
		cout<<"**********************************"<<"图 书 馆 理 系 统"<<"*****************************";
		cout<<"********************************************************************************"<<endl<<endl;
		cout<<setw(47)<<"信 息 查 询"<<endl<<endl<<endl<<endl
			<<setw(45)<<"a.	书库列表"<<endl
			<<setw(49)<<"b.	图书信息查询"<<endl
			<<setw(49)<<"c.	用户信息查询"<<endl
			<<setw(49)<<"d.	读者信息查询"<<endl
			<<setw(47)<<"e.	返回主菜单"<<endl<<endl<<endl<<endl<<endl<<endl;
		cout<<"请输入相应的序号进行(a~e)选择:"<<endl;

		select = getch();
		switch(select)
		{
			case 'a':	BOOKFILE = true;			//标志打开BOOKDATAS文件
						{		//括号用来限制LIST类对象的生存期,本选项结束时系统将调用析构函数,
								//在析构函数中将重新向文件写入更新后的数据
							List<bookData> bookList;//创建链表
							FILEOPEN(bookList);		//打开特定文件,初始化LIST。
							cout<<"显示所有数据:"<<"共条"<<bookList.getTotal()<<"数据。"<<endl;
							//LIST类的getTotal()将返回链表中数据的总数
							bookList.displayAllData(); 
							//LIST类的displayAllData()将显示链表中的所有数据,并根据权限不同显示不同的信息
						}	
						cout<<"按任意键继续.........."<<endl<<endl;		
						getch();						
						break;
			case 'b':	BOOKFILE = true;			//标志打开BOOKDATAS文件
						{		//括号用来限制LIST类对象的生存期,本选项结束时系统将调用析构函数,
								//在析构函数中将重新向文件写入更新后的数据
							List<bookData> bookList;//创建链表
							char bookInfo[14];
							FILEOPEN(bookList);
							cout<<"请输入要查询的图书的ISBN号、作者、书名或出版社进行查询:"<<endl;
							cin>>bookInfo;
							if(!bookList.search(bookInfo))//search(bookInfo)如果没有查到图书信息将返回FALSE,否则返回TRUE
								cout<<"没有查到数据。"<<endl;
							else
								cout<<"查找的数据:"<<endl<<bookList.returnCurData()<<endl;//返回当前链表中检索到的数据
						}
						cout<<"按任意键继续.........."<<endl<<endl;
						getch();
						break;
			case 'c':	if(!POPEDOM(2))
							break;
						USERFILE = true;		//标志需要打开USERINFO文件
						{		//括号用来限制LIST类对象的生存期,本选项结束时系统将调用析构函数,
								//在析构函数中将重新向文件写入更新后的数据
							List<userInfo> userList;//创建链表
							char userName[10];
							FILEOPEN(userList);
									
							cout<<"请输入要查询的用户名:"<<endl;
							cin>>userName;
							if(!userList.search(userName))//search(userName)如果没有查到用户信息将返回FALSE,否则返回TRUE
								cout<<"没有查到数据。"<<endl;
							else
								cout<<"查找的数据:"<<endl<<userList.returnCurData()<<endl;//返回当前链表中检索到的数据
						}
						cout<<"按任意键继续.........."<<endl<<endl;
						getch();
						break;
			case 'd':	READERFILE = true;			//标志打开READERINFO文件
						{
							//括号用来限制LIST类对象的生存期,本选项结束时系统将调用析构函数,
								//在析构函数中将重新向文件写入更新后的数据
							List<readerInfo> readerList;//创建链表
							char readerID[10];
							FILEOPEN(readerList);
							cout<<"请输入要查询的读者信息:"<<endl;
							cin>>readerID;
							if(!readerList.search(readerID))//search(readerID)如果没有查到读者信息将返回FALSE,否则返回TRUE
								cout<<"没有查到数据。"<<endl;
							else
								cout<<"查找的数据:"<<endl<<readerList.returnCurData()<<endl;//返回当前链表中检索到的数据
						}
						cout<<"按任意键继续.........."<<endl<<endl;
						getch();
						break;									
			case 'e':	cout<<endl<<endl<<endl;		return;
			default:	cout<<"输入有误!请重新输入:"<<endl;break;				
		}
	}
	return;
}

//**************************************************************************************
void CHECKMENU()
{
	if(!POPEDOM(2))//权限验证,通过返回TRUE,否则返回FALSE,此处级别要求为2
		return;
	dataNode<bookData> * curBookNodePtr;//由来接受UserList.returnCurPtr()返回的当前数据的地址,
									//以对该数据进行操作
	dataNode<readerInfo> * curReaderNodePtr;//由来接受UserList.returnCurPtr()返回的当前数据的地址,
									//以对该数据进行操作

	char select;

	for(;;)
	{
		system("cls");
		cout<<"********************************************************************************";
		cout<<"**********************************"<<"图 书 馆 理 系 统"<<"*****************************";
		cout<<"********************************************************************************"<<endl<<endl;
		cout<<setw(47)<<"图 书 借 阅"<<endl<<endl<<endl<<endl
			<<setw(45)<<"a.	图书借阅"<<endl					//含超期罚款(由于时间紧迫没有完成)
			<<setw(45)<<"b.	还款管理"<<endl		//根据书的性质设置超期罚款比率(由于时间紧迫没有完成)		
			<<setw(49)<<"c. 图书信息查询"<<endl					
			<<setw(49)<<"d. 读者信息查询"<<endl
			<<setw(45)<<"e.	书库列表"<<endl
			<<setw(47)<<"f.	返回主菜单"<<endl<<endl<<endl<<endl<<endl<<endl;
		cout<<"请输入相应的序号进行(a~f)选择:"<<endl;

⌨️ 快捷键说明

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