完整项目地址: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;i1<list_all_student.size();i1++){
int row = ui->tableWidget->rowCount();
ui->tableWidget->insertRow(row);
QStringList rowdata=list_all_student[i1].toStringList();
for(int i = 0 ; i <rowdata .size() ; i++)
{
QTableWidgetItem *item = new QTableWidgetItem;
item->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;
项目结构:
studenntManger123项目目录:
SQL源码:
/*
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', '物理竞赛一等奖', '无');