⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 querybasicdlg.cpp

📁 mysql+visual C++编写的mini图书馆数据库管理系统
💻 CPP
字号:
// QueryBasicDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Library.h"
#include "BookRS1.h"
#include "QueryAdvanceDlg.h"
#include "QueryBasicDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CQueryBasicDlg dialog


CQueryBasicDlg::CQueryBasicDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CQueryBasicDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CQueryBasicDlg)
	m_strKeyWord = _T("");
	//}}AFX_DATA_INIT
}


void CQueryBasicDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CQueryBasicDlg)
	DDX_Control(pDX, IDC_LIST_RESULT, m_listResult);
	DDX_Control(pDX, IDC_LIST_DETAIL, m_listDetail);
	DDX_Text(pDX, IDC_KEY_WORD, m_strKeyWord);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CQueryBasicDlg, CDialog)
	//{{AFX_MSG_MAP(CQueryBasicDlg)
	ON_BN_CLICKED(IDC_QUERY, OnQuery)
	ON_LBN_SELCHANGE(IDC_LIST_RESULT, OnSelchangeListResult)
	ON_BN_CLICKED(IDC_ADVANCED_QUERY, OnAdvancedQuery)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CQueryBasicDlg message handlers

void CQueryBasicDlg::OnQuery() 
{
	// TODO: Add your control notification handler code here
	UpdateData();//将编辑框内容更新到与此绑定的成员变量如m_strKeyWord中
	m_listResult.ResetContent();//清空结果列表的内容(如果有)
	if (!m_bookSet.IsOpen()){
		m_bookSet.Open();
	}
	//设置查询条件,根据书名关键字进行模糊查询
	m_bookSet.m_strFilter="title like '%"+m_strKeyWord+"%'";
	m_bookSet.m_strSort="title";  //按书名升序排序
	m_bookSet.Requery();
	
	//找不到该书
	if (m_bookSet.IsEOF()){
		AfxMessageBox("查无此书");
		return;
	}
	//将全部的结果显示在结果列表中
	while (!m_bookSet.IsEOF()){		
		m_listResult.AddString(m_bookSet.m_title);
		m_bookSet.MoveNext();
	}	
}

void CQueryBasicDlg::OnSelchangeListResult() 
{
	// TODO: Add your control notification handler code here
	//用数据aColCaption来存放所有列标题信息,与数据库中的次序一致
	CString  aColCaption[9];
	aColCaption[0]="书号:  ";
	aColCaption[1]="类别:  ";
	aColCaption[2]="书名:  ";
	aColCaption[3]="出版社:  ";
	aColCaption[4]="作者:  ";
	aColCaption[5]="出版日期:  ";
	aColCaption[6]="价格:  ";
	aColCaption[7]="藏书总量:  ";
	aColCaption[8]="当前库存量:  ";
	
	m_listDetail.ResetContent();//清空书目详细信息列表中的原有内容
	int curSel;//记录集中的当前位置
	CString strDetail;//内容
	CString  strLine;//列表中的一行,行=标题:+内容
	curSel=	m_listResult.GetCurSel();//取得结果列表中当前的选中位置
	m_bookSet.SetAbsolutePosition(curSel+1);	//将记录集指针移到该位置
	for (int i=0;i<m_bookSet.m_nFields;i++){
		m_bookSet.GetFieldValue(i,strDetail);//从记录集中取出第i列的值,存在strDetail中
		strLine.Empty();// 清空原有的内容
		strLine+=aColCaption[i];//增加标题
		strLine+=strDetail;//增加内容		
		m_listDetail.AddString(strLine);//把该行添加到书目详细信息的列表中		
	}
	
}

void CQueryBasicDlg::OnAdvancedQuery() 
{
	// TODO: Add your control notification handler code here
	int i;
	int j;
	CQueryAdvanceDlg advancedQuery;
	advancedQuery.DoModal();//显示高级查询对话框
	CString str;
	CString strFilter;//查询条件
	CString * astrKeyWord[4];//指向CString的指针数组,记录用户输入的关键字 astrKeyWord[0]不用
	CTime * astrKeyDate[3];
	double * astrKeyPrice[3];
	CString  astrColumnCaption[6];//列名
	CString * astrColumnVal[6];//指向CString的指针数组,记录用户选择的查询条件
	CString * aAndOr[6];//指向CString的指针数组,记录用户选择的是and 还是or	
	aAndOr[1]=&advancedQuery.m_andOr1;
	aAndOr[2]=&advancedQuery.m_andOr2;
	aAndOr[3]=&advancedQuery.m_andOr3;
	aAndOr[4]=&advancedQuery.m_andOr4;	
    aAndOr[5]=&advancedQuery.m_andOr5;
	astrColumnVal[1]=&advancedQuery.m_condition1;
	astrColumnVal[2]=&advancedQuery.m_condition2;
	astrColumnVal[3]=&advancedQuery.m_condition3;
	astrColumnVal[4]=&advancedQuery.m_condition4;
    astrColumnVal[5]=&advancedQuery.m_condition5;
	//将中文的查询转换成对应的表列名
	for (i=1;i<4;i++){		
		if (!astrColumnVal[i]->Compare("类别")){
			astrColumnCaption[i]="kind";			
			continue;
		}		
		if (!astrColumnVal[i]->Compare("书名")){
			astrColumnCaption[i]="title";
			continue;
		}
		if (!astrColumnVal[i]->Compare("作者")){
			astrColumnCaption[i]="authors";
			continue;
		}
		if (!astrColumnVal[i]->Compare("出版社")){
			astrColumnCaption[i]="press";
			continue;
		}			
	}
    astrColumnCaption[4]="pub_date";
	astrColumnCaption[5]="price";
	astrKeyWord[1]=&advancedQuery.m_keyword1;
	astrKeyWord[2]=&advancedQuery.m_keyword2;
	astrKeyWord[3]=&advancedQuery.m_keyword3;
	astrKeyDate[1]=&advancedQuery.m_keydate1;
	astrKeyDate[2]=&advancedQuery.m_keydate2;
	astrKeyPrice[1]=&advancedQuery.m_keyprice1;
	astrKeyPrice[2]=&advancedQuery.m_keyprice2;
	i=1;
	while (!astrKeyWord[i]->IsEmpty()&&i<4){//用户输入的查询关键字非空则添加查询条件
		if (i!=1){//与前面的查询条件必须用and 或or连接
			strFilter+="  ";
			strFilter+=*aAndOr[i-1];
			strFilter+="  ";
		}
		str.Format("%s='%s'",astrColumnCaption[i],*astrKeyWord[i]);
		strFilter+=str;		
		i++;
	}
	j=1;
    CString s="1970-01-01 08:00:00";
	CString s1 =(*astrKeyDate[j]).Format( "%Y-%m-%d %H:%M:%S" );
	CString s2 =(*astrKeyDate[j+1]).Format( "%Y-%m-%d %H:%M:%S" );
	if(!(s1==s && s2==s))
	{
		if(i!=1)
		{
	       strFilter+="  ";
	       strFilter+=*aAndOr[i-1];
	       strFilter+="  ";
		}
	    str.Format("%s between '%s' and '%s'",astrColumnCaption[4],s1,s2);
	    strFilter+=str;		
	    i=5;
	}
	j=1;
	if(!(*astrKeyPrice[j]==0 && *astrKeyPrice[j+1]==0))
	{
		if(i!=1)
		{
	       strFilter+="  ";
	       strFilter+=*aAndOr[i-1];
	       strFilter+="  ";
		}
	    str.Format("%s between %lf and %lf",astrColumnCaption[5],*astrKeyPrice[j],*astrKeyPrice[j+1]);
	    strFilter+=str;		
	}
	//AfxMessageBox(strFilter);
	m_bookSet.m_strFilter=strFilter;//设定查询条件为strFilter
	if (!m_bookSet.IsOpen()){
		m_bookSet.Open();
	}
	m_bookSet.m_strSort="title";  //按书名升序排序
	m_bookSet.Requery();	
	m_listResult.ResetContent();//清空原来的查询结果
	m_listDetail.ResetContent();//清空原来的查询结果
	if (m_bookSet.IsEOF()){//结果集为空
		AfxMessageBox("查无此书");
		return;
	}
	while (!m_bookSet.IsEOF()){//将结果集中的每一本书的书名添加到查询结果列表中		
		m_listResult.AddString(m_bookSet.m_title);
		m_bookSet.MoveNext();
	}	
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -