图书管理系统代码

  1. //下面是图书馆管理系统制作的代码  
  2. //软件1303二组,主要的编码是由组长刘继国完成,小组成员负责调试和测试数据  
  3. //完成时间2013.10月13日  
  4.   
  5. #include <algorithm>  
  6. #include <iostream>//输入输出的头文件  
  7. #include <string>//字符串的头文件  
  8. #include <iomanip>//在使用格式化I/O的时候应该包含这个头文件  
  9. #include <cstring>  
  10. #include <fstream>  
  11. //输入/输出文件流类的头文件  
  12.   
  13. using namespace std;  
  14.   
  15. //首先定义一系列常量  
  16. const int MaxRead=100;//最多的读者  
  17. const int MaxBook=100;//最多的图书  
  18. const int MaxBookRead=5;//每位读者最多借五本书  
  19. //读者类,实现对读者的信息的描述  
  20.   
  21. class Reader  
  22. {  
  23. //定义类的私有成员  
  24. private:  
  25.     int flag;  //删除标记 1:已删 0:未删  
  26.     int no;   //读者编号  
  27.     char name[10];  //读者姓名  
  28.     int borbook[MaxBookRead];//所借图书  
  29. //定义类的公有成员  
  30. public:  
  31.     Reader() {}//构造函数:作用是初始化的操作  
  32.     char *getname()  
  33.     {  
  34.         return name;   //获取姓名  
  35.     }  
  36.     int gettag()  
  37.     {  
  38.         return flag;   //获取删除标记  
  39.     }  
  40.     int getno()  
  41.     {  
  42.         return no;   //获取读者编号  
  43.     }  
  44.     void setname(char na[])            //设置姓名  
  45.     {  
  46.         strcpy(name,na);  
  47.     }  
  48.     void delbook()  
  49.     {  
  50.         flag=1;     //设置删除标记 1:已删 0:未删  
  51.     }  
  52.     void addreader(int n,char *na)//增加读者  
  53.     {  
  54.         flag=0;  
  55.         no=n;  
  56.         strcpy(name,na);  
  57.         for(int i=0; i<MaxBookRead; i++)  
  58.             borbook[i]=0;  
  59.     }  
  60.     void borrowbook(int bookid)//借书操作  
  61.     {  
  62.         for(int i=0; i<MaxBookRead; i++)  
  63.         {  
  64.             if (borbook[i]==0)  
  65.             {  
  66.                 borbook[i]=bookid;  
  67.                 return;  
  68.             }  
  69.         }  
  70.     }  
  71.     int retbook(int bookid)//还书操作  
  72.     {  
  73.         for(int i=0; i<MaxBookRead; i++)  
  74.         {  
  75.             if(borbook[i]==bookid)  
  76.             {  
  77.                 borbook[i]=0;  
  78.                 return 1;  
  79.   
  80.             }  
  81.         }  
  82.         return 0;  
  83.     }  
  84.     void disp()//读出读者信息  
  85.     {  
  86.         cout << setw(5) << no <<setw(10) << name<<"借书编号:[";  
  87.         for(int i=0; i<MaxBookRead; i++)  
  88.             if(borbook[i]!=0)  
  89.                 cout << borbook[i] << "|";  
  90.         cout << "]"<<endl;  
  91.   
  92.     }  
  93. };  
  94.   
  95. //读者类库,实现建立读者的个人资料  
  96. class RDatabase  
  97. {  
  98. //定义类的私有成员  
  99. private:  
  100.     int top;       //读者记录指针  
  101.     Reader read[MaxRead];//读者记录  
  102. //定义类的私有成员  
  103. public:  
  104.     RDatabase()   //构造函数,将reader.txt读到read[]中  
  105.     {  
  106.         Reader s;  
  107.         top=-1;  
  108.         fstream file("reader.txt",ios::in);//打开一个输入文件  
  109.         while (1)//加入死循环中  
  110.         {  
  111.             file.read((char *)&s,sizeof(s));  
  112.             if (!file)break;  
  113.             top++;  
  114.             read[top]=s;  
  115.         }  
  116.         file.close();     //关闭 reader.txt  
  117.     }  
  118.     void clear()//删除所有读者信息  
  119.     {  
  120.         top=-1;  
  121.     }  
  122.     int addreader(int n,char *na)//添加读者时先查找是否存在  
  123.     {  
  124.         Reader *p=query(n);  
  125.         if (p==NULL)  
  126.         {  
  127.             top++;  
  128.             read[top].addreader(n,na);  
  129.             return 1;  
  130.         }  
  131.         return 0;  
  132.   
  133.     }  
  134.     Reader *query(int readerid)//按编号查找  
  135.     {  
  136.         for (int i=0; i<=top; i++)  
  137.             if (read[i].getno()==readerid &&  
  138.                     read[i].gettag()==0)  
  139.             {  
  140.                 return &read[i];  
  141.             }  
  142.         return NULL;  
  143.     }  
  144.     void disp()  //输出所有读者信息  
  145.     {  
  146.         for (int i=0; i<=top; i++)  
  147.             read[i].disp();  
  148.     }  
  149.     void readerdata();//读者库维护  
  150.     ~RDatabase()  //析构函数,将read[]写到reader.txt文件中  
  151.     {  
  152.         fstream file("reader.txt",ios::out);  
  153.         for (int i=0; i<=top; i++)  
  154.             if (read[i].gettag()==0)  
  155.                 file.write((char *)&read[i],sizeof(read[i]));  
  156.         file.close();  
  157.     }  
  158. };  
  159. void RDatabase::readerdata()  
  160. {  
  161.   
  162.     char choice;  
  163.     char rname[20];  
  164.     int readerid;  
  165.     Reader *r;  
  166.     while (choice!='0')  
  167.     {  
  168.         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;  
  169.         cin >> choice;  
  170.         switch (choice)  
  171.         {  
  172.         case '1':  
  173.             cout << "输入读者编号:";  
  174.             cin >> readerid;  
  175.             cout << "输入读者姓名:";  
  176.             cin >> rname;  
  177.             addreader (readerid,rname);  
  178.             break;  
  179.         case '2':  
  180.             cout << "输入读者编号:";  
  181.             cin >> readerid;  
  182.             r=query(readerid);  
  183.             if (r==NULL)  
  184.             {  
  185.                 cout << " 该读者不存在  "<<endl;  
  186.                 break;  
  187.             }  
  188.             cout << "输入新的姓名:";  
  189.             cin >> rname;  
  190.             r->setname(rname);  
  191.             break;  
  192.         case '3':  
  193.             cout << " 输入读者编号:";  
  194.             cin >> readerid;  
  195.             r=query(readerid);  
  196.             if (r==NULL)  
  197.             {  
  198.                 cout <<" 该读者不存在" << endl;  
  199.                 break;  
  200.             }  
  201.             r->delbook();  
  202.             break;  
  203.         case '4':  
  204.             cout << "读入读者编号:";  
  205.             cin >> readerid;  
  206.             r=query(readerid);  
  207.             if (r==NULL)  
  208.             {  
  209.                 cout <<"该读者不存在"<< endl;  
  210.                 break;  
  211.             }  
  212.             r->disp();  
  213.             break;  
  214.         case '5':  
  215.             disp();  
  216.             break;  
  217.         case '6':  
  218.             clear();  
  219.             break;  
  220.         default:  
  221.             cout<<"输入错误,请从新输入:";  
  222.             break;  
  223.         }  
  224.     }  
  225. }  
  226.   
  227. //图书类,实现对图书的描述,图书的编号,书名,借出,还入等  
  228. class Book  
  229. {  
  230. //定义类的私有成员  
  231. private:  
  232.     int tag;//删除标记 1:已删 0:未删  
  233.     int no;//图书编号  
  234.     char name[20];//书名  
  235.     int onshelf;//是否再架 1:再架 2:已借  
  236. //定义类的私有成员  
  237. public:  
  238.     Book() {}  
  239.     char *getname()  
  240.     {  
  241.         return name;    //获取姓名  
  242.     }  
  243.     int getno()  
  244.     {  
  245.         return no;    //获取图书编号  
  246.     }  
  247.     int gettag()  
  248.     {  
  249.         return tag;    //获取删除标记  
  250.     }  
  251.     void setname(char na[])//设置书名  
  252.     {  
  253.         strcpy(name,na);  
  254.     }  
  255.     void delbook()  
  256.     {  
  257.         tag=1;   //删除图书  
  258.     }  
  259.     void addbook(int n,char *na)//增加图书  
  260.     {  
  261.         tag=0;  
  262.         no=n;  
  263.         strcpy(name,na);  
  264.         onshelf=1;  
  265.     }  
  266.     int borrowbook()//借书操作  
  267.     {  
  268.         if (onshelf==1)  
  269.         {  
  270.             onshelf=0;  
  271.             return 1;  
  272.         }  
  273.         return 0;  
  274.     }  
  275.     void retbook()//还书操作  
  276.     {  
  277.         onshelf=1;  
  278.     }  
  279.     void disp()//输出图书  
  280.     {  
  281.         cout << setw(6) << no << setw(18) << name << setw(10)  
  282.              <<(onshelf==1? "在架":"已借") <<endl;  
  283.     }  
  284. };  
  285.   
  286. //图书库类,实现对图书的维护,查找,删除等  
  287. class BDatabase  
  288. {  
  289. private:  
  290.     int top;         //图书记录指针  
  291.     Book book[MaxBook]; //图书记录  
  292. public:  
  293.     BDatabase()//构造函数,将book.txt读到book[]中  
  294.     {  
  295.         Book b;  
  296.         top=-1;  
  297.         fstream file("book.txt",ios::in);  
  298.         while (1)  
  299.         {  
  300.             file.read((char *)&b,sizeof(b));  
  301.             if (!file) break;  
  302.             top++;  
  303.             book[top]=b;  
  304.         }  
  305.         file.close();  
  306.     }  
  307.     void clear()//全删  
  308.     {  
  309.         top=-1;  
  310.     }  
  311.     int addbook(int n,char *na)//增加图书  
  312.     {  
  313.         Book *p=query(n);  
  314.         if (NULL==p)  
  315.         {  
  316.             top++;  
  317.             book[top].addbook(n,na);  
  318.             return 1;  
  319.         }  
  320.         return 0;  
  321.     }  
  322.     Book *query(int bookid)//查找图书  
  323.     {  
  324.         for (int i=0; i<=top; i++)  
  325.             if (book[i].getno()==bookid &&book[i].gettag()==0)  
  326.             {  
  327.                 return &book[i];  
  328.             }  
  329.         return NULL;  
  330.     }  
  331.     void bookdata();//图书库维护  
  332.     void disp()  
  333.     {  
  334.         for (int i=0; i<=top; i++)  
  335.             if (book[i].gettag()==0)  
  336.                 book[i].disp();  
  337.     }  
  338.     ~BDatabase()//析构函数,将book[]写到book.txt文件中  
  339.     {  
  340.         fstream file("book.txt",ios::out);  
  341.         for (int i=0; i<=top; i++)  
  342.             if (book[i].gettag()==0)  
  343.                 file.write((char *)&book[i],sizeof(book[i]));  
  344.         file.close();  
  345.     }  
  346. };  
  347. void BDatabase::bookdata()  
  348. {  
  349.     char choice;  
  350.     char bname[40];  
  351.     int bookid;  
  352.     Book *b;  
  353.     while (choice!='0')  
  354.     {  
  355.         cout <<"\n\n\n\t\t\t图  书  维  护 "<<endl<<endl;  
  356.         cout<<"\t\t1   新     增\n \t\t2   更     改\n\t\t3   删     除\n\t\t4   查     找\n\t\t5   显     示\n\t\t6   全     删\n\t\t0   退     出"<<endl;  
  357.         cin >> choice;  
  358.         switch (choice)  
  359.         {  
  360.         case '1':  
  361.             cout << "输入图书编号:"<<endl;  
  362.             cin >> bookid;  
  363.             cout << "输入图书书名:"<<endl;  
  364.             cin >> bname;  
  365.             addbook(bookid,bname);  
  366.             break;  
  367.         case '2':  
  368.             cout << "输入图书编号:"<<endl;  
  369.             cin >> bookid;  
  370.             b=query(bookid);  
  371.             if (b==NULL)  
  372.             {  
  373.                 cout << " 该图书不存在  "<<endl;  
  374.                 break;  
  375.             }  
  376.             cout << "输入新的书名:"<<endl;  
  377.             cin >> bname;  
  378.             b->setname(bname);  
  379.             break;  
  380.         case '3':  
  381.             cout <<" 读入图书编号:"<<endl;  
  382.             cin >> bookid;  
  383.             b=query(bookid);  
  384.             if (b==NULL)  
  385.             {  
  386.                 cout <<" 该图书不存在" << endl;  
  387.                 break;  
  388.             }  
  389.             b->delbook();  
  390.             break;  
  391.         case '4':  
  392.             cout << "  读入图书编号:"<<endl;  
  393.             cin >> bookid;  
  394.             b=query(bookid);  
  395.             if (b==NULL)  
  396.             {  
  397.                 cout <<"  该图书不存在"<< endl;  
  398.                 break;  
  399.             }  
  400.             b->disp();  
  401.             break;  
  402.         case '5':  
  403.             disp();  
  404.             break;  
  405.         case '6':  
  406.             clear();  
  407.             break;  
  408.         default:  
  409.             cout<<"输入错误,请从新输入:";  
  410.         }  
  411.     }  
  412. }  
  413.   
  414. //main() 函数的实现,程序的主界面的引导  
  415.   
  416. int main(void)  
  417. {  
  418.     char choice;  
  419.     int bookid,readerid;  
  420.     RDatabase ReaderDB;  
  421.     Reader *r;  
  422.     BDatabase BookDB;  
  423.     Book *b;  
  424.     while(choice!='0')  
  425.     {  
  426.         cout <<endl<<endl<<"\t\t\t     图  书  管  理  系  统\n\n\n";//构造函数:作用是初始化的操作  
  427.         cout <<"\t\t\t1    借       书\n\n\t\t\t2    还       书 \n\n\t\t\t3    图 书 维 护\n\n\t\t\t4    读 者 维 护\n\n\t\t\t0    离       开"<<endl;  
  428.         cin >> choice;  
  429.         switch (choice)  
  430.         {  
  431.         case '1':  
  432.             cout <<"  借书 读者编号:";  
  433.             cin >>readerid;  
  434.             cout <<"  图书编号: ";  
  435.             cin >>bookid;  
  436.             r=ReaderDB.query(readerid);//按编号查找  
  437.             if (NULL==r)  
  438.             {  
  439.                 cout <<"  不存在该读者,不能借书"<< endl;  
  440.                 break;  
  441.             }  
  442.             b=BookDB.query(bookid);  
  443.             if (b==NULL)  
  444.             {  
  445.                 cout <<"  不存在该图书,不能借书"<< endl;  
  446.                 break;  
  447.             }  
  448.             if (b->borrowbook()==0)  
  449.             {  
  450.                 cout << "  该图书已借出,不能借书"<< endl;  
  451.                 break;  
  452.             }  
  453.             r->borrowbook(b->getno());  
  454.             break;  
  455.         case '2':  
  456.             cout<<"还书\n 读者编号:";  
  457.             cin >>readerid;  
  458.             cout << "   图书编号:";  
  459.             cin >>bookid;  
  460.             r=ReaderDB.query(readerid);  
  461.             if (r==NULL)  
  462.             {  
  463.                 cout <<" 不存在该读者,不能还书" << endl;  
  464.                 break;  
  465.             }  
  466.             b=BookDB.query(bookid);  
  467.             if (b==NULL)  
  468.             {  
  469.                 cout <<"  不存在该图书,不能还书" <<endl;  
  470.                 break;  
  471.             }  
  472.             b->retbook();  
  473.             r->retbook(b->getno());  
  474.             break;  
  475.         case '3':  
  476.             BookDB.bookdata();  
  477.             break;  
  478.         case '4':  
  479.             ReaderDB.readerdata();  
  480.             break;  
  481.         default:  
  482.             cout<<"输入错误,请从新输入:";  
  483.   
  484.         }  
  485.     }  
  486.     return 0;  
  487. }  
