项目简述
  • 不含数据库的链接,数据读写以文件方式读写;
  • 运行程序就会自动加载上次保存的数据;
  • 适合刚入坑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);//warningreturn;}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;elsereviseData.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"男";elsetemp = L"女";m_list.SetItemText(curSelRevise, 2, temp);//4.添加职位,通过中间变量 m_strPositionm_list.SetItemText(curSelRevise, 3, reviseData.m_strPosition);//5.添加部门,通过中间变量 m_strDepartmentm_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.namem_list.InsertItem(nCount, stu.m_StuName);//2.Numbertemp.Format(L"%d", stu.m_StuNumber);m_list.SetItemText(nCount, 1, temp);//3.Sexm_list.SetItemText(nCount, 2, stu.m_nSex);//4.Positionm_list.SetItemText(nCount, 3, stu.m_strPosition);//5.Departmentm_list.SetItemText(nCount, 4, stu.m_strDepartment);//6.mattersm_list.SetItemText(nCount, 5, stu.m_matters);//7.telephonem_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.namem_list.InsertItem(nCount, stu.m_StuName);//2.Numbertemp.Format(L"%d", stu.m_StuNumber);m_list.SetItemText(nCount, 1, temp);//3.Sexm_list.SetItemText(nCount, 2, stu.m_nSex);//4.Positionm_list.SetItemText(nCount, 3, stu.m_strPosition);//5.Departmentm_list.SetItemText(nCount, 4, stu.m_strDepartment);//6.mattersm_list.SetItemText(nCount, 5, stu.m_matters);//7.telephonem_list.SetItemText(nCount, 6, stu.m_Telephone);nCount++;}readFile.Close();
}
运行截图

结语:基本上展示了项目的所有主要代码,需要源代码的小伙伴可在我上传的资源文件中获取。

MFC制作的入坑级别管理系统相关推荐

  1. 传奇工程师卡马克入坑 AI:徒手一周实现反向传播和 CNN

    约翰 · 卡马克是何方神圣? 谁是约翰 · 卡马克? 他是一位集传奇工程师.大神.疯狂程序员.黑客之神.第一人称射击游戏之父.业界活化石.一代玄学码神所有称号为一身的老牌程序员,一举一动都牵动人心. ...

  2. Intel SGX入坑必读——《Intel SGX Explained》(个人翻译,持续更新中)

    写在最前 入坑Intel SGX之前先打好基础.<Intel SGX Explained>就是入坑必读之一,有助于理解Intel SGX的原理.这里仅作个人翻译,便于加深理解,也方便感兴趣 ...

  3. 为啥中国企业服务基本全都入坑了

    (1) 先说说几个案例 一.制造:耐克 1.研发设计:与国际大牌设计师工作室合作 2.原材料采购:委托采购(如香港利丰) 3.生产:中国代工大厂生产 4.质量监管:第三方专业质管公司 5.营销:4A公 ...

  4. 从小白到迷茫菜鸟的IT入坑之路

    从接触IT到现在,大概有两年的时间了,从想着写技术博客开始到现在也差不多有半年时间了,本来想着是先写计算机多操作系统的安装.但是,无奈,太懒了,还是写写自己的入坑之路吧!没准对想入门的小白学弟学妹有帮 ...

  5. Docker入坑指南之RUN

    总有一些场景,我们需要自己制作一个镜像,可以快速还原环境,又不想被其他因素干扰镜像的纯净,这个时候,就可以选择Docker了,启动便捷,镜像还原很快捷,除了上手不容易. 最近入坑研究了一番,小有心得, ...

  6. 启航篇——四旋翼飞行器之入坑两年心路历程和毕设总结

    笔者今年大四毕业,由于之前参加比赛及准备考研,没有时间总结这两年来做四旋翼飞行器的心得体会.现在借毕业设计这个契机,想把这件事做了,算是两年的收尾工作,也是个新的开始. 先从介绍这两年的经历开始吧.开 ...

  7. UVM入坑系列笔记(一)

    最近本人在做毕业设计,需要用到UVM搭建验证平台,故在网上查找相关资料,看了一些博客和科普,多少有些收获,记录在这里,以便以后复习查看.以下是本人根据网上学习资料整理的笔记,如果有什么不对的地方欢迎指 ...

  8. 入坑数据分析的几个问题——学习、面试、作报告

    本文盘点了入坑数据分析的几个问题,主要涉及数据分析入门学习策略.面试数据分析岗位工具及业务的考察点.无实习经历如何准备面试以及面试时项目经历如何叙述等问题. 一.问题概览 二.问题解答 问题1:数据分 ...

  9. 杀戮间插件入坑指南(UT2004)

      本博文目的在于帮助对Killing Floor 1&2 插件制作感兴趣的玩家/程序员快速的了解插件的运作机制和编写方法.   这里只介绍一代版本,二代版本的编写只会比一代更简单,原理相通. ...

  10. MFC制作Windows画图程序(二)

    继<MFC制作Windows画图程序(一)> 文章目录 7 颜色填充功能 8 选择画笔颜色 9 设置画笔粗细 10 将绘制出来的图形保存的实现 11 添加位图 7 颜色填充功能 油漆桶功能 ...

最新文章

  1. LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
  2. 董明珠炮轰国产车的创始人不开自己生产的车,事实果真如此吗?
  3. 深度学习之 hard negative mining (难例挖掘)
  4. java修改默认字符编码_设置默认的Java字符编码?
  5. CocosCreator发布web-desktop获取本地资源
  6. 蜻蜓fm收音机电脑版_追寻逝去的时光:Tivoli Audio M1BT收音机蓝牙音箱体验
  7. 还在使用集合类完成这些功能?不妨来看看 Guava 集合类!!!
  8. Charles使用手册
  9. 机器人(人工智能python) arduino编程 scratch2.0 乐高ev3编程 教育政策及考试
  10. 光伏电站matlab仿真,光伏发电的MATLAB仿真.doc
  11. QT5使用PCAN读取CAN数据
  12. 在vue项目中引入highcharts图表的方法
  13. 2022好用的便签记事日程提醒软件有哪些
  14. linux中tac的用法,如何在Linux中使用“cat”和“tac”命令与示例
  15. 服务器显示器无法调节分辨率,显示器无法设置分辨率怎么办
  16. 联邦贸易委员会:大数据带来的歧视风险
  17. git reset --soft命令的使用
  18. 【BFS】大胖子走迷宫
  19. 【电路设计】基于变压器的DC/DC变换电路(含Multisim仿真)
  20. 计算机语言与智能家居的关系,来谈谈“智能家居”与“家庭自动化”的区别

热门文章

  1. matlab 三维图形改变线宽,用PANDAS改变线宽绘制三维线图
  2. 0723数组复习 堆区 动态数组
  3. matlab命令窗口双大于号不显示了 回车命令不管用了,怎么改才能恢复
  4. iTunes更改备份路径
  5. 小米、搜狗、TW等机器学习算法工程师面试总结
  6. hivesql解析json格式的key与value
  7. 计算机中存储单位的换算
  8. python入门指南txt许半仙百度网盘-《江火欲燃山》《这题超纲了》《Python入门指南》...
  9. 经济学中的同比环比,负增长,正增长
  10. 硬盘分区的类型:mbr分区和gpt分区的区别