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

下载本文档

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

文档简介

页课程设计报告课程名称:面向对象程序设计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;SQLserver;二、操作分析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.图书归还:已借阅图书的归还四、设计界面软件的界面是用户与计算机进行信息数据交流的媒介,一个软件设计界面的人性化,友好与否将决定该软件的受欢迎度。所以在软件的界面设计方面做了很多次实验。软件图标(如图4-1):图4-1软件登录主界面设计(如图4-2)图4-2借阅用户界面(如图4-3)图4-3图书管理员界面(如图4-4)图4-4借阅登记人员界面(如图4-5)图4-5软件产品的美观与否,与本组设计的图书管理系统受欢迎程度息息相关!五、模块实现C++和数据库的操作本系统采用VC++MFC创建应用程序框架,使用ADO实现应用程序对数据库的连接和操作,SQLserver2005作为数据库驱动器。其中ADO对数据库的连接和操作步骤如下:5.1在本机上配置ODBC数据源由于ADO是微软推出的数据库接口新标准,到现在为止已经成为最通用最流行和操作性很好的一个数据库接口标准。首先仍然需要在服务器上配置数据源,本系统以本机作为服务器配置数据源。操作如下:在开始\控制面板\管理工具\ODBC数据源,之后操作(如图5-1)图5-1点击添加,运行(如图5-2)图5-2选择需要添加的数据源驱动程序,本系统为SQLserver。选择好驱动器后点击完成(如图5-3)图5-3自己任意填写一个数据源名称,选择好服务器,该服务器名与登录SQLserver时使用的服务器名一致即可。然后点击下一步(如图5-4)图5-4根据提示选好登录方式和信息以后点击下一步(如图5-5)图5-5选择需要连接的数据库点击下一步(如图5-6)图5-6点击完成后如下图,点击测试连接,若成功(如图5-7)图5-7以上边配置好了数据源。下面进行数据源与程序的连接1、利用windows系统自带的ADO库文件实现应用程序与数据源的连接通常首先可在C:\ProgramFiles\CommonFiles\System\ado目录下找到msado15.dll(不同安装目录可能路径不一样,操作系统版本的不同可能相应的msado15.dll文件版本不同),找到后复制粘贴到自建的应用程序目录下,和debug路径相同。本系统是基于对话框的程序,因此可在FileView的头文件里找到stdfax.h文件,将ADO用如下代码导入到程序(键入到stdfax.h里):#ifdefined(ADO2_OLD)#pragmamessage("UsingADO2TLB")#import<msado15.tlb>no_namespacerename("EOF","adoEOF")#else#pragmamessage("UsingLatestADO")#import"msado15.dll"no_namespacerename("EOF","adoEOF")#endif(如图5-7)图5-7ADO库导入后便可利用ADO库里提供的接口开始进行链接和操作数据库,具体代码如下:_ConnectionPtrPConnection;//定义指向数据库的指针(对象)_RecordsetPtrPRecordset;//定义指向结果集的指针(对象) ::CoInitialize(NULL);//COM接口初始化 try { UpdateData();//初始化和刷新程序窗口数据 PConnection.CreateInstance("ADODB.Connection"); PConnection->Mode=adModeReadWrite;//数据库打开模式设置 PConnection->ConnectionString=_T("DataSource=KAY-PC;Provider=SQLOLEDB.1;InitialCatalog=指定数据库名");//设置连接字符串 HRESULThr1=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"); CStringresult; 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.2)表借还人员登记表(如表5.3)表借阅信息表(如表5.4)表图书信息表(如表5.5)表5.5六、详细设计6.1主界面(如图6-1)图6-1主要代码如下:书刊检索:voidCBMSDlg::Ongosearch(){ //TODO:Addyourcontrolnotificationhandlercodehere //删除列定义 for(inti=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:Addextravalidationhere //AfxOleInit(); _ConnectionPtrPConnection; _RecordsetPtrPRecordset; ::CoInitialize(NULL); try { UpdateData();if(m_search.GetLength()==0) { AfxMessageBox("请输入书刊号!"); return; } ::CoInitialize(NULL);//接口初始化 PConnection.CreateInstance("ADODB.Connection"); PConnection->Mode=adModeReadWrite; //连接数据库 PConnection->ConnectionString=_T("DataSource=KAY-PC;Provider=SQLOLEDB.1;InitialCatalog=BMSDATABASE"); //PConnection指向数据库对象 HRESULThr1=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_tbstrSQL; CStringresult; result.Format("select*frombooks_basic_informationwherebook_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; } }注册:voidCBMSDlg::Oncheckin()//界面跳转函数{ //TODO:Addyourcontrolnotificationhandlercodehere Readercheckin*pDlg=newReadercheckin;pDlg->Create(IDD_readercheckin,this);pDlg->ShowWindow(SW_SHOW); }//将注册信息保存到数据库voidReadercheckin::OnOK(){ //TODO:Addextravalidationhere //CDialog::OnOK(); try { ::CoInitialize(NULL);//接口初始化 UpdateData();//数据更新 if(m_name.GetLength()==0||m_password.GetLength()==0) { AfxMessageBox("用户名或密码不能为空!"); return; } _bstr_tbstrSQL; CStringresult; _ConnectionPtrPConnection; _RecordsetPtrPRecordset; PConnection.CreateInstance(_uuidof(Connection));//创建实例 PRecordset.CreateInstance(_uuidof(Recordset)); //::CoInitialize(NULL);//接口初始化 PConnection->Mode=adModeUnknown; //连接数据库 PConnection->ConnectionString=_T("DataSource=KAY-PC;Provider=SQLOLEDB.1;InitialCatalog=BMSDATABASE"); //PConnection指向数据库对象 PConnection->Open(_T(""),_T("sa"),_T("qwe123"),adAsyncConnect); AfxMessageBox("注册成功!"); //打开记录集,PRecordset指针指向结果集//HRESULThr=PRecordset->Open(bstrSQL,PConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); //从编辑框获取值m_name及对应的sql语句 result.Format("insertintouser_account(Username,Password)values('%s','%s')",m_name,m_password); //执行sql语句 HRESULThr=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实现代码:voidReaderlogin::OnOK()//登录函数{ //TODO:Addextravalidationhere //CDialog::OnOK(); ::CoInitialize(NULL);////接口初始化 _ConnectionPtrPConnection; _RecordsetPtrPRecordset; 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("DataSource=KAY-PC;Provider=SQLOLEDB.1;InitialCatalog=BMSDATABASE"); //PConnection指向数据库对象 HRESULThr1=PConnection->Open(_T(""),_T("sa"),_T("qwe123"),adAsyncConnect); AfxMessageBox("正在验证身份信息!");//关键作用 } catch(_com_error&e) { AfxMessageBox(e.ErrorMessage()); ::CoUninitialize();//关闭 return; }try{ PRecordset.CreateInstance("ADODB.Recordset"); _bstr_tbstrSQL; CStringresult; result.Format("select*fromuser_accountwhereUsername='%s'andPassword='%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=newReadermain;//建立非模态对话框pDlg->Create(IDD_readermain,this);pDlg->ShowWindow(SW_SHOW);return; }}catch(_com_error&e){ AfxMessageBox(e.ErrorMessage()); ::CoUninitialize();//关闭 return;}}借阅用户界面(如图6-3)图6-3 实现代码:voidReadermain::Onbooksearch()//查询书刊信息{ //TODO:Addyourcontrolnotificationhandlercodehere //建显示表 //CListCtrl::DeleteColumn(); for(inti=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:Addextravalidationhere //AfxOleInit(); _ConnectionPtrPConnection; _RecordsetPtrPRecordset; ::CoInitialize(NULL); try { UpdateData();if(m_booksearch.GetLength()==0) { AfxMessageBox("请输入书刊号!"); return; } ::CoInitialize(NULL);//接口初始化 PConnection.CreateInstance("ADODB.Connection"); PConnection->Mode=adModeReadWrite; //连接数据库 PConnection->ConnectionString=_T("DataSource=KAY-PC;Provider=SQLOLEDB.1;InitialCatalog=BMSDATABASE"); //PConnection指向数据库对象 HRESULThr1=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_tbstrSQL; CStringresult; result.Format("select*frombooks_basic_informationwherebook_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) PRecordset->Close();PConnection->Close(); return; }} catch(_com_error&e) { AfxMessageBox(e.ErrorMessage()); return; } }voidReadermain::Onborrowkeep()//保存续借操作{ //TODO:Addextravalidationhere //AfxOleInit(); _ConnectionPtrPConnection; _RecordsetPtrPRecordset; _RecordsetPtrpr; ::CoInitialize(NULL); try { UpdateData(); ::CoInitialize(NULL);//接口初始化 PConnection.CreateInstance("ADODB.Connection"); PConnection->Mode=adModeReadWrite; //连接数据库 PConnection->ConnectionString=_T("DataSource=KAY-PC;Provider=SQLOLEDB.1;InitialCatalog=BMSDATABASE"); //PConnection指向数据库对象 HRESULThr1=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_tbstrSQL; CStringresult; CStringitem; CStringitem1; CStringitem2; CStringitem3; CStringitem4; CStringitem5; CStringitem6;//清除修改前数据库相关内容 result.Format("deletefromborrow_informationwhereuser_num='%s'",m_sno); HRESULThr1=pr->Open((_bstr_t)result,PConnection.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);//执行SQL语句 //AfxMessageBox("续借成功!"); //将表格数据插入到数据库操作for(inti=0;i<row;i++) {item1=m_list.GetItemText(i,0); item2=m_list.GetItemText(i,1); item3=m_list.GetItemText(i,2); item4=m_list.GetItemText(i,3); item5=m_list.GetItemText(i,4); item6=m_list.GetItemText(i,5); item.Format("insertintoborrow_information(book_no,book_name,borrow_date,return_date,outofdate,user_num,renew)values('%s','%s','%s','%s','%s','%s','%s')",item1,item2,item3,item4,item5,m_sno,item6);//SQL语句 PRecordset->Open((_bstr_t)item,PConnection.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);//执行SQL语句 }AfxMessageBox("续借成功!");return;} catch(_com_error&e) { AfxMessageBox(e.ErrorMessage()); return; } }voidReadermain::Onborrowinformation()//查询借阅信息{ //TODO:Addyourcontrolnotificationhandlercodehere //建显示表 for(inti=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);//查找 //TODO:Addextravalidationhere //AfxOleInit(); _ConnectionPtrPConnection; _RecordsetPtrPRecordset; ::CoInitialize(NULL); try { UpdateData(); ::CoInitialize(NULL);//接口初始化 PConnection.CreateInstance("ADODB.Connection"); PConnection->Mode=adModeReadWrite; //连接数据库 PConnection->ConnectionString=_T("DataSource=KAY-PC;Provider=SQLOLEDB.1;InitialCatalog=BMSDATABASE"); //PConnection指向数据库对象 HRESULThr1=PConnection->Open(_T(""),_T("sa"),_T("qwe123"),adAsyncConnect); AfxMessageBox("正在查询!"); } catch(_com_error&e) { AfxMessageBox(e.ErrorMessage()); return; } try{ PRecordset.CreateInstance("ADODB.Recordset"); _bstr_tbstrSQL; CStringresult; result.Format("select*fromborrow_informationwhereuser_num='%s'",m_sno);//从编辑框获取值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 { //获取结果集的行数 row=0; 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("borrow_date")); m_list.SetItemText(0,3,(char*)(_bstr_t)PRecordset->GetCollect("return_date")); m_list.SetItemText(0,4,(char*)(_bstr_t)PRecordset->GetCollect("outofdate")); m_list.SetItemText(0,5,(char*)(_bstr_t)PRecordset->GetCollect("renew")); m_list.SetEditColomn(5,TRUE);//允许第5列可直接编辑row=row+1;//行计数 PRecordset->MoveNext(); } if(PRecordset!=NULL) PRecordset->Close();PConnection->Close(); return; }} catch(_com_error&e) { AfxMessageBox(e.ErrorMessage()); return; }}管理员界面(如图6-4)图6-4主要代码://以查询和修改借阅者个人信息为例,其余功能代码只需修改参数voidManagermain::OnMbutton1(){ //TODO:Addyourcontrolnotificationhandlercodehere //TODO:Addyourcontrolnotificationhandlercodehere //TODO:Addyourcontrolnotificationhandlercodehere //建显示表 for(inti=0;i<10;i++) { m_managerlist.DeleteColumn(0); } m_managerlist.DeleteAllItems();//清空列表内容 m_managerlist.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE|LVS_EX_GRIDLINES); m_managerlist.InsertColumn(0,"学号",LVCFMT_LEFT,95,0); m_managerlist.InsertColumn(1,"姓名",LVCFMT_LEFT,95,1); m_managerlist.InsertColumn(2,"性别",LVCFMT_LEFT,95,2); m_managerlist.InsertColumn(3,"学院",LVCFMT_LEFT,95,3); m_managerlist.InsertColumn(4,"年级",LVCFMT_LEFT,95,4); m_managerlist.InsertColumn(5,"专业",LVCFMT_LEFT,95,5);//查找 //TODO:Addextravalidationhere //AfxOleInit(); _ConnectionPtrPConnection; _RecordsetPtrPRecordset; ::CoInitialize(NULL); try { UpdateData(); ::CoInitialize(NULL);//接口初始化 PConnection.CreateInstance("ADODB.Connection"); PConnection->Mode=adModeReadWrite; //连接数据库 PConnection->ConnectionString=_T("DataSource=KAY-PC;Provider=SQLOLEDB.1;InitialCatalog=BMSDATABASE"); //PConnection指向数据库对象 HRESULThr1=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_tbstrSQL; CStringresult; result.Format("select*fromuser_informationwhereuser_sno='%s'",m_editsno);//从编辑框获取值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_managerlist.InsertItem(0,""); m_managerlist.SetItemText(0,0,(char*)(_bstr_t)PRecordset->GetCollect("user_sno")); m_managerlist.SetItemText(0,1,(char*)(_bstr_t)PRecordset->GetCollect("user_name")); m_managerlist.SetItemText(0,2,(char*)(_bstr_t)PRecordset->GetCollect("user_sex")); m_managerlist.SetItemText(0,3,(char*)(_bstr_t)PRecordset->GetCollect("user_college")); m_managerlist.SetItemText(0,4,(char*)(_bstr_t)PRecordset->GetCollect("user_year")); m_managerlist.SetItemText(0,5,(char*)(_bstr_t)PRecordset->GetCollect("user_major")); m_managerlist.SetEditColomn(0,TRUE);//允许第0列可直接编辑m_managerlist.SetEditColomn(1,TRUE);//允许第1列可直接编辑m_managerlist.SetEditColomn(2,TRUE);//允许第2列可直接编辑 m_managerlist.SetEditColomn(3,TRUE);//允许第0列可直接编辑m_managerlist.SetEditColomn(4,TRUE);//允许第1列可直接编辑m_managerlist.SetEditColomn(5,TRUE);//允许第2列可直接编辑 PRecordset->MoveNext(); } if(PRecordset!=NULL) PRecordset->Close();PConnection->Close(); return; }} catch(_com_error&e) { AfxMessageBox(e.ErrorMessage()); return; } }添加和删除功能代码:voidManagermain::Ondeleteandaddbook()//增加和删除借阅者记录{ //TODO:Addyourcontrolnotificationhandlercodehere Del_Add_reader*pDlg=newDel_Add_reader;pDlg->Create(IDD_Del_Add_reader,this);pDlg->ShowWindow(SW_SHOW); }voidDel_Add_reader::OnDelborrow()//删除借阅记录{ //TODO:Addyourcontrolnotificationhandlercodehere _ConnectionPtrPConnection; _RecordsetPtrPRecordset; ::CoInitialize(NULL); CStringresult; try { UpdateData(); ::CoInitialize(NULL);//接口初始化 PConnection.CreateInstance("ADODB.Connection"); PRecordset.CreateInstance("ADODB.Recordset"); PConnection->Mode=adModeReadWrite; //连接数据库 PConnection->ConnectionString=_T("DataSource=KAY-PC;Provider=SQLOLEDB.1;InitialCatalog=BMSDATABASE"); //PConnection指向数据库对象 PConnection->Open(_T(""),_T("sa"),_T("qwe123"),adAsyncConnect); AfxMessageBox("正在删除!"); result.Format("deletefromborrow_informationwherebook_no='%s'anduser_num='%s'",m_book_no,m_no); HRESULThr1=PRecordset->Open((_bstr_t)result,PConnection.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);//执行SQL语句if(SUCCEEDED(hr1))AfxMessageBox("删除成功!"); DestroyWindow(); } catch(_com_error&e) { AfxMessageBox(e.ErrorMessage()); return; } }voidDel_Add_reader::OnAddborrow()//添加借阅记录{ //TODO:Addyourcontrolnotificationhandlercodehere _ConnectionPtrPConnection; _RecordsetPtrPRecordset; ::CoInitialize(NULL); CStringresult; try { UpdateData(); ::CoInitialize(NULL);//接口初始化 PConnection.CreateInstance("ADODB.Connection"); PRecordset.CreateInstance("ADODB.Recordset"); PConnection->Mode=adModeReadWrite; //连接数据库 PConnection->ConnectionString=_T("DataSource=KAY-PC;Provider=SQLOLEDB.1;InitialCatalog=BMSDATABASE"); //PConnection指向数据库对象 PConnection->Open(_T(""),_T("sa"),_T("qwe123"),adAsyncConnect); AfxMessageBox("正在添加!"); result.Format("insertintoborrow_information(book_no,book_name,borrow_date,return_date,outofdate,user_num,renew)values('%s','%s','%s','%s','%s','%s','%s')",m_book_no,m_book_name,m_borrow_date,m_return_date,m_outofdate,m_no,m_renew); HRESULThr1=PRecordset->Open((_bstr_t)result,PConnection.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);//执行SQL语句if(SUCCEEDED(hr1))AfxMessageBox("添加成功!"); DestroyWindow(); } catch(_com_error&e) { AfxMessageBox(e.ErrorMessage()); return; }}借阅登记人员界面(如图6-5)图6-5其功能代码与前面操作基本相同六、总结1、关于系统。本身是一个很普通的系统,但是学到的却不少,让自己进一步的了解C++面向对象编程也对语言进一步熟悉。2、关于遇到的问题,由于此前没有做过相对完整的项目,这次课程设计的过程中遇到了不少问题,甚至刚开始还不知道怎么上手做,但是借助图书馆和网络上的资料,大家建言献策,还是把问题一步一步解决了。3、关于学习本身,从接到课程设计要求到最终做出项目,这中间是一个漫长的探索过程,我的体会是,面对新知识要积极,面对问题要坚持。基于C8051F单片机直流电动机反馈控制系统的设计与研究基于单片机的嵌入式Web服务器的研究MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究基于模糊控制的电阻钎焊单片机温度控制系统的研制基于MCS-51系列单片机的通用控制模块的研究基于单片机实现的供暖系统最佳启停自校正(STR)调节器单片机控制的二级倒立摆系统的研究基于增强型51系列单片机的TCP/IP协议栈的实现基于单片机的蓄电池自动监测系统基于32位嵌入式单片机系统的图像采集与处理技术的研究基于单片机的作物营养诊断专家系统的研究基于单片机的交流伺服电机运动控制系统研究与开发基于单片机的泵管内壁硬度测试仪的研制基于单片机的自动找平控制系统研究基于C8051F040单片机的嵌入式系统开发基于单片机的液压动力系统状态监测仪开发模糊Smith智能控制方法的研究及其单片机实现一种基于单片机的轴快流CO〈,2〉激光器的手持控制面板的研制基于双单片机冲床数控系统的研究基于CYGNAL单片机的在线间歇式浊度仪的研制基于单片机的喷油泵试验台控制器的研制基于单片机的软起动器的研究和设计基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究基于单片机的机电产品控制系统开发基于PIC单片机的智能手机充电器基于单片机的实时内核设计及其应用研究基于单片机的远程抄表系统的设计与研究基于单片机的烟气二氧化硫浓度检测仪的研制\t"_blank

温馨提示

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

评论

0/150

提交评论