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

📄 bookmanagerview.cpp

📁 一个单机图书管理系统
💻 CPP
字号:
// BookManagerView.cpp : implementation of the CBookManagerView class
//

#include "stdafx.h"
#include "BookManager.h"

#include "BookManagerDoc.h"
#include "BookManagerView.h"
#include "QueryDlg.h"
#include "ModifyDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CBookManagerView

IMPLEMENT_DYNCREATE(CBookManagerView, CListView)

BEGIN_MESSAGE_MAP(CBookManagerView, CListView)
	//{{AFX_MSG_MAP(CBookManagerView)
	ON_COMMAND(ID_FILE_NEW, OnFileNew)
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
	ON_COMMAND(ID_BTN_INSERT, OnBtnInsert)
	ON_COMMAND(ID_BTN_DELETE, OnBtnDelete)
	ON_COMMAND(ID_BTN_QUERY, OnBtnQuery)
	ON_COMMAND(ID_BTN_UPDATE, OnBtnUpdate)
	ON_NOTIFY_REFLECT(NM_CLICK, OnClick)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CListView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CListView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CListView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CBookManagerView construction/destruction

CBookManagerView::CBookManagerView()
{
	// TODO: add construction code here

}

CBookManagerView::~CBookManagerView()
{
}

BOOL CBookManagerView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CListView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CBookManagerView drawing

void CBookManagerView::OnDraw(CDC* pDC)
{
	CBookManagerDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
}

void CBookManagerView::OnInitialUpdate()
{
	CListView::OnInitialUpdate();


	// TODO: You may populate your ListView with items by directly accessing
	//  its list control through a call to GetListCtrl().
	pRS = NULL;
	nTotalRecordCount = 1;
	CRect rect;
	GetClientRect(&rect);

	GetListCtrl().ModifyStyle(NULL, LVS_REPORT);

	GetListCtrl().InsertColumn(0, _T("序号"), LVCFMT_LEFT, rect.right / 7, -1);
	GetListCtrl().InsertColumn(1, _T("书代号"), LVCFMT_LEFT, rect.right / 7, -1);
	GetListCtrl().InsertColumn(2, _T("库位号"), LVCFMT_LEFT, rect.right / 7, -1);
	GetListCtrl().InsertColumn(3, _T("书名"), LVCFMT_LEFT, rect.right / 7, -1);
	GetListCtrl().InsertColumn(4, _T("单价"), LVCFMT_LEFT, rect.right / 7, -1);
	GetListCtrl().InsertColumn(5, _T("借阅人"), LVCFMT_LEFT, rect.right / 7, -1);
	GetListCtrl().InsertColumn(6, _T("备注"), LVCFMT_LEFT, rect.right / 7, -1);
}

/////////////////////////////////////////////////////////////////////////////
// CBookManagerView printing

BOOL CBookManagerView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CBookManagerView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CBookManagerView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CBookManagerView diagnostics

#ifdef _DEBUG
void CBookManagerView::AssertValid() const
{
	CListView::AssertValid();
}

void CBookManagerView::Dump(CDumpContext& dc) const
{
	CListView::Dump(dc);
}

CBookManagerDoc* CBookManagerView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CBookManagerDoc)));
	return (CBookManagerDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CBookManagerView message handlers

void CBookManagerView::OnFileNew() 
{
	// TODO: Add your command handler code here
	CFileDialog fileDlg (FALSE, _T("mdb"), _T("新建数据库.mdb"),
    OFN_PATHMUSTEXIST, _T("ACCESS数据库 (*.mdb)|*.mdb"), this);
	
	if (IDOK == fileDlg.DoModal())
	{
		m_szDbFileName = fileDlg.GetPathName();

		CFile f;
		CFileException e;
		if (f.Open(m_szDbFileName, CFile::modeRead, &e))
		{
			AfxMessageBox(_T("数据库文件 ") + m_szDbFileName
				          + _T(" 已存在,请重新命名!"));
			m_szDbFileName.Empty();
			f.Close();
		}
		else
		{
			AfxGetModuleState()->m_dwVersion = 0x0601;
			if (pRS != NULL)
			{
				if (pRS->IsOpen())
				{
					pRS->Close();
					delete pRS;
					pRS = NULL;
				}
			}
			if (db.IsOpen())
				db.Close();
			db.Create(m_szDbFileName, dbLangGeneral, 0x40);
			CDaoTableDef tb(&db);

			tb.Create(_T("book"));

			CDaoFieldInfo FieldInfo;
			FieldInfo.m_strName = _T("序号");
			FieldInfo.m_nType = dbLong;
			FieldInfo.m_lSize = 0;
			FieldInfo.m_lAttributes = dbAutoIncrField;
			FieldInfo.m_nOrdinalPosition = 1;
			FieldInfo.m_bRequired = TRUE;
			FieldInfo.m_bAllowZeroLength = FALSE;
			tb.CreateField(FieldInfo);

//			tb.CreateField(_T("序号"), dbLong, 0, dbAutoIncrField);
			FieldInfo.m_nOrdinalPosition = 2;
			FieldInfo.m_nType = dbText;
			FieldInfo.m_lSize = 20;
			FieldInfo.m_lAttributes = dbVariableField | dbUpdatableField;
			FieldInfo.m_bRequired = FALSE;
			FieldInfo.m_bAllowZeroLength = TRUE;
			FieldInfo.m_strName = _T("书代号");
			tb.CreateField(FieldInfo);

			FieldInfo.m_nOrdinalPosition = 3;
			FieldInfo.m_strName = _T("库位号");
			tb.CreateField(FieldInfo);

			FieldInfo.m_nOrdinalPosition = 4;
			FieldInfo.m_lSize = 50;
			FieldInfo.m_bRequired = TRUE;
			FieldInfo.m_bAllowZeroLength = FALSE;
			FieldInfo.m_strName = _T("书名");
			tb.CreateField(FieldInfo);

			FieldInfo.m_nOrdinalPosition = 5;
			FieldInfo.m_bRequired = FALSE;
			FieldInfo.m_bAllowZeroLength = TRUE;
			FieldInfo.m_strName = _T("单价");
			FieldInfo.m_lSize = 10;
			tb.CreateField(FieldInfo);

			FieldInfo.m_nOrdinalPosition = 6;
			FieldInfo.m_strName = _T("借阅人");
			FieldInfo.m_lSize = 20;
			tb.CreateField(FieldInfo);
		
			FieldInfo.m_nOrdinalPosition = 7;
			FieldInfo.m_strName = _T("备注");
			FieldInfo.m_nType = dbMemo;
			FieldInfo.m_lSize = 0;
			tb.CreateField(FieldInfo);
			tb.Append();
		}
	}
}

void CBookManagerView::OnFileOpen() 
{
	// TODO: Add your command handler code here
	CFileDialog fileDlg (TRUE, _T("mdb"), _T(""),
    OFN_PATHMUSTEXIST, _T("ACCESS数据库 (*.mdb)|*.mdb"), this);
	nTotalRecordCount = 1;
	if (IDOK == fileDlg.DoModal())
	{
		m_szDbFileName = fileDlg.GetPathName();

		AfxGetModuleState()->m_dwVersion = 0x0601;
		if (pRS != NULL)
		{
			if (pRS->IsOpen())
			{
				pRS->Close();
				delete pRS;
				pRS = NULL;
			}
		}
		if (db.IsOpen())
			db.Close();
		db.Open(m_szDbFileName);
		pRS = new CDaoRecordset(&db);
		pRS->Open(dbOpenDynaset, _T("Select * From book Order By 序号"));
		OnUpdateListView();
	}
}

BOOL CBookManagerView::DestroyWindow() 
{
	// TODO: Add your specialized code here and/or call the base class
	if (pRS != NULL)
	{
		if (pRS->IsOpen())
		{
			pRS->Close();
			delete pRS;
			pRS = NULL;
		}
	}
	if (db.IsOpen())
		db.Close();

	return CListView::DestroyWindow();
}

void CBookManagerView::OnBtnInsert() 
{
	// TODO: Add your command handler code here
	if (m_szDbFileName.IsEmpty())
	{
		AfxMessageBox(_T("请您先打开数据库文件!"));
		return;
	}

	CModifyDlg modifyDlg;

	CString szNum;
	szNum.Format(_T("%d"), nTotalRecordCount);
	modifyDlg.m_szNum = szNum;

	int nRet = modifyDlg.DoModal();

	while (nRet == IDOK)
	{
		
		if (modifyDlg.m_szName.IsEmpty())
		{
			AfxMessageBox(_T("书名不能为空!"));
			nRet = modifyDlg.DoModal();
			continue;
		}
		else
		{
			pRS->AddNew();
			pRS->SetFieldValue(_T("书代号"), 
				modifyDlg.m_szID.GetBuffer(modifyDlg.m_szID.GetLength()));
			pRS->SetFieldValue(_T("库位号"), 
				modifyDlg.m_szStore.GetBuffer(modifyDlg.m_szStore.GetLength()));
			pRS->SetFieldValue(_T("书名"), 
				modifyDlg.m_szName.GetBuffer(modifyDlg.m_szName.GetLength()));
			pRS->SetFieldValue(_T("单价"), 
				modifyDlg.m_szPrice.GetBuffer(modifyDlg.m_szPrice.GetLength()));
			pRS->SetFieldValue(_T("借阅人"), 
				modifyDlg.m_szBorrower.GetBuffer(modifyDlg.m_szBorrower.GetLength()));
			pRS->SetFieldValue(_T("备注"), 
				modifyDlg.m_szMemo.GetBuffer(modifyDlg.m_szMemo.GetLength()));
			pRS->Update();

			nTotalRecordCount++;
			int nTotalItemCount = GetListCtrl().GetItemCount();
			GetListCtrl().InsertItem(nTotalItemCount, (LPCSTR)(szNum));
			GetListCtrl().SetItemText(nTotalItemCount, 1, (LPCSTR)(modifyDlg.m_szID));
			GetListCtrl().SetItemText(nTotalItemCount, 2, (LPCSTR)(modifyDlg.m_szStore));
			GetListCtrl().SetItemText(nTotalItemCount, 3, (LPCSTR)(modifyDlg.m_szName));
			GetListCtrl().SetItemText(nTotalItemCount, 4, (LPCSTR)(modifyDlg.m_szPrice));
			GetListCtrl().SetItemText(nTotalItemCount, 5, (LPCSTR)(modifyDlg.m_szBorrower));
			GetListCtrl().SetItemText(nTotalItemCount, 6, (LPCSTR)(modifyDlg.m_szMemo));
			
			break;
		}
	}
}

void CBookManagerView::OnBtnDelete() 
{
	// TODO: Add your command handler code here
	if (m_szDbFileName.IsEmpty())
	{
		AfxMessageBox(_T("请您先打开数据库文件!"));
		return;
	}

	if (nCurSelected < 0)
	{
		AfxMessageBox(_T("请您先选中要删除的纪录!"));
		return;
	}

	if (AfxMessageBox(_T("确定要删除吗?"), MB_YESNO | MB_ICONSTOP) == IDYES)
	{
		pRS->MoveFirst();
		pRS->Move(nCurSelected);
		pRS->Delete();

		GetListCtrl().DeleteItem(nCurSelected);
	}
}

void CBookManagerView::OnBtnQuery() 
{
	// TODO: Add your command handler code here

	if (m_szDbFileName.IsEmpty())
	{
		AfxMessageBox(_T("请您先打开数据库文件!"));
		return;
	}

	CQueryDlg QueryDlg;
	if (QueryDlg.DoModal() == IDOK)
	{
		CString szName, szBorrower;
//		QueryDlg.UpdateData();
		szName = QueryDlg.m_szName;
		szBorrower = QueryDlg.m_szBorrower;
		if (szName.IsEmpty() && szBorrower.IsEmpty())
		{
			return;
		}
		else
		{
			pRS->Close();
			if (!szName.IsEmpty() && !szBorrower.IsEmpty())
			{
				pRS->Open(dbOpenDynaset, _T("Select * From book Where 书名 = '") 
				    + szName + _T("' And 借阅人 = '") + szBorrower + _T("'"));
			}
			else if(!szName.IsEmpty())
			{
				pRS->Open(dbOpenDynaset, _T("Select * From book Where 书名 = '") 
				    + szName + _T("'"));
			}
			else if(!szBorrower.IsEmpty())
			{
				pRS->Open(dbOpenDynaset, _T("Select * From book Where 借阅人 = '")
				    + szBorrower + _T("'"));
			}
		}
		OnUpdateListView();
	}
}

void CBookManagerView::OnBtnUpdate() 
{
	// TODO: Add your command handler code here
	CModifyDlg modifyDlg;

	if (m_szDbFileName.IsEmpty())
	{
		AfxMessageBox(_T("请您先打开数据库文件!"));
		return;
	}

	if (nCurSelected < 0)
	{
		AfxMessageBox(_T("请您先选中要更新的纪录!"));
		return;
	}

	modifyDlg.m_szNum = GetListCtrl().GetItemText(nCurSelected, 0);
	modifyDlg.m_szID = GetListCtrl().GetItemText(nCurSelected, 1);
	modifyDlg.m_szStore = GetListCtrl().GetItemText(nCurSelected, 2);
	modifyDlg.m_szName = GetListCtrl().GetItemText(nCurSelected, 3);
	modifyDlg.m_szPrice = GetListCtrl().GetItemText(nCurSelected, 4);
	modifyDlg.m_szBorrower = GetListCtrl().GetItemText(nCurSelected, 5);
	modifyDlg.m_szMemo = GetListCtrl().GetItemText(nCurSelected, 6);
	int nRet = modifyDlg.DoModal();
	
	while (nRet == IDOK)
	{
		
		if (modifyDlg.m_szName.IsEmpty())
		{
			AfxMessageBox(_T("书名不能为空!"));
			nRet = modifyDlg.DoModal();
			continue;
		}
		else
		{
			pRS->MoveFirst();
			pRS->Move(nCurSelected);
			pRS->Edit();
			pRS->SetFieldValue(_T("书代号"), 
				modifyDlg.m_szID.GetBuffer(modifyDlg.m_szID.GetLength()));
			pRS->SetFieldValue(_T("库位号"), 
				modifyDlg.m_szStore.GetBuffer(modifyDlg.m_szStore.GetLength()));
			pRS->SetFieldValue(_T("书名"), 
				modifyDlg.m_szName.GetBuffer(modifyDlg.m_szName.GetLength()));
			pRS->SetFieldValue(_T("单价"), 
				modifyDlg.m_szPrice.GetBuffer(modifyDlg.m_szPrice.GetLength()));
			pRS->SetFieldValue(_T("借阅人"), 
				modifyDlg.m_szBorrower.GetBuffer(modifyDlg.m_szBorrower.GetLength()));
			pRS->SetFieldValue(_T("备注"), 
				modifyDlg.m_szMemo.GetBuffer(modifyDlg.m_szMemo.GetLength()));
			pRS->Update();

			GetListCtrl().SetItemText(nCurSelected, 1, (LPCSTR)(modifyDlg.m_szID));
			GetListCtrl().SetItemText(nCurSelected, 2, (LPCSTR)(modifyDlg.m_szStore));
			GetListCtrl().SetItemText(nCurSelected, 3, (LPCSTR)(modifyDlg.m_szName));
			GetListCtrl().SetItemText(nCurSelected, 4, (LPCSTR)(modifyDlg.m_szPrice));
			GetListCtrl().SetItemText(nCurSelected, 5, (LPCSTR)(modifyDlg.m_szBorrower));
			GetListCtrl().SetItemText(nCurSelected, 6, (LPCSTR)(modifyDlg.m_szMemo));
			break;
		}
	}
	
}
void CBookManagerView::OnUpdateListView()
{
	COleVariant varNum, varID, varStore, varName, varPrice, varBorrower, varMemo;
	GetListCtrl().DeleteAllItems();
	int iActualItem = 0;
	CString szNum;
	while (!pRS->IsEOF())
	{
		pRS->GetFieldValue(_T("序号"), varNum);
		pRS->GetFieldValue(_T("书代号"), varID);
		pRS->GetFieldValue(_T("库位号"), varStore);
		pRS->GetFieldValue(_T("书名"), varName);
		pRS->GetFieldValue(_T("单价"), varPrice);
		pRS->GetFieldValue(_T("借阅人"), varBorrower);
		pRS->GetFieldValue(_T("备注"), varMemo);
		LV_ITEM lvitem;
		lvitem.mask = LVIF_TEXT;
		lvitem.iItem = iActualItem;
		lvitem.iSubItem = 0;
		szNum.Format(_T("%d"), varNum.lVal);
		lvitem.pszText = szNum.GetBuffer(szNum.GetLength());
		GetListCtrl().InsertItem(&lvitem);
		lvitem.mask = LVIF_TEXT;
		lvitem.iItem = iActualItem;
		lvitem.iSubItem = 1;
		lvitem.pszText = V_BSTRT(&varID);
		GetListCtrl().SetItem(&lvitem);
		lvitem.mask = LVIF_TEXT;
		lvitem.iItem = iActualItem;
		lvitem.iSubItem = 2;
		lvitem.pszText = V_BSTRT(&varStore);
		GetListCtrl().SetItem(&lvitem); 
		lvitem.mask = LVIF_TEXT;
		lvitem.iItem = iActualItem;
		lvitem.iSubItem = 3;
		lvitem.pszText = V_BSTRT(&varName);
		GetListCtrl().SetItem(&lvitem);
		lvitem.mask = LVIF_TEXT;
		lvitem.iItem = iActualItem;
		lvitem.iSubItem = 4;
		lvitem.pszText = V_BSTRT(&varPrice);
		GetListCtrl().SetItem(&lvitem);
		lvitem.mask = LVIF_TEXT;
		lvitem.iItem = iActualItem;
		lvitem.iSubItem = 5;
		lvitem.pszText = V_BSTRT(&varBorrower);
		GetListCtrl().SetItem(&lvitem);
		lvitem.iSubItem = 6;
		lvitem.pszText = V_BSTRT(&varMemo);
		GetListCtrl().SetItem(&lvitem);
		GetListCtrl().SetItemData(iActualItem, iActualItem);
		pRS->MoveNext();
		iActualItem++;
		nTotalRecordCount++;
	}
}


void CBookManagerView::OnClick(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	nCurSelected = GetListCtrl().GetNextItem(-1, LVNI_SELECTED);

	*pResult = 0;
}

⌨️ 快捷键说明

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