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

📄 library.cpp

📁 一个dos版的图书管理系统。
💻 CPP
📖 第 1 页 / 共 3 页
字号:
///////////////////////////////////////////////////////////////////////////////////////////////////
#include <iostream.h>                                    //程序所需头文件
#include <stdio.h>
#include <string.h>
#include <fstream.h>
#include <conio.h>
#include <iomanip.h>
#include <stdlib.h>
///////////////////////////////////////////////////////////////////////////////////////////////////
const int PSW_LENGTH=24;                                   //定义用户登录密码最大长度
const int MAX_READER_NUM=2000;                             //定义最大用户数量
const int MAX_BOOK_NUM=2000;                               //定义最大图书数量
///////////////////////////////////////////////////////////////////////////////////////////////////
ifstream ibook("book.txt",ios::beg,2);
ifstream ireader("reader.txt",ios::beg,2);
ofstream obook("book.txt",ios::ate,2);
ofstream oreader("reader.txt",ios::ate,2);
///////////////////////////////////////////////////////////////////////////////////////////////////
class Book_T                                                         //图书类
{
private:
	long number;                                                     //图书编号
	char name[40];                                                   //书名
	char author[20];                                                 //作者
	char isbn[20];                                                   //ISBN号
	int status;                                                      //目前状态 (0-删除 1-馆藏 2-外借 3-预定)
	long lend_Reader;                                                //记录借书者编号
	long book_Reader;                                                //记录预定者编号
public:
	void setBook(long num=0,char *na="",char *auth="",char *is="",int st=1,long lend=0,long book=0)
	{
		number=num;
		strcpy(name,na);
		strcpy(author,auth);
		strcpy(isbn,is); 
		status=st; 
		lend_Reader=lend;
		book_Reader=book;
	}
	long getNumber() { return number; }
	char *getName() { return name; }
	char *getAuthor() { return author; }
	int getStatus() { return status; }
	char *getIsbn() { return isbn; }
	void deleteBook() { number=0; status=0; }
	int lendBook(long num) 
	{
		if (status==1) 
		{
			lend_Reader=num;
			status=2;
			return 1;
		}
		else return 0;
	}
	int bookBook(long num)
	{
		if (status==2 && lend_Reader!=num)
		{
			book_Reader=num;
			status=3;
			return 1;
		}
		else return 0;
	}
	int returnBook(long num)
	{
		if (status==2 && lend_Reader==num)
		{
			lend_Reader=0;
			status=1;
			return 1;
		}
		else if (status==3 && lend_Reader==num)
		{
			lend_Reader=book_Reader;
			book_Reader=0;
			status=2;
			return 1;
		}
		return 0;
	}
	void print(long num)
	{
		cout<<setiosflags(ios::left)<<setw(10)<<number<<setw(25)<<name<<setw(20)<<author<<setw(15)<<isbn;
		switch (status)
		{
		case 1: cout<<setw(5)<<"馆藏"; break;
		case 2: cout<<setw(5)<<"外借"; break;
		case 3: if (lend_Reader==num) cout<<setw(5)<<"外借"; 
				else cout<<setw(5)<<"预定"; break;
		default: break;
		}
		cout<<endl;
	}
	friend void readerInformation(long);
	friend ostream &operator<<(ostream &, const Book_T &);
	friend istream &operator>>(istream &, Book_T &);
};
///////////////////////////////////////////////////////////////////////////////////////////////////
class Reader_T                                                       //读者类
{
private:
	long number;                                                     //读者编号
	char name[20];                                                   //读者姓名
	char password[PSW_LENGTH];                                       //读者密码
	int limit;                                                       //读者权限 (1-学生 2-教师 3-图书管理员 4-读者管理员 5-系统管理员 0-删除)
	int borrowed_Num;                                                //记录借书数目 (学生最多5本 教师最多10本)
public:
  	void setReader(long num=0, char *na="", char *psw="", int lim=1, int bNum=0)
	{
		number=num;
 		strcpy(name,na);
		strcpy(password,psw);
		limit=lim;
		borrowed_Num=bNum;
	}

