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

📄 sanguo_view.cpp

📁 ODBC方法连接Access数据库(需设置数据源)的三国人物管理系统.本人以初学者的身份写的,紧供菜鸟们参考,达人们大可无视!!
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	MessageBox("武将修改成功!!");
	ShowList();
}

void CSanGuo_View::OnButtonDelete() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	m_pSet->MoveFirst();
	int i = 0;
	int j = -1;                     //用于记录要删除所在行数
	CString t  = "";
	for(;!m_pSet->IsEOF();)         //查找是否有同名的,是i>0,不是i=0
	{	
		if(m_pSet->IsDeleted()) m_pSet->MoveNext();
		//Delete函数删除的值必须用此种形式来跳过(系统好像仍当它是存在的??)
		j ++;
		if(m_strName == m_pSet->m_column1) 
		{
			i++;
			break;
		}
		m_pSet->MoveNext();
	}
	if(i>0)                         //如果有此武将在列表中
	{
		t.Format("是否真的要删除所有%s将军的信息??",m_strName);
		if(IDNO == MessageBox(t,"提示",MB_YESNO)) //取消修改
		{
			m_pSet->MoveFirst();
			return;
		}
		if(m_pSet->CanUpdate()) 
		{
			m_pSet->Delete();//CanUpdate()用于判断m_pSet是否是可更新的
//			m_pSet->Update();
		}
		else MessageBox("错误!!不可更新!!");
		m_iSelect = -1;
		m_pSet->MoveFirst();
		m_pSet->Requery();//此成员函数用来重建(刷新)一个记录集.如果有记录返回,则第一个记录成为
	//当前记录.如果记录集重建成功则返回非零值;否则返回0。
		ShowList();
//		m_ListShow.DeleteItem(j);//error:把列表框第j行删掉(用了m_pSet->Requery()也可以不用这句)
	}else MessageBox("此武将不存在或已删除!!");
}

void CSanGuo_View::OnButtonQuery() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	CSanGuo_View::Query(m_strName,"武将名","姓名",1);
}

void CSanGuo_View::OnButtonQuery2() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	CSanGuo_View::Query(m_strNameEx,"武将字","表字",1);
}

void CSanGuo_View::OnButtonQuery3() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	CSanGuo_View::Query(m_strPlace,"武将所属名","所属",1);
}

void CSanGuo_View::OnButtonQuery4() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	CSanGuo_View::Query(m_strForce,"武将武力","武力",1);
}

void CSanGuo_View::OnButtonQuery5() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	CSanGuo_View::Query(m_strIntel,"武将智力","智力",1);
}

void CSanGuo_View::OnButtonQuery6() //查询武将简介里的字符串
{
	// TODO: Add your control notification handler code here
	UpdateData();
	CSanGuo_View::Query(m_strShort,"武将简介","人物说明",1);
}

void CSanGuo_View::Query(CString m_str,CString t,CString m,bool b) //用于查询各种不同的属性
{//用于查询各种不同的属性:参数1为要查询的字符串,2为显示的属性名,3为表中要查询的属性名
 //(要与表列头完全一致),4为要查询的是否为字符串,是为1,不是为0
 //	UpdateData();                   //error:在这里更新没用,要在调用的前面才得
	m_str.TrimLeft();//这个成员函数的没有参数的版本用来将字符串最前面的空格修整掉。当在没有
//参数的情况下调用时,TrimLeft删除换行符,空格和tab字符。
//这个成员函数的需要参数的版本用来将一个特定的字符或一群特定的字符从字符串的开始处删除。
	CString s = "";
	if(m_str.IsEmpty())
	{
		s.Format("请输入要查询的%s!!",t);
		MessageBox(s);
		return;
	}
//	m_pSet->MoveFirst();
	if(m_pSet->IsOpen()) m_pSet->Close();//如果记录集打开,则先关闭
	if(b) m_pSet->m_strFilter= m + " like '%" + m_str + "%'";
	//error:要特别注意单双引号的写法;like周围要有空格(&表示未知的几个字符)
	else m_pSet->m_strFilter.Format("'%s'='%s'",m,m_str);
	//m_strFilter是CRecordSet的成员变量,用于执行条件查询,被称为"排序字符串",相当于SQL语句中
	//ORDER BY后的字符串.若字段的数据类型是文本,则需要在m_strFilter字符串中用单引号将查询的
	//内容括起来,对于数字,则不用.
	m_pSet->m_strSort = m;//m_str是表的字段名,用于按字段m_str从小到大排序
	//要注意的是:只有在调用Open函数之前设置m_strFilter和m_strSort才能保证查询和排序有效.
	//如果有多个条件查询,可用AMD/OR/NOT来组合,如:
	//m_pSet->m_strFilter = "studentno>='21010101'AND student<='201010105'";
	m_pSet->Open();                 //打开记录集
	m_pSet->Requery();//此成员函数用来重建(刷新)一个记录集.如果有记录返回,则第一个记录成为
	//当前记录.如果记录集重建成功则返回非零值;否则返回0。
	if(!m_pSet->IsEOF())            //如果打开记录集有记录
	{
		int t = 0;
		while(!m_pSet->IsEOF()) 
		{
			t ++;
			m_pSet->MoveNext();
		}
		s.Format("共找到%d位%s含有'%s'的武将:",t,m,m_str);
		MessageBox(s);
		UpdateData(FALSE);          //自动更新表单中控件显示内容
		ShowList();
	}
	else 
	{
		s.Format("此%s不存在!!",t);
		MessageBox(s);
	}
}

void CSanGuo_View::OnButtonLadn()   //登陆
{
	// TODO: Add your control notification handler code here
	UpdateData();
	if(m_strAccount.IsEmpty())
	{
		MessageBox("请先输入登陆帐号!!");
		return;
	}

	m_pSet->MoveFirst();
	while(!m_pSet->IsEOF())
	{
		if(m_strAccount == m_pSet->m_column6 || "admin" == m_strAccount)//如果帐号输入正确
		{
			if(m_strPassword.IsEmpty())
			{
				MessageBox("请输入登陆密码!!");
				return;
			}
			if(m_strPassword == m_pSet->m_column7 ||  "admin" == m_strPassword)//密码输入正确
			{
				MessageBox("登陆成功!! \n现在你可以开始管理此系统!!");
				CSanGuo_View::EnableAllDlg(TRUE);//用于让所有非登陆对话框激活或失活
			}
			else                    //密码输入错误
			{
				MessageBox("密码错误,请重新输入!! \n你也可以用默认帐号:admin,密码:admin或者自己注册!!");
			}
			return;
		}
		m_pSet->MoveNext();
	}
	m_pSet->MoveFirst();
	MessageBox("无此帐号,请确认输入是否正确!!");
	return;
}

void CSanGuo_View::EnableAllDlg(bool b)           //用于让所有非登陆对话框激活或失活
{
	GetDlgItem(IDC_EDIT_NAME)   ->EnableWindow(b);
	GetDlgItem(IDC_EDIT_NAMEEx) ->EnableWindow(b);
	GetDlgItem(IDC_EDIT_PLACE)  ->EnableWindow(b);
	GetDlgItem(IDC_EDIT_FORCE)  ->EnableWindow(b);
	GetDlgItem(IDC_EDIT_INTEL)  ->EnableWindow(b);
	GetDlgItem(IDC_EDIT_SHORT)  ->EnableWindow(b);
	GetDlgItem(IDC_BUTTON_ADD)  ->EnableWindow(b);
	GetDlgItem(IDC_BUTTON_CHANGE) ->EnableWindow(b);
	GetDlgItem(IDC_BUTTON_DELETE) ->EnableWindow(b);
	GetDlgItem(IDC_BUTTON_QUERY)  ->EnableWindow(b);
	GetDlgItem(IDC_BUTTON_QUERY2) ->EnableWindow(b);
	GetDlgItem(IDC_BUTTON_QUERY3) ->EnableWindow(b);
	GetDlgItem(IDC_BUTTON_QUERY4) ->EnableWindow(b);
	GetDlgItem(IDC_BUTTON_QUERY5) ->EnableWindow(b);
	GetDlgItem(IDC_BUTTON_QUERY6) ->EnableWindow(b);
	GetDlgItem(IDC_BUTTON_SHOWALL) ->EnableWindow(b);
	
}

