图书信息管理系统.docx
《图书信息管理系统.docx》由会员分享,可在线阅读,更多相关《图书信息管理系统.docx(20页珍藏版)》请在冰豆网上搜索。
![图书信息管理系统.docx](https://file1.bdocx.com/fileroot1/2023-6/27/79527920-99fd-4c6e-8a2c-73bc4d97f2cb/79527920-99fd-4c6e-8a2c-73bc4d97f2cb1.gif)
图书信息管理系统
图书信息包括:
登录号、书名、作者名、分类号、出版单位、出版时间、价格等。
试设计一图书信息管理系统,使之能提供以下功能:
系统以菜单方式工作?
图书信息录入功能(图书信息用文件保存)--输入?
图书信息浏览功能--输出?
查询和排序功能:
(至少一种查询方式)--算法?
?
按书名查询
?
按作者名查询
图书信息的删除与修改(可选项)
#include
#include
#include
#include
structbookData
{
intbooknumber;
charbookname[30];
intstore;
};
structPerson
{
charname[20];
charstudynumber[10];
intcount;
bookDataRbook[2];
//bookDataRbook;
};
classHistory
{
public:
History(fstream&a){readerbook=a;}
voidwritehistory();
voidreadhistory(fstream&);
private:
fstreamreaderbook;
};
classLiberian;
voidFind(fstream&);
voidCreateTxt(fstream&);
classReader
{
friendLiberian;
public:
Reader(fstream&);
voidprint();
voidhandlebook(fstream&);
voidchange();
boolfindreader();
voidAddreader();
voiddeletereader();
private:
fstreamfile;
Personperson;
};
classLiberian
{
public:
Liberian(char*,char*);
voidchangeReader(Reader&);
voidselfprint();
voidAppend(fstream&);
private:
charworkname[20];
charworknumber[20];
};
intmain()
{
fstreambookRecord("book.dat",ios:
:
in|ios:
:
out);
if(!
bookRecord)
{
cerr<<"Can'topen,tryagain!
"<exit
(1);
}
fstreamreaderRecord("reader.dat",ios:
:
in|ios:
:
out);
if(!
readerRecord)
{
cerr<<"Can'topen,tryagain!
"<exit
(1);
}
intchoice;
intkey;Readerreader(readerRecord);//读者管理系统
Liberianliberian("李天","123456");//图书管理员
Historyrec(readerRecord);//声明显示历史记录类
while
(1)
{
cout<<"请输入您的选择:
\n\n"
<<"1--图书管理员\n"
<<"2--读者系统\n"
<<"0--结束程序\n";
cin>>choice;
switch(choice)
{
case1:
{
cout<<"Hello,图书管理员:
\n";
liberian.selfprint();cout<cout<<"1--增加新图书\n"
<<"2--改变读者的属性\n"
<<"3--显示历史记录\n"
<<"0--返回\n";
cin>>key;
switch(key)
{
case1:
liberian.Append(bookRecord);
break;
case2:
liberian.changeReader(reader);
break;
case3:
rec.readhistory(readerRecord);
case0:
break;
}
}
break;
case2:
{
cout<<"学生读者\n";intiflag=1;
//reader.findreader();
cout<<"1--借书与还书信息\n"
<<"2--修改个人信息\n"
<<"0--返回\n";
cin>>key;
switch(key)
{
case1:
reader.handlebook(bookRecord);
break;
case2:
reader.change();
break;
case0:
break;
}
}
break;
default:
return0;
}
}
return0;
}
//增加书籍
voidLiberian:
:
Append(fstream&storef)
{
bookDatabook;
intchoice;
intkey;
intnum;
storef.seekp(0,ios:
:
end);
intposEnd=storef.tellp();
cout<<"*************书籍入库***************"<while
(1)
{
cout<<"Pleaseenteryourchoice:
"<cout<<"1--添加新书\n"<<"2--已有书籍\n"<<"0--返回\n";
cin>>choice;
switch(choice)
{
case1:
cout<<"书号,书名,数量?
"<cin>>book.booknumber>>book.bookname>>book.store;
storef.write(reinterpret_cast(&book),sizeof(bookData));
break;
case2:
storef.seekg(0,ios:
:
beg);
cout<<"Booknumber?
\n";
cin>>key;
do{
storef.read(reinterpret_cast(&book),sizeof(bookData));
}while(book.booknumber!
=key&&storef.tellg()!
=posEnd);
if(book.booknumber==key)
{
cout<cout<<"输入已有书增加的数量:
"<cin>>num;
if(num>0)
book.store+=num;
else
{
cout<<"Invalidinput"<}
storef.seekp(-long(sizeof(bookData)),ios:
:
cur);////////////////////
storef.write(reinterpret_cast(&book),sizeof(bookData));
cout<<"现在书籍:
"<"<}
else
cout<<"找不到此书,请重新查阅书号是否正确!
"<break;
case0:
return;
}
}
}
//书籍查询
voidFind(fstream&f)
{
bookDatabook;
intkey;
intchoice;
f.seekg(0,ios:
:
end);
intposEnd=f.tellp();
cout<<"*************书籍查询***************"<while
(1)
{
cout<<"请输入您的选择\n"
<<"1--检索一本书\n"
<<"2--显示全部书籍\n"
<<"0--返回\n";
cin>>choice;
switch(choice)
{
case1:
f.seekg(0,ios:
:
beg);
cout<<"输入你想检索书的书号"<cin>>key;
do{
f.read(reinterpret_cast(&book),sizeof(bookData));
}while(book.booknumber!
=key&&f.tellg()!
=posEnd);
if(book.booknumber==key)
cout<else
cout<<"找不到此书,请重新确认!
"<break;
case2:
f.seekg(0,ios:
:
beg);
do{
f.read(reinterpret_cast(&book),sizeof(bookData));
cout<}while(f.tellg()!
=posEnd);
break;
case0:
return;
}
}
}
Reader:
:
Reader(fstream&c)
{
file=c;
Personperson={"0","0",0,{{0,"0",0},{0,"0",0}}};
}
voidReader:
:
print()
{
cout<<"Name"<<"---"<}
//操作书籍?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
voidReader:
:
handlebook(fstream&filee)
{
intkey;intchoice;
bookDatabook;booliflag;intnum=0;
filee.seekp(0,ios:
:
end);
intposEnd=filee.tellp();
while(!
(iflag=findreader()))
{
num++;
if(num>=3)
return;
}
//cout<while
(1)
{
cout<<"1--借书\n"
<<"2--还书\n"
<<"3--查找一本书\n"
<<"0--返回"<<'\n';
cin>>choice;
switch(choice)
{
case1:
{
filee.seekp(0,ios:
:
end);
intposEnd=filee.tellp();
if(person.count<=1)
{
cout<<"输入你要借阅图书的书号:
"<cin>>key;
filee.seekg(0);
do{
filee.read(reinterpret_cast(&book),sizeof(bookData));
}while(book.booknumber!
=key&&filee.tellp()!
=posEnd);
//cout<if(book.booknumber==key)
{
//cout<<"找到你想借阅的图书,成功借阅!
"<if(book.store>0)
{
person.Rbook[person.count]=book;
person.count+=1;
book.store-=1;
filee.seekp(-long(sizeof(bookData)),ios:
:
cur);
filee.write(reinterpret_cast(&book),sizeof(bookData));
cout<<"找到你想借阅的图书,成功借阅!
"<cout<<"书籍:
"<"<}
else
cout<<"现在此图书已经被借完了,请耐心等待几天!
"<}
else
cout<<"找不到你想要的图书"<}
else
cout<<"你最多只能借2本\n\n";
}
break;
case2:
{
bookDatablankbook={0,"0",0};
//if(person.count>0)
//{
intiflag=0;
filee.seekg(0);
cout<<"输入你想要还的书的书号:
"<cin>>key;
for(inti=0;i<2;i++)
{
if(key==person.Rbook[i].booknumber)
{
person.Rbook[i]=blankbook;
cout<<"成功归还此书!
";
iflag=1;
person.count--;
do{
filee.read(reinterpret_cast(&book),sizeof(bookData));
}while(book.booknumber!
=key&&filee.tellp()!
=posEnd);
if(book.booknumber==key)
{
book.store+=1;
filee.seekp(-long(sizeof(bookData)),ios:
:
cur);
filee.write(reinterpret_cast(&book),sizeof(bookData));
cout<<"书籍:
"<"<}
}
}
if(!
iflag)
{
cout<<"你没有借阅那本书,请确认!
"<}
//}
//else
//cout<<"你没有借书,请重新确认!
\n\n";
}
break;
case3:
Find(filee);
break;
case0:
return;
}
}
}
voidReader:
:
change()
{
charnewname[20];charnewnumber[10];
intchoice;
file.seekp(0,ios:
:
cur);
intPosend=file.tellp();booliflag;intnum=0;
while(!
(iflag=findreader()))
{
num++;
if(num>=3)
return;
}
cout<<"请输入你的选择!
"<cout<<"1--改变名字!
\n"
<<"2--修改学号r\n"
<<"0--返回\n";
cin>>choice;
switch(choice)
{
case1:
cout<<"输入你的新名字!
\n";
cin>>newname;
strcpy(person.name,newname);
break;
case2:
cout<<"输入你的信学号?
\n";
cin>>newnumber;
strcpy(person.studynumber,newnumber);
break;
default:
break;;
}
file.seekp(-long(sizeof(Person)),ios:
:
cur);
file.write(reinterpret_cast(&person),sizeof(Person));
cout<<"信息修改成功!
"<}
voidLiberian:
:
selfprint()
{
cout<<"图书管理员:
\n"
<\n";
}
Liberian:
:
Liberian(char*a,char*b)
{
strcpy(workname,a);
strcpy(worknumber,b);
}
voidLiberian:
:
changeReader(Reader&a)
{
intchoice;charnewname[20];charnewnumber[10];
cout<<"修改读者的数据信息!
\n";
cout<<"1--增加一个读者\n"
<<"2--删除一个读者\n"
<<"0--结束程序\n";
cin>>choice;
switch(choice)
{
case1:
a.Addreader();
break;
case2:
a.deletereader();
break;
case0:
return;
}
}
voidReader:
:
Addreader()
{
Persontemp;bookDatabook={0,"0",0};
file.seekp(0,ios:
:
end);
intPosend=file.tellp();
cout<<"输入你想要增加的读者的名字"<cin>>temp.name;
cout<<"新读者的学号:
"<cin>>temp.studynumber;
temp.Rbook[1]=book;temp.Rbook[0]=book;temp.count=0;
file.write(reinterpret_cast(&temp),sizeof(Person));
cout<<"成功添加!
"<}
voidReader:
:
deletereader()
{
file.seekp(0,ios:
:
end);
intPosend=file.tellp();
Personperson;
charname[20];
cout<<"输入要删除的读者的名字!
"<cin>>name;
file.seekg(0);
do{
file.read(reinterpret_cast(&person),sizeof(Person));
}while(strcmp(name,person.name)&&file.tellp()!
=Posend);
if(!
strcmp(name,person.name))
{
bookDatablankbook={0,"0",0};
Personguest={"0","0",0,{{0,"0",0},{0,"0",0}}};
file.seekp(-long(sizeof(Person)),ios:
:
cur);
file.write(reinterpret_cast(&guest),sizeof(Person));
cout<<"成功删除!
"<}
else
cout<<"查无此人!
"<}
boolReader:
:
findreader()
{
file.seekp(0,ios:
:
end);
intPosend=file.tellp();
charname[20];
Personguest={"0","0",0,{{0,"0",0},{0,"0",0}}};
cout<<"输入查找人的名字!
";
cin>>name;
file.seekg(0);
do{
file.read(reinterpret_cast(&person),sizeof(Person));
}while(strcmp(name,person.name)&&file.tellp()!
=Posend);
if(!
strcmp(name,person.name))
{
cout<<"查到此人:
"<returntrue;
}
else
{
cout<<"找不到此人,请重新确认!
"<returnfalse;
}
}
//借阅历史
voidHistory:
:
readhistory(fstream&a)
{
readerbook=a;
charname[10]="0";
readerbook.seekp(0,ios:
:
end);
intPosend=readerbook.tellp();
Personguest;intiflag=1;
cout<<"书籍借阅信息如下:
"<cout<<"姓名学号借书量书籍名"<readerbook.seekg(0,ios:
:
beg);
do{
readerbook.read(reinterpret_cast(&guest),sizeof(Person));
if(strcmp(guest.Rbook[1].bookname,name)||strcmp(guest.Rbook[1].bookname,name))
{
cout<for(inti=0;i<2;i++)
if(st