《创建表,对表的修改--数据库.doc》由会员分享,可在线阅读,更多相关《创建表,对表的修改--数据库.doc(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、课 程 设 计 说 明 书 设计题目 数据库课程设计 专 业 计算机科学与技术 班级 设计人 学号 山 东 科 技 大 学2012年04月07日山 东 科 技 大 学课 程 设 计 任 务 书 计算机 专业 5 班 马国庆一、 课程设计题目:数据库课程设计二、 设计原始资料:数据库系统概论 ,c语言程序设计,数据结构三、 设计应解决下列各主要问题: 1. CREAT TABLE ()2. ALTER TABLEADDDROPMODIFY。 3. 要求:能够以命令方式执行;能够以程序方式执行;提供课程设计报告 四、 设计说明书应附有下列图纸:图一五、命题发出日期:2012-04-07设计应完成日
2、期:2012-06-05 设计指导教师(签章): 系主任(签章):指导教师对课程的评语指导教师(签章):年月日 摘要 本次设计是使用一种高级语言(C、C+、JAVA等)进行开发一中类似于DBMS的程序,主要功能包括表的建立、添加、删除、修改属性信息等基本操作。此文档为此编写。 通过对题目的分析我使用了C语言进行编写。将程序设计成以命令提示方式进行操作的不算很人性化的界面。但具有操作提示(另附txt)。 此次设计包含了自己定义的几个头文件、小程序程序,利用函数调用实现主函数的实现。自己编写了一个相当于DBMS的程序,经过不断改善能够很好的运行。 由于知识水平有限参考了前人的一些方法、技巧。特此说
3、明。 目录1. 课程题目.72. 设计目的.73. 需求分析.7a) 创建一张表.7b) 对表的修改.7c) 数据类型的定义.74. 实现方式.8a) 算法分析.8b) 主要函数.9c) 程序流程图.9d) 详细设计.115. 程序实现.216. 总结.267. 附录.27正文一. 课程题目 用高级语言设计一个简单的DBMS二. 设计目的 设计一个小型的的DBMS实现对表的添加修改等属性操作,加深对数据库知识的理解。三. 需求分析 1.创建一张表。(1).要求:必须用到关键字“create table”;常用的符号“()”、“,”“;”;表的名字可以任意定义;定义最基本的权限:unique、n
4、ot null、default、check,如果列中有性别一列则需要性别只能选择“男”、“女”;列不能重名;数据类型只能是已经定义的类型;约束只能是已经定义的约束;当遇到“;”时表的建立完成。(2).可能的错误:有两列或多列重名;定义的类型和约束不存、关键字错误。 2.表的修改 (1).加一行、列(Insert 、Alter table).所添加的与原有的不能重名;修改表中已存在一项;删除表中的一行列。(2).可能错误的操作:添加的表名或列已存在;字符输入错误。 3.数据类型的定义 常见的数据类型 char,int ,short,long等四. 实现方式1.算法分析 编写一个简单的DBMS,能
5、从文本文件中识别出各种命令语句:create ,select ,delete ,insert。实现一个已固定属性的关系表的建立,元组记录的插入,查找,修改,浏览,删除操作。整体采用链表结构,节点由结构体构成,结构体内包含关系的各种属性,通过对链表的各种操作来实现对关系表的各种操作,然后将所建的表以文本文档的形式存储在同一 2.主要成员函数 int Sql_CREATE()/创建表 int Sql_INSERT()/插入表 int Sql_ALTER()/修改元组属性 int Sql_SELECT()/查找元组 int Sql_UPDATE()/查询记录 int Sql_DELETE()/删除表
6、3程序流程图 开始选择操作新建关系表修改信息浏览记录修改记录退出程序是否继续操作y/n退出结束 图一 4.详细设计 (1). 关于自定义的两个头文件 在程序中自定义了sql.h与dbf.h两个头文件,分别实现对函数中所用到的主函数进行定义与定义结构体变量、全局变量、宏定义等一些基本操作。#ifndef dbf_H #define dbf_H #include #include #include /-宏定义-/ #define GET_YEAR 0 #define GET_MONTH 1 #define GET_DAY 2 #define FOX_VERISON_INFO 262 #define
7、 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 CO
8、N_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 undo20; ; typedef struct _DbfH
9、ead DbfHead, *pDbfHead; /字段描述结构体定义 struct _FieldDcp char fieldName10; char undo1; char fieldType; short offset; char undo22; char fieldLen; char numDecis; char undo314; ; typedef struct _FieldDcp FieldDcp, *pFieldDcp; /字段数据结构体定义 struct _DbfField char *fieldData; char fieldName10; char fieldType; cha
10、r fieldLen; char fieldDcis; short offset; ; typedef struct _DbfField DbfField, *pDbfField; /记录结构体定义 struct _DbfRec char delFlag; DbfField fieldMAX_FIELD_COUNTS; int realCounts; ; typedef struct _DbfRec DbfRec, *pDbfRec; /dbf文件句柄定义 struct _DbfHand char filename50; DbfHead header; DbfRec rec; long cur
11、RecNo; 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,int len,int dec); /修改字段属性 pDbfHand ModifyField(pDbfHand hand, char*na
12、me, 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
13、 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(p
14、DbfHand 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
15、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 SetF
16、iledByName(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 fi
17、eldIndex, 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); /更新文件头 p
18、DbfHand 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( c
19、har *str); /读日期时,格式化 char *ReadDbfDate(char *str); /去掉字符串的后面空格 char *DsdStrEndSpace(char *str, int size); /在当前位置写一条纪录,覆盖原有内容 BOOL WriteRec(pDbfHand hand, pDbfRec record); (2). Sql.c 在这个.C文件中包含了几乎全部的主要操作函数。1).void ShowBeginning();/程序运行的时候显示一个小界面2).int store();/对函数的输入3).int Sql_CREATE();/利用二维数组对各属性的类型
20、进行限制;利用memset、malloc等函数对所有属性、指针进行初始化操作;4).int Sql_INSERT();/利用数组与FOR函数循环逐一的向表中添加函数5).int Sql_DELETE();/删除表,也是利用FOR循环将所有属性制空,中间包含许多约束条件。6).int Sql_ALTER();/定义fp指针,对所需要的操作进行查找,然后对所对应的模块进行修改7).int Sql_SELECT();/可以对单表、双表进行操作8).int Sql_UPDATE();9).void help();/利用while函数人性化操作,帮助用户刚更好的运行10).int OutPut(char
21、 *t_name); (3).dbf.c 包含许多子函数 char GetDate(int getMode) /功 能: 新建文件/输 入: 句柄, 纪录/输 出: OK,句柄; Error,NULL BOOL WriteRec(pDbfHand hand, pDbfRec record)/ /功 能: 在当前位置写一条纪录,覆盖原有内容/输 入: 含有日期的字符串/输 出: OK,句柄; Error, NULL.char *SaveDate( char *str) /功 能: 保存内容为日期时,格式华/输 入: 含有日期的字符串/输 出: OK,格式华的字符串; Error, NULL. p
22、DbfHand ReadFieldDcp(pDbfHand hand) /功 能: 读字段描述信息/输 入: 句柄/输 出: OK,NULL; Error, NULL. long GetRecordNO(pDbfHand hand) /功 能: 得到当前的记录号/输 入: 句柄/输 出: OK,NULL; Error, NULL pDbfHand UpdateHead(pDbfHand hand) /功 能: 更新文件头/输 入: 句柄/输 出: OK,句柄; Error,NULLpDbfHand WrFieldDcp(pDbfHand hand, pDbfRec rec) /功 能: 写字段
23、描述部分/输 入: 句柄,纪录结构体指针/输 出: OK,句柄; Error,NULL.void WrtFileEnd(pDbfHand hand) /功 能: 写文件头结束标志/输 入: 句柄,纪录结构体指针/输 出: 无pDbfHand ReadDbfHead(pDbfHand hand) /功 能: 读文件头信息/输 入: 句柄,纪录结构体指针/输 出: OK,句柄; Error,NULL.int GetFieldCount(pDbfHand hand /功 能: 得到字段个数/输 入: 句柄/输 出: OK,字段个数; Error,-1.)char *DsdStrEndSpace(ch
24、ar *str, int size) /功 能: 去掉字符串的后面空格/输 入: 含有日期的字符串/输 出: OK,格式华的字符串; Error, NULL.五.程序实现 图二:刚进入界面 图三:输入h;查看使用说明 图四:此时为空表 图五:创建表(age) 图六:插入数据(王昌帅19的 图九:视线聚焦运算 图十:聚焦成绩小于100为95六总结 这次的课程设计做起来困难重重,深刻体会到做一个软件,里面需要的很多知识我们没有接触过,去图书馆找书、问老师的时候发现,我们学的仅仅是皮毛,还有很多东西需要我们去发掘,就算是借一本书看完它,我们还是会发现还有很多知识没有吃透,这需要我们不断的实践,不断地
25、自学习,不断地发现问题去思考问题。从需求分析阶段不断地搜索资料,想充分了解自己所做的课题在客户或者公司中的需求,画数据流图等等软件设计流程做起来很生疏,翻阅课本,总算整了一个像样点的需求分析,但是也不知道是不是正确,根据数据流图,不断修改需求,经过不断地测试,不断地改进,其中还是发下了不少问题,第一次做这些工作,没有任何经验,甚至无从下手,还是很谢谢老师和同学的帮忙,从中也学到了一些代码的写法,为什么要这样写,通过和同学的讨论,找到一些书本上没有的方法,如何数据绑定等等,怎样从数据库中将数据提取出来放到一个文本框或者标签内,这些东西是组成界面的东西,虽然小,但是可以体现整个软件的水平,其实并不
26、需要建多少数据库的表,写多少复杂的存储过程,是不是用了数据库函数,触发器等等,但是至少要弄明白这些东西如果操作,清晰思路才能将功能分清晰。经过一段时间的学习与实践,个人日程管理系统基本上开发好了。该系统具备了:添加、修改、删除、浏览、查询信息的功能。作为一个简单的dbms,本系统所提供的功能的确太少了一些,仅仅只实现了一些基本的功能,有很多地方还有待扩展和改良。人如果没有自信,没有目标,没有信心就不可能把事情做好,当其他人都在迷茫的时候,自己一定要坚信目标,大学毕业出去即是面临找工作,从学习这个专业,到以后做这方面的工作都需要不断地去学习去实践,这次实践可以给我们敲一个警钟,我们面临毕业,面临
27、择业,需要这些实践经验,在困难面前要勇于尝试,这是这次课程设计给我的最大感想。七.附录创建:大小写:CREATE table student( sno char(15) primary key, sname char(20) unique, sage int check(sage 18), ssex char(10), sdept char(20) not null);CREATE tAble student( sno char(15) primary key, sname char(20) unique, sage int check(sage between 20 and 30), sse
28、x char(10), sdept char(20) not null);create table student( sno char(15) primary key, sname char(20) unique, sage int, ssex char(10), sdept char(20) not null);create table sc( sno char(15) not null, cno char(15) not null, cname char(20) not null, grade int);插入记录:insert into student values (,王昌帅,19 ,男
29、,IS);yinsert into student values (,司吉峰,21 ,男,IS);yinsert into student values (,王东升,20 ,男,IS);yinsert into student values (,王松松,21 ,男,IS);yinsert into student values (,刘丽婷,20 ,女,IS);yinsert into student values (,宋文杰,21 ,男,IS);yinsert into student values (,孙建鹏,20 ,男,WL);yinsert into student values (,谷
30、飞飞,20 ,女,WL);yinsert into student values (,王昌帅,17 ,男,IS);yinsert into sc values (,1,操作系统,95);yinsert into sc values (,2,数据结构,96);yinsert into sc values (,3,数据库,120);yinsert into sc values (,4,组成原理,105);yinsert into sc values (,1,操作系统,95);yinsert into sc values (,1,操作系统,100);yinsert into sc values (,
31、5,软件工程,100);yinsert into sc values (,1,操作系统,100);y修改字段属性:ALTER TABLE student DROP Sname;alter table student modify Sname char(15);alter table student add hobby char(30);更新记录内容:update student set Sage = 67 where Sno = ;update student set Sdept = XD where Sname = 王昌帅;update student set Sname = 无名氏 whe
32、re Sdept = WL ;update student set Sno = where Sname = 王东升;update sc set grade = 96 where Sno = ;update sc set cno = 2 where cname = 操作系统;查找记录并输出:select *from student;select Sno,Snamefrom student;select Sno,Sname,Sdept,Sage Ssexfrom studentwhere sage 19 and Sdept = IS;select *from studentwhere sage =
33、 20 and sno = ;select *from studentwhere sno = and sage 20 ;select Sno,Sname,Sagefrom studentwhere sage 22order by sage asc; 有内部排序和外部排序 系统自动调用select Sno,Sname,Sagefrom studentwhere sage 22order by sage desc;select Sno,Sname,Sdept,Sage Ssexfrom studentwhere sage 21 and sno = ;select student.sno,sname
34、,sc.gradefrom student,scwhere sc.sno = student.snoorder by sc.grade desc;select student.sno,sage,gradefrom sc,studentwhere sc.sno = student.sno and student.sdept = ISorder by sc.grade desc;select student.*from sc,studentwhere sc.sno = student.sno and student.sdept = ISorder by sc.grade desc;select s
35、tudent.sno,Sname,Sage,Gradefrom sc,studentwhere student.sno = sc.sno and student.sage 21order by student.sage desc;实现聚集函数:select count(grade)from scwhere grade 100;select sum(grade)from scwhere grade 100;select avg(grade)from scwhere grade 100;select max(grade)from scwhere grade 100;1select min(grade)from scwhere grade 100;删除指定记录:DELETE FROM student where Sname = 王昌帅;DELETE FROM student where Sage = 20 ;DELETE FROM student where Sno = ;DELETE FROM student;