c++课程设计2.docx
《c++课程设计2.docx》由会员分享,可在线阅读,更多相关《c++课程设计2.docx(16页珍藏版)》请在冰豆网上搜索。
c++课程设计2
VisualC++面向对象程序设计
课程设计
题目:
图书查询系统
院系:
数理学院
专业班级:
12信息与计算科学一班
学号姓名:
12207010137王建春
12207010109姜阿华
12207010116张安柱
2015年1月4号
一、功能:
通过该系统可以对书库中的图书进行查询,查询结果显示的主要内容包括:
书号、书名、作者、出版社、图书的借阅状态(是否可借)。
二、设计
1.数据库设计:
采用本地数据库,数据库形式可自行选择,数据库中包括一个数据表,数据表中包含以下字段:
书号、书名、作者、出版社、借阅状态。
其中书号为关键字段。
数据库和数据表的名称自定。
2.用户界面设计:
建立四个用户界面:
系统登录界面、查询条件选择界面、查询条件录入界面、查询结果显示界面。
(1)系统登录界面
一个引导界面,确定是否进入系统或退出系统。
(2)查询条件选择界面
选择进行查询的条件,如选择书名,则表示按书名进行查询。
(3)查询条件录入界面
输入所要的查询内容,系统即可根据该条件查询所有满足该条件的图书。
(4)查询结果显示界面
显示所有满足查询条件的图书。
三、要求:
1.查询时可实现模糊查询,查询结果以表格的形式显现给用户。
如果没有满足条件的图书,则应给出提示,提示可使用消息框的形式。
2.模糊查询:
只要输入查询条件的部分内容,即可查询所有包含该条件的图书。
VC中界面的操作与管理
1.启动VC6.0
使用基于对话框的开发模式,出现下面的对话框:
2.先删除无用的出事空间,然后再空间工具栏中选择相应的空间添加到对话框的面板上,并对这些按钮、编辑栏等进行布局。
3,设计界面,添加类向导,在每个类中添加OnInitDialog()函数
设置登陆的类位CPengDlg
在主程序中peng.cpp判断登录条件代码如下:
BOOLCPengApp:
:
InitInstance()
{
AfxEnableControlContainer();
ADOConnm_adoconn;
CPengDlgdlg;
//inti=0;
if(dlg.DoModal()==IDOK)
{
CStringsqlstr;
try
{
sqlstr.Format("select*fromMANAGERwhereMPASSWORD='%s'andMID='%s'",dlg.m_password,dlg.m_id);
_RecordsetPtrm_pRs;
m_pRs=m_adoconn.GetRecordSet((_bstr_t)sqlstr);//执行查询
CStringstr1,str2;
str1=(LPCTSTR)(_bstr_t)(m_pRs->GetCollect("MPASSWORD"));
str2=(LPCTSTR)(_bstr_t)(m_pRs->GetCollect("MID"));
str1.TrimRight();//去掉空字符
str2.TrimRight();
if(str2==dlg.m_id||str1==dlg.m_password)
{
//AfxMessageBox("登陆成功");
CSUCCESSDlgdlg;
dlg.m_id=str2;
dlg.m_name=(LPCTSTR)(_bstr_t)(m_pRs->GetCollect("MNAME"));
dlg.DoModal();
}
else
{
AfxMessageBox("登陆失败");
returnfalse;
}
}
catch(...)//异常处理
{
AfxMessageBox("ID或密码输入错误!
");
returnfalse;
}
}
returntrue;
}
如果上述验证成功转到登录成功界面如下:
显示相关信息,然后点击确定登录到主界面:
点击相关按钮可以跳转到不同的界面
一.点击查询显示页面如下(类名为CLOOKDlg):
实现查询功能代码如下:
voidCLOOKDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLOOKDlg)
DDX_Control(pDX,IDC_LIST1,m_resultlist1);
DDX_Text(pDX,IDC_CONDITION,m_condition);
DDX_CBString(pDX,IDC_COMBO1,m_combo);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CLOOKDlg,CDialog)
//{{AFX_MSG_MAP(CLOOKDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CLOOKDlgmessagehandlers
BOOLCLOOKDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
inti=0;
m_resultlist1.ModifyStyle(0,LVS_REPORT);
m_resultlist1.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE|LVS_EX_GRIDLINES);
m_resultlist1.InsertColumn(0,"书号",0,100);
m_resultlist1.InsertColumn(1,"书名",0,100);
m_resultlist1.InsertColumn(2,"作者",0,100);
m_resultlist1.InsertColumn(3,"出版社",0,100);
m_resultlist1.InsertColumn(4,"借阅状态",0,100);
CComboBox*pComb=(CComboBox*)GetDlgItem(IDC_COMBO1);
pComb->AddString("书号");
pComb->AddString("书名");
pComb->AddString("作者");
pComb->AddString("出版社");
pComb->AddString("借阅状态");
pComb->SetCurSel(0);
ADOConnado;
_RecordsetPtrm_recordset;
CStringsql="select*frombook";
m_recordset=ado.GetRecordSet((_bstr_t)sql);
ado.OnInitADOConn();
while(!
m_recordset->adoEOF)
{
CStringc1=(LPCTSTR)(_bstr_t)m_recordset->GetCollect("BNO");
CStringc2=(LPCTSTR)(_bstr_t)m_recordset->GetCollect("BNAME");
CStringc3=(LPCTSTR)(_bstr_t)m_recordset->GetCollect("WRITER");
CStringc4=(LPCTSTR)(_bstr_t)m_recordset->GetCollect("PUBLISH");
CStringc5=(LPCTSTR)(_bstr_t)m_recordset->GetCollect("REGISTER");
m_resultlist1.InsertItem(i,"");
m_resultlist1.SetItemText(i,0,c1);
m_resultlist1.SetItemText(i,1,c2);
m_resultlist1.SetItemText(i,2,c3);
m_resultlist1.SetItemText(i,3,c4);
m_resultlist1.SetItemText(i,4,c5);
m_recordset->MoveNext();
}
returntrue;
}
voidCLOOKDlg:
:
OnOK()
{
//TODO:
Addextravalidationhere
//CDialog:
:
OnOK();
UpdateData(TRUE);
m_resultlist1.DeleteAllItems();
CStringtemp;
CStringsqlstr;
ADOConnado;
CComboBox*pComb=(CComboBox*)GetDlgItem(IDC_COMBO1);
intn=pComb->GetCurSel();
switch(n)
{
case0:
temp="BNO";
break;
case1:
temp="BNAME";
break;
case2:
temp="WRITER";
break;
case3:
temp="PUBLISH";
break;
case4:
temp="REGISTER";
break;
}
//if(m_condition=="")
//{
//MessageBox("请输入查询条件!
");
//return;
//}
sqlstr.Format("select*frombookwhere%slike'%%%s%%'",temp,m_condition);
ado.OnInitADOConn();
intk=0;
inti=0;
intcount=0;
_RecordsetPtrm_recordset;
m_recordset=ado.GetRecordSet((_bstr_t)sqlstr);
while(!
m_recordset->adoEOF)
{
count++;
CStringw1=(LPCTSTR)(_bstr_t)m_recordset->GetCollect("BNO");
CStringw2=(LPCTSTR)(_bstr_t)m_recordset->GetCollect("BNAME");
CStringw3=(LPCTSTR)(_bstr_t)m_recordset->GetCollect("WRITER");
CStringw4=(LPCTSTR)(_bstr_t)m_recordset->GetCollect("PUBLISH");
CStringw5=(LPCTSTR)(_bstr_t)m_recordset->GetCollect("REGISTER");
m_resultlist1.InsertItem(i,"");
m_resultlist1.SetItemText(i,0,w1);
m_resultlist1.SetItemText(i,1,w2);
m_resultlist1.SetItemText(i,2,w3);
m_resultlist1.SetItemText(i,3,w4);
m_resultlist1.SetItemText(i,4,w5);
UpdateData(FALSE);
m_recordset->MoveNext();
k++;
}
if(count>0)
{
CStringstr;
str.Format("找到%d条记录!
",count);
MessageBox(str);
}
else
{
MessageBox("没有找到相关记录!
");
}
}数据库的管理与操作
1,表格的建立如下:
管理者的表格,
书本的表格:
3.创建代码与数据库的连接:
先导入ado的包,导入代码如下:
#import"c:
\ProgramFiles\CommonFiles\System\ado\msado15.dll"no_namespacerename("EOF","adoEOF")rename("BOF","adoBOF")
建立一个可以操控数据库的类(ADOConn):
其代码如下:
头文件中,定义各个函数的声明:
//ADOConn.h:
interfacefortheADOConnclass.
//
//////////////////////////////////////////////////////////////////////
#if!
defined(AFX_ADOCONN_H__C678E5FE_9EB5_41BE_9D9D_F2C100A3E559__INCLUDED_)
#defineAFX_ADOCONN_H__C678E5FE_9EB5_41BE_9D9D_F2C100A3E559__INCLUDED_
#import"c:
\ProgramFiles\CommonFiles\System\ado\msado15.dll"no_namespacerename("EOF","adoEOF")rename("BOF","adoBOF")
#if_MSC_VER>1000
#pragmaonce
#endif//_MSC_VER>1000
classADOConn
{
//定义变量
public:
//添加一个指向Connection对象的指针:
_ConnectionPtrm_pConnection;
//添加一个指向Recordset对象的指针:
_RecordsetPtrm_pRecordset;
//定义方法
public:
ADOConn();
virtual~ADOConn();
//初始化—连接数据库
voidOnInitADOConn();
//执行查询
_RecordsetPtr&GetRecordSet(_bstr_tbstrSQL);
//执行SQL语句,InsertUpdate_variant_t
BOOLExecuteSQL(_bstr_tbstrSQL)
voidExitConnect();
};
#endif//!
defined(AFX_ADOCONN_H__C678E5FE_9EB5_41BE_9D9D_F2C100A3E559__INCLUDED_)
在其实现方法中(ADOConn.cpp)中实现上述功能代码如下:
//ADOConn.cpp:
implementationoftheADOConnclass.
//
//////////////////////////////////////////////////////////////////////
#include"stdafx.h"
#include"peng.h"
#include"ADOConn.h"
#ifdef_DEBUG
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#definenewDEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
//Construction/Destruction
//////////////////////////////////////////////////////////////////////
ADOConn:
:
ADOConn()
{
}
ADOConn:
:
~ADOConn()
{
}
//初始化—连接数据库
voidADOConn:
:
OnInitADOConn()
{
//初始化OLE/COM库环境
:
:
CoInitialize(NULL);
try
{
//创建Connection对象
m_pConnection.CreateInstance("ADODB.Connection");
//设置连接字符串,必须是BSTR型或者_bstr_t类型
_bstr_tstrConnect="Provider=SQLOLEDB;Server=.;Database=library;uid=ypf;pwd=123;";
//m_pConnection->Open(Provider=SQLOLEDB;IntegratedSecurity=SSPI;PersistSecurityInfo=False;InitialCatalog=suntest;DataSource=.;UserId=ypf;Password=123;);
m_pConnection->Open(strConnect,"","",adModeUnknown);
}
//捕捉异常
catch(_com_errore)
{
//显示错误信息
AfxMessageBox(e.Description());
}
}
//执行查询
_RecordsetPtr&ADOConn:
:
GetRecordSet(_bstr_tbstrSQL)
{
try
{
//连接数据库,如果Connection对象为空,则重新连接数据库
if(m_pConnection==NULL)
OnInitADOConn();
//创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
//取得表中的记录
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
//捕捉异常
catch(_com_errore)
{
//显示错误信息
AfxMessageBox(e.Description());
}
//返回记录集
returnm_pRecordset;
}
//执行SQL语句,InsertUpdate_variant_t
BOOLADOConn:
:
ExecuteSQL(_bstr_tbstrSQL)
{
//_variant_tRecordsAffected;
try
{
//是否已经连接数据库
if(m_pConnection==NULL)
OnInitADOConn();
//Connection对象的Execute方法:
(_bstr_tCommandText,
//VARIANT*RecordsAffected,longOptions)
//其中CommandText是命令字串,通常是SQL命令。
//参数RecordsAffected是操作完成后所影响的行数,
//参数Options表示CommandText的类型:
adCmdText-文本命令;adCmdTable-表名
//adCmdProc-存储过程;adCmdUnknown-未知
m_pConnection->Execute(bstrSQL,NULL,adCmdText);
returntrue;
}
catch(_com_errore)
{
AfxMessageBox(e.Description());
returnfalse;
}
}
voidADOConn:
:
ExitConnect()
{
//关闭记录集和连接
if(m_pRecordset!
=NULL)
m_pRecordset->Close();
m_pConnection->Close();
//释放环境
:
:
CoUninitialize();
}