图书管理系统类模板

用类模板写的文件的增删改查操作。

  
  
  
  
  1. #ifndef __FILEMA 
  2. #define __FILEMA 
  3.  
  4. #include<fstream> 
  5. #include<iostream> 
  6. using namespace std; 
  7.  
  8.  
  9. struct bookinfo  
  10. {    
  11.     char ID[30]; 
  12.     char name[30]; 
  13.     char author[30]; 
  14.     char publishing[30]; 
  15.     double price;    
  16.     int num; 
  17. }; 
  18.  
  19.  
  20. struct memberinfo  
  21. {    
  22.     char name[30]; 
  23.     char ID[30]; 
  24.     char address[30]; 
  25. }; 
  26.  
  27. struct orderinfo 
  28.     char name[30]; 
  29.     char ID[30]; 
  30.     char address[30]; 
  31.     char bookID[30]; 
  32.     char bookname[30]; 
  33.     double price; 
  34.     int num; 
  35. }; 
  36.  
  37.  
  38.  
  39.  
  40. template<typename T,typename TT> 
  41. class myfile 
  42. public
  43.     myfile(char *temp); 
  44.     long findinfo(int cho,char *cond); 
  45.     void delectinfo(long pos); 
  46.     void findall(); 
  47.     long addinfo(T temp); 
  48.     long modifyinfo(long pos);  
  49.     void outputinfo(long pos); 
  50. private
  51.     char filename[20]; 
  52. }; 
  53.  
  54.  
  55.  
  56.  
  57. template<typename T,typename TT> 
  58. myfile<T,TT>::myfile(char *temp) 
  59.  
  60.     strcpy(filename,temp); 
  61.  
  62.  
  63. template<typename T,typename TT> 
  64. long myfile<T,TT>::findinfo(int cho,char *cond) 
  65.     //bookinfo temp; 
  66.  
  67.     T temp; 
  68.     char tcond[30]; 
  69.     fstream fbook(filename,ios::out|ios::in|ios::binary); 
  70.      
  71.     strcpy(tcond,cond); 
  72.  
  73.  
  74.      
  75.     if (!fbook) 
  76.     { 
  77.         cout<<"不能打开"<<filename<<endl; 
  78.         abort(); 
  79.     } 
  80.      
  81.     int ii=0; 
  82.      
  83.     while (!fbook.eof()) 
  84.     { 
  85.          
  86.         fbook.seekp(sizeof(T)*ii); 
  87.         fbook.read((char *)&temp,sizeof(T)); 
  88.          
  89.         if(1 == cho) 
  90.         { 
  91.             if(0 == strcmp(temp.name,tcond)) 
  92.             { 
  93.                 return fbook.tellg(); 
  94.             } 
  95.              
  96.         } 
  97.              
  98.          
  99.         if(2 == cho) 
  100.         { 
  101.             if(0 == strcmp(temp.ID,tcond)) 
  102.             { 
  103.                 return fbook.tellg();    
  104.             } 
  105.              
  106.         } 
  107.  
  108.         ii++;        
  109.     } 
  110.  
  111.      
  112.  
  113.     fbook.close(); 
  114.     cout<<"没有查找到"<<endl; 
  115.     system("pause"); 
  116.  
  117.  
  118.     return 9999;          //标志查找失败 
  119.  
  120.  
  121. template<typename T,typename TT> 
  122. void myfile<T,TT>::findall() 
  123. {    
  124.  
  125.     T temp; 
  126.     fstream fbook(filename,ios::out|ios::in|ios::binary); 
  127.      
  128.     if (!fbook) 
  129.     { 
  130.         cout<<"不能打开"<<filename<<endl; 
  131.         abort(); 
  132.     } 
  133.      
  134.     int ii=0; 
  135.      
  136.     while (!fbook.eof()) 
  137.     { 
  138.         TT temp2(1); 
  139.          
  140.          
  141.         fbook.seekp(sizeof(bookinfo)*ii); 
  142.         fbook.read((char *)&temp,sizeof(bookinfo)); 
  143.         if (fbook.eof() !=0 ) 
  144.         { 
  145.             break
  146.         } 
  147.          
  148.         temp2.display(temp); 
  149.         ii++; 
  150.     } 
  151.     system("pause"); 
  152.  
  153.  
  154. template<typename T,typename TT> 
  155. void myfile<T,TT>::delectinfo(long pos) 
  156.     fstream ftemp("temp.dat",ios::out|ios::in|ios::binary|ios::trunc); 
  157.     fstream fbook(filename,ios::out|ios::in|ios::binary); 
  158.     T temp; 
  159.     int ii=0; 
  160.     char info[50]; 
  161.      
  162.     while(!fbook.eof()) 
  163.     { 
  164.         fbook.seekp(sizeof(T)*ii); 
  165.         fbook.read((char *)&temp,sizeof(T)); 
  166.          
  167.         if (pos != fbook.tellg() && !fbook.eof()) 
  168.         { 
  169.             ftemp.write((char *)&temp,sizeof(T)); 
  170.  
  171.             TT tt(1); 
  172.  
  173.             tt.display(temp); 
  174.          
  175.              
  176.         }        
  177.         ii++; 
  178.     } 
  179.      
  180.     ftemp.close(); 
  181.     fbook.close(); 
  182.     system("pause"); 
  183.     sprintf(info,"del %s",filename); 
  184. //  system( "del book.dat");         //删除原始文件 
  185.     system(info); 
  186.     sprintf(info,"rename temp.dat,%s",filename); 
  187. //  system( "rename temp.dat,book.dat");      //修改文件名  
  188.     system(info);  
  189.  
  190.  
  191.  
  192. template<typename T,typename TT> 
  193. long myfile<T,TT>::addinfo(T temp) 
  194.     fstream fbook(filename,ios::out|ios::in|ios::binary|ios::app); 
  195.     fbook.seekg(0,ios::end); 
  196.     if (!fbook) 
  197.     { 
  198.         cout<<"打开"<<filename<<"出错"<<endl; 
  199.         abort(); 
  200.     } 
  201.  
  202.     fbook.write((char *)&temp,sizeof(T)); 
  203.     fbook.close(); 
  204.  
  205.     return fbook.tellg(); 
  206.  
  207.  
  208.  
  209. template<typename T,typename TT> 
  210. long myfile<T,TT>::modifyinfo(long pos) 
  211.     T temp; 
  212.     fstream fbook(filename,ios::out|ios::in|ios::binary); 
  213.     TT temp2(1); 
  214.  
  215.  
  216.     cout<<"请输入要修改的数据"<<endl; 
  217.     temp2.setinfo(); 
  218.     temp2.getstruct(temp); 
  219.  
  220.     fbook.seekp(pos-sizeof(T)); 
  221.     fbook.write((char *)&temp,sizeof(T)); 
  222.     fbook.close(); 
  223.     return pos; 
  224.  
  225. template<typename T,typename TT> 
  226. void myfile<T,TT>::outputinfo(long pos) 
  227.     T temp; 
  228.     fstream fbook(filename,ios::out|ios::in|ios::binary); 
  229.  
  230.     fbook.seekp(pos-sizeof(T)); 
  231.     fbook.read((char *)&temp,sizeof(T)); 
  232.  
  233.     TT temp2(1); 
  234.  
  235.     temp2.display(temp); 
  236.  
  237.  
  238.     fbook.close(); 
  239.     system("pause"); 
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246. #endif 

 

本文出自 “不曾远去” 博客,谢绝转载!

你可能感兴趣的:(模板,职场,休闲,图书管理系统)