📄 libdlg.cpp
字号:
// LibDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Lib.h"
#include "LibDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLibDlg dialog
CLibDlg::CLibDlg(CWnd* pParent /*=NULL*/)
: CDialog(CLibDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CLibDlg)
m_BCode = _T("");
m_BKind = _T("");
m_BPress = _T("");
m_BName = _T("");
m_BAuthor = _T("");
m_BDate = _T("");
m_BISDN = _T("");
m_BTimes = _T("");
m_BPrice = _T("");
m_BQuan = _T("");
m_RCode = _T("");
m_RName = _T("");
m_RCompany = _T("");
m_RKind = _T("");
m_RBooks = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CLibDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLibDlg)
DDX_Control(pDX, IDC_List_Book, m_List_Book);
DDX_Control(pDX, IDC_List_Reader, m_List_Reader);
DDX_Text(pDX, IDC_BCode, m_BCode);
DDX_Text(pDX, IDC_BKind, m_BKind);
DDX_Text(pDX, IDC_BPress, m_BPress);
DDX_Text(pDX, IDC_BName, m_BName);
DDX_Text(pDX, IDC_BAuthor, m_BAuthor);
DDX_Text(pDX, IDC_BDate, m_BDate);
DDX_Text(pDX, IDC_BISDN, m_BISDN);
DDX_Text(pDX, IDC_BTimes, m_BTimes);
DDX_Text(pDX, IDC_BPrice, m_BPrice);
DDX_Text(pDX, IDC_BQuan, m_BQuan);
DDX_Text(pDX, IDC_RCode, m_RCode);
DDX_Text(pDX, IDC_RName, m_RName);
DDX_Text(pDX, IDC_RCompany, m_RCompany);
DDX_Text(pDX, IDC_RKind, m_RKind);
DDX_Text(pDX, IDC_RBooks, m_RBooks);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CLibDlg, CDialog)
//{{AFX_MSG_MAP(CLibDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BInsert, OnBInsert)
ON_BN_CLICKED(IDC_BDel, OnBDel)
ON_BN_CLICKED(IDC_BModify, OnBModify)
ON_BN_CLICKED(IDC_BOut, OnBOut)
ON_BN_CLICKED(IDC_BIn, OnBIn)
ON_BN_CLICKED(IDC_BStat, OnBStat)
ON_BN_CLICKED(IDC_RInsert, OnRInsert)
ON_BN_CLICKED(IDC_RDel, OnRDel)
ON_BN_CLICKED(IDC_RModify, OnRModify)
ON_LBN_DBLCLK(IDC_List_Book, OnDblclkListBook)
ON_LBN_DBLCLK(IDC_List_Reader, OnDblclkListReader)
ON_BN_CLICKED(IDC_BLoad, OnBLoad)
ON_BN_CLICKED(IDC_BSave, OnBSave)
ON_BN_CLICKED(IDC_RLoad, OnRLoad)
ON_BN_CLICKED(IDC_RSave, OnRSave)
ON_BN_CLICKED(IDC_BShowlist, OnBShowlist)
ON_BN_CLICKED(IDC_BFind, OnBFind)
ON_BN_CLICKED(IDC_RShowlist, OnRShowlist)
ON_BN_CLICKED(IDC_RFind, OnRFind)
ON_BN_CLICKED(IDC_RStat, OnRStat)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLibDlg message handlers
BOOL CLibDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
Blink_No = 0;//节点个数
Blist_No = -1;//节点序列号
Book.InitListB();
char* pFileName = "c:/Books.txt";
PbText.Open(pFileName,CFile::modeCreate | CFile::modeReadWrite);
PbText.Close();
Rlink_No=0;
Rlist_No=-1;
Reader.InitListR();
char* rFileName="c:/reader.txt";
RbText.Open(rFileName,CFile::modeCreate | CFile::modeReadWrite);
RbText.Close();
return TRUE; // return TRUE unless you set the focus to a control
}
void CLibDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CLibDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CLibDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CLibDlg::OnBInsert()
{
// TODO: Add your control notification handler code here
BHead=Book.GetHeadB();
UpdateData(TRUE);
BCode=m_BCode;
BKind=m_BKind;
BPress=m_BPress;
BName=m_BName;
BAuthor=m_BAuthor;
BDate=m_BDate;
BISDN=m_BISDN;
BTimes=m_BTimes;
BPrice=m_BPrice;
BQuan=m_BQuan;
Book.BInsert(BHead,BCode,BKind,BPress,BName,BAuthor,BDate,BISDN,BTimes,BPrice,BQuan,Blink_No);
if(Book.BInok)
{
Blink_No = Blink_No+1;
}
OnBShowlist();
}
void CLibDlg::OnBDel()
{
// TODO: Add your control notification handler code here
Book.Delete(BHead,Blist_No);
if(Book.BDelok)
{
Blink_No = Blink_No-1;
}
OnBShowlist();
}
void CLibDlg::OnBModify()
{
// TODO: Add your control notification handler code here
int num;
num = Blink_No;
Blink_No = Blist_No;
OnBInsert();
Book.Delete(BHead,(Blist_No)+1);
OnBShowlist();
Blink_No = num;
}
void CLibDlg::OnBOut() // 借出图书
{
int num,Rnum,Bnum;
num = Blink_No;
//Blink_No = Blist_No;
LinkB Br;
LinkR Rr;
CString Rstr,Bstr;
Br=Book.GetListB(BHead,Blist_No);
Rr=Reader.GetListR(RHead,Rlist_No);
if(atoi(Br->BQuan)!=0)
{
Bnum=atoi(Br->BQuan)-1;
Bstr.Format("%d",Bnum);
Br->BQuan=Bstr;
Br->Borrower=Rr->RName;
Rnum=atoi(Rr->RBooks)+1;
Rstr.Format("%d",Rnum);
Rr->RBooks=Rstr;
OnBShowlist();
OnRShowlist();
MessageBox("成功借出该图书!");
}
else
{
MessageBox("该图书已经被借出!");
SetDlgItemText(IDC_BCode,"");
SetDlgItemText(IDC_BKind,"");
SetDlgItemText(IDC_BPress,"");
SetDlgItemText(IDC_BName,"");
SetDlgItemText(IDC_BAuthor,"");
SetDlgItemText(IDC_BDate,"");
SetDlgItemText(IDC_BISDN,"");
SetDlgItemText(IDC_BTimes,"");
SetDlgItemText(IDC_BPrice,"");
SetDlgItemText(IDC_BQuan,"");
}
}
void CLibDlg::OnBIn() // 归还图书
{
int num,Bnum,Rnum;
num = Blink_No;
//Blink_No = Blist_No;
LinkB Br;
LinkR Rr;
CString Rstr,Bstr;
Br=Book.GetListB(BHead,Blist_No);//指向当前图书的指针
Rr=Reader.GetListR(RHead,Rlist_No);//指向当前读者的指针
if(atof(Br->BQuan)==0&&Br->Borrower==Rr->RName)
{
/* OnBInsert();
Book.Delete(BHead,(Blist_No)+1);
OnBShowlist();
Blink_No = num;*/
Bnum=atoi(Br->BQuan)+1;
Bstr.Format("%d",Bnum);
Br->BQuan=Bstr;
Rnum=atoi(Rr->RBooks)-1;
Rstr.Format("%d",Rnum);
Rr->RBooks=Rstr;
OnBShowlist();
OnRShowlist();
MessageBox("成功归还该图书!");
}
else
{
MessageBox("该图书已经归还或者非法用户还书!");
SetDlgItemText(IDC_BCode,Br->BCode);
SetDlgItemText(IDC_BKind,Br->BKind);
SetDlgItemText(IDC_BPress,Br->BPress);
SetDlgItemText(IDC_BName,Br->BName);
SetDlgItemText(IDC_BAuthor,Br->BAuthor);
SetDlgItemText(IDC_BDate,Br->BDate);
SetDlgItemText(IDC_BISDN,Br->BDate);
SetDlgItemText(IDC_BTimes,Br->BTimes);
SetDlgItemText(IDC_BPrice,Br->BPrice);
SetDlgItemText(IDC_BQuan,Br->BQuan);
}
}
void CLibDlg::OnBStat()
{
BHead=Book.GetHeadB();
LinkB Bp=BHead->Next;
int BookTot=0,OutTot=0,InTot=0;
ofstream fout("BookTot.txt");
while(Bp!=NULL)
{
fout<<"图书编号:"<<Bp->BName;
fout<<" 分类号:"<<Bp->BCode;
fout<<" 出版社"<<Bp->BPress;
fout<<" 书名:"<<Bp->BName;
fout<<" 作者:"<<Bp->BAuthor;
fout<<" 出版日期:"<<Bp->BDate;
fout<<" ISBN:"<<Bp->BISDN;
fout<<" 版次"<<Bp->BTimes;
fout<<" 定价"<<Bp->BPrice;
if(atoi(Bp->BQuan)==0) fout<<" 状态:借出\n";
else fout<<" 状态:在馆\n";
++BookTot;
if(atoi(Bp->BQuan)==0) ++OutTot;
else ++InTot;
Bp=Bp->Next;
}
fout<<"\n馆藏书籍总数为:"<<BookTot;
fout<<"\n已借出图书总数为:"<<OutTot;
fout<<"\n在馆书籍总数为:"<<InTot;
}
void CLibDlg::OnRInsert()
{ RHead=Reader.GetHeadR();
UpdateData(TRUE);
RCode=m_RCode;
RName=m_RName;
RCompany=m_RCompany;
RKind=m_RKind;
RBooks=m_RBooks;
Reader.RInsert(RHead,RCode,RName,RCompany,RKind,RBooks,Rlink_No);
if(Reader.RInok)
{
Rlink_No = Rlink_No+1;
}
OnRShowlist();
}
void CLibDlg::OnRDel()
{
Reader.Delete(RHead,Rlist_No);
if(Reader.RDelok)
{
Rlink_No =Rlink_No-1;
}
OnRShowlist();
}
void CLibDlg::OnRModify()
{
int num;
num = Rlink_No;
Rlink_No = Rlist_No;
OnRInsert();
Reader.Delete(RHead,(Rlist_No)+1);
OnRShowlist();
Rlink_No = num;
}
void CLibDlg::OnDblclkListBook()
{
// TODO: Add your control notification handler code here
LinkB Br;
Blist_No= m_List_Book.GetCurSel() ;
Br= Book.GetListB(BHead,Blist_No);
SetDlgItemText(IDC_BCode,Br->BCode);
SetDlgItemText(IDC_BKind,Br->BKind);
SetDlgItemText(IDC_BPress,Br->BPress);
SetDlgItemText(IDC_BName,Br->BName);
SetDlgItemText(IDC_BAuthor,Br->BAuthor);
SetDlgItemText(IDC_BDate,Br->BDate);
SetDlgItemText(IDC_BISDN,Br->BISDN);
SetDlgItemText(IDC_BTimes,Br->BTimes);
SetDlgItemText(IDC_BPrice,Br->BPrice);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -