数据库课程设计江苏大学最新版本.docx
《数据库课程设计江苏大学最新版本.docx》由会员分享,可在线阅读,更多相关《数据库课程设计江苏大学最新版本.docx(24页珍藏版)》请在冰豆网上搜索。
数据库课程设计江苏大学最新版本
数据库课程设计
班级软件1001
学号**********
姓名张建彬
指导老师辛燕
二零一二年六月
一、引言
1.目的
课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。
提高学生适应实际,实践编程的能力。
课程设计的目的:
1.加深对数据库系统、软件工程、程序设计语言的理论知识的理解和应用水平;
2.在理论和实验教学基础上进一步巩固已学基本理论及应用知识并加以综合提高;
3.学会将知识应用于实际的方法,提高分析和解决问题的能力,增强动手能力;
4.为毕业设计和以后工作打下必要基础。
2.题目
设计一个订户订阅报刊的应用系统。
1.处理要求
●接收并且处理订户的订阅要求
●回答订户的查询
●统计报刊的订阅情况
2.信息要求
●订单
●订户
●报刊目录
●投递卡
具体数据参见附表
数据语义:
●一个客户可以订阅多份报刊,一种报刊可以为多个客户订阅(客户-订阅-报刊,m:
n)
●一种报刊可以投递给多个客户,一个客户一次可以接受多种报刊的投递(报刊-投递-客户,m:
n)
3.系统功能包括:
(在查询和管理中各选一题)
●订户管理:
订户的增加、修改、删除;
●报刊目录管理:
报刊目录的增加、删除、修改;
●订单管理:
订单的增加、删除、修改;
●查询订单:
按订户查询订单的详细情况;
●统计查询:
统计报刊的订阅数量及金额。
3.要求
运用数据库基本理论与应用知识,在微机RDBMS(SQLServer)的环境上建立一个数据库应用系统。
要求把现实世界的事物及事物之间的复杂关系抽象为信息世界的实体及实体之间联系的信息模型,再转换为机器世界的数据模型和数据文件,并对数据文件实施检索、更新和控制等操作。
1.用E-R图设计选定题目的信息模型;
2.设计相应的关系模型,确定数据库结构;
3.分析关系模式各属于第几范式,阐明理由;
4.设计应用系统的系统结构图,确定系统功能;
5.通过设计关系的主码约束、外码约束和使用CHECK实现完整性控制;
6.为参照关系设计插入、删除、修改触发器;
7.实现应用程序设计、编程、优化功能;
8.对系统的各个应用程序进行集成和调试,进一步优化系统功能、改善系统用户界面完成实验内容所指定的各项要求;
9.分析遇到的问题,总结并写出课程设计报告;
10.自我评价
4.开发工具及技术
MmicrosoftvisualC++6.0
MicrosoftSQLserver2005
系统的功能分析图:
程序流程:
本次实验的报刊预订系统总体上可以分为5个功能模块:
订户管理,报刊目录管理,订单管理,查询预订,统计查询。
其中每一个管理模块包括了三个数据库的操作,分别是增加删除更改;查询分为单用户查询和统计查询。
用户可以根据功能选择来按照自己的需要进行操作。
概念结构设计(E-R)图
●说明:
一个客户可以订阅多份报刊,一种报刊可以为多个客户订阅(客户-订阅-报刊,m:
n)
●一种报刊可以投递给多个客户,一个客户一次可以接受多种报刊的投递(报刊-投递-客户,m:
n)
逻辑设计阶段
订户(编号,姓名,住址)
报刊目录(代号,名称,刊期,单价)
订单(订户号,报刊代号,日期,起定期,终定期,份数)
投递卡(订户号,报刊代号,期号,份数)
在关系模型中,候选码都用下划线和加粗标出。
外码用斜体标出。
其中订单和投递卡是订户表和报刊目录的两个联系,都是多对多联系。
一个用户可以订阅不同报刊,同一种报刊可以被不同用户订阅。
在订户关系中,订户号是主码,非主属性对码完全依赖,不存在传递依赖,决定因素是码,所以订户关系属于BCNF范式。
报刊目录表中,报刊代号是主码,非主属性对码完全依赖,不存在传递依赖,决定因素是码,所以报刊目录关系属于BCNF范式。
订单表中,订户号,日期,报刊代号共同组成其候选码,一个用户可以在不同时间订阅同一本报刊,而其中,订户号和报刊代号均是其外码。
非主属性对码完全依赖,不存在传递依赖,决定因素都包含码,所以订单冠以关系属于BCNF范式。
投递卡表中,订户号,报刊目录,期号共同组成其候选码。
一个用户可以订阅同意报刊的不同期报刊。
而其中订户号和报刊代号均是其外码。
非主属性对码完全依赖,不存在传递依赖,决定因素是码,所以投递卡关系属于BCNF范式。
3.完整性设计
在四个关系中都保持了实体完整性,主码的唯一性。
外码没有采用级联删除,保证了其参照完整新
CHECK约束,限制了份数QTY必须大于等于0,价钱必须大于等于0;
开发工具简单说明:
本次的实验是通过ODBC连接数据库,通过对数据库的应用程序的操作实现对数据源内部的数据的查询和更新,大大提高了应用系统与数据库平台的独立性,使用ODBC使得应用系统的移植变得更加容易,当一个应用系统从一个数据库平台移到另一个数据库平台只要更换ODBC的RDBMS的驱动程序就可以。
ODBC工作流程图如下
有
无
报刊订阅数据库数据关系图如下:
系统主要功能实现(控制台程序截图):
1.修改订户
2.增加订户
3.增加报刊目录
5.统计查询
6.按用户查询
7.修改报刊目录
程序代码:
#include
#include
#include
#include//ThisisthethemainincludeforODBCCorefunctions.
#include//ThisistheincludeforapplicationsusingtheMicrosoftSQLExtensions
#include//ThisfiledefinesthetypesusedinODBC
#include//ThisistheunicodeincludeforODBCCorefunctions
#include//ThisistheapplicationincludefilefortheSQLServerdriverspecificdefines.
#include
#include
#include
usingnamespacestd;
#defineCNO_LEN10
#defineNMNO_LEN10
#defineISSUE_LEN10
#defineQTY_LEN4
#defineDATE_LEN10
#defineSTART_LEN10
#defineTERM_LEN10
#defineTITLE_LEN20
#definePERIOD_LEN10
#definePRICE_LEN8
#defineNAME_LEN10
#defineADDR_LEN20
voidback(){}
intmain()
{
/*Step1定义句柄括和变量*/
//以wang开头的表示的是连接wangjian的变量
SQLHENVdinghenv;//环境句柄括
SQLHDBCdinghdbc;//连接句柄括
SQLHSTMTdinghstmt;//语句句柄括
SQLRETURNret;
SQLDOUBLEPRICE;
SQLINTEGERQTY;
SQLCHARCNO[CNO_LEN],NMNO[NMNO_LEN],ISSUE[ISSUE_LEN],DATE1[DATE_LEN],START[START_LEN],TERM[TERM_LEN],
TITLE[TITLE_LEN],PERIOD[PERIOD_LEN],NAME[NAME_LEN],ADDR[ADDR_LEN];
SQLINTEGERcbCNO=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;
SQLINTEGERcbPRICE=0;
intw,x,y,m,n;
/*Step2初始化环境3*/
loop:
ret=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&dinghenv);
ret=SQLSetEnvAttr(dinghenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);
/*Step3建立连接*/
ret=SQLAllocHandle(SQL_HANDLE_DBC,dinghenv,&dinghdbc);
ret=SQLConnect(dinghdbc,(SQLWCHAR*)(_T("SQLServe")),SQL_NTS,(SQLWCHAR*)(_T("sa")),SQL_NTS,(SQLWCHAR*)(_T("123")),SQL_NTS);
if(!
SQL_SUCCEEDED(ret))
return-1;
/*Step4初始化语句句柄括*/
ret=SQLAllocHandle(SQL_HANDLE_STMT,dinghdbc,&dinghstmt);
ret=SQLSetStmtAttr(dinghstmt,SQL_ATTR_ROW_BIND_TYPE,(SQLPOINTER)SQL_BIND_BY_COLUMN,SQL_IS_INTEGER);
/*Step5执行语句*/
cout<<"++++++++++++++++++++++++++++++订户订阅报刊的应用系统+++++++++++++++++++++++++++"<cout<<"输入需要操作的序号?
"<cout<<"1、订户管理<cout<<"2、报刊目录管理<cout<<"3、订单管理<cout<<"4、查询订单<cout<<"5、统计查询"<cout<<"6、退出"<cin>>w;
switch(w)
{
case1:
w=1;/*订?
户§管ü理え?
/
{
loop1:
cout<<"+++++++++++++++++++++++++++++++订户管理++++++++++++++++++++++++++++++++++"<cout<<"1、增加订户"<cout<<"2、修改订户"<cout<<"3、删除订户"<cout<<"4、返回上级"<cin>>x;
switch(x)
{
case1:
x=1;/*增?
加ó订?
户§*/
{
SQLWCHARCNO1[CNO_LEN],NAME1[NAME_LEN],ADDR1[ADDR_L