⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 create.c

📁 一个用C编写的简单的关系数据库系统
💻 C
字号:
int Create(DBF * dbf_name, char * commond)
{
	FILE * fp;/*文件指针,用于建立dbf文件*/
	int i = 0;/*循环变量*/
	int pos = 0;
	unsigned j = 0;/*循环变量*/

	commond = strtok(commond, " ");
	commond = strtok(NULL," ");
	
	if (commond == NULL)
	{
		puts("	命令格式错误");
		return ERROR;
	}

	/*读表名*/
	if (commond != NULL)
	{
		fp = fopen(commond,"rb");
		if (fp != NULL)
		{
			puts("	该表已存在");
			return ERROR;
		}
		strcpy(dbf_name->dhName,commond);
	}

	commond = strtok(NULL," ");
	/*读字段名和字段类型*/
	while (commond != NULL)
	{
		if (strlen(commond) > FIELD_NAME_LENGTH)
		{
			puts("	属性名过长!");
			return FAILED;
		}
		if (dbf_name->dhFieldCount >= MAX_FILED_COUNT) 
		{
			puts("	过多属性!");
			return FAILED;
		}
		for (i=0; i<dbf_name->dhFieldCount; i++)
		{
			if (strcmpi(dbf_name->dbf_struct[i].dhFieldName,commond) == 0) {
				puts("	存在同名属性!");
				return FAILED;
			}
		}
		strcpy(dbf_name->dbf_struct[dbf_name->dhFieldCount].dhFieldName,commond);
		/*读类型名*/
		commond = strtok(NULL, " ");
		if (commond != NULL)
		{
			if (strcmpi(commond,"INT") == 0)
				dbf_name->dbf_struct[dbf_name->dhFieldCount].dhFieldType = Int;
			else if(strcmpi(commond,"STRING") == 0)
				dbf_name->dbf_struct[dbf_name->dhFieldCount].dhFieldType = String;
			else if(strcmpi(commond,"FLOAT") == 0)
				dbf_name->dbf_struct[dbf_name->dhFieldCount].dhFieldType = Float;
			else 
			{
				printf("	%s 的类型名错误",dbf_name->dbf_struct[dbf_name->dhFieldCount].dhFieldName);
				return ERROR;
			}
		}
		else
		{
			puts("	命令格式错误,请输入类型名");
			return ERROR;
		}

		/*读数据长度*/
		if (dbf_name->dbf_struct[dbf_name->dhFieldCount].dhFieldType == Int)
		{
			dbf_name->dbf_struct[dbf_name->dhFieldCount].dhFieldLen = sizeof(int);
			dbf_name->dhRecLen += sizeof(int);
		}
		else if (dbf_name->dbf_struct[dbf_name->dhFieldCount].dhFieldType == Float)
		{
			dbf_name->dbf_struct[dbf_name->dhFieldCount].dhFieldLen = sizeof(float);
			dbf_name->dhRecLen += sizeof(float);
		}
		else 
		{
			commond = strtok(NULL, " ");
			if (commond != NULL)
			{
				for (j=0; j<strlen(commond); j++)
				{
					if (!isdigit(commond[j]))
					{
						printf("	输入错误,%s 改为int型\n",commond);
						return ERROR;
					}
				}
				dbf_name->dbf_struct[dbf_name->dhFieldCount].dhFieldLen = atoi(commond);
				dbf_name->dhRecLen += atoi(commond);
			}
			else 
			{
				puts("	命令格式错误,请输入字符串型数据长度");
				return 0;
			}
		}
		commond = strtok(NULL, " ");
		dbf_name->dbf_struct[dbf_name->dhFieldCount].dhFieldPos = pos;
		/*计算字段在记录中的偏移位置*/
		switch (dbf_name->dbf_struct[dbf_name->dhFieldCount].dhFieldType) {
		case Int :
			pos += sizeof(int);
			break;
		case String :
			pos += (int)dbf_name->dbf_struct[dbf_name->dhFieldCount].dhFieldLen;
			break;
		case Float :
			pos += sizeof(float);
			break;
		}
		dbf_name->dhFieldCount++;
	}

	fp = fopen(dbf_name->dhName,"wb");
	dbf_name->dhHandle = fileno(fp);
	fwrite(dbf_name,sizeof(DBF),1,fp);
	InitializeDbf(dbf_name);
	fclose(fp);
	return SUCCESS;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -