📄 main.cpp
字号:
/****************************************************************************
/*title:面向对象程序设计大作业:简易图书管理系统 *
/*请用C++,开发一个简易图书管理系统,至少需要提供如下功能: *
/*1.新书入库: *
/*2.借书: *
/*3.还书: *
/*4.查询图书: *
/*5.查询读者: *
/*6.显示所有超期读者: *
/*7.显示所有超期图书: *
/*读者有: *
/*1.本科生 每人每证可借4 本书,每本书可以借60 天 *
/*2.硕士研究生 每人每证可借8 本书,每本书可以借90 天 *
/*3.博士研究生 每人每证可借10 本书,每本书可以借120 天 *
/*4.教师 每人每证可借10 本书,每本书可以借120 天 *
/*书有:书名、作者、出版社、出版时间、ISBN 号等信息,(不考虑同一个 *
/*书图书馆可能有多本的情况)。 *
/*×××××××××××××××××××××××××××××××××××××*
/* 姓名:徐冬 学号:220513052 专业:嵌入式软件工程 *
/****************************************************************************/
#include <iostream.h> //cout
#include <stdlib.h>
#include <iomanip.h> //setw()
#include <conio.h> //getch()
#include <string.h>
#include <fstream.h>
#include <time.h>
#include <stdio.h>
const int Maxbor=10; //每个读者最多借借10本
const int MaxReader=100; //读者上限
const int MaxBook=100; //图书上限
const int f=50;//常数设置 输出域宽
//本科生每人每证可借4 本书,每本书可以借60 天
const int u_MaxBor=4;
const int u_MaxDay=60;
//硕士研究生 每人每证可借8 本书,每本书可以借90 天
const int m_MaxBor=8;
const int m_MaxDay=90;
//教师 博士研究生 每人每证可借10 本书,每本书可以借120 天
const int dt_MaxBor=10;
const int dt_MaxDay=120;
//全局变量
int retno=0;//用于不同功能模块之间的切换
int userid; //用户id
//-------------------------Book类---------------------------------------------------
class Book
{
private:
char BookName[30];//书名
char author[10]; //作者
char publish[20]; //出版社
int onshelf; //是否在架 1:在架 0:已借
int bookid; //图书id
int tag; //删除标记 1:已删 0:未删
int curday; //记录下借书时处于一年中的第几天
int borrowDay; //记录该书可以借多少天
public:
Book()
{
onshelf=1;
curday=0;
borrowDay=0;
}
Book(char na[],char code[],char au[],char pub[],int no)
{
strcpy(BookName,na);
strcpy(author,au);
strcpy(publish,pub);
bookid=no;
onshelf=1;
curday=0;
borrowDay=0;
}
//设置图书相关属性
void setbook(int id,char *name,char *au,char *pub)
{
bookid=id;
strcpy(BookName,name);
strcpy(author,au);
strcpy(publish,pub);
tag=0;
onshelf=1;
curday=0;
borrowDay=0;
}
//设置书名
void setname(char na[]) { strcpy(BookName,na);}
//设置作者
void setAuthor(char au[]) { strcpy(author,au); }
//设置出版社
void setPublish(char pub[]) { strcpy(publish,pub);}
//设置借书时处于一年中的第几天
void setCurDay(int day) {curday=day;}
//设置该书可以借多少天
void setBorrowDay(int day) {borrowDay=day;}
//借书操作
int borrowbook()
{
if (onshelf==1)
{
onshelf=0;
return 1;
}
return 0;
}
//还书操作
void retbook() { onshelf=1;}
//设置图书ID
void setId(int no) { bookid=no; }
//输出图书
void disp()
{
cout<<bookid<<setw(18)<<BookName<<setw(20)<<author<<setw(20)<<publish<<setw(20)<<(onshelf==1? "在架":"已借")<<endl;
}
//设置删除标记
void delbook() {tag=1;}
//获得删除标记
int gettag() {return tag;}
//获得是否在架标记
int getonshelf() {return onshelf;}
//获得书编号
int getid() {return bookid;}
char *getname() {return BookName;}
char *getauthor() {return author;}
char *getpub() {return publish;}
int getCurDay() {return curday;}
int getBorrowDay() {return borrowDay;}
};
//--------------------------Reader类----------------------------------------------------------
class Reader
{
private:
char Name[20]; //姓名
char sex[2]; //性别
int readerID; //证件号码
char email[20];//邮件
int tag; //删除标记 1:已删,0:未删
int readType; //读者类型 1:本科本 2.硕士研究生 3.博士研究生 4.教师
int BorBook; //根据读者类型不同而借书本数不同
int MaxDay; //根据读者类型不同而借书天数不同
int borbook[Maxbor]; //所借图书数组中存放所借图书ID号
public:
Reader()
{
BorBook=0;
MaxDay=0;
tag=0;
readType=0;
for (int i=0;i<Maxbor;i++)
borbook[i]=0;
}
char *getname() {return Name;} //获取姓名
char *getEmail() {return email;}//获取Email
char *getSex() {return sex;} //获取性别
int getID() {return readerID;} //获取读者证件号码
int gettag() {return tag;} //获取删除标记
int getMaxDay() {return MaxDay;}//获取借书最大天数
int getBorBook() {return BorBook;}//获取借书最大本数
//设置姓名
void setname(char na[]) { strcpy(Name,na); }
//设置性别
void setSex(char s[]) { strcpy(sex,s); }
//设置mail
void setEmail(char m[]) { strcpy(email,m); }
//设置ID
void setID(int id) { readerID=id; }
//设置最多借书本数
void setBorBook(int Nbook) { BorBook=Nbook; }
//设置最多借书天数
void setMaxDay(int Nday) { MaxDay=Nday; }
//设置读者类型
void setType(int type) { readType=type; }
//增加读者
void setReader(int id,char *na,char *s,char *mail,int Nbook,int Nday)
{
readerID=id;
strcpy(Name,na);
strcpy(sex,s);
strcpy(email,mail);
BorBook=Nbook;
MaxDay=Nday;
}
//借书操作
void borrowbook(int bookid)
{
for (int i=0;i<BorBook;i++)
{
if (borbook[i]==0)
{
borbook[i]=bookid;
cout<<"ok!"<<endl;
return;
}
}
}
//还书操作
int retbook(int bookid)
{
for (int i=0;i<BorBook;i++)
{
if (borbook[i]==bookid)
{
borbook[i]=0;
return 1;
}
}
return 0;
}
//判断borbook[]是否为空 为空返回1,否则返回0
int checkbook()
{
for (int i=0;i<BorBook;i++)
{
if(borbook[i]!=0)
return 0;
}
return 1;
}
//删除读者
int deluser()
{
if(checkbook()==1)
{
tag=1;
return 1;
}
else
{
cout<<"该读者还有借书,不能删除!"<<endl;
tag=0;
return 0;
}
}
//输出读者信息
void disp()
{
cout<<setw(5)<<readerID<<setw(10)<<Name<<setw(10)<<sex<<setw(15)<<"借书编号:[";
for (int i=0;i<BorBook;i++)
{
if (borbook[i]!=0)
cout<<borbook[i]<<"|";
}
cout<<"]"<<endl;
}
//返回数组中有多少个值
int retCount()
{
for (int i=0;i<BorBook;i++)
{
if(borbook[i]==0)
return i;
}
return BorBook;
}
};
//-------------------------读者数据库-----------------------------------------------------
class readerDB
{
private:
int top; //读者记录指针
Reader read[MaxReader]; //读者记录 对象数组
public:
//构造函数,将reader.txt读到read[]中
readerDB()
{
Reader s;
fstream file;
top=-1;
file.open("reader",ios::in);
while (1)
{
file.read((char *)&s,sizeof(s));
if (!file) break;
top++;
read[top]=s;
}
file.close();
}
//增加用户到数据库中
int addReader(int id,char *na,char *s,char *mail,int Nbook,int Nday)
{
Reader *p=query(id);
if (p==NULL)
{
top++;
read[top].setReader(id,na,s,mail,Nbook,Nday);
return 1;
}
return 0;
}
//重载addReader(int id,char *na,char *s)
int addReader(Reader &b)
{
Reader *p=query(b.getID());
if (p==NULL)
{
top++;
read[top].setReader(b.getID(),b.getname(),b.getSex(),b.getEmail(),b.getBorBook(),b.getMaxDay());
return 1;
}
return 0;
}
//删除所有读者信息
void clear() { top=-1;}
//按编号查找
Reader *query(int readerid)
{
for (int i=0;i<=top;i++)
{
if (read[i].getID()==readerid && read[i].gettag()==0)
return &read[i];
}
return NULL;
}
//输出所有读者信息
void dispAll()
{
for (int i=0;i<=top;i++)
if (read[i].gettag()==0)//未删除就输出
read[i].disp();
}
//将read[]写入reader.txt文件中
void WriteDB()
{
fstream file("reader",ios::out);
for (int i=0;i<=top;i++)
if (read[i].gettag()==0)
file.write((char *)&read[i],sizeof(read[i]));
file.close();
}
};
//--------------------图书数据库------------------------------------------------
class bookDB
{
private:
int top; //图书记录指针
Book book[MaxBook]; //图书记录
public:
//构造函数,将book.txt读到book[]中
bookDB()
{
Book b;
top=-1;
fstream file("book",ios::in);
while (1)
{
file.read((char*)&b,sizeof(b));
if (!file) break;
top++;
book[top]=b;
}
file.close();
}
//增加图书
int addbook(int n,char *na,char *au,char *pub)
{
Book *p=query(n);
if (p==NULL)
{
top++;
book[top].setbook(n,na,au,pub);
return 1;
}
return 0;
}
//增加图书 重载addbook(int n,char *na,char *au,char *pub)
int addbook(Book &b)
{
Book *p=query(b.getid());
if (p==NULL)
{
top++;
book[top].setbook(b.getid(),b.getname(),b.getauthor(),b.getpub());
return 1;
}
return 0;
}
//全删
void clear() { top=-1; }
//查找图书
Book *query(int bookid)
{
for (int i=0;i<=top;i++)
if (book[i].getid()==bookid && book[i].gettag()==0)
return &book[i];
return NULL;
}
//显示所有图书信息
void showbook()
{
for(int i=0;i<=top;i++)
if (book[i].gettag()==0)
book[i].disp();
}
// 将book[]写入book.txt文件中
void WriteDB()
{
fstream file("book",ios::out);
for (int i=0;i<=top;i++)
if (book[i].gettag()==0)
file.write((char*)&book[i],sizeof(book[i]));
file.close();
}
};
//FFFFFFFFFFFFFFFFFFFFFF以下是功能函数FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
//新书入库
void bookIn(Book &b,bookDB &db)
{
int id;
char name[20];
char pub[15];
char author[10];
int choose;
system("cls"); //清屏
cout<<"新书入库"<<endl<<endl;
cout<<"请输入图书ID:";
cin>>id;
cout<<"请输入图书名:";
cin>>name;
cout<<"请输入作者名:";
cin>>author;
cout<<"请输入出版社:";
cin>>pub;
if(db.query(id)!=NULL)
{
cout<<"该图书ID已存在,请按任意键重新输入:"<<endl;
retno=51;
getch();
}
else
{
b.setId(id);
b.setname(name);
b.setAuthor(author);
b.setPublish(pub);
cout<<"入库成功!"<<endl<<endl;
cout<<"按任意数字键继续..."<<endl<<endl;
cout<<"按数字0键退出... "<<endl<<endl;
cout<<"返回上一层目录请按1键..."<<endl<<endl;
cin>>choose;
if(choose==0) retno=3;
if(choose==1) retno=41;
}
}
//删除图书
void bookOut(bookDB &db)
{
Book *p;
int id;
char choose;
system("cls"); //清屏
cout<<"删除图书"<<endl<<endl;
cout<<"请输入删除图书ID:";
cin>>id;
p=db.query(id);
if (p==NULL) cout<<"该图书不存在"<<endl;
else if(p->getonshelf()==0) cout<<"该图书已借出,不能删除!"<<endl;
else{p->delbook(); cout<<"该图书已删除"<<endl; }
cout<<"是否继续删除y/n..."<<endl<<endl;
cout<<"返回上一层目录请按B键..."<<endl<<endl;
cin>>choose;
if(choose=='n') retno=3;
if(choose=='y') retno=55;
if(choose=='b') retno=41;
}
//删除读者
void userOut(readerDB &db)
{
int id;
Reader *r;
char choose;
system("cls"); //清屏
cout<<"删除读者"<<endl<<endl;
cout<<"请输入删除读者ID:";
cin>>id;
r=db.query(id);
if (r==NULL)
{
cout<<"该读者不存在"<<endl;
}
else
{
if(r->deluser()==1)
cout<<"该读者已删除"<<endl;
}
cout<<"是否继续删除y/n..."<<endl<<endl;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -