C++实现一个基于mfc的学生信息管理系统
一、系统概述
本文设计的是学生信息管理系统,能够实现权限管理即不同的用户角色能够拥有不同的限,角色主要是学生、教师和管理员,针对不同的用户,有着不同的操作权限,学生角色只能够查看到学生基础信息,不能够进行删除和添加的操作,而教师和管理员则能够实现学生基础信息的增加、删除等。
本系统设计采用的是c++语言,使用的软件是VS2017,数据库使用的是MYSQL数据库,数据库可用Navicat 进行可视化操作。
系统的主要架构如下图:
用户首先进入到登录界面,输入用户名和密码,并选择角色,进行身份的验证,通过连接数据库进行用户名和密码进行验证,当用户输入的用户名和密码与数据库中的一致的话就可以登陆进去,同时记录用户的角色,验证用户角色,判断是否显示学生成绩的页面,在对学生基础信息与学生成绩信息进行操作都需要进行用户角色的验证,验证不通过则会提示权限不足,验证通过则可以进行学生信息的增加、删除等操作。
二、系统实现
1.环境搭建
- 安装VS2017软件,比2017版本高的应该都可以,如果软件版本比较2017低的话可能会导致兼容的问题。
- 安装MYSQL数据库,我使用的是5.5.56版,5.5.*版本应该是很稳定的一个版本了。
- VS2017软件连MYSQL接数据库的配置,由于时间比较长了,在这里就不详细说了,大家可以根据网上的教程自行配置。
2.数据库构建以及数据源的配置
- 利用Navicat软件连接MYSQL,之后可以对数据库进行可视化的操作。 首先创建一个连接,连接你本地的MYSQL数据库;连接之后创建一个数据库managersystem,名字自己取即可;然后在数据库创建三张表,三张表如下图。
第一张表是用户表,主要有三个字段,userName,userPassword和role,三个字段分别存储用户的用户名、用户密码和角色名称(用户权限)。
另外两张表就是学生信息表和学生成绩表,主要是存储学生基本信息和学生成绩信息,就不作详细说明了。
学生信息表t_student:
学生成绩表t_mark:
2.配置MYSQL数据源,首先在电脑中的【控制面板】---->【管理工具】里打开MYSQL数据库ODBC驱动,找不到则去网上下载ODBC驱动程序,如下图所示。
3. 创建一个MYSQL数据源,选择MySQLODBC 5.1 Driver 驱动程序,如下图所示。
之后会弹出一个配置数据库连接信息的界面,按照提示填写,如下图所示。
4. 登录界面
登录界面能够实现三种角色的登录,当用户输入账户和密码之后,通过连接数据库对用户账户和密码进行判断,验证之后,如果用户名和密码正确,则能够登录到系统中,如果验证失败,则提示错误信息。登录界面如图。
登录界面实现数据库验证的主要代码是:
mysql_query(&m_sqlCon, "SET NAMES GB2312");query.Format("select userName,userPassword,role from t_user where userName = \'%s\' and userPassword=\'%s\'", this->userName, this->userPassword);int ress = mysql_query(&m_sqlCon, (char*)(LPCSTR)query);if (ress == 0) //检测查询成功{res = mysql_store_result(&m_sqlCon);if (mysql_num_rows(res) == 0) //查询结果为空{AfxMessageBox("用户不存在");}else{row = mysql_fetch_row(res);if (strIdentify==row[2]){mysql_free_result(res);CDialog::OnOK();MAINLOG mianlog;mianlog.DoModal();//让对话框对象以有模式形式显示出来UpdateData(false);mysql_close(&m_sqlCon);//关闭Mysql连接}else{AfxMessageBox("密码错误!");}}}
在登录之后同时将登录的用户身份信息记录,以便后续使用,程序主要为:
UpdateData(true);int nIndex = identify.GetCurSel();strIdentify = str[nIndex];
其中
static CString str[3] = { "管理员","教师","学生"};
static CString strIdentify;
5.学生基础信息界面
登录到系统界面后,显示学生基础信息,学生角色只可查询,教师和管理员则可以进行增加和删除学生基础信息。用户可自己选择每页显示的数据数。也可以通过学号查询该学生信息。显示界面如图。
用户可以按“学号”进行查询,也可以进行添加、删除、选择每页显示的个数等操作;
操作数据库实现分页查询的主要程序为:
mysql_query(&m_sqlCon, "SET NAMES GB2312");sql.Format("SELECT studentId,studentNumber,name,sex,age,class,phone,qq,college FROM t_student LIMIT %d,%d", intStart, pageSize);int ress = mysql_query(&m_sqlCon, (char*)(LPCSTR)sql);if (ress == 0) {//检测成功res = mysql_store_result(&m_sqlCon);mysql_close(&m_sqlCon);//关闭Mysql连接
学生是没有添加和删除的权限,会提示警告:
当切换用户到教师或者管理员的角色时,就能够实现学生信息的添加和删除操作,如图所示:
实现添加学生基础信息的程序主要为:
mysql_init(&m_sqlCon);if (!mysql_real_connect(&m_sqlCon,"localhost","root","4321","managersystem",3306,NULL,0)) {AfxMessageBox(_T("数据库连接失败!"));return;}else{UpdateData(true);char* studentNumber1 = (char*)studentNumber.GetBuffer();char* studentName1 = (char*)studentName.GetBuffer();char* studentSex1 = (char*)studentSex.GetBuffer();char* studentAge1 = (char*)studentAge.GetBuffer();char* studClass1 = (char*)studClass.GetBuffer();char* telephone1 = (char*)telephone.GetBuffer();char* stuQQ1 = (char*)stuQQ.GetBuffer();char* college1 = (char*)college.GetBuffer();mysql_query(&m_sqlCon,"SET NAMES GB2312");//char insert[1000];sql.Format("INSERT INTO t_student(studentNumber,name,sex,age,class,phone,qq,college)VALUES(\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\')",studentNumber1,studentName1,studentSex1,studentAge1,studClass1,telephone1,stuQQ1,college1);int ress = mysql_query(&m_sqlCon, (char*)(LPCSTR)sql);if (ress == 0){AfxMessageBox(_T("插入数据成功!"));CDialog::OnOK();INFORADD inforAdd;inforAdd.DoModal();OnInitDialog();UpdateData(false);mysql_close(&m_sqlCon);//关闭Mysql连接}else {AfxMessageBox(_T("插入数据失败!"));}}
同样地,点击“按钮”输入学号,就可以实现删除的操作,如图为实现删除操作:
6.学生成绩显示界面
当角色为“教师”或者“管理员”时,在学生基础信息界面就能够显示“学生成绩表”的按钮。点击“学生成绩表”,就可以跳转到学生成绩的界面。
学生成绩界面同样有删除、添加的操作,有可以实现按添加查询,可以按照时间查询和按照学号查询。
按照年份实现查询的主要程序为:
mysql_query(&m_sqlCon2, "SET NAMES GB2312");sql2.Format("SELECT id,studentId,objectOriented,english,matrixAnalysis,term,SUM(objectOriented+english+matrixAnalysis) AS markSum,AVG((objectOriented+english+matrixAnalysis)/3) AS average FROM t_mark WHERE YEAR(term)=\'%s\' GROUP by id", this->term);int ress = mysql_query(&m_sqlCon2, (char*)(LPCSTR)sql2);if (ress == 0) {//检测成功res2 = mysql_store_result(&m_sqlCon2);mysql_close(&m_sqlCon2);//关闭Mysql连接while ((row2 = mysql_fetch_row(res2))){//mysql_display(&mysql,sqlrow);stuMark1.setId(row2[0]);stuMark1.setsId(row2[1]);stuMark1.setsObjectOriented(row2[2]);stuMark1.setsEnglish(row2[3]);stuMark1.setsMatrixAnalysis(row2[4]);stuMark1.setTerm(row2[5]);stuMark1.setSumMark(row2[6]);stuMark1.setAverage(row2[7]);stuMarkInfor.push_back(stuMark1);}
在这里并没有写的很详细,写细的话东西还是挺多的,就不一一赘述了。
总结一下,这个简单的mfc程序,原理很简单,涉及到了C++语言基础、mfc相关操作知识和MYSQL数据库的知识,在最后附上源码。
源码:mfc工程文件含数据库文件
提取码:k35x
C++实现一个基于mfc的学生信息管理系统相关推荐
- 基于html5的学生管理系统,基于HTML5的学生信息管理系统的设计与实现
[摘要] 目前学校依然使用人工对学生信息进行管理,没有相关的学生信息管理系统,虽然学校硬件和网络设施已经提高,但对网络的利用最多也就是用QQ来传送文件及信息,效率低下,这种状态急需改变. 基于这种现状 ...
- 基于SSM的学生信息管理系统
基于SSM的学生信息管理系统 摘要 随着互联网技术和国内教育行业持续高速地发展,管理员为了能够更加方便地管理学生信息,学生信息管理系统被开发出来的目的是为了能够更加方便管理学生信息,一个良好的学生信息 ...
- html实现学生系统,基于HTML5的学生信息管理系统的设计与实现
摘要: 目前学校依然使用人工对学生信息进行管理,没有相关的学生信息管理系统,虽然学校硬件和网络设施已经提高,但对网络的利用最多也就是用QQ来传送文件及信息,效率低下,这种状态急需改变. 基于这种现状, ...
- [Java]基于JDBC的学生信息管理系统的实现
基于JDBC的学生信息管理系统的实现 功能说明 数据库系统实现 0.建表过程 1.新生入学信息添加,学生信息修改 2.课程信息维护(增加新课程,修改课程信息,删除没有选课的课程信息) 3.录入学生成绩 ...
- 基于C++的学生信息管理系统的实现
在完成一学期的C++语言学习之后,写一个学生信息管理系统来丰富自己的实战经验. 课设内容的要求有主菜单模块.输入模块.查询模块.更新模块.排序模块.统计模块和输出模块,并且通过主菜单模块调用各个子模块 ...
- 基于PHP+MySQL学生信息管理系统的开发与设计
一直以来我国领导人提倡以人为本的治国方案,而大学是未来人才的培养基地,如何能够更好的对学生信息进行管理,是很多高校一直在研究的一个问题,只有更加科学的对学生信息进行管理,才能够更加积极的培养国家的栋梁 ...
- C语言涉及数组的大作业,c语言大作业_基于数组的学生信息管理系统.doc
. . word完美格式 <C语言程序设计实训1>报告 设 计 题 目: 基于数组的学生信息管理系统 学 院 名 称: 科学技术学院 专 业: 软件工程 班 级: 108班 姓 名: 大神 ...
- 基于JavaSwing开发学生信息管理系统(SQLServer数据库版本) 毕业设计 课程设计 大作业
基于JavaSwing开发学生信息管理系统(SQLServer数据库版本): (大作业) 开发环境: Windows操作系统 开发工具: MyEclipse+Jdk+SQLServer数据库 运行 ...
- 基于swing+awt学生信息管理系统
源码编号:F-A02 项目类型:Java SE项目(awt+swing)开源免费 项目名称:基于swing+awt学生信息管理系统(manager) 当前版本:V1.0.1版本 主要技术:java.a ...
- 学生信息录入java,基于java的学生信息管理系统
基于java的学生信息管理系统中分为多级角色管理:包括系统管理员.学生和老师几种权限,采用了开发技术JSP以及MYSQL数据库作为本系统的开发工具.主要包括新闻模块,考试模块,学生模块,教师模块,选课 ...
最新文章
- 关于laravel发布到github'丢失'vendor目录或其他文件的解决
- Android --- allowBackup 属性的含义和危险性实例讲解
- 深圳dotnet俱乐部新群
- ethereumjs/ethereumjs-common-3-test
- Python字符串splitlines()
- Ubuntu各文件夹功能说明
- 利用C++语法进行特殊类设计
- 三菱plc pwm指令_三菱PLC必会编程指令汇总,收藏这些就够了!
- word embedding和contextual embedding
- 极客创新大赛|微创机器人号探索飞船即将启航
- canvas教程2-canvas的编程思想
- ctor c语言,一步步分析-C语言如何面向对象编程
- 实验三 16位机指令系统实验报告
- SecureCRT连接服务器报错Failed to open the host key database file解决方法
- 从0开始学爬虫7之BeautifulSoup模块的简单介绍
- Python之险种缴费记录管理-保存文件版本
- 连接HBase的正确姿势
- 【牛投客】;牛投客最新消息
- JavaScript的压缩工具
- 微信开发官方文档部分整理