C语言使用文件系统简单模拟数据库

  • 设计 表结构,属性和关键字,写入记录
  • 设计表的存储结构,方便使用文件系统进行写入和读取
  • 对输入的字符串做处理,可根据关键字或正则获取属性,表名,条件部分。
  • 每一次查询,或修改操作时都根据字符串中的表名判断该表是否存在

查询

  • 对条件进行处理,截取单个条件,分字母,数字,日期,字符串等情况进行对比,对比又根
    据运算符划分多个不同情况。
  • 读取记录,将对应属性名的值取出,属性的定位可以根据数据字典,进行条件判断
  • 单个条件的boolean值根据连接关键字and还是or进行最后组合,判断该条记录是否符合。and
    连接部分可当作小分区,or可当作大分区。or分区的值由and小分区的值决定,最终boolean
    值由or大分区的值决定
  • 符合条件的记录,根据sql字符串中的属性进行映射,最后输出结果

除此之外:还有修改,删除,插入操作,插入会对插入的属性做完整性检查,与数据字典存储的结构进行匹配。

功能还不够完善,部分情况未做处理

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<direct.h>
#include<vector>
#include<stdlib.h>
using namespace std;
typedef struct tableformat
{
    char bsname[10][10];//属性名
    char stype[10][10];//属性类型
    int length[10];//每个属性的长度
    char key[10];//主键
    char belotable[20];//表名
    int num;//属性个数
    int notnull[10];
}tafot;
typedef struct tiaojian
{
  int type;//1 <,2 = ,3 >,4 !=,5 <=,6 >=
  int part;
  int le;
  char leftbie[20];//记录属性表名
  char lefts[30];
  int ri;
  char rightbie[20];//记录属性表名
  char rights[30];
}tiao;
typedef struct everygaindata
{
    char first[20][50];
    char second[20][50];
    char three[20][50];
    char four[20][50];
    char five[20][50];
    char six[20][50];

}ega;
typedef struct shuxingji
{
    //char biename[20];
    char shu[5][20];
}shuji;
typedef struct duobiao
{
    char bioname[20];
    char dsu[20][50];
}dou;
typedef struct filedatas
{
    //char biename[20];
    char elem[20][50];
}fdata;
typedef struct cunrentlocation
{
    int loca;
    int type;
}curent;
void turn(char t[])
{
    for(int i=0;i<strlen(t);i++)
        if(t[i]>='A'&&t[i]<='Z')
            t[i]+=32;
}
int sou(char t[])
{
    int i=0;
    int flag=0;
    int n=0;
    for(i=0;i<strlen(t);i++)
    {
        if((t[i]>='A'&&t[i]<='Z')||(t[i]>='a'&&t[i]<='z'))
        {
                n=1;
                //cout<<"字母"<<t[i]<<endl;
        }
        else
        {
            if((t[i]>='0'&&t[i]<='9')||t[i]=='.')
                flag=1;
            else
                flag=0;
            //cout<<"数字"<<t[i]<<endl;
        }
    }
    if(flag==1&&n==0)
        return 1;
    else
        return 0;

}
string dateDeal(string sd)
{
    string other="";
    for(int i=0;i<sd.length();i++)
        if(sd[i]>='0'&&sd[i]<='9')
           other+=sd[i];
    return other;
}
int soulocation(char ss[],tafot tf)
{
    int i=0;
    while(i<tf.num)
    {
        if(strcmp(ss,tf.bsname[i])==0)
        {
            return i;
        }
        i++;
    }
    if(i==tf.num)
        cout<<"未找到"<<endl;
}
int compareType(char lesu[],char risu[],int lei,int yuns,int no)//两种问题 没有到汉字的比较 还有条件个数不对没传完  年份数据要去掉—
{
    double le=0,ri=0;
    string zhuan="";
    char interval[20]={0};
    if(lei==1||lei==2)//整数。小数,年月日
    {
        if(no==1)
        {

           le=atof(lesu);
           ri=atof(risu);
        }
        else
        {
            le=atof(risu);
            ri=atof(lesu);
        }

        if(yuns==1)
        {
            //cout<<le<<" < "<<ri<<endl;
            if(le<ri)
                return 1;
            else
                return 0;
        }
        else if(yuns==2)
        {
            if(le==ri)
                return 1;
            else
                return 0;
        }
        else if(yuns==3)
        {
            if(le>ri)
                return 1;
            else
                return 0;
        }
        else if(yuns==4)
        {
            if(le!=ri)
                return 1;
            else
                return 0;
        }
        else if(yuns==5)
        {
            if(le<=ri)
                return 1;
            else
                return 0;
        }
        else if(yuns==6)
        {
            if(le>=ri)
                return 1;
            else
                return 0;
        }

    }
    else if(lei==3)
    {
        if(no==1)
        {
           zhuan=lesu;
           zhuan=dateDeal(zhuan);
           strcpy(interval,zhuan.c_str());
           le=atof(interval);
           ri=atof(risu);
        }
        else
        {
            zhuan=risu;
            zhuan=dateDeal(zhuan);
            strcpy(interval,zhuan.c_str());
            le=atof(interval);
            ri=atof(lesu);
        }
        if(yuns==1)
        {
            //cout<<le<<" < "<<ri<<endl;
            if(le<ri)
                return 0;
            else
                return 1;
        }
        else if(yuns==2)
        {
            if(le==ri)
                return 1;
            else
                return 0;
        }
        else if(yuns==3)
        {
            if(le>ri)
                return 0;
            else
                return 1;
        }
        else if(yuns==4)
        {
            if(le!=ri)
                return 1;
            else
                return 0;
        }
        else if(yuns==5)
        {
            if(le<=ri)
                return 0;
            else
                return 1;
        }
        else if(yuns==6)
        {
            if(le>=ri)
                return 0;
            else
                return 1;
        }
    }
    else if(lei==5)
    {
         cout<<"需要传两个表的相应值"<<endl;
    }
    else if(lei==6)
    {
         if(yuns==2)
         {
             if(strcmp(lesu,risu)==0)
                return 1;
             else
                return 0;
         }
         else if(yuns==4)
         {
             if(strcmp(lesu,risu)!=0)
                return 1;
             else
                return 0;
         }
    }
    else if(lei==7)
    {
        if(yuns==2)
         {
             //cout<<lesu<<"=="<<risu<<"=="<<endl;
             if(strcmp(lesu,risu)==0)
                return 1;
             else
                return 0;
         }
         else if(yuns==4)
         {
             //cout<<lesu<<"!="<<risu<<"=="<<endl;
             if(strcmp(lesu,risu)!=0)
                return 1;
             else
                return 0;
         }
    }


}
int compare(tiao bj,char datas[][50],tafot tf)
{
    int shuno=0,shutype=0,no=0;
    char know[30]={0};
    if(bj.le==bj.ri)//类型相同的数据
    {
        if(bj.le!=5)
        {

            //if(strcmp(bj.lefts,bj.rights)==0)
            //    return 1;
            //else
            //    return 0;
            cout<<"暂不作处理"<<endl;
        }
        else
        {
            cout<<"两边都是属性名 做连接操作"<<endl;
        }
    }
    else//未知的不是属性就是表属性
    {
        if(bj.le==4||bj.ri==4)
        {
            if(bj.le==4)
            {
               shuno=soulocation(bj.lefts,tf);
               shutype=bj.ri;
               strcpy(know,bj.rights);
               no=1;
            }
            else if(bj.ri==4)
            {
                shuno=soulocation(bj.rights,tf);
                shutype=bj.le;
                strcpy(know,bj.rights);
                no=2;
            }

            if(shutype==1)
            {
                 //cout<<datas[shuno]<<"=="<<know<<"==lei="<<shutype<<endl;
                 if(compareType(datas[shuno],know,shutype,bj.type,no)==1)
                    return 1;
                 else
                    return 0;
            }
            else if(shutype==2)
            {
                  //cout<<datas[shuno]<<"=="<<know<<"==lei="<<shutype<<endl;
                  if(compareType(datas[shuno],know,shutype,bj.type,no)==1)
                    return 1;
                 else
                    return 0;
            }
            else if(shutype==3)
            {
                  //cout<<datas[shuno]<<"=="<<know<<"==lei="<<shutype<<endl;
                  if(compareType(datas[shuno],know,shutype,bj.type,no)==1)
                    return 1;
                 else
                    return 0;
            }
            else if(shutype==5)
            {
                cout<<"遇上了属性和带表的属性 这是做连接?"<<endl;
            }
            else if(shutype==6)
            {
                 //cout<<datas[shuno]<<"=="<<know<<"==lei="<<shutype<<endl;
                 if(compareType(datas[shuno],know,shutype,bj.type,no)==1)
                    return 1;
                 else
                    return 0;
            }
            else if(shutype==7)
            {
                 //cout<<datas[shuno]<<"=="<<know<<"==lei="<<shutype<<endl;
                 if(compareType(datas[shuno],know,shutype,bj.type,no)==1)
                    return 1;
                 else
                    return 0;
            }
        }
        else if(bj.le==5||bj.ri==5)
        {   if(bj.le==5)
            {
               shuno=soulocation(bj.lefts,tf);
               shutype=bj.ri;
               strcpy(know,bj.rights);
               no=1;
            }
            else if(bj.ri==5)
            {
                shuno=soulocation(bj.rights,tf);
                shutype=bj.le;
                strcpy(know,bj.rights);
                no=2;
            }
            if(shutype==1)
            {
                  if(compareType(datas[shuno],know,shutype,bj.type,no)==1)
                    return 1;
                 else
                    return 0;
            }
            else if(shutype==2)
            {
                  if(compareType(datas[shuno],know,shutype,bj.type,no)==1)
                    return 1;
                 else
                    return 0;
            }
            else if(shutype==3)
            {
                  if(compareType(datas[shuno],know,shutype,bj.type,no)==1)
                    return 1;
                 else
                    return 0;
            }
            else if(shutype==5)
            {
                cout<<"遇上了属性和带表的属性 这是做连接?"<<endl;
            }
            else if(shutype==6)
            {
                 if(compareType(datas[shuno],know,shutype,bj.type,no)==1)
                    return 1;
                 else
                    return 0;
            }
            else if(shutype==7)
            {
                if(compareType(datas[shuno],know,shutype,bj.type,no)==1)
                    return 1;
                 else
                    return 0;
            }
        }
        else
        {
            cout<<"数据错误"<<endl;
            return 0;
        }
    }


}
void output(tiao taj[],string cpath,int n,char bo[][20],char sn[][20])
{
    int flag=2,i=0,j=0,k=0,part=0,m=0;
    int te=0,xiabiao=0;
    int touy[5]={0};
    char data[20][50]={0};
    string filename="E:\\codeblocks编程\\test\\";
    string wei=".txt";
    FILE *fp=fopen(cpath.c_str(),"r");
    FILE *ft=NULL;
    tafot tf={{0},{0},{0},{0},{0},0,{0}};

    //从数据字典中找到相应的属性 并记录对应位置 方便输出数据时做映射
    fread(&tf,sizeof(struct tableformat),1,fp);
    while(!feof(fp))
    {
        if(strcmp(tf.belotable,bo[0])==0)
        {
           break;
        }
        else
        {
            fread(&tf,sizeof(struct tableformat),1,fp);
        }
    }
   // cout<<strlen(sn[i])<<endl;//if(sn[i]=="\0") if(strcmp(sn[i],"")!=0)
   //cout<<"表名"<<tf.belotable<<"属性名"<<tf.bsname[0]<<"属性类型"<<tf.stype[0]<<"属性长度"<<tf.length[0]<<endl;
     while(strcmp(sn[i],"\0")!=0)//将单表做投影
     {
         while(m<tf.num)//跟取出的数据词典中的每个属性作比较,确定该属性在数据数组中的位置
         {
             if(strcmp(sn[i],tf.bsname[m])==0)
             {
                 touy[j++]=m+1;
                 break;
             }
             m++;
         }
         m=0;
         i++;
     }
     m=0;
     /*
     cout<<"输出一下投影   "<<touy[0];
     while(touy[te]!=0)
     {
         cout<<"投影下标"<<touy[te]<<endl;
         te++;
     }
     */
     //读取数据环节并作比较

     filename=filename+bo[0]+wei;
     //cout<<filename<<endl;
     if((ft=fopen(filename.c_str(),"r"))==NULL)
           cout<<"文件打开失败"<<endl;
     else
     {
         fread(data,sizeof(data),1,ft);
         //cout<<"数据="<<data[0]<<data[1]<<data[2]<<data[3]<<endl;
     }
    while(!feof(ft))
    {
             part=taj[k].part;//每读一次数据都需要和所有的条件进行比较 每次都从第一个条件的分区开始
             //cout<<"分区="<<part<<"条件个数"<<n<<endl;
             while(k<=n)//k<条件个数
             {
                   //cout<<"条件  "<<taj[k].lefts<<" 和 "<<taj[k].rights<<endl;
                  if(part==taj[k].part)
                  {
                       if(compare(taj[k],data,tf)==1)//条件成立
                       {
                           if(flag==1||flag==2)
                           {
                               flag=1;
                           }
                           else //前一个and条件结果是错误的
                           {
                               flag=0;
                           }
                       }
                       else
                       {
                           flag=0;
                       }
                       k++;
                  }
                  else
                  {
                      part=taj[k].part;
                      if(compare(taj[k],data,tf)==1)
                      {
                          flag=1;
                      }
                      else
                      {
                          if(flag==1)
                             flag=1;
                          else
                          {
                              flag=0;
                          }
                      }
                      k++;
                  }

             }
             k=0;
          if(flag==1)//比较完n个条件后 若flag==1则说明该条记录符合条件 对其在进行投影就可以输出了
          {
              while(touy[m]!=0)//输出投影对应下标的数据
              {
                  xiabiao=touy[m]-1;
                  cout<<data[xiabiao]<<"   ";
                  m++;
              }
              cout<<endl;
          }
          m=0;flag=2;


       fread(data,sizeof(data),1,ft);
    }



fclose(fp);
fclose(ft);
}
void outputjian(string cpath,char bs[][20],char ss[][20])
{
    int i=0,j=0,m=0,k=0,xia=0;
    char out[20][50]={0};
    int touy[5]={0};
    string filenaeme="E:\\codeblocks编程\\test\\";
    string wei=".txt";
    FILE *fp=NULL;
    FILE *ft=NULL;
    tafot tf={{0},{0},{0},{0},{0},0,{0}};

    if(strcmp(ss[0],"\0")==0)//不做投影
    {
        filenaeme=filenaeme+bs[0]+wei;
       if((ft=fopen(filenaeme.c_str(),"r"))==NULL)
          cout<<"文件打开失败"<<endl;
       else
          fread(out,sizeof(out),1,ft);
       while(!feof(ft))
       {
          for(int i=0;i<20;i++)
              if(strcmp(out[i],"\0")!=0)
                 cout<<out[i]<<"  ";
          cout<<endl;
             fread(out,sizeof(out),1,ft);
       }
    }
    else//做投影
    {
        if((fp=fopen(cpath.c_str(),"r"))==NULL)
            cout<<"文件打开失败"<<endl;
        else
            fread(&tf,sizeof(struct tableformat),1,fp);

        while(!feof(fp))
        {
             if(strcmp(tf.belotable,bs[0])==0)
                  break;
             else
                  fread(&tf,sizeof(struct tableformat),1,fp);

        }
     while(strcmp(ss[i],"\0")!=0)//将单表做投影
     {
         while(m<tf.num)//跟取出的数据词典中的每个属性作比较,确定该属性在数据数组中的位置
         {
             if(strcmp(ss[i],tf.bsname[m])==0)
             {
                 touy[j++]=m+1;
                 break;
             }
             m++;
         }
         m=0;
         i++;
     }
     m=0;
       filenaeme=filenaeme+bs[0]+wei;
       if((ft=fopen(filenaeme.c_str(),"r"))==NULL)
          cout<<"文件打开失败"<<endl;
       else
          fread(out,sizeof(out),1,ft);
       while(!feof(ft))
       {
           while(touy[m]!=0)//输出投影对应下标的数据
            {
                  xia=touy[m]-1;
                  cout<<out[xia]<<"  ";
                  m++;
            }
            cout<<endl;
            m=0;

          fread(out,sizeof(out),1,ft);
       }


    }



    fclose(ft);
    fclose(fp);
}

void outputs(tiao taj[],string cpath,int n,char bo[][20],char sn[][20])
{
    int i=0,j=0,k=0,flag=2,sign=1,nfile=0,log=1;
    int n1=0,n2=0,n3=0,n4=0,n5=0;
    char data[20][50]={0};
    fdata da={{0}};
    //ega ga={{0},{0},{0},{0},{0}};
    dou db={{0},{0}};
    vector<dou> result;
    vector<fdata> fd1;
    vector<fdata> fd2;
    vector<fdata> fd3;
    vector<fdata> fd4;
    vector<fdata> fd5;
    string filename="E:\\codeblocks编程\\test\\";
    string wei=".txt";
    FILE *fcd=NULL;
    FILE *fp=NULL;
    FILE *ft=NULL;
    tafot cidian[5]={{{0},{0},{0},{0},{0},0,{0}},
                     {{0},{0},{0},{0},{0},0,{0}},
                     {{0},{0},{0},{0},{0},0,{0}},
                     {{0},{0},{0},{0},{0},0,{0}},
                     {{0},{0},{0},{0},{0},0,{0}}
                    };
    //vector< vector<char> > b(20, vector<char>(50));        //创建一个10*5的char型二维向量

    while(strcmp(bo[nfile],"\0"))//i可以记录文件数 对应着词典数
    {
          filename=filename+bo[nfile]+wei;
          if((fp=fopen(filename.c_str(),"r"))!=NULL)
              fread(da.elem,sizeof(da.elem),1,fp);
          else
              cout<<"文件打开失败"<<endl;
          while(!feof(fp))//读完一个文件 换下一个表存
          {
              if(sign==1)
                 fd1.push_back(da);
              else if(sign==2)
                  fd2.push_back(da);
              else if(sign==3)
                  fd3.push_back(da);
              else if(sign==4)
                  fd4.push_back(da);
              else if(sign==5)
                  fd5.push_back(da);
              fread(da.elem,sizeof(da.elem),1,fp);
          }
          fclose(fp);sign++;nfile++;

    }
    //获取多张表的数据字典
    if((fcd=fopen(cpath.c_str(),"r"))==NULL)
         cout<<"文件打开失败"<<endl;
    while(strcmp(bo[i],"\0"))
    {
        fread(&cidian[i],sizeof(struct tableformat),1,fcd);
        while(feof(fcd))
        {
            if(strcmp(cidian[i].belotable,bo[0])==0)
            {
                break;
            }
            else
            {
               fread(&cidian[i],sizeof(struct tableformat),1,fcd);
            }
        }
        rewind(fcd);i++;
    }
    i=0;
    //连接数据
    //memcpy(ga.first,fd1[0].elem,sizeof(char)*20*50);
    if(nfile==2)
    {
           while(n1<fd1.size())
           {
               memcpy(db.dsu,fd1[0].elem,sizeof(char)*20*50);
               strcpy(db.bioname,bo[i++]);
               result.push_back(db);
           }
    } 
    else if(nfile==3)
    {
          
    }
    else if(nfile==4)
    {
         
    }
    else if(nfile==5)
    {
         
    }
    
    
    
    if(fd1.size()>0)
    {
      memcpy(db.dsu,fd1[0].elem,sizeof(char)*20*50);
      strcpy(db.bioname,bo[i++]);
      result.push_back(db);
    }
    if(fd2.size()>0)
    {
      memcpy(db.dsu,fd2[0].elem,sizeof(char)*20*50);
      strcpy(db.bioname,bo[i++]);
      result.push_back(db);
    }
    if(fd3.size()>0)
    {
      memcpy(db.dsu,fd3[0].elem,sizeof(char)*20*50);
      strcpy(db.bioname,bo[i++]);
      result.push_back(db);
    }
    if(fd4.size()>0)
    {
      memcpy(db.dsu,fd4[0].elem,sizeof(char)*20*50);
      strcpy(db.bioname,bo[i++]);
      result.push_back(db);
    }
    if(fd5.size()>0)
    {
      memcpy(db.dsu,fd5[0].elem,sizeof(char)*20*50);
      strcpy(db.bioname,bo[i++]);
      result.push_back(db);
    }











   fd1.~vector<fdata>();
   fd2.~vector<fdata>();
   fd3.~vector<fdata>();
   fd4.~vector<fdata>();
   fd5.~vector<fdata>();
   result.~vector<dou>();//析构该结构体vector数组
}

int analyzeType(string sts,int p,int q,tiao *con)//分析存在什么内容,然后记录数据类型,再截取数据部分存入条件类型中
{
    //0---p-1,,预算符,,q-----sts.length()-1
    //数字 1 ,小数 2 ,年月日 3 ,字母 4 ,表字母 5 ,英文单词 6 ,汉字 7
    int pose=0;
    int sz=0,xsd=0,zm=0,hx=0,dyh=0;
    int les=-1,ris=-1,lez=-1,riz=-1,led=-1,rid=-1;
    int xsdlocation=0;
    string temp="";
        for(int i=0;i<p;i++)//这里仅仅是运算符的左半部分  _______运算符
        {
            if(sts[i]>='0'&&sts[i]<='9')
            {
                sz=1;
                if(les==-1)//记录第一个数字出现的下标
                    les=i;
                if(les!=-1)//记录最后一个数字出现的下标
                    ris=i;
            }
            else if(sts[i]>='a'&&sts[i]<='z')
            {  zm=1;
                if(lez==-1)
                    lez=i;
                if(lez!=-1)
                    riz=i;
            }
            else if(sts[i]=='.')
            {
               xsd=1;
               xsdlocation=i;
            }
            else if(sts[i]=='\'')
            {
                dyh=1;
                if(led==-1)
                    led=i;
                if(led!=-1)
                    rid=i;
            }
            else if(sts[i]=='-')
            {
                hx=1;
            }

        }

        if(sz==1&&zm==0&&xsd==0&&dyh==0&&hx==0)
        {
            con->le=1;//整数
            temp=sts.substr(les,ris-les+1);
            strcpy(con->rights,temp.c_str());

        }
        else if(sz==1&&zm==0&&xsd==1&&dyh==0&&hx==0)
        {
            con->le=2;//小数
            temp=sts.substr(les,ris-les+1);
            strcpy(con->rights,temp.c_str());
        }
        else if(sz==1&&zm==0&&xsd==0&&dyh==1&&hx==1)
        {
            con->le=3;//年月日
            temp=sts.substr(les,ris-les+1);
            temp=dateDeal(temp);//处理日期横线
            strcpy(con->rights,temp.c_str());

        }
        else if(sz==0&&zm==1&&xsd==0&&dyh==0&&hx==0)
        {
            con->le=4;//属性名
            temp=sts.substr(lez,riz-lez+1);
            //cout<<lez<<" 两个下标 "<<riz<<"  temp="<<temp<<endl;
            strcpy(con->lefts,temp.c_str());
        }
        else if(sz==0&&zm==1&&xsd==1&&dyh==0&&hx==0)
        {
            con->le=5;//带表名的属性
            temp=sts.substr(lez,xsdlocation-lez);
            strcpy(con->rights,temp.c_str());
            temp=sts.substr(xsdlocation+1,riz-xsdlocation);
            strcpy(con->rightbie,temp.c_str());
        }
        else if(sz==0&&zm==1&&xsd==0&&dyh==1&&hx==0)
        {
            con->le=6;//英文单词
            temp=sts.substr(led+1,rid-led-1);
            strcpy(con->rights,temp.c_str());
        }
        else if(sz==0&&zm==0&&xsd==0&&dyh==1&&hx==0)
        {
            con->le=7;//汉字
            temp=sts.substr(led+1,rid-led-1);
            strcpy(con->rights,temp.c_str());
        }

         sz=0;xsd=0;zm=0;hx=0;dyh=0;
         les=-1;ris=-1;lez=-1;riz=-1;led=-1;rid=-1;
        for(int i=q;i<sts.length();i++)//运算符——————————————右边
        {
            if(sts[i]>='0'&&sts[i]<='9')
            {
                sz=1;
                if(les==-1)//记录第一个数字出现的下标
                    les=i;
                if(les!=-1)//记录最后一个数字出现的下标
                    ris=i;
            }
            else if(sts[i]>='a'&&sts[i]<='z')
            {  zm=1;
                if(lez==-1)
                    lez=i;
                if(lez!=-1)
                    riz=i;
            }
            else if(sts[i]=='.')
            {
               xsd=1;
               xsdlocation=i;
            }
            else if(sts[i]=='\'')
            {
                dyh=1;
                if(led==-1)
                    led=i;
                if(led!=-1)
                    rid=i;
            }
            else if(sts[i]=='-')
            {
                hx=1;
            }
        }
        if(sz==1&&zm==0&&xsd==0&&dyh==0&&hx==0)
        {
            con->ri=1;//整数
            temp=sts.substr(les,ris-les+1);
            strcpy(con->rights,temp.c_str());

        }
        else if(sz==1&&zm==0&&xsd==1&&dyh==0&&hx==0)
        {
            con->ri=2;//小数
            temp=sts.substr(les,ris-les+1);
            strcpy(con->rights,temp.c_str());
        }
        else if(sz==1&&zm==0&&xsd==0&&dyh==1&&hx==1)
        {
            con->ri=3;//年月日
            temp=sts.substr(les,ris-les+1);
            temp=dateDeal(temp);//处理日期横线
            strcpy(con->rights,temp.c_str());

        }
        else if(sz==0&&zm==1&&xsd==0&&dyh==0&&hx==0)
        {
            con->ri=4;//属性名
            temp=sts.substr(lez,riz-lez+1);
            strcpy(con->rights,temp.c_str());
        }
        else if(sz==0&&zm==1&&xsd==1&&dyh==0&&hx==0)
        {
            con->ri=5;//带表名的属性
            temp=sts.substr(lez,xsdlocation-lez);
            strcpy(con->rights,temp.c_str());
            temp=sts.substr(xsdlocation+1,riz-xsdlocation);
            strcpy(con->rightbie,temp.c_str());
        }
        else if(sz==0&&zm==1&&xsd==0&&dyh==1&&hx==0)
        {
            con->ri=6;//英文单词
            temp=sts.substr(led+1,rid-led-1);
            strcpy(con->rights,temp.c_str());
        }
        else if(sz==0&&zm==0&&xsd==0&&dyh==1&&hx==0)
        {
            con->ri=7;//汉字
            temp=sts.substr(led+1,rid-led-1);
            strcpy(con->rights,temp.c_str());
        }






}
void analyzeCondition(string st,int partlocal,tiao *condi)
{
    int pose=0;//记录出现运算符的位置
      if((pose=st.find("!=",0))!=-1)
      {
          condi->type=4;
          condi->part=partlocal;
          analyzeType(st,pose,pose+2,condi);

      }
      else if((pose=st.find("<=",0))!=-1)
      {
          condi->type=5;
          condi->part=partlocal;
          analyzeType(st,pose,pose+2,condi);
      }
      else if((pose=st.find(">=",0))!=-1)
      {
          condi->type=6;
          condi->part=partlocal;
          analyzeType(st,pose,pose+2,condi);
      }
      else if((pose=st.find("<",0))!=-1)
      {
          condi->type=1;
          condi->part=partlocal;
          analyzeType(st,pose,pose+1,condi);
      }
      else if((pose=st.find(">",0))!=-1)
      {
          condi->type=3;
          condi->part=partlocal;
          analyzeType(st,pose,pose+1,condi);
      }
      else if((pose=st.find("=",0))!=-1)
      {
          condi->type=2;
          condi->part=partlocal;
          analyzeType(st,pose,pose+1,condi);
      }
}
void analyze(string s,tiao tj[],int *nm)
{

    int m=0,k=0,part=1;
    int posetion=0;
    curent cu[5]={0};
    curent linshi;
    string stemp="";
    while(((posetion=s.find("and",posetion))!=-1))//可能一个也没有1找到意味着就一个条件 或者只有一个or
    {
           cu[m].loca=posetion;
           cu[m++].type=1;
           //cout<<posetion<<endl;
           posetion++;
   }
     posetion=0;
    while(((posetion=s.find("or",posetion))!=-1))
   {
           cu[m].loca=posetion;
           cu[m++].type=2;
           //cout<<posetion<<endl;
           posetion++;
   }
   posetion=0;*nm=m;
   if(m!=0)//有多个条件
    {
          for(int i=0;i<m;i++)
            for(int j=0;j<m-i-1;j++)
           {
               if(cu[j].loca>cu[j+1].loca)
               {
                   linshi=cu[j];
                   cu[j]=cu[j+1];
                   cu[j+1]=linshi;
               }
           }
           //cout<<"m="<<m<<endl;
         while(k<m)
         {

             while(cu[k].type!=2&&cu[k].type!=0)
             {
                   //cout<<posetion<<"=当前and位置="<<cu[k].loca<<"   1.1条件字符串"<<stemp<<s.substr(17,20)<<endl;
                   stemp=s.substr(posetion,cu[k].loca-posetion);
                   //cout<<posetion<<"=当前and位置="<<cu[k].loca<<"   1条件字符串"<<stemp<<endl;
                   analyzeCondition(stemp,part,&tj[k]);
                   posetion=cu[k].loca+3;
                   k++;
             }
             if(cu[k].type==2)
             {
                   stemp=s.substr(posetion,cu[k].loca-posetion);
                   //cout<<"当前or位置="<<cu[k].loca<<"     2条件字符串"<<stemp<<endl;
                   analyzeCondition(stemp,part,&tj[k]);
                   posetion=cu[k].loca+2;
                   part++;
                   k++;
             }
             //k++;
         }
         if(cu[k-1].type==1)
         {
             stemp=s.substr(posetion,s.length()-1);
             //cout<<"3条件字符串"<<stemp<<endl;
             analyzeCondition(stemp,part,&tj[k]);
         }
         else if(cu[k-1].type==2)
         {
             part++;
             stemp=s.substr(posetion,s.length()-1);
             //cout<<"4条件字符串"<<stemp<<endl;
             analyzeCondition(stemp,part,&tj[k]);
         }

    }
    else//只有一个条件
    {
        analyzeCondition(s,0,&tj[0]);
    }

}
void analyzeTable(string s,char bs[][20])
{
     int i=0,lez=-1,riz=0,k=0;
     int posedou=0,predou=0;
     int doulocat[5]={0};
     string sst="";
     string stem="";

     if((posedou=s.find(",",0))!=-1)
     {
         //doulocat[i++]=posedou;
         for(int j=predou;j<posedou;j++)
         {
             if((s[j]>='a'&&s[j]<='z')||s[j]=='_')
             {
                 if(lez==-1)
                    lez=j;
                 if(lez!=-1)
                    riz=j;
             }
         }
         stem=s.substr(lez,riz-lez+1);
         strcpy(bs[k++],stem.c_str());
         posedou+=1;
         predou=posedou;
         lez=-1,riz=0;
         while((posedou=s.find(",",posedou))!=-1)
         {
             //doulocat[i++]=posedou;
             for(int j=predou;j<posedou;j++)
             {
                 if((s[j]>='a'&&s[j]<='z')||s[j]=='_')
                {
                   if(lez==-1)
                      lez=j;
                   if(lez!=-1)
                      riz=j;
                }
             }
            stem=s.substr(lez,riz-lez+1);
            strcpy(bs[k++],stem.c_str());
            posedou+=1;
            if(posedou!=-1)
               predou=posedou;
            lez=-1,riz=0;
         }
         for(int j=predou;j<s.length();j++)
         {
                if((s[j]>='a'&&s[j]<='z')||s[j]=='_')
                {
                   if(lez==-1)
                      lez=j;
                   if(lez!=-1)
                      riz=j;
                }
         }
         stem=s.substr(lez,riz-lez+1);
         strcpy(bs[k++],stem.c_str());

     }
     else
     {
         for(int j=0;j<s.length();j++)
         {
                if((s[j]>='a'&&s[j]<='z')||s[j]=='_')
                {
                   if(lez==-1)
                      lez=j;
                   if(lez!=-1)
                      riz=j;
                }
         }
         stem=s.substr(lez,riz-lez+1);
         strcpy(bs[k++],stem.c_str());
     }
}

void analyzeAlter(string cpath,string sa,char bo[][20],int leix)
{
    int lez=-1,riz=0,sle=-1,sri=-1,kzuo=0,kyou=0,intlocation=0;
    int flag=0,te=0,xia=0,k=0,m=0;
    char shutype[10]={0};
    char out[20][50]={0};
    string temp="";
    string filename="E:\\codeblocks编程\\test\\";
    string wei=".txt";
    string tempfile="E:\\codeblocks编程\\test\\lin.txt";
    string tpfile="E:\\codeblocks编程\\test\\interval.txt";
    FILE *fp=fopen(cpath.c_str(),"r");
    FILE *ft=NULL;
    FILE *fg=NULL;
    FILE *fh=NULL;
    tafot th={{0},{0},{0},{0},{0},0,{0}};

    ft=fopen(tempfile.c_str(),"w");
    if(fp!=NULL)
       fread(&th,sizeof(struct tableformat),1,fp);
    else
       cout<<"文件打开失败"<<endl;
    while(!feof(fp))
    {
        if(strcmp(th.belotable,bo[0])==0)
        {
           break;
        }
        else
        {
            fwrite(&th,sizeof(struct tableformat),1,ft);
            fread(&th,sizeof(struct tableformat),1,fp);
        }
    }
    //fclose(fp);
    for(int j=0;j<sa.length();j++)
    {
             if(sle==-1)
             {

                if(sa[j]>='a'&&sa[j]<='z')
                {
                    if(lez==-1)
                       lez=j;
                    if(lez!=-1)
                       riz=j;
                }
                if(riz!=0&&sa[j]==' ')//表示已经读取了一小段字母后 再次遇到空格
                    sle=0;
             }
             else
             {
                 if(sa[j]>='a'&&sa[j]<='z')
                 {
                     if(sle==0)
                        sle=j;
                     if(sle!=0)
                        sri=j;
                 }
             }

    }
    temp=sa.substr(lez,riz-lez+1);
    for(int n=0;n<th.num;n++)//查询该属性是否存在
    {
        if(strcmp(temp.c_str(),th.bsname[n])==0)
        {
            flag=1;
            break;
        }
    }
    if(leix==1)
    {
        if(flag==1)
        {
            cout<<"该列已存在"<<endl;
            fclose(fp);
            fclose(ft);
            if(remove(tempfile.c_str())!=0)
                    cout<<"删除临时文件失败"<<endl;
        }
        else
        {
                strcpy(th.bsname[th.num],temp.c_str());
                temp=sa.substr(sle,sri-sle+1);
                if((intlocation=sa.find("int",0))!=-1)
                {
                    strcpy(th.stype[th.num],"int");
                }
                else if((intlocation=sa.find("integer",0))!=-1)
                {
                    strcpy(th.stype[th.num],"integer");
                }
                else
                {
                    strcpy(th.stype[th.num],temp.c_str());
                    kzuo=sa.find("(",0);
                    kyou=sa.find(")",0);
                    if(kzuo!=-1&&kyou!=-1)
                    {
                        temp=sa.substr(kzuo+1,kyou-kzuo-1);
                        th.length[th.num]=atoi(temp.c_str());
                    }
                    else
                        cout<<"语法错误"<<endl;

                }
                th.num++;
               /*
                for(te=0;te<th.num;te++)
                {
                    cout<<"变量 "<<th.bsname[te]<<" 类型"<<th.stype[te]<<endl;
                }
                */
                while(!feof(fp))//继续将剩余的写入临时文件
                {
                      fwrite(&th,sizeof(struct tableformat),1,ft);
                      fread(&th,sizeof(struct tableformat),1,fp);
                }
                fclose(fp);
                fclose(ft);
                fg=fopen(tempfile.c_str(),"r");
                fh=fopen(cpath.c_str(),"w");
                if(fg!=NULL)
                    fread(&th,sizeof(struct tableformat),1,fg);
               else
                    cout<<"文件打开失败"<<endl;
                while(!feof(fg))//继续将剩余的写入临时文件
                {
                      fwrite(&th,sizeof(struct tableformat),1,fh);
                      fread(&th,sizeof(struct tableformat),1,fg);
                }
                fclose(fg);
                fclose(fh);
                if(remove(tempfile.c_str())!=0)
                    cout<<"删除临时文件失败"<<endl;
        }
    }
    else
    {

         if(flag==0)
         {
            cout<<"该列不存在"<<endl;
            fclose(fp);
            fclose(ft);
            if(remove(tempfile.c_str())!=0)
                    cout<<"删除临时文件失败"<<endl;
         }
         else//需要找到位置 再全部前移
         {
             //cout<<temp<<endl;
             for(int j=0;j<th.num;j++)
             {
                 if(strcmp(temp.c_str(),th.bsname[j])==0)
                 {
                     xia=j;
                     break;
                 }
             }
             //cout<<"2该列存在,可以删除"<<endl;
             for(k=xia;k<th.num-1;k++)
             {
                 strcpy(th.bsname[k],th.bsname[k+1]);
                 strcpy(th.stype[k],th.stype[k+1]);
                 th.length[k]=th.length[k+1];
                 th.notnull[k]=th.notnull[k+1];
             }
             //cout<<"3该列存在,可以删除"<<endl;

             //strcpy(th.bsname[k],"\0");
             //strcpy(th.stype[k],"\0");
             th.length[k]=0;
             th.notnull[k]=0;
             th.num--;
             memset(th.bsname[k],0,sizeof(char)*10);
             memset(th.stype[k],0,sizeof(char)*10);
             /*
             for(te=0;te<th.num;te++){
                    cout<<"变量 "<<th.bsname[te]<<" 类型"<<th.stype[te]<<endl;
             }
             */
             while(!feof(fp))//继续将剩余的写入临时文件
                {
                      fwrite(&th,sizeof(struct tableformat),1,ft);
                      fread(&th,sizeof(struct tableformat),1,fp);
                }
                fclose(fp);
                fclose(ft);
                fg=fopen(tempfile.c_str(),"r");
                fh=fopen(cpath.c_str(),"w");
                if(fg!=NULL)
                    fread(&th,sizeof(struct tableformat),1,fg);
               else
                    cout<<"文件打开失败"<<endl;
                while(!feof(fg))//继续将剩余的写入临时文件
                {
                      fwrite(&th,sizeof(struct tableformat),1,fh);
                      fread(&th,sizeof(struct tableformat),1,fg);
                }
                fclose(fg);
                fclose(fh);
                if(remove(tempfile.c_str())!=0)
                    cout<<"删除临时文件失败"<<endl;



               //再对数据文件经行操作
               filename=filename+bo[0]+wei;
               if((ft=fopen(tpfile.c_str(),"w"))==NULL)
                    cout<<"文件打开失败"<<endl;
               if((fp=fopen(filename.c_str(),"r"))!=NULL)
                   fread(out,sizeof(out),1,fp);
               else
                   cout<<"文件打开失败"<<endl;
               while(!feof(fp))//继续将剩余的写入临时文件
                {
                      for(m=xia;m<th.num;m++)
                          strcpy(out[m],out[m+1]);
                      memset(out[m],0,sizeof(char)*50);
                      fwrite(out,sizeof(out),1,ft);
                      fread(out,sizeof(out),1,fp);
                }

                //两个文件数据倒一下,再删除多余的
                fclose(fp);
                fclose(ft);
                fg=fopen(tpfile.c_str(),"r");
                fh=fopen(filename.c_str(),"w");
                if(fg!=NULL)
                    fread(out,sizeof(out),1,fg);
               else
                    cout<<"文件打开失败"<<endl;
                while(!feof(fg))//继续将剩余的写入临时文件
                {
                      fwrite(out,sizeof(out),1,fh);
                      fread(out,sizeof(out),1,fg);
                }
                fclose(fg);
                fclose(fh);
                if(remove(tpfile.c_str())!=0)
                    cout<<"删除临时文件失败"<<endl;



         }
    }


}

void updatedata(string cpath,tiao suta[],tiao uptiao[],char bo[][20],int n)
{
    int i=0,j=0,m=0,k=0,xia=0,part=0;
    int flag=2,te=0;
    char data[20][50]={0};
    char sn[5][20]={0};
    int touy[5]={0};
    string filename="E:\\codeblocks编程\\test\\";
    string wei=".txt";
    string tempfile="E:\\codeblocks编程\\test\\change.txt";
    FILE *fp=NULL;
    FILE *ft=NULL;
    FILE *fw=fopen(tempfile.c_str(),"w+");
    FILE *fg=NULL;
    FILE *fh=NULL;
    tafot tf={{0},{0},{0},{0},{0},0,{0}};

    while(strcmp(suta[i].lefts,"\0")!=0)
    {
        strcpy(sn[i],suta[i].lefts);
        i++;
    }
    i=0;
    /*
    while(strcmp(sn[te],"\0")!=0){
          cout<<"获取的属性表"<<sn[te]<<"和修改的地方左="<<suta[te].lefts<<"修改的地方右边="<<suta[te].rights<<endl;
          te++;
    }
     te=0;
     cout<<"条件个数"<<n<<endl;
     while(strcmp(uptiao[te].lefts,"\0")!=0)
     {
         cout<<"判断条件左= "<<uptiao[te].lefts<<" 判断条件右= "<<uptiao[te].rights<<" 条件类型 "<<uptiao[te].type<<endl;
         te++;
     }
    */

    if((fp=fopen(cpath.c_str(),"r"))==NULL)
            cout<<"文件打开失败"<<endl;
    else
            fread(&tf,sizeof(struct tableformat),1,fp);
    while(!feof(fp))
    {
        if(strcmp(tf.belotable,bo[0])==0)
        {
           break;
        }
        else
        {
            fread(&tf,sizeof(struct tableformat),1,fp);
        }
    }
   //cout<<"表名"<<tf.belotable<<"属性名"<<tf.bsname[0]<<"属性类型"<<tf.stype[0]<<"属性长度"<<tf.length[0]<<endl;
     while(strcmp(sn[i],"\0")!=0)//将单表做投影
     {
         while(m<tf.num)//跟取出的数据词典中的每个属性作比较,确定该属性在数据数组中的位置
         {
             if(strcmp(sn[i],tf.bsname[m])==0)
             {
                 touy[j++]=m+1;
                 break;
             }
             m++;
         }
         m=0;
         i++;
     }
     m=0;
    if(n!=0)
    {
             filename=filename+bo[0]+wei;
             //cout<<filename<<endl;
             if((ft=fopen(filename.c_str(),"r"))==NULL)
                   cout<<"文件打开失败"<<endl;
             else
             {
                 fread(data,sizeof(data),1,ft);
                 //cout<<"数据="<<data[0]<<data[1]<<data[2]<<data[3]<<endl;
             }
            while(!feof(ft))
            {
                     //fread(data,sizeof(data),1,ft);
                     part=uptiao[k].part;//每读一次数据都需要和所有的条件进行比较 每次都从第一个条件的分区开始
                     //cout<<"分区="<<part<<"条件个数"<<n<<endl;
                     while(k<=n)//k<条件个数
                     {
                          if(part==uptiao[k].part)
                          {
                               if(compare(uptiao[k],data,tf)==1)//条件成立
                               {
                                   if(flag==1||flag==2)
                                   {
                                       flag=1;
                                   }
                                   else //前一个and条件结果是错误的
                                   {
                                       flag=0;
                                   }
                               }
                               else
                               {
                                   flag=0;
                               }
                               k++;
                          }
                          else
                          {
                              part=uptiao[k].part;
                              if(compare(uptiao[k],data,tf)==1)
                              {
                                  flag=1;
                              }
                              else
                              {
                                  if(flag==1)
                                     flag=1;
                                  else
                                  {
                                      flag=0;
                                  }
                              }
                              k++;
                          }

                     }
                     k=0;
                  if(flag==1)//比较完n个条件后 若flag==1则说明该条记录符合条件 对其在进行投影就可以输出了
                  {
                      while(touy[m]!=0)//输出投影对应下标的数据
                      {
                          xia=touy[m]-1;
                          strcpy(data[xia],suta[m].rights);
                          m++;
                      }
                  }
                  m=0;flag=2;

               fwrite(data,sizeof(data),1,fw);
               fread(data,sizeof(data),1,ft);
            }
             fclose(fp);
             fclose(ft);
             fclose(fw);
            //if(ft!=NULL)
            //    cout<<"还有数据存在"<<endl;

            fg=fopen(filename.c_str(),"w");
            fh=fopen(tempfile.c_str(),"r");

            fread(data,sizeof(data),1,fh);
            while(!feof(fh))
            {
                 //fread(data,sizeof(data),1,fh);
                  fwrite(data,sizeof(data),1,fg);
                  fread(data,sizeof(data),1,fh);
            }

             fclose(fg);
             fclose(fh);

             if(remove(tempfile.c_str())!=0)
                 cout<<"删除失败"<<endl;
    }
    else if(n==0)//没有条件
    {
        filename=filename+bo[0]+wei;
             //cout<<filename<<endl;
             if((ft=fopen(filename.c_str(),"r"))==NULL)
                   cout<<"文件打开失败"<<endl;
             else
             {
                 fread(data,sizeof(data),1,ft);
                 //cout<<"数据="<<data[0]<<data[1]<<data[2]<<data[3]<<endl;
             }
            while(!feof(ft))
            {

                      while(touy[m]!=0)//输出投影对应下标的数据
                      {
                          xia=touy[m]-1;
                          strcpy(data[xia],suta[m].rights);
                          m++;
                      }
                      m=0;

               fwrite(data,sizeof(data),1,fw);
               fread(data,sizeof(data),1,ft);
            }
             fclose(fp);
             fclose(ft);
             fclose(fw);
            //if(ft!=NULL)
            //    cout<<"还有数据存在"<<endl;

            fg=fopen(filename.c_str(),"w");
            fh=fopen(tempfile.c_str(),"r");

            fread(data,sizeof(data),1,fh);
            while(!feof(fh))
            {
                 //fread(data,sizeof(data),1,fh);
                  fwrite(data,sizeof(data),1,fg);
                  fread(data,sizeof(data),1,fh);
            }

             fclose(fg);
             fclose(fh);

             if(remove(tempfile.c_str())!=0)
                 cout<<"删除失败"<<endl;
    }

}//可能与用多个指针的问题   或者未读取完毕
void create(char sh)//需要判断表名是否存在
{
    int leftnum=0;//lefenum记录最外层括号数,nlef记录内层括号,来判断是否成对出现
    char ch;ch=sh;
    int k=0,j=0,i=0;//i是控制记录属性个数
    char temp[10]={0};
    char biao[20]={0};
    char element[10]={0};
    char sty[10]={0};
    char keys[10]={0};
    char isnu[10]={0};
    char stypear[4][10]={"int","char","varchar","integer"};
    int len=0;
    FILE *fp=NULL,*fw=NULL;
    string filenaeme="E:\\codeblocks编程\\test\\";
    string wei=".txt";
    tafot tf={{0},{0},{0},{0},{0},0,{0}};

    while(ch==' ')
          ch=getchar();
    while((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))
       {
           temp[k++]=ch;
           ch=getchar();
       }
       turn(temp);
       if(strlen(temp)!=0)
       {
           if(strcmp(temp,"table")==0)
           {
                while(ch==' ')
                     ch=getchar();
                 k=0;
                  while((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z')||ch=='_')//读取表名
                  {
                    biao[k++]=ch;
                    ch=getchar();
                  }
                  turn(biao);
                 if(strlen(biao)!=0);//搜索表不存在的方法 1 打开失败open 2 函数返回值
                 {
                        filenaeme=filenaeme+biao+wei;//可以将string赋值给数组
                    if(access(filenaeme.c_str(),F_OK) == -1)//可以添加指定路径查询文件是否存在  0表示存在,-1表示不存在
                    {

                        fp=fopen(filenaeme.c_str(),"w+");
                        strcpy(tf.belotable,biao);//记录表格名字
                        //cout<<"表格名字="<<tf.belotable<<endl;
                        memset(biao,0,sizeof biao);//String.h 中的函数 用于清空数组


                         while(ch==' ')
                            ch=getchar();
                         if(ch=='(')
                         {
                              ch=getchar();
                            while(leftnum!=1)//进入表格元素部分,并且循环识别每个元素
                           {
                                while(ch==' '||ch==',')//
                                     ch=getchar();
                                while((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z')||(ch>='0'&&ch<='9'))//获取属性名
                               {
                                   element[j++]=ch;
                                   ch=getchar();
                               }
                                turn(element); j=0;//初始化 方便后续使用
                             if(strlen(element)!=0);//如果数组不为空
                              {
                                  if(strcmp(element,"primary")==0)//先判断是不是主键
                                  {   memset(element,0,sizeof element);
                                      while(ch!=')')
                                      {
                                           while(ch==' ')
                                                ch=getchar();
                                           while((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))
                                          {
                                              keys[j++]=ch;
                                              ch=getchar();
                                          }
                                             turn(keys); j=0;//初始化 方便后续使用
                                          if(strlen(keys)!=0);//如果数组不为空
                                          {
                                              if(strcmp(keys,"key")==0)
                                              {
                                                  if(ch='(')
                                                  {
                                                      ch=getchar();
                                                      while((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))
                                                      {
                                                          tf.key[j++]=ch;
                                                          ch=getchar();
                                                      }
                                                      turn(tf.key);j=0;
                                                  }
                                              }
                                              else
                                              {
                                                  cout<<"语法错误"<<endl;
                                                  break;
                                              }
                                          }
                                          //ch=getchar();
                                      }
                                  }
                                  else//不是主键
                                 {
                                              strcpy(tf.bsname[i],element);//记录表格元素
                                              memset(element,0,sizeof element);
                                           while(ch==' '||ch==',')
                                                ch=getchar();
                                           while((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))
                                           {
                                               sty[j++]=ch;
                                                ch=getchar();
                                           }
                                             turn(sty);j=0;//初始化 方便后续使用
                                           if(strlen(sty)!=0);//如果元素类型数组不为空
                                          {
                                             if(strcmp(sty,"int")==0||strcmp(sty,"integer")==0||strcmp(sty,"float")==0)
                                             {
                                                  strcpy(tf.stype[i],sty);//记录表格元素类型
                                                  memset(sty,0,sizeof sty);
                                                  tf.length[i]=0;
                                                                        while(ch==' ')
                                                                             ch=getchar();
                                                                         while(ch!=',')//数据是否可以为空
                                                                         {
                                                                             while(ch==' ')
                                                                                 ch=getchar();
                                                                             while((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))
                                                                             {
                                                                                  isnu[j++]=ch;
                                                                                  ch=getchar();
                                                                             }
                                                                         }
                                                                         turn(isnu);j=0;
                                                                         if(strlen(isnu)!=0)
                                                                         {
                                                                             if(strcmp(isnu,"notnull")==0)
                                                                            {
                                                                                      tf.notnull[i]=1;
                                                                                      //cout<<"isnu[]="<<isnu<<endl;
                                                                                      memset(isnu,0,sizeof isnu);
                                                                            }
                                                                            else
                                                                            {         memset(isnu,0,sizeof isnu);

                                                                            }
                                                                         }

                                                  i++;
                                             }
                                            else
                                            {
                                                strcpy(tf.stype[i],sty);//记录表格元素类型然后置空
                                                memset(sty,0,sizeof sty);
                                             if(ch=='(')//记得数字i要加1  如果不是整型后面就会跟括号
                                             {

                                                  ch=getchar();
                                                  while(ch>='0'&&ch<='9')
                                                  {
                                                     len=len*10+ch-'0';
                                                     ch=getchar();
                                                  }
                                                  if(len!=0)
                                                  {
                                                      tf.length[i]=len;
                                                      len=0;
                                                  }

                                                                    if(ch==')')
                                                                    {
                                                                        ch=getchar();
                                                                         while(ch==' ')
                                                                             ch=getchar();
                                                                         while(ch!=',')//数据是否可以为空
                                                                         {
                                                                             while(ch==' ')
                                                                                 ch=getchar();
                                                                             while((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))
                                                                             {
                                                                                  isnu[j++]=ch;
                                                                                  ch=getchar();
                                                                             }
                                                                         }
                                                                         turn(isnu);j=0;
                                                                         if(strlen(isnu)!=0)
                                                                         {
                                                                             if(strcmp(isnu,"notnull")==0)
                                                                            {
                                                                                      tf.notnull[i]=1;
                                                                                     // cout<<"isnu[]="<<isnu<<endl;
                                                                                      memset(isnu,0,sizeof isnu);
                                                                            }
                                                                            else
                                                                            {         memset(isnu,0,sizeof isnu);

                                                                            }
                                                                         }
                                                                         i++;

                                                                    }

                                            }
                                            else
                                            {
                                                 cout<<"sql语言错误1"<<endl;
                                            }
                                         }
                                       }

                                }
                              }


                           if(ch==')')//到达最后一个括号
                              leftnum=1;
                            ch=getchar();
                         }
                            tf.num=i;
                      //表不存在 需要将表格式写进数据字典
                            if((fw=fopen("E:\\codeblocks编程\\test\\shujuzidian.txt","a+"))==false)
                                fw=fopen("E:\\codeblocks编程\\test\\shujuzidian.txt","w+");
                                fwrite(&tf,sizeof(struct tableformat),1,fw);
                               // cout<<"执行文件存取操作"<<endl;
                       }




                    }
                    else
                    {
                        cout<<"表已存在"<<endl;
                        memset(biao,0,sizeof biao);
                    }
                 }

           }
           else
           {
               cout<<"输入sql语句错误2"<<endl;
           }
       }
    fclose(fw);
    fclose(fp);

   // return;
}
void drop(char sh,string cpath)
{
    int k=0;
    char ch=sh;
    char temp[10]={0};
    char biao[20]={0};
    string filenaeme="E:\\codeblocks编程\\test\\";
    string wei=".txt";
    string filenaeme1="E:\\codeblocks编程\\test\\temp.txt";
    FILE *fp=NULL;
    FILE *ft=NULL;
    FILE *fg=NULL;
    FILE *fh=NULL;
    tafot ts={{0},{0},{0},{0},{0},0,{0}};


    while(ch==' ')
         ch=getchar();
    while((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z')||ch=='_')
       {
           temp[k++]=ch;
           ch=getchar();
       }
       turn(temp);
       if(strlen(temp)!=0)
       {
             if(strcmp(temp,"table")==0)
             {
                   k=0;
                   while(ch==' ')
                         ch=getchar();
                   while((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))
                   {
                       biao[k++]=ch;
                       ch=getchar();
                  }
                  turn(biao);
                 if(strlen(biao)!=0);
                 {
                       filenaeme=filenaeme+biao+wei;//确定表的路径
                       //cout<<access(filenaeme.c_str(),F_OK)<<endl;
                    if(access(filenaeme.c_str(),F_OK) == 0)
                    {
                          if(remove(filenaeme.c_str())==0)//除此之外还能用unlink删除指定路径文件,若果有调用,则等调用完关闭后删除
                               cout<<"删除成功"<<endl;
                          else{cout<<"删除失败"<<endl;}

                               ft=fopen(filenaeme1.c_str(),"w");//创建临时字典
                               fp=fopen(cpath.c_str(),"r");//打开数据字典
                               fread(&ts,sizeof(struct tableformat),1,fp);//注意文件指针移动顺序,会不会出现多读取一次
                         while(!feof(fp))
                         {

                              if(strcmp(biao,ts.belotable)!=0)
                              {
                                     //cout<<biao<<"和"<<ts.belotable<<"和"<<strcmp(biao,ts.belotable)<<endl;
                                  fwrite(&ts,sizeof(struct tableformat),1,ft);
                              }
                              fread(&ts,sizeof(struct tableformat),1,fp);
                         }
                         fclose(fp);
                         fclose(ft);

                         fg=fopen(cpath.c_str(),"w");
                         fh=fopen(filenaeme1.c_str(),"r");
                         fread(&ts,sizeof(struct tableformat),1,fh);
                         while(!feof(fh))
                         {
                                 fwrite(&ts,sizeof(struct tableformat),1,fg);
                                 fread(&ts,sizeof(struct tableformat),1,fh);
                         }
                         fclose(fg);
                         fclose(fh);

                         if(remove(filenaeme1.c_str())!=0)
                            cout<<"删除失败"<<endl;
                         /*
                         if(remove(cpath.c_str())==0);
                             cout<<"删除原数据字典"<<endl;
                         if(rename(filenaeme1.c_str(),cpath.c_str())==-1);//oldname  newname
                             cout<<"重命名失败"<<endl;
                             */
                    }
                    else
                    {
                        cout<<"该表不存在"<<biao<<"和"<<filenaeme<<endl;
                    }
                 }
            }

       }

   //return;
}
void inserts(char sh,string cpath)
{
    char ch=sh;
    char biao[20]={0};
    char value[8]={0};
    char data[10][16]={0};
    int k=0,j=0,i=0;
    char temp[10]={0};
    string filenaeme="E:\\codeblocks编程\\test\\";
    string wei=".txt";
    FILE *fp=fopen(cpath.c_str(),"r");//数据字典
    FILE *ft=NULL;
    tafot tg={{0},{0},{0},{0},{0},0,{0}};
    char as[20][50]={0};
    char zf[256]={0};
    char *p=NULL;

       while(ch==' ')
         ch=getchar();
       while((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))
       {
           temp[k++]=ch;
           ch=getchar();
       }
       turn(temp);
       if(strlen(temp)!=0)
       {
             if(strcmp(temp,"into")==0)
             {
                   k=0;
                   while(ch==' ')
                         ch=getchar();
                   while((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z')||ch=='_')
                   {
                       biao[k++]=ch;
                       ch=getchar();
                   }
                  turn(biao);
                 if(strlen(biao)!=0);
                 {
                       filenaeme=filenaeme+biao+wei;//确定表的路径
                    if(access(filenaeme.c_str(),F_OK) == 0)
                    {
                           fread(&tg,sizeof(struct tableformat),1,fp);//获取数据类型
                           while(!feof(fp))
                           {
                               if(strcmp(biao,tg.belotable)==0)
                                     break;
                               else
                                {
                                  fread(&tg,sizeof(struct tableformat),1,fp);
                                }
                           }
                           //cout<<"从数据字典读出的表名"<<tg.belotable<<endl;
                           //for(int n=0;n<tg.num;n++)
                               //cout<<n<<"个属性长度="<<tg.length[n]<<endl;
                           while(ch==' ')
                              ch=getchar();
                           while((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))
                           {
                                  value[j++]=ch;
                                  ch=getchar();
                           }
                           turn(value);j=0;
                           if(strcmp(value,"values")==0);
                           {
                               while(ch==' ')
                                  ch=getchar();
                               if(ch=='(')
                               {
                                    gets(zf);
                                    p=strtok(zf,"', )");
                                        while(p!=NULL)//注意程序结尾时指针p可能为空了  这时候任何出现关于p的操作都可能崩溃
                                        {
                                             //p=strtok(NULL,"', )");
                                             if(sou(p)==0)
                                             {
                                                // cout<<"2此时的i="<<i<<"和"<<strlen(p)<<"长度定义"<<tg.length[i]<<"和"<<p<<endl;
                                                if(tg.length[i]>=strlen(p))
                                                {
                                                   strcpy(as[i],p);
                                                   i++;
                                                }
                                                else
                                                {
                                                    cout<<"长度超出定义"<<endl;
                                                }
                                             }
                                            else
                                            {
                                                  strcpy(as[i],p);
                                                  i++;
                                            }
                                            p=strtok(NULL,"', )");
                                        }
                               }
                               if((ft=fopen(filenaeme.c_str(),"a+"))!=NULL)
                                   fwrite(as,sizeof(as),1,ft);
                                   //fwrite(as,(sizeof(char)*20*50),1,ft);
                                else
                                {
                                    cout<<"文件打开失败"<<endl;
                                }

                           }


                    }
                           else
                           {
                                 cout<<"表不存在"<<endl;
                           }
                 }

                 }
             }
                 else
                 {
                     cout<<"语法错误"<<endl;
                 }
                 free(p);
                 fclose(fp);
                 fclose(ft);
             }
void selectc(string cpath)
{
    int posexing=0,posefrom=0,posewhere=0;
    int num=0;
    char s[200]={0};
    string str="";
    string sshu="";
    string sbiao="";
    string stiao="";
    char biao[6][20]={0};
    char su[5][20]={0};//属性集合
    tiao tj[5]={{0,0,0,{0},{0},0,{0},{0}},
                {0,0,0,{0},{0},0,{0},{0}},
                {0,0,0,{0},{0},0,{0},{0}},
                {0,0,0,{0},{0},0,{0},{0}},
                {0,0,0,{0},{0},0,{0},{0}}
                };

    gets(s);
    str=s;

    if((posexing=str.find("*",0))!=-1)
    {
        if((posefrom=str.find("from",0))!=-1)
        {

            if((posewhere=str.find("where",0))!=-1)
            {
                cout<<" * from   where "<<endl;
            }
            else//* from  table没有条件
            {
                 sbiao=str.substr(posefrom+4,str.length()-posefrom-4);
                 //cout<<"sbiao= "<<sbiao<<endl;
                 analyzeTable(sbiao,biao);
                 outputjian(cpath,biao,su);

            }
        }
        else
        {
            cout<<" 语法错误 "<<endl;
        }

    }
    else
    {
        if((posefrom=str.find("from",0))!=-1)
        {
             if((posewhere=str.find("where",0))!=-1)
             {
                 sshu=str.substr(0,posefrom-1);
                 sbiao=str.substr(posefrom+4,posewhere-posefrom-4);
                 stiao=str.substr(posewhere+5,str.length()-posewhere-4);
                 //cout<<"sshu= "<<sshu<<endl;
                 //cout<<"sbiao= "<<sbiao<<endl;
                 //cout<<"stiao= "<<stiao<<endl;

                 analyzeTable(sshu,su);
                 analyzeTable(sbiao,biao);
                 analyze(stiao,tj,&num);

                 output(tj,cpath,num,biao,su);


             }
             else//不带条件的
             {
                 sshu=str.substr(0,posefrom-1);
                 sbiao=str.substr(posefrom+4,str.length()-posefrom-4);
                 //cout<<"sshu= "<<sshu<<endl;
                 //cout<<"sbiao= "<<sbiao<<endl;

                 analyzeTable(sshu,su);
                 analyzeTable(sbiao,biao);
                 outputjian(cpath,biao,su);
             }
        }
        else
        {
            cout<<" 语法错误 "<<endl;
        }

    }



}
void update(string cpath)
{
    int i=0,j=0;
    int number=0;
    int poseset=0,posewere=0,posed=0,pred=0;
    char s[200]={0};
    string str="";
    string temp="";
    string temp1="";
    string stiao="";
    string sdtiao="";
    char shu[][20]={0};
    char biao[2][20]={0};
    tiao sta[5]={{0,0,0,{0},{0},0,{0},{0}},
                {0,0,0,{0},{0},0,{0},{0}},
                {0,0,0,{0},{0},0,{0},{0}},
                {0,0,0,{0},{0},0,{0},{0}},
                {0,0,0,{0},{0},0,{0},{0}}
                };
    tiao uptiao[5]={{0,0,0,{0},{0},0,{0},{0}},
                {0,0,0,{0},{0},0,{0},{0}},
                {0,0,0,{0},{0},0,{0},{0}},
                {0,0,0,{0},{0},0,{0},{0}},
                {0,0,0,{0},{0},0,{0},{0}}
                };

    gets(s);
    str=s;
    if((poseset=str.find("set",0))!=-1)
    {
        //这是表的部分
        temp=str.substr(0,poseset-1);
        cout<<"这是表的部分="<<temp<<endl;
        analyzeTable(temp,biao);
        //修改的部分
        if((posewere=str.find("where",0))!=-1)
        {
            temp=str.substr(poseset+3,posewere-poseset-3);
            cout<<"这是修改的部分="<<temp<<endl;
             if((posed=temp.find(",",0))!=-1)
             {
                 temp1=temp.substr(pred,posed-1);
                 cout<<"修改的xiaoxiao部分="<<temp1<<endl;
                 analyzeCondition(temp1,1,&sta[i]);
                 posed++;
                 pred=posed;i++;
                 while((posed=temp.find(",",posed))!=-1)
                 {
                     temp1=temp.substr(pred,posed-1);
                     cout<<"修改的xiaoxiao部分="<<temp1<<endl;
                     analyzeCondition(temp1,1,&sta[i]);
                     pred=++posed;i++;
                 }
                 temp1=temp.substr(pred,temp.length()-1);
                 cout<<"最后一部分="<<temp1<<endl;
                 analyzeCondition(temp1,1,&sta[i]);
             }
             else//只有一条需要修改
             {
                 analyzeCondition(temp,1,&sta[0]);
                 cout<<"只有一条需要修改"<<temp<<endl;
             }


             //条件部分
            stiao=str.substr(posewere+5,str.length()-posewere-4);
            cout<<"条件部分"<<stiao<<endl;
            analyze(stiao,uptiao,&number);

            updatedata(cpath,sta,uptiao,biao,number);
        }
        else//没有条件 每一条记录都要修改
        {
            temp=str.substr(poseset+3,posewere-poseset-3);
             if((posed=temp.find(",",0))!=-1)
             {
                 temp1=temp.substr(pred,posed-1);
                 analyzeCondition(temp1,1,&sta[i]);
                 pred=++posed;i++;
                 while((posed=temp.find(",",posed))!=-1)
                 {
                     temp1=temp.substr(pred,posed-1);
                     analyzeCondition(temp1,1,&sta[i]);
                     pred=++posed;i++;
                 }
                 temp1=temp.substr(pred,temp.length()-1);
                 analyzeCondition(temp1,1,&sta[i]);
             }
             else//只有一条需要修改
             {
                 analyzeCondition(temp,1,&sta[0]);
             }
             updatedata(cpath,sta,uptiao,biao,0);
        }

    }
    else
    {
        cout<<"语法错误"<<endl;
    }

}

void alter(string cpath)
{
    char st[200]={0};
    char biao[2][20]={0};
    string ss="";
    int posetable=0,poseadd=0,posedrop=0,lez=0,riy=0;
    string sbiao="",salter="";


    gets(st);
    ss=st;

    if((posetable=ss.find("table",0))!=-1)
    {
         if((poseadd=ss.find("add",0))!=-1)
         {
             sbiao=ss.substr(posetable+5,poseadd-posetable-5);
             analyzeTable(sbiao,biao);
             salter=ss.substr(poseadd+3,ss.length()-poseadd-3);
             //cout<<salter<<endl;
             analyzeAlter(cpath,salter,biao,1);

         }
         else if((posedrop=ss.find("drop",0))!=-1)
         {
             sbiao=ss.substr(posetable+5,posedrop-posetable-5);
             analyzeTable(sbiao,biao);
             salter=ss.substr(posedrop+4,ss.length()-posedrop-4);
             //cout<<salter<<endl;
             analyzeAlter(cpath,salter,biao,2);
         }
         else
         {
             cout<<"语法错误"<<endl;
         }
    }
    else
    {
        cout<<"语法错误"<<endl;
    }



}

void deletes(string cpath)
{
    char str[200]={0};
    char biao[2][20]={0};
    string ss="";
    string stemp="";
    string filename="E:\\codeblocks编程\\test\\";
    string wei=".txt";
    int posewhere=0,posefrom=0;
    int i=0,j=0,m=0,k=0,nu=0,flag=2,part=0;
    char data[20][50]={0};
    string tempfile="E:\\codeblocks编程\\test\\change.txt";
    FILE *fp=NULL;
    FILE *ft=NULL;
    FILE *fw=NULL;
    FILE *fg=NULL;
    FILE *fh=NULL;
    tiao uptiao[5]={{0,0,0,{0},{0},0,{0},{0}},
                {0,0,0,{0},{0},0,{0},{0}},
                {0,0,0,{0},{0},0,{0},{0}},
                {0,0,0,{0},{0},0,{0},{0}},
                {0,0,0,{0},{0},0,{0},{0}}
                };
    tafot tf={{0},{0},{0},{0},{0},0,{0}};

    gets(str);
    ss=str;
    if((posefrom=ss.find("from",0))!=-1)
    {
        if((posewhere=ss.find("where",0))!=-1)
        {
            stemp=ss.substr(posefrom+4,posewhere-posefrom-4);
            analyzeTable(stemp,biao);
            stemp=ss.substr(posewhere+5,ss.length()-posewhere-4);
            analyze(stemp,uptiao,&nu);

            if((fp=fopen(cpath.c_str(),"r"))==NULL)
                cout<<"1文件打开失败"<<endl;
            else
                fread(&tf,sizeof(struct tableformat),1,fp);
             while(!feof(fp))
             {
                   if(strcmp(tf.belotable,biao[0])==0)
                   {
                      break;
                   }
                  else
                 {
                         fread(&tf,sizeof(struct tableformat),1,fp);
                 }
             }

            if((fw=fopen(tempfile.c_str(),"w+"))==NULL)
                cout<<"2文件打开失败"<<endl;
            filename=filename+biao[0]+wei;
             //cout<<filename<<endl;
             if((ft=fopen(filename.c_str(),"r"))==NULL)
                   cout<<"2文件打开失败"<<endl;
             else
             {
                 fread(data,sizeof(data),1,ft);
             }
            while(!feof(ft))
            {
                     //fread(data,sizeof(data),1,ft);
                     part=uptiao[k].part;//每读一次数据都需要和所有的条件进行比较 每次都从第一个条件的分区开始
                     //cout<<"分区="<<part<<"条件个数"<<n<<endl;
                     while(k<=nu)//k<条件个数
                     {
                          if(part==uptiao[k].part)
                          {
                               if(compare(uptiao[k],data,tf)==1)//条件成立
                               {
                                   if(flag==1||flag==2)
                                   {
                                       flag=1;
                                   }
                                   else //前一个and条件结果是错误的
                                   {
                                       flag=0;
                                   }
                               }
                               else
                               {
                                   flag=0;
                               }
                               k++;
                          }
                          else
                          {
                              part=uptiao[k].part;
                              if(compare(uptiao[k],data,tf)==1)
                              {
                                  flag=1;
                              }
                              else
                              {
                                  if(flag==1)
                                     flag=1;
                                  else
                                  {
                                      flag=0;
                                  }
                              }
                              k++;
                          }

                     }
                     k=0;
                  if(flag==1)//比较完n个条件后 若flag==1则说明该条记录符合条件 继续读,不写入该记录
                  {
                      fread(data,sizeof(data),1,ft);
                  }
                  else
                  {
                      fwrite(data,sizeof(data),1,fw);
                      fread(data,sizeof(data),1,ft);
                  }
                  flag=2;
            }
             fclose(fp);
             fclose(ft);
             fclose(fw);
            //if(ft!=NULL)
            //    cout<<"还有数据存在"<<endl;

            fg=fopen(filename.c_str(),"w");
            fh=fopen(tempfile.c_str(),"r");

            fread(data,sizeof(data),1,fh);
            while(!feof(fh))
            {
                 //fread(data,sizeof(data),1,fh);
                  fwrite(data,sizeof(data),1,fg);
                  fread(data,sizeof(data),1,fh);
            }

             fclose(fg);
             fclose(fh);

             if(remove(tempfile.c_str())!=0)
                 cout<<"删除失败"<<endl;


        }
        else//没有条件
        {
            stemp=ss.substr(posefrom+4,ss.length()-posefrom-3);
            analyzeTable(stemp,biao);
            filename=filename+biao[0]+wei;
            if((fp=fopen(filename.c_str(),"w"))==NULL)
                cout<<"3文件打开失败"<<endl;
             fclose(fp);
             fclose(ft);
             fclose(fw);
             fclose(fg);
             fclose(fh);

        }
    }
    else
    {
        cout<<"语法错误"<<endl;
    }


}

main()//跳出循环可用break,或者某一层循环continue,跳出子函数用return 无返回值也可以使用
{
    int k=0,n;
    char temp[10]={0};
    char ch;
    //char sqlstr[8][10]={"create","table","select","from","where","insert","update","delete"};
    char sqlstr2[5][10]={"and","or","in","not","exits"};
    string cidianpath="E:\\codeblocks编程\\test\\shujuzidian.txt";
    if(access("test",F_OK) == -1)//创建根目录 如果不存在,就创建 除此之外 可用system调用dos创建文件夹system("md E:\\mydir");
       mkdir("test");
    //rmdir("test");

        cout<<"请输入sql语句\n"<<endl;
    while(1)
    {
        while((ch=getchar())!='\n')
        {

            while(ch==' ')
                 ch=getchar();
             while((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))
             {
                  temp[k++]=ch;
                  ch=getchar();
             }
             k=0;
           if((n=strlen(temp))!=0);//如果数组不为空
           {
                    turn(temp);
                  if(strcmp(temp,"create")==0)
                    {
                       // cout<<"创造表格"<<endl;
                           memset(temp,0,sizeof temp);
                           create(ch);
                           //cout<<"执行创建"<<endl;
                    }
                   else if(strcmp(temp,"drop")==0)
                   {

                           memset(temp,0,sizeof temp);
                           drop(ch,cidianpath);
                           //cout<<"执行删除"<<endl;
                   }
                  else if(strcmp(temp,"insert")==0)
                 {
                                 //cout<<"执行插入"<<temp<<endl;
                                 memset(temp,0,sizeof temp);
                                 inserts(ch,cidianpath);
                                // cout<<"执行插入"<<endl;
                 }
                 else if(strcmp(temp,"select")==0)
                 {
                          memset(temp,0,sizeof temp);
                          selectc(cidianpath);
                          //cout<<"执行查询"<<endl;
                 }
                 else if(strcmp(temp,"update")==0)
                 {
                         memset(temp,0,sizeof temp);
                         update(cidianpath);
                 }
                 else if(strcmp(temp,"alter")==0)
                 {
                         memset(temp,0,sizeof temp);
                         alter(cidianpath);
                 }
                 else if(strcmp(temp,"delete")==0)
                 {
                         memset(temp,0,sizeof temp);
                         deletes(cidianpath);
                 }

           }

        }
           cout<<"请输入sql语句\n"<<endl;

    }

}

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值