void CSanGuo_View::OnButtonEnroll() //注册按钮
{
	// TODO: Add your control notification handler code here
	UpdateData();

	m_pSet->MoveFirst();
	if(m_strAccount.IsEmpty())      //注册帐号为空
	{
		MessageBox("请先输入要注册的帐号!!");
		return;
	}
	while(!m_pSet->IsEOF())         //检测帐号是否已存在
	{
		if(m_strAccount == m_pSet->m_column6)//如果帐号存在
		{
			MessageBox("此帐号已存在!!");
			return;
		}
		m_pSet->MoveNext();
	}
	if(m_strPassword.IsEmpty())     //注册密码为空
	{
		MessageBox("请输入注册密码!!");
		return;
	}

	UpdateData();
	m_pSet->MoveFirst();
	while(!m_pSet->IsEOF())         //找到表中空的帐号存储空间(如果没有空的,就覆盖最后一个)
	{
		if(m_pSet->m_column6.IsEmpty()) break;
		m_pSet->MoveNext();
	}
	m_pSet->Edit();                 //要修改一定要先调用这个
	m_pSet->m_column6 = m_strAccount;
	m_pSet->m_column7 = m_strPassword;
	m_pSet->Update();               //error:经过此函数后m_pSet的地址变了!!
	m_pSet->Requery();
	
	CString t = "";
	t.Format("注册成功!!你的帐号是%s,密码是%s,请妥善保管!!",m_strAccount,m_strPassword);
	MessageBox(t);
	m_pSet->MoveFirst();
}

void CSanGuo_View::OnButtonExit() 
{
	// TODO: Add your control notification handler code here
	CSanGuo_View::OnClose();        //点击右上角X调用的函数
}

	//if(IDNO == MessageBox("是否真的要退出??","提示",MB_YESNO)) return;

void CSanGuo_View::OnButtonHelp()   //调用关于对话框
{
	// TODO: Add your control notification handler code here
	CAboutDlg AbDlg;
	AbDlg.DoModal();
}

void CSanGuo_View::OnButtonShowall() 
{
	// TODO: Add your control notification handler code here
	if(m_pSet->IsOpen()) m_pSet->Close();//如果记录集打开,则先关闭
	m_pSet->m_strFilter="'%'";      //error:显示所有不用like
	//error:要特别注意单双引号的写法;like周围要有空格(&表示未知的几个字符)
	//m_strFilter是CRecordSet的成员变量,用于执行条件查询,被称为"排序字符串",相当于SQL语句中
	//ORDER BY后的字符串.若字段的数据类型是文本,则需要在m_strFilter字符串中用单引号将查询的
	//内容括起来,对于数字,则不用.
	m_pSet->m_strSort = "姓名";//用于按字段"姓名"从小到大排序
	//要注意的是:只有在调用Open函数之前设置m_strFilter和m_strSort才能保证查询和排序有效.
	//如果有多个条件查询,可用AMD/OR/NOT来组合,如:
	//m_pSet->m_strFilter = "studentno>='21010101'AND student<='201010105'";
	m_pSet->Open();                 //打开记录集
	m_pSet->Requery();//此成员函数用来重建(刷新)一个记录集.如果有记录返回,则第一个记录成为
	//当前记录.如果记录集重建成功则返回非零值;否则返回0。
	if(!m_pSet->IsEOF())            //如果打开记录集有记录
	{
		int t = 0;
		while(!m_pSet->IsEOF()) 
		{
			t ++;
			m_pSet->MoveNext();
		}
		CString s = "";
		s.Format("共有%d位武将!!",t);
		MessageBox(s);
		UpdateData(FALSE);          //自动更新表单中控件显示内容
		ShowList();
	}else MessageBox("此列表已空!!");
}

⌨️ 快捷键说明

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