您的位置:首页 > 理论基础 > 数据结构算法

图书管理程序(数据结构c语言实现增删改查)

2013-11-04 17:07 609 查看
 本人用C语言编写的第一个完整小程序实现图书的借阅管理,不完美之处欢迎交流! PS:我很菜。QQ:997459445 

#include <iostream>

#include <stdlib.h>

#include <iomanip>

#include <string>

#include <fstream>//输入/输出文件流类

#include <windows.h>

using namespace std;

 

 

const int Maxr=1000;//最多的读者

const int Maxb=1000;//最多的图书

const int Maxbor=7;//每位读者最多借七本书

 

 

//读者类,实现对读者的信息的描述

class Reader

{

private:

       inttag; //删除标记 1:已删 0:未删

       intno; //读者编号

       charname[10]; //读者姓名

       intborbook[Maxbor];//所借图书

public:

       Reader(){}

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

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

       intgetno() {return no;} //获取读者编号

       voidsetname(char na[]) //设置姓名

       {

              strcpy(name,na);

       }

      

      

       voiddelbook(){ tag=1; }//设置删除标记 1:已删 0:未删

      

      

       voidaddreader(int n,char *na)//增加读者

       {

              tag=0;

              no=n;

              strcpy(name,na);

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

                     borbook[i]=0;

       }

      

      

       voidborrowbook(int bookid)//借书操作

       {

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

              {

                     if(borbook[i]==0)

                     {

                            borbook[i]=bookid;

                            return;

                     }

              }

             

       }

      

      

       intretbook(int bookid)//还书操作

       {

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

              {

                     if(borbook[i]==bookid)

                     {

                            borbook[i]=0;

                            return1;

                           

                     }

              }

              return0;

       }

      

      

       voiddisp()//读出读者信息

       {

              cout<< setw(5) << no <<setw(10) << name<<"借书编号:[";

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

                     if(borbook[i]!=0)

                            cout<< borbook[i] << "and";

                     cout<< "]"<<endl;

                    

       }

};

 

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

class RDatabase

{

private:

       inttop; //读者记录指针

       Readerread[Maxr];//读者记录

public:

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

       {

              Readers;

              top=0;//-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=0;//-1;

       }

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

       {

              Reader *p=query(n);

              if(p==NULL)

              {

                     top++;

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

                     return1;

              }

              return0;

       }

       Reader*query(int readerid)//按编号查找

       {

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

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

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

                     {

                            return&read[i];

                     }

                     returnNULL;

       }

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

       {

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

                     read[i].disp();

       }

       voidreaderdata();//读者库维护

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

       {

              fstreamfile("reader.txt",ios::out);

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

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

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

                     file.close();

                    

       }

};

 

 

void RDatabase::readerdata()

{

      

       charchoice;

       charrname[20];

       intreaderid;

       Reader*r;

       while(choice!='0')

       {

              cout<<"                     欢迎登陆图书系统"<<endl;

              cout<<"\n\n\t\t\t~~~关 于 读 者~~~\n\n\n\t\t 1 新 增\n\n\t\t 2 更 改\n\n\t\t 3 删 除\n\n\t\t 4 查 找\n\n\t\t 5 显 示\n\n\t\t 6 全 删\n\n\t\t 0 退 出"<<endl;

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

                            break;

                     }

                     cout<< "输入新的姓名:";

                     cin>> rname;

                     r->setname(rname);

                     break;

              case'3':

                     cout<< " 输入读者编号:";

                     cin>> readerid;

                     r=query(readerid);

                     if(r==NULL)

                     {

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

                            break;

                     }

                     r->delbook();

                     break;

              case'4':

                     cout<< "读入读者编号:";

                     cin>> readerid;

                     r=query(readerid);

                     if(r==NULL)

                     {

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

                            break;

                     }

                     r->disp();

                     break;

              case'5':

                     disp();

                     break;

              case'6':

                     clear();

                     break;

              case'0':

                     cout<<"欢迎下次登陆"<<endl;

              default:cout<<"输入错误,请从新输入:"<<endl;break;

              }

       }

}

 

 

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

