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

📄 phone.cpp

📁 记录工作日志方面的信息
💻 CPP
字号:
// Phone.cpp : implementation file
//

#include "stdafx.h"
#include "Papaz.h"
#include "Phone.h"
#include "PhoneSet.h"
#include "PhoneDel.h"
#include "PhoneFind.h"
#include "PhoneAdd.h"
#include "PhoneEdit.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CPhone property page

IMPLEMENT_DYNCREATE(CPhone, CPropertyPage)

CPhone::CPhone() : CPropertyPage(CPhone::IDD)
{
	//{{AFX_DATA_INIT(CPhone)
	
	//}}AFX_DATA_INIT
	sDriver = "MICROSOFT ACCESS DRIVER (*.mdb)";
	sFile = "Papaz.mdb";
	sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s",sDriver,sFile);
}

CPhone::~CPhone()
{
}

void CPhone::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPhone)
	DDX_Control(pDX, IDC_LIST1, m_ListCtrl);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CPhone, CPropertyPage)
	//{{AFX_MSG_MAP(CPhone)
	ON_BN_CLICKED(IDC_DEL, OnDel)
	ON_BN_CLICKED(IDC_FIND, OnFind)
	ON_BN_CLICKED(IDC_SHOW, OnShow)
	ON_BN_CLICKED(IDC_ADD, OnAdd)
	ON_BN_CLICKED(IDC_EDIT, OnEdit)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPhone message handlers

BOOL CPhone::OnInitDialog() 
{
	CPropertyPage::OnInitDialog();
	
	m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
	m_ListCtrl.InsertColumn(0,_T("姓名"),LVCFMT_IMAGE|LVCFMT_LEFT);
	m_ListCtrl.InsertColumn(1,_T("电话号码"));
	int j;
    for(j=0;j<2;j++)
	{
		m_ListCtrl.SetColumnWidth(j ,90);
	}
	
	//显示所有记录
	this->Show();	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CPhone::OnDel() 
{
	database.Open(NULL,false ,false ,sDsn);	
	CPhoneSet m_pSet( &database );
	m_pSet.Open();
	CPhoneDel dlg;
	if(dlg.DoModal()==IDOK)
	{
		 BOOL b=FALSE;
		 m_pSet.MoveFirst();
		 do
		 {
		  if(dlg.m_DeleteName!=m_pSet.m_column1)
		  m_pSet.MoveNext();
		  else
			{   
			  //将列表框清空
			 m_ListCtrl.DeleteAllItems();
			 b=TRUE;
			 //从数据库中删除记录
			 m_pSet.Delete();
			 //重新在列表框中显示记录
//			 m_pSet.Requery();
			 database.Close();
			 this->Show();
			 database.Open(NULL,false ,false ,sDsn);
			 m_pSet.Open();
			 m_pSet.MoveFirst();
			 break;
			} 
		}while(!m_pSet.IsEOF());
	if(b==FALSE)
	AfxMessageBox("没有此记录");
	}	
//	m_pSet.Close();
	database.Close();
	
}

void CPhone::OnFind() 
{
	//	like %查询内容% 包含查询内容 
	//	like %查询内容 以查询内容结尾 
	//	like 查询内容% 以查询内容开始的
	//一般通用的数据库的like使用 % ,但是ACCESS是不一样的,具体使用是这样:
	//记录的内容为“乐哈哈”
	//select * from 地名索引 where [name] like '哈哈%%'; 
	//select * from 地名索引 where [name] like '%%哈哈%%'; 
	CPhoneFind dlg;
	if(dlg.DoModal()==IDOK)
	{
		//记录集与数据库不同,记录集用于存放对数据库进行查询等操作后的内容
/*		CString strSQL;
		CDatabase database;		//定义数据库对象
		//以下是自动连接数据库
		CString sDriver = "MICROSOFT ACCESS DRIVER (*.mdb)";
		CString sDsn;
		CString sFile = "电话簿.mdb";
		sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s",sDriver,sFile);
*/	 	database.Open(NULL,false ,false ,sDsn);		//打开数据库
		CString t;
		t.Format("%%%s%%",dlg.m_FindName);				// %s相当于一个变量,这句的功能是t=%%dlg.m_Name%%
 		CPhoneSet recset( &database );				//定义记录集对象
 		strSQL.Format("select * from 电话簿 where 姓名  like '%s'",t);//这句的功能是strSQL=select * from fen where 姓名  like '%%dlg.m_Name%%'
		recset.Open(CPhoneSet::forwardOnly,strSQL,CPhoneSet::readOnly);//按strSQL语句进行查询,查询结果放到记录集中
		m_ListCtrl.DeleteAllItems();				//将ListCtrl的内容清空,为显示查询结果做准备
		for(int j=0;j<recset.GetRecordCount();j++)	//GetRecordCount()是用来计算记录集中有几条记录并返回计算结果
		{
			CString temp;
			recset.GetFieldValue("姓名",temp);	//得到列属性为“学号”的记录集中的内容(不是数据库中的)附给temp
			m_ListCtrl.InsertItem(j,temp);		//将temp加入到ListCtrl中用以显示
			recset.GetFieldValue("电话号码",temp);
			m_ListCtrl.SetItemText(j,1,temp);
			recset.MoveNext();					//将记录集的指针向下移一位
		}
//		recset.Close();
		database.Close();
	}
		
	
}

void CPhone::Show()
{
	CString sCatID, sCategory;
    database.Open(NULL,false ,false ,sDsn);
    CPhoneSet recset( &database );
	strSQL =  "SELECT 姓名, 电话号码 "
            "FROM 电话簿";
    recset.Open(CPhoneSet::forwardOnly,strSQL,CPhoneSet::readOnly);
	int i=0;
    while ( !recset.IsEOF() )
    {
		recset.GetFieldValue("姓名",sCatID);
        recset.GetFieldValue("电话号码",sCategory);
		m_ListCtrl.InsertItem(i,sCatID,0);
        m_ListCtrl.SetItemText(i,1,sCategory);
		i++;
		recset.MoveNext();
    }
//		recset.Close();
		database.Close();
}
/*
void CPhone::OnDisplayall() 
{
	// TODO: Add your control notification handler code here
	
}
*/

void CPhone::OnShow() 
{
	// TODO: Add your control notification handler code here
	m_ListCtrl.DeleteAllItems();
	CPhone::Show();
}

void CPhone::OnAdd() 
{
	database.Open(NULL,false ,false ,sDsn);	
	CPhoneSet m_pSet( &database );
	m_pSet.Open(); 
	CPhoneAdd dlg;
	if( dlg.DoModal()==IDOK)
	{
		if(dlg.m_Name=="")
		{
			//保证学号不为零
			AfxMessageBox("学号不可为零!");
		}
		else
		{
			//增加记录,将变量中的数据赋给数据库对应的字段
			m_pSet.AddNew();
			m_pSet.m_column1=dlg.m_Name;
			m_pSet.m_column2=dlg.m_Number;
			m_pSet.Update();
		}
	}
	m_ListCtrl.DeleteAllItems();
//	m_pSet.Requery();
//	m_pSet.Close();
	database.Close();
	this->Show();
	
}

void CPhone::OnEdit() 
{
	database.Open(NULL,false ,false ,sDsn);	
	CPhoneSet m_pSet( &database );
	m_pSet.Open(); 
	CPhoneEdit	dlg;
	UpdateData(FALSE);
	if(dlg.DoModal()==IDOK)
	{
	    BOOL b=FALSE;
	    m_pSet.MoveFirst();
	    do
		{
		    if(dlg.m_EditName!=m_pSet.m_column1)
    	    m_pSet.MoveNext();
			else
			{
				//清空列表框
				m_ListCtrl.DeleteAllItems();
				//修改指定的记录
				m_pSet.Edit();
				b=TRUE;
			    m_pSet.m_column1=dlg.m_EditName;
				m_pSet.m_column2=dlg.m_EditNum;
				m_pSet.Update();
				m_pSet.Requery();
				//重新在列表框中显示记录
				database.Close();
				this->Show();
				database.Open(NULL,false ,false ,sDsn);
				m_pSet.Open();
				m_pSet.MoveFirst();
				break;
			} 
		}while(!m_pSet.IsEOF());
	          if(b==FALSE)
			  AfxMessageBox("没有此记录");
	}	
}

⌨️ 快捷键说明

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