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

📄 tushuguanlixitong.txt

📁 小型图书管理系统的实现 用户登陆
💻 TXT
字号:
#include <iostream> 
#include <iomanip> 
#include <fstream> 
#include <string.h> 
#define Maxbor   100 
#define Maxr     100 
#define Maxb   100 
using namespace std; 
class Reader  
{  
private:  
int tag; //删除标记 1:已删 0:未删  
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);  

}  
void delbook(){ tag=1; }//设置删除标记 1:已删 0:未删  
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:  
RDatabase() //构造函数,将reader.txt读到read[]中  
{  
Reader s;  
top=-1;  
fstream file("E:\reader.txt",ios::in);//打开一个输入文件  
while (1) 
{  
file.read((char *)&s,sizeof(s));  
if (!file){cout<<"打开失败"<<endl;break;}  
top++;  
read[top]=s;  
}  
file.close(); //关闭 reader.txt  
}  
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();//读者库维护  
~RDatabase() //析构函数,将read[]写到reader.txt文件中  
{  
fstream file("E:\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:  
int tag;//删除标记 1:已删 0:未删  
int no;//图书编号  
char name[20];//书名  
int onshelf;//是否再架 1:再架 2:已借  
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:  
BDatabase()//构造函数,将book.txt读到book[]中  
{  
Book b;  
top=-1;  
fstream file("E:\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();  
}  
~BDatabase()//析构函数,将book[]写到book.txt文件中  
{  
fstream file("E:\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 ='1';  
int bookid,readerid;  
RDatabase ReaderDB;  
Reader *r;  
BDatabase BookDB;  
Book *b;  
while(choice!='0')  
{  
cout <<endl<<endl<<"\t\t\t 图 书 管 理 系 统\n\n\n";  


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 <<" 借书 读者编号:";  
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<<"还书\n 读者编号:";  
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 + -