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

📄 maindlg.cpp

📁 我自己写的一个通讯录的程序,用ODBC来连接数据库. 可以查找,添加,删除,和修改记录,并显示数据库中人所有记录. 登录程序的默认密码为空,可以在程序中修改.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/////////////////////////////////////////////////////////////////////////
//名称:OnOk
//功能:提交通讯录查询结果
////////////////////////////////////////////////////////////////////////
void CMainDlg::OnOK() 
{
	// TODO: Add extra validation here
	if(m_bsearchflag)//如果flag=true,则调用精确查询
	{
		ExactSearch();
	}
	else//否则调用模糊查询
	{
		BlurSearch();
	}
	//CDialog::OnOK();
}

//////////////////////////////////////
//名称:ExactSearch
//功能:实现精确查询
///////////////////////////////////////
void CMainDlg::ExactSearch()
{
	//如果数据库没有打开,先将其打开
	if(!m_database.IsOpen())
	{
		m_database.Open(_T("addresslist"));
	}

	CPersonSet m_personset;//定义CPersonset类的对象
	CString m_tablefield;

	if(!m_input.IsEmpty())
	{
		if(m_field.Compare("姓名")==0)
		{
			m_tablefield.Format("NAME");
		}

		if(m_field.Compare("性别")==0)
		{
			m_tablefield.Format("SEX");
		}

		if(m_field.Compare("关系")==0)
		{
			m_tablefield.Format("RELATION");
		}

		if(m_field.Compare("联系电话")==0)
		{
			m_tablefield.Format("TELEPHONE");
		}

		if(m_field.Compare("手机号码")==0)
		{
			m_tablefield.Format("HANDPHONE");
		}

		if(m_field.Compare("家庭住址")==0)
		{
			m_tablefield.Format("ADDRESS");
		}

		if(m_field.Compare("工作单位")==0)
		{
			m_tablefield.Format("WORKPLACE");
		}

		if(m_field.Compare("E-MAIL")==0)
		{
			m_tablefield.Format("EMAIL");
		}

		if(m_field.Compare("OICQ号码")==0)
		{
			m_tablefield.Format("OICQ");
		}		
		m_searchSQL.Format("select * from person where %s='%s'",m_tablefield,m_input);
		SearchData();
	}
	else
	{
		MessageBox("请填写查询关键字","提示",MB_OK|MB_ICONINFORMATION);
		GetDlgItem(IDC_INPUT_EDIT)->SetFocus();
	}
}
//////////////////////////////////////
//名称:BlurSearch
//功能:实现模糊查询
///////////////////////////////////////
void CMainDlg::BlurSearch()
{
		//如果数据库没有打开,先将其打开
	if(!m_database.IsOpen())
	{
		m_database.Open(_T("addresslist"));
	}

	//UpdateData(TRUE);
	CPersonSet m_personset;//定义CPersonset类的对象
	CString m_tablefield,m_str="%";
	m_str=m_str+m_input+"%";
	if(!m_input.IsEmpty())
	{
		if(m_field.Compare("姓名")==0)
		{
			m_tablefield.Format("NAME");
		}

		if(m_field.Compare("性别")==0)
		{
			m_tablefield.Format("SEX");
		}

		if(m_field.Compare("关系")==0)
		{
			m_tablefield.Format("RELATION");
		}

		if(m_field.Compare("联系电话")==0)
		{
			m_tablefield.Format("TELEPHONE");
		}

		if(m_field.Compare("手机号码")==0)
		{
			m_tablefield.Format("HANDPHONE");
		}

		if(m_field.Compare("家庭住址")==0)
		{
			m_tablefield.Format("ADDRESS");
		}

		if(m_field.Compare("工作单位")==0)
		{
			m_tablefield.Format("WORKPLACE");
		}

		if(m_field.Compare("E-MAIL")==0)
		{
			m_tablefield.Format("EMAIL");
		}

		if(m_field.Compare("OICQ号码")==0)
		{
			m_tablefield.Format("OICQ");
		}
		m_searchSQL.Format("select * from person where %s like '%s'",m_tablefield,m_str);
		SearchData();
	}
	else
	{
		MessageBox("请填写查询关键字","提示",MB_OK|MB_ICONINFORMATION);
		GetDlgItem(IDC_INPUT_EDIT)->SetFocus();
	}
}

///////////////////////////////////////////////////////////////////////////
//名称:SearchData
//功能:实现记录查询
//////////////////////////////////////////////////////////////////////////
void CMainDlg::SearchData()
{
	//首先确保数据库打开
	if(!m_database.IsOpen())
	{
		m_database.Open(_T("addresslist"));
	}
	//对列表控件的内容更新,清空原来的内容
	m_ctrlperson.DeleteAllItems();
	//创建记录集
	CPersonSet m_personset(&m_database);
	m_personset.Open(AFX_DB_USE_DEFAULT_TYPE,m_searchSQL);
	CDBVariant varValue;
	char buf[20];
	//用来记录当前记录的序号
	int i=0;
	//如果表中有记录,打开后将游标定在第一位,使记录集中的第一条记录成为当前记录
	if(m_personset.GetRecordCount()!=0)		m_personset.MoveFirst();
	while(!m_personset.IsEOF())
	{
		int temp=0;
		//对整型数字的处理
		m_personset.GetFieldValue(temp,varValue);
		sprintf(buf,"%d",varValue.m_lVal);m_ctrlperson.InsertItem(i,buf);
		//对字符串显示处理

		m_personset.GetFieldValue(1,varValue);
		m_ctrlperson.SetItemText(i,1,varValue.m_pstring->GetBuffer(1));

		m_personset.GetFieldValue(2,varValue);
		m_ctrlperson.SetItemText(i,2,varValue.m_pstring->GetBuffer(1));
		
		m_personset.GetFieldValue(3,varValue);
		m_ctrlperson.SetItemText(i,3,varValue.m_pstring->GetBuffer(1));

		m_personset.GetFieldValue(4,varValue);
		m_ctrlperson.SetItemText(i,4,varValue.m_pstring->GetBuffer(1));

		m_personset.GetFieldValue(5,varValue);
		m_ctrlperson.SetItemText(i,5,varValue.m_pstring->GetBuffer(1));

		m_personset.GetFieldValue(6,varValue);
		m_ctrlperson.SetItemText(i,6,varValue.m_pstring->GetBuffer(1));

		m_personset.GetFieldValue(7,varValue);
		m_ctrlperson.SetItemText(i,7,varValue.m_pstring->GetBuffer(1));

		m_personset.GetFieldValue(8,varValue);
		m_ctrlperson.SetItemText(i,8,varValue.m_pstring->GetBuffer(1));

		m_personset.GetFieldValue(9,varValue);
		m_ctrlperson.SetItemText(i,9,varValue.m_pstring->GetBuffer(1));
		m_personset.MoveNext();
		i++;	
	}
	//在标题栏中显示共有记录条数
	int counts=m_personset.GetRecordCount();
	if( counts == 0 )
		MessageBox("找不到合适的记录!","查询结果",MB_OK|MB_ICONINFORMATION);
	else
	{
		CString str;
		str.Format("通讯录 V1.0      符合条件的记录数: %d",counts);	
		this->SetWindowText(str);
	}
}

void CMainDlg::OnAdd() 
{
	// TODO: Add your control notification handler code here
	//本对话框对应的数据库连接关闭
	m_database.Close();
	//新建一个CAddInfoDlg的对象
	CAddInfoDlg dlg;
	//新对话框建立到数据库连接
	dlg.m_database.Open(_T("addresslist"));
	//弹出新对话框
	dlg.DoModal();
	//新对话框关闭后,在原对话框中刷新数据显示
	RefreshData();

}

