/*
作者:my2005lb
项目代号:LiuSQL ver 1.0
*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<iostream.h>
#include<string.h>
#include<windows.h>
#include<vector>
#include<math.h>
using namespace std;
struct database
{
char cdatabasename[200];
char cpath[200];
char cauthor[50];
char ctime[19];
};
//用于表示数据库头
vector<database> databasehead;
//用于查入数据库配置信息
int insertConfigSys(struct database infor)
{
if(&infor == NULL)
{
printf("要插入的记录不能为空......../n");
return -1;
}
FILE *fp;
if((fp=fopen("configsys.dcy","ab+"))==NULL)
{
printf("读取数据库配置信息失败......../n");
return -1;
}
if(fwrite(&infor,sizeof(database),1,fp)!=1)
{
printf("插入数据库配置信息失败......../n");
return -1;
}
databasehead.push_back(infor);
fclose(fp);
return 0 ;
}
int readConfigSys()
{
FILE *fp;
if((fp=fopen("configsys.dcy","rb"))==NULL)
{
// printf("打开源文件configsys.dcy出错/n");
return -1;
}
printf("***********************************/n");
int i=1;
database buf;
while(!feof(fp))
{
if(fread(&buf,sizeof(database),1,fp))
{
// printf(" %d %s %s %s %s/n",i,buf.cauthor,buf.cdatabasename,buf.cpath,buf.ctime );
// cout<<i<<" "<<buf.name<<" "<<buf.salary<<"/n";
databasehead.push_back(buf);
}
i++;
}
// printf("共找到%d条记录/n",i-2);
// printf("***********************************/n");
fclose(fp);
return 0;
}
int createDatabase(char *databasename)
{
char currentDir[200];
GetCurrentDirectory(199,currentDir);
strcat(currentDir,"//data//");
strcat(currentDir,databasename);
if( CreateDirectory(currentDir,NULL) == 1 )
{
// printf("数据库%s创建成功 /n",databasename);
return 1 ;
}
return -1;
}
int dropDatabase(char *databasename)
{
char currentDir[200];
GetCurrentDirectory(199,currentDir);
strcat(currentDir,"//data//");
strcat(currentDir,databasename);
if(RemoveDirectory(currentDir)==1)
{
return 1 ;
}
return 0 ;
}
enum DataType{VARCHAR,LINT,LSINT,IMAGE,TEXT,LFLOAT,LDATE,LTIME,LDATETIME};
typedef struct
{
char fieldname[200];
DataType type;
bool anull;
int length;
int indextype;
}FieldList ;
//用于记录的字段列表
//
vector<FieldList> fieldhead;
int insertFieldStruct(char *tablename,FieldList infor)
{
if(&infor == NULL||tablename ==NULL)
{
printf("要插入的记录不能为空......../n");
return -1;
}
FILE *fp;
char *filename = (char *)malloc(strlen(tablename)+4);
strcpy(filename,tablename);
strcat(filename,".lts");
if((fp=fopen(filename,"ab+"))==NULL)
{
printf("配置字段信息失败......../n");
return -1;
}
if(fwrite(&infor,sizeof(FieldList),1,fp)!=1)
{
printf("插入配置字段信息失败......../n");
return -1;
}
fieldhead.push_back(infor);
fclose(fp);
return 0 ;
}
int readFieldStruct(char *tablename)
{
FILE *fp;
char *filename = (char *)malloc(strlen(tablename)+4);
strcpy(filename,tablename);
strcat(filename,".lst");
if((fp=fopen(filename,"rb"))==NULL)
{
printf("打开源文件%s出错/n",filename);
return -1;
}
printf("***********************************/n");
int i=1;
FieldList buf;
while(!feof(fp))
{
if(fread(&buf,sizeof(FieldList),1,fp))
{
printf(" %d %s %d %d %d /n",i,buf.fieldname ,buf.length,buf.anull ,buf.indextype );
// cout<<i<<" "<<buf.name<<" "<<buf.salary<<"/n";
fieldhead.push_back(buf);
}
i++;
}
printf("共找到%d条记录/n",i-2);
printf("***********************************/n");
fclose(fp);
return 0;
}
struct TableList
{
char ctablename[255];
char ctime[19];
char cauthor[50];
};
//用于保存表的列表
vector<TableList> tablehead;
int insertConfigTable(struct TableList infor)
{
if(&infor == NULL)
{
printf("要插入的记录不能为空......../n");
return -1;
}
FILE *fp;
if((fp=fopen("configtable.dcy","ab+"))==NULL)
{
printf("读取数据库配置信息失败......../n");
return -1;
}
if(fwrite(&infor,sizeof(TableList),1,fp)!=1)
{
printf("插入数据库配置信息失败......../n");
return -1;
}
tablehead.push_back(infor);
fclose(fp);
return 0 ;
}
int readConfigTable()
{
FILE *fp;
if((fp=fopen("configtable.dcy","rb"))==NULL)
{
printf("打开源文件configtable.dcy出错/n");
return -1;
}
printf("***********************************/n");
int i=1;
TableList buf;
while(!feof(fp))
{
if(fread(&buf,sizeof(TableList),1,fp))
{
printf(" %d %s %s %s/n",i,buf.cauthor,buf.ctablename,buf.ctime );
// cout<<i<<" "<<buf.name<<" "<<buf.salary<<"/n";
tablehead.push_back(buf);
}
i++;
}
printf("共找到%d条记录/n",i-2);
printf("***********************************/n");
fclose(fp);
return 0;
}
/*
用于表的创建
*/
int createTable(char *tablename,vector<FieldList> head)
{
//create three files
//then write filedinfor to XXX.lts
//
FILE *fltd,*flid,*flst;//分别表示数据文件,索引文件与结构文件
char *filename1 = (char *)malloc(strlen(tablename)+4);
char *filename2 = (char *)malloc(strlen(tablename)+4);
char *filename3 = (char *)malloc(strlen(tablename)+4);
strcpy(filename1,tablename);
strcat(filename1,".lst");
strcpy(filename2,tablename);
strcat(filename2,".lid");
strcpy(filename3,tablename);
strcat(filename3,".ltd");
if((flst=fopen(filename1,"ab+"))==NULL)
{
printf("配置字段信息失败......../n");
return -1;
}
vector<FieldList>::iterator Datalist;
for(Datalist = head.begin();Datalist!=head.end();Datalist++)
{
fwrite(Datalist,sizeof(FieldList),1,flst);
}
fclose(flst);
if((flid=fopen(filename2,"ab+"))==NULL)
{
printf("配置字段信息失败......../n");
return -1;
}
fclose(flid);
if((fltd=fopen(filename3,"ab+"))==NULL)
{
printf("配置字段信息失败......../n");
return -1;
}
fclose(fltd);
return 1;
}
/*
执行drop table命令 将三张表删除
*/
void dropTable(char *tablename)
{
char *filename1 = (char *)malloc(strlen(tablename)+4);
char *filename2 = (char *)malloc(strlen(tablename)+4);
char *filename3 = (char *)malloc(strlen(tablename)+4);
strcpy(filename1,tablename);
strcat(filename1,".lst");
strcpy(filename2,tablename);
strcat(filename2,".lid");
strcpy(filename3,tablename