C++图书管理系统代码.docx

上传人:b****7 文档编号:10418249 上传时间:2023-02-11 格式:DOCX 页数:29 大小:185.25KB
下载 相关 举报
C++图书管理系统代码.docx_第1页
第1页 / 共29页
C++图书管理系统代码.docx_第2页
第2页 / 共29页
C++图书管理系统代码.docx_第3页
第3页 / 共29页
C++图书管理系统代码.docx_第4页
第4页 / 共29页
C++图书管理系统代码.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

C++图书管理系统代码.docx

《C++图书管理系统代码.docx》由会员分享,可在线阅读,更多相关《C++图书管理系统代码.docx(29页珍藏版)》请在冰豆网上搜索。

C++图书管理系统代码.docx

C++图书管理系统代码

C++图书管理系统代码

D

   return1;

   

   }

  }

  return0;

 }

 voiddisp()//读出读者信息

 {

  cout<

[";

  for(inti=0;i

   if(zfbook[i]!

=0)

    cout<

  cout<<"]"<

   

 }

};

 

//读者类库,实现建立读者的个人资料

 classRDatabase

private:

  inttop;      //读者记录指针

  Readerread[Maxr];//读者记录

public:

 RDatabase()  //构造函数,将reader.txt读到read[]中

 {

  Readers;

  top=-1;

  fstreamfile("reader.txt",ios:

:

in);//打开一个输入文件

  while

(1)

  {

   file.read((char*)&s,sizeof(s));

   if(!

file)break;

   top++;

   read[top]=s;

  }

  file.close();    //关闭reader.txt

 }

   voidclear()//删除所有读者信息

 {

  top=-1;

 }

 intaddreader(intn,char*na)//添加读者时先查找是否存在

 {

  Reader*p=query(n);

  if(p==NULL)

  {

   top++;

   read[top].addreader(n,na);

   return1;

  }

  return0;

 }

 Reader*query(intreaderid)//按编号查找

 {

  for(inti=0;i<=top;i++)

   if(read[i].getno()==readerid&&

   read[i].gettag()==0)

   {

    return&read[i];

   }

   returnNULL;

 }

 voiddisp() //输出所有读者信息

 {

          for(inti=0;i<=top;i++)

     read[i].disp();

 }

 voidreaderdata();//读者库维护

 ~RDatabase() //析构函数,将read[]写到reader.txt文件中

 {

  fstreamfile("reader.txt",ios:

:

out);

       for(inti=0;i<=top;i++)

   if(read[i].gettag()==0)

    file.write((char*)&read[i],sizeof(read[i]));

   file.close();

 }

};

voidRDatabase:

:

readerdata()

{

   charchoice;

 charrname[20];

 intreaderid;

 Reader*r;

 while(choice!

='0')

 {

       cout<<"\n\n\t\t\t读  者  维  护\n\n\n\t\t1  新     增\n\n\t\t2  更     改\n\n\t\t3  删     除\n\n\t\t4  查     找\n\n\t\t5  显     示\n\n\t\t6  全     删\n\n\t\t0  退     出"<

  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<<"该读者不存在 "<

       break;

    }

    cout<<"输入新的姓名:

";

    cin>>rname;

    r->setname(rname);

    break;

           case'3':

       cout<<"输入读者编号:

";

                   cin>>readerid;

     r=query(readerid);

     if(r==NULL)

     {

        cout<<"该读者不存在"<

        break;

     }

     r->delbook();

     break;

   case'4':

    cout<<"读入读者编号:

";

    cin>>readerid;

    r=query(readerid);

    if(r==NULL)

    {

     cout<<"该读者不存在"<

     break;

    }

    r->disp();

    break;

   case'5':

    disp();

    break;

   case'6':

    clear();

    break;

   default:

cout<<"输入错误,请从新输入:

";break;

  }

 }

}

 

 

//图书类,实现对图书的描述,图书的编号,书名,借出,还入等

classBook

{

private:

   inttag;//删除标记1:

已删0:

未删

 intno;//图书编号

 charname[20];//书名

 intonshelf;//是否再架1:

再架2:

已借

public:

 Book(){}

 char*getname(){returnname;}//获取姓名

 intgetno(){returnno;}//获取图书编号

 intgettag(){returntag;}//获取删除标记

 voidsetname(charna[])//设置书名

 {

  strcpy(name,na);

 }

 voiddelbook(){tag=1;}//删除图书

 voidaddbook(intn,char*na)//增加图书

 {

  tag=0;

  no=n;

  strcpy(name,na);

  onshelf=1;

 }

 intzfrowbook()//借书操作

 {

  if(onshelf==1)

  {

   onshelf=0;

   return1;

  }

  return0;

 }

 voidretbook()//还书操作

 {

  onshelf=1;

 }

 voiddisp()//输出图书

 {

  cout<

   <<(onshelf==1?

"在架":

"已借")<

 }

};

 

 

//图书库类,实现对图书的维护,查找,删除等

classBDatabase

{

private:

   inttop;        //图书记录指针

 Bookbook[Maxb];//图书记录

public:

 BDatabase()//构造函数,将book.txt读到book[]中

 {

   Bookb;

   top=-1;

   fstreamfile("book.txt",ios:

:

in);

   while

(1)

   {

    file.read((char*)&b,sizeof(b));

    if(!

file)break;

    top++;

    book[top]=b;

   }

   file.close();

 }

   voidclear()//全删

 {

  top=-1;

 }

   intaddbook(intn,char*na)//增加图书

 {

  Book*p=query(n);

  if(NULL==p)

  {

   top++;

   book[top].addbook(n,na);

   return1;

  }

  return0;

 }

 Book*query(intbookid)//查找图书

 {

  for(inti=0;i<=top;i++)

   if(book[i].getno()==bookid&&book[i].gettag()==0)

   { 

    return&book[i];

   }

   returnNULL;

 }

 voidbookdata();//图书库维护

 voiddisp()

 {

  for(inti=0;i<=top;i++)

   if(book[i].gettag()==0)

    book[i].disp();

 }

 ~BDatabase()//析构函数,将book[]写到book.txt文件中

 {

  fstreamfile("book.txt",ios:

:

out);

       for(inti=0;i<=top;i++)

   if(book[i].gettag()==0)

    file.write((char*)&book[i],sizeof(book[i]));

   file.close();

 }

};

voidBDatabase:

:

bookdata()

{

   charchoice;

 charbname[40];

 intbookid;

 Book*b;

 while(choice!

='0')

 {

  cout<<"\n\n\n\t\t\t图 书 维 护"<

  cout<<"\t\t1  新    增\n\t\t2  更    改\n\t\t3  删    除\n\t\t4  查    找\n\t\t5  显    示\n\t\t6  全    删\n\t\t0  退    出"<

  cin>>choice;

  switch(choice)

  {

           case'1':

    cout<<"输入图书编号:

"<

    cin>>bookid;

               cout<<"输入图书书名:

"<

    cin>>bname;

    addbook(bookid,bname);

    break;

           case'2':

    cout<<"输入图书编号:

"<

    cin>>bookid;

    b=query(bookid);

    if(b==NULL)

    {

     cout<<"该图书不存在 "<

       break;

    }

    cout<<"输入新的书名:

"<

    cin>>bname;

    b->setname(bname);

    break;

           case'3':

       cout<<"读入图书编号:

"<

                   cin>>bookid;

     b=query(bookid);

     if(b==NULL)

     {

        cout<<"该图书不存在"<

        break;

     }

     b->delbook();

     break;

   case'4':

    cout<<" 读入图书编号:

"<

    cin>>bookid;

    b=query(bookid);

    if(b==NULL)

    {

     cout<<" 该图书不存在"<

     break;

    }

    b->disp();

    break;

   case'5':

    disp();

    break;

   case'6':

    clear();

    break;

   default:

cout<<"输入错误,请从新输入:

";

  }

 }

}

 

//main()函数的实现,程序的主界面的引导

voidmain()

{   

 charchoice;

 intbookid,readerid;

 RDatabaseReaderDB;

 Reader*r;

 BDatabaseBookDB;

 Book*b;

 while(choice!

='0')

 {      

   cout<

     

   cout<<"\t\t\t1   借      书\n\n\t\t\t2   还      书\n\n\t\t\t3   图书维护\n\n\t\t\t4   读者维护\n\n\t\t\t0   离      开"<

   cin>>choice;

   switch(choice)

   {

   case'1':

    cout<<" 借书读者编号:

";

    cin>>readerid;

    cout<<" 图书编号:

";

    cin>>bookid;

    r=ReaderDB.query(readerid);//按编号查找

    if(NULL==r)

    {

     cout<<" 不存在该读者,不能借书"<

     break;

    }

    b=BookDB.query(bookid);

    if(b==NULL)

    {

     cout<<" 不存在该图书,不能借书"<

     break;

    }

    if(b->zfrowbook()==0)

    {

     cout<<" 该图书已借出,不能借书"<

     break;

    }

    r->zfrowbook(b->getno());

    break;

   case'2':

    cout<<"还书\n读者编号:

";

    cin>>readerid;

    cout<<"  图书编号:

";

    cin>>bookid;

    r=ReaderDB.query(readerid);

    if(r==NULL)

    {

     cout<<"不存在该读者,不能还书"<

     break;

    }

    b=BookDB.query(bookid);

    if(b==NULL)

    {

     cout<<" 不存在该图书,不能还书"<

     break;

    }

    b->retbook();

    r->retbook(b->getno());

    break;

   case'3':

     BookDB.bookdata();

     break;

   case'4':

       ReaderDB.readerdata();

       break;

   default:

cout<<"输入错误,请从新输入:

";

   }

 }

}

 

1、类的设计

Book类的设计:

Book

Name[strNum]:

char

number[strNum]:

char

kind[type]:

char

inttag;intnum;intadd

Book(){}

getkind():

char

getname():

char

getnum():

int

gettag():

int

setnumber(charnum[]):

void

setname(charna[]):

void

setkind(charkin[]):

void

delbook():

void

addbook(intn,char*na,char*kin):

void

disp():

void

(1)数据成员

charname[StrNum];用来存放书名。

charnumber[StrNum];用来存放图书的编号。

charkind[Type];用来存放图书的类型。

inttag;定义删除标记。

intnum;定义图书编号为整形。

intadd;增加标记。

(2)函数成员

Book(){}无参构造函数,用于为书名和作者姓名设置默认值。

chargetkind()用于获取图书类型。

chargetname()用于获取书名。

intgetnum()用于获取图书编号。

intgettag()用于获取删除标记。

voidsetname(charna[])用于设置书名。

voidsetkind(charkin[])用于设置类型。

voiddelbook()用于删除图书。

voidaddbook(intn,char*na,char*kin)用于增加图书。

voiddisp()用于输出图书。

2.主程序的设计:

(1)函数的设计:

classBDatabase{}图书管理类的设置,实现对图书的添加,查找,删除等。

inttop;设置图书记录指针。

Bookbook[Maxb];设置图书记录(Maxb定义为最多可存储的图书数,定义为整形)。

voidclear()清空图书记录。

intaddbook(intn,char*na,char*kin)增加图书记录。

Book*query(intbookid)查找图书记录。

voidbookdata();定义图书库。

voiddisp()输出。

~BDatabase()设置析构函数,将book[]写到book.txt文件中

voidBDatabase:

:

bookdata()由此函数开始对图书管理系统的主菜单进行调用与功能的实现。

(界面参看执行界面部分)

最后用main()函数的实现,程序的主界面的引导

3.源代码分析:

/*****************************************************************************************/

#defineStrNum20

#defineType20

#include

#include

#include

#include//输入/输出文件流类

usingnamespacestd;

constintMaxb=100;//最多可存储的图书

classBook

{

private:

inttag;//删除标记

intnum;//图书编号

intadd;//增加标记

charnumber[StrNum];//编号

charname[StrNum];//书名

charkind[Type];//图书类型

public:

Book(){}

chargetkind()//获取图书类型

{

returnkind[Type];

}

chargetname()//获取书名

{

returnname[StrNum];

}

intgetnum()//获取图书编号

{

returnnum;

}

intgettag()//获取删除标记

{

returntag;

}

voidsetname(charna[])//设置书名

{

strcpy(name,na);

}

voidsetkind(charkin[])//设置类型

{

strcpy(kind,kin);

}

voiddelbook()//删除图书

{

tag=1;

}

voidaddbook(intn,char*na,char*kin)//增加图书

{

tag=0;

num=n;

strcpy(name,na);

strcpy(kind,kin);

}

voiddisp()//输出图书

{

cout.flags(ios:

:

left);//设置对齐的标志位为左

cout<

}

};

/*****************************************************************************************/

classBDatabase

{

private:

inttop;//图书记录指针

Bookbook[Maxb];//图书记录

public:

BDatabase()//构造函数,将book.txt读到book[]中

{

Bookb;

top=-1;

fstreamfile("book.txt",io

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1