	int getNumber() { return number; }
	char *getPassword() { return password; }
	void changePassword(char *psw) { strcpy(password,psw); }
	void changeLimit(int lim) { limit=lim; }
	int checkPassword(char *psw) { return strcmp(password,psw); }
	int getLimit() { return limit; }
	void deleteReader() { number=0; limit=0; }
	int getBorrowedNum() { return borrowed_Num; }
	void borrowNumUp() { borrowed_Num++; }
	void borrowNumDown() { borrowed_Num--; }
	void print()
	{
		cout<<setiosflags(ios::left)<<setw(10)<<number<<setw(15)<<name<<setw(15);
		switch (limit)
		{
		case 1: cout<<"学生"; break;
		case 2: cout<<"教师"; break;
		case 3: cout<<"图书管理员"; break;
		case 4: cout<<"读者管理员"; break;
		case 5: cout<<"系统管理员"; break;
		default: break;
		}
		cout<<"已借书数:"<<borrowed_Num<<endl;
	}
	friend void readerInformation(long);
	friend ostream &operator<<(ostream &, const Reader_T &);
	friend istream &operator>>(istream &, Reader_T &);
};
///////////////////////////////////////////////////////////////////////////////////////////////////
int reader_Number;                                                   //记录总读者人数
int book_Number;                                                     //记录总图书数量
long temp_CardNumber;                                                //记录登录读者的卡号
Book_T book[MAX_BOOK_NUM];                         
Reader_T reader[MAX_READER_NUM];
///////////////////////////////////////////////////////////////////////////////////////////////////
ostream &operator<<(ostream &obook, const Book_T &temp_Book)         //流运算符的重载
{
	return obook<<setw(10)<<temp_Book.number<<setw(30)<<temp_Book.name<<setw(20)<<temp_Book.author<<setw(15)<<temp_Book.isbn
	<<setw(5)<<temp_Book.status<<setw(10)<<temp_Book.lend_Reader<<setw(10)<<temp_Book.book_Reader<<endl;
}
istream &operator>>(istream &ibook, Book_T &temp_Book)
{
	return ibook>>temp_Book.number>>temp_Book.name>>temp_Book.author>>temp_Book.isbn
	>>temp_Book.status>>temp_Book.lend_Reader>>temp_Book.book_Reader;
}
ostream &operator<<(ostream &oreader, const Reader_T &temp_Reader)
{
	return oreader<<setw(10)<<temp_Reader.number<<setw(15)<<temp_Reader.name<<setw(15)<<temp_Reader.password
	<<setw(5)<<temp_Reader.limit<<setw(5)<<temp_Reader.borrowed_Num<<endl;
}
istream &operator>>(istream &ireader, Reader_T &temp_Reader)
{
	return ireader>>temp_Reader.number>>temp_Reader.name>>temp_Reader.password>>temp_Reader.limit
	>>temp_Reader.borrowed_Num;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
int searchBook(long bookNum)                                         //查询书目函数
{
	int search=-1;
	for (int i=0; i<book_Number; i++)
		if (book[i].getNumber()==bookNum) search=i;
	return search;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
int searchReader(long readerNum)                                     //查询读者函数
{
	int search=-1;
	for (int i=0; i<reader_Number; i++)
		if (reader[i].getNumber()==readerNum) search=i;
	return search;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
char *password()                                                     //加密密码函数
{
	int i=0;
	char temp;
	char temp_Psw[PSW_LENGTH];
	while (i<PSW_LENGTH)
	{
		temp=getch();
		if (temp==13 && i>0) break;
		else if(temp==13) 
		{
			cout<<endl<<"对不起,为了你的安全,请务必输入密码! "<<endl;
			cout<<"请输入你的密码: "<<flush;
			continue;
		}
		if ((temp_Psw[i]=temp)!='\b')
		{
			cout<<"*"<<flush;
			i++;
		}
		else if (i>0)
		{
			cout<<'\b'<<'\0'<<'\b'<<flush;
			i--;
		}
	}
	temp_Psw[i]='\0';
	cout<<endl;
	return temp_Psw;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
void changePassword()                                                //修改当前用户密码
{
	char psw[PSW_LENGTH];
	char confirmPsw[PSW_LENGTH];
	cout<<"请输入你的密码: "<<flush;
	strcpy(psw,password());
	if (!reader[searchReader(temp_CardNumber)].checkPassword(psw))
	{
		cout<<"请输入修改后的密码: "<<flush;
		strcpy(psw,password());
		cout<<"请确认修改后的密码: "<<flush;
		strcpy(confirmPsw,password());
		if (!strcmp(confirmPsw,psw))
		{
			reader[searchReader(temp_CardNumber)].changePassword(psw);
			cout<<"密码修改成功!"<<endl;
		}
		else cout<<"操作失败,两次输入的密码不符!"<<endl;
	}
	else 
	{
		cout<<"密码输入有误!"<<endl;
	}
	cout<<endl;
	system("pause");

}
///////////////////////////////////////////////////////////////////////////////////////////////////
char yesno()                                                         //yes or no确认函数
{
	char a,b;
	while(1)
	{
		while(1)
		{
			a=getch();
			while (a==13)
			{
				cout<<endl<<flush;
				a=getch();
			}
			if (a=='y'||a=='n')
			{
				cout<<a<<flush;
				break;
			}
			else continue;
		}
		while (1)
		{
			b=getch();
			if(b==13) 
			{
				cout<<endl;
				return a;
			}
			else if (b=='\b')
			{
				cout<<'\b'<<" "<<'\b'<<flush;
				break;
			}
			else continue;
		}
	}
}
///////////////////////////////////////////////////////////////////////////////////////////////////
int checkChoice(int i, int j)                                    //防止不符合要求的输入字符函数
{
	char a,b;
	while(1)
	{
		while(1)
		{
			a=getch();
			while (a==13)
			{
				cout<<endl<<flush;
				a=getch();
			}
			if ((a>=i+'0')&&(a<=j+'0'))
			{
				cout<<a<<flush;
				break;
			}
			else continue;
		}
		while (1)
		{
			b=getch();
			if(b==13)
			{
				cout<<endl;
				return (a-'0');
			}
			else if (b=='\b')
			{
				cout<<'\b'<<" "<<'\b'<<flush;
				break;
			}
			else continue;
		}
	}
}
///////////////////////////////////////////////////////////////////////////////////////////////////
void bookOperate(long num)                                           //流通管理系统
{
	int choice=1;
	long bookNum;
	int maxnum=5;
	if (reader[searchReader(num)].getLimit()>=2) maxnum=10;
	while (choice)
	{
		cout<<endl<<"※※※※※※※※※※※※※※¤   流通管理系统   ¤※※※※※※※※※※※※※※"<<endl;
		cout<<endl<<"1-外借图书"<<endl;
		cout<<"2-归还图书"<<endl;
		cout<<"3-预定图书"<<endl;
		cout<<"0-退出流通管理系统"<<endl;
		cout<<endl<<"请输入你的选择: "<<flush;
		choice=checkChoice(0,3);
		switch (choice)
		{
		case 1:
			cout<<"请输入要借的图书编号: "; cin>>bookNum;
			if (searchBook(bookNum)==-1)
				cout<<"对不起,该图书号不存在!"<<endl;

⌨️ 快捷键说明

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