基于C++ 、Qt 、数据库Mysql的学生信息管理系统
完整项目地址:https://download.csdn.net/download/lijunhcn/88628534
基于C# Windows窗体的 教务系统 学生信息管理系统 学生成绩管理系统
一.使用说明
该学生信息管理系统使用的数据库为MySQL;
在另外一台电脑上(老师的电脑)运行时运行环境必须满足以下要求:
1,那台电脑必须要安装数据库MySQL;安装引导里一定要将默认的latin1编码换成utf8编码,不然后面会中文乱码
2,在那台电脑的MySQL中导入本人数据库脚本文件 studentmanager.sql (该文件已打包好)(这里推荐使用navicate for mysql 导入 数据库创建是要选择utf8编码,不然后期会出现数据库中文乱码)
3,在MySQL的安装目录下的lib文件夹中的libmysql.dll文件复制到Qt安装目录下的bin目录中
4,最后在原代码中的globle.cpp 文件中更改连接数据库的账号和密码( 更改QString sqluser=“root” 的值为更改账号。更改QString sqlpass=“123456” 的值为更改密码。
此处我的数据库账号为root 密码为123456。此处账号密码要对应自己MySQL账号密码)
以上步骤若没完成则会编译运行不了
二.studentmanager 数据库表格说明
该 studentmanager.sql 有六张表:用Navicat for MySQL (数据库图形界面操作软件)
展现的
1.admin 表(管理员登录表)
用该表的username作为账号和password作为密码可登录管理员端
2.student (学生基本信息表)
用该表的id 作为账号, password 作为密码可登录学生端
-
class表 (班级信息表)
-
course 表(课程信息表)
-
fee 表(缴费信息表)
-
score 表(分数信息表)
三.本程序需解决的关键技术问题
该学生管理系统主要使用到Qt 的数据库编程开发。
在Qt框架下进行数据库的增删查改相关功能开发。
1.如何使用qt 连接数据库。
连接数据库 要使用qt 的QSqlDatabase类,该类提供了数据库连接的相关方法,以及执行mysql的sql 命令的功能。
2从数据库获取信息乱码问题。
在连接完数据库时输入以下代码:QSqlQuery query(db);
db.exec(“SET NAMES ‘GBK’”);
可解决数据库乱码问题。
3,登录功能的实现
(1) 在qt的ui界面将登入界面设计好后实现登录功能
(2)连接数据库
(3)通过判断哪个单选框被选中,来判断是学生还是管理员。
(4)从数据库查找相应管理员表,和学生表,通过 while(query.next())循环 一一对从行编辑器中获取的账号,密码与从数据库中获取的账号密码进行匹配,若匹配成功则跳转进入相应的学生端和管理员端界面。
4,如何实现间界面间传值。
面传值使用全局变量实现的
创建全局变量:新建了一个C++类文件globle。声明全局变量使用关键字extern。在另一个C++类文件中只需要包含globle.h 的头文件就可以使用该全局变量,就能通过全局变量在不同的界面中传值。
5,如何实现界面跳转。
举个例子:
this->hide();
userlogin *ti=new userlogin;
ti->show();
就先hide当前界面,在创建要新跳的界面对象指针,
通过对象指针show跳转后的界面;
6,对于使用qttablewidget 表格类显示所有学生信息的方法。
此处我用了QVariantList 这个数据结构将从数据库中或取得所有学生信息储存起来。在用嵌套的两个for循环将其展现到qttablewidget 表格中具体代码如下:
//遍历list_all_student,将获取的学生信息展现到表格tablewidget中 for(int i1=0;i1tableWidget->rowCount(); ui->tableWidget->insertRow(row);
QStringList rowdata=list_all_student[i1].toStringList();
for(int i = 0 ; i setText(rowdata.at(i)); ui->tableWidget->setItem(row , i , item); }
}
7,如何实现对数据库进行增删查改。
具体代码:
QSqlQuery query(db);
db.exec(“SET NAMES ‘GBK’”);
query.exec(“select dormnum,id,name,sex,bednum,beizhu from student”);
while(query.next())........... 只需要更改 query.exec("select dormnum,id,name,sex,bednum,beizhu from student");中的sql 命令即可实现增删查改
添加数据:insert xxx(id, username) values(xx, “xxx”);
修改数据:update tablename set xx=xx,xxx=xx where xxx=xxx and xxx=xxx;
删除数据:delete from tablename where xx=xxx and xxx = xxx or xxx = xxx;
查询数据:select * from xxx;
项目结构:
/* Navicat MySQL Data Transfer Source Server : 3232 Source Server Version : 50527 Source Host : localhost:3306 Source Database : studentmanager Target Server Type : MYSQL Target Server Version : 50527 File Encoding : 65001 Date: 2017-08-03 11:50:08 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for admin -- ---------------------------- DROP TABLE IF EXISTS `admin`; CREATE TABLE `admin` ( `id` int(11) NOT NULL DEFAULT '0', `username` text, `password` text, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of admin -- ---------------------------- INSERT INTO `admin` VALUES ('1', 'admin', 'admin'); INSERT INTO `admin` VALUES ('2', 'admin2', 'admin2'); INSERT INTO `admin` VALUES ('4', '陈永喆', '5251'); -- ---------------------------- -- Table structure for class -- ---------------------------- DROP TABLE IF EXISTS `class`; CREATE TABLE `class` ( `classid` int(11) DEFAULT NULL, `classname` text, `major` text, `membernum` int(11) DEFAULT NULL, `instructor` text ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of class -- ---------------------------- INSERT INTO `class` VALUES ('101', '信安163班', '信息安全', '29', '刘凌峰'); INSERT INTO `class` VALUES ('102', '信安161班', '信息安全', '30', '戴萌'); INSERT INTO `class` VALUES ('103', '软工165班', '软件工程', '30', '黄安'); -- ---------------------------- -- Table structure for course -- ---------------------------- DROP TABLE IF EXISTS `course`; CREATE TABLE `course` ( `id` int(11) NOT NULL DEFAULT '0', `object` text, `teacher` text, `coursetime` text, `courseaddress` text, `period` text, `credit` text, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of course -- ---------------------------- INSERT INTO `course` VALUES ('101', '大物', '黄国庆', '大一下', '软件楼102教室', '56', '4'); INSERT INTO `course` VALUES ('102', '高数', '陈春芳', '大一上', '软件楼307教室', '64', '5'); INSERT INTO `course` VALUES ('103', 'c语言', '刘伯成', '大一上', '软件楼109教室', '64', '3'); INSERT INTO `course` VALUES ('105', 'C++', '刘伯成', '大一下', '软件楼103教室', '56', '4'); -- ---------------------------- -- Table structure for fee -- ---------------------------- DROP TABLE IF EXISTS `fee`; CREATE TABLE `fee` ( `id` bigint(20) DEFAULT NULL, `name` text, `banji` text, `major` text, `term` text, `fee` text, `arrearage` text ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of fee -- ---------------------------- INSERT INTO `fee` VALUES ('8001716066', '陈永喆', '信安163班', '信息安全', '大一下', '10000元', '0元'); INSERT INTO `fee` VALUES ('1008', '张勇', '网工162班', '网络工程', '大一上', '5550元', '0元'); INSERT INTO `fee` VALUES ('1000', '张三', '计科162班', '计算机科学与技术', '大一下', '5550元', '0元'); -- ---------------------------- -- Table structure for score -- ---------------------------- DROP TABLE IF EXISTS `score`; CREATE TABLE `score` ( `id` bigint(20) DEFAULT NULL, `time` text, `object` text, `score` text, `banji` text, `teacher` text ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of score -- ---------------------------- INSERT INTO `score` VALUES ('1008', '大一下', '大物', '%0', '%1', '%2'); INSERT INTO `score` VALUES ('1000', '大一上', '高数', '81', '162', '张老师'); INSERT INTO `score` VALUES ('8001716066', '大一上', '高数', '89', '163', '陈春芳'); INSERT INTO `score` VALUES ('8001716066', '大一下', '高数', '100', '163', '陈春芳'); INSERT INTO `score` VALUES ('8001716066', '大一下', '大物', '83', '163', '黄国庆'); INSERT INTO `score` VALUES ('122322', '大一下', '大物', '98', '163', '王明'); INSERT INTO `score` VALUES ('100123', '大一下', '大物', '98', '163', '王明'); INSERT INTO `score` VALUES ('12122', '32324', '3232', '343', '344', '43'); -- ---------------------------- -- Table structure for student -- ---------------------------- DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `id` bigint(11) NOT NULL, `name` text, `sex` text, `age` text, `major` text, `banji` int(11) DEFAULT NULL, `address` text, `phonenumber` text, `beizhu` text, `password` text, `dormnum` text, `bednum` text, `award` text, `punish` text, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of student -- ---------------------------- INSERT INTO `student` VALUES ('1000', '张三', '男', '19', '计科', '162', '上海', '15925637846', '学生', '123456', '304', '1', '无', '记过'); INSERT INTO `student` VALUES ('1001', '李四', '男', '18', '软件工程', '164', '南昌', '14667344366', '学生', '245343', '301', '3', '数学竞赛一等奖', '无'); INSERT INTO `student` VALUES ('1004', 'xh', '女', '19', '信息安全', '161', '广东', '18138494848', '学生', '1234567', '207', '5', '运动会跳远第一', '无'); INSERT INTO `student` VALUES ('1007', '王五', '女', '18', '土木工程', '164', '河北', '13545665788', '学生', '13225', '207', '2', '学习积极分子', '无'); INSERT INTO `student` VALUES ('1008', '张勇', '男', '18', '网络工程', '163', '南昌', '15029389209', '学生', '5436555', '301', '4', '先进班干部', '无'); INSERT INTO `student` VALUES ('8001716066', '陈永喆', '男', '19', '信息安全', '163', '赣州', '18170874213', '本人', '5252', '305', '2', '物理竞赛一等奖', '无');