MFC制作的入坑级别管理系统

项目简述
  • 不含数据库的链接,数据读写以文件方式读写;
  • 运行程序就会自动加载上次保存的数据;
  • 适合刚入坑MFC的小伙伴;
  • 整个项目的代码我已上传至CSDN我的资源中,需要可自取;
登录页面的制作
  1. 页面布局
    在这里插入图片描述
  2. 设置登录界面为初始界面,在App类初始化函数(InitInstance())中添加如下代码
//设置登录界面为初始化界面
	CLogin logDlg;//这个类因你登录页面的类命名而不同
	if (logDlg.DoModal() == IDCANCEL)
		return TRUE;
  1. 为账号和密码两个 Edit 控件添加变量分别为:m_UseName、m_Password;
  2. 为界面添加初始化虚函数(OnInitDialog()),在函数中初始化两个变量
//初始化用户名和密码
	m_UseName = L"admin";
	m_Password = L"123456";
  1. 为登录按钮函数添加代码
    UpdateData(TRUE);//更新控件获得的数据

	if (m_UseName.IsEmpty() || m_Password.IsEmpty())
	{
		MessageBox(L"账号或密码为空!", L"温馨提示", MB_ICONWARNING);//warning
		return;
	}
	else if (m_UseName == L"admin" && m_Password == L"123456")
	{
		EndDialog(IDOK);//关闭当前窗口
	}
	else
	{
		MessageBox(L"账号或密码错误!", L"温馨提示", MB_ICONERROR);
		return;
	}
主界面控件布局

在这里插入图片描述

  1. list 控件的视图属性设置为:Report;
添加成员窗口布局

在这里插入图片描述

  1. 为各个成员控件添加右键添加变量;
//添加变量后,会在该对话框类下看到如下数据代码
virtual BOOL OnInitDialog();
	CString m_StuName;
	int m_StuNumber;
	int m_nSex;
	CComboBox m_Position;
	CComboBox m_Department;
	BOOL m_Medium;
	BOOL m_Tech;
	BOOL m_Sociality;
	CString m_Telephone;

	CString m_strPosition;//职位
	CString m_strDepartment;//部门
//以及该类中 DoDataExchange() 函数的变化
//该函数添加变量会自动添加代码,无需深究
void AddStudent::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_StuName, m_StuName);
	DDX_Text(pDX, IDC_StuNumber, m_StuNumber);
	DDX_Radio(pDX, IDC_Radio1, m_nSex);
	DDX_Control(pDX, IDC_COMBO1, m_Position);
	DDX_Control(pDX, IDC_COMBO2, m_Department);
	DDX_Check(pDX, IDC_CHECK2, m_Medium);
	DDX_Check(pDX, IDC_CHECK3, m_Tech);
	DDX_Check(pDX, IDC_CHECK4, m_Sociality);
	DDX_Text(pDX, IDC_StuNumber2, m_Telephone);
}
  1. 关闭职位与部门控件的自动排序属性,设置 radio 控件的组长属性,这里开启“男”控件的组长属性;
  2. 为窗口添加初始化虚函数(OnInitDialog()),并初始化职位与部门控件;

//初始化职位控件
	m_Position.AddString(L"主席团成员");
	m_Position.AddString(L"新媒体负责人");
	m_Position.AddString(L"纪检部负责人");
	m_Position.AddString(L"组织部负责人");
	m_Position.AddString(L"文体活动负责人");
	m_Position.AddString(L"一年干事");
	m_Position.AddString(L"两年干事");
	m_Position.SetCurSel(0);

	//初始化部门控件
	m_Department.AddString(L"主席团");
	m_Department.AddString(L"新媒体");
	m_Department.AddString(L"纪检部");
	m_Department.AddString(L"组织部");
	m_Department.AddString(L"文体活动中心");
	m_Department.SetCurSel(0);
  1. 为“添加”按钮增加如下代码
void AddStudent::OnBnClickedBtnadd()
{
	// TODO: 在此添加控件通知处理程序代码
	//可自行添加其他数据判断代码
	UpdateData(TRUE);

	if (m_StuName.IsEmpty())
	{
		MessageBox(L"姓名不能为空!", L"温馨提示", MB_ICONERROR);
		return;
	}
	if (m_StuNumber <= 0)
	{
		MessageBox(L"学号错误", L"温馨提示", MB_ICONERROR);
		return;
	}

	CString temp;
	m_Position.GetWindowTextW(temp);
	m_strPosition = temp;

	temp.Empty();
	m_Department.GetWindowTextW(temp);
	m_strDepartment = temp;

	EndDialog(IDOK);
}
修改成员按钮代码及页面
  • 修改页面布局和添加按钮布局一样,不同的是修改页面有初始数据
void CStuControlSysDlg::OnBnClickedRevise()
{
	 // TODO: 在此添加控件通知处理程序代码
	ReviseInfo reviseData;
	
	//初始化数据
	//获取当前选中行
	POSITION curSel = this->m_list.GetFirstSelectedItemPosition();
	int curSelRevise = m_list.GetNextSelectedItem(curSel);

	if (curSelRevise == -1)
	{
		MessageBox(L"请选择要修改的列", L"温馨提示", MB_OK);
		return;
	}

	//初始化修改页面数据
	CString temp;//字符与整型数据转换中间变量
	//1.姓名
	reviseData.m_StuName = m_list.GetItemText(curSelRevise, 0);
	//m_list.InsertItem(1, reviseData.m_StuName);
	//2.学号
	reviseData.m_StuNumber = _wtoi(m_list.GetItemText(curSelRevise, 1));
	//3.性别
	if (m_list.GetItemText(curSelRevise, 2) == L"男")
		reviseData.m_nSex = 0;
	else
		reviseData.m_nSex = 1;
	//4.职位
	reviseData.m_strPosition = m_list.GetItemText(curSelRevise, 3);

	//5.部门
	reviseData.m_strDepartment = m_list.GetItemText(curSelRevise, 4);

	//6.掌握技能
	reviseData.m_Medium = FALSE;
	reviseData.m_Tech = FALSE;
	reviseData.m_Sociality = FALSE;

	temp = m_list.GetItemText(curSelRevise, 5);
	if (temp.Find(L"新媒体类") != -1)
		reviseData.m_Medium = TRUE;
	if (temp.Find(L"科技类") != -1)
		reviseData.m_Medium = TRUE;
	if (temp.Find(L"社交类") != -1)
		reviseData.m_Sociality = TRUE;

	//7.联系方式
	reviseData.m_Telephone = m_list.GetItemText(curSelRevise, 6);

	//--------------初始化结束------------

	if (reviseData.DoModal() == IDCANCEL)
		return;
	
	temp.Empty();
	//1.添加姓名
	m_list.SetItemText(curSelRevise, 0, reviseData.m_StuName);

	//2.添加学号
	temp.Format(L"%d", reviseData.m_StuNumber);
	m_list.SetItemText(curSelRevise, 1, temp);

	//3.添加性别
	if (reviseData.m_nSex == 0)
		temp = L"男";
	else
		temp = L"女";
	m_list.SetItemText(curSelRevise, 2, temp);

	//4.添加职位,通过中间变量 m_strPosition
	m_list.SetItemText(curSelRevise, 3, reviseData.m_strPosition);

	//5.添加部门,通过中间变量 m_strDepartment
	m_list.SetItemText(curSelRevise, 4, reviseData.m_strDepartment);

	//6.掌握技能
	temp.Empty();
	if (reviseData.m_Medium)
		temp = L"新媒体类 & ";
	if (reviseData.m_Tech)
		temp += L" 科技类 & ";
	if (reviseData.m_Sociality)
		temp += L"社交类";
	if (temp.IsEmpty())
		temp = L"无技能";
	m_list.SetItemText(curSelRevise, 5, temp);

	//7.联系方式
	m_list.SetItemText(curSelRevise, 6, reviseData.m_Telephone);
}
主界面布局中删除按钮代码
//删除列表数据
void CStuControlSysDlg::OnBnClickedBtndelete()
{
	// TODO: 在此添加控件通知处理程序代码
	//首先获取当前选中行
	POSITION delSel = m_list.GetFirstSelectedItemPosition();
	int nDel = m_list.GetNextSelectedItem(delSel);

	if (nDel == -1)
	{
		MessageBox(L"请选择要删除的行", L"温馨提示", MB_ICONWARNING);
		return;
	}
	m_list.DeleteItem(nDel);
}
读取数据的代码
//加载程序时自动读取文件数据
void CStuControlSysDlg::autoReadFileData()
{
	CFile readFile;
	Student stu;
	
	readFile.Open(L"StudentData.bat", CFile::modeRead);

	int nCount = 0;
	while (readFile.Read(&stu, sizeof(stu)))
	{
		CString temp;
		//1.name
		m_list.InsertItem(nCount, stu.m_StuName);
		//2.Number
		temp.Format(L"%d", stu.m_StuNumber);
		m_list.SetItemText(nCount, 1, temp);
		//3.Sex
		m_list.SetItemText(nCount, 2, stu.m_nSex);
		//4.Position
		m_list.SetItemText(nCount, 3, stu.m_strPosition);
		//5.Department
		m_list.SetItemText(nCount, 4, stu.m_strDepartment);
		//6.matters
		m_list.SetItemText(nCount, 5, stu.m_matters);
		//7.telephone
		m_list.SetItemText(nCount, 6, stu.m_Telephone);

		nCount++;
	}

	readFile.Close();
}
导入文件按钮函数
void CStuControlSysDlg::OnBnClickedBtnselect()
{
	// TODO: 在此添加控件通知处理程序代码
	CFileDialog fileDlg(TRUE, L"dat", L"StudentData",
		OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
		L"文本文件(*.txt)|数据文件(*.bat)|所有文件(*.*)|*.*||");

	if (IDCANCEL == fileDlg.DoModal())
	{
		return;
	}

	CString strFilePath = fileDlg.GetPathName();

	CFile readFile;
	Student stu;

	readFile.Open(strFilePath, CFile::modeRead);

	int nCount = 0;
	while (readFile.Read(&stu, sizeof(stu)))
	{
		CString temp;
		//1.name
		m_list.InsertItem(nCount, stu.m_StuName);
		//2.Number
		temp.Format(L"%d", stu.m_StuNumber);
		m_list.SetItemText(nCount, 1, temp);
		//3.Sex
		m_list.SetItemText(nCount, 2, stu.m_nSex);
		//4.Position
		m_list.SetItemText(nCount, 3, stu.m_strPosition);
		//5.Department
		m_list.SetItemText(nCount, 4, stu.m_strDepartment);
		//6.matters
		m_list.SetItemText(nCount, 5, stu.m_matters);
		//7.telephone
		m_list.SetItemText(nCount, 6, stu.m_Telephone);

		nCount++;
	}

	readFile.Close();
}
运行截图

在这里插入图片描述

结语:基本上展示了项目的所有主要代码,需要源代码的小伙伴可在我上传的资源文件中获取。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值