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

📄 readm.cpp

📁 用mfc写的图书馆信息管理系统界面
💻 CPP
字号:
// ReadM.cpp : implementation file
//

#include "stdafx.h"
#include "LibMgr.h"
#include "ReadM.h"
#include "LibMgrDlg.h"

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

extern RLink Head;
extern linkNo;
/////////////////////////////////////////////////////////////////////////////
// CReadM dialog


CReadM::CReadM(CWnd* pParent /*=NULL*/)
	: CDialog(CReadM::IDD, pParent)
{
	//{{AFX_DATA_INIT(CReadM)
	m_num = _T("");
	m_name = _T("");
	m_unit = _T("");
	//}}AFX_DATA_INIT
}


void CReadM::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CReadM)
	DDX_Control(pDX, IDC_COMBO1, m_id);
	DDX_Control(pDX, IDC_RLIST, m_rlist);
	DDX_Text(pDX, IDC_EDIT1, m_num);
	DDX_Text(pDX, IDC_EDIT2, m_name);
	DDX_Text(pDX, IDC_EDIT3, m_unit);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CReadM, CDialog)
	//{{AFX_MSG_MAP(CReadM)
	ON_BN_CLICKED(IDC_READER, OnReader)
	ON_BN_CLICKED(IDC_SHOW, OnShow)
	ON_BN_CLICKED(IDC_QUE, OnQue)
	ON_NOTIFY(NM_CLICK, IDC_RLIST, OnClickRlist)
	ON_BN_CLICKED(IDC_MODIFY, OnModify)
	ON_BN_CLICKED(IDC_DEL, OnDel)
	ON_BN_CLICKED(IDC_DELALL, OnDelall)
	ON_BN_CLICKED(IDC_SAVE, OnSave)
	ON_BN_CLICKED(IDC_READIN, OnReadin)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CReadM message handlers

BOOL CReadM::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_rlist.SetExtendedStyle(LVS_EX_FULLROWSELECT);
	CRect rt;
	m_rlist.GetClientRect(&rt);
	m_rlist.InsertColumn(0,"借书证号",LVCFMT_LEFT,rt.right/5,0);
	m_rlist.InsertColumn(1,"姓名",LVCFMT_LEFT,rt.right/5,0);
	m_rlist.InsertColumn(2,"单位",LVCFMT_LEFT,rt.right/5,0);
	m_rlist.InsertColumn(3,"身份",LVCFMT_LEFT,rt.right/5,0);
	m_rlist.InsertColumn(4,"已借册数",LVCFMT_LEFT,rt.right/5,0);
//	linkNo=0;
//	reader.InitList();
	m_id.SetCurSel(-1);

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}


void CReadM::OnReader() 
{
	// TODO: Add your control notification handler code here
	//Head=reader.GetHead();
	UpdateData(TRUE);
	Num=m_num;
	Name=m_name;
	Unit=m_unit;
	Id=m_id.GetCurSel();

	if(Num=="") MessageBox("请输入借书证号!");
	else if(reader.Find(Head,Num)!=NULL) MessageBox("该借书证号已存在!");
	else if(Name=="") MessageBox("请输入姓名!");
	else if(Unit=="") MessageBox("请输入单位!");
	else if(Id==-1) MessageBox("请输入身份!");
	else
	{
		reader.Insert(Head,Num,Name,Unit,Id,linkNo);
		if(reader.Inok)
		{
			linkNo = linkNo+1;
		}
		OnShow();
	}

}

void CReadM::OnShow() 
{
	// TODO: Add your control notification handler code here
	//Head=reader.GetHead();
	RLink p;
	p=Head->Next;
	int i=0;
	CString ID,SUM;
	m_rlist.DeleteAllItems();
	while(p!=NULL)
	{
		
		switch(p->id)//将id值转换为字符串
		{
		case 0 : ID="本科生"; break;
		case 1 : ID="研究生"; break;
		case 2 : ID="教师"; break;
		}
		switch(p->sum)
		{
		case 0 : SUM="0"; break;
		case 1 : SUM="1"; break;
		case 2 : SUM="2"; break;
		case 3 : SUM="3"; break;
		case 4 : SUM="4"; break;
		case 5 : SUM="5"; break;
		case 6 : SUM="6"; break;
		case 7 : SUM="7"; break;
		case 8 : SUM="8"; break;
		case 9 : SUM="9"; break;
		case 10 : SUM="10"; break;
		}

		m_rlist.InsertItem(i,p->Num);
		m_rlist.SetItemText(i,1,p->Name);
		m_rlist.SetItemText(i,2,p->Unit);
		m_rlist.SetItemText(i,3,ID);
		m_rlist.SetItemText(i,4,SUM);
		p=p->Next;
		i=i+1;
	}
	SetDlgItemText(IDC_EDIT1,"");//将各编辑框清空,以便下次输入
	SetDlgItemText(IDC_EDIT2,"");
	SetDlgItemText(IDC_EDIT3,"");
	m_id.SetCurSel(-1);
}


void CReadM::OnQue() 
{
	// TODO: Add your control notification handler code here
	CString num,ID,SUM;
	UpdateData(TRUE);
	num=m_num;
	RLink temp;
//	Head=reader.GetHead();
	temp=reader.Find(Head,num);
	if(temp!=NULL)
	{
		m_rlist.DeleteAllItems();
		switch(temp->id)//将id值转换为字符串
		{
		case 0 : ID="本科生"; break;
		case 1 : ID="研究生"; break;
		case 2 : ID="教师"; break;
		}
		switch(temp->sum)
		{
		case 0 : SUM="0"; break;
		case 1 : SUM="1"; break;
		case 2 : SUM="2"; break;
		case 3 : SUM="3"; break;
		case 4 : SUM="4"; break;
		case 5 : SUM="5"; break;
		case 6 : SUM="6"; break;
		case 7 : SUM="7"; break;
		case 8 : SUM="8"; break;
		case 9 : SUM="9"; break;
		case 10 : SUM="10"; break;
		}
		
		m_rlist.InsertItem(0,temp->Num);
		m_rlist.SetItemText(0,1,temp->Name);
		m_rlist.SetItemText(0,2,temp->Unit);
		m_rlist.SetItemText(0,3,ID);
		m_rlist.SetItemText(0,4,SUM);
		
		SetDlgItemText(IDC_EDIT1,temp->Num);
		SetDlgItemText(IDC_EDIT2,temp->Name);
		SetDlgItemText(IDC_EDIT3,temp->Unit);
		m_id.SetCurSel(temp->id);
	}
	else
	{
		MessageBox("无法找到该读者!");
		SetDlgItemText(IDC_EDIT1,"");//将各编辑框清空,以便下次输入
		SetDlgItemText(IDC_EDIT2,"");
		SetDlgItemText(IDC_EDIT3,"");
		m_id.SetCurSel(-1);
	}

}

void CReadM::OnClickRlist(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	RLink p;
	int i=m_rlist.GetSelectionMark();
	m_num=m_rlist.GetItemText(i,0);
	m_name=m_rlist.GetItemText(i,1);
	m_unit=m_rlist.GetItemText(i,2);
	
	p=reader.GetList(Head,i);
	m_id.SetCurSel(p->id);

	UpdateData(FALSE);
	*pResult = 0;
}


void CReadM::OnModify() 
{
	// TODO: Add your control notification handler code here
	int pos,temp;
	RLink p;
	pos=m_rlist.GetSelectionMark();
	temp=linkNo;
	linkNo=pos;
	p=reader.GetList(Head,pos);
	p->Num="";
	OnReader();
	reader.Delete(Head,pos+1);
	OnShow();
	linkNo=temp;
}

void CReadM::OnDel() 
{
	// TODO: Add your control notification handler code here
	int i=m_rlist.GetSelectionMark();
	reader.Delete(Head,i);
	if(reader.Delok)
	{
		linkNo=linkNo-1;
	}
	OnShow();
}



