1、数据库课程设计江苏大学最新版本数据库课程设计 班 级 软件1001 学 号 * 姓 名 张建彬 指导老师 辛燕 二零一二年 六 月 一、引言1目的课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。课程设计的目的:1.加深对数据库系统、软件工程、程序设计语言的理论知识的理解和应用水平;2.在理论和实验教学基础上进一步巩固已学基本理论及应用知识并加以综合提高;3.学会将知识应用于实际的方法,提高分析和解决问题的能力,增强动手能力;4.为毕业设计和以后工作打下必要基础。2题目设计一个订户订
2、阅报刊的应用系统。1.处理要求接收并且处理订户的订阅要求回答订户的查询统计报刊的订阅情况2.信息要求订单订户报刊目录投递卡具体数据参见附表数据语义:一个客户可以订阅多份报刊,一种报刊可以为多个客户订阅(客户-订阅-报刊,m:n)一种报刊可以投递给多个客户,一个客户一次可以接受多种报刊的投递(报刊-投递-客户,m:n)3.系统功能包括:(在查询和管理中各选一题)订户管理:订户的增加、修改、删除;报刊目录管理:报刊目录的增加、删除、修改;订单管理:订单的增加、删除、修改;查询订单:按订户查询订单的详细情况;统计查询:统计报刊的订阅数量及金额。3要求运用数据库基本理论与应用知识,在微机RDBMS(S
3、QL Server)的环境上建立一个数据库应用系统。要求把现实世界的事物及事物之间的复杂关系抽象为信息世界的实体及实体之间联系的信息模型,再转换为机器世界的数据模型和数据文件,并对数据文件实施检索、更新和控制等操作。 1.用E-R图设计选定题目的信息模型;2.设计相应的关系模型,确定数据库结构;3.分析关系模式各属于第几范式,阐明理由;4.设计应用系统的系统结构图,确定系统功能;5.通过设计关系的主码约束、外码约束和使用CHECK实现完整性控制;6.为参照关系设计插入、删除、修改触发器;7.实现应用程序设计、编程、优化功能;8.对系统的各个应用程序进行集成和调试,进一步优化系统功能、改善系统用
4、户界面完成实验内容所指定的各项要求;9.分析遇到的问题,总结并写出课程设计报告;10.自我评价4开发工具及技术Mmicrosoft visual C+ 6.0Microsoft SQL server 2005系统的功能分析图: 程序流程:本次实验的报刊预订系统总体上可以分为5个功能模块:订户管理,报刊目录管理,订单管理,查询预订,统计查询。其中每一个管理模块包括了三个数据库的操作,分别是增加 删除 更改;查询分为单用户查询和统计查询。用户可以根据功能选择来按照自己的需要进行操作。概念结构设计(E-R)图 说明:一个客户可以订阅多份报刊,一种报刊可以为多个客户订阅(客户-订阅-报刊,m:n)一种
5、报刊可以投递给多个客户,一个客户一次可以接受多种报刊的投递(报刊-投递-客户,m:n)逻辑设计阶段订户(编号,姓名,住址)报刊目录(代号,名称,刊期,单价)订单(订户号,报刊代号,日期,起定期,终定期,份数)投递卡(订户号,报刊代号,期号,份数)在关系模型中,候选码都用下划线和加粗标出。外码用斜体标出。其中订单和投递卡是订户表和报刊目录的两个联系,都是多对多联系。一个用户可以订阅不同报刊,同一种报刊可以被不同用户订阅。在订户关系中,订户号是主码,非主属性对码完全依赖,不存在传递依赖,决定因素是码,所以订户关系属于BCNF范式。报刊目录表中,报刊代号是主码,非主属性对码完全依赖,不存在传递依赖,
6、决定因素是码,所以报刊目录关系属于BCNF范式。订单表中,订户号,日期,报刊代号共同组成其候选码,一个用户可以在不同时间订阅同一本报刊,而其中,订户号和报刊代号均是其外码。非主属性对码完全依赖,不存在传递依赖,决定因素都包含码,所以订单冠以关系属于BCNF范式。投递卡表中,订户号,报刊目录,期号共同组成其候选码。一个用户可以订阅同意报刊的不同期报刊。而其中订户号和报刊代号均是其外码。非主属性对码完全依赖,不存在传递依赖,决定因素是码,所以投递卡关系属于BCNF范式。3完整性设计在四个关系中都保持了实体完整性,主码的唯一性。外码没有采用级联删除,保证了其参照完整新CHECK约束,限制了份数QTY
7、必须大于等于0,价钱必须大于等于0; 开发工具简单说明:本次的实验是通过ODBC连接数据库,通过对数据库的应用程序的操作实现对数据源内部的数据的查询和更新,大大提高了应用系统与数据库平台的独立性,使用ODBC使得应用系统的移植变得更加容易,当一个应用系统从一个数据库平台移到另一个数据库平台只要更换ODBC的RDBMS的驱动程序就可以。ODBC工作流程图如下 有 无报刊订阅数据库数据关系图如下:系统主要功能实现(控制台程序截图):1.修改订户2.增加订户3.增加报刊目录5.统计查询6.按用户查询7.修改报刊目录程序代码: #include #include #include #include /
8、 This is the the main include for ODBC Core functions.#include / This is the include for applications using the Microsoft SQL Extensions#include / This file defines the types used in ODBC#include / This is the unicode include for ODBC Core functions#include / This is the application include file for
9、 the SQL Server driver specific defines.#include #include #include using namespace std;#define CNO_LEN 10#define NMNO_LEN 10#define ISSUE_LEN 10#define QTY_LEN 4#define DATE_LEN 10#define START_LEN 10#define TERM_LEN 10#define TITLE_LEN 20#define PERIOD_LEN 10#define PRICE_LEN 8#define NAME_LEN 10#d
10、efine ADDR_LEN 20void back()int main() /*Step 1 定义句柄括和变量*/ /以wang开头的表示的是连接wangjian的变量 SQLHENV dinghenv; /环境句柄括 SQLHDBC dinghdbc; /连接句柄括 SQLHSTMT dinghstmt; /语句句柄括 SQLRETURN ret; SQLDOUBLE PRICE; SQLINTEGER QTY; SQLCHAR CNOCNO_LEN,NMNONMNO_LEN,ISSUEISSUE_LEN,DATE1DATE_LEN,STARTSTART_LEN,TERMTERM_LEN,
11、 TITLETITLE_LEN,PERIODPERIOD_LEN,NAMENAME_LEN,ADDRADDR_LEN; SQLINTEGER cbCNO=SQL_NTS,cbNMNO=SQL_NTS,cbISSUE=SQL_NTS,cbQTY=0,cbDATE1=SQL_NTS,cbSTART=SQL_NTS,cbTERM=SQL_NTS, cbTITLE=SQL_NTS,cbPERIOD=SQL_NTS,cbNAME=SQL_NTS,cbADDR=SQL_NTS; SQLINTEGER cbPRICE=0; int w,x,y,m,n; /*Step 2 初始化环境3*/loop: ret=
12、SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&dinghenv); ret=SQLSetEnvAttr(dinghenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0); /*Step 3 建立连接*/ ret=SQLAllocHandle(SQL_HANDLE_DBC,dinghenv,&dinghdbc); ret=SQLConnect(dinghdbc,(SQLWCHAR*)(_T(SQLServe),SQL_NTS,(SQLWCHAR*)(_T(sa),SQL_NTS,(SQLWCHAR*)(_T
13、(123),SQL_NTS); if(!SQL_SUCCEEDED(ret) return -1; /*Step 4 初始化语句句柄括*/ ret=SQLAllocHandle(SQL_HANDLE_STMT,dinghdbc,&dinghstmt); ret=SQLSetStmtAttr(dinghstmt,SQL_ATTR_ROW_BIND_TYPE,(SQLPOINTER)SQL_BIND_BY_COLUMN,SQL_IS_INTEGER); /*Step 5 执行语句*/ cout+订户订阅报刊的应用系统+endl; cout输入需要操作的序号?endl; cout1、订户管理endl; cout2、报刊目录管理endl; cout3、订单管理endl; cout4、查询订单endl; cout5、统计查询endl; cout6、退出w; switch(w) case 1:w=1; /*订?户管理?/ loop1: cout+订户管理+endl; cout1、增加订户endl; cout2、修改订户endl; cout3、删除订户endl; cout4、返回上级x; switch(x) case 1:x=1; /*增?加订?户*/ SQLWCHAR CNO1CNO_LEN,NAME1NAME_LEN,ADDR1ADDR_L
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1