当前位置:文档之家› 创建表,对表的修改--数据库

创建表,对表的修改--数据库

课程设计说明书设计题目数据库课程设计专业计算机科学与技术班级设计人学号山东科技大学2012年04月07日摘要本次设计是使用一种高级语言(C、C++、JA V A等)进行开发一中类似于DBMS的程序,主要功能包括表的建立、添加、删除、修改属性信息等基本操作。

此文档为此编写。

通过对题目的分析我使用了C语言进行编写。

将程序设计成以命令提示方式进行操作的不算很人性化的界面。

但具有操作提示(另附txt)。

此次设计包含了自己定义的几个头文件、小程序程序,利用函数调用实现主函数的实现。

自己编写了一个相当于DBMS的程序,经过不断改善能够很好的运行。

由于知识水平有限参考了前人的一些方法、技巧。

特此说明。

目录1.课程题目 (7)2.设计目的 (7)3.需求分析 (7)a)创建一张表 (7)b)对表的修改 (7)c)数据类型的定义 (7)4.实现方式 (8)a)算法分析 (8)b)主要函数 (9)c)程序流程图 (9)d)详细设计 (11)5.程序实现 (21)6.总结 (26)7.附录 (27)正文一.课程题目用高级语言设计一个简单的DBMS二.设计目的设计一个小型的的DBMS实现对表的添加修改等属性操作,加深对数据库知识的理解。

三.需求分析1.创建一张表。

(1).要求:必须用到关键字“create table”;常用的符号“()”、“,”“;”;表的名字可以任意定义;定义最基本的权限:unique、not null、default、check,如果列中有性别一列则需要性别只能选择“男”、“女”;列不能重名;数据类型只能是已经定义的类型;约束只能是已经定义的约束;当遇到“;”时表的建立完成。

(2).可能的错误:有两列或多列重名;定义的类型和约束不存、关键字错误。

2.表的修改(1).加一行、列(Insert 、Alter table).所添加的与原有的不能重名;修改表中已存在一项;删除表中的一行列。

(2).可能错误的操作:添加的表名或列已存在;字符输入错误。

3.数据类型的定义常见的数据类型char,int ,short,long等四. 实现方式1.算法分析编写一个简单的DBMS,能从文本文件中识别出各种命令语句:create ,select ,delete ,insert。

实现一个已固定属性的关系表的建立,元组记录的插入,查找,修改,浏览,删除操作。

整体采用链表结构,节点由结构体构成,结构体内包含关系的各种属性,通过对链表的各种操作来实现对关系表的各种操作,然后将所建的表以文本文档的形式存储在同一2.主要成员函数int Sql_CREATE()//创建表int Sql_INSERT()//插入表int Sql_ALTER()//修改元组属性int Sql_SELECT()//查找元组int Sql_UPDATE()//查询记录int Sql_DELETE()//删除表3程序流程图图一4.详细设计(1). 关于自定义的两个头文件在程序中自定义了sql.h与dbf.h两个头文件,分别实现对函数中所用到的主函数进行定义与定义结构体变量、全局变量、宏定义等一些基本操作。

#ifndef dbf_H#define dbf_H#include <stdio.h>#include <stdlib.h>#include <string.h>//------------宏定义--------------------------------------------------------// #define GET_YEAR 0#define GET_MONTH 1#define GET_DAY 2#define FOX_VERISON_INFO 262#define WIN_32#define MAX_FIELD_COUNTS 40//字段类型#define FIELD_CHAR_TYPE 0x43#define FIELD_DATE_TYPE 0x44#define FIELD_FLOAT_TYPE 0x46#define FIELD_LOG_TYPE 0x4C#define FIELD_MEMO_TYPE 0x4D#define FIELD_NUMIC_TYPE 0x4E#define FIELD_INT_TYPE 0x49//条件查询#define CON_SMALL 0#define CON_EQUAL 1#define CON_LARGE 2//排序#define CON_SORT_INCREASE 0#define CON_SORT_DECREASE 1#define TRUE 1#define FALSE 0#define BOOL int//文件句柄/////////////////////////Struct definition////////////////////////////// //文件头结构体定义struct _DbfHead{char dbFlag;char year;char month;char day;int recCounts;short firstRecAddr;short recLen;char undo[20];};typedef struct _DbfHead DbfHead, *pDbfHead; //字段描述结构体定义struct _FieldDcp{char fieldName[10];char undo1;char fieldType;short offset;char undo2[2];char fieldLen;char numDecis;char undo3[14];};typedef struct _FieldDcp FieldDcp, *pFieldDcp; //字段数据结构体定义struct _DbfField{char *fieldData;char fieldName[10];char fieldType;char fieldLen;char fieldDcis;short offset;};typedef struct _DbfField DbfField, *pDbfField;//记录结构体定义struct _DbfRec{char delFlag;DbfField field[MAX_FIELD_COUNTS];int realCounts;};typedef struct _DbfRec DbfRec, *pDbfRec;//dbf文件句柄定义struct _DbfHand{char filename[50];DbfHead header;DbfRec rec;long curRecNo;long curFpAddr;FILE *fd;};typedef struct _DbfHand DbfHand, *pDbfHand;//创建DBF文件BOOL GetNum(pDbfHand hand, char*name);pDbfHand CreateDbf(char *filename, DbfRec rec);//增加字段pDbfHand AddField(pDbfHand hand, char*name,char tpye,intlen,int dec);//修改字段属性pDbfHand ModifyField(pDbfHand hand, char*name, char tpye,int len,int dec);//修改记录BOOL UpdateRec(pDbfHand hand, char *str, int fieldId,pDbfRec rec1);//打开DBF文件pDbfHand OpenDbf(char *filename);//关闭DBF文件BOOL CloseDbf(pDbfHand hand);//删除DBF文件BOOL RemoveDbf(pDbfHand hand);//是否第一条纪录BOOL IsTopRec(pDbfHand hand);//是否最后一条纪录BOOL IsBottomRec(pDbfHand hand);//文件操作到第一条记录处BOOL GotoTop(pDbfHand hand);//文件操作到最后一条记录处BOOL GotoBottom(pDbfHand hand);//到指定的纪录BOOL GotoRec(pDbfHand hand, long recNo);//下一条BOOL GoNextRec(pDbfHand hand);//上一条BOOL GoPrevRec(pDbfHand hand);//聚集函数double JuJi(pDbfHand hand,int flag,int fieldid);//在文件尾部增加一条纪录pDbfHand AddRec(pDbfHand hand, pDbfRec record);//在当前位置插入一条纪录pDbfHand InsertRec(pDbfHand hand, pDbfRec record); //删除当前纪录pDbfHand DelCurRec(pDbfHand hand);//删除指定的记录BOOL DeleteRec(pDbfHand hand, char *str, int fieldId) ;//把表中的所有的记录内容清掉pDbfHand TurnateRec(pDbfHand hand);//修改当前纪录BOOL ModifyRec(pDbfHand handle, pDbfRec record); //得到当前纪录pDbfRec GetCurRec(pDbfHand handle);BOOL GetCurRec1(pDbfHand hand,pDbfRec rec);//得到当前纪录的第fieldId个子段pDbfField GetCurField(pDbfHand handle, pDbfRec rec, int fieldId);//pDbfField GetFiledByName(pDbfHand handle,pDbfRec rec,char *filedName);//long GetRecordNO(pDbfHand hand);BOOL SetFiledByName(pDbfHand handle,pDbfRec rec,char *filedName,char* data,int len);//得到表中现有记录条数long GetRecCounts(pDbfHand handle);//查找一条纪录pDbfRec FindRec(pDbfHand handle, char *str, int Id);//关键字查询pDbfRec KeySearch(pDbfHand hand, char *str);//条件查询pDbfRec ConSearch(pDbfHand hand, char *strContent, int fieldIndex, int conditionID);//对表中一个字段的内容排序pDbfHand SortDbf(pDbfHand hand, int fieldId, int sortCon);char* UCase(char *str);//得到当前时间char GetDate(int getMode);//得到记录长度short GetRecLen(pDbfRec rec);//文件头长度short GetHeadLen(pDbfRec rec);//新建文件头pDbfHand NewDbfHead(pDbfHand hand, pDbfRec rec);//更新文件头pDbfHand UpdateHead(pDbfHand hand);//写字段描述部分pDbfHand WrFieldDcp(pDbfHand hand, pDbfRec rec);//写文件头结束标志void WrtFileEnd(pDbfHand hand);//读文件头信息pDbfHand ReadDbfHead(pDbfHand hand);//得到字段个数int GetFieldCount(pDbfHand hand);//读字段描述信息pDbfHand ReadFieldDcp(pDbfHand hand);//保存内容为日期时,格式华char *SaveDate( char *str);//读日期时,格式化char *ReadDbfDate(char *str);//去掉字符串的后面空格char *DsdStrEndSpace(char *str, int size);//在当前位置写一条纪录,覆盖原有内容BOOL WriteRec(pDbfHand hand, pDbfRec record);(2). Sql.c在这个.C文件中包含了几乎全部的主要操作函数。

相关主题