数据库课程设计(江苏大学版本)
- 格式:doc
- 大小:860.82 KB
- 文档页数:17
数据库课程设计
班级软件工程1001 学号**********
姓名张建彬
指导老师辛燕
二零一二年六月
一、引言
1.目的:
课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。课程设计的目的:
●加深对数据库系统、软件工程、程序设计语言的理论知识的理解和应用水平;
●在理论和实验教学基础上进一步巩固已学基本理论及应用知识并加以综合提高;
●学会将知识应用于实际的方法,提高分析和解决问题的能力,增强动手能力;
●为毕业设计和以后工作打下必要基础。
2.题目:
设计一个订户订阅报刊的应用系统。
(1).处理要求
●接收并且处理订户的订阅要求
●回答订户的查询
●统计报刊的订阅情况
(2).信息要求
●订单
●订户
●报刊目录
●投递卡
具体数据参见附表
数据语义:
●一个客户可以订阅多份报刊,一种报刊可以为多个客户订阅(客户-订阅-
报刊,m:n)
●一种报刊可以投递给多个客户,一个客户一次可以接受多种报刊的投递(报
刊-投递-客户,m:n)
(3).系统功能包括:(在查询和管理中各选一题)
●订户管理:订户的增加、修改、删除;
●报刊目录管理:报刊目录的增加、删除、修改;
●订单管理:订单的增加、删除、修改;
●查询订单:按订户查询订单的详细情况;
●统计查询:统计报刊的订阅数量及金额。
3.要求:
运用数据库基本理论与应用知识,在微机RDBMS(SQL Server)的环境上建立一个数据库应用系统。要求把现实世界的事物及事物之间的复杂关系抽象为信息世界的实体及实体之间联系的信息模型,再转换为机器世界的数据模型和数据文件,并对数据文件实施检索、更新和控制等操作。
(1). 用E-R图设计选定题目的信息模型;
(2). 设计相应的关系模型,确定数据库结构;
(3). 分析关系模式各属于第几范式,阐明理由;
(4). 设计应用系统的系统结构图,确定系统功能;
(5). 通过设计关系的主码约束、外码约束和使用CHECK实现完整性控制;
(6). 为参照关系设计插入、删除、修改触发器;
(7). 实现应用程序设计、编程、优化功能;
(8). 对系统的各个应用程序进行集成和调试,进一步优化系统功能、改善系统用户界
面完成实验内容所指定的各项要求;
(9). 分析遇到的问题,总结并写出课程设计报告;
(10).自我评价
4.开发工具及技术:
(1).开发工具
●数据库管理系统:SQL Server2000
●应用程序:C/C++
(2).开发技术
ODBC API(参考课本8.3 ODBC编程)
二、系统的分析与设计
1.系统功能结构
2.主要功能模块设计/*各模块的程序流程图、类定义*/
1)初始化环境和数据库连接:
class order{public: int select1(); int select2();
int insert1(); int update1();int remove1();
int insert2(); int update2(); int remove2();
int insert3();int update3(); int remove3();};
/* Step 1 初始化环境*/
ret=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&serverhenv);
ret=SQLSetEnvAttr(serverhenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);
/* Step 2 :建立连接*/
ret=SQLAllocHandle(SQL_HANDLE_DBC, serverhenv, &serverhdbc);
ret=SQLConnect(serverhdbc,(SQLCHAR*)"syh",SQL_NTS,(SQLCHAR*)"sa",SQL_NTS,(SQLCHAR*)"sunyahui ",SQL_NTS);
if (!SQL_SUCCEEDED(ret) ) //连接失败时返回错误值
return -1;
/* Step 3 :初始化语句句柄*/
ret=SQLAllocHandle(SQL_HANDLE_STMT,serverhdbc,&serverhstmt);
ret=SQLSetStmtAttr(serverhstmt,SQL_ATTR_ROW_BIND_TYPE,(SQLPOINTER)SQL_BIND_BY_COLUMN,SQL_IS_ INTEGER);
2)查询:
ret=SQLPrepare(serverhstmt,(SQLCHAR*)"select name,o,addr,sdate,nmno,start,term,qty from customer,sorder where o=o and o=?",SQL_NTS);
if(ret==SQL_SUCCESS||ret==SQL_SUCCESS_WITH_INFO)
{ret=SQLBindCol(serverhstmt,1,SQL_C_CHAR,cname,10,&cbname);
ret=SQLBindCol(serverhstmt,2,SQL_C_CHAR,ccno,10,&cbcno);
ret=SQLBindCol(serverhstmt,3,SQL_C_CHAR,caddr,15,&cbaddr);
ret=SQLBindCol(serverhstmt,4,SQL_C_CHAR,osdate,10,&cbsdate);
ret=SQLBindCol(serverhstmt,5,SQL_C_CHAR,nnmno,10,&cbnmno);
ret=SQLBindCol(serverhstmt,6,SQL_C_CHAR,ostart,10,&cbstart);
ret=SQLBindCol(serverhstmt,7,SQL_C_CHAR,oterm,10,&cbterm);
ret=SQLBindCol(serverhstmt,8,SQL_C_LONG,&oqty,0,&cbqty);
ret=SQLBindParameter(serverhstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,10,0,ccno,0,&cbcno); cout<<"输入订户编号:cno=";cin>>ccno;}
ret=SQLExecute(serverhstmt);//执行
while ( (ret=SQLFetch(serverhstmt) ) !=SQL_NO_DATA_FOUND)
{cout< '< ret=SQLExecDirect(serverhstmt,(SQLCHAR*)"select sorder.nmno, sum(qty),sum(qty*price) from sorder,nmtable where nmtable.nmno=sorder.nmno group by sorder.nmno;",SQL_NTS); if(ret==SQL_SUCCESS||ret==SQL_SUCCESS_WITH_INFO) {ret=SQLBindCol(serverhstmt,1,SQL_C_CHAR,nnmno,10,&cbnmno); ret=SQLBindCol(serverhstmt,2,SQL_C_LONG,&sum1,0,&cbsum1); ret=SQLBindCol(serverhstmt,3,SQL_C_DOUBLE,&sum2,0,&cbsum2);} while ( (ret=SQLFetch(serverhstmt) ) !=SQL_NO_DATA_FOUND) //从查询结果中取出数据 { if(ret==SQL_ERROR) cout<<"Fetch error\n"; else cout< 3)管理: