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

📄 libmanage.cpp

📁 c++做的图书管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include<iostream.h>
#include<fstream.h>
#include<string.h>
#include<stdlib.h>
#include <iomanip.h>
#include<stdio.h>
#include <conio.h>
#include <ctype.h>
#include <time.h>


class Bookdata{
private:	
	 char ISBN[14];
	 char bookTitle[51];
     char Author[30];
	 char Pub[30];	 
	 int  qtyOnhand;
	 char LendTime[20];
	 char returnTime[20];
	 Bookdata *Next;
public:
	 char *getTitle();
	 char *getISBN();
	 char *getAuthor();
	 char *getPub();
	 int getQtyonhand();
	 char *getLendTime();
	 char *getreturnTime();
	 Bookdata *getNext();
	 void setTitle(char*);
	 void setISBN(char*);//设置
	 void setAuthor(char*);
	 void setPub(char*);
	 void setQtyonhand(int);
	 void setLendTime(char *);
	 void setreturnTime(char *);
	 void setNext(Bookdata *);//设置指针函数
	 friend istream &operator>>(istream &in,Bookdata*);//友元函数
	 friend ostream &operator<<(ostream &out,Bookdata*);//友元函数	 
	 Bookdata();	 	  
 };
class BookLib{
private:
	Bookdata *head;//头指针
	Bookdata *tail;//尾指针
	int booknum;//书库中书的数量
public:
	void ShowBookswithDate();//
	void ShowAllBooks();
	Bookdata *getHead();
	Bookdata *getTail();
	friend void ShowBook(Bookdata*);
	friend void ShowBookDate(Bookdata*);
	void SearchbyAuthor(char *);
	Bookdata *SearchbyISBN(char *);
	void SearchbyTitle(char *);
	friend istream &operator>>(istream &in,Bookdata*);
	friend ostream &operator<<(ostream &out,Bookdata*);
	int DeleteBook(char *);
	void AddBook(Bookdata *);
	BookLib();
	BookLib(Bookdata *,Bookdata*,int);
	~BookLib();
};
class people{
private:
	char username[15];
	char password[15];
	int position;//职位
	int MaxBorrowNum;
	
	int BorrowedNum;
	BookLib *Head;
	people *Next;
public:
	int getLendOutTime();
	void setLendOutTime(int);
	int LendOutTime;
	char *getusername();
	char *getpassword();
	int getposition();
	int getMaxNum();//最大借书量
	int getBorrowedNum();
	people *getNext();
	void setNext(people*);
	BookLib *getHead();
	void setusername(char *);
	void setpassword(char *);
	void setposition(int);
	void setMaxNum(int);
	void setBorrowedNum(int);
	void setHead(BookLib *);
	friend istream &operator>>(istream &in,people*);
	friend ostream &operator<<(ostream &out,people*);
	people();

};
class peoplelist{
private:
	people *head;
	people *tail;
	int TotalNum;
public:
	int getTotalNum();
	people *getHead();
	void Addpeople(people *);
	people *Searchpeople(char *);
	void showpeoplelist(int);
	int Deletepeople(char *);
	friend istream &operator>>(istream &in,people*);
	friend ostream &operator<<(ostream &out,people*);
	peoplelist();
	~peoplelist();
};

//处理时间
char *getDate()//获得当前时间
{
	time_t now;
	now = time(0);
	struct tm *ptr;
	char *date = new char(15);

	ptr = localtime(&now);
	strftime(date,15,"%Y-%m-%d",ptr);//时间转换成字符串并存在data所指的内存空间
	return date;
}

char *AddDate(int days)//获得还书时间
{
	time_t now;
	now = time(0);
	now = now + days*24*60*60;
	struct tm *ptr;
	char *date = new char(15);

	ptr = localtime(&now);
	strftime(date,15,"%Y-%m-%d",ptr);
	return date;
}

char*Bookdata::getTitle(){ 
	return bookTitle;
}
char*Bookdata::getISBN(){ 
	return ISBN;
}
char*Bookdata::getAuthor(){ 
	return Author;
}
char*Bookdata::getPub(){ 
	return Pub;
}
int Bookdata::getQtyonhand(){
	return qtyOnhand;
}
char *Bookdata::getLendTime(){
	return LendTime;
}
char *Bookdata::getreturnTime(){
	return returnTime;
}
void Bookdata::setTitle(char*str){
	strcpy(bookTitle,str);
}
void Bookdata::setISBN(char*str){
	strcpy(ISBN,str);
}
void Bookdata::setAuthor(char*str){
	strcpy(Author,str);
}
void Bookdata::setPub(char*str){
	strcpy(Pub,str);
}
void Bookdata::setQtyonhand(int num){
	qtyOnhand=num;
}
void Bookdata::setLendTime(char *str){
	strcpy(LendTime,str);
}
Bookdata *Bookdata::getNext(){
	return Next;
}	
void Bookdata::setNext(Bookdata *p){
	Next = p;
}
void Bookdata::setreturnTime(char *str){
	strcpy(returnTime,str);
}
istream &operator>>(istream &in,Bookdata *head){//一次性向内存读取Bookdata类的一个对象
	Bookdata *temp = new Bookdata();
	in.read((char *)temp,sizeof(Bookdata));
	head->setAuthor(temp->getAuthor());
	head->setISBN(temp->getISBN());
	head->setLendTime(temp->getLendTime());
	head->setPub(temp->getPub());
	head->setQtyonhand(temp->getQtyonhand());
	head->setreturnTime(temp->getreturnTime());
	head->setTitle(temp->getTitle());
	return in;
}
ostream &operator<<(ostream &out,Bookdata *head){//一次性向文件写入Bookdata类的一个对象
	out.write((char *)head,sizeof(Bookdata));
	return out;
}
Bookdata::Bookdata(){
	strcpy(bookTitle,"Unknown");
	strcpy(ISBN,"0000000000000");
	strcpy(Author,"Unknown");
	strcpy(Pub,"Unknown");
	qtyOnhand = 0;
	strcpy(LendTime,"2000-1-1");
	strcpy(returnTime,"2000-1-1");
	Next = NULL;
}
BookLib::BookLib(){        //构造函数
	fstream in("booklib.dat",ios::in|ios::binary);
	if(!in){
		cout<<"Can not open the Lib file!"<<endl;
		exit(1);
	}
	booknum = 0;
	head = NULL;
	tail = NULL;
	in.read((char *)&booknum,sizeof(int));//把booklib中的库存量的数据读入booknum中
	int count = booknum;	
	while(count)
	{
		Bookdata *temp = new Bookdata();
		in>>temp;//运算符重载的运用
		
		if(!head)//尾部插入结点
		{
			head = temp;
			tail = temp;
		}
		else
		{
			tail->setNext(temp);
			tail = temp;
		}

		count--;
	}
	in.close();
}
BookLib::BookLib(Bookdata *h,Bookdata *t,int num)
{
	head = h;
	tail = t;
	booknum = num;
}
BookLib::~BookLib(){
	fstream out("booklib.dat",ios::out|ios::binary);
	
	out.write((char *)&booknum,sizeof(int));

	while(head!=NULL)
	{		
		Bookdata *temp;
		temp = head;
		out<<head;
		head = head->getNext();
		delete(temp);
	
	}
	out.close();
}
Bookdata *BookLib::getHead()
{
	return head;
}
Bookdata *BookLib::getTail()
{
	return tail;
}
void ShowBook(Bookdata *p)//面对管理员的显示
{
	cout<<setw(15)<<p->getISBN()<<setw(15)<<p->getTitle()<<setw(15)<<p->getAuthor()<<setw(15)<<p->getPub()<<setw(15)<<p->getQtyonhand()<<endl;
}
void ShowBookDate(Bookdata *p)//面对学生的显示
{
	cout<<setw(13)<<p->getISBN()<<setw(16)<<p->getTitle()<<setw(12)<<p->getAuthor()<<setw(14)<<p->getPub()<<setw(11)<<p->getLendTime()<<setw(11)<<p->getreturnTime()<<endl;
}
void BookLib::SearchbyAuthor(char *str)
{
	Bookdata *front = head;	
	int mark = 0;
	while(front)
	{
		if(strcmp(front->getAuthor(),str) == 0)	
		{
			ShowBook(front);
			mark++;
		}
		front = front->getNext();		
	}
	if(mark == 0)
	{
		system("cls");
		cout<<endl<<endl<<endl<<endl;
		cout<<"\t\t\t\t  查无此书!"<<endl;
	}	
}
void BookLib::SearchbyTitle(char *str)
{
	Bookdata *front = head;
	int mark = 0;
	while(front)
	{
		if(strcmp(front->getTitle(),str) == 0)	
		{
			ShowBook(front);
			mark++;
		}
		front = front->getNext();
		
	}
	if(mark == 0)
	{
		system("cls");
		cout<<endl<<endl<<endl<<endl;
		cout<<"\t\t\t\t  查无此书!"<<endl;
	}
}
Bookdata *BookLib::SearchbyISBN(char *str)
{
	Bookdata *front = head;
	while(front)
	{
		if(strcmp(front->getISBN(),str) == 0)
		{
			return front;
		}
		else
		{
			front = front->getNext();
		}
	}
	return NULL;
}
int BookLib::DeleteBook(char *str)
{
	Bookdata *front = head;
	Bookdata *back = NULL;
	if(!SearchbyISBN(str)){return 0;}
	while(front)
	{
		if(strcmp(front->getISBN(),str) == 0)
		{
			if(front == head)
			{
				head = head->getNext();
				delete(front);
				booknum--;
				return 1;
			}
			else
			{
				back->setNext(front->getNext());
				delete(front);
				booknum--;
				return 1;
			}
		}
		else
		{
			if(front == head)
			{
				back = head;
				front = front->getNext();
			}
			else
			{
				back = front;
				front = front->getNext();
			}
		}
	}
}
void BookLib::AddBook(Bookdata *p)
{
	if(!head)
	{
		head = p;
		tail = p;
		booknum++;
	}
	else
	{
		tail->setNext(p);
		tail = p;
		booknum++;
	}
}
char* people::getusername(){
	return username;
}
char* people::getpassword (){
	return password;
}
int people::getposition(){
	return position;
}
int people::getMaxNum (){
	return MaxBorrowNum;
}
int people::getBorrowedNum(){
	return BorrowedNum;
}
BookLib *people::getHead() {
	return Head;
}
void people::setusername (char*str){
	strcpy(username,str);
}
void people::setpassword (char*str){
	strcpy(password,str);
}
void people::setposition (int p){
	position=p;
}
void people::setMaxNum(int num=0){
	MaxBorrowNum=num;
}
void people::setBorrowedNum(int num){
	BorrowedNum = num;
}
void people::setHead (BookLib *temp){
	Head=temp;
}
istream &operator>>(istream &in,people *p){
	people *temp = new people();
	in.read((char *)temp,sizeof(people));
	p->setusername(temp->getusername());
	p->setpassword(temp->getpassword());
	p->setposition(temp->getposition());
	p->setMaxNum(temp->getMaxNum());
	p->setBorrowedNum(temp->getBorrowedNum());
	return in;
}
ostream &operator<<(ostream &out,people *p){
	out.write((char *)p,sizeof(people));
	return out;
}
people *people::getNext(){
	return Next;
}
void people::setNext(people *p){
	Next = p;
}
people::people()
{
	strcpy(username,"NULL");
	strcpy(password,"NULL");
	position = 2;
	MaxBorrowNum = 7;
	BorrowedNum = 0;
	LendOutTime = 60;
	Head = NULL;
	Next = NULL;
}
peoplelist::peoplelist(){
	fstream in("people.dat",ios::in|ios::binary);
	if(!in){
		cout<<"can not open the people.dat file!"<<endl;
		exit(1);
	}	
	head = NULL;
	tail = NULL;
	TotalNum = 0;	
	in.read((char *)&TotalNum,sizeof(int));
	int count = TotalNum;
	while(count){
		people *temp = new people();
		in >> temp;
		if(head == NULL)
		{
			head = temp;
			tail = temp;
		}
		else
		{
			tail->setNext(temp);
			tail = temp;
		}		
		int btemp = temp->getBorrowedNum();
		Bookdata *head = NULL;
		Bookdata *tail = NULL;
		while(btemp>0){
			Bookdata *booktemp = new Bookdata();
			in>>booktemp;
			if(head == NULL)
			{
				head = booktemp;
				tail = booktemp;
			}
			else
			{
				tail->setNext(booktemp);
				tail = booktemp;
			}
			btemp--;
		}
		temp->setHead(new BookLib(head,tail,temp->getBorrowedNum()));
		count--;
	}
	in.close();
}
peoplelist::~peoplelist(){
	fstream out("people.dat",ios::out|ios::binary);
	if(!out){cout<<"Error store data!"<<endl;exit(1);}

	out.write((char*)&TotalNum,sizeof(int));
    people *temp = head;

	while(temp)
	{
		people *pp = temp;
		out<<temp;
		int btemp = temp->getBorrowedNum();
		if(temp->getHead() != NULL)
		{
		Bookdata *booktemp = (temp->getHead())->getHead();
		while(btemp>0)
		{
			Bookdata *p = booktemp;
			out<<booktemp;
			booktemp = booktemp->getNext();
			delete(p);
			btemp--;
		}
		}
        temp = temp->getNext();
		delete(pp);
	}
	out.close();	
}
people *peoplelist::getHead()
{
	return head;
}
void peoplelist::Addpeople(people *p)
{
	if(head == NULL)
	{
		head = p;
		tail = p;
		TotalNum = 1;
	}
	else
	{
		tail->setNext(p);
		tail = p;
	    TotalNum++;
	}
}
people *peoplelist::Searchpeople(char *str)
{
	people *p = head;
	while(p)
	{
		if(strcmp(p->getusername(),str) == 0)
		{
			return p;
		}
		else
		{
			p = p->getNext();
		}
	}
	return NULL;
}
void peoplelist::showpeoplelist(int position)
{
	people *p = head;
	system("cls");
	cout<<endl<<endl;
	if(position == 2)
	    cout<<setw(30)<<"用户名"<<setw(10)<<"用户类型"<<setw(12)<<"最大借阅量"<<setw(10)<<"已借阅量"<<endl;
	else
		cout<<setw(40)<<"用户名"<<setw(10)<<"用户类型"<<endl;
	while(p)
	{
		if(position == 2)
		{
			if(p->getposition() == 2)
			cout<<setw(30)<<p->getusername()<<setw(10)<<"学生"<<setw(10)<<p->getMaxNum()<<setw(10)<<p->getBorrowedNum()<<endl;				
			p = p->getNext();			
		}
		else
		{
			if(p->getposition() == 1)
			cout<<setw(40)<<p->getusername()<<setw(10)<<"管理员"<<endl;
			p = p->getNext();
		}
	}
	system("pause");
}
int peoplelist::Deletepeople(char *str)
{
	people *front = head;
	people *back = NULL;
	if(!Searchpeople(str)){return 0;}
	while(front)
	{
		if(strcmp(front->getusername(),str) == 0)
		{
			if(front == head)
			{
				head = head->getNext();
				delete(front);
				TotalNum--;
				return 1;
			}
			else
			{
				back->setNext(front->getNext());
				delete(front);
				TotalNum--;
				return 1;
			}
		}
		else
		{
			if(front == head)
			{
				back = head;
				front = front->getNext();
			}
			else
			{
				back = front;
				front = front->getNext();
			}
		}
	}
}
void BeginShow()
{

⌨️ 快捷键说明

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