数据库课程设计文档.docx

上传人:b****2 文档编号:1270218 上传时间:2022-10-19 格式:DOCX 页数:15 大小:166.64KB
下载 相关 举报
数据库课程设计文档.docx_第1页
第1页 / 共15页
数据库课程设计文档.docx_第2页
第2页 / 共15页
数据库课程设计文档.docx_第3页
第3页 / 共15页
数据库课程设计文档.docx_第4页
第4页 / 共15页
数据库课程设计文档.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

数据库课程设计文档.docx

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

数据库课程设计文档.docx

数据库课程设计文档

数据库系统原理

课程设计文档

学号:

姓名:

一、DBMS的实现方式

四张基本表,以文本文档形式存储,分别是数据字典,用户表,关系属性表,关系数据表。

数据字典用来存储关系名,以换行符进行区别,建立索引时,在相应关系名后存储索引表名,以逗号进行区别,数据操作时,先查数据字典,是否有此关系名或相应索引表名,才能继续操作。

用户表用来存储用户信息,以逗号进行区别,第零列为用户名,第一列为用户口令,第三列为用户相应权限,“0”代表后台管理者,可以查询和添加用户,“1”代表数据库管理员,可以做增,删,改,查操作,但不能添加用户,“2”代表普通用户,只能做查询操作,用户登陆时,通过对用户名跟口令的匹配,返回第三列权限值。

关系属性表用来存储关系属性名,即列名,以逗号区别。

关系数据表用来存储关系数据,行内以逗号区别,行间以换行符区别。

二、DBMS的功能介绍

(1)createtable

建立新关系,权限为1

(2)droptable

删除关系,权限为1

(3)altertable

add添加表属性,并添加相应属性数据,权限为“1”

drop删除表属性,权限为“1”

(4)insert

插入数据,以行为单位,权限为“1”

(5)delete

删除数据,以行为单位,权限为“1”

(6)update

修改数据,权限为1

(7)select

查询操作,权限为“0”,“1”,“2”都可以

(8)createindex

建立索引

(9)dropindex

删除索引

(10)createuser

添加用户,权限为“0”

三、DBMS算法实现

算法描述

 

char*bdsctq(chara[],charb)

表达式串提取,根据第二参数为‘l’或‘r’,提取表达式左部或又部串

char*ctq(chara[],intb)

关键字串提取,根据字符个数提取关键字

voiddgxty(charch1[],charc[],intb)

单关系投影,参数为:

关系属性表名,关系数据表名,投影所在列

voiddgxxz(charch[],charch1[],charch2[],charch3[],charch4[],inta1,inta2)

单关系选择,参数为:

关系数据表名,选择值1,选择值2,and或or,选择后生成表名,选择属性所在列1,所在列2

voiddgxyhxz(charch[],charch1[],charch2[],inta1)

单关系优化选择,与上述函数类似,只不过上述函数比较两列,此函数只比较一列

char*dhctq(chara[],intb)

根据逗号提取串,根据第i个逗号提取i到i+1间的串

intgxcz(charz[],chara[])

关系查找,根据关系属性表和属性名的匹配,返回此属性名所在的列数

char*gxmtq(chara[],intb)

新建模式关系名提取

voidgxxg(charp[],chara[])

关系属性修改,根据关系属性表和属性名的匹配,并将其删除,保留其它属性

char*kgctq(chara[],intb)

根据空格提取串

voidlgxlj(charch[],charch1[],charch2[],charch3[],inta1,inta2,charch4[],charch5[])

两关系连接,参数为:

连接数据表1,连接数据表2,连接后生成的属性表名,连接后生成的数据表名,连接属性在原属性表列数1,连接属性在原属性表列数2,原属性表1,原属性表2。

三关系连接时两次调用

voidlgxsylj(chara[],chara1[],chara2[],chara3[],chara4[])

两关系索引连接,参数为:

连接数据表1,连接数据表2,索引表1,索引表2,连接后生成的数据表名

char*lmtq(chara[])

列名提取,提取括号内字符,数据插入时也可用

voidsgxty(charch[],charch1[],inta,inta1,inta2)

三关系投影,参数为:

投影属性表名,投影数据表名,三个属性所在列

voidshop1(chara[])

属性表文件输出

voidshop2(chara[])

数据表文件输出

voidsjsc(charch[],charch1[],inta1)

数据删除,参数为:

数据表名,所要删除的数据值,所要删除值所在的属性列

voidsjsy(chara[],chara1[],intb1)

数据索引,参数为:

要建索引的原数据表名,索引表名,

要建索引的数据所在列

voidsjxg(charch[],charch1[],charch2[],inta1,inta2)

数据修改,参数为:

所要修改的数据表名,修改的判断属性值,要修改的值,修改的判断属性所在列,要修改的属性所在列

voidtjsxsjxg(charch[])

添加相应数据,添加属性时调用,在相应数据表里添加一列新数据,对应新属性

char*yhpp(charch[],charch1[])

用户匹配,参数为:

用户名,用户口令,匹配成功后,以字符串形式返回其相应权限

voidyhty(charch[],charch1[],inta1,inta2,inta3,charch3[],charch4[])

优化投影,参数为:

属性表名,数据表名,投影的三个属性所在列,投影后生成的属性表名,生成的数据表名

voidzdcrxg(chara[])

字典插入修改,新建关系时,修改字典内容

intzdcz(chara[])

字典查找,查找关系名是否存在,存在,返回“0”,否则返回“1”

voidzdsysc(chara1[])

字典索引删除,删除索引时,修改字典内容

voidzdsyxg(chara1[],chara2[])

字典索引修改,添加索引时,修改字典内容

voidzfsr(chara[])

字符输入,以分号为结束标志,输入有回车时,转换为空格处理,当检测到有多空格时,只保留一空格

程序流程图

附下页

 

图1.1算法流程

四、实验测试用例与结果

注:

篇幅所限,只列举一些操作用例,具体功能可运行程序测试

数据字典和三张要操作的基本表:

以user1管理员登陆:

管理员权限可进行的相应操作:

 

建表,插入数据:

修改数据:

添加属性:

删除数据:

查询,多关系,多条件的连接,选择,投影操作:

查询优化,执行结果与上述一致:

 

下页续…

建立索引,第一列为索引数据,第二列为索引域值:

实现索引上的连接,连接后的数在索引属性上据是有序的:

以后台管理员登陆,可以添加用户:

五、关键技术

注:

列举两个较关键,比较难一点的处理函数

voidsjxg(charch[],charch1[],charch2[],inta1,inta2)//数据修改

{

FILE*f1;

charb,b2[200][200],b3[50][50],b4[200],b5[200];

inti=0,j=0,k=0,n=0;

f1=fopen(ch,"r");//要修改的数据读入二维数组

b=fgetc(f1);

while(b!

=EOF)

{

while(b!

='\n')

{

b2[i][j]=b;

b=fgetc(f1);

j++;

}

b2[i][j]='\0';

i++;

j=0;

b=fgetc(f1);

}

strcpy(b2[i],"$");//加结尾符

fclose(f1);

i=0;

while(strcmp(b2[i],"$")!

=0)//判断是否到达文件末尾

{

if(strcmp(dhctq(b2[i],a1),ch1)==0)//判断条件值所在行

{

n=0;

j=0;

strcpy(b5,b2[i]);//提取条件值所在行

while(b5[j]!

='\0')//扫描所在行

{

while(b5[j]!

=',')

{

if(b5[j]=='\0')

{

j--;

break;

}

b3[n][k]=b5[j];

//将其以单个数据为单位,存入另一个二维数组,每行对应一个数据,这样方便对串处理

j++;

k++;

}

b3[n][k]='\0';

n++;

k=0;

j++;

strcpy(b3[n],"$");

strcpy(b3[a2],ch2);

//将要修改的值直接覆盖到要修改的数据位置

}

n=0;

while(strcmp(b3[n],"$")!

=0)

{

strcat(b4,b3[n]);

strcat(b4,",");

n++;

}//修改完成,把二维数组连回一维数组

strcpy(b2[i],b4);

//并将其覆盖到原数据条件值所在行,完成第一次

}

i++;//进行第二行比较,直到结束

}

f1=fopen(ch,"w");

i=0;

while(strcmp(b2[i],"$")!

=0)//将修改后的数组覆盖写回原数据文件

{

fputs(b2[i],f1);

fputc('\n',f1);

i++;

}

fclose(f1);

printf("数据已修改!

\n");

}

voidsjsy(chara[],chara1[],intb1)//数据索引

{

FILE*f1;

charb3[200][200],b,b2[200][200],b4[200];

inti=0,n=0,j=0;

f1=fopen(a,"r");

b=fgetc(f1);

while(b!

=EOF)//原数据读入内存,二维数组

{

while(b!

='\n')

{

b2[i][j]=b;

b=fgetc(f1);

j++;

}

b2[i][j]='\0';

i++;

j=0;

b=fgetc(f1);

}

strcpy(b2[i],"$");//加结尾符

fclose(f1);

f1=fopen(a1,"w+");

i=0,n=0;

while(strcmpi(b2[i],"$")!

=0)

{

strcpy(b3[i],dhctq(b2[i],b1));

//将索引值所在列的第一个索引值赋给二维数组第零行

n=i;//记录索引值所在原数据的位置

strcat(b3[i],",");

itoa(n,b4,10);//将其位置由整形转换为字符串

strcat(b3[i],b4);//将其连到索引值后面,形成索引域值

strcat(b3[i],",");

i++;//进行下一个索引值处理

}

strcpy(b3[i

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

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1