
数据库课程设计(江苏大学版本).docx
19页数据库课程设计班 级 软件工程1001学 号 姓 名 张建彬指导老师 辛燕 二零一二年六月一、引言1.目的:课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实 际有机的结合起来,锻炼学生的分析解决实际问题的能力提高学生适应实际,实践编程的 能力课程设计的目的:• 加深对数据库系统、软件工程、程序设计语言的理论知识的理解和应用水平;• 在理论和实验教学基础上进一步巩固已学基本理论及应用知识并加以综合提高;• 学会将知识应用于实际的方法,提高分析和解决问题的能力,增强动手能力;• 为毕业设计和以后工作打下必要基础2.题目:设计一个订户订阅报刊的应用系统1).处理要求•接收并且处理订户的订阅要求•回答订户的查询•统计报干的订阅情况信息要求•订单•订户•报干目录•投递卡具体数据参见附表数据语义:• 一个客户可以订阅多份报刊,一种报刊可以为多个客户订阅(客户 -订阅-扌报干刊,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_ISINTEGER);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<