void CReadM::OnDelall() 
{
	// TODO: Add your control notification handler code here
	for(int i=0;i<linkNo;i++)
	{
		reader.Delete(Head,0);

	}
	//Head->Next=NULL;
	//linkNo=0;
	OnShow();
}

void CReadM::OnSave() 
{
	// TODO: Add your control notification handler code here
	CString Filter;
	Filter = "文本文件(*.txt)|*.txt||";

	CFileDialog FileDlg (FALSE, ".txt", NULL, OFN_OVERWRITEPROMPT, Filter);

	if(FileDlg.DoModal()==IDOK)
	{
		CString filename=FileDlg.GetPathName();
		RText.Open(filename,CFile::modeCreate | CFile::modeWrite);
		RLink pr;
		CString content,ID,SUM;
//		Head=reader.GetHead();
		pr=Head->Next;
		while(pr!=NULL)
		{
			switch(pr->id)//将id值转换为字符串
		{
		case 0 : ID="本科生"; break;
		case 1 : ID="研究生"; break;
		case 2 : ID="教师"; break;
		}
		switch(pr->sum)
		{
		case 0 : SUM="0"; break;
		case 1 : SUM="1"; break;
		case 2 : SUM="2"; break;
		case 3 : SUM="3"; break;
		case 4 : SUM="4"; break;
		case 5 : SUM="5"; break;
		case 6 : SUM="6"; break;
		case 7 : SUM="7"; break;
		case 8 : SUM="8"; break;
		case 9 : SUM="9"; break;
		case 10 : SUM="10"; break;
		}

		content=pr->Num+","+pr->Name+","+pr->Unit+","+ID+","+SUM+";"+"\n";
		RText.WriteString(content);
			pr=pr->Next;
		}
		RText.Close();

	}
}

void CReadM::OnReadin() 
{
	// TODO: Add your control notification handler code here
	CString Filter;
	int pos,n;
	int i,j;
	int k=0;
	Filter = "文本文件(*.txt)|*.txt||";
	CFileDialog FileDlg (TRUE, NULL, NULL, OFN_HIDEREADONLY, Filter);

	if (FileDlg.DoModal () == IDOK)
	{
		reader.InitList();
		Head=reader.GetHead();
		RLink pr;
		pr=Head->Next;
		linkNo=0;
		CString filename=FileDlg.GetPathName();
		RText.Open(filename,CFile::modeReadWrite);
		CString num,name,unit,ID,SUM,content;
		
		while(RText.ReadString(content))
		{
			pos=content.Find(",");            //以逗号作为分隔符
			num=content.Mid(0,pos);
			n=pos;
			pos=content.Find(",",pos+1);           
			name=content.Mid(n+1,pos-n-1);
			n=pos;
			pos=content.Find(",",pos+1);           
			unit=content.Mid(n+1,pos-n-1);
			n=pos;
			pos=content.Find(",",pos+1);           
			ID=content.Mid(n+1,pos-n-1);
			n=pos;
			pos=content.Find(";",pos+1);           
			SUM=content.Mid(n+1,pos-n-1);
			n=pos;

			if(ID=="本科生") i=0;
			else if(ID=="研究生") i=1;
			else if(ID=="教师") i=2;
			else i=-1;
			reader.Insert(Head,num,name,unit,i,linkNo);
			pr=reader.GetList(Head,k);
			if(SUM=="0") j=0;
			else if(SUM=="1") j=1;
			else if(SUM=="2") j=2;
			else if(SUM=="3") j=3;
			else if(SUM=="4") j=4;
			else if(SUM=="5") j=5;
			else if(SUM=="6") j=6;
			else if(SUM=="7") j=7;
			else if(SUM=="8") j=8;
			else if(SUM=="9") j=9;
			else if(SUM=="10") j=10;
			pr->sum=j;
			k++;
			linkNo=linkNo+1;

		}

		RText.Close();
		OnShow();

	}
}

⌨️ 快捷键说明

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