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

📄 libdlg.cpp

📁 简单的图书管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -