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

📄 bookdlg.cpp

📁 图书管理系统,数据结构思想,用 C++编写,经测试,可用
💻 CPP
字号:
// BookDlg.cpp : implementation file
//

#include "stdafx.h"
#include "library.h"
#include "BookDlg.h"
#include "BookFind.h"
#include "BookAdd.h"

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

/////////////////////////////////////////////////////////////////////////////
// CBookDlg dialog


CBookDlg::CBookDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CBookDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CBookDlg)
	m_Author = _T("");
	m_Borrowed = FALSE;
	m_Press = _T("");
	m_Price = _T("");
	m_BookID = _T("");
	m_PublishDate = COleDateTime::GetCurrentTime();
	m_BookName = _T("");
	//}}AFX_DATA_INIT
}


void CBookDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CBookDlg)
	DDX_Control(pDX, IDC_BOOK_VIEW, m_BookView);
	DDX_Text(pDX, IDC_AUTHOR, m_Author);
	DDX_Check(pDX, IDC_BORROWED, m_Borrowed);
	DDX_Text(pDX, IDC_PRESS, m_Press);
	DDX_Text(pDX, IDC_PRICE, m_Price);
	DDX_Text(pDX, IDC_BOOKID, m_BookID);
	DDX_DateTimeCtrl(pDX, IDC_PUBLISH_DATE, m_PublishDate);
	DDX_Text(pDX, IDC_BOOK_NAME, m_BookName);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CBookDlg, CDialog)
	//{{AFX_MSG_MAP(CBookDlg)
	ON_NOTIFY(NM_CLICK, IDC_BOOK_VIEW, OnClickBookView)
	ON_BN_CLICKED(IDC_RECORD_ADD, OnRecordAdd)
	ON_BN_CLICKED(IDC_RECORD_DEL, OnRecordDel)
	ON_BN_CLICKED(IDC_RECORD_EDIT, OnRecordEdit)
	ON_BN_CLICKED(IDC_BOOK_FIND, OnBookFind)
	ON_BN_CLICKED(IDC_REFRESH, OnRefresh)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CBookDlg message handlers

BOOL CBookDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
		
	// TODO: Add extra initialization here
	//完成数据的显示
	TextShow();
	InitListView();
	ListShow();

	UpdateData(false);
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CBookDlg::ListShow()
{
	//在列表中显示图书的信息
	int i=0;
	COleDateTime publishTime;
	CString borrowed;
	CString strTime;
	CString bookPrice;

	if(!m_BookSet.IsOpen())
	{
		m_BookSet.m_strSort="bookid";
		m_BookSet.Open();
		m_BookSet.MoveFirst();
	}

	m_BookView.DeleteAllItems();
	while(!m_BookSet.IsEOF())
	{
		m_BookView.InsertItem(i,m_BookSet.m_bookid);
		m_BookView.SetItemText(i,1,m_BookSet.m_bookname);
		m_BookView.SetItemText(i,2,m_BookSet.m_author);

		bookPrice=m_BookSet.m_price;
		strLength=bookPrice.GetLength();
		//使价格只保留两位小数
		bookPrice=bookPrice.Left(strLength-2);
		m_BookView.SetItemText(i,3,bookPrice);

		nYear=m_BookSet.m_publishtime.GetYear();
		nMonth=m_BookSet.m_publishtime.GetMonth();
		nDay=m_BookSet.m_publishtime.GetDay();
		publishTime.SetDate(nYear,nMonth,nDay);
		strTime=publishTime.Format(VAR_DATEVALUEONLY);
		m_BookView.SetItemText(i,4,strTime);

		m_BookView.SetItemText(i,5,m_BookSet.m_press);
		if(m_BookSet.m_borrowed)
			borrowed="是";
		else
			borrowed="否";
		m_BookView.SetItemText(i,6,borrowed);

		m_BookSet.MoveNext();
		i++;
	}

	if(m_BookView.GetItemCount()!=0)
		m_BookView.SetHotItem(0);

	m_BookSet.Close();

}

void CBookDlg::OnClickBookView(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	//当鼠标单击列表中的记录时,在基本数据区中显示相应数据
	POSITION pos;

	pos=m_BookView.GetFirstSelectedItemPosition();
	if(pos!=NULL)
	{
		int nItem=m_BookView.GetNextSelectedItem(pos);
		m_BookID=m_BookView.GetItemText(nItem,0);
		m_BookSet.m_strFilter="bookid='"+m_BookID+"'";
		m_BookSet.Open();
		TextShow();
		m_BookSet.Close();
		m_BookView.SetHotItem(nItem);

		UpdateData(false);
	}
	
	*pResult = 0;
}

void CBookDlg::TextShow()
{
	//显示基本数据
	if(!m_BookSet.IsOpen())
	{
		m_BookSet.Open();
		m_BookSet.MoveFirst();
	}

	m_BookID=m_BookSet.m_bookid;
	m_BookName=m_BookSet.m_bookname;
	m_Author=m_BookSet.m_author;
	m_Price=m_BookSet.m_price;
	strLength=m_Price.GetLength();
	m_Price=m_Price.Left(strLength-2);
	m_Press=m_BookSet.m_press;
	nYear=m_BookSet.m_publishtime.GetYear();
	nMonth=m_BookSet.m_publishtime.GetMonth();
	nDay=m_BookSet.m_publishtime.GetDay();
	m_PublishDate.SetDate(nYear,nMonth,nDay);
	m_Borrowed=m_BookSet.m_borrowed;

	m_BookSet.Close();

}

void CBookDlg::InitListView()
{
	//初始化浏览列表
	m_BookView.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
	m_BookView.InsertColumn(0,"书号");
	m_BookView.InsertColumn(1,"书名");
	m_BookView.InsertColumn(2,"作者");
	m_BookView.InsertColumn(3,"价格");
	m_BookView.InsertColumn(4,"出版日期");
	m_BookView.InsertColumn(5,"出版社");
	m_BookView.InsertColumn(6,"借出");

	m_BookView.SetColumnWidth(0,80);
	m_BookView.SetColumnWidth(1,150);
	m_BookView.SetColumnWidth(2,100);
	m_BookView.SetColumnWidth(3,80);
	m_BookView.SetColumnWidth(4,100);
	m_BookView.SetColumnWidth(5,150);
	m_BookView.SetColumnWidth(6,50);

}

void CBookDlg::OnRecordAdd() 
{
	// TODO: Add your control notification handler code here
	//添加新纪录
	CBookAdd m_BookAdd;
	m_BookAdd.DoModal();
	
}

void CBookDlg::OnRecordDel() 
{
	// TODO: Add your control notification handler code here
	//删除所选择的纪录
	if(AfxMessageBox("您确定要删除此纪录吗?",MB_OKCANCEL)==IDCANCEL)
		return;

	UpdateData();

	m_BookSet.Open();
	m_BookSet.m_strFilter="bookid='"+m_BookID+"'";
	m_BookSet.Requery();
	m_BookSet.Delete();
	m_BookSet.Close();

	m_BookSet.Open();
	m_BookSet.m_strFilter="";
	m_BookSet.Requery();
	m_BookSet.MoveFirst();
	
	ListShow();
	TextShow();
	
	UpdateData(false);
}

void CBookDlg::OnRecordEdit() 
{
	// TODO: Add your control notification handler code here
	//对数据纪录进行修改操作
	//先找到所要修改的纪录,然后再进行数据的更新
	m_BookSet.Open();
	m_BookSet.m_strFilter="bookid='"+m_BookID+"'";
	m_BookSet.Requery();

	UpdateData();

	//保存数据到数据库
	m_BookSet.Edit();
	m_BookSet.m_bookid=m_BookID;
	m_BookSet.m_bookname=m_BookName;
	m_BookSet.m_author=m_Author;
	m_BookSet.m_price=m_Price;

	nYear=m_PublishDate.GetYear();
	nMonth=m_PublishDate.GetMonth();
	nDay=m_PublishDate.GetDay();
	CTime PublishTime(nYear,nMonth,nDay,0,0,0);
	m_BookSet.m_publishtime=PublishTime;

	m_BookSet.m_press=m_Press;
	m_BookSet.m_borrowed=m_Borrowed;

	m_BookSet.Update();
	m_BookSet.m_strFilter="";
	m_BookSet.Requery();
	m_BookSet.Close();

	int nItem=m_BookView.GetSelectionMark();

	ListShow();

	//把纪录重新定位到所修改的纪录上
	m_BookView.SetSelectionMark(nItem);
	m_BookView.SetHotItem(nItem);
	m_BookSet.Open();
	m_BookSet.Move(nItem);
	TextShow();

	UpdateData(false);
	
}

