📄 libmanage.cpp
字号:
#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 + -