C++课程设计:图书管理系统0.doc_第1页
C++课程设计:图书管理系统0.doc_第2页
C++课程设计:图书管理系统0.doc_第3页
C++课程设计:图书管理系统0.doc_第4页
C++课程设计:图书管理系统0.doc_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计报告课程名称:面向对象程序设计C+设计题目: 图书管理系统 专业: 计算机科学与技术 姓名: 学号: 指导教师: 李晓虹 2015年12月30日目录 一、系统背景31.1 摘要31.2 背景和目的31.3 关键字3二、操作分析32.1 关于使用者4三、需求分析63.1 产品透视图63.2 产品功能63.3 流程7四、界面设计84.1 软件图标84.2 主界面94.3 借阅用户界面94.4 图书管理员界面104.5 借还登记人员界面10五、系统具体功能的实现115.1 数据源配置115.2 导入ADO库文件155.3 连接数据库165.4 主界面和注册功能实现185.5 登录功能实现245.6 借阅用户功能实现功能实现275.7 图书管理员功能实现375.8 登记人员功能实现44六、结束语446.1 心得体会44一、系统背景【摘要】随着信息技术的发展,对于数据库的应用日益深入到人们的生活,本组的数据库项目是关于建立图书管理系统。对图书管理系统功能的扩展将友好化所有操作界面,使使用者更加轻松掌握借阅、管理、查询图书等操作。 【背景及目的】身处于信息高速发展的时代,信息资源当之无愧是世界最宝贵的资源之一。与此同时,信息作为一种虚拟资源,数量繁多且冗杂,资源类型繁多。热爱书物者学生,教育者,繁忙的上班族居多,图书管理系统将庞大的资源进行系统化的分类,动态地操作信息资源的流动。图书管理系统使人们的生活更加的便捷,高效。 【关键字】使用者;需求分析;设计界面;C+;MFC;SQL server;二、操作分析 2.1、关于使用者 将图书管理系统分为了四类,分别为:一般用户、借阅读者、借阅还书办理人员、图书管理人员。一般用户指不需经过注册和登录但可以使用图书管理系统给该身份提供的基本查询和浏览功能的用户,借阅读者即是需要注册和登录后才能进行图书借阅等功能的用户,借阅还书办理人员即是为借阅者提供服务的人员,包括借阅用户借阅和归还书刊登记的操作及相关信息查询。图书管理员是对图书基本信息、借阅用户信息管理,分类等操作的人员。因此界面的操作上应该包含这四类的使用者。图书管理系统的打开界面(如图2-1),点击“用户登录”。进入登录界面图2-1用户登录界面(如图2-2) 图2-2用户可以看到关于登录人员的分类,随即进行接下来的操作。对于没有借阅过的新用户,点击借阅用户注册按钮,弹出注册界面: 经过调试,该界面是用户友好界面,方便使用者的操作和注册。三、关于需求的分析3.1系统功能已注册用户登录功能;新用户注册功能;图书基本信息检索功能;已注册用户自身基本信息和借阅信息查询及书刊续借功能;图书管理员查询与修改借阅用户基本信息和借阅信息功能,图书信息更新功能。3.2系统E-R图(如图3-2) 图3-23.3功能流程前面我们组确定了对图书管理系统的使用对象的定位,需求分析是根据适用对象而定的,要求操作界面友好,操作方便,便于使用者进行登录,注册,图书查询,图书借阅的操作一体化,流程清楚明了,便于理解与使用。下图1是关于一般用户,借阅者,图书借阅管理员及图书管理员操作流程。3.4功能流程图(如图3-4) 图3-4上图是图书管理系统的建模过程,下面是该系统的使用者对向对系统的使用需求:1) 图书基本情况的录入、修改、删除等基本操作。2) 实现借书功能。3) 实现还书功能。4) 能方便的对图书进行查询。5) 续借。6) 借还情况登记。对实验的要求:图书编号可参考国家统一的图书编码方法,再完成基本功能模块的情况下,尽量使系统能具有通用性。从上述陈诉中可以发现以下元素:使用对象:1. 一般用户2. 借阅者3. 图书管理员4. 借还登记人员 基本用例:1.注册:新用户账号注册2.登录:老用户的系统登录3.图书查询:对需要搜索图书的查询4.图书借阅:已注册用户对图书的相关借阅5.图书数据更新:图书管理员对新图书数据的添加6.图书归还:已借阅图书的归还四、设计界面软件的界面是用户与计算机进行信息数据交流的媒介,一个软件设计界面的人性化,友好与否将决定该软件的受欢迎度。所以在软件的界面设计方面做了很多次实验。软件图标(如图4-1): 图4-1软件登录主界面设计(如图4-2) 图4-2借阅用户界面(如图4-3) 图4-3图书管理员界面(如图4-4) 图4-4借阅登记人员界面(如图4-5) 图4-5软件产品的美观与否,与本组设计的图书管理系统受欢迎程度息息相关!五、模块实现C+和数据库的操作本系统采用VC+MFC创建应用程序框架,使用ADO实现应用程序对数据库的连接和操作,SQL server 2005作为数据库驱动器。其中ADO对数据库的连接和操作步骤如下:5.1在本机上配置ODBC数据源由于ADO是微软推出的数据库接口新标准,到现在为止已经成为最通用最流行和操作性很好的一个数据库接口标准。首先仍然需要在服务器上配置数据源,本系统以本机作为服务器配置数据源。操作如下:在 开始控制面板管理工具ODBC数据源,之后操作(如图5-1) 图5-1 点击添加,运行(如图5-2) 图5-2选择需要添加的数据源驱动程序,本系统为SQL server。选择好驱动器后点击完成(如图5-3) 图5-3自己任意填写一个数据源名称,选择好服务器,该服务器名与登录SQL server时使用的服务器名一致即可。然后点击下一步(如图5-4) 图5-4根据提示选好登录方式和信息以后点击下一步(如图5-5) 图5-5选择需要连接的数据库点击下一步(如图5-6) 图5-6点击完成后如下图,点击测试连接,若成功(如图5-7) 图5-7以上边配置好了数据源。下面进行数据源与程序的连接1、利用windows系统自带的ADO库文件实现应用程序与数据源的连接通常首先可在C:Program FilesCommon FilesSystemado目录下找到msado15.dll(不同安装目录可能路径不一样,操作系统版本的不同可能相应的msado15.dll文件版本不同),找到后复制粘贴到自建的应用程序目录下,和debug路径相同。本系统是基于对话框的程序,因此可在FileView的头文件里找到stdfax.h文件,将ADO用如下代码导入到程序(键入到stdfax.h里):#if defined(ADO2_OLD)#pragma message( Using ADO2 TLB ) #import no_namespace rename(EOF, adoEOF) #else #pragma message( Using Latest ADO ) #import msado15.dll no_namespace rename(EOF, adoEOF) #endif(如图5-7) 图5-71、 ADO库导入后便可利用ADO库里提供的接口开始进行链接和操作数据库,具体代码如下:_ConnectionPtr PConnection;/定义指向数据库的指针(对象)_RecordsetPtr PRecordset;/定义指向结果集的指针(对象):CoInitialize(NULL);/COM接口初始化tryUpdateData();/初始化和刷新程序窗口数据 PConnection.CreateInstance(ADODB.Connection);PConnection-Mode=adModeReadWrite;/数据库打开模式设置PConnection-ConnectionString = _T(Data Source=KAY-PC;Provider=SQLOLEDB.1;Initial Catalog=指定数据库名);/设置连接字符串 HRESULT hr1=PConnection-Open(_T(),_T(sa),_T(qwe123),adAsyncConnect); /PConnection指向数据库对象AfxMessageBox(请稍后!);if(SUCCEEDED(hr1)/测试连接是否成功AfxMessageBox(连接数据库成功!);return;catch(_com_error &e)/捕捉错误信息AfxMessageBox(e.ErrorMessage();return;操作结果集的代码如下:try PRecordset.CreateInstance(ADODB.Recordset); CString result;result.Format(SQL语句);/将SQL语句用一个字符串表示 /打开记录集,PRecordset指针指向结果集 PRecordset-Open(_bstr_t)result,PConnection.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);/打开结果集if(PRecordset-BOF)&(PRecordset-adoEOF)/表中无记录AfxMessageBox(无查询结果!);if(PRecordset!=NULL)PRecordset-Close();/关闭结果集 PConnection-Close();/关闭数据库连接return;else/对结果集的操作if(PRecordset!=NULL)PRecordset-Close();/关闭结果集 PConnection-Close();/关闭数据库连接return; catch(_com_error &e)AfxMessageBox(e.ErrorMessage();return;5.2数据库设计5.2.1读者信息表(如表5.1) 表5.15.2.2管理员登录表(如表5.2) 表5.25.2.3借还人员登记表(如表5.3) 表5.35.2.4借阅信息表(如表5.4) 表5.45.2.5图书信息表(如表5.5) 表5.5六、详细设计6.1主界面(如图6-1) 图6-1主要代码如下:书刊检索:void CBMSDlg:Ongosearch() / TODO: Add your control notification handler code here/删除列定义for(int i=0;iMode=adModeReadWrite;/连接数据库PConnection-ConnectionString = _T(Data Source=KAY-PC;Provider=SQLOLEDB.1;Initial Catalog=BMSDATABASE);/PConnection指向数据库对象 HRESULT hr1=PConnection-Open(_T(),_T(sa),_T(qwe123),adAsyncConnect);AfxMessageBox(正在查询!);if(SUCCEEDED(hr1)/AfxMessageBox(连接数据库成功!);/return;catch(_com_error &e)AfxMessageBox(e.ErrorMessage();return;try PRecordset.CreateInstance(ADODB.Recordset); _bstr_t bstrSQL;CString result;result.Format(select * from books_basic_information where book_no=%s,m_search);/从编辑框获取值m_name及对应的sql语句 /打开记录集,PRecordset指针指向结果集 PRecordset-Open(_bstr_t)result,PConnection.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);if(PRecordset-BOF)&(PRecordset-adoEOF)/表中无记录AfxMessageBox(无检索结果!);if(PRecordset!=NULL)PRecordset-Close(); PConnection-Close();return;elsewhile(!PRecordset-adoEOF)m_datalist.InsertItem(0,);m_datalist.SetItemText(0,0,(char*)(_bstr_t)PRecordset-GetCollect(book_no);m_datalist.SetItemText(0,1,(char*)(_bstr_t)PRecordset-GetCollect(book_name);m_datalist.SetItemText(0,2,(char*)(_bstr_t)PRecordset-GetCollect(writer);m_datalist.SetItemText(0,3,(char*)(_bstr_t)PRecordset-GetCollect(ISBN);m_datalist.SetItemText(0,4,(char*)(_bstr_t)PRecordset-GetCollect(pressdate);m_datalist.SetItemText(0,5,(char*)(_bstr_t)PRecordset-GetCollect(sum_num);m_datalist.SetItemText(0,6,(char*)(_bstr_t)PRecordset-GetCollect(remain);PRecordset-MoveNext();if(PRecordset!=NULL)PRecordset-Close(); PConnection-Close();return; catch(_com_error &e)AfxMessageBox(e.ErrorMessage();return;注册:void CBMSDlg:Oncheckin() /界面跳转函数/ TODO: Add your control notification handler code hereReadercheckin *pDlg=new Readercheckin; pDlg-Create(IDD_readercheckin,this); pDlg-ShowWindow(SW_SHOW);/将注册信息保存到数据库void Readercheckin:OnOK() / TODO: Add extra validation here/CDialog:OnOK();try:CoInitialize(NULL);/接口初始化UpdateData();/数据更新if(m_name.GetLength()=0|m_password.GetLength()=0)AfxMessageBox(用户名或密码不能为空!);return;_bstr_t bstrSQL;CString result;_ConnectionPtr PConnection;_RecordsetPtr PRecordset;PConnection.CreateInstance(_uuidof(Connection);/创建实例PRecordset.CreateInstance(_uuidof(Recordset); /:CoInitialize(NULL);/接口初始化PConnection-Mode=adModeUnknown; /连接数据库PConnection-ConnectionString = _T(Data Source=KAY-PC;Provider=SQLOLEDB.1;Initial Catalog=BMSDATABASE);/PConnection指向数据库对象 PConnection-Open(_T(),_T(sa),_T(qwe123),adAsyncConnect);AfxMessageBox(注册成功!);/打开记录集,PRecordset指针指向结果集 /HRESULT hr=PRecordset-Open(bstrSQL,PConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); /从编辑框获取值m_name及对应的sql语句result.Format(insert into user_account(Username,Password) values(%s,%s),m_name,m_password);/执行sql语句HRESULT hr=PConnection-Execute(_bstr_t)result,NULL,adCmdText);if(SUCCEEDED(hr)/AfxMessageBox(注册成功!);if(PConnection-State)/如果连接数据库有效 PConnection-Close();/关闭数据库 PConnection = NULL;/指针值为空:CoUninitialize();DestroyWindow();return;catch(_com_error &e)AfxMessageBox(e.ErrorMessage();:CoUninitialize();return;登录界面(如图6-2) 图6-2 实现代码:void Readerlogin:OnOK() /登录函数/ TODO: Add extra validation here/CDialog:OnOK(); :CoInitialize(NULL);/接口初始化_ConnectionPtr PConnection;_RecordsetPtr PRecordset;tryUpdateData(); if(m_sno.GetLength()=0|m_password.GetLength()=0)AfxMessageBox(用户名或密码不能为空!);ShowWindow(SW_HIDE); return; PConnection.CreateInstance(ADODB.Connection);PConnection-Mode=adModeReadWrite;/连接数据库PConnection-ConnectionString = _T(Data Source=KAY-PC;Provider=SQLOLEDB.1;Initial Catalog=BMSDATABASE);/PConnection指向数据库对象 HRESULT hr1=PConnection-Open(_T(),_T(sa),_T(qwe123),adAsyncConnect);AfxMessageBox(正在验证身份信息!);/关键作用catch(_com_error &e)AfxMessageBox(e.ErrorMessage();:CoUninitialize();/关闭return; try PRecordset.CreateInstance(ADODB.Recordset); _bstr_t bstrSQL;CString result;result.Format(select * from user_account where Username=%s and Password=%s,m_sno,m_password);/从编辑框获取值m_name及对应的sql语句 /打开记录集,PRecordset指针指向结果集 PRecordset-Open(_bstr_t(result),PConnection.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText); if(PRecordset-BOF)&(PRecordset-adoEOF)/表中无记录AfxMessageBox(用户名或密码错误或该用户不存在!);:CoUninitialize();/关闭return;elseif(PConnection-State)/如果连接数据库有效 PConnection-Close();/关闭数据库 PConnection = NULL;/指针值为空:CoUninitialize();/关闭/DestroyWindow();ShowWindow(SW_HIDE);Readermain *pDlg=new Readermain;/建立非模态对话框 pDlg-Create(IDD_readermain,this); pDlg-ShowWindow(SW_SHOW);return; catch(_com_error &e) AfxMessageBox(e.ErrorMessage();:CoUninitialize();/关闭return; 借阅用户界面(如图6-3) 图6-3实现代码:void Readermain:Onbooksearch() /查询书刊信息/ TODO: Add your control notification handler code here/建显示表/CListCtrl:DeleteColumn();for(int i=0;iMode=adModeReadWrite;/连接数据库PConnection-ConnectionString = _T(Data Source=KAY-PC;Provider=SQLOLEDB.1;Initial Catalog=BMSDATABASE);/PConnection指向数据库对象 HRESULT hr1=PConnection-Open(_T(),_T(sa),_T(qwe123),adAsyncConnect);AfxMessageBox(正在查询!);if(SUCCEEDED(hr1)/AfxMessageBox(连接数据库成功!);/return;catch(_com_error &e)AfxMessageBox(e.ErrorMessage();return;try PRecordset.CreateInstance(ADODB.Recordset); _bstr_t bstrSQL;CString result;result.Format(select * from books_basic_information where book_no=%s,m_booksearch);/从编辑框获取值m_name及对应的sql语句 /打开记录集,PRecordset指针指向结果集 PRecordset-Open(_bstr_t)result,PConnection.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);if(PRecordset-BOF)&(PRecordset-adoEOF)/表中无记录AfxMessageBox(无检索结果!);if(PRecordset!=NULL)PRecordset-Close(); PConnection-Close();return;elsewhile(!PRecordset-adoEOF)m_list.InsertItem(0,);m_list.SetItemText(0,0,(char*)(_bstr_t)PRecordset-GetCollect(book_no);m_list.SetItemText(0,1,(char*)(_bstr_t)PRecordset-GetCollect(book_name);m_list.SetItemText(0,2,(char*)(_bstr_t)PRecordset-GetCollect(writer);m_list.SetItemText(0,3,(char*)(_bstr_t)PRecordset-GetCollect(ISBN);m_list.SetItemText(0,4,(char*)(_bstr_t)PRecordset-GetCollect(pressdate);m_list.SetItemText(0,5,(char*)(_bstr_t)PRecordset-GetCollect(sum_num);m_list.SetItemText(0,6,(char*)(_bstr_t)PRecordset-GetCollect(remain);PRecordset-MoveNext();if(PRecordset!=NULL)PRecordset-Close(); PConnection-Close();return; catch(_com_error &e)AfxMessageBox(e.ErrorMessage();return;void Readermain:Onborrowkeep()/保存续借操作/ TODO: Add extra validation here/AfxOleInit();_ConnectionPtr PConnection;_RecordsetPtr PRecordset;_RecordsetPtr pr;:CoInitialize(NULL);tryUpdateData(); :CoInitialize(NULL);/接口初始化PConnection.CreateInstance(ADODB.Connection);PConnection-Mode=adModeReadWrite;/连接数据库PConnection-ConnectionString = _T(Data Source=KAY-PC;Provider=SQLOLEDB.1;Initial Catalog=BMSDATABASE);/PConnection指向数据库对象 HRESULT hr1=PConnection-Open(_T(),_T(sa),_T(qwe123),adAsyncConnect);AfxMessageBox(确定续借?);catch(_com_error &e)AfxMessageBox(e.ErrorMessage();return;try PRecordset.CreateInstance(ADODB.Recordset);pr.CreateInstance(ADODB.Recordset); _bstr_t bstrSQL;CString result;CString item;CString item1;CString item2;CString item3;CString item4;CString item5;CString item6; /清除修改前数据库相关内容result.Format(delete from borrow_information where user_num=%s,m_sno);HRESULT hr1=pr-Open(_bstr_t)result,PConnection.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);/执行SQL语句 /AfxMessageBox(续借成功!);/将表格数据插入到数据库操作 for(int i=0;iOpen(_bstr_t)item,PConnection.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);/执行SQL语句 AfxMessageBox(续借成功!); return; catch(_com_error &e)AfxMessageBox(e.ErrorMessage();return;void Readermain:Onborrowinformation()/查询借阅信息/ TODO: Add your control notification handler code here/建显示表for(int i=0;iMode=adModeReadWrite;/连接数据库PConnection-ConnectionString = _T(Data Source=KAY-PC;Provider=SQLOLEDB.1;Initial Catalog=BMSDATABASE);/PConnection指向数据库

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论