[C++] 图书管理系统 →→→→→进入此内容的聊天室

来自 , 2019-07-30, 写在 C++, 查看 111 次.
URL http://www.code666.cn/view/1f71e393
  1. #include<iostream.h>
  2. #include<fstream.h>
  3. #include<string.h>
  4. #include<stdlib.h>
  5. #include<stdio.h>
  6. #include<conio.h>
  7. #define max 3    
  8. typedef struct Books{
  9.         char book_name[15];
  10.         int  total_num;
  11.         int  borrow_num;
  12.         char book_num[15];
  13.         Books *next;
  14. }books_node;
  15. typedef struct Readers{
  16.         char reader_name[15];
  17.         char reader_no[15];
  18.         int  reader_borrow_num;
  19.         struct Reader_borrow_books{
  20.                 char borrow_books_name[15];
  21.                 char borrow_books_no[15];
  22.         }reader_borrow_book[max];
  23.         Readers *next;
  24. }readers_node;
  25. class books  {                                                                              
  26. protected:
  27.  
  28.         books_node *broot;
  29. public:
  30.         books();
  31.         savebooks();
  32.         search_book();
  33.         print_books();
  34.         virtual add_book()=0;
  35.         virtual delet_book()=0;
  36. };
  37. class manager:public books          
  38. {
  39.        
  40. protected:
  41.         readers_node *rroot;
  42. public:
  43.         manager(readers_node*);
  44.         savereaders();
  45.         add_book();
  46.         delet_book();
  47.         search_reader();
  48.         add_reader();
  49.         delet_reader();
  50.         print_readers();
  51. };
  52. class reader:public books{
  53. private:readers_node* personnel;
  54. public:
  55.         reader(readers_node*);
  56.         add_book();
  57.         reader_borrow();
  58.         delet_book();
  59.         reader_return();
  60.         print_me();
  61.         save_readers(readers_node*);
  62. };
  63. books::books()
  64. {
  65.         books_node *r;
  66.         broot=new books_node;
  67.         r=new books_node;
  68.         r->next=NULL;
  69.         broot=r;
  70.         ifstream inFile;
  71.         inFile.open("c:\\books.dat",ios::binary);
  72.         if(inFile.is_open()==-1)cout<<"con't open books.dat"<<endl;
  73.         else
  74.         {
  75.                 int i=0;
  76.                         while(1)
  77.                         {      
  78.                                 i++;
  79.                                 books_node *node;
  80.                                 node=new books_node;
  81.                                 inFile.read( (char*)node,sizeof(books_node));
  82.                                 if(inFile.eof())   break;
  83.                                 node->next=r->next;
  84.                                 r->next=node;  
  85.                         }
  86.                         inFile.close();
  87.                         if(i<2)cout<<"暂时没有图书数据"<<endl;
  88.         }
  89. }
  90. books::savebooks()
  91. {
  92.         books_node *L;
  93.         L=new books_node;
  94.         L=broot->next;
  95.        
  96.         ofstream outFile;
  97.         outFile.open("c:\\books.dat",ios::binary);
  98.         while(L)
  99.         {
  100.                 outFile.write((char*)L,sizeof(books_node));
  101.                 L=L->next;
  102.         }
  103.         outFile.close();       
  104. }
  105. books::search_book()
  106. {
  107.         char searchedbook[15];
  108.         cout<<"输入要查找的书的名子:";
  109.         cin>>searchedbook;
  110.         books_node *r;
  111.         r=new books_node;
  112.         r=broot->next;
  113.         while(r)
  114.         {
  115.                 if((strcmp(searchedbook,r->book_name))==0)
  116.                 {
  117.                         cout<<"书名:"<<r->book_name<<"      书的总量:"<<r->total_num<<"       借出:"<<r->borrow_num<<"    书的编号:"<<r->book_num<<endl;break;
  118.                        
  119.                 }
  120.                 r=r->next;
  121.                
  122.         }
  123.         if(r==NULL)cout<<"对不起,没有此书"<<endl;     
  124. }
  125. books::print_books()
  126. {
  127.         books_node *r;
  128.     r=new books_node;
  129.         r=broot->next;
  130.        
  131.         while(r)
  132.         {
  133.                 cout<<"书名:" <<r->book_name<<" 书的总量:"<<r->total_num<<"  借出:"<< r->borrow_num <<" 书的编号:"<<r->book_num<<endl;
  134.  
  135.                 r=r->next;
  136.                
  137.         }
  138.         delete r;
  139. }
  140. manager::add_book()
  141. {
  142.         books_node *L;
  143.         L=new books_node;
  144.         L=broot;
  145.         while(1)
  146.         {
  147.                 books_node *r;
  148.                 r=new books_node;
  149.                 r->next=NULL;
  150.                 cout<<"输入书名:";
  151.                 cin>>r->book_name;
  152.                
  153.                 cout<<"输入书的编号:";
  154.                 cin>>r->book_num;      
  155.                
  156.                 r->borrow_num=0;       
  157.                 cout<<"输入总数:";
  158.                 cin>>r->total_num;
  159.                 r->next=L->next;
  160.                 L->next=r;
  161.                 cout<<"add more?(n终止,其它键继续)";
  162.                 char sign;
  163.                 cin>>sign;
  164.                 if(sign=='n'||sign=='N')
  165.                         break;
  166.         }
  167.         broot=L;
  168.         savebooks();   
  169. }
  170. manager::delet_book()
  171. {
  172.         char deleted[15];
  173.         cout<<"输入要删除的图书名字:";
  174.         cin>>deleted;
  175.     books_node *node,*L;
  176.         node=new books_node;
  177.         L=new books_node;
  178.         node=broot;
  179.         while(node->next)
  180.         {
  181.                 if((strcmp(deleted,node->next->book_name))==0)break;                   
  182.                 node=node->next;
  183.         }
  184.         if(node->next==NULL)
  185.         {
  186.                 cout<<"sorry!There is no the book!"<<endl;
  187.         }
  188.         else
  189.         {
  190.                 if(node->next->borrow_num==0)
  191.                 {
  192.                 node->next=node->next->next;
  193.                 savebooks();
  194.                 }
  195.                 else
  196.                         cout<<"对不起,暂时不能删除,因为还有没有归还的书"<<endl;
  197.         }
  198. }
  199. manager::manager(readers_node*node)
  200. {
  201.         rroot=new readers_node;
  202.         rroot=node;
  203. }
  204. manager::savereaders()
  205. {
  206.         readers_node *L;
  207.         L=new readers_node;
  208.         L=rroot->next;
  209.        
  210.         ofstream outFile;
  211.         outFile.open("c:\\Readers.dat",ios::binary);
  212.        
  213.         while(L)
  214.         {
  215.                 outFile.write((char*)L,sizeof(readers_node));
  216.                 L=L->next;
  217.         }
  218.         outFile.close();
  219. }
  220. manager::add_reader()
  221. {
  222.         readers_node *L;
  223.         L=new readers_node;
  224.         L=rroot;
  225.         int sign=0;
  226.        
  227.         while(1)
  228.         {
  229.                 readers_node *r;
  230.                 r=new readers_node;
  231.                 r->next=NULL;
  232.                
  233.                 cout<<"输入姓名:";
  234.                 cin>>r->reader_name;
  235.                
  236.                 cout<<"输入读者的编号:";
  237.                 cin>>r->reader_no;     
  238.                
  239.                 r->reader_borrow_num=0;
  240.                
  241.                
  242.                 r->next=L->next;
  243.                 L->next=r;
  244.                 cout<<"add more?(n终止,其它键继续)";
  245.                 char sign;
  246.                 cin>>sign;
  247.                 if(sign=='n'||sign=='N')
  248.                         break;
  249.         }
  250.         rroot=L;
  251.         savereaders(); 
  252. }
  253. manager::delet_reader()
  254. {
  255.         char deleted[15];
  256.         cout<<"输入要删除读者的名字:";
  257.         cin>>deleted;
  258.     readers_node *node,*L;
  259.         node=new readers_node;
  260.         L=new readers_node;
  261.         node=rroot;
  262.         while(node->next)
  263.         {
  264.                 if((strcmp(deleted,node->next->reader_name))==0)break;                 
  265.                 node=node->next;
  266.         }
  267.         if(node->next==NULL)
  268.         {
  269.                 cout<<"sorry!There is no the reader!"<<endl;
  270.         }
  271.         else
  272.         {
  273.                 node->next=node->next->next;
  274.                
  275.                 savereaders();
  276.         }      
  277. }
  278. manager::search_reader()
  279. {
  280.     readers_node *r;
  281.         r=new readers_node;
  282.         r=rroot->next;
  283.         char reader[15];
  284.         cout<<"输入要查找读者的姓名:";
  285.         cin>>reader;
  286.         while(r)
  287.         {
  288.                 if((strcmp(reader,r->reader_name))==0)
  289.                 {
  290.                         cout<<"姓名:"<<r->reader_name<<"    编号:"<<r->reader_no<<"        借书总数:"<<r->reader_borrow_num<<endl;
  291.                         for(int i=0;i<r->reader_borrow_num;i++)
  292.                         {
  293.                                 cout<<"书名:"<<r->reader_borrow_book[i].borrow_books_name<<"            "<<"书的编号:"<<r->reader_borrow_book[i].borrow_books_no;
  294.                         }
  295.                         break;
  296.                 }
  297.                 else r=r->next;
  298.         }
  299.         if(!r)cout<<"没有此人"<<endl;
  300.        
  301. }
  302. manager::print_readers()
  303. {
  304.         readers_node *printL;
  305.         printL=new readers_node;
  306.         printL=rroot->next;
  307.        
  308.         while(printL)
  309.         {
  310.                 cout<<"姓名        编号         借书总数"<<endl;
  311.                 cout<<printL->reader_name<<"        "<<printL->reader_no<<"        "<<printL->reader_borrow_num<<endl;
  312.                 for(int i=0;i<printL->reader_borrow_num;i++)
  313.                 {
  314.                         cout<<"书名:"<<printL->reader_borrow_book[i].borrow_books_name<<"            "<<"书的编号:"<<printL->reader_borrow_book[i].borrow_books_no;
  315.                 }
  316.                 printL=printL->next;
  317.         }
  318.        
  319.     delete printL;
  320. }
  321. reader::reader(readers_node*node)
  322. {
  323.         (personnel)=new readers_node;
  324.         personnel=node;
  325. }
  326. reader::add_book()
  327. {
  328.         books_node*node;
  329.         node=new books_node;
  330.         node=broot->next;
  331.         char returned[15];
  332.         cout<<"输入要还书的名子:";
  333.         cin>>returned;
  334.     for(int i=0;i<personnel->reader_borrow_num;i++)
  335.         {
  336.                 if((strcmp(returned,personnel->reader_borrow_book[i].borrow_books_name))==0)break;
  337.         }
  338.         if(i==personnel->reader_borrow_num+1)
  339.         {
  340.                 printf("不好意思,你没有此书");system("pause");
  341.         }
  342.     else{
  343.                
  344.                 while(node)
  345.                 {
  346.                         if((strcmp(node->book_name,returned)==0))break;
  347.                         else node=node->next;
  348.                        
  349.                 }
  350.                 if(node)
  351.                 {
  352.                        
  353.                         personnel->reader_borrow_num--;
  354.                         node->borrow_num--;
  355.                        
  356.                         savebooks();
  357.                 }
  358.                 else cout<<"对不起,没有你要还的书或者所还书被删除"<<endl;
  359.         }
  360. }
  361. reader::delet_book()      
  362. {
  363.         if(personnel->reader_borrow_num<max)
  364.         {
  365.         books_node*node;
  366.        
  367.         node=new books_node;
  368.         node=broot->next;
  369.  
  370.         char borrowed[15];
  371.         cout<<"输入要借书的名子:";
  372.         cin>>borrowed;
  373.         while(node)
  374.         {
  375.                 if((strcmp(node->book_name,borrowed)==0))break;
  376.                 else node=node->next;
  377.  
  378.         }
  379.         if(node&&(node->total_num-node->borrow_num)>0)
  380.         {
  381.         strcpy(personnel->reader_borrow_book[personnel->reader_borrow_num].borrow_books_name,node->book_name);
  382.         strcpy(personnel->reader_borrow_book[personnel->reader_borrow_num++].borrow_books_no,node->book_num);
  383.         node->borrow_num++;
  384.  
  385.         savebooks();
  386.         }
  387.         else cout<<"对不起,没有你要借的书或者所要借的书已经借完!"<<endl;
  388.  
  389.         }
  390.         else cout<<"对不起,你借书的数量已经超过最大借数量"<<endl;
  391. }
  392. reader::print_me()
  393. {
  394.        
  395.                 cout<<"姓名"<<personnel->reader_name<<"   编号:"<<personnel->reader_no<<"   借书总数:"<<personnel->reader_borrow_num<<endl;
  396.  
  397.                         for(int i=0;i<personnel->reader_borrow_num;i++)
  398.                         {
  399.                                 printf("书名:%s,书的编号:%s",personnel->reader_borrow_book[i].borrow_books_name,personnel->reader_borrow_book[i].borrow_books_no);
  400.                         }
  401. }
  402. void Pause()
  403. {
  404.         getch();
  405.         fflush(stdin);
  406. }
  407. reader::reader_borrow()
  408. {
  409.         delet_book();
  410. }
  411. reader::reader_return()
  412. {
  413.         add_book();
  414. }
  415. reader::save_readers(readers_node *L)
  416. {
  417.         readers_node *root;
  418.         root=new readers_node;
  419.  
  420.         root=L->next;
  421.         ofstream outFile;
  422.         outFile.open("c:\\Readers.dat",ios::binary);
  423.         while(root)
  424.         {      
  425.                 outFile.write((char*)root,sizeof(readers_node));
  426.                 root=root->next;
  427.         }
  428.         outFile.close();
  429. }
  430. readers_node* read_readers()
  431. {
  432.         readers_node *r;
  433.         r=new readers_node;
  434.         r->next=NULL;
  435.         int flag=0;
  436.         ifstream inFile;
  437.         inFile.open("c:\\Readers.dat",ios::binary);
  438.         if(inFile.is_open()==-1)
  439.                
  440.         {
  441.                 cout<<"con't open readers.dat"<<endl;return r;
  442.         }
  443.         else
  444.         {
  445.                 while(1)
  446.                 {
  447.                         flag++;
  448.                         readers_node *node;
  449.                         node=new readers_node;
  450.                         inFile.read((char*)node,sizeof(readers_node));
  451.                         if(inFile.eof()) break;
  452.                         node->next=r->next;
  453.                         r->next=node;
  454.                 }      
  455.                 inFile.close();
  456.                 if(flag<2)
  457.                 {
  458.                         cout<<"暂无读者 "<<endl; return r;
  459.                 }
  460.                 else                   
  461.                         return r;              
  462.         }      
  463. }
  464. password()
  465. {      
  466.         system("cls");
  467.         char a[]="111111",b[10],c;int n=0,k;
  468.         cerr<<"\n\n\n\n\t\t\t请输入密码,你将拥有3次机会:\n";
  469.  
  470.         while(1)
  471.         {
  472.                 n++;
  473.                 k=0;
  474.                 cerr<<"\t\t\t输入密码:";
  475.  
  476.                 while(1)
  477.                 {
  478.                         c=getch();
  479.                         if(c==13)break;
  480.                         b[k]=c;k++;
  481.                         cerr<<"*";
  482.                 }
  483.                 b[k]='\0';
  484.                 cout<<"\n";
  485.                 if(n>2)
  486.                 {
  487.                         printf("你已经超过输入次数,系统将退出\n");
  488.                         getch();
  489.                 }
  490.                 if(strcmp(a,b)==0)break;
  491.                 else cout<<"密码错误,请重新输入\n";
  492.                 cerr<<"\n";
  493.         }
  494. }
  495. void manager_menu_1(manager M)
  496. {
  497.         int N;
  498.         while(1)
  499.         {
  500.                 cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n";
  501.                 cout<<"┃    图书管图书管理系统                                    ┃\n";
  502.                 cout<<"┃        菜单                                              ┃\n";
  503.                 cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n";
  504.                 cout<<"┃①增加图书                                                ┃\n";
  505.                 cout<<"┃ ②.删除图书                                              ┃\n";
  506.                 cout<<"┃ ③.查找图书                                              ┃\n";
  507.                 cout<<"┃ ④.输出所有                                              ┃\n";
  508.                 cout<<"┃   退出请按0                                              ┃\n";
  509.                 cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n";
  510.                 cout<<"请输入您的选择(0--4):( )\b\b";
  511.                 cin>>N;
  512.                 switch (N)
  513.                 {
  514.                 case 1:  M.add_book();getch();break;
  515.                 case 2:  M.delet_book();getch();break;
  516.                 case 3:  M.search_book();getch();break;
  517.                 case 4:  M.print_books();getch();break;
  518.                 case 0:  return;
  519.                 }
  520.                 system("cls"); 
  521.         }      
  522.        
  523. }
  524. void manager_menu_2(manager M)
  525. {
  526.                 int N;
  527.         while(1)
  528.         {
  529.                 cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n";
  530.                 cout<<"┃    图书管图书管理系统                                    ┃\n";
  531.                 cout<<"┃         菜单                                             ┃\n";
  532.                 cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n";
  533.                 cout<<"┃①增加读者                                                ┃\n";
  534.                 cout<<"┃ ②删除读者                                               ┃\n";
  535.                 cout<<"┃③查找读者                                                ┃\n";
  536.                 cout<<"┃④输出所有                                                ┃\n";
  537.                 cout<<"┃   退出请按0                                              ┃\n";
  538.                 cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n";
  539.                 cout<<"请输入您的选择(0--4):( )\b\b";
  540.                 cin>>N;
  541.                 switch (N)
  542.                 {
  543.                 case 1:  M.add_reader();getch();break;
  544.                 case 2:  M.delet_reader();getch();break;
  545.                 case 3:  M.search_reader();getch();break;
  546.                 case 4:  M.print_readers();getch();break;
  547.                 case 0:  return;
  548.                 }
  549.                 system("cls");
  550.                
  551.         }      
  552. }
  553. void manager_menu(readers_node*L)
  554. {
  555.         system("cls");
  556.         password();
  557.         manager Manager(L);
  558.         int N;
  559. while(1)
  560.         {
  561.                 cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n";
  562.                 cout<<"┃   图书管图书管理系统                                 ┃\n";
  563.                 cout<<"┃      菜单                                            ┃\n";
  564.                 cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n";
  565.                 cout<<"┃①图书维护                                            ┃\n";
  566.                 cout<<"┃②读者维护                                            ┃\n";
  567.                 cout<<"┃退出请按0                                             ┃\n";
  568.                 cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n";
  569.                 cout<<"请输入您的选择(0--2):( )\b\b";
  570.                 cin>>N;
  571.                 switch (N)
  572.                 {
  573.                 case 1: system("cls"); manager_menu_1(Manager); break;
  574.                 case 2:  system("cls"); manager_menu_2(Manager);break;
  575.                 case 0:  return;
  576.                 }
  577.                 system("cls");
  578.         }      
  579. }
  580. reader_menu(readers_node*L)
  581. {
  582.         char name[15];
  583.         cout<<"输入用户名:";
  584.         cin>>name;
  585.         readers_node* node;
  586.         node=new readers_node;
  587.         node=L->next;
  588.        
  589.         while(node)
  590.         {
  591.                 if((strcmp(name,node->reader_name))==0)
  592.                         break;
  593.                 else
  594.                         node=node->next;
  595.         }
  596.         if(node)
  597.         {
  598.                 reader Reader(node);
  599.                 int N;
  600.                 while(1)
  601.                 {
  602.                         cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n";
  603.                         cout<<"┃图书管图书管理系统                                          ┃\n";
  604.                         cout<<"┃      菜单                                                  ┃\n";
  605.                         cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n";
  606.                         cout<<"┃①借书                                                      ┃\n";
  607.                         cout<<"┃ ②还书                                                     ┃\n";
  608.                         cout<<"┃③查找书                                                    ┃\n";
  609.                         cout<<"┃ ④.输出所有                                                ┃\n";
  610.             cout<<"┃ ⑤自身信息                                                 ┃\n";
  611.                         cout<<"┃退出请按0                                                   ┃\n";
  612.                         cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n";
  613.                         cout<<"请输入您的选择(0--5):( )\b\b";
  614.                         cin>>N;
  615.                         switch (N)
  616.                         {
  617.                         case 1: system("cls") ;Reader.reader_borrow();Reader.save_readers(L);break;
  618.                         case 2: system("cls"); Reader.reader_return();Reader.save_readers(L);break;
  619.                         case 3: system("cls");Reader.search_book();system("pls");break;
  620.                         case 4: system("cls");Reader.print_books();getch();break;
  621.                         case 5: system("cls");Reader.print_me(); Pause();break;
  622.                         case 0:  return;
  623.                         }
  624.                         system("cls"); 
  625.                        
  626.                 }
  627.         }
  628.         else
  629.         {
  630.                 printf("没有这个用户!按任意键继续");
  631.                 getch();
  632.                 return;
  633.         }      
  634. }
  635. main()
  636. {
  637. readers_node* Reader_root;
  638. Reader_root=new readers_node;
  639. Reader_root=read_readers();
  640. int N;
  641. while(1)
  642.         {               system("cls");
  643.                 cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n";
  644.                 cout<<"┃     图书管图书管理系统                                   ┃\n";
  645.                 cout<<"┃          菜单                                            ┃\n";
  646.                 cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n";
  647.                 cout<<"┃①图书管理员                                              ┃\n";
  648.                 cout<<"┃ ②.读  者                                                ┃\n";
  649.                 cout<<"┃推出请按0                                                 ┃\n";
  650.                 cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n";
  651.                 cout<<"请输入您的选择(0--2):( )\b\b";
  652.                 cin>>N;
  653.                 switch (N)
  654.                 {
  655.                 case 1:  manager_menu(Reader_root);break;
  656.                 case 2:  reader_menu(Reader_root);break;
  657.                 case 0:exit(0);break;
  658.                 }
  659.         }
  660. }
  661.  

回复 "图书管理系统"

这儿你可以回复上面这条便签

captcha