数据库课程设计题目报刊订阅管理系统专业班级计算机科学与技术07级11班学号3104006476姓名合作者随着时代的发展,计算系软件和系统的成熟,报刊如果简单面订阅成为一个影响多数人生活的问题。
而建立报刊订阅系统是一个很好的解决办法。
经过三年的学习,我们对计算机面的知识有了很大的提升,本着理论联系实际的宗旨,通过学校提供的这次课程设计实践的机会,在指导教师的帮助下,历经两时间,我自行设计一套报刊订阅系统,在下面的各章中,我将以这套报刊订阅系统为例,谈谈其开发过程和所涉及到的问题。
设计目的应用对数据库系统原理的理论学习,通过上机实践的式将理论知识与实践更好的结合起来,巩固所学知识。
实践和巩固在课堂教学中学习的关于DB2的有关知识,熟练掌握对于给定结构的数据库的创建、基本操作、程序系统的建立和调试以及系统评价。
实践和巩固在课堂教学中学习的关于关系数据库原理的有关知识和数据库系统的建立法,熟练掌握对于给定实际问题,为了建立一个关系数据库信息管理系统,必须得经过系统调研、需求分析、概念设计、逻辑设计、物理设计、系统调试、维护以及系统评价的一般过程,为毕业设计打下基础。
设计容选择课题并且对课题的相关信息有一定的了解,对于我选的课题来说,我必须了解报刊订阅系统的构造以及订阅人的信息还有报刊的相关信息。
通过这些信息制成表格,输入到数据库中,使之能够进行查询、修改、删除并且与报刊订阅系统执行相同的操作。
需求分析阶段就是要研究我所作的报刊订阅系统的具体分类和实施过程流图。
概念设计阶段要完成数据抽象与局部视图设计还有视图的集成。
逻辑结构设计阶段要把E-R图转化为关系模式并且把我输入的六表结合在一起完成一个总关系表。
最后就是要运行和实施数据库。
要把查询结果与过程抓几图。
第二章需求分析需求分析的任务调查报刊订阅系统应用领域涉及的容,对涉及到领域的各个应用的信息要求和操作要求进行详细分析,形成需求分析说明书。
最重要的是调查、收集信息、分析订阅人信息和报刊订阅流程。
处理要求、数据的安全性与完整性要求。
要求系统能有效、快速、安全、可靠和无误的完成上述操作。
并要求客户机的界面要简单明了,易于操作,服务器程序利于维护。
需求分析的过程现在随着网络、计算机以及数据库的快速发展,报刊的订阅也不再是传统低效的纸笔记录了,已经转向网络。
本系统就是面向一个企业的报刊订阅管理系统。
此系统是一种比较智能化的管理系统,它面向所有企业部门的职工用户,但具有比较高的安全性能。
它能够实现报刊订阅的基本功能,包括新报刊信息的录入、订阅、查询等操作以及后台数据库的备份和恢复。
用户合法注册后必须输入有效密码才能成功进入此系统,可以进行订阅报刊,查询信息,统计信息等操作。
对于非法操作,系统有识别和防护措施本系统主要有以下功能模块:●(1)登陆功能:登陆系统为身份验证登录。
分为管理员登录和一般用户登录。
分别通过不同的用户名和密码进入报刊订阅管理界面。
●(2)录入新信息功能:对于管理员,包括新用户信息和新报刊信息的录入功能,信息一旦提交就存入到后台数据库中;普通用户自行注册进行录入个人信息。
●(3)订阅功能:用户可以订阅报刊,系统自动计算所需金额,并显示在界面上;管理员不可订阅报刊,必须以用户身份订阅报刊。
●(4)查询功能:用户可以查询并显示自己所订阅的信息;管理员可以按人员、报刊、部门分类查询。
查询出的信息显示在界面上。
●(5)统计功能:管理员可以按用户、部门、报刊统计报刊的销售情况,并对一些重要的订阅信息进行统计;普通用户可以统计出自己的订阅情况。
●(6)系统维护功能:管理员可以对用户、报刊、部门、订阅等信息进行添加、删除、更改等维护工作;管理员还要经常备份数据库,以备出现故障后恢复。
用户可以更改自己的注册信息,但用户名不能更改。
系统框架报刊订阅管理系统主要是由登录、录入、订阅、信息查询、统计、系统维护等主要模块构成。
本系统的结构功能图:概念结构设计概念结构设计的法与步骤概念结构独立于数据库逻辑结构和支持数据库的DBMS。
概念结构即概念模型,其主要特点是:(1)概念模型是反映现实世界的一个真实模型。
概念模型应能真实,充分反映现实世界,能满足用户对数据的处理要求。
(2)概念模型应能易于理解。
概念模型只有被用户理解后,才可以与设计者交换意见,参与数据库的设计。
(3)概念模型应当易于更改。
由于现实世界会发生变化,这就需要改变概念模型,易于更改的概念模型有利于修改和扩充。
(4)概念模型应易于向数据模型转换。
概念模型最终要转换为数据模型。
设计概念模型时应当注意,使其有利于向特定的数据模型转换。
概念结构设计的法设计概念结构通常有四类法:(1)自顶向下:即首先定义全局概念结构的框架,然后逐步细化。
(2)自底向上:即首先定义各局部应用的概念结构,然后将它们集成起来得到全局概念模式。
(3)逐渐扩:首先定义最重要的核心概念结构,然后向外扩充,以滚雪球的式逐步生成其他的概念结构,直至总体概念结构。
(4)混合策略:即将自顶向下和自底向上相结合,用自顶向下策略设计一个全局概念结构的框架,以它为骨架集成由自底向上策略中设计的各局部概念结构。
其中最经常采用的策略是自底向上的法。
即自顶向下地进行需求分析,然后再自底向上地设计概念结构。
这个报刊订阅系统就用这种法。
概念结构设计的步骤第一步是进行局部视图的设计:由于高层的数据流图只能反映系统的概貌,而中层流图能较好的反映系统中各局部应用的子系统组成。
因此我们先逐一的设计分E-R图。
第二步是进行视图的集成:各子系统的E-R图设计好之后,下一步就是要将所有的分E-R图合成一个系统的总E-R图,一般有两个式,多个分E-R图一次集成,另一种是一次集成两个分E-R图。
我想采用一次集成两个分E-R图的式。
3.2 数据抽象与局部视图设计本系统采用E-R图(实体-关系图)的法进行数据库概念结构设计。
系统E-R图如下所示:图3.1总体联系各实体属图:部门:图3.2部门实体属性图用户:图3.3用户实体属性图管理员:图3.4管理员实体属性图报刊:图3.5报刊实体属性图关系表E-R图:订阅:图3.6订阅关系管理:图3.7管理关系视图的集成经过逐步细化再进行每两个一集成初步形成一个E-R图,最后得到图3.8总体概念结构E-R 图:图3.8整体E-R图第四章逻辑结构设计E-R图向关系模型的转换部门(部门号,部门名)用户(用户名,密码,真实姓名,性别,)管理员(管理员名,密码)报刊(报刊代号,报刊名,类型,出版报社价)订阅(用户名,报刊代号,订阅年限,订阅数量,所需金额)此段核心程序用于实现Book表与数据的连接及其用户订阅报刊的功能。
void CBookDlg::FillList(){CString sCmdText="Select * From paper";_RecordsetPtr m_pRecordSet;try{m_pRecordSet.CreateInstance("ADODB.Recordset");m_pRecordSet->Open((_variant_t)sCmdText,(_variant_t)sConn,adOpenS tatic,adLockOptimistic,adCmdText);while (!m_pRecordSet->adoEOF){InsertDataToList((LPCTSTR)(_bstr_t)m_pRecordSet->GetCollect("Pname"), (LPCTSTR)(_bstr_t)m_pRecordSet->GetCollect("Ptype"),(LPCTSTR)(_bstr_t)m_pRecordSet->GetCollect("Ppublish"),(LPCTSTR)(_bstr_t)m_pRecordSet->GetCollect("Pprice"));m_pRecordSet->MoveNext();}m_pRecordSet->Close();}catch (__error e){CString sTemp;sTemp.Format("%s",e.ErrorMessage());MessageBox(sTemp);}}void CBookDlg::InsertDataToList(CString Pname, CString Ptype,CString Ppublish, CString Pprice){int index=m_list.GetItemCount();LV_ITEM IvItem;IvItem.mask=LVIF_TEXT;IvItem.iItem=index;IvItem.iSubItem=0;IvItem.pszText=(char*)(LPCTSTR)Pname;m_list.InsertItem(&IvItem);m_list.SetItemText(index,1,Ptype);m_list.SetItemText(index,2,Ppublish);m_list.SetItemText(index,3,Pprice);}int CBookDlg::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CDialog::OnCreate(lpCreateStruct) == -1)return -1;/*// TODO: Add your specialized creation code hereCRect parentRect;CRect selfRect;this->GetParent()->GetClientRect(parentRect);this->GetClientRect(selfRect);parentRect.right=parentRect.left+selfRect.right-selfRect.left;parentRect.bottom=parentRect.top+selfRect.bottom-selfRect.top;this->MoveWindow(parentRect);*/// TODO: Add your specialized creation code herereturn 0;}void CBookDlg::OnClickList(NMHDR* pNMHDR, LRESULT* pResult){// TODO: Add your control notification handler code herem_SelectedIndexOfList=-1;LPNMITEMACTIVATE lpNMItemActivate = (LPNMITEMACTIVATE)pNMHDR;if(lpNMItemActivate != NULL){m_SelectedIndexOfList = lpNMItemActivate->iItem;}//若存在被选中的行if (m_SelectedIndexOfList!=-1){m_name=m_list.GetItemText(m_SelectedIndexOfList,0);m_type =m_list.GetItemText(m_SelectedIndexOfList,1);m_publish=m_list.GetItemText(m_SelectedIndexOfList,2);m_price=m_list.GetItemText(m_SelectedIndexOfList,3);UpdateData(false);}*pResult = 0;}////////////////////////////////////////////////////////////////////////////不如人意void CBookDlg::OnButtonBook(){UpdateData(true);if (m_name=="" ||m_publish==""||m_num==""){MessageBox("数据填写不完整,无法订阅刊物!","提醒!");return;}try{// int num=atoi((LPCTSTR)m_num);//////////////////////////////////////////////////////////////////////////_bstr_t sCmdText="Insert book (Aname,Pname,Bint) Values ("+ConvertCsToCs(hostname)+","+ConvertCsToCs(m_name)+","+ConvertCs ToCs(m_num)+")";_variant_t RecordAffected;m_oConn->Execute(sCmdText,&RecordAffected,adCmdText);MessageBox("您的订阅成功,欢迎下次再来订阅!","提醒!");return;}catch (__error e){CString sTip;sTip.Format("%s",e.ErrorMessage());}}//////////////////////////////////////////////////////////////////////////CString CBookDlg::ConvertIntToCString(int ID){CString sDes;sDes.Format("%d",ID);return sDes;}CString CBookDlg::ConvertCsToCs(CString ch){ch+="'";CString ch2="'";ch2+=ch;return ch2;}此段程序主要用于数据库中的Uuser表连接,并实现用户登录及订阅报刊的信息。