📄 bookmanagerview.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 + -