图书管理系统#include
#include
#include
#include
int adflag=0;//管理员权限标志
const char initialCode[30]="000000";//!!!!!!!!!!!!!!!管理员密码000000,管理员切记!!!!!!!!!!!!!
class Book;//类声明
struct Bnode//书库结构
{
char b_name[30];//书名
char b_num[30];//编号
bool b_flag;//借阅情况
...
#include
#include
#include
#include
int adflag=0;//管理员权限标志
const char initialCode[30]="000000";//!!!!!!!!!!!!!!!管理员密码000000,管理员切记!!!!!!!!!!!!!
class Book;//类声明
struct Bnode//书库结构
{
char b_name[30];//书名
char b_num[30];//编号
bool b_flag;//借阅情况
Bnode *next;
};
struct Rnode//读者库结构
{
char r_name[30];//读者名
char r_num[30];//读者编号
int num;//读者借书数量
char r_code[30];//读者密码
Bnode r_borrow[5];//读者所借书籍,借书上限为5本
Rnode *next;
};
class Reader//读者类
{
public:
Reader();//构造函数
void addReader();//添加读者
bool deleReader();//删除读者,管理员有强制删除权限
void find();//查找读者,管理员权限,有密码显示功能,用于找回密码
void showReader();//显示所有读者
void saveReader();//保存读者数据
void getReader();//读取读者数据
bool check(char[]);//查找比对
void format();//
格式
pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载
化
void borrow(Rnode*,Bnode*);//借阅书籍
bool identify(char*,char*,char*,Rnode*&);//身份验证;
void backBook(Rnode*,Bnode*);//还书
void rewrite(Rnode*);//修改个人信息
void readerCheck(Rnode*);//读者查询,无密码显示功,且只能查阅自己借书情况
private:
Rnode *Rhead;
};
Reader::Reader()//读者类构造函数定义
{
Rhead=new Rnode;
strcpy(Rhead->r_name,"administrator");//设置为循环指针,将管理员信息放在表头中
strcpy(Rhead->r_num,"-1");
Rhead->num=0;
Rhead->next=Rhead;
}
void Reader::readerCheck(Rnode*p)//读者自己查询
{
if(p->num==0)//借书为空
{
cout<<"无借书
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
"<r_borrow[i]).b_name,"")!=0)//当书籍名中为空的情况下不输出,即该记录为无借书记录
{
cout<<" 书名:"<<(p->r_borrow[i]).b_name<<"\t\t编号"<<(p->r_borrow[i]).b_num<next!=Rhead)//在读者库中比对编号,确保编号的唯一性
{
if(strcmp(num,h->next->r_num)==0)
{
cout<<"该读者编号已存在,申请失败!!!"<next;
}
return 0;
}
void Reader::addReader()//添加读者定义
{
char flag,flag1,code[30],flag2='1';
Rnode *temp,*tail=Rhead;
while(tail->next!=Rhead)//使得每一次添加都放在末尾,即表头前一位
{
tail=tail->next;
}
do
{
temp=new Rnode;
cout<<"请输入姓名:";
//ignore(100);
cin.ignore(1);//清除缓冲区,只清除一个字节
//cin.getline(temp->r_name,2);
cin.getline(temp->r_name,30);
cout<<"请输入读者编号:";
cin>>temp->r_num;
//system("pause");
do
{ flag2='1';
cout<<"请输入密码";
cin>>temp->r_code;
cout<<"请重复输入密码";
cin>>code;
if(strcmp(temp->r_code,code)==0)//两次密码比对
{
flag2='0';
temp->num=0;
if(check(temp->r_num)==0)//检查
{
temp->next=Rhead;
tail->next=temp;
tail=temp;
for(int i=0;i<5;i++)//读者个人书库初始化
{
strcpy((temp->r_borrow[i]).b_name,"");
strcpy((temp->r_borrow[i]).b_num,"");
}
cout<<"添加成功"<>flag;
flag1='1';
if(flag!='1'&&flag!='0')
{
cout<<"输入的字符有误,请重新输入:"<>num;
if(Rhead->next==Rhead)//当读者库为空时
{
cout<<"读者库空!!"<next!=Rhead)//扫描编号
{
if(strcmp(p->next->r_num,num)==0)
{
flag=1;
break;
}
p=p->next;
if(p->next==Rhead)//扫描完毕,但未发现标号匹配
{
cout<<"不存在该读者"<next->num==0)//匹配且借书记录为空,顺利删除
{
cout<<"您确定要删除?";
cin>>flag3;
if(flag3=='y')
{
Rnode *h=p->next;
p->next=p->next->next;
delete h;
cout<<"删除成功!!!"<next->num!=0)//匹配,但有书籍未还
{
cout<<"该读者有"<next->num<<"本书未还,暂时无法删除!!!"<";
cin>>flag1;
if(flag1=='y')
{
Rnode *h=p->next;
p->next=p->next->next;
delete h;
cout<<"删除成功!!!"<>way;
switch(way)//两种方式
{
case '1'://已读者姓名方式
cout<<"请输入读者姓名";
cin.getline(p,2);
cin.getline(p,30);
while(h->next!=Rhead)
{
if(strcmp(p,h->next->r_name)==0)//姓名匹配
{
flag=1;
cout<<" 姓名:"<next->r_name<<"\t\t编号:"<next->r_num<<"\t\t密码:"<next->r_code<next->num!=0)
{
cout<<"所借图书:"<next->num;i++)//显示借书信息
{
if(strcmp((h->next->r_borrow[i]).b_name,"")!=0)
{
cout<<" "<<(h->next->r_borrow[i]).b_name<<"\t\t"<<(h->next->r_borrow[i]).b_num<next;
}
delete p;
break;
case '2'://已读者编号方式
cout<<"请输入读者编号";
cin>>p;
while(h->next!=Rhead)
{
if(strcmp(p,h->next->r_num)==0)
{
flag=1;
cout<<" 姓名:"<next->r_name<<"\t\t编号:"<next->r_num<<"\t\t密码:"<next->r_code<num!=0)
{
cout<<"所借图书:"<num;i++)//同上
{
if(strcmp((h->next->r_borrow[i]).b_name,"")!=0)
{
cout<<" "<<(h->next->r_borrow[i]).b_name<<"\t\t"<<(h->next->r_borrow[i]).b_num<next;
}
delete p;
break;
default:
cout<<"选择信息输入有误"<next!=Rhead)
{
p=Rhead->next;
Rhead->next=Rhead->next->next;
delete p;//撤销空间
}
cout<<"格式化完毕!!!"<next=temp;
temp->next=Rhead;
h=temp;
}
infile.close();
}
void Reader::saveReader()//保存读者信息,存至磁盘
{
Rnode *h=Rhead;
ofstream outfile("Reader.dat",ios::out|ios::binary);
while(h->next!=Rhead)
{
outfile.write((char*)(h->next),sizeof(Rnode));
h=h->next;
}
cout<<"读者信息已保存至磁盘"<next==k)//图书馆为空情况
{
cout<<"图书馆空!!!"<next!=k)//书名匹配
{
if(strcmp(h->next->b_name,bname)==0&&h->next->b_flag==0)
{
cout<<"该书信息为:"<<" 书名:"<next->b_num<";
cin>>ch;
if(ch=='y')
{
h->next->b_flag=true;//借出
flag=1;
break;
}
else
{
borrow(m,k);//递归调用
return;
}
}
h=h->next;
}
if(flag!=1)
{
cout<<"图书馆中无该藏书或该书已借出!!!"<r_borrow[i]).b_name)==0)
{
m->r_borrow[i]=*(h->next);
cout<<"借阅成功!!!"<num++;
flag=0;
}
}
}
system("pause");
}
void Reader::backBook(Rnode*m,Bnode*k)//还书
{
char num[30];
Bnode*p=k;
cout<<"请输入所还书籍的编号:";
cin>>num;
for(int i=0;i<5;i++)
{
if(strcmp(m->r_borrow[i].b_num,num)==0)//在读者库中比对
{
strcpy((m->r_borrow[i]).b_name,"");
(m->num)--;//将所还图书的信息收回
while(p->next!=k)
{
if(strcmp(p->next->b_num,num)==0&&p->next->b_flag==true)
{
p->next->b_flag=false;//更改图书在库信息
cout<<"归还成功!!!"<next;
}
cout<<"您的所借图书信息由于系统原因已被删除,现将您的图书收回!!!!"<next!=Rhead)
{
if(strcmp(h->next->r_name,name)==0&&strcmp(h->next->r_num,num)==0&&strcmp(h->next->r_code,code)==0)//验证通过
{
p=h->next;
return true;
}
h=h->next;
}
return false;//验证失败
}
void Reader::showReader()//显示所有读者,管理员权限
{
Rnode *h=Rhead;
if(h->next==Rhead)
{
cout<<"读者库空!!!"<next!=Rhead)
{
cout<<"\t\t读者姓名:"<next->r_name<<"\t读者编号"<next->r_num<<"\t借阅本数"<next->num<next->r_borrow[i]).b_name),"")!=0)//输出所有借书信息
{
cout<<"\t\t书名:"<<(h->next->r_borrow[i]).b_name<<"\t编号"<<(h->next->r_borrow[i]).b_num<next;
cout<r_name,2);
cin.getline(m->r_name,30);
cout<>m->r_code;
cout<<"请再次输入密码:";
cin>>num;
if(strcmp(m->r_code,num)==0)
{
cout<<"修改成功!!!"<b_name,"k");//表头信息初始化
strcpy(Bhead->b_num,"k");
Bhead->b_flag=0;//未借出
Bhead->next=Bhead;
//saveBook();
}
Bnode*Book::consult()//返回私有数据成员
{
return Bhead;
}
bool Book::check(char num[])//匹配信息
{
Bnode *h=Bhead;
while(h->next!=Bhead)
{
if(strcmp(num,h->next->b_num)==0)
{
cout<<"该图书编号已存在,存储失败!!!"<next;
}
return 0;
}
void Book::addBook()//新增图书
{
char flag,flag1;
Bnode *temp,*tail=Bhead;
while(tail->next!=Bhead)//始终放在表尾处
{
tail=tail->next;
}
do
{
temp=new Bnode;
cout<<"请输入书名:";
cin.getline(temp->b_name,2);//回收输入缓冲区的回车字符!!
cin.getline(temp->b_name,29);
cout<<"请输入图书编号:";
cin>>temp->b_num;
temp->b_flag=0;
if(check(temp->b_num)==0)//无匹配,允许进入
{
temp->next=Bhead;
tail->next=temp;
tail=temp;
cout<<"添加成功"<>flag;
flag1='1';
if(flag!='1'&&flag!='0')
{
cout<<"输入的字符有误,请重新输入:"<>num;
if(Bhead->next==Bhead)
{
cout<<"图书馆中无藏书"<next!=Bhead)
{
if(strcmp(p->next->b_num,num)==0)
{
flag=1;
break;
}
p=p->next;
if(p->next==Bhead)
{
cout<<"无该图书信息"<next->b_flag==false)//顺利删除
{
Bnode *h=p->next;
p->next=p->next->next;
delete h;
cout<<"删除成功!!!"<next->b_flag==true)//该书籍未还,无法删除
{
cout<<"该图书已被借出,暂时无法删除!!!"<";
cin>>flag1;
if(flag1=='y')
{
Bnode *h=p->next;
p->next=p->next->next;
delete h;
cout<<"删除成功!!!"<next!=Bhead)
{
p=Bhead->next;
Bhead->next=Bhead->next->next;
delete p;
}
cout<<"格式化完毕!!!"<>way;
switch(way)
{
case '1':
cout<<"请输入书名";
cin.getline(p,2);
cin.getline(p,29);
while(h->next!=Bhead)
{
if(strcmp(p,h->next->b_name)==0)
{
flag=1;
cout<<" "<next->b_name<<" "<next->b_num;
if(h->next->b_flag==false)
{
cout<<" 未借出"<next->b_flag==true)
{
cout<<" 已借出"<next;
}
delete p;
break;
case '2':
cout<<"请输入图书编号";
cin>>p;
while(h->next!=Bhead)
{
if(strcmp(p,h->next->b_num)==0)
{
flag=1;
cout<<" "<next->b_name<<" "<next->b_num;
if(h->next->b_flag==false)
{
cout<<" 未借出"<next->b_flag==true)
{
cout<<" 已借出"<next;
}
delete p;
break;
default:
cout<<"选择信息输入有误"<next!=Bhead)
{
outfile.write((char*)(h->next),sizeof(Bnode));
h=h->next;
}
cout<<"图书信息已保存至磁盘"<next=temp;
temp->next=Bhead;
h=temp;
}
infile.close();
}
void Book::showBook()//显示书库所有信息
{
Bnode *h=Bhead;
if(h->next==Bhead)
{
cout<<"暂无馆藏图书"<next!=Bhead)
{
cout<next->b_name<<"\t\t\t"<next->b_num;
if(h->next->b_flag==true)
{
cout<<"\t已借出"<next->b_flag==false)
{
cout<<"\t未借出"<next;
}
system("pause");
}
void chart1()//管理员界面
{
cout<<" 1、添加图书"<>ch2;
if(ch2[0]!='0'&&ch2[0]!='1'&&ch2[0]!='2')
{
cout<<"输入信息有误!!!请重新输入!!!"<>code;
if(strcmp(code,initialCode)==0)//密码识别
{
adflag=1;//管理员特殊权限标志
system("cls");
//系统命令,清屏
do
{
chart1();//进入管理员界面
cout<<"请选择功能"<>ch;
switch(ch)//各种功能
{
case '1':
A1.addBook();
break;
case '2':
A1.deletBook();
break;
case '3':
A1.showBook();
break;
case '4':
A1.findBook();
break;
case '0':
flag=1;
break;
case '5':
A1.format();
break;
case '6':
R1.addReader();
break;
case '7':
R1.deleReader();
break;
case '8':
R1.showReader();
break;
case '9':
R1.format();
break;
case 'a':
R1.find();
break;
case 'b':
cout<<"本次进入管理员界面的所有操作都将恢复,您确定要进行数据恢复吗?";
cin>>flag1;
if(flag1=='y')
{
cout<<"数据恢复进行中";
for(int i=0;i<1000;i++)
{
//if()
cout<<"·······";
}
system("cls");
cout<<"数据已恢复,系统自动退出图书管理系统!!!"<>num;
cout<<"请输入读者密码:";
cin>>Rcode;
if(R1.identify(name,num,Rcode,p)==true)
{
cout<<"欢迎您"<>ch;
system("cls");
switch(ch)
{
case '1':
if(p->num==5)
{
cout<<"您只能借阅5本,现在已经5本了!!!"<num==0)
{
cout<<"您的的书库为空,无书可还!!!"<
本文档为【图书管理系统】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。