您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > 数据库课程设计报告..
1课程设计说明书课程名称:数据库系统课程设计专业:班级:设计人:学号:山东科技大学201年7月24日2山东科技大学课程设计任务书一、课程设计题目:数据库课程设计二、设计原始资料:《数据库系统概论》王珊、萨师煊《C++面向对象程序设计》三、设计应解决下列各主要问题:1、设计特定的数据结构,用于存储数据表、视图、索引等数据库对象的信息,即建立数据库系统的数据字典;2、设计特定的数据结构,用于存储数据表中的数据;3、执行CREATE语句,创建数据表、视图、索引等数据库对象;创建数据表时需要包含主码、外码、唯一性约束、非空约束等完整性约束的定义;4、执行SELECT语句,从自主设计的数据表中查询数据,并输出结果;在SELECT语句中需要支持GROUPBY、HAVING和ORDERBY子句,需要支持5种聚集函数;5、用户登录时,需要输入用户名;如果用户没有被授权,则拒绝执行用户查询或更新操作,并给出提示信息;四、设计说明书应附有下列图纸:无五、小组分工说明:无六、命题发出日期:2015-7-19设计完成日期:2015-7-263指导教师评语成绩:指导教师(签章):年月日山东科技大学学生课程设计4目录1需求分析说明………………………………………………………51.1课程设计的目的…………………………………………………………51.2课程设计的要求………………………………………………52概要设计说明………………………………………………………………62.1程序的数据结构…………………………………………………………62.2模块调用图………………………………………………………………72.3DBMS程序模块的组成…………………………………………………83详细设计说明………………………………………………………………83.1主函数模块…………………………………………………………………83.2用户登录检查………………………………………………………………83.3数据库,数据表的建立……………………………………………………93.4SELECT语句的实现………………………………………………………113.5UPDATE和DELETE语句的实现………………………………………134调试分析…………………………………………………………145用户使用说明………………………………………………………146课程设计总结…………………………………………………197源代码………………………………………19山东科技大学学生课程设计51需求分析说明1.1.课程设计的目的《数据库系统课程设计》是一门实践性课程,要求学生在教师的指导下,充分利用所学的数据库、数据结构、C/C++语言等相关知识,从底层做起,实现数据库的组织、存储、检索、更新和索引等功能。目的是让学生深刻理解关系数据库系统中数据和元数据的组织方式、存储方式、检索方式、更新方式和索引方式,同时培养学生的逻辑思维能力和锻炼学生的动手编程能力。1.2.课程设计的要求1、设计特定的数据结构,用于存储数据表、视图、索引等数据库对象的信息,即建立数据库系统的数据字典;2、设计特定的数据结构,用于存储数据表中的数据;3、设计特定的数据结构,用于存储索引数据;4、设计特定的数据结构,分别用于存储用户和访问权限的信息;5、输入“helpdatabase”命令,输出所有数据表、视图和索引的信息,同时显示其对象类型;输入“helptable表名”命令,输出数据表中所有属性的详细信息;输入“helpview视图名”命令,输出视图的定义语句;输入“helpindex索引名”命令,输出索引的详细信息;6、解析CREATE、SELECT、INSERT、DELETE、UPDATE等SQL语句的内容;7、检查SQL语句中的语法错误和语义错误;8、执行CREATE语句,创建数据表、视图、索引等数据库对象;创建数据表时需要包含主码、外码、唯一性约束、非空约束等完整性约束的定义;9、执行SELECT语句,从自主设计的数据表中查询数据,并输出结果;在SELECT语句中需要支持GROUPBY、HAVING和ORDERBY子句,需要支持5种聚集函数;10、执行INSERT、DELETE和UPDATE语句,更新数据表的内容;更新过程中需要检查更新后的数据表是否会违反参照完整性约束。如果是,则提示山东科技大学学生课程设计6违反哪一条完整性约束,并拒绝执行更新操作;如果否,提示数据表更新成功,并说明插入、删除或修改了几个元组。11、当数据表的内容更新后,根据索引的定义,自动更新索引表的内容;12、在有索引的数据表上执行查询语句时,首先利用索引找到满足条件的元组指针,然后通过指针到数据表中取出相应的元组;13、执行GRANT语句,为用户授予SELECT、INSERT、DELETE、UPDATE权限;执行REVOKE语句,收回上述权限;14、用户登录时,需要输入用户名;如果用户没有被授权,则拒绝执行用户查询或更新操作,并给出提示信息;15、将SELECT语句转化为关系代数表达式,再利用查询优化算法对关系代数表达式进行优化,输出优化后的关系代数表达式或SELECT语句。2概要设计说明2.1程序的数据结构为了实现建立数据库的数据字典和存储数据表中的数据,设定了相应的类用来存储数据表的信息。classdatabase//定义一个database类{public:voidCreateDatabase();//数据库voidCreateTable();//表voidDatabaseShow();//定义显示所有数据函数voidDatabaseShow2();//定义显示所有数据函数----访客模式voidDeleteTable();//删除表中的信息山东科技大学学生课程设计7voidDeleteRow();//删除一个j记录内的信息voidAddrow();//添加一行voidAddTable();//添加一个表voidChange();//更新数据voidselect();//选择语句voidgrant();//授权语句private:stringDatabaseName;//数据库的名字stringTableName;//表的名字stringLeixingName;//数据类型的名字stringTableShuju;//表中的数据stringpath;//路径stringAllpath;//全局路径stringpathrecord=0;//全局记录路径默认为空stringx;charYN;//是否同意Y(同意)N(不同意)chara;//输入是否Y/N};2.2模块调用图mainmenu1DBMSmenuDBMS内的函数山东科技大学学生课程设计82.3DBMS程序模块的组成DBMS由众多程序模块组成,它们分别实现DBMS复杂而繁多的功能。1、建立数据库,建立表;2、显示数据库;3、授权;4、删除行;5、添加表,添加行;6、更新,选择;3详细设计说明3.1主函数模块首先调用菜单,输出主菜单;然后采用了文件操作,运用调用函数实现关于数据库的各种操作。3.2用户登录检查首先定义一个类,存储用户名和密码;classusers{private:stringname;stringpassword;public:stringn(){returnname;}stringp(){returnpassword;}voidn(stringna){name=na;}voidp(stringpa){password=pa;}};然后实现登录;intget_users(stringname,stringpass){ifstreamFILE(users.txt);strings;charline[100];山东科技大学学生课程设计9inti=0,k=0;while(FILE.getline(line,100)){s=line;if(i%2==0)u[k].n(s);elseif(i%2==1){u[k].p(s);k++;}i++;}FILE.close();for(intj=0;jk;j++){if(name==u[j].n()&&pass==u[j].p())return1;}return0;}3.3数据库,数据表的建立本程序通过利用fstream文件流操作,实现了数据库和数据表的建立,但是对完整性约束的实现不是很成功。voiddatabase::CreateTable()//建表{intsum=0;charx;chars1[10],s2[10],s3[10],s4[10];intoption;stringShuxingName;//属性字符名stringAllpath2;if(pathrecord==0)//判断当前是否建立数据库{coutERROR!endl请先选择1——建立数据库endl;}cout请输入要建立的表名:endl;//在建好数据库后建立表cinTableName;Allpath2=pathrecord+shujuku.txt;山东科技大学学生课程设计10ofstreamTdfile2(Allpath2.c_str(),ios::app);Allpath=pathrecord+TableName+.txt;//库路径a='y';Tdfile2TableNameendl;Tdfile2.close();while((a=='y')||(a=='Y')){//文件打开,输入数据ofstreamTdfile(Allpath.c_str(),ios::app);ofstreamTdfile3(Allpath2.c_str(),ios::app);//输入信息流cout输入属性名称:endl;cinShuxingName;cout输入属性类型:endl;cinLeixingName;TdfileShuxingName,.\tLeixingName:\t;Tdfile3ShuxingName,.\tLeixingName:\tendl;Tdfile3.close();//检验属性类型,默认char和int和smallintif((LeixingName==char)||(LeixingName==CHAR)){cout请输入数据endl;sum++;while(sum!=0){cinTableShuju;TdfileTableShuju;sum--;if(sum==0){Tdfile\n;Tdfile.close();//文件流关闭}}}//判断int和smallint是否符合输入要求elseif((LeixingName==smallint)||(LeixingName==SMALLINT)||(LeixingName==INT)||(LeixingName==int)){山东科技大学学生课程设计11cout请输入数据endl;sum++;intshuju;while(sum!=0){cinshuju;if((shuju=0)&&(shuju=1000)){Tdfileshuju;sum--;if(sum==0){Tdfile\n;Tdfile.close();//文件流关闭}}}}cout继续输入Y,停止输入Nendl;cina;//在表内输入数据保证表数据完全}cout请依次输入主码、外码、唯一值、非空值,没有输入NULLendl;scanf(%s%s%s%s,s1,s2,s3,s4);coutTableName的主码是s1endl;coutTableName的外码是s2endl;coutTableName的唯一值是s3endl;coutTableName的非空值是s4endl;}3.4SELECT语句的实现本程序只实现了SELECT语句的单表查询,对连
本文标题:数据库课程设计报告..
链接地址:https://www.777doc.com/doc-7274512 .html