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

📄 readerdlg.cpp

📁 用MFC写的图书信息管理系统
💻 CPP
字号:
// ReaderDlg.cpp : implementation file
//

#include "stdafx.h"
#include "library.h"
#include "ReaderDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CReaderDlg dialog


CReaderDlg::CReaderDlg(CWnd* pView)
	: CDialog(CReaderDlg::IDD, pView)
{
	//{{AFX_DATA_INIT(CReaderDlg)
    m_pView=(CLibraryView*)pView;
	m_nReaderID = 0;
	m_strRName = _T("");
	//}}AFX_DATA_INIT
}


void CReaderDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CReaderDlg)
	DDX_Control(pDX, IDC_COMBO_TYPE, m_cOpera);
	DDX_Control(pDX, IDC_LIST_BOOK, m_cBookList);
	DDX_Text(pDX, IDC_EDIT_RID, m_nReaderID);
	DDX_Text(pDX, IDC_EDIT_RNAME, m_strRName);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CReaderDlg, CDialog)
	//{{AFX_MSG_MAP(CReaderDlg)
	ON_CBN_SELCHANGE(IDC_COMBO_TYPE, OnSelchangeComboType)
	ON_BN_CLICKED(IDC_BUT_EXIT, OnButExit)
	ON_BN_CLICKED(IDC_BUT_ADD_READER, OnButAddReader)
	ON_BN_CLICKED(IDC_BUT_NEXT_READER, OnButNextReader)
	ON_BN_CLICKED(IDC_BUT_DEL_READER, OnButDelReader)
	ON_BN_CLICKED(IDC_BUT_QUERY_READER, OnButQueryReader)
	ON_BN_CLICKED(IDC_BUT_CHANGE_RNAME, OnButChangeRname)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CReaderDlg message handlers

BOOL CReaderDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	

	
	m_cOpera.AddString ("添加");
	m_cOpera.AddString ("删除");
	m_cOpera.AddString ("改名");
	m_cOpera.AddString ("浏览");
	m_cOpera.AddString ("查询");

	m_cOpera.SetCurSel (0);
	GetDlgItem(IDC_BUT_DEL_READER)->EnableWindow(false);
	GetDlgItem(IDC_BUT_NEXT_READER)->EnableWindow(false);
	GetDlgItem(IDC_BUT_QUERY_READER)->EnableWindow(false);
	GetDlgItem(IDC_BUT_CHANGE_RNAME)->EnableWindow(false);

	m_cBookList.InsertColumn(0,"图书编号");
	m_cBookList.InsertColumn(1,"图书名称");
	m_cBookList.SetColumnWidth(0,100);
	m_cBookList.SetColumnWidth(1,100);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CReaderDlg::OnSelchangeComboType() 
{
	// TODO: Add your control notification handler code here
	int index=m_cOpera.GetCurSel();
	switch(index)
	{
	case 0://增加读者
		GetDlgItem(IDC_BUT_ADD_READER)->EnableWindow(true);
        GetDlgItem(IDC_EDIT_RNAME)->EnableWindow(true);
		GetDlgItem(IDC_EDIT_RID)->EnableWindow(true);
		GetDlgItem(IDC_BUT_DEL_READER)->EnableWindow(false);
	    GetDlgItem(IDC_BUT_NEXT_READER)->EnableWindow(false);
	    GetDlgItem(IDC_BUT_QUERY_READER)->EnableWindow(false);
		GetDlgItem(IDC_BUT_CHANGE_RNAME)->EnableWindow(false);
		break;
	case 1://删除读者
		GetDlgItem(IDC_EDIT_RNAME)->EnableWindow(false);
		GetDlgItem(IDC_EDIT_RID)->EnableWindow(false);
		GetDlgItem(IDC_BUT_DEL_READER)->EnableWindow(true);
		GetDlgItem(IDC_BUT_ADD_READER)->EnableWindow(false);
	    GetDlgItem(IDC_BUT_NEXT_READER)->EnableWindow(false);
	    GetDlgItem(IDC_BUT_QUERY_READER)->EnableWindow(false);
		GetDlgItem(IDC_BUT_CHANGE_RNAME)->EnableWindow(false);
		break;
	case 2://改名
		GetDlgItem(IDC_BUT_ADD_READER)->EnableWindow(false);
        GetDlgItem(IDC_EDIT_RNAME)->EnableWindow(true);
		GetDlgItem(IDC_EDIT_RID)->EnableWindow(false);
		GetDlgItem(IDC_BUT_DEL_READER)->EnableWindow(false);
	    GetDlgItem(IDC_BUT_NEXT_READER)->EnableWindow(false);
	    GetDlgItem(IDC_BUT_QUERY_READER)->EnableWindow(false);
		GetDlgItem(IDC_BUT_CHANGE_RNAME)->EnableWindow(true);
		break;
	case 3://浏览读者信息
		m_pView->ireader=0;
		GetDlgItem(IDC_BUT_NEXT_READER)->EnableWindow(true);
		GetDlgItem(IDC_EDIT_RNAME)->EnableWindow(false);
		m_strRName="";
		m_nReaderID=0;
		UpdateData(false);
		GetDlgItem(IDC_BUT_ADD_READER)->EnableWindow(false);
	    GetDlgItem(IDC_BUT_DEL_READER)->EnableWindow(false);
	    GetDlgItem(IDC_BUT_QUERY_READER)->EnableWindow(false);
		GetDlgItem(IDC_BUT_CHANGE_RNAME)->EnableWindow(false);
		break;
	case 4://查询读者信息
		m_strRName="";
		m_nReaderID=0;
		UpdateData(false);
		GetDlgItem(IDC_BUT_QUERY_READER)->EnableWindow(true);
		GetDlgItem(IDC_EDIT_RNAME)->EnableWindow(false);
		GetDlgItem(IDC_EDIT_RID)->EnableWindow(true);
		GetDlgItem(IDC_BUT_ADD_READER)->EnableWindow(false);
	    GetDlgItem(IDC_BUT_DEL_READER)->EnableWindow(false);
	    GetDlgItem(IDC_BUT_NEXT_READER)->EnableWindow(false);
		GetDlgItem(IDC_BUT_CHANGE_RNAME)->EnableWindow(false);
		break;
	}
	
}

void CReaderDlg::OnButExit() 
{
	// TODO: Add your control notification handler code here
    TRACE("Enter OnButExit()\n");
	m_pView->SendMessage(DESTROY_READER_DLG);
	
}

void CReaderDlg::OnButAddReader() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	TCHAR name[20];
	GetDlgItem(IDC_EDIT_RNAME)->GetWindowText(name,20);
	int id=m_nReaderID;
	int ret=m_pView->rdb.addreader(id,name);
	if(ret==1)
		AfxMessageBox("添加读者成功");
	else
		AfxMessageBox("添加读者失败,因为读者编号已经存在");

}

void CReaderDlg::OnButNextReader() 
{
	// TODO: Add your control notification handler code here
start:
    if(m_pView->rdb.noreader())
	{
		AfxMessageBox("一个读者都没有");
		return;
	}
    int top=m_pView->rdb.gettop();
	Reader* preader=m_pView->rdb.getreader(m_pView->ireader);
	m_pView->ireader++;
	if(m_pView->ireader==top)
		m_pView->ireader=0;

	if(preader==NULL)
	{
		goto start;
	}
	m_strRName=preader->getname();
	m_nReaderID=preader->getno();
	UpdateData(false);	
	ShowBorrowBook(preader);
}

void CReaderDlg::OnButDelReader() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	int id=m_nReaderID;
	Reader* r=m_pView->rdb.query(id);
	if(r==NULL)
	{
		AfxMessageBox("该读者不存者");
		return;
	}
	if(r->ishasbook())
	{
		AfxMessageBox("该读者还有书未还,不能删除");
		return;
	}
	r->delreader();
	AfxMessageBox("删除成功");
}

void CReaderDlg::OnButQueryReader() 
{
	// TODO: Add your control notification handler code here
    UpdateData(true);
	Reader *preader=m_pView->rdb.query(m_nReaderID);
	if(preader==NULL)
	{
		AfxMessageBox("该读者不存者");
		return;
	}
	m_strRName=preader->getname();
	UpdateData(false);	
	ShowBorrowBook(preader);
}

void CReaderDlg::OnButChangeRname() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	int readerid=m_nReaderID;
    CString name=m_strRName;
	Reader* r=m_pView->rdb.query(readerid);
	if(r==NULL)
	{
		AfxMessageBox("该读者不存在");
		return;
	}
	r->setname(name.GetBuffer(20));
	name.ReleaseBuffer();
	AfxMessageBox("改名成功");
	
}


void CReaderDlg::ShowBorrowBook(Reader * reader)
{
	if(reader==NULL)
		return;
	int *p=reader->getborbook();
	CString bid;
	CString bname;
	int col=0;
	Book* b=NULL;
	m_cBookList.DeleteAllItems();
	for(int i=0;i<Maxbor;i++)
	{
		if(p[i]!=0)
		{
			
			bid.Format("%d",p[i]);
			m_cBookList.InsertItem(col,bid);
			b=m_pView->bdb.query(p[i]);
			bname=b->getname();
			m_cBookList.SetItemText(col,1,bname);
			col++;
		}
	}
}

⌨️ 快捷键说明

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