图书管理系统代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一.各模块的功能:
readtxt(),读读者文件writetxt(),写读者文件addreader(reader s) ,添加读者delreader(int number),删除读者searchreader(int number),查找读者readerdata() ,读者数据管理readbtxt(),读图书文件writebtxt(),写图书文件addbook(libook s),添加图书delbook(int number),删除图书searchbook(int number),查找图书bookdata(),图书数据管理borbook(),读者借书retbook(),读者还书main()主函数
二.程序流程图:
void main() :
三.用户手册:1,使用程序前先对图书库,读者库进行初始化,然后才能进行相应的操作2,本程序又一定的纠错功能
①调用子函数对功能进行相应的选择的时候,如果选择的端子不正确,则提示错误
②对添加的读者函数操作的时候如果读者库已经满了,读者申请的编号已经存在的情况则提示错误
③对删除读者函数操作的时候,如果输入的读者编号不存在则提示错误
④对查找读者函数操作的时候,如果输入的读者编号不存在的时候则提示错误
⑤对新书入库函数操作的时候,如果书库已经满或者申请的书编号已经存在,则提示错误
⑥对删除的图书函数进行操作的时候,如果要删除的图书编号不存在,则提示出错
⑦对查找函数操作的时候,如果要查找的图书函数不存在,则提示出错
⑧对借书函数进行操作时,如果读者编号不存在,不能在借书,所要借的书已经借出,或者要借的书不存在的时候,则提示出错
⑨对还书函数操作的时候,如果读者编号不存在,所还图书不为图书馆所有时,则提示出错。
四.原程序
#include iostream.h
#include iomanip.h
#include string.h
#include fstream.h
#define maxbor 3
#define maxreader 100
#define maxbook 400
struct reader //定义读者结构体
{
int number;
char name[10];
int borbook[maxbor];
};
struct libook //定义图书结构体
{
int flag;
int number;
char name[20];
char writer[20];
float price;
};
int topbook;
int topreader;
reader read[maxreader];
libook book[maxbook];
void readtxt() //读入读者数据
{
reader p;
topreader=-1;
fstream file(reader.txt,ios::in);
while(1)
{
file.read((char*)&p,sizeof(p));
if(!file)break;
topreader++;
read[topreader]=p;
}
file.close();
}
void writetxt() //写入读者数据
{
fstream file(reader.txt,ios::out);
for(int i=0;i<=topreader;i++)
file.write((char*)&read[i],sizeof(read[i]));
file.close();
}
void addreader(reader s) //新增读者
{
readtxt();
if(topreader>=maxreader)
{
cout<<读者库已经满!<<ENDL;
return;
}
for(int i=0;i<=topreader;i++)
if(read[i].number==s.number)
{
cout<<此编号已经存在,请重新输入信息!<<ENDL; return;
}
topreader++;
read[topreader].number=s.number;
strcpy(read[topreader].name,);
for(i=0;i<MAXBOR;I++)
read[topreader].borbook[i]=0;
writetxt();
}
void delreader(int number) //删除读者
{
readtxt();
for(int i=0;i<TOPREADER;I++)
{
if(read[i].number==number)
{
for(int m=0;m<MAXBOR;M++)
if(read[i].borbook[m]!=0)
{
cout<<此读者还有图书没有还,等还后在申请删除此读者<<ENDL; return;
}
for(int j=i;j<TOPREADER;J++)
{
read[j].number=read[j+1].number;
strcpy(read[j].name,read[j+1].name);
for(int k=0;k<MAXBOR;K++)
read[j].borbook[k]=read[j+1].borbook[k];
}
topreader--;
writetxt();
return;
}
}
if(read[topreader].number=number)
{
topreader--;
writetxt();
return;
}
cout<<查无次人!<<ENDL;
return;
}
void searchreader(int number) //查找读者
{
readtxt();
for(int i=0;i<=topreader;i++)
if(read[i].number==number)
cout<<编号:<<READ[I].NUMBER<<ENDL;
cout<<姓名:<<READ[I].NAME<<ENDL;
cout<<所借的书的编号;
if(read[i].borbook[0]==0)
{
cout<<: 无借书<<ENDL;
return;
}
else
{
for(int j=0;read[i].borbook[j]!=0&&j<MAXBOR;J++)COUT<<READ[I].BORBOOK[J]<< ; return;
}
}
cout<<查无此人<<ENDL;
}
void readerdata() //读者数据维护
{
int choice, number;
reader s;
while(1)
{
cout<<读者维护1 :新增2:删除3:查找0:退出<<ENDL;
cin>>choice;
switch(choice)
{
case 0: return;
case 1: cout<<输入读者编号:;
cin>>s.number;
cout<<输入读者姓名:;
cin>>;
addreader(s);
break;
case 2: cout<<输入删除读者的编号:;
cin>>number;
delreader(number);
break;
case 3: cout<<请出入要查找的读者的编号:;
cin>>number;
searchreader(number);
break;
default: cout<<输入错误,请重新输入<<ENDL;
break;
}
}
void readbtxt() //读入图书数据
{
libook p;
topbook=-1;
fstream file(book.txt,ios::in);
while(1)
{
file.read((char*)&p,sizeof(p));
if(!file)break;
topbook++;
book[topbook]=p;
}
file.close();
}
void writebtxt() //写入图书数据
{
fstream file(book.txt,ios::out);
for(int i=0;i<=topbook;i++)
file.write((char*)&book[i],sizeof(book[i]));
file.close();
}
void addbook(libook s) //新增图书
{
readbtxt();
if(topbook>=maxbook)
{
cout<<书库已经满<<ENDL;
return;
}
for(int i=0;i<=topbook;i++)
if(book[i].number==s.number)
{
cout<<此编号已经存在,请重新输入信息<<ENDL; return;
}
topbook++;
book[topbook].number=s.number;
strcpy(book[topbook].name,);
strcpy(book[topbook].writer,s.writer);
strcpy(book[topbook].print,s.print);
book[topbook].price=s.price;
book[topbook].flag=1;
writebtxt();
}
void delbook(int number) //删除图书
{
readbtxt();
for(int i=0;i<TOPBOOK;I++)
if(book[i].number==number)
{
if(book[i].flag==0)
{
cout<<此书已经借出,请还回时再删除<<ENDL; return;
}
for(int j=i;j<TOPBOOK;J++)
{
book[j].number=book[j+1].number;
book[j].flag=1;
strcpy(book[j].name,book[j+1].name);
strcpy(book[j].writer,book[j+1].writer);
strcpy(book[j].print,book[j+1].print);
book[j].price=book[j+1].price;
};
topbook--;
writebtxt();
return;
}
if(book[topbook].number==number)topbook--; else
{
cout<<查无此书<<ENDL;
return;
}
writebtxt();
}
void searchbook(int number) //查找图书
{
readbtxt();
for(int i=0;i<=topbook;i++)
if(book[i].number=number)
{
cout<<编号:<<BOOK[I].NUMBER<<ENDL; cout<<状态:;
if(book[i].flag==1)cout<<书库中存在<<ENDL;
else cout<<书已经借出<<ENDL;
cout<<书名:<<BOOK[I].NAME<<ENDL;
cout<<作者:<<BOOK[I].WRITER<<ENDL;
cout<<出版社:<<BOOK[I].PRINT<<ENDL;
cout<<价格:<<BOOK[I].PRICE<<ENDL;
return;
}
cout<<查无此书!<<ENDL;
}
void bookdata() //图书管理
{
int choice,number;
libook s;
while(1)
{
cout<<图书维护1:新增2:删除3:查找0:退出<<ENDL; cin>>choice;
switch(choice)
{
case 0: return;
case 1: cout<<输入图书编号:;
cin>>s.number;
cout<<输入图书的名称:;
cin>>;
cout<<输入作者的姓名:;
cin>>s.writer;
cout<<输入出版社:;
cin>>s.print;
cout<<输入价格:;
cin>>s.price;
addbook(s);
break;
case 2: cout<<输入删除图书的编号;
cin>>number;
delbook(number);
break;
case 3: cout<<输入要查找的图书的编号:;
cin>>number;
searchbook(number);
break;
default: cout<<输入错误!<<ENDL;
break;
}
}
}
void borbook()
{
int number,numbers;
readbtxt();
readtxt();
cout<<请输入你的编号:;
cin>>numbers;
for(int i=0;i<=topreader;i++)
if(read[i].number==numbers)break;
if(i=topreader+1)
{
cout<<没有你的信息!<<ENDL; return;
}
for(int j=0;j<MAXBOR;J++)
if(read[i].borbook[j]==0)break;
if(j>maxbor-1)
{
cout<<你所能借的书已经满了!<<ENDL; return;
}
cout<<请输入要借的书的编号!<<ENDL; cin>>number;
for(int k=0;k<=topbook;k++)
if(book[k].number=number)
{
if(book[k].flag=0)
{
cout<<此书已经借出!;
return;
}
book[k].flag=0;
read[i].borbook[j]=number;
writetxt();
writebtxt();
return;
}
cout<<此书不在,请重新借!<<ENDL; return;
}
void retbook()
{
int number,numbers;
readtxt();
readbtxt();
cout<<请输入你的编号:;
cin>>numbers;
for(int i=0;i<=topreader;i++)
{
if(read[i].number==numbers)break;
if(i=topreader+1)
{
cout<<没有你的信息!<<ENDL; return;
}
}
cout<<请输入要还的书的编号!; cin>>number;
for(int n=0;n<=topbook;n++)
if(book[n].number=number)break;
if(n==topbook+1||book[n].flag==1)
{
cout<<此书不为图书管所有!<<ENDL; return;
};
for(int j=0;j<MAXBOR;J++)
if(read[i].borbook[j]=number)
{
for(int k=0;k<MAXBOR;K++)
if(read[i].borbook[k]=0)break;
k--;
for(int m=j+1;m<=k;m++)
{
read[i].borbook[j]=read[i].borbook[m];
j++;
}
read[i].borbook[j]=0;
book[n].flag=1;
writetxt();
writebtxt();
return;
}
if(j=maxbor)
{
cout<<您没有借过这本书<<ENDL; return;
}
}
void main()
{
int x=1,y=1;
cout<<欢迎使用本图书管理系统!<<ENDL;
while(x!=0)
{
cout<<请选择目的1:进入图书管理系统0:退出图书管理系统<<ENDL;
cin>>x;
switch(x)
{
case 1: while(y!=0)
{
cout<<请选择目的1:借书2:还书3:图书维护4:读者维护0:返回上一层<<ENDL; cin>>y;
switch(y)
{
case 1: borbook();break;
case 2: retbook();break;
case 3: bookdata();break;
case 4: readerdata();break;
case 0: break;
default:cout<<输入的不正确<<ENDL;BREAK;
}
};
break;
case 0: cout<<欢迎再次使用BYEBYE!<<ENDL;
return;
default :cout<<输入的不正确!<<ENDL;
break;
}
}
}。