数据库课程设计说明书.docx

上传人:b****1 文档编号:10480657 上传时间:2023-05-26 格式:DOCX 页数:11 大小:124.01KB
下载 相关 举报
数据库课程设计说明书.docx_第1页
第1页 / 共11页
数据库课程设计说明书.docx_第2页
第2页 / 共11页
数据库课程设计说明书.docx_第3页
第3页 / 共11页
数据库课程设计说明书.docx_第4页
第4页 / 共11页
数据库课程设计说明书.docx_第5页
第5页 / 共11页
数据库课程设计说明书.docx_第6页
第6页 / 共11页
数据库课程设计说明书.docx_第7页
第7页 / 共11页
数据库课程设计说明书.docx_第8页
第8页 / 共11页
数据库课程设计说明书.docx_第9页
第9页 / 共11页
数据库课程设计说明书.docx_第10页
第10页 / 共11页
数据库课程设计说明书.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数据库课程设计说明书.docx

《数据库课程设计说明书.docx》由会员分享,可在线阅读,更多相关《数据库课程设计说明书.docx(11页珍藏版)》请在冰点文库上搜索。

数据库课程设计说明书.docx

数据库课程设计说明书

课程设计说明书

 

设计题目:

选择一种高级语言实现一个简单的DBMS_

专业:

计算机科学与技术班级:

10级2班_

设计人:

_

 

山东科技大学

2012年6月27日

课程设计任务书

学院信息科学与工程学院专业XXX班级XX级2班姓名XXX

一、课程设计题目:

(1)实现创建表和修改表

(2)插入和更新表的记录

二、课程设计主要参考资料:

(1)《数据库系统概论》(第四版)高等教育出版社

三、课程设计应解决的主要问题:

(1)实现:

CREATETABLE<表名>(<列名><数据类型>[<列完整性约束条件>][,<列名><数据类型>[<列完整性约束条件>]…][,<表完整性约束条件>])

(2)实现:

ALTERTABLE<表名>[ADD<新列名><数据类型>[<列完整性约束>]][DROP<列完整性约束名>][MODIFY<列名><数据类型>]

四、课程设计相关附件(如:

图纸、软件等):

(1)Code:

:

blocks10.05

五、任务发出日期:

2012/5/1课程设计完成日期:

2012/6/27

指导教师签字:

系主任签字:

指导教师对课程设计的评语

 

指导教师签字:

2011年月日

一、设计要求:

(1)设计实现表的物理存储结构;

(2)语句以命令行和图形化界面两种形式实现;

(3)有两个以上关系模式,关系模式要满足实体完整性和参照完整性。

二、需求分析:

(1)通过输入SQL语言,建立一个表。

包括表名、列名、数据类型、列完整性约束条件。

(2)通过输入SQL语言,对建好的表进行修改。

包括增加表的列完整性约束条件、删除表的列完整约束条件、增加列名、删除列名等。

(3)输入SQL语言,对建好的表进行插入数据,并能进行对相关数据的修改,包括增加数据,删除数据等功能。

三、设计思想:

(1)利用两个结构体,一个用来存放解析出来的约束条件,另一个用来存放属性和元组。

设计多个标记来记录不同的约束条件。

例如,用cnt1来记录属性的约束条件,如果cnt1=1,那么约束条件为PARIMARYKEY,如果cnt1=2,那么约束条件为UNIQUE,如果cnt1=3,那么约束条件为CHECK,如果cnt1=4,那么约束条件为NOTNULL。

(2)解析语句的时候,利用Ignore_Space()来忽略空格与回车,利用Is_Number()来读取数字,利用To_Lower()来转换为小写,利用Get_Word()来获取单词,利用Cmp_Word()对读取的单词与传入的单词做比较。

在通过Judge_Condition()、Judge_Type()、Judge_Between()、Judge_In()、Judge_Operator()等对约束条件中的数据类型、CHECK语句的关键词、字符进行判断。

(3)通过解析语句,区分出创建表CREATETABLE、修改表AlterTable、插入数据Insert、修改数据UPDATE.并分别调用各自的函数,进行相应的操作。

在创建表的过程中,要把表名、属性名、完整性约束等信息进行提取,存放在结构体中,在修改表的过程中,为了操作方便,直接在表的最后进行操作。

例如,添加新的属性列,直接在表的最后进行添加,删除一个属性里,直接用最后一个属性列去覆盖想要删除的属性列。

(4)程序中还包括了判错的过程,若输入有错,或者是进行的操作有错,都会有错误提示,并在相应的位置进行修改。

四、程序流程图:

五、主要源程序:

(1)创建表:

intCreate_Talbe(char*s,Table&t,char*result)