class Book

{

private:

       inttag;//删除标记 1:已删 0:未删

       intno;//图书编号

       charname[20];//书名

       intonshelf;//是否再架 1:再架 2:已借

public:

       Book()

       {}

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

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

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

       voidsetname(char na[])//设置书名

       {

              strcpy(name,na);

       }

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

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

       {

              tag=0;

              no=n;

              strcpy(name,na);

              onshelf=1;

       }

       intborrowbook()//借书操作

       {

              if(onshelf==1)

              {

                     onshelf=0;

                     return1;

              }

              return0;

       }

       voidretbook()//还书操作

       {

              onshelf=1;

 

       }

       voiddisp()//输出图书

       {

              cout<< setw(6) << no << setw(18) << name << setw(10)

                     <<(onshelf==1?"在架":"已借") <<endl;

       }

};

 

 

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

class BDatabase

{

private:

       inttop; //图书记录指针

       Bookbook[Maxb]; //图书记录

public:

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

       {

              Bookb;

              top=-1;

              fstreamfile("books.txt",ios::in);

              while(1)

              {

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

                     if(!file) break;

                     top++;

                     book[top]=b;

              }

              file.close();

       }

       voidclear()//全删

       {

              top=-1;

       }

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

       {

              Book*p=query(n);

              if(NULL==p)

              {

                     top++;

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

                     return1;

              }

              cout<<"操作成功!!!"<<endl;

              return0;

       }

       Book*query(int bookid)//查找图书

       {

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

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

                     {

                            return&book[i];

                     }

                     returnNULL;

       }

       voidbookdata();//图书库维护

       voiddisp()

       {

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

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

                            book[i].disp();

       }

   

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

       {

              fstreamfile("books.txt",ios::out);

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

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

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

                     file.close();

       }

};

 

 

void BDatabase::bookdata()

{

       charchoice;

       charbname[40];

       intbookid;

       Book*b;

       while(choice!='0')

       {

              cout<<"                      欢迎登陆图书系统"<<endl;

              cout<<"\n\n\n\t\t\t~~~关 于 图 书~~~ "<<endl<<endl;

              cout<<"\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 退 出"<<endl;

              cin>> choice;

              switch(choice)

              {

              case'1':

                     cout<< "输入图书编号:"<<endl;

                     cin>> bookid;

                     cout<< "输入图书书名:"<<endl;

                     cin>> bname;

                     addbook(bookid,bname);

                     cout<<"操作成功!!!"<<endl;

                     break;

              case'2':

                     cout<< "输入图书编号:"<<endl;

                     cin>> bookid;

                     b=query(bookid);

                     if(b==NULL)

                     {

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

                            break;

                     }

                     cout<< "输入新的书名:"<<endl;

                     cin>> bname;

                     b->setname(bname);

                     cout<<"操作成功!!!"<<endl;

                     break;

              case'3':

                     cout<<" 读入图书编号:"<<endl;

                     cin>> bookid;

                     b=query(bookid);

                     if(b==NULL)

                     {

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

                            break;

                     }

                     b->delbook();

                     cout<<"操作成功!!!"<<endl;

                     break;

              case'4':

                     cout<< " 读入图书编号:"<<endl;

                     cin>> bookid;

                     b=query(bookid);

                     if(b==NULL)

                     {

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

                            break;

                     }

                     b->disp();

                     cout<<"操作成功!!!"<<endl;

                     break;

              case'5':

                     disp();

                     //readtxt();

                     break;

              case'6':

                     clear();

                     cout<<"操作成功!!!"<<endl;

                     break;

              case'0':

                     cout<<"欢迎下次登陆"<<endl;

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

              }

       }

}

 

 

/*struct info

{

   int num;

       chara[10];

       charb[20];

       intc;

}txt[100];*/

 

void readtxt()

       {

   //    ofstream fout;

       //     fout.open("books.txt");

       //     if(!fout)

       //            fout<<"error"<<endl;

 

 

          ifstream fin("books.txt");

           string s;

              if(!fin)

                     cout<<"error"<<endl;

           while(getline(fin,s))

              {

                  cout<<'\n'<<'\n'<<"readfrom the txt:"<<s<<endl;

              }

              fin.close();

          

       }

 

 

 

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

{

   

/*    unsignedFREQUENCY[] = {392,392,440,392,523,494, 

 

              392,392,440,392,587,523, 

 

              392,392,784,659,523,494,440, 

 

              689,689,523,587,523}; 

 

   unsigned DELAY[] = {375,125,500,500,500,1000, 

 

              375,125,500,500,500,1000, 

 

             375,125,500,500,500,500,1000, 

 

              375,125,500,500,500,1000}; 

 

   int i; 

 

   for (i = 0; i < 25; i++) 

 

   { 

 

              Beep(FREQUENCY[i],DELAY[i]); 

 

       }

 

*/

 

       system("colore3");

   char command[] = "D:\\1.exe D:\\blue hills.jpg -compress noneD:\\blue hills.tiff";

   WinExec(command, 1);//好像只能用16位的。。。

 

 

//     cout<<"~~~~~~~~~~~~~~~~图书库~~~~~~~~~~~~~~~"<<endl;

   //readtxt();

//     system("cls");

 

       charchoice;

       intbookid,readerid;

       RDatabaseReaderDB;

       Reader*r;

       BDatabaseBookDB;

       Book*b;

      

       while(choice!='0')

       {

              cout<<"                       欢迎登陆图书系统"<<endl;

              cout<<'\n'<<endl;

              cout<<endl<<endl<<"\t\t\t 图书 系 统 \n\n\n";

             

              cout<<"\t\t\t1 借 书\n\n\t\t\t2 还 书 \n\n\t\t\t3 关 于 图 书\n\n\t\t\t4 关 于 读 者\n\n\t\t\t5 图 书 管 理\n\n\t\t\t0 离 开"<<endl;

              //system("cls");

              cin>> choice;

              system("cls");

       system("color b2");

              switch(choice)

              {

              case'1':

                     cout<<" 借书"<<endl<<" 读者编号: ";

                     cin>>readerid;

                     cout<<" 图书编号: ";

                     cin>>bookid;

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

                     if(NULL==r)

                     {

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

                            break;

                     }

                     b=BookDB.query(bookid);

                     if(b==NULL)

                     {

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

                            break;

                     }

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

                     {

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

                            break;

                     }

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

                     break;

              case'2':

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

                     cin>>readerid;

                     cout<< " 图书编号: ";

                     cin>>bookid;

                     r=ReaderDB.query(readerid);

                     if(r==NULL)

                     {

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

                            break;

                     }

            cout<<"操作成功!!!"<<endl;

                     b=BookDB.query(bookid);

                     if(b==NULL)

                     {

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

                            break;

                     }

                     b->retbook();

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

                     cout<<"操作成功!!!"<<endl;

                     break;

              case'3':

                     BookDB.bookdata();

                     break;

              case'4':

                     ReaderDB.readerdata();

                     cout<<"操作成功!!!"<<endl;

                     break;

             

              case'5':

 

                     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);

 

           cout<<"\n\n\n\n\n\n\n\n\t\t\t欢迎登陆图书管理界面"<<endl;

           system("cls");

                     cout<<"\n编号  "<<"书名   "<<"简介   "<<"分类号    "<<"出版社    "<<"作者 "<<endl;

           readtxt();

 

       case '0':

                     cout<<"欢迎下次登陆"<<'\n'<<endl;

              default:

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

                    

              }

              //system("cls");

              //voidreadtxt();

       }

}    

      程序经运行后,基本功能都能简单实现,无误。

    转载请注明出处! 源码地址:http://write.blog.csdn.net/postedit
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: