📄 libraryview.cpp
字号:
// libraryView.cpp : ClibraryView 类的实现
//
#pragma once
#include "stdafx.h"
#include "library.h"
#include "CardApply.h"
#include "CardDrop.h"
#include "BookBorrowDlg.h"
#include "BookReturnDlg.h"
#include "BookDeleteDlg.h"
#include "BookQueryDlg.h"
#include "BookBorrowed.h"
#include "BookinDlg.h"
#include "book.h"
#include "borrow.h"
#include "book.h"
#include "card.h"
#include "MainFrm.h"
#include "librarySet.h"
#include "libraryDoc.h"
#include "libraryView.h"
#include "LoginDialog.h"
#include "Info.h"
#include <iostream>
#include <fstream>
using namespace std;
CString AdministratorID;
void Book_List(Cbook &m_bookSet, CListCtrl& ListCtrl);
void Card_List(Ccard &m_cardSet, CListCtrl& ListCtrl);
static bool _AtlSimpleFloatParse(LPCTSTR lpszText, double& d);
IMPLEMENT_DYNCREATE(ClibraryView, CRecordView)
BEGIN_MESSAGE_MAP(ClibraryView, CRecordView)
ON_BN_CLICKED(IDC_BUTTON2, &ClibraryView::OnBnClickedButton2)
ON_COMMAND(ID_CARD_END, &ClibraryView::OnCardEnd)
ON_COMMAND(ID_Book_Return, &ClibraryView::OnBookReturn)
ON_COMMAND(ID_Book_In, &ClibraryView::OnBookIn)
ON_COMMAND(ID_Book_Borrow, &ClibraryView::OnBookBorrow)
ON_COMMAND(ID_CARD_APPLY, &ClibraryView::OnCardApply)
ON_COMMAND(ID_logout, &ClibraryView::Onlogout)
ON_COMMAND(ID_Query_Book, &ClibraryView::OnQueryBook)
ON_COMMAND(ID_Exit, &ClibraryView::OnExit)
ON_COMMAND(ID_Query_user, &ClibraryView::OnQueryuser)
ON_COMMAND(ID_Batch_in, &ClibraryView::OnBatchin)
ON_COMMAND(ID_APP_ABOUT, &ClibraryView::OnAppAbout)
ON_UPDATE_COMMAND_UI(ID_CARD_APPLY, &ClibraryView::OnUpdateCardApply)
ON_UPDATE_COMMAND_UI(ID_Book_Borrow, &ClibraryView::OnUpdateBookBorrow)
ON_UPDATE_COMMAND_UI(ID_CARD_END, &ClibraryView::OnUpdateCardEnd)
ON_UPDATE_COMMAND_UI(ID_Book_In, &ClibraryView::OnUpdateBookIn)
ON_UPDATE_COMMAND_UI(ID_Book_Return, &ClibraryView::OnUpdateBookReturn)
ON_UPDATE_COMMAND_UI(ID_logout, &ClibraryView::OnUpdatelogout)
ON_COMMAND(ID_BOOK_DELETE, &ClibraryView::OnBookDelete)
ON_UPDATE_COMMAND_UI(ID_BOOK_DELETE, &ClibraryView::OnUpdateBookDelete)
ON_UPDATE_COMMAND_UI(ID_Batch_in, &ClibraryView::OnUpdateBatchin)
END_MESSAGE_MAP()
// ClibraryView 构造/析构
ClibraryView::ClibraryView()
: CRecordView(ClibraryView::IDD)
{
m_pSet = NULL;
// TODO: 在此处添加构造代码
}
ClibraryView::~ClibraryView()
{
}
void ClibraryView::DoDataExchange(CDataExchange* pDX)
{
CRecordView::DoDataExchange(pDX);
// 可以在此处插入 DDX_Field* 函数以将控件“连接”到数据库字段,例如
// DDX_FieldText(pDX, IDC_MYEDITBOX, m_pSet->m_szColumn1, m_pSet);
// DDX_FieldCheck(pDX, IDC_MYCHECKBOX, m_pSet->m_bColumn2, m_pSet);
// 有关更多信息,请参阅 MSDN 和 ODBC 示例
DDX_Control(pDX, IDC_LIST_BOOK, m_BookListCtrl);
DDX_Control(pDX, IDC_LIST_CARD, m_CardListCtrl);
}
BOOL ClibraryView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改
// CREATESTRUCT cs 来修改窗口类或样式
return CRecordView::PreCreateWindow(cs);
}
// ClibraryView 诊断
#ifdef _DEBUG
void ClibraryView::AssertValid() const
{
CRecordView::AssertValid();
}
void ClibraryView::Dump(CDumpContext& dc) const
{
CRecordView::Dump(dc);
}
ClibraryDoc* ClibraryView::GetDocument() const // 非调试版本是内联的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(ClibraryDoc)));
return (ClibraryDoc*)m_pDocument;
}
#endif //_DEBUG
// ClibraryView 数据库支持
CRecordset* ClibraryView::OnGetRecordset()
{
return m_pSet;
}
void ClibraryView::OnInitialUpdate()
{
m_pSet = &GetDocument()->m_librarySet;
CRecordView::OnInitialUpdate();
LoginDialog LoginDialog;
bool LoginSuccess;
bool Anonymous;
CString tmp;
CMainFrame *pMainWnd = (CMainFrame *)AfxGetMainWnd();
// 显示登陆对话框
while (true)
{
if ((LoginDialog.DoModal()) == IDOK)
{
if (LoginDialog.m_CheckAnonymous) // 匿名登陆
{
// 设置主框架标题
pMainWnd->SetWindowText((CString)("图书馆管理系统 - 匿名登陆"));
Anonymous = true;
AdministratorID = "";
break;
}
// 构造查询语句查询对应的理员及其密码
tmp = (CString)("ID like '") + LoginDialog.m_administratorID + (CString)("' and password like '")
+ LoginDialog.m_password + (CString)("'");
m_pSet->m_strFilter = tmp;
m_pSet->Requery();
LoginSuccess = !m_pSet->IsEOF(); // 若管理员不存在或密码错误,则m_pSet->IsEOF() = true
if (LoginSuccess)
{
pMainWnd->SetWindowText((CString)("图书馆管理系统 - 管理员登陆") + LoginDialog.m_administratorID);
Anonymous = false;
AdministratorID = LoginDialog.m_administratorID;
break;
}
else
MessageBox(_T("管理员不存在或密码错误!"), _T("错误"), MB_OK | MB_ICONERROR);
}
else
{
exit(0);
}
}
// 匿名登陆
if (Anonymous)
{
this->anonymous=true;
AnonymousLogin();
}
// 管理员登陆
else
{
this->anonymous=false;
AdministratorLogin();
}
}
void Book_List(Cbook &m_bookSet, CListCtrl& ListCtrl)
{
if (!m_bookSet.IsOpen())
m_bookSet.Open();
m_bookSet.m_strSort = "bno desc";
m_bookSet.Requery();
CString tmp;
int Item;
// 删除原来的项目,显示查询结果
ListCtrl.DeleteAllItems();
while (!m_bookSet.IsEOF())
{
Item = ListCtrl.InsertItem(0,(LPCTSTR)(CString)m_bookSet.m_bno);
ListCtrl.SetItemText(Item, 1, (LPCTSTR)(CString)m_bookSet.m_category);
ListCtrl.SetItemText(Item, 2, (LPCTSTR)(CString)m_bookSet.m_title);
ListCtrl.SetItemText(Item, 3, (LPCTSTR)(CString)m_bookSet.m_press);
tmp.Format(_T("%d"), m_bookSet.m_year);
ListCtrl.SetItemText(Item, 4, (LPCTSTR)tmp);
ListCtrl.SetItemText(Item, 5, (LPCTSTR)(CString)m_bookSet.m_author);
tmp.Format(_T("%.2lf"), m_bookSet.m_price);
ListCtrl.SetItemText(Item, 6, (LPCTSTR)tmp);
tmp.Format(_T("%d"), m_bookSet.m_total);
ListCtrl.SetItemText(Item, 7, (LPCTSTR)tmp);
tmp.Format(_T("%d"), m_bookSet.m_stock);
ListCtrl.SetItemText(Item, 8, (LPCTSTR)tmp);
m_bookSet.MoveNext();
}
}
// 查询并列表显示借书卡
void Card_List(Ccard &m_cardSet, CListCtrl& ListCtrl)
{
if (!m_cardSet.IsOpen())
m_cardSet.Open();
m_cardSet.m_strSort = "cno desc";
m_cardSet.Requery();
int Item;
ListCtrl.DeleteAllItems();
while (!m_cardSet.IsEOF())
{
Item = ListCtrl.InsertItem(0,(LPCTSTR)(CString)m_cardSet.m_cno);
ListCtrl.SetItemText(Item, 1, (LPCTSTR)(CString)m_cardSet.m_name);
ListCtrl.SetItemText(Item, 2, (LPCTSTR)(CString)m_cardSet.m_department);
if (m_cardSet.m_type == "U")
ListCtrl.SetItemText(Item, 3, (LPCTSTR)(CString)"本科生");
else if (m_cardSet.m_type == "G")
ListCtrl.SetItemText(Item, 3, (LPCTSTR)(CString)"研究生");
else if (m_cardSet.m_type == "T")
ListCtrl.SetItemText(Item, 3, (LPCTSTR)(CString)"教师");
else if (m_cardSet.m_type == "O")
ListCtrl.SetItemText(Item, 3, (LPCTSTR)(CString)"管理人员");
m_cardSet.MoveNext();
}
}
void ClibraryView::AnonymousLogin()
{
AdministratorLogin();
m_CardListCtrl.DeleteAllItems();
// 借书卡列表控件无效
GetDlgItem(IDC_STATIC_CARD)->EnableWindow(FALSE);
GetDlgItem(IDC_LIST_CARD)->EnableWindow(FALSE);
}
void ClibraryView::AdministratorLogin()
{
CMainFrame *pMainWnd = (CMainFrame *)AfxGetMainWnd();
DWORD dwStyle, ExStyle;
// 初始化List控件的大小
CRect rc;
pMainWnd->GetWindowRect(&rc);
GetDlgItem(IDC_STATIC_BOOK)->SetWindowPos(NULL, 8, 6, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
GetDlgItem(IDC_STATIC_CARD)->SetWindowPos(NULL, (rc.right - rc.left) * 2 / 3 + 8, 6, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
// 设置图书列表控件
m_BookListCtrl.SetWindowPos(NULL, 8, 22, (rc.right - rc.left) * 2 / 3 - 8, rc.bottom - rc.top - 200, SWP_NOZORDER);
// 使List控件整栏选取:
dwStyle = ::GetWindowLong(m_BookListCtrl.m_hWnd,GWL_STYLE);
// 设置为报表形式
SetWindowLong(m_BookListCtrl.m_hWnd,GWL_STYLE,dwStyle|LVS_REPORT);
ExStyle = m_BookListCtrl.GetExtendedStyle();
// 设置为整栏选择和网格线
m_BookListCtrl.SetExtendedStyle(ExStyle|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
// 设置借书卡列表控件
m_CardListCtrl.SetWindowPos(NULL, (rc.right - rc.left) * 2 / 3 + 8, 22, (rc.right - rc.left) / 3 - 26, rc.bottom - rc.top - 200, SWP_NOZORDER);
// 使List控件整栏选取:
dwStyle = ::GetWindowLong(m_CardListCtrl.m_hWnd,GWL_STYLE);
// 设置为报表形式
SetWindowLong(m_CardListCtrl.m_hWnd,GWL_STYLE,dwStyle|LVS_REPORT);
ExStyle = m_CardListCtrl.GetExtendedStyle();
// 设置为整栏选择和网格线
m_CardListCtrl.SetExtendedStyle(ExStyle|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
// 为图书列表控件添加栏目
m_BookListCtrl.InsertColumn(0, _T("书号"), LVCFMT_LEFT, 60, -1);
m_BookListCtrl.InsertColumn(1, _T("分类"), LVCFMT_LEFT, 80, -1);
m_BookListCtrl.InsertColumn(2, _T("书名"), LVCFMT_LEFT, 150, -1);
m_BookListCtrl.InsertColumn(3, _T("出版社"), LVCFMT_LEFT, 150, -1);
m_BookListCtrl.InsertColumn(4, _T("出版年份"), LVCFMT_LEFT, 80, -1);
m_BookListCtrl.InsertColumn(5, _T("作者"), LVCFMT_LEFT, 80, -1);
m_BookListCtrl.InsertColumn(6, _T("价格"), LVCFMT_LEFT, 60, -1);
m_BookListCtrl.InsertColumn(7, _T("总藏书量"), LVCFMT_LEFT, 80, -1);
m_BookListCtrl.InsertColumn(8, _T("库存量"), LVCFMT_LEFT, 80, -1);
// 为借书卡列表控件添加栏目
m_CardListCtrl.InsertColumn(0, _T("卡号"), LVCFMT_LEFT, 80, -1);
m_CardListCtrl.InsertColumn(1, _T("姓名"), LVCFMT_LEFT, 80, -1);
m_CardListCtrl.InsertColumn(2, _T("单位"), LVCFMT_LEFT, 80, -1);
m_CardListCtrl.InsertColumn(3, _T("类别"), LVCFMT_LEFT, 80, -1);
// 查询所有图书
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -