数据库系统课程设计.docx
《数据库系统课程设计.docx》由会员分享,可在线阅读,更多相关《数据库系统课程设计.docx(14页珍藏版)》请在冰豆网上搜索。
数据库系统课程设计
课程设计说明书
设计题目:
数据库课程设计
专业:
班级:
设计人:
山东科技大学
2013年06月16日
山东科技大学
课程设计任务书
软件工程专业 2011级2班
一、课程设计题目:
数据库系统课程设计
二、设计原始资料:
数据库系统概论
设计应解决下列各主要问题:
选择一种高级语言实现下列语句的功能。
CREATETABLE<表名> (<列名><数据类型>[<列完整性约束条件>][,<列名><数据类型>[<列完整性约束条件>]…][,<表完整性约束条件>])
ALTERTABLE<表名>[ADD<新列名><数据类型>[<列完整性约束>]][DROP<列完整性约束名>][MODIFY<列名><数据类型>]
要求
(1)能够以命令方式执行;
(2)能够以程序方式执行;
(3)提供课程设计报告。
三、设计说明书应有下列图纸:
1.数据流程图
2.功能结构图
3程序流程图
五、命题发出日期:
2013年03月27日 设计应完成日期:
2013年06月16日
设计指导教师(签章):
系主任(签章):
指导教师对课程的评语
指导教师(签章):
年 月 日
摘要
本次设计是使用一种高级语言(C、C++、JAVA等)进行开发一中类似于DBMS的程序,主要实现create建表语句和alter修改表语句的功能。
通过对题目的理解我选择了C语言作为开发语言,整体采用链表结构,结点由结构体构成,结构体内包含关系的各种属性,通过对链表的各种操作,再编写多个具有不同的功能函数来辅助主函数实现建立表和修改表的功能。
本程序包含了对时间、字段类型等的宏定义,对文件头结构体的定义,对字段描述结构体的定义,对字段数据结构体的定义,记录结构体的定义,dbf文件句柄的定义,对约束条件的定义等。
这些定义用于分析结构,使得本程序的结构比较清晰。
此外,本程序还包含了多个用于实现小功能的子函数,主要是关于.dbf文件打开、创建、添加、修改等的函数,读取SQL语句并进行分割的函数,实现建表、修改表功能的函数,以及显示表信息的函数。
本程序涉及文件操作,主要是向文件中写入数据,读取文件中的数据,修改文件数据,删除文件数据等操作。
文件操作有助于开发者较为方便的实现本程序等的功能。
关键词:
create建表语句;alter修改表语句;显示表;
目录
1设计题目…………………………………………………1
1.1所选题目…………………………………………………1
1.2题目要求…………………………………………………1
2需求分析………………………………………………………2
2.1题目分析…………………………………………………2
2.2功能需求分析……………………………………………2
2.3数据流程分析……………………………………………4
3设计………………………………………………………………5
3.1设计思想…………………………………………………5
3.2整体设计……………………………………………5
3.3详细设计…………………………………………………5
4实现………………………………………………………………8
4.1以命令方式运行的实现过程………………………………8
4.2以程序方式运行的实现过程……………………………10
5总结……………………………………………………13
参考文献………………………………………………15
1设计题目
1.1所选题目
选择一种高级语言实现下列语句的功能:
CREATETABLE<表名> (<列名><数据类型>[<列完整性约束条件>][,<列名><数据类型>[<列完整性约束条件>]…][,<表完整性约束条件>])
ALTERTABLE<表名>[ADD<新列名><数据类型>[<列完整性约束>]][DROP<列完整性约束名>][MODIFY<列名><数据类型>]
1.2设计要求
(1)能够以命令方式执行;
(2)能够以程序方式执行;
(3)提供课程设计报告。
2需求分析
2.1题目分析
选择C语言编写程序,实现CREATE和ALTER语句的功能。
2.1.1表的基本信息
表的路径为:
C:
\数据库:
\table.dbf
建立的表名为:
Student
建立的表的列:
用SNO表示学号,数据类型为int;用SNAME表示姓名,数据类型为char(10);用SAGE表示年龄数据类型为int;用SDEPT表示专业,数据类型为char(20);用COURSE表示课程名,数据类型为char(20);用表示GRADE成绩,数据类型为int。
其中,SNO为主键,SNAME取唯一值。
修改表的表名:
Student
修改表的列:
列名SNAME改为NAME,列SAGE的数据类型改为short,增加GRADE取唯一值,删除列SDEPT。
2.1.2实现要求
以命令方式执行就是运行程序,直接输入一条SQL的CREATE或ALTER语句,识别语句内容并实现其功能。
以程序方式执行就是打开一个SQL程序文件,从文件中读取一条完整的SQL的CREATE或ALTER语句,识别语句内容并实现其功能。
2.2功能需求分析
程序从命令输入即从键盘键入或从程序文件中读取一条SQL语句,将其中的大写字母转换为小写字母并将其进行分割得到几个字符串,识别出SQL关键字,根据关键字选择建表操作还是修改表操作;建表操作,继续识别建表的表名、列名、列数据类型、列完整性约束,根据这些信息建立一个表并将建好的表显示出来;修改表操作则就继续识别是增加列操作并识别要增加的列名、列数据类型、列完整性约束;还是删除列操作并识别要删除的列名并删除;还是修改列数据类型等操作,根据操作修改表,结果显示出来。
图2.1为流程图,具体的操作过程为首先识别第一个字符串是否是”create”,若是则判断下一个字符串是否是’’table”,若是则将下一个字符串作为表名,识别下一个字符串作为列名,并识别其数据类型、完整性约束,直到结束为止;若第一个字符串是”alter”,则识别下一个字符是否是’’table”,若是则将下一个字符串作为表名,识别下一步操作是”add”、”drop”、”altercolumn”,在具体识别需要的信息,根据信息修改表。
图2.1流程图
2.3数据流程分析
图2.2为数据流程分析图。
程序从命令输入即用键盘键入的或从程序文件中读入的SQL语句中,提取出一个字符串,将字符串中的大写字母转换为小写字母并进行分割,再从字符串中识别出SQL的关键字create或alter,再识别出表名、列名、列数据类型、列完整性约束等信息,其次根据表的信息建立表或修改表,最后显示结果。
图2.2数据流程分析图
3设计
3.1设计思想
通过读取SQL语句,建立一个”.dbf”的文件来储存表。
整体采用链表结构,结点由结构体构成,结构体内包含关系的各种属性,通过对链表的各种操作,再编写多个具有不同的功能函数来辅助主函数实现建立表和修改表的功能。
3.2整体设计
首先从键盘键入或从程序文件中读入一条SQL语句,然后将获取的SQL语句中的大写字母转换为小写字母并将其分割成多个字符串,将字段结构和约束条件定义为结构体,通过逐个获取的单个单词识别需要的信息,根据获取的信息建立表或修改表。
图3.1功能结构图
3.3详细设计
3.3.1结构定义
在程序中定义了多个结构体变量、全局变量、宏定义等。
分别是对时间、字段类型等的宏定义,对文件头结构体的定义,对字段描述结构体的定义,对字段数据结构体的定义,记录结构体的定义,dbf文件句柄的定义,对约束条件的定义等。
3.3.2基本函数说明
整个系统由一个主函数来实现,通过调用其他函数实现功能,主要调用Read、Read1、CREATE和ALTER四个函数。
Read函数用于读取通过键盘键入的SQL语句将其中的大写字母转换成小写字母并将语句分解多个关键字。
Read1函数则用于读取从程序文件中读入的SQl语句,将其中的大写字母转换成小写字母并将语句分解多个关键字。
Create函数实现建立一个表的功能,该函数将已分解的SQL关键字进行比较,判断SQL语句是否正确并提取建表所需要的信息,并将建表信息用结构体储存最终写入文件中,通过CreateDbf函数在C盘数据库文件夹里建立table.dbf文件。
Alter函数实现修改表的功能,包括增加一条属性、修改属性类型、删除一条属性三方面的操作,该函数将已分解的SQL关键字进行比较,判断SQL语句是否正确并提取建表所需要的信息,如果是增加一条属性操作,则将新增加的属性信息储存在结构体中,通过AddField函数将新增加的内容写入.dbf文件的尾部;如果是修改属性类型操作,则打开.dbf文件找到要修改的属性,每一条记录有一个编号,然后通过调用GetFieldNum函数查询到要修改的属性的编号,然后通过AlterField函数进行修改,最后将修改后的内容写入.dbf文件;如果是删除属性操作,则打开.dbf文件找到要删除的属性,通过调用GetFieldNum函数查询到要删除的属性的编号,然后通过DropField函数将此属性删除。
最后OutPut函数实现显示表的功能,将建立好和修改好的表显示在屏幕上。
CreateDbf函数通过调用NewDbfHead函数建立.dbf的文件头,WriteFieldDicsribe函数进行写字段描述,WriteFieldEnd函数标志写文件头结束。
AddField函数、AlterField函数则通过GetCurRecord函数得到当前记录,再调用AddRec函数插入一条记录,然后通过GoNextRecord函数转到下一条记录。
修改记录就是将修改好的全部记录重新再插入一次。
DropField函数主要是将要删除记录后面的记录提前一个记录的位置。
4实现
4.1以命令方式运行的实现过程
4.2以程序方式运行的实现过程
5总结
这次的数据库课程设计花费了我几个周的时间,开始的时候只是以为是要建立一个表并且修改它,但是后来听老师讲解后才知道,是要建立一个.dbf的文件,一开始我还不知道.dbf文件的作用,后来才慢慢的知道,它是dBase和FoxPro所使用的数据库格式,由于之前学习过C语言,对C语言也比较了解,所以我选择C语言来进行课程设计。
建表时,我采用了DBF的相关知识,主要针对DBF的文件头,句柄,文件体的相关内容进行了学习;接下来就是读取一条SQL语句了,可以直接通过键盘键入,也可以从程序文件中读入,这一条语句我将其看做是一个字符串,然后就是将这一条语句进行分解并将大写字母转换为小写字母,得到所需要的内容,这一部分比较简单,接着就是将分解后的信息写入文件中,在这里我将建表所需的信息写入.dbf文件中;对于表的修改,增加属性时还比较简单,就是将新增加的内容写入.dbf文件中,而对于修改属性来说,就需要找到符合条件的记录,然后进行修改,这一方面的设计过程也遇到了很多麻烦,很多时候调试一个错误都耗费了半天的时间,不过最终我还是实现了这方面的功能;我耗时比较多的地方是删除表操作,我原以为删除属性,只要把这一条属性置空就可以了,可是没想到老是实现不了,最后,我就把要删除的记录后面的记录提前了一个,就是用下一条记录来代替这一条记录,可是还有一个问题是在删除最后一条记录时老是出错,最后我将每一条记录编号,然后按号删除,这样就实现了删除属性的功能了。
以程序方式运行,是在以命令运行的基础上,从程序文件中读取一条SQL语句,然后后面的实现过程与以命令方式运行相同,这里主要是对文件操作要很熟悉,尤其是在读取文件时指针的位置,位置不同读取的SQL语句也就不同,主要是使用了fseek函数和ftell函数。
通过这次数据库课程设计,不仅让我更加的了解C语言,更让我学到了书本上学不到的东西,虽然整个过程中困难重重,但是我还是完成了这次的数据库课程设计,学会如何分析设计算法,更锻炼了写文档的能力。
因此,这次的课程设计我受益良多。
参考文献
1.程序设计基础——基于C语言孙承爱赵卫东主编科学出版社
2.数据库系统概论(第4版)王珊萨师煊主编高等教育出版社
3.VisualBasic数据库应用蒋金丹主编科学出版社
4.操作dbf文件的C/C++程序CSDN网站