用C++写的图书管理系统代码 图书馆管理系统要求: 实现的功能为: 1. 整个系统由两个独立的模块组成 1.1 内部管理模块 A 主要对图书馆的进行维护,包括对图书馆使用人员的管理,对图书的管理,对用户以及管理人员的密码管理。同时管理的用户的最大量为100。图书的最大量为500。 1.2 外部服务模块 B 普通图书馆用户的一些日常操作:如借书,还书,查询个人信息,查询图书信息。 2. 系统功能A(内部管理模块) 2.1 用户信息管理模块。可是实现注册新用户,删除用户,修改用户等等。用户信息包括个人信息和借阅信息。个人信息包括姓名、编号、联系方式。借阅信息包括借书总数(规定每个用户最多同时借3本)、欠款额。对于所有已借到的书,可以看到图书的信息、借书日期。 2.2 对图书的管理,也是新增,删除等。图书信息包括书名、作者、编号、出版社。图书可以实现多种方式查询。同时有标识能指出该图书是否已经被借出。 /* 2.5 对图书预订用户进行及时的信息反馈,预约时间最长为一周,如果有书已经可借了,那么通知预订该书的用户。如果该用户在一周内还没来借书的话,那么就通知第二个预订该书的用户。 设计相应的数据结构。 */ 3. 系统功能B 3.1 按多种方式查找图书。(书名、作者、编号、出版社) 3.2 借书 要求输入用户的编号,然后判断该用户是否有欠费(超过30元则不允许借书)或者已经借满。判断要借的书是否已被借出,若未借出,将该书借给用户,修改相应的信息。 3.3 还书 判断是否有欠费(规定每本书可借一个月,超过规定时间按每天0.1元计费。 3.4 查询用户信息。包括个人信息以及借还书信息。 4. 要求 1.界面友好。对于用户输入,要有足够的提示信息,如“请选择(1借书 2 还书……):”提示用户选择。 2.不用因为用户的错误输入而引起程序运行错误而中止执行。对输入值的大小范围、类型等进行正确性检查。对不合法的给出出错信息,指出错误类型,等待重新输入。 3.对删除数据(用户、图书)给出警告。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值