• 用c++写一个数据库


      1 [cpp] view plain copy
      2 第一步:构建一个头文件(**.h)  
      3 [cpp] view plain copy
      4 #include<iostream>  
      5 #include<iomanip>  
      6 #include<fstream>  
      7 #include<string>  
      8 using namespace std;  
      9 class CStudentRec  
     10 {  
     11 public:  
     12     char chFlag;//标志,A表示正常,N表示空  
     13     char strName[20];//姓名  
     14     char strID[10];//学号  
     15     float fScore[3];//3门成绩  
     16     float fAve;//总平均分  
     17     CStudentRec(char *name,char *id,float score[]);  
     18     CStudentRec(){chFlag='N';};//默认构造函数  
     19     ~CStudentRec(){};//默认析构函数  
     20     void Input(void);  
     21     float Validate(void);//成绩数据的输入验证,返回正确值  
     22     void Print(bool isTitle=false);  
     23     friend ostream& operator<<( ostream& os,CStudentRec& stu);  
     24     friend istream& operator>>( istream& is,CStudentRec& stu);  
     25 };  
     26   
     27 CStudentRec::CStudentRec(char *name,char *id,float score[])  
     28 {  
     29     strncpy(strName,name,20);  
     30     strncpy(strID,id,10);  
     31     fAve=0;  
     32     for(int i=0;i<3;i++)  
     33     {  
     34         fScore[i]=score[i];  
     35         fAve+=fScore[i];  
     36     }  
     37     fAve=float(fAve/3.0);  
     38     chFlag='A';  
     39 }  
     40 void CStudentRec::Input(void)  
     41 {  
     42     cout<<"姓名:";  
     43     cin>>strName;  
     44     cout<<"学号:";  
     45     cin>>strID;  
     46     float fSum=0;  
     47     for(int i=0;i<3;i++)  
     48     {  
     49         cout<<"成绩"<<i+1<<":";  
     50         fScore[i]=Validate();  
     51         fSum+=fScore[i];  
     52     }  
     53     fAve=(float)(fSum/3.0);  
     54     chFlag='A';  
     55     getchar();  
     56 }  
     57 float CStudentRec::Validate(void)  
     58 {  
     59     int s;  
     60     char buf[80];  
     61     float res;  
     62     for(;;)  
     63     {  
     64         cin>>res;  
     65         s=cin.rdstate();  
     66         while(s)  
     67         {  
     68             cin.clear();  
     69             cin.getline(buf,80);  
     70             cout<<"非法输入,重新输入:";  
     71             cin>>res;  
     72             s=cin.rdstate();  
     73         }  
     74         if((res<=100.0)&&(res>=0.0))break;  
     75         else  
     76             cout<<"输入的成绩超过范围!请重新输入:";  
     77     }  
     78     return res;  
     79 }  
     80 void CStudentRec::Print(bool isTitle)  
     81 {  
     82     cout.setf(ios::left);  
     83     if(isTitle)  
     84         cout<<setw(20)<<"姓名:"<<setw(10)<<"学号:"<<"	成绩1:"<<"	成绩2:"<<"	成绩3:"<<"	平均分:"<<endl;  
     85     cout<<setw(20)<<strName<<setw(10)<<strID;  
     86     for(int i=0;i<3;i++)  
     87         cout<<"	"<<fScore[i];  
     88     cout<<"	"<<fAve<<endl;  
     89     getchar();  
     90 }  
     91 ostream& operator<<(ostream& os,CStudentRec& stu)  
     92 {  
     93     os.write(&stu.chFlag,sizeof(char));  
     94     os.write(stu.strName,sizeof(stu.strName));  
     95     os.write(stu.strID,sizeof(stu.strID));  
     96     os.write((char*)&stu.fScore,sizeof(float)*3);  
     97     os.write((char*)&stu.fAve,sizeof(float));  
     98     return os;  
     99 }  
    100 istream& operator>>(istream& is,CStudentRec& stu)  
    101 {  
    102     char name[20],id[10];  
    103     is.read(&stu.chFlag,sizeof(char));  
    104     is.read(name,sizeof(name));  
    105     is.read(id,sizeof(id));  
    106     is.read((char*)stu.fScore,sizeof(float)*3);  
    107     is.read((char*)&stu.fAve,sizeof(float));  
    108     strncpy(stu.strName,name,sizeof(name));  
    109     strncpy(stu.strID,id,sizeof(id));  
    110     return is;  
    111 }  
    112   
    113 class CStuFile  
    114 {  
    115 public:  
    116     CStuFile(char* filename);  
    117     ~CStuFile();  
    118     void Add(CStudentRec stu);  
    119     int Seek(char* id,CStudentRec &stu);  
    120     int List(int nNum=-1);  
    121 private:  
    122     char* strFileName;  
    123 };  
    124 CStuFile::CStuFile(char* filename)  
    125 {  
    126     strFileName=new char[strlen(filename)+1];  
    127     strcpy(strFileName,filename);  
    128 }  
    129 CStuFile::~CStuFile()  
    130 {  
    131     if(strFileName)delete []strFileName;  
    132 }  
    133 void CStuFile::Add(CStudentRec stu)  
    134 {  
    135     fstream file(strFileName,ios::out|ios::app|ios::binary);  
    136     file<<stu;  
    137     file.close();  
    138 }  
    139 int CStuFile::Seek(char* id,CStudentRec& stu)  
    140 {  
    141     int nRec=-1;  
    142     fstream file(strFileName,ios::in|ios::_Nocreate);  
    143     if(!file)  
    144     {  
    145         cout<<"文件"<<strFileName<<"不能打开!
    ";  
    146         return nRec;  
    147     }  
    148     int i=0;  
    149     while(!file.eof())  
    150     {  
    151         file>>stu;  
    152         if((strcmp(id,stu.strID)==0)&&(stu.chFlag!='N'))  
    153         {  
    154             nRec=i;break;  
    155         }  
    156         i++;  
    157     }  
    158     file.close();  
    159     return nRec;  
    160     getchar();  
    161 }  
    162 int CStuFile::List(int nNum)  
    163 {  
    164     fstream file(strFileName,ios::in|ios::_Nocreate);  
    165     if(!file)  
    166     {  
    167         cout<<"文件"<<strFileName<<"不能打开!
    ";  
    168         return 0;  
    169     }  
    170     int nRec=0;  
    171     if((nNum==-1)||(nNum>0))  
    172     {  
    173         cout.setf(ios::left);  
    174         cout<<setw(6)<<"记录"<<setw(20)<<"姓名"<<setw(10)<<"学号"<<"	成绩1	成绩2	成绩3	平均分"<<endl;  
    175     }  
    176     while(!file.eof())  
    177     {  
    178         CStudentRec data;  
    179         file>>data;  
    180         if(data.chFlag=='A')  
    181         {  
    182             nRec++;  
    183             if((nNum==-1)||(nRec<=nNum))  
    184             {  
    185                 cout.setf(ios::left);  
    186                 cout<<setw(6)<<nRec;  
    187                 data.Print();  
    188             }  
    189         }  
    190     }  
    191     file.close();  
    192     return nRec;  
    193 }  
    194 [cpp] view plain copy
    195 第二部:创建一个.cpp文件  
    196 [cpp] view plain copy
    197 #include<iostream>  
    198 #include"**.h"  
    199 CStuFile theStu("student.txt");  
    200 void AddTo(int nNum)  
    201 {  
    202  CStudentRec stu;  
    203  for(int i=0;i<nNum;i++)  
    204  {  
    205   cout<<"请输入第"<<i+1<<"记录:"<<endl;  
    206   stu.Input();  
    207   theStu.Add(stu);  
    208  }  
    209 }  
    210 void main()  
    211 {  
    212  AddTo(3);  
    213  theStu.List();  
    214  CStudentRec one;  
    215  if(theStu.Seek("21050102",one)>=0)  
    216   one.Print(true);  
    217  else  
    218   cout<<"没有找到!
    ";  
    219  theStu.List();  
    220  getchar();  
    221 }  
    222 [cpp] view plain copy
    223 ok  
  • 相关阅读:
    封装一个通用递归算法,使用TreeIterator和TreeMap来简化你的开发工作。
    优化特性(Attribute)性能
    不需要了解任何底层知识,就可以汉化!Let`s go!!!
    颠覆你对方法调用的看法!
    实际项目中面向对象的最佳实践
    递归使用触发器
    关于稀疏数组
    121-django中的Http404处理
    120-在前端使用django-ckeditor,很简单,很方便
    119-用django实现评论功能
  • 原文地址:https://www.cnblogs.com/heruonan/p/8329734.html
Copyright © 2020-2023  润新知