void CBookDlg::OnBookFind() 
{
	// TODO: Add your control notification handler code here
	//完成图书的查询
	CBookFind m_BookFind;
	CString strSql;

	if(m_BookFind.DoModal()!=IDOK)
		return;

	switch(m_BookFind.m_Selection)
	{
	case 0:
		//按书号查询
		m_BookSet.Open();
		m_BookSet.m_strFilter="bookid"+m_BookFind.m_Condition+"'"+m_BookFind.m_BookID+"'";
		m_BookSet.Requery();

		if(m_BookSet.GetRecordCount()==0)
		{
			AfxMessageBox("没有找到您所要查询的书籍!");
			m_BookSet.Close();
		}
		else
		{
			ListShow();
			TextShow();
		}
		break;
	case 1:
		//按书名查询
		strSql.Format("select * from book where bookname like '%%%s%%'",m_BookFind.m_BookName);
		m_BookSet.Open(AFX_DB_USE_DEFAULT_TYPE,strSql);

		if(m_BookSet.GetRecordCount()==0)
		{
			AfxMessageBox("没有找到您所要查询的书籍!");
			m_BookSet.Close();
		}
		else
		{
			ListShow();
			TextShow();
		}
		break;
	case 2:
		//按作者查询
		m_BookSet.Open();
		m_BookSet.m_strFilter="author='"+m_BookFind.m_Author+"'";
		m_BookSet.Requery();

		if(m_BookSet.GetRecordCount()==0)
		{
			AfxMessageBox("没有找到您所要查询的书籍!");
			m_BookSet.Close();
		}
		else
		{
			ListShow();
			TextShow();
		}
		break;
	case 3:
		//按出版社查询
		m_BookSet.Open();
		m_BookSet.m_strFilter="press='"+m_BookFind.m_Press+"'";
		m_BookSet.Requery();

		if(m_BookSet.GetRecordCount()==0)
		{
			AfxMessageBox("没有找到您所要查询的书籍!");
			m_BookSet.Close();
		}
		else
		{
			ListShow();
			TextShow();
		}
		break;
	case 4:
		//按出版日期查询
		nYear=m_BookFind.m_PublishTime.GetYear();
		nMonth=m_BookFind.m_PublishTime.GetMonth();
		nDay=m_BookFind.m_PublishTime.GetDay();
		CTime m_Time(nYear,nMonth,nDay);
		strSql.Format("select * from book where publishtime=m_Time");
		m_BookSet.Open(AFX_DB_USE_DEFAULT_TYPE,strSql);
		
		if(m_BookSet.GetRecordCount()==0)
		{
			AfxMessageBox("没有找到您所要查询的书籍!");
			m_BookSet.Close();
		}
		else
		{
			ListShow();
			TextShow();
		}
		break;
	}  //end switch

	UpdateData(false);
	m_BookSet.Open();
	m_BookSet.m_strFilter="";
	m_BookSet.Requery();
	m_BookSet.Close();
	
}

void CBookDlg::OnRefresh() 
{
	// TODO: Add your control notification handler code here
	//刷新基本数据区和列表中的数据
	m_BookSet.Open();
	m_BookSet.m_strFilter="";
	m_BookSet.Requery();

	ListShow();
	TextShow();
	UpdateData(false);
	
}

void CBookDlg::TextClear()
{
	//清空基本数据区的数据
	COleDateTime publishTime;

	m_BookID.Empty();
	m_BookName.Empty();
	m_Author.Empty();
	m_Price.Empty();

	publishTime=COleDateTime::GetCurrentTime();
	nYear=publishTime.GetYear();
	nMonth=publishTime.GetMonth();
	nDay=publishTime.GetDay();
	m_PublishDate.SetDate(nYear,nMonth,nDay);

	m_Press.Empty();
	m_Borrowed=false;

	UpdateData(false);

}

⌨️ 快捷键说明

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