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

📄 main.cpp

📁 图书馆管理系统,很不错!可以作毕业设计,也可以做课程设计!
💻 CPP
字号:
#include <iostream>  
#include <iomanip>  
#include <string>  
//输入/输出文件流类  
#include <fstream>  
using namespace std;  
//最多的读者  
const int Maxr=100;  
//最多的图书  
const int Maxb=100;  
//每位读者最多借五本书  
const int Maxbor=5;  


//读者类,实现对读者的信息的描述  
class Reader  
{  
private:  
//删除标记 1:已删 0:未删  
int tag;  
//读者编号  
int no;  
//读者姓名  
char name[10];  
//所借图书  
int borbook[Maxbor];  
public:  
Reader()  
{  
;  
}  
//获取姓名  
char *getname()  
{  
return name;  
}  
//获取删除标记  
int gettag()  
{  
return tag;  
}  
//获取读者编号  
int getno()  
{  
return no;  
}  
//设置姓名  
void setname(char na[])  
{  
strcpy(name,na);  

}  
//设置删除标记 1:已删 0:未删  
void delbook()  
{  
tag=1;  
}  
//增加读者  
void addreader(int n,char *na)  
{  
tag=0;  
no=n;  
strcpy(name,na);  
for(int i=0;i<Maxbor;i++)  
borbook[i]=0;  
}  
//借书操作  
void borrowbook(int bookid)  
{  
for(int i=0;i<Maxbor;i++)  
{  
if (borbook[i]==0)  
{  
borbook[i]=bookid;  
return;  

}  
}  

}  
//还书操作  
int retbook(int bookid)  
{  
for(int i=0;i<Maxbor;i++)  
{  
if(borbook[i]==bookid)  
{  
borbook[i]=0;  
return 1;  

}  
}  
return 0;  
}  
//读出读者信息  
void disp()  
{  
cout << setw(5) << no <<setw(10) << name<<"借书编号:[";  
for(int i=0;i<Maxbor;i++)  
if(borbook[i]!=0)  
cout << borbook[i] << "|";  
cout << "]"<<endl;  

}  
};  



//读者类库,实现建立读者的个人资料  
class RDatabase  
{  
private:  
//读者记录指针  
int top;  
//读者记录  
Reader read[Maxr];  
public:  
//构造函数,将reader.txt读到read[]中  
RDatabase()  
{  
Reader s;  
top=-1;  
//打开一个输入文件  
fstream file("reader.txt",ios::in);  
while (1)  
{  
file.read((char *)&s,sizeof(s));  
if (!file)break;  
top++;  
read[top]=s;  
}  
//关闭 reader.txt  
file.close();  
}  
//删除所有读者信息  
void clear()  
{  
top=-1;  
}  
//添加读者时先查找是否存在  
int addreader(int n,char *na)  
{  
Reader *p=query(n);  
if (p==NULL)  
{  
top++;  
read[top].addreader(n,na);  
return 1;  
}  
return 0;  

}  
//按编号查找  
Reader *query(int readerid)  
{  
for (int i=0;i<=top;i++)  
if (read[i].getno()==readerid &&  
read[i].gettag()==0)  
{  
return &read[i];  
}  
return NULL;  
}  
//输出所有读者信息  
void disp()  
{  
for (int i=0;i<=top;i++)  
read[i].disp();  
}  
//读者库维护  
void readerdata();  
//析构函数,将read[]写到reader.txt文件中  
~RDatabase()  
{  
fstream file("reader.txt",ios::out);  
for (int i=0;i<=top;i++)  
if (read[i].gettag()==0)  
file.write((char *)&read[i],sizeof(read[i]));  
file.close();  

}  
};  
void RDatabase::readerdata()  
{  

char choice;  
char rname[20];  
int readerid;  
Reader *r;  
while (choice!='0')  
{  
cout <<"\n\n\t\t\t读 者 维 护\n\n\n\t\t 1 新 增\n\n\t\t 2 更 改\n\n\t\t 3 删 除\n\n\t\t 4 查 找\n\n\t\t 5 显 示\n\n\t\t 6 全 删\n\n\t\t 0 退 出"<<endl;  
cin >> choice;  
switch (choice)  
{  
case '1':  
cout << "输入读者编号:";  
 
 
  
 
cin >> readerid;  
cout << "输入读者姓名:";  
cin >> rname;  
addreader (readerid,rname);  
break;  
case '2':  
cout << "输入读者编号:";  
cin >> readerid;  
r=query(readerid);  
if (r==NULL)  
{  
cout << " 该读者不存在 "<<endl;  
break;  
}  
cout << "输入新的姓名:";  
cin >> rname;  
r->setname(rname);  
break;  
case '3':  
cout << " 输入读者编号:";  
cin >> readerid;  
r=query(readerid);  
if (r==NULL)  
{  
cout <<" 该读者不存在" << endl;  
break;  
}  
r->delbook();  
break;  
case '4':  
cout << "读入读者编号:";  
cin >> readerid;  
r=query(readerid);  
if (r==NULL)  
{  
cout <<"该读者不存在"<< endl;  
break;  
}  
r->disp();  
break;  
case '5':  
disp();  
break;  
case '6':  
clear();  
break;  
default:cout<<"输入错误,请从新输入:";break;  
}  
}  
}  






//图书类,实现对图书的描述,图书的编号,书名,借出,还入等  
class Book  
{  
private:  
//删除标记 1:已删 0:未删  
int tag;  
//图书编号  
int no;  
//书名  
char name[20];  
//是否再架 1:再架 2:已借  
int onshelf;  
public:  
Book(){}  
//获取姓名  
char *getname() { return name; }  
//获取图书编号  
int getno(){ return no; }  
//获取删除标记  
int gettag(){ return tag; }  
//设置书名  
void setname(char na[])  
{  
strcpy(name,na);  
}  
//删除图书  
void delbook(){ tag=1;}  
//增加图书  
void addbook(int n,char *na)  
{  
tag=0;  
no=n;  
strcpy(name,na);  
onshelf=1;  
}  
//借书操作  
int borrowbook()  
{  
if (onshelf==1)  
{  
onshelf=0;  
return 1;  
}  
return 0;  
}  
//还书操作  
void retbook()  
{  
onshelf=1;  
}  
//输出图书  
void disp()  
{  
cout << setw(6) << no << setw(18) << name << setw(10)  
<<(onshelf==1? "在架":"已借") <<endl;  
}  
};  






//图书库类,实现对图书的维护,查找,删除等  
class BDatabase  
{  
private:  
//图书记录指针  
int top;  
//图书记录  
Book book[Maxb];  
public:  
//构造函数,将book.txt读到book[]中  
BDatabase()  
{  
Book b;  
top=-1;  
fstream file("book.txt",ios::in);  
while (1)  
{  
file.read((char *)&b,sizeof(b));  
if (!file) break;  
top++;  
book[top]=b;  
}  
file.close();  
}  
//全删  
void clear()  
{  
top=-1;  
}  
//增加图书  
int addbook(int n,char *na)  
{  
Book *p=query(n);  
if (NULL==p)  
{  
top++;  
book[top].addbook(n,na);  
return 1;  
}  
return 0;  
}  
//查找图书  
Book *query(int bookid)  
{  
for (int i=0;i<=top;i++)  
if (book[i].getno()==bookid &&book[i].gettag()==0)  
{  
return &book[i];  
}  
return NULL;  
}  
//图书库维护  
void bookdata();  
void disp()  
{  
for (int i=0;i<=top;i++)  
if (book[i].gettag()==0)  
book[i].disp();  
}  
//析构函数,将book[]写到book.txt文件中  
~BDatabase()  
{  
fstream file("book.txt",ios::out);  
for (int i=0;i<=top;i++)  
if (book[i].gettag()==0)  
file.write((char *)&book[i],sizeof(book[i]));  
file.close();  
}  
};  
void BDatabase::bookdata()  
{  
char choice;  
char bname[40];  
int bookid;  
Book *b;  
while (choice!='0')  
{  
cout <<"\n\n\n\t\t\t图 书 维 护 "<<endl<<endl;  
cout<<"\t\t1 新 增\n \t\t2 更 改\n\t\t3 删 除\n\t\t4 查 找\n\t\t5 显 示\n\t\t6 全 删\n\t\t0 退 出"<<endl;  
cin >> choice;  
switch (choice)  
 
 
 
 {  
case '1':  
cout << "输入图书编号:"<<endl;  
cin >> bookid;  
cout << "输入图书书名:"<<endl;  
cin >> bname;  
addbook(bookid,bname);  
break;  
case '2':  
cout << "输入图书编号:"<<endl;  
cin >> bookid;  
b=query(bookid);  
if (b==NULL)  
{  
cout << " 该图书不存在 "<<endl;  
break;  
}  
cout << "输入新的书名:"<<endl;  
cin >> bname;  
b->setname(bname);  
break;  
case '3':  
cout <<" 读入图书编号:"<<endl;  
cin >> bookid;  
b=query(bookid);  
if (b==NULL)  
{  
cout <<" 该图书不存在" << endl;  
break;  
}  
b->delbook();  
break;  
case '4':  
cout << " 读入图书编号:"<<endl;  
cin >> bookid;  
b=query(bookid);  
if (b==NULL)  
{  
cout <<" 该图书不存在"<< endl;  
break;  
}  
b->disp();  
break;  
case '5':  
disp();  
break;  
case '6':  
clear();  
break;  
default:cout<<"输入错误,请从新输入:";  
}  
}  
}  



//main() 函数的实现,程序的主界面的引导  

void main()  
{  
char choice;  
int bookid,readerid;  
RDatabase ReaderDB;  
Reader *r;  
BDatabase BookDB;  
Book *b;  
while(choice!='0')  
{  
cout <<endl<<endl<<"\t\t\t 图 书 管 理 系 统\n\n"; 
cout<<"\t\t欢迎使用本图书馆管理系统,-_- :)"<<endl<<endl ;


cout <<"\t\t\t1 借 书\n\n\t\t\t2 还 书 \n\n\t\t\t3 图 书 维 护\n\n\t\t\t4 读 者 维 护\n\n\t\t\t0 离 开"<<endl;  
cin >> choice;  
switch (choice)  
{  
case '1':  
cout <<" 借书 :"<<endl<<" 读者编号:";  
cin >>readerid;  
cout <<" 图书编号: ";  
cin >>bookid;  
//按编号查找  
r=ReaderDB.query(readerid);  
if (NULL==r)  
{  
cout <<" 不存在该读者,不能借书"<< endl;  
break;  
}  
b=BookDB.query(bookid);  
if (b==NULL)  
{  
cout <<" 不存在该图书,不能借书"<< endl;  
break;  
}  
if (b->borrowbook()==0)  
{  
cout << " 该图书已借出,不能借书"<< endl;  
break;  
}  
r->borrowbook(b->getno());  
break;  
case '2':  
cout<<" 还书"<<endl<<"读者编号:";  
cin >>readerid;  
cout << " 图书编号:";  
cin >>bookid;  
r=ReaderDB.query(readerid);  
if (r==NULL)  
{  
cout <<" 不存在该读者,不能还书" << endl;  
break;  
}  
b=BookDB.query(bookid);  
if (b==NULL)  
{  
cout <<" 不存在该图书,不能还书" <<endl;  
break;  
}  
b->retbook();  
r->retbook(b->getno());  
break;  
case '3':  
BookDB.bookdata();  
break;  
case '4':  
ReaderDB.readerdata();  
break;  
default:cout<<"输入错误,请从新输入:";  

}  
}  
} 
 
 

⌨️ 快捷键说明

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