void CMainDlg::OnEdit() 
{
	// TODO: Add your control notification handler code here
	m_database.Close();//本对话框断开与数据库的连接
	CModifyDlg dlg;
	dlg.m_database.Open(_T("addresslist"));//打开数据库
	int i=m_ctrlperson.GetSelectionMark();
	CString strSQL;
	int id=atoi(m_ctrlperson.GetItemText(i,0));
	CPersonSet m_recordset;
	CDBVariant varValue;
	if(i==-1)
	{
		MessageBox("请选择一条要修改的记录!","提示",MB_OK|MB_ICONINFORMATION);
	}
	else
	{
		int temp=0;
		strSQL.Format("select * from person where ID=%d",id);
		m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
		
		m_recordset.GetFieldValue(temp,varValue);
		dlg.m_modid=varValue.m_lVal;

		m_recordset.GetFieldValue(1,varValue);
		dlg.m_modname=varValue.m_pstring->GetBuffer(1);

		m_recordset.GetFieldValue(2,varValue);
		dlg.m_modsex=varValue.m_pstring->GetBuffer(1);

		m_recordset.GetFieldValue(3,varValue);
		dlg.m_modrelation=varValue.m_pstring->GetBuffer(1);
		
		m_recordset.GetFieldValue(4,varValue);
		dlg.m_modtelephone=varValue.m_pstring->GetBuffer(1);

		m_recordset.GetFieldValue(5,varValue);
		dlg.m_modhandphone=varValue.m_pstring->GetBuffer(1);

		m_recordset.GetFieldValue(6,varValue);
		dlg.m_modaddress=varValue.m_pstring->GetBuffer(1);

		m_recordset.GetFieldValue(7,varValue);
		dlg.m_modworkplace=varValue.m_pstring->GetBuffer(1);

		m_recordset.GetFieldValue(8,varValue);
		dlg.m_modemail=varValue.m_pstring->GetBuffer(1);

		m_recordset.GetFieldValue(9,varValue);
		dlg.m_modoicq=varValue.m_pstring->GetBuffer(1);
		//m_database.Close();//此处不能断开与数据库的连接
		dlg.DoModal();
		RefreshData();
	}	
}

void CMainDlg::OnDelete() 
{
	// TODO: Add your control notification handler code here
	//i是记录中所选的记录号,如果没有则返回
	int i=m_ctrlperson.GetSelectionMark();
	CString strSQL,msg,strname;
	strname=m_ctrlperson.GetItemText(i,1);
	msg.Format("第 %d 项,姓名为“%s”的记录将被删除!是否继续?",i+1,strname);
	//如果用户没有选择记录,则提示选取一条记录
	if(i==-1)
	{
		MessageBox("请选择一条要删除的记录!","提示",MB_OK|MB_ICONINFORMATION);
	}
	else
	{
		
		if(MessageBox(msg,"提示",MB_YESNO|MB_ICONINFORMATION)==IDYES)
		{
			CString strname=m_ctrlperson.GetItemText(i,1);
			//从表中删除对应的记录
			strSQL.Format("delete from person where NAME='%s'",strname);
			m_database.ExecuteSQL(strSQL);
			m_database.Close();
			RefreshData();
		}
	}	
}

void CMainDlg::OnSearch() 
{
	// TODO: Add your control notification handler code here
	RefreshData();

	SearchDlg dlg;

	if( ( dlg.DoModal() ) == IDOK )
	{
		m_input = dlg.m_keyword;
		m_field = dlg.m_search_field;
		m_bsearchflag = dlg.m_bExact;
		OnOK();
	}
	else
	{
		//Do nothing;
	}	
}

void CMainDlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	OnEdit();

	*pResult = 0;
}

void CMainDlg::OnShow() 
{
	// TODO: Add your control notification handler code here
	RefreshData();
}

⌨️ 快捷键说明

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