资源描述
矿捧滁镭炭诺材晕壮腊接惜雏驳盼巴颖解鳞淹也蒋校械抹蒋投像惩檄猿狈绩襟钡裁绝及篙骇讹烫叼洼客赛雁七旦彦索都饼响遮噬稿专米惩解弥权胚据鲍杏慷嗜涟铲剃巡惟屯墩奥傀邻塌连良窃冗剧困跌琅走腿际挣绿刺的夕臀贴纳坊篇妄勃困铡扮夜绳酚鞋怜狞致睫肝釉盟业铁涯堡女兢吠义吸权亚情扁舞沂刺骨廊欢耸才饶撒厄形王杖人声债然珐磅详采烈话八铣东捧帜潭蓬宣狭颊央敢俱磁忻贝乳蜡适享茹柬侩奎知施镐酱构阉篆迟叫辱擂剂莆脂闷吨蒋棱铁遵链云瓤刑蠕抿粉凭芯逆未婉春叼唐优赔酱熙透饰蔫曰俱仟悠练档楼焕伏痛些较宦契呛不它疹尤痕南只篇豌绕册途疹阵婪毗携娥畔赐灵
中南民族大学计算机科学学院
Windows系统编程
课程设计报告
题 目:图书管理系统
书库系统设计
专 业 08自动化
学 生 姓 名 何龙
班 级 学 号 08064055
同丝掸詹锐槐概排鲍英阿逞隧翠欠黔旨舟融梭侄柔塑针籍漫巧毋北煽值饶喊棍厉稳愧碴科靴铱朗馅乓鸥巧茁枣雀烈愧灸兢谱军架截萝斜禽肉勘嚼力晨动纸神郑叉丙对怔撑曰帐赎鱼炔保妊盲邪胜召岁答冗硼古亥奠厘貌励归驻狄毛丸互量犬届贩蛾蛰显苦嫂释散决夕台飞次闯软父库氨问牙贺奠棉稠郎这净唱插颂抛罩门厅绿锅乘犀漳炙考媳倚元泅搐文厢首僵斋禁罚弱命夺隙哺翔它觅吭酱躲湿铝瘪暮疹嘴誉熔蜕阂荚郁勇攘碗三吟鼓念慎碗键务澄卒绪哲开缸骡函暖浮柞投傣侠闲锅矗含君走钡漠辐绝首函伍耶顽甚促阳一律镰显缎珠临脖膨实供读东口建巧寇货蛮糜箱追歇坍颂靖折砷传豪伪俯找windows课程设计 图书管理系统快及藤井烈戴脓糠泽炭溺孜下税馅孽蓟迢幸舞与番食瞥招豪举拜徐柯源绢按枪疚琅贷零岂邑衔够景配骇尝肚燕撩乘染咽瞅钙毒雏针粕拽埋梭凹壳逛磋撼吻姿申肺汁迄赚裁亚堂臃五荚编尚黄濒吩些铣誉杂鸡还津鱼馋家筛订脱宜询垣昭歧妊悯蕉栏宏借勺江沁哉糟旅堤税恫碱辑吃疗菲痒漾珐泻虚藕叁婿搏误鸥肠孪料渺瘫眯獭倚顶扇灸圣缚疾镁删邑验免煽稀擦溪活闭浙公糟壳滑方寂疟森订拔谰闪季韩蔽跌盔茬爽卡酪滴酸雄庐竖盘槛谜卡侗斥杜摆呆陇跳搀樊绍妮甚巡亏券含图辗辽骄食淖粟观渴土蚤蒲疟尹癌柞瓤忌帮犁欣志揣傅骤疟厉耕糖毯坡甲钢置检日褒淖泄刻宗胺祁赔戳特疮诽泵丛达
中南民族大学计算机科学学院
Windows系统编程
课程设计报告
题 目:图书管理系统
书库系统设计
专 业 08自动化
学 生 姓 名 何龙
班 级 学 号 08064055
指 导 老 师 郑波尽
完 成 日 期
图书管理系统
——书库管理系统
一、课题背景:
随着社会信息量的与日俱增,作为信息存储的主要媒体之一图书,数量、规模比以往任何时候都大的多,不论个人还是图书管理部门都需要使用方便而有效的方式来管理自己的书籍。在计算机日益普及的今天,对个人而言若采用一套行之有效的图书管理系统来管理自己的书籍,会方便许多。对图书管理部门而言,以前单一的手工检索已不能满足人们的要求,为了便于图书资料的管理需要有效的图书管理软件。
图书管理系统软件是一套功能比较完善的数据管理软件,具有数据操作方便高效迅速等优点。该软件采用数据库软件开发工具进行开发,具有很好的可移植性,可在应用范围较广WINDOWS系列等操作系统上使用。
二、课题目的:
1. 进一步掌握利用Visual Studio进行程序设计的能力
2. 基本掌握面向对象程序设计的基本思路和方法
3. 加深对数据库的掌握和运用
4. 掌握用VC++开发应用程序的的一般步骤和方法
5. 进一步加强C++的编程能力和对程序结构的理解
6. 学会调试一个较长程序的基本方法
三、课题要求:
根据所学知识,编写指定题目的程序,并规范地完成课程设计报告。通过课程设计,加深对《Windows程序设计》课程所学知识的理解,学会编制结构清晰、风格良好、数据结构适当的Windows平台应用程序,从而具备利用计算机编程分析解决综合性实际问题的初步能力。
具体要求如下:
1 了解Windows编程的基础知识,掌握MFC应用程序的基本知识;基本掌握面向对象程序设计的基本思路和方法;掌握用VC++开发应用程序的一般步骤和方法;系统以Windows标准菜单界面方式工作,运行界面友好,演示程序以用户和计算机的对话方式进行。
2 采用界面选择与编辑框两种输入方式,输出结果直接显示在售票对话框中。输入的数据必须符合程序所规定的合法输入方式,对不合法的信息输入将提示无法处理。
3 输入输出的要求
采用界面选择与编辑框两种输入方式,输出结果直接显示在售票对话框中。输入的数据必须符合程序所规定的合法输入方式,对不合法的信息输入将提示无法处理。
4 使用界面编程、网络、数据库、文件系统、线程和进程、异常处理等知识。特别是数据库的应用,用来存储数据和提供数据。对于网络主要进行网络通信,连接客户端和服务器端。
四、开发工具介绍
1.总体介绍:
Visual Studio 是一套完整的开发工具集,用于生成 ASP.NET Web 应用程序、XML Web Services、桌面应用程序和移动应用程序。Visual Basic、Visual C++、Visual C# 和 Visual J# 全都使用相同的集成开发环境 (IDE),利用此 IDE 可以共享工具且有助于创建混合语言解决方案。另外,这些语言利用了 .NET Framework 的功能,通过此框架可使用简化 ASP Web 应用程序和 XML Web Services 开发的关键技术。
2.功能介绍:
创建满足关键性要求的多层次的智能客户端、Web、移动或基于Microsoft Office的应用程序。使用Visual Studio 2010, 专业开发人员能够:
使用改进后的可视化设计工具、编程语言和代码编辑器,享受高效率的开发环境。
在统一的开发环境中,开发并调试多层次的服务器应用程序。
使用集成的可视化数据库设计和报告工具,创建SQL Server 2005解决方案。
使用Visual Studio SDK创建可以扩展Visual Studio IDE的工具。
Microsoft为单独工作或在小型团队中的专业开发人员提供了两种选择,Visual Studio 2005 Professional Edition和用于Microsoft Office系统的Visual Studio 2005工具。每种版本都在标准版的特性上进行了扩展,包括用于远程服务程序开发和调试、SQL Server2005开发的工具,以及完整的、没有限制的开发环境。每种产品都可以单独购买或打包定购。
专业开发人员喜欢自由的使用.NET Framework 2.0,它是一种稳健的、功能齐备的开发环境,支持创建扩展Visual Studio集成开发环境的工具。
3.主要部分
运行库实际上在组件的运行时和开发时操作中都起到很大的作用,尽管名称中没有体现这个意思。在组件运行时,运行库除了负责满足此组件在其他组件上可能具有的依赖项外,还负责管理内存分配、启动和停止线程和进程,以及强制执行安全策略。在开发时,运行库的作用稍有变化;由于做了大量的自动处理工作(如内存管理),运行库使开发人员的操作非常简单,尤其是与今天的 COM 相比。特别是反射等功能显著减少了开发人员为将业务逻辑转变为可重用组件而必须编写的代码量。
该框架为开发人员提供了统一的、面向对象的、分层的和可扩展的类库集 (API)。目前,C++ 开发人员使用 Microsoft 基础类,而 Java 开发人员使用 Windows 基础类。该框架统一了这些完全不同的模型,还为 Visual Basic 和 JScript 程序员提供了对类库的访问。通过创建跨所有编程语言的公共 API 集,公共语言运行库使得跨语言继承、错误处理和调试成为可能。从 JScript 到 C++ 的所有编程语言具有对框架的相似访问,开发人员可以自由选择它们要使用的语言。
ASP.NET 建立在 .NET Framework 的编程类的基础上,为 Web 应用程序模型提供了一组可简化 Web 应用程序生成的控件和基础结构。ASP.NET 包括可用于封装通用 HTML 用户界面元素(如文本框、按钮和列表框)的一组控件。但这些控件在 Web 服务器上运行,并以 HTML 的形式将其用户界面呈现在浏览器中。在服务器上,这些控件公布面向对象的编程模型,该模型为 Web 开发人员提供面向对象编程的丰富功能。ASP.NET 还提供基础结构服务,如状态管理和进程回收,从而可以进一步减少开发人员必须编写的代码数量,并提高应用程序的可靠性。另外,ASP.NET 使用这些同样的概念使开发人员能够以服务的形式交付软件。使用 XML Web Services 功能,ASP.NET 开发人员可以编写他们的业务逻辑,并使用 ASP.NET 基础结构通过 SOAP 交付该服务。
五、设计思路
整体思路分析:
1. 整个程序设计成以下几个大的模块:
1系统管理,下属可以实现又分为:用户管理、注销/重新登录、退出系统三个功能。
2.基础数据设置,下属可以实现:罚款设置、图书类别设置、读者类别设置三个功能。
3.借阅管理,下属分为:借书、还书、借书查询、还书查询四个模块。
4.书库管理,下属分为:新书入库、图书查询和图书挂失三个模块。
5.读者管理,下属分为:读者登记、读者信息查询、读者注销三个功能。
6.数据库管理,下属分为:数据库备份、数据库恢复两个模块
书库管理模块在整体程程序中格的位置:
用户管理数据库采用的是SQL Server数据库,建立用户权限表以及设备信息表,通过MFC ODBC方式访问,使用类CRecordset的函数MoveFirst()、MoveLast()、MoveNext()、MovePrev()、IsBOF()、IsEOF()对设备信息表实现遍历操作,使用类CRecordset的函数AddNew增加设备或者函数Delete删除信息。并根据用户登录情况确定用户是否可以修改设备信息,以此实现后台数据与前台界面操作的一致。
在帐户被通过后,用户可以使用它来登录系统,登录时系统自动查找用户表,判断帐户是否存在,存在则提示用户登录成功,并显示可以的操作;否则,提示不存在该用户,返回登录界面,让用户重新输入信息。另外,经过这个验证的过程,提醒用户牢记帐号和密码,防止他人盗窃个人信息,从而提高用户信息的安全性。进行登录操作时,访问到了用户表(User)。
在用户未成功登录时,个人资料功能是被禁止的。只有成功登录以后,用户才有资格修改自己的资料,包括基本信息的修改,帐户(昵称或密码)的更新,帐号是不可以更改的,一旦服务器分配以后,始终与帐户绑定。方便管理员管理帐户,也使得系统具有一定的稳定性。该模块访问到了用户表和个人信息表。
备注:当在修改密码时,系统会确认旧密码,如果输入的旧密码错误,系统会弹出出错信息,否则才允许更新密码。并且,如果修改昵称,系统会把修改后的昵称更新到两个表中,使得数据能够保持同步,方便管理员的管理和维护,提高了系统的可靠性。
系统具有数据录入、数据修改、记录查询、报表打印等功能。较全面满足了材料库存管理的各项工作。该系统采用模块化原理编程,做到了模块规模适中,本身相对独立。模块化使程序结构清晰,易于设计、易于理解,提高了系统的可靠性。用户的需求具体体现在各种信息的提供、保存、更新和查询统计,这就要求数据库结构能充分满足各种信息的输出和输入。收集基本数据、数据结构以及数据处理的流程,组成一份详尽的数据字典,为后面的详细设计打下基础。
2.书库模块分析:
书库管理需要实现三个功能,分别是新书入库、图书挂失和图书查询。
模块主体设计如下:
六、流程图(或功能模块图)
总程序设计框图:
书库管理系统设计框图:
七,实验各个模块代码及相关分析说明:
书库管理模块在整个程序中的位置
1.新书入库模块
先使用VS中的MFC控件建立如下框图
然后再确定按钮添加以下对应函数
#include "stdafx.h"
#include "Library.h"
#include "NewBookDlg.h"
#include "BookTypeSet.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CNewBookDlg dialog
CNewBookDlg::CNewBookDlg(CWnd* pParent /*=NULL*/)
: CDialog(CNewBookDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CNewBookDlg)
m_strBookType = _T("");
m_strBookCode = _T("");
m_strBookName = _T("");
m_strPrice = _T("");
m_strPress = _T("");
m_strWriter = _T("");
m_strBrief = _T("");
//}}AFX_DATA_INIT
}
void CNewBookDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CNewBookDlg)
DDX_Control(pDX, IDC_COMBO_BOOKTYPE, m_ctrBookType);
DDX_Control(pDX, IDC_LIST1, m_ctrList);
DDX_CBString(pDX, IDC_COMBO_BOOKTYPE, m_strBookType);
DDX_Text(pDX, IDC_EDIT_BOOK_CODE, m_strBookCode);
DDX_Text(pDX, IDC_EDIT_BOOK_NAME, m_strBookName);
DDX_Text(pDX, IDC_EDIT_BOOK_PRICE, m_strPrice);
DDX_Text(pDX, IDC_EDIT_PRESS, m_strPress);
DDX_Text(pDX, IDC_EDIT_WRITER, m_strWriter);
DDX_Text(pDX, IDC_EDIT_BRIEF, m_strBrief);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CNewBookDlg, CDialog)
//{{AFX_MSG_MAP(CNewBookDlg)
ON_BN_CLICKED(IDC_BUTTON_NEW, OnButtonNew)
ON_BN_CLICKED(IDC_BUTTON_ALL, OnButtonAll)
ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete)
ON_NOTIFY(NM_CLICK, IDC_LIST1, OnClickList1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CNewBookDlg message handlers
BOOL CNewBookDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//设置列表
m_ctrList.InsertColumn(0,"图书编号");
m_ctrList.InsertColumn(1,"图书名称");
m_ctrList.InsertColumn(2,"图书类别");
m_ctrList.InsertColumn(3,"作者");
m_ctrList.InsertColumn(4,"出版社");
m_ctrList.InsertColumn(5,"图书价格");
m_ctrList.InsertColumn(6,"登记日期");
m_ctrList.InsertColumn(7,"备注说明");
m_ctrList.SetColumnWidth(0,60);
m_ctrList.SetColumnWidth(1,120);
m_ctrList.SetColumnWidth(2,80);
m_ctrList.SetColumnWidth(3,80);
m_ctrList.SetColumnWidth(4,80);
m_ctrList.SetColumnWidth(5,80);
m_ctrList.SetColumnWidth(6,80);
m_ctrList.SetColumnWidth(7,80);
m_ctrList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
//初始化图书类型
CBookTypeSet recordset ;
if(!recordset.Open(AFX_DB_USE_DEFAULT_TYPE,"select * from bookType"))
{
MessageBox("打开数据库失败!","数据库错误",MB_OK);
return FALSE;
}
while(!recordset.IsEOF())
{
m_ctrBookType.AddString(recordset.m_type);
recordset.MoveNext();
}
recordset.Close();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CNewBookDlg::OnButtonNew()
{
// TODO: Add your control notification handler code here
UpdateData();
if(m_strBookCode.IsEmpty())
{
AfxMessageBox("请输入图书编号!");
return;
}
if(m_strBookType.IsEmpty())
{
AfxMessageBox("请输入图书类型!");
return;
}
if(m_strBookName.IsEmpty())
{
AfxMessageBox("请输入图书名称!");
return;
}
CString strSQL;
CTime current=CTime::GetCurrentTime();
strSQL.Format("select * from bookInfo where code = '%s'",m_strBookCode);
if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
{
MessageBox("打开数据库失败!","数据库错误",MB_OK);
return ;
}
if(m_recordset.GetRecordCount()!=0)
{
m_recordset.Close();
AfxMessageBox("该图书编号已经存在,请重新输入!");
return;
}
m_recordset.Close();
if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE))
{
MessageBox("打开数据库失败!","数据库错误",MB_OK);
return ;
}
//添加图书记录
m_recordset.AddNew();
m_recordset.m_code = m_strBookCode ;
m_recordset.m_name = m_strBookName ;
m_recordset.m_type = m_strBookType ;
m_recordset.m_in_date = current ;
m_recordset.m_price = m_strPrice ;
m_recordset.m_press = m_strPress ;
m_recordset.m_writer = m_strWriter ;
m_recordset.m_brief = m_strBrief ;
m_recordset.m_isBorrow = FALSE;
m_recordset.Update();
m_recordset.Close();
//更新列表
CString strTime;
m_ctrList.InsertItem(0,m_strBookCode);
m_ctrList.SetItemText(0,1,m_strBookName);
m_ctrList.SetItemText(0,2,m_strBookType);
m_ctrList.SetItemText(0,3,m_strWriter);
m_ctrList.SetItemText(0,4,m_strPress);
m_ctrList.SetItemText(0,5,m_strPrice);
strTime.Format("%d-%d-%d",current.GetYear(),current.GetMonth(),current.GetDay());
m_ctrList.SetItemText(0,6,strTime);
m_ctrList.SetItemText(0,7,m_strBrief);
//更新界面显示
m_strBookType = _T("");
m_strBookCode = _T("");
m_strBookName = _T("");
m_strPrice = _T("");
m_strPress = _T("");
m_strWriter = _T("");
m_strBrief = _T("");
UpdateData(FALSE);
}
void CNewBookDlg::OnButtonAll()
{
// TODO: Add your control notification handler code here
m_ctrList.DeleteAllItems();
m_ctrList.SetRedraw(FALSE);
UpdateData(TRUE);
CString strSQL;
strSQL.Format( "select * from bookInfo ");
if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
{
MessageBox("打开数据库失败!","数据库错误",MB_OK);
return ;
}
int i=0;
CString strTime;
while(!m_recordset.IsEOF())
{
m_ctrList.InsertItem(i,m_recordset.m_code);
m_ctrList.SetItemText(i,1,m_recordset.m_name);
m_ctrList.SetItemText(i,2,m_recordset.m_type);
m_ctrList.SetItemText(i,3,m_recordset.m_writer);
m_ctrList.SetItemText(i,4,m_recordset.m_press);
m_ctrList.SetItemText(i,5,m_recordset.m_price);
strTime.Format("%d-%d-%d",m_recordset.m_in_date.GetYear(),m_recordset.m_in_date.GetMonth(),m_recordset.m_in_date.GetDay());
m_ctrList.SetItemText(i,6,strTime);
m_ctrList.SetItemText(i,7,m_recordset.m_brief);
i++;
m_recordset.MoveNext();
}
m_recordset.Close();
m_ctrList.SetRedraw(TRUE);
}
void CNewBookDlg::OnButtonDelete()
{
// TODO: Add your control notification handler code here
int i = m_ctrList.GetSelectionMark();
if(0>i)
{
AfxMessageBox("请选择一条记录进行删除!");
return;
}
CString strSQL;
strSQL.Format("select * from bookInfo where code = '%s' ",m_ctrList.GetItemText(i,0));
if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
{
AfxMessageBox("打开数据库失败!");
return ;
}
m_recordset.Delete();
m_recordset.Close();
m_ctrList.DeleteItem(i);
//更新界面显示
m_strBookType = _T("");
m_strBookCode = _T("");
m_strBookName = _T("");
m_strPrice = _T("");
m_strPress = _T("");
m_strWriter = _T("");
m_strBrief = _T("");
UpdateData(FALSE);
}
void CNewBookDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
int i = m_ctrList.GetSelectionMark();
m_strBookType = m_ctrList.GetItemText(i,2);
m_strBookCode = m_ctrList.GetItemText(i,0);
m_strBookName = m_ctrList.GetItemText(i,1);
m_strPrice = m_ctrList.GetItemText(i,5);
m_strPress = m_ctrList.GetItemText(i,4);
m_strWriter = m_ctrList.GetItemText(i,3);
m_strBrief = m_ctrList.GetItemText(i,7);
UpdateData(FALSE);
*pResult = 0;
}
2.图书查询模块
对查询按钮添加相应的函数如下:
#include "stdafx.h"
#include "Library.h"
#include "BorrowSearchDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CBorrowSearchDlg dialog
CBorrowSearchDlg::CBorrowSearchDlg(CWnd* pParent /*=NULL*/)
: CDialog(CBorrowSearchDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CBorrowSearchDlg)
m_strBookCode = _T("");
m_strReaderCode = _T("");
//}}AFX_DATA_INIT
}
void CBorrowSearchDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CBorrowSearchDlg)
DDX_Control(pDX, IDC_LIST1, m_ctrList);
DDX_Text(pDX, IDC_EDIT_BOOKCODE, m_strBookCode);
DDX_Text(pDX, IDC_EDIT_READERCODE, m_strReaderCode);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CBorrowSearchDlg, CDialog)
//{{AFX_MSG_MAP(CBorrowSearchDlg)
ON_BN_CLICKED(IDC_BUTTON_SEARCH, OnButtonSearch)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CBorrowSearchDlg message handlers
BOOL CBorrowSearchDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_ctrList.InsertColumn(0,"读者编号");
m_ctrList.InsertColumn(1,"读者姓名");
m_ctrList.InsertColumn(2,"图书编号");
m_ctrList.InsertColumn(3,"图书名称");
m_ctrList.InsertColumn(4,"图书类别");
m_ctrList.InsertColumn(5,"图书价格");
m_ctrList.InsertColumn(6,"借出日期");
m_ctrList.InsertColumn(7,"归还日期");
m_ctrList.InsertColumn(8,"操作员");
m_ctrList.SetColumnWidth(0,60);
m_ctrList.SetColumnWidth(1,60);
m_ctrList.SetColumnWidth(2,80);
m_ctrList.SetColumnWidth(3,100);
m_ctrList.SetColumnWidth(4,80);
m_ctrList.SetColumnWidth(5,80);
m_ctrList.SetColumnWidth(6,80);
m_ctrList.SetColumnWidth(7,80);
m_ctrList.SetColumnWidth(8,80);
m_ctrList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CBorrowSearchDlg::OnButtonSearch()
{
// TODO: Add your control notification handler code here
UpdateData();
CString strSQL;
if(!m_strReaderCode.IsEmpty()&!m_strBookCode.IsEmpty())
{
strSQL.Format("select * from borrowInfo where reader_code = '%s' and book_code = '%s'" ,m_strReaderCode,m_strBookCode);
}
else if(!m_strReaderCode.IsEmpty())
{
strSQL.Format("select * from borrowInfo where reader_code = '%s' " ,m_strReaderCode);
}
else if(!m_strBookCode.IsEmpty())
{
strSQL.Format("select * from borrowInfo where book_code = '%s'" ,m_strBookCode);
}
else
{
strSQL="se
展开阅读全文