收藏 分销(赏)

C--课程设计-图书管理系统0.doc

上传人:胜**** 文档编号:2799509 上传时间:2024-06-06 格式:DOC 页数:41 大小:1.22MB 下载积分:10 金币
下载 相关 举报
C--课程设计-图书管理系统0.doc_第1页
第1页 / 共41页
C--课程设计-图书管理系统0.doc_第2页
第2页 / 共41页


点击查看更多>>
资源描述
课程设计报告 课程名称:面向对象程序设计C++ 设计题目: 图书管理系统 专业: 计算机科学与技术 姓名: 学号: 指导教师: 李晓虹 2015年12月30日 目录 一、系统背景 3 1.1 摘要 3 1.2 背景和目的 3 1.3 关键字 3 二、操作分析 3 2.1 关于使用者 4 三、需求分析 6 3.1 产品透视图 6 3.2 产品功能 6 3.3 流程 7 四、界面设计 8 4.1 软件图标 8 4.2 主界面 9 4.3 借阅用户界面 9 4.4 图书管理员界面 10 4.5 借还登记人员界面 10 五、系统具体功能的实现 11 5.1 数据源配置 11 5.2 导入ADO库文件 15 5.3 连接数据库 16 5.4 主界面和注册功能实现 18 5.5 登录功能实现 24 5.6 借阅用户功能实现功能实现 27 5.7 图书管理员功能实现 37 5.8 登记人员功能实现 44 六、结束语 44 6.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-2 3.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 Files\Common Files\System\ado目录下找到msado15.dll(不同安装目录可能路径不一样,操作系统版本的不同可能相应的msado15.dll文件版本不同),找到后复制粘贴到自建的应用程序目录下,和debug路径相同。 本系统是基于对话框的程序,因此可在FileView的头文件里找到stdfax.h文件,将ADO用如下代码导入到程序(键入到stdfax.h里): #if defined(ADO2_OLD) #pragma message( "Using ADO2 TLB" ) #import <msado15.tlb> no_namespace rename("EOF", "adoEOF") #else #pragma message( "Using Latest ADO" ) #import "msado15.dll" no_namespace rename("EOF", "adoEOF") #endif (如图5-7) 图5-7 1、 ADO库导入后便可利用ADO库里提供的接口开始进行链接和操作数据库,具体代码如下: _ConnectionPtr PConnection;//定义指向数据库的指针(对象) _RecordsetPtr PRecordset;//定义指向结果集的指针(对象) ::CoInitialize(NULL);//COM接口初始化 try { UpdateData();//初始化和刷新程序窗口数据 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.1 5.2.2管理员登录表(如表5.2) 表5.2 5.2.3借还人员登记表(如表5.3) 表5.3 5.2.4借阅信息表(如表5.4) 表5.4 5.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;i<10;i++) { m_datalist.DeleteColumn(0); } m_datalist.DeleteAllItems();//清空列表内容 m_datalist.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE|LVS_EX_GRIDLINES); m_datalist.InsertColumn(0,"书刊号",LVCFMT_LEFT,95,0); m_datalist.InsertColumn(1,"书名",LVCFMT_LEFT,95,1); m_datalist.InsertColumn(2,"作者",LVCFMT_LEFT,95,2); m_datalist.InsertColumn(3,"出版社",LVCFMT_LEFT,95,3); m_datalist.InsertColumn(4,"出版年月",LVCFMT_LEFT,95,4); m_datalist.InsertColumn(5,"总藏数”,LVCFMT_LEFT,95,5); m_datalist.InsertColumn(6,"可借数”, LVCFMT_LEFT,95,6); //查找 // TODO: Add extra validation here //AfxOleInit(); _ConnectionPtr PConnection; _RecordsetPtr PRecordset; ::CoInitialize(NULL); try { UpdateData(); if(m_search.GetLength()==0) { AfxMessageBox("请输入书刊号!"); return; } ::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("正在查询!"); 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; } else { while(!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 here Readercheckin *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; try { UpdateData(); 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; } else { if(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;i<10;i++) { m_list.DeleteColumn(0); } m_list.DeleteAllItems();//清空列表内容 m_list.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE|LVS_EX_GRIDLINES); m_list.InsertColumn(0,"书刊号",LVCFMT_LEFT,95,0); m_list.InsertColumn(1,"书名",LVCFMT_LEFT,95,1); m_list.InsertColumn(2,"作者",LVCFMT_LEFT,95,2); m_list.InsertColumn(3,"出版社",LVCFMT_LEFT,95,3); m_list.InsertColumn(4,"出版年月",LVCFMT_LEFT,95,4); m_list.InsertColumn(5,"总藏数",LVCFMT_LEFT,95,5); m_list.InsertColumn(6,"可借数",LVCFMT_LEFT,95,6); //查找 // TODO: Add extra validation here //AfxOleInit(); _ConnectionPtr PConnection; _RecordsetPtr PRecordset; ::CoInitialize(NULL); try { UpdateData(); if(m_booksearch.GetLength()==0) { AfxMessageBox("请输入书刊号!"); return; } ::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("正在查询!"); 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; } else { while(!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) PRecor
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服