


已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机学院数据库课程设计报告 计算机0501班 白璐 3050603018订户订阅系统数据库课程设计“数据库课程设计”是数据库系统及应用、软件工程及程序设计课程的后续实验课,是一门独立开设的实验课程。“数据库课程设计”可以进一步巩固学生的数据库知识,加强学生的实际动手能力和提高学生综合素质。 一、课程实验目的1. 加深对数据库系统、软件工程、程序设计语言的理论知识的理解和应用水平;2. 在理论和实验教学基础上进一步巩固已学基本理论及应用知识并加以综合提高;3. 学会将知识应用于实际的方法,提高分析和解决问题的能力,增强动手能力;4. 为毕业设计和以后工作打下必要基础。二课程实验题目设计一个订户订阅报刊的应用系统。接收并且处理订户的订阅要求,回答订户的查询,统计报刊的订阅情况。订单、订户、报刊目录、投递卡的数据见附表。三、课程设计要求运用数据库基本理论与应用知识,在微机RDBMS(SQL Server)的环境上建立一个数据库应用系统。要求把现实世界的事物及事物之间的复杂关系抽象为信息世界的实体及实体之间联系的信息模型,再转换为机器世界的数据模型和数据文件,并对数据文件实施检索、更新和控制等操作。 1. 用E-R图设计指定题目的信息模型;2. 设计相应的关系模型,确定数据库结构;3. 分析关系模式各属于第几范式,阐明理由;4. 设计应用系统的系统结构图,确定系统功能;5. 使用对象许可和命令许可、角色控制设计安全性控制检查程序;6. 通过设计关系的主码约束、外码约束和使用CHECK、RULE实现完整性控制;7. 为每一参照关系设计插入、删除、修改触发器;8. 实现应用程序设计、编程、优化功能;9. 对系统的各个应用程序进行集成和调试,进一步优化系统功能、改善系统用户界面完成实验内容所指定的各项要求;10. 分析遇到的问题,总结并写出课程设计报告;11. 自我评价四、课程设计考核 数据库课程采用课程设计报告和课程设计应用程序综合评定成绩。五、实验环境开发环境VC+、ODBC;数据库SQL Server六、课程设计内容(1) 创建数据库的结构(2) 创建各基本表的结构(3) 编制软件系统 完成数据的录入、修改和删除 按用户名称检索的订户信息 按用户名称检索订户订阅的报刊信息 统计各种报刊的订户数,输出如下报表:订户姓名报刊名称期 号日 期起订期终订期份 数七、课程设计过程一 课程设计任务 设计一个订户订阅报刊的应用系统。涉及订单、订户、报刊目录及投递卡信息。1、系统语义描述如下:l 一个订户可订多种报刊;一种报刊可被多个用户订阅;订单只能订阅现有报刊目录内容;l 一张投递卡可包含对多个订户的订单的投递信息; 2、系统功能包括:l 订户管理:订户增加、修改、删除;l 目录管理:目录增加、删除、修改;l 订单管理:完成订户订阅数据的管理;l 订单查询:按订户查询订单详细情况;l 统计查询:按报刊目录统计各类报刊的订阅数量及金额 3、实现内容l 创建数据库的结构l 创建各基本表的结构l 编制系统各功能模块,完成数据的管理(增、删、改)及统计查询。二 数据库系统设计1设计E-R图 报刊用户订单订阅提交MNMN投递MN2. 设计相应的关系模型,确定数据库结构 根据基础数据建立名为“报刊”的数据库,并建立三个关系表:订单表CUS_ORDER、用户表CUSTOMER、报刊表NMTABLE,各表结构及数据结构如下:(1) CUS_ORDER表: (2) CUSTOMER表: (3) 报刊表NMTABLE: 3. 数据库范式分析由于此数据库不存在传递依赖和部分依赖,所以该数据库系统属于第三范式。4设计应用系统的系统结构图,确定系统功能:程序由MFC编写,编译平台为Microsoft Visual Studio .NET 2003。流程图如下:程序初始化连结数据库初始化图形界面功能选择数据统计模块用户及报刊数据管理模块用户订报管理模块退出程序成功失败5设计关系的主码约束、外码约束和使用CHECK实现完整性控制:6. 应用程序编写 (1) 连结数据库tryHRESULT hr;/ 创建Connection对象hr = m_pConnection.CreateInstance(ADODB.Connection);if( SUCCEEDED( hr ) )/ 连接数据库hr=m_pConnection-Open(provider=SQLOLEDB.1;DataSource=;userID=sa;Password=123456;Initial Catalog=报刊,adModeUnknown);/MessageBox(0,_T(连结成功),_T(成功),0);elseMessageBox( NULL, 创建ADO对象失败, 失败, MB_OK );return false;catch( . )MessageBox( NULL,连接数据库失败,请确定数据库是否启动且账号是否正确!, _T(连接数据库失败), MB_OK);return false;程序采用COM接口连结数据库,所以先初始化OLE组件,再创建Connection实例,如果创建成功,就尝试连结,连结时用try catch捕捉数据库连结异常。如果发生异常,就提示用户数据连结出错。(2) 订阅信息统计模块:该模块将显示所有订阅信息,包括每个用户订了哪些报刊,报刊的份数,起至刊号及所订报刊的单价等所有数据信息,如图:以下给出加载这些信息的函数。_RecordsetPtr pRecord;try/ 生成Recordset实例pRecord.CreateInstance(ADODB.Recordset);/ 打开记录集,静态光标(静态记录集),乐观锁定方式/ 查询所有语句sql=select o,,customer.addr,cus_order.orderdate,NMTABLE.title,NMTABLE.price,NMTABLE.period,cus_order.start,cus_order.term,cus_order.qty from customer,cus_order,NMTABLE where o=cus_o and NMTABLE.nmno=cus_order.nmno;pRecord-Open(_bstr_t(sql),_variant_t(IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);while( !pRecord-adoEOF )value = pRecord-GetCollect(cno);if(value.vt!=VT_NULL)value.ChangeType(VT_BSTR);temp=value.bstrVal;elsetemp=;m_list.InsertItem(i,temp);value = pRecord-GetCollect(name);if(value.vt!=VT_NULL)temp=value.bstrVal;elsetemp=name;m_list.SetItemText(i,1,temp.Trim();value = pRecord-GetCollect(addr);if(value.vt!=VT_NULL)temp=value.bstrVal;elsetemp=;m_list.SetItemText(i,2,temp.Trim();value = pRecord-GetCollect(orderdate);if(value.vt!=VT_NULL)value.ChangeType(VT_BSTR);temp=value.bstrVal;elsetemp=;m_list.SetItemText(i,3,temp.Trim();value = pRecord-GetCollect(title);if(value.vt!=VT_NULL)temp=value.bstrVal;elsetemp=;m_list.SetItemText(i,4,temp.Trim();value = pRecord-GetCollect(period);if(value.vt!=VT_NULL)temp=value.bstrVal;elsetemp=;m_list.SetItemText(i,5,temp.Trim();value = pRecord-GetCollect(start);if(value.vt!=VT_NULL)value.ChangeType(VT_BSTR);temp=value.bstrVal;elsetemp=;m_list.SetItemText(i,6,temp);value = pRecord-GetCollect(term);if(value.vt!=VT_NULL)value.ChangeType(VT_BSTR);temp=value.bstrVal;elsetemp=;m_list.SetItemText(i,7,temp);value = pRecord-GetCollect(qty);if(value.vt!=VT_NULL)value.ChangeType(VT_BSTR);temp=value.bstrVal;elsetemp=;m_list.SetItemText(i,8,temp);value = pRecord-GetCollect(price);if(value.vt!=VT_NULL)value.ChangeType(VT_BSTR);temp=value.bstrVal;elsetemp=;m_list.SetItemText(i,9,temp);i+;pRecord-MoveNext();pRecord-Close();pRecord = NULL;catch( _com_error *e )MessageBox( e-ErrorMessage() );首先,如同创建Connection实例,这里先创建一个Recordset实例,它相当于一个查询结果的元组指针;然后构造SQL语句,实现三表联合查询;再通过Recordset的Open方法执行SQL语句,使用Recordset保存查询的结果。最后,通过一个while循环,把Recordset中保存的结果全部读出,再将结果显示到列表框中,其中m_list是一个列表框的控制变量,先插入一行m_list.InsertItem(i,temp),i为列表框中现有的总项数,这样就可保证每次插入的数据是列表框的最后一项,由于已已经插入了一项,以后的就只要修改新插入项的数据即可m_list.SetItemText(i,9,temp)。(3) 删除统计信息中的某一项:在列表框的某一项上右击,将显示一个菜单,如图:添加对应的消息处理函数,当选中删除菜单时,将删除列表框中被选中数据项。处理函数核心代码如下:CString SQL;_CommandPtr m_pCommand;int i;i=m_list.GetSelectionMark();SQL=(CString)delete from CUS_ORDER where CNO= + m_list.GetItemText(i,0);SQL+= and NMNO=(select NMNO from NMTABLE where title= + m_list.GetItemText(i,4) + );/MessageBox(SQL);trym_pCommand.CreateInstance(ADODB.Command);m_pCommand-ActiveConnection = theApp.m_pConnection;m_pCommand-CommandText = _bstr_t(SQL); m_pCommand-Execute(NULL, NULL,adCmdText); /m_pCommand-Release();catch(.)MessageBox(执行SQL语句出错!);首先用m_list.GetSelectionMark()得到当前被选中的列表项,然后生成SQL语句,完成后,创建Command实例,再设置它的各项参数,最后执行。(4) 用户及报刊数据管理:由于报刊数据和用户数据的管理类似,所以这里只对用户数据管理加以说明。用户数据管理包括用户添加,用户信息修改,用户删除。如图: 以下分别对这三个功能模块加之分析说明。l 数据添加:输入姓名和地址后选择添加,程序就会将此用户作为一个新用户增加到数据库中。添加按钮的消息处理函数如下:CString SQL,temp;_CommandPtr m_pCommand;GetDlgItem(IDC_EDIT3)-GetWindowText(temp);/ cno,name,addr from CUSTOMERSQL=(CString)insert into CUSTOMER(name,addr) values ( + temp;GetDlgItem(IDC_EDIT2)-GetWindowText(temp);SQL+=,+temp+);trym_pCommand.CreateInstance(ADODB.Command);m_pCommand-ActiveConnection = theApp.m_pConnection;m_pCommand-CommandText = _bstr_t(SQL); m_pCommand-Execute(NULL, NULL,adCmdText); /m_pCommand-Release();catch(.)MessageBox(执行SQL语句出错!);this-LoadUserData();由于此函数和上面的右键菜单处理函数颇为相似,所以这里不加说明,后面的删除功能同理也不再叙述。l 数据更新操作:当选择列表框中的任意一项时,处理列表框的LVN_ITEMCHANGED 消息,使下面的文本框中数据也自动更新。函数如下:void CFORMVIEW1:OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)LPNMHEADER phdr = reinterpret_cast(pNMHDR);/ TODO: 在此添加控件通知处理程序代码int i;CString temp;for(i =0;iSetWindowText(temp);temp=m_list0.GetItemText(i,2);GetDlgItem(IDC_EDIT2)-SetWindowText(temp);*pResult = 0; 首先用一个循环得到被选中的数据项的编号,然后再根据编号得到被选中项的用户姓名和地址。再用SetWindowText函数更新下面的文本框的数据。 当单击更新按钮时,完成数据的更新操作。先得到选中的数据项编号,再构造UPDATE语句,完成更新,由于更新操作也是使用Command实例,所以这里也不再复述。(5) 用户订报模块:这是程序中最复杂的模块,它的功能是给指定的用户按要求订阅报刊,如图:第一个列表框中显示的是系统中所有已登记的用户,左下方的列表中显示的是在用户列表框中选中的用户未订阅的报刊,右下方的列表中显示的就是此用户已订阅的报刊。为便于理解程序,先给出它的操作方法:假如要给用户“李宇”进行订报设置,就只要先在用户列表框中选中他,然后再在左下方的列表框中选择他要订阅的报刊(支持多选),填写好份数和起至刊号,最后只要单击“”按钮即可完成订阅;同样假如他要取消订阅某刊物,就只要在右边的列表框中选中要取消的刊物名称,再单击“Open(_bstr_t(sql),_variant_t(IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);while( !pRecord-adoEOF)value = pRecord-GetCollect(nmno);if(value.vt!=VT_NULL)value.ChangeType(VT_BSTR);temp=value.bstrVal;elsetemp=;m_list1.InsertItem(i,temp);i+;pRecord-MoveNext();pRecord-Close();/ 查询所有语句 已选报刊sql=(CString)SELECT title,period,price,qty,start,term from NMTABLE,CUS_ORDER WHERE NMTABLE.NMNO=CUS_ORDER.NMNO AND CNO=0+ m_list0.GetItemText(s,0) + ORDER BY NMTABLE.NMNO;pRecord-Open(_bstr_t(sql),_variant_t(IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);i=0;while( !pRecord-adoEOF)value = pRecord-GetCollect(title);if(value.vt!=VT_NULL)temp=value.bstrVal;elsetemp=;m_list2.InsertItem(i,temp.Trim();i+;pRecord-MoveNext();pRecord-Close();pRecord = NULL;/GetDlgItem(IDC_EDIT1)-SetWindowText(m_list2.GetItemText(s,3);catch(.)MessageBox(载入数据出错!);先创建Recordset实例,再构造SQL语句,执行,限于篇幅关系,这里不再复述。再说LVN_ITEMCHANGED消息处理函数,它先得到选中的用户列表项,再据次得到用户ID,再调用LoadNMData函数,完成报刊列表的更新。(b) 用户订报功能的程序实现:当单击“”按钮时先在CUS_ORDER表中添加相应的用户订阅信息,调用LoadNMData对两列表数据进行更新。函数代码如下:void CFORMVIEW2:OnBnClickedButton1()CString SQL,temp;int i,j,k;CString qty,start,term;_CommandPtr m_pCommand;for(k=m_list0.GetItemCount()-1;k=0;k-)if(m_list0.GetItemState(k,LVIS_SELECTED)=LVIS_SELECTED)break;j=m_list1.GetItemCount();if(kGetWindowText(qty);GetDlgItem(IDC_EDIT2)-GetWindowText(start);GetDlgItem(IDC_EDIT3)-GetWindowText(term);trym_pCommand.CreateInstance(ADODB.Command);m_pCommand-ActiveConnection = theApp.m_pConnection;for(i=0;iCommandText = _bstr_t(SQL); m_pCommand-Execute(NULL, NULL,adCmdText); catch(.)MessageBox(执行SQL语句出错!);thi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电炉炼钢工设备维护与保养考核试卷及答案
- 熔融纺纺丝操作工主管竞选考核试卷及答案
- 稀土挤压工前沿技术考核试卷及答案
- 玉雕工标准化作业考核试卷及答案
- 送配电线路架设工基础知识考核试卷及答案
- 品牌资产评价师协作考核试卷及答案
- 乙炔发生工技能巩固考核试卷及答案
- 企业培训师主管竞选考核试卷及答案
- 手工地毯图案工质量管控考核试卷及答案
- 二硫化碳生产工专业技能考核试卷及答案
- 贝尔面瘫个案护理
- 急性主动脉综合征非外科强化治疗中国专家共识解读 2
- 教师培训Ai课件
- 妇产科子宫脱垂护理查房
- 检测机构强制性标准规范执行措施
- 肿瘤放射治疗护理常规
- 专题:根据首字母填空 六年级英语下册期末复习考点培优专项鲁教版(五四学制)(含答案解析)
- 2025年驻村帮扶培训课件
- 嵌入式系统设计与开发-基于ARM Cortex-A9和Linux 课件 第10章 ARM-Linux软件开发基础
- 产品生命周期管理制度
- 颅脑外伤麻醉病例分析
评论
0/150
提交评论