C++实现一个基于mfc的学生信息管理系统

一、系统概述

本文设计的是学生信息管理系统,能够实现权限管理即不同的用户角色能够拥有不同的限,角色主要是学生、教师和管理员,针对不同的用户,有着不同的操作权限,学生角色只能够查看到学生基础信息,不能够进行删除和添加的操作,而教师和管理员则能够实现学生基础信息的增加、删除等。
本系统设计采用的是c++语言,使用的软件是VS2017,数据库使用的是MYSQL数据库,数据库可用Navicat 进行可视化操作。
系统的主要架构如下图:
C++实现一个基于mfc的学生信息管理系统_第1张图片
用户首先进入到登录界面,输入用户名和密码,并选择角色,进行身份的验证,通过连接数据库进行用户名和密码进行验证,当用户输入的用户名和密码与数据库中的一致的话就可以登陆进去,同时记录用户的角色,验证用户角色,判断是否显示学生成绩的页面,在对学生基础信息与学生成绩信息进行操作都需要进行用户角色的验证,验证不通过则会提示权限不足,验证通过则可以进行学生信息的增加、删除等操作。

二、系统实现

1.环境搭建

  1. 安装VS2017软件,比2017版本高的应该都可以,如果软件版本比较2017低的话可能会导致兼容的问题。
  2. 安装MYSQL数据库,我使用的是5.5.56版,5.5.*版本应该是很稳定的一个版本了。
  3. VS2017软件连MYSQL接数据库的配置,由于时间比较长了,在这里就不详细说了,大家可以根据网上的教程自行配置。

2.数据库构建以及数据源的配置

  1. 利用Navicat软件连接MYSQL,之后可以对数据库进行可视化的操作。 首先创建一个连接,连接你本地的MYSQL数据库;连接之后创建一个数据库managersystem,名字自己取即可;然后在数据库创建三张表,三张表如下图。
    第一张表是用户表,主要有三个字段,userName,userPassword和role,三个字段分别存储用户的用户名、用户密码和角色名称(用户权限)。C++实现一个基于mfc的学生信息管理系统_第2张图片
    另外两张表就是学生信息表和学生成绩表,主要是存储学生基本信息和学生成绩信息,就不作详细说明了。
    学生信息表t_student:C++实现一个基于mfc的学生信息管理系统_第3张图片
    学生成绩表t_mark:
    C++实现一个基于mfc的学生信息管理系统_第4张图片

2.配置MYSQL数据源,首先在电脑中的【控制面板】---->【管理工具】里打开MYSQL数据库ODBC驱动,找不到则去网上下载ODBC驱动程序,如下图所示。
C++实现一个基于mfc的学生信息管理系统_第5张图片
3. 创建一个MYSQL数据源,选择MySQLODBC 5.1 Driver 驱动程序,如下图所示。
C++实现一个基于mfc的学生信息管理系统_第6张图片
之后会弹出一个配置数据库连接信息的界面,按照提示填写,如下图所示。
C++实现一个基于mfc的学生信息管理系统_第7张图片
4. 登录界面
登录界面能够实现三种角色的登录,当用户输入账户和密码之后,通过连接数据库对用户账户和密码进行判断,验证之后,如果用户名和密码正确,则能够登录到系统中,如果验证失败,则提示错误信息。登录界面如图。
C++实现一个基于mfc的学生信息管理系统_第8张图片
登录界面实现数据库验证的主要代码是:

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.学生基础信息界面
登录到系统界面后,显示学生基础信息,学生角色只可查询,教师和管理员则可以进行增加和删除学生基础信息。用户可自己选择每页显示的数据数。也可以通过学号查询该学生信息。显示界面如图。
C++实现一个基于mfc的学生信息管理系统_第9张图片
用户可以按“学号”进行查询,也可以进行添加、删除、选择每页显示的个数等操作;
操作数据库实现分页查询的主要程序为:

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连接

学生是没有添加和删除的权限,会提示警告:
C++实现一个基于mfc的学生信息管理系统_第10张图片
当切换用户到教师或者管理员的角色时,就能够实现学生信息的添加和删除操作,如图所示:
C++实现一个基于mfc的学生信息管理系统_第11张图片
实现添加学生基础信息的程序主要为:

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("插入数据失败!"));
		}
	}

同样地,点击“按钮”输入学号,就可以实现删除的操作,如图为实现删除操作:
C++实现一个基于mfc的学生信息管理系统_第12张图片
6.学生成绩显示界面
当角色为“教师”或者“管理员”时,在学生基础信息界面就能够显示“学生成绩表”的按钮。点击“学生成绩表”,就可以跳转到学生成绩的界面。
C++实现一个基于mfc的学生信息管理系统_第13张图片
学生成绩界面同样有删除、添加的操作,有可以实现按添加查询,可以按照时间查询和按照学号查询。
按照年份实现查询的主要程序为:

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++)