{

int&idx=t.proverty_num;

inttemp,len,i=0;

charword[20];

//提取create

if(Cmp_Word(i,s,"create")==0){strcpy(result,"errornearcreate");return0;}

//提取table

if(Cmp_Word(i,s,"table")==0){strcpy(result,"errorneartable");return0;}

Ignore_Space(i,s);Get_Word(i,s,word);

strcpy(t.table_name,word);

Ignore_Space(i,s);

if(s[i]!

='('){

strcpy(result,"errorneartable(");

return0;

}else++i;

while

(1){

//提取属性名

Ignore_Space(i,s);Get_Word(i,s,word);

len=strlen(word);

if(len==0){

strcpy(result,"error属性名为空");

return0;

}

int&idx=t.proverty_num;

strcpy(t.proverty_name[idx],word);

//属性类型intchardouble

Ignore_Space(i,s);

Get_Word(i,s,word);

To_Lower(word);

temp=Judge_Type(word);

if(temp>=Type_Num){strcpy(result,"errortype");return0;}

t.condition[idx].type=temp;

//当为字符串类型时处理字符串的约束长度char(20)

if(temp==Judge_Type("char")){

Ignore_Space(i,s);

if(s[i++]!

='('){strcpy(result,"errornearchar(");return0;}

Ignore_Space(i,s);Get_Word(i,s,word);

intflage=Is_Number(word);

if(flage==0){strcpy(result,"errorinchar()");return0;}

sscanf(word,"%d",&temp);

t.condition[idx].Len_constraint=temp;

Ignore_Space(i,s);

if(s[i++]!

=')'){strcpy(result,"errornearchar)");return0;}

}

 

//约束条件如果有的话primaryuniquechecknotnull

Ignore_Space(i,s);Get_Word(i,s,word);To_Lower(word);

temp=Judge_Condition(word);

switch(temp){

case0:

//当为primary时

Ignore_Space(i,s);Get_Word(i,s,word);To_Lower(word);

if(strcmp(word,"key")!

=0){strcpy(result,"errornearprimary");return0;}

t.condition[idx].con1=1;

break;

case1:

//当为unique时

t.condition[idx].con1=2;

break;

case2:

//当为check时

if(s[i++]!

='('){strcpy(result,"errornearcheck(");return0;}

Ignore_Space(i,s);Get_Word(i,s,word);

if(strcmp(word,t.proverty_name[idx])!

=0){strcpy(result,"errornearcheck属性名");return0;}

//判between>=<=<>=IN….

Ignore_Space(i,s);Get_Word(i,s,word);To_Lower(word);

//between

if(strcmp(word,"between")==0){

intl,r;

if(Judge_Between(l,r,i,s)==0){strcpy(result,"errorincheckbetween");return0;}

t.condition[idx].con2=8;

t.condition[idx].bl=l,t.condition[idx].br=r;

}elseif(strcmp(word,"in")==0){//in

t.condition[idx].con2=7;

if(Judge_In(t.condition[idx].type,t.condition[idx].cnt,t.condition[idx].conin,i,s)==0){strcpy(result,"errorincheckin");return0;}

}elseif(Judge_Operator(t.condition[idx].con2,t.condition[idx].bound,i,s)==0)

{strcpy(result,"errorincheckoperator");return0;

}

Ignore_Space(i,s);

if(s[i++]!

=')'){strcpy(result,"errornearcheck)");return0;}

break;

case3:

//not

Ignore_Space(i,s);Get_Word(i,s,word);To_Lower(word);

if(strcmp(word,"null")!

=0){strcpy(result,"errornearnot");return0;}

t.condition[idx].con1=4;

break;

case4:

strcpy(result,"errornear约束条件");

return0;

break;

case5:

break;

}

Ignore_Space(i,s);

if(s[i]==','){i++;idx++;continue;}//,代表当前的属性读取完毕

elseif(s[i]==')'){//Judge是否为最后一条属性读入语句结束

i++;

Ignore_Space(i,s);

if(s[i]==';'){

idx++;

strcpy(result,"createsucess");

return1;

}else{

strcpy(result,"errorafterchar");

return0;

}

}else{

strcpy(result,"errornear,");

return0;

}

}

}

六、运行结果:

(1)创建表:

(2)修改表:

(3)插入数据:

(4)修改数据:

 

(5)创建第二张表,并进行相关操作:

(6)创建第三表,并进行相关操作:

(7)创建的三张表的最终结果:

七、参考资料:

(1)数据库系统概论(第四版)高等教育出版社

(2)SQL语言入门

八、总结:

(1)由于使用语言的限制,造成只能实现用命令行,而没有实现图形化界面的形式进行展示。

(2)在代码中实现了对主码、外码、列完整性约束条件、表完整约束条件的读取与存储,并且可是实现建立多个表的功能。

但是,在有两个以上的关系模式时,关系模式无法满足实体完整性和参照完整性。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2