高分求c++图书管理系统,要求看补充。。采纳后追加80分。

图书管理系统1对于同一作者同意书名的书,存储书名、书目编号、作者名、库存册数(不包括已借出的)、已借出册数。2对于每一本书还要存储一个登录号(这是区别每一本书的唯一标识)... 图书管理系统
1对于同一作者同意书名的书,存储书名、书目编号、作者名、库存册数(不包括已借出的)、已借出册数。
2对于每一本书还要存储一个登录号(这是区别每一本书的唯一标识)、当前借阅该书的读者姓名与借书证号,借阅日期。
系统功能如下:
1创建存储系统。
2增加新书。
3删去无使用价值的旧书。
4借书处理。要求读者提供书目号和登录号,一读者限借2册,检查库中有无读者要求借阅的图书,检查该读者已借阅图书的数量。
展开
 我来答
tarzan1991
2011-07-02
知道答主
回答量:6
采纳率:0%
帮助的人:8.8万
展开全部
我的这个完全符合你的要求! 把分给我吧,CSU的!!
#include<fstream>
#include<iostream>
#include<iomanip>
#include<string>
using namespace std;
#include<stdlib.h>
template <class A>
A *creat(A*p)
{
A *w;w=p;
p=new A;
p->next=w;
return p;
}
struct Date{int y,m,d;};
struct Abb{char *name;int num;Date time;Abb *next;};
class stu
{
string name;int num,sb;
public:
stu(){sb=0;num=0;}
int givenum(){return num;}
string givename(){return name;}
void setf(int *a,char *b){num=*a;name=b;}
void set2(string a,int b,int c){ name=a;num=b;sb=c;}
void set(int *h)
{
cout<<"输入学生的借书证号和名字(退出此操作输入-1)"<<endl;
cin>>num;*h=num;
if(num==-1)
return;
cin>>name;
return;
}
void show()
{
cout<<name<<"已借"<<sb<<endl;
cout<<"还可借"<<2-sb<<endl;
}
int judnum(){ return num;}
int *judsb(){return &sb;}
};
struct stud{stu stus;stud *next;};
stud *head2=new stud;stud *last2=head2;
class abook
{
int num,s, num2;string name;Date btime;
public:
abook(){num=0;s=0;}
void show(){cout<<endl;cout<<setw(15)<<"登入号为"<<num<<endl;}
void inum(int*i,int j)
{cout<<"输入第"<<*i<<"册登入号"<<"还有"<<j-*i<<"册登入号未输"<<endl;
cin>>num;(*i)++;}
string name1(){return name;}
Date btime1(){ return btime;}
int num21(){return num2;}
int judge2(){return num;}
int *judge3(){return &s;}
void set(string p,int i,int a,int b,int c)
{
name=p;num2=i;btime.y=a;btime.m=b;btime.d=c;
}
void setf(int num1,int sta,string name1,int d,int y,int x,int z)
{
num=num1;
s=sta;
name=name1;
num2=d;
btime.y=y;
btime.m=x;
btime.d=z;
}
void setf(int num1,int sta)
{
num=num1;
s=sta;
}
void show2()
{
cout<<"┍━━━━━━┯━━━━━┯━━━━━━┑"<<endl
<<"│ 借阅者姓名 │ 借书证号 │ 日期 │"<<endl;
cout<<"┝━━━━━━┿━━━━━┿━━━━━━┥"<<endl
<<"│"<<setw(12)<<name<<"│"<<setw(10)<<num2
<<"│"<<btime.y<<"年"<<btime.m<<"月"<<btime.d<<"日"<<"│"<<endl
<<"┕━━━━━━┷━━━━━┷━━━━━━┙"<<endl;

}
};
struct crabook{abook AB; crabook *next;};
class bookf
{
string name,wname;int num,s,rs;
public:
bookf(){s=0;rs=0;head=new crabook;last=head;}
string give(){return name;}
string give3(){return wname;}
int give2(){return num;}
crabook *head,*last;
void ibook(int *h);
void ibook(string a,string b,int c,int d,int e);
void show();
int judge(){return s;}
int judge1(){return num;}int *change(){return &s;}
int *change2(){return &rs;}
};
void bookf::ibook(string a,string b,int c,int d,int e)
{
name=a;
wname=b;
s=c;
rs=d;
num=e;
}
void bookf::ibook(int*h)
{
int i=0;cout<<"输入册数,书名,书目编号,作者名,(退出当前操作输入-1)"<<endl;
cin>>s;*h=s;
if(s==-1)return;
cin>>name>>num>>wname;
for(i=1;i<=s;)
{
head->AB .inum(&i,s);head=creat(head);
}
}
void bookf::show()
{
cout<<"┍━━━━━┯━━━━━━┯━━━━┯━━━━━┯━━━━┑"<<endl
<<"│ 书名 │ 作者名 │ 库存数 │ 已借数 │书目编号│ "<<endl;
cout<<"┝━━━━━┿━━━━━━┿━━━━┿━━━━━┿━━━━┥"<<endl
<<"│"<<setw(8)<<name<<" "<<"│"<<setw(12)<<wname
<<"│"<<setw(8)<<s<<"│"<<setw(9)<<rs<<" "<<"│"<<setw(7)<<num<<" "<<"│"<<endl;
cout<<"┕━━━━━┷━━━━━━┷━━━━┷━━━━━┷━━━━┙"<<endl ;
}

struct BB
{bookf B;BB *next;};BB *head1=new BB;BB *last1=head1;
void addnew(string a,string b,int c,int d,int e)
{head1->B.ibook(a,b,c,d,e);}
void addnew()
{
int h;
cout<<"取消添加输入-1,否则输入0"<<endl;
cin>>h;
if(h==-1)return;
while(1)
{
(head1->B).ibook(&h);if(h==-1)break;
head1=creat(head1);

}
}
void Del()
{
BB *p;int w,n,h,flag=0;crabook *f,*m;
if(head1->next==NULL){cout<<"无数据可删"<<endl;return;}
cout<<"输入要删的书的编号与登入号"<<endl;
cin>>n>>w;
for(p=head1;;)
{
if((p->B).judge1()==n)
{flag=1;break;}
if(p==last1) break;p=p->next;
}
if(flag==0)
{
cout<<"无此书"<<endl;return;
}
for(m=(p->B).head;;)
{
if((m->AB).judge2()==w)
{flag=0;break;}if(m==(p->B).last) break;f=m;m=m->next;}
if(flag==1)
cout<<"输入的登入号有误"<<endl;
else
{
(p->B).show();
(m->AB).show();
if(*(m->AB).judge3()==1)
(m->AB).show2();
cout<<"确实要删除输入1,否输入0"<<endl;
cin>>h;
if(h==0)return;
else
{
if(m==(p->B).head)
{(p->B).head=m->next;free(m);}
else
if(m==(p->B).last) (p->B).last=f;
else
{
f->next=m->next;free(m);

(*(p->B).change())--;

}
cout<<"删除成功"<<endl;
}
}
}
void addstu(string name,int b,int c) { head2->stus.set2(name,b,c);
head2=creat(head2);}
void addstu()
{ int h;
cout<<"取消添加输入-1,否则输入0"<<endl;
cin>>h;
if(h==-1)return;
while(1)
{
(head2->stus).set(&h);
if(h==-1)break;head2=creat(head2);
}
}
void borrow()
{
BB *p;crabook *m;stud *e;int flag=0,w,n,g,h;int y,m1,d;
cout<<"输入你的借书证号"<<endl;cin>>g;
for(e=head2;;)//判断是否是本馆的读者
{
if((e->stus).judnum()==g)
{flag=1;break;}if(e==last2)break;e=e->next;
}
if(flag==0)
{
cout<<"你不是本馆的读者,不能借书"<<endl;
return;
}//限借2本
if((*(e->stus).judsb())==2)
{
cout<<"你已借了2本书,不能借了"<<endl;
return;
}
(e->stus).show() ;
cout<<"输入要查找书的编号与登入号"<<endl;
cin>>n>>w;
for(p=head1;;)
{
if((p->B).judge1()==n)
{flag=0;break;}if(p==last1) break;p=p->next;
}
if(flag==1){cout<<"无此书"<<endl;return;}
for(m=(p->B).head;;)
{
if((m->AB).judge2()==w)
{flag=1;break;}if(m==(p->B).last)break;m=m->next;
}
if(flag==0)
cout<<"输入的登入号有误"<<endl;
else
if(*((m->AB).judge3())==1)
cout<<"该书已被借"<<endl;
else
{
(p->B).show();
(m->AB).show();cout<<endl<<endl;
cout<<"确实要借输入1,否输入0"<<endl;
cin>>h;
if(h==0)return;
else
{
(*(p->B).change2())++;
(*(m->AB).judge3())++;
(*(e->stus).judsb())++;
cout<<"输入借阅日期"<<endl;
cin>>y>>m1>>d;
(m->AB).set((e->stus).givename(),(e->stus).givenum(),y,m1,d);
cout<<"借阅成功"<<endl;
}
}
}
void rebook()
{BB *p;crabook *m;stud *e;
int flag=0,w,n,g;
cout<<"输入你的借书证号"<<endl;cin>>g;
for(e=head2;;)
{
if((e->stus).judnum()==g)
{flag=1;break;}if(e==last2) break;e=e->next;
}
if(flag==0){cout<<"你不是本馆的读者,不能在本馆有借书"<<endl;return;}
cout<<"输入要还的书的书的编号与登入号"<<endl;
cin>>n>>w;
for(p=head1;;)
{if((p->B).judge1()==n)
{flag=0;break;}if(p==last1)break;p=p->next;}
if(flag==1){cout<<"不是本馆的书"<<endl;return;}
for(m=(p->B).head;;)
{if((m->AB).judge2()==w)
{flag=1;break;}if(m==(p->B).last)break;m=m->next;}
if(flag==0)
{cout<<"输入的登入号有误"<<endl;return;}
(*(p->B).change2())--;
(*(m->AB).judge3())--;
(*(e->stus).judsb())--;cout<<"还书成功"<<endl;

}
void findre()
{
BB *p;int w,flag=0;crabook *m;
cout<<"输入要查找书登入号"<<endl;
cin>>w;
for(p=head1;;)
{
for(m=(p->B).head;;)
{if((m->AB).judge2()==w)
{flag=1;break;}if(m==p->B.last)break;m=m->next;}
if(flag==1)break;if(p==last1)break;
p=p->next;
}
if(flag==0)
cout<<"输入的登入号有误"<<endl;
else
{if(*(m->AB).judge3()==0)
cout<<"该书未被借出"<<endl;
else
{(p->B).show();
(m->AB).show2();}
}
}
void loadfromfiles()
{int numr,sb1;char name[30]="";
fstream iofile;
iofile.open("stud.dat",ios::in|ios::binary);
if(!iofile){cout<<"数据文件不存在,请先建立该文件"<<endl;
return;}
if(iofile.eof()){cout<<"数据库为空,请添加数据"<<endl;
iofile.close();}
else
{while(iofile.peek()!=EOF)
{iofile.read((char*)name,30);
iofile.read((char*)&numr,sizeof(int));
iofile.read((char*)&sb1,sizeof(int));
addstu(name,numr,sb1);
}
iofile.close();
}
}
void loadfromfilebook()
{ int num1,s1,rs1,num3,numb,sta,y1,m1,d1,i;
char namer[30]="",bname[30]="",wname[30]="";
fstream iofile;
iofile.open("book.dat",ios::in|ios::binary);
if(!iofile){cout<<"数据文件不存在,请先建立该文件"<<endl;
return;}
if(iofile.eof()){cout<<"数据库为空,请添加数据"<<endl;
iofile.close();}
else
{ for(;iofile.peek()!=EOF;head1=creat(head1))
{iofile.read((char*)bname,30);
iofile.read((char*)wname,30);
iofile.read((char*)&s1,sizeof(int));
iofile.read((char*)&rs1,sizeof(int));
iofile.read((char*)&num1,sizeof(int));
addnew(bname,wname,s1,rs1,num1);
for(i=0;i<s1;i++)
{iofile.read((char*)&num3,sizeof(int));
iofile.read((char*)&sta,sizeof(int));
if(sta==0){head1->B.head->AB.setf(num3,sta);head1->B.head=creat(head1->B.head);}
else
{iofile.read((char*)namer,30);
iofile.read((char*)&numb,sizeof(int));
iofile.read((char*)&y1,sizeof(int));
iofile.read((char*)&m1,sizeof(int));
iofile.read((char*)&d1,sizeof(int));
head1->B.head->AB.setf(num3,sta,namer,numb,y1,m1,d1);head1->B.head=creat(head1->B.head);
}
}
}
iofile.close();
}
}
void saveToFilestu()
{
char name[30];int numm;
stud *p;
p=head2->next;
fstream iofile;
iofile.open("stud.dat",ios::out|ios::binary);
if(!iofile)
{
cerr<<"open error!"<<endl;
abort();}
while(1)
{ numm=p->stus.givenum();
p->stus.givename().copy(name,30,0);
name[p->stus.givename().length()]=0;
iofile.write((char*)name,30);
iofile.write((char*)&numm,sizeof(int));
iofile.write((char*)p->stus.judsb(),sizeof(int));
if(p==last2)break;
p=p->next;
}
}

void saveToFilebook()
{
char bname[30],wname[30],namer[30];
int num3,num1,s1,numb,sta,y,m1,d1,rs1,i;
BB *p;crabook *m;p=head1->next;fstream iofile;
iofile.open("book.dat",ios::out|ios::binary);
if(!iofile)
{
cerr<<"open error!"<<endl;
abort();}

while(1)
{
p->B.give().copy(bname,30,0);
bname[p->B.give().length()]=0;
p->B.give3().copy(wname,30,0);
wname[p->B.give3().length()]=0;
iofile.write((char*)bname,30);
iofile.write((char*)wname,30);
num1=p->B.give2();s1=p->B.judge();
rs1=*(p->B.change2());
iofile.write((char*)&s1,sizeof(int));
iofile.write((char*)&rs1,sizeof(int));
iofile.write((char*)&num1,sizeof(int));
m=p->B.head->next;
for(i=1;i<=s1;i++)
{
num3=m->AB.judge2();
sta=*(m->AB.judge3());
iofile.write((char*)&num3,sizeof(int));
iofile.write((char*)&sta,sizeof(int));
if(sta==0) { m=m->next;continue;}
else
{
m->AB.name1().copy(namer,30,0);
namer[m->AB.name1().length()]=0;
numb=m->AB.num21();
y=m->AB.btime1().y;
m1=m->AB.btime1().m;
d1=m->AB.btime1().d;
iofile.write((char*)namer,30);
iofile.write((char*)&numb,sizeof(int));
iofile.write((char*)&y,sizeof(int));
iofile.write((char*)&m1,sizeof(int));
iofile.write((char*)&d1,sizeof(int));
}
if(m==p->B.last)break;
m=m->next;
}
if(p==last1)break;
p=p->next;}
iofile.close();
}
int Menu()
{ cout<<" 《欢迎使用图书管理系统》\n\n"<<endl;
int n=1,select=-1;
cout<<" "<<n++<<"增加新书"<<endl<<endl;
cout<<" "<<n++<<"删除无实用价值的旧书"<<endl<<endl;
cout<<" "<<n++<<"借书"<<endl<<endl;
cout<<" "<<n++<<"还书"<<endl<<endl;
cout<<" "<<n++<<"查询"<<endl<<endl;
cout<<" "<<n++<<"增加读者"<<endl<<endl;
cout<<" "<<"0.退出"<<endl<<endl;
cout<<" "<<"[请选择(输入相应数字)]";
cin>>select;
return select;
}
char Exit()
{
char s;
cout<<"确定要退出程序吗?[Y/N]:";
cin>>s;
return s;
}
int main()
{

head2->next=NULL;head1->next=NULL;
loadfromfiles();
loadfromfilebook();

int select;
char s;
while(1)
{
select=Menu();
switch(select)
{
case 0 :s=Exit();
if(s=='y'||s=='Y'){ saveToFilestu();saveToFilebook();return 0;}
break;
case 1: addnew();system("pause");system("cls");
break;
case 2: Del();system("pause");system("cls");
break;
case 3: borrow();system("pause");system("cls");
break;
case 4: rebook();system("pause"); system("cls");
break;
case 5: findre();system("pause");system("cls");
break;
case 6: addstu();system("pause");system("cls");
break;
default:cout<<"无效输入!"<<endl;
}
}
return 0;
}
someone674
2011-06-24 · 超过21用户采纳过TA的回答
知道答主
回答量:98
采纳率:0%
帮助的人:59.7万
展开全部
这个是我以前做课程设计时的图书馆管理系统,自己做的没问题,你自己小改一下就可以了。
#include<iostream>
#include<string>
using namespace std;
class Book
{
private:
string bookname;
double price;
unsigned number;
public:
void borrow();
void restore();
void display();
Book(unsigned number=20);
void setsize(string bookname,double price);
};

Book::Book(unsigned number)
{
this->number=number;
}

void Book::setsize(string bookname,double price)
{
this->bookname=bookname;
this->price=price;
}

void Book::display()
{
cout<<"您借的书名为:"<<" "<<bookname<<endl;
cout<<"此书价钱为:"<<" "<<price<<"元"<<endl;
}

void Book::borrow()
{
cout<<"当前共有图书:"<<number<<"本"<<" ";
cout<<"您借走1本,还剩:"<<(number-1)<<"本"<<endl;
}

void Book::restore()
{
cout<<"当前共有图书:"<<number<<"本"<<" ";
cout<<"您归还1本后共"<<(number+1)<<"本"<<endl;
}

void main()
{
Book mybook;
string x;
cout<<"借书输入borrow还书输入restore"<<endl;
cin>>x;

if(x=="borrow")
{
string bookname;
double price;

cout<<"请输入书名和价钱: "<<endl;
cin>>bookname>>price;

mybook.setsize(bookname,price);
mybook.display();

cout<<"当前图书馆的图书情况: ";
mybook.borrow();
cout<<endl;
}

if(x=="restore")
{
string bookname;
double price;

cout<<"请输入书名和价钱: "<<endl;
cin>>bookname>>price;

cout<<"当前图书馆的图书情况: ";
mybook.restore();

}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式