MySql--实战(基于qt的学生管理系统)
来源:互联网 发布:sketch up pro mac 编辑:程序博客网 时间:2024/05/16 17:22
前一段时间一直在看MySql,看完后就想着做点什么来运用一下,感受一下MySql强大的搜索功能。于是,这两天就在做这个学生管理系统,这次的学生管理系统和之前的职工管理系统有很大的不同,之前的职工管理系统只是增删改查,这次的学生管理系统含有多个数据表,学生学籍信息表、学生体检信息表、学生考试成绩表、课程号表和系统管理表。
做完之后,感觉最核心的就是对数据库的访问,然后再加一些界面之间切换,就成了我现在这个成品。
首先是我的访问数据库类:
class My_Sql{ QSqlQuery *query;public: My_Sql(); void initsql(); //初始化连接数据库 void createtable(); //建表、索引、触发器 bool inituser(QString name, QString identify, QString passward); //注册用户 bool loguser(QString name, QString passward); //用户登录/忘记密码 bool addstu(my_stu* stu); //添加学生信息 bool deletestu(QString account); //删除学生信息 bool updatestu(my_stu* stu); //修改学生信息 bool addheal(my_heal* heal); //添加体检信息 bool updateheal(my_heal* heal); //修改体检信息 bool deleteheal(QString account); //删除体检信息 bool addgrade(my_grade* grad); //添加成绩信息 bool updategrade(my_grade* grad); //修改成绩信息 bool deletegrade(QString account); //删除成绩信息 bool addlicen(my_licen* lice); //添加领证信息 bool updatelicen(my_licen* lice); //修改领证信息 bool deletelicen(QString account); //删除领证信息};这里主要显示了对数据库和数据表的初始化,以及对三张表的访问及处理。对数据表的处理和以前的用法差不多,最大的差距就是对多表的处理,比如:将多表查询结果整合存放于视图中,学籍和另外的体检表、证书表添加插入触发器,名字更改后就会将另外两个表的数据一起改变。再比如,对这几张表中的数据添加索引,让其自动排序,这样为数据的检索提高了效率。
query = new QSqlQuery;/*用户表*/query->exec("create table user(name VARCHAR(30) UNIQUE NOT NULL, passward VARCHAR(30), identify VARCHAR(30) PRIMARY KEY)");/*学生信息表*/query->exec("create table studentInfo(stuaccount VARCHAR(30) PRIMARY KEY UNIQUE NOT NULL, stuname VARCHAR(30), stusex ENUM('男', '女') NOT NULL, stuage INT, identify VARCHAR(30) UNIQUE NOT NULL, tel VARCHAR(20), enroll_time DATE, leave_time DATE, scondition enum('学习', '结业', '退学'), stu_text TEXT)");/*体检信息表*/query->exec("create table healthInfo(stuaccount VARCHAR(30) PRIMARY KEY UNIQUE NOT NULL, stuname VARCHAR(30) NOT NULL, height FLOAT, weight FLOAT, differentiate ENUM('正常', '色弱', '色盲'), left_sight FLOAT, right_sight FLOAT, left_ear ENUM('正常','偏弱'), right_ear ENUM('正常','偏弱'), legs ENUM('正常','不相等'), pressure ENUM('正常','偏高','偏低'), history VARCHAR(50), h_text TEXT)");/*考试课程表*/query->exec("create table courseInfo(classid INT PRIMARY KEY UNIQUE NOT NULL AUTO_INCREMENT, classname VARCHAR(30), beforeclassid INT)");/*考试成绩表*/query->exec("create table gradeInfo(stuaccount VARCHAR(30) PRIMARY KEY UNIQUE NOT NULL, classid INT NOT NULL, lasttime date, times INT default 1, grade float default 0, constraint grade_acc_fk FOREIGN KEY(stuaccount) REFERENCES studentInfo(stuaccount), constraint grade_cid_fk FOREIGN KEY(classid) REFERENCES courseInfo(classid))");/*领证时间表*/query->exec("create table licenseInfo(stuaccount VARCHAR(30) PRIMARY KEY UNIQUE NOT NULL, stuname VARCHAR(30), recv_time date, recv_name VARCHAR(30), l_text TEXT);");/*创建root用户*/query->exec("insert into user value('root', 'root', 'root')");/*学生表姓名索引*/query->exec("create index int_name ON studentInfo(stuname)");/*学生表学习状态索引*/query->exec("alter table studentInfo ADD INDEX ind_con(scondition)");/*体检表姓名索引*/query->exec("create index ind_hname ON healthInfo(stuname)");/*领证表姓名索引*/query->exec("alter table licenseInfo ADD INDEX ind_lname(stuname)");/*领证表领证人索引*/query->exec("alter table licenseInfo ADD INDEX ind_recvname(recv_name)");/*设计视图*/query->exec("create VIEW grade_view AS SELECT g.stuaccount, s.stuname, c.classname, g.lasttime, g.times, g.grade FROM studentinfo s, courseinfo c, gradeinfo g WHERE g.stuaccount = s.stuaccount AND g.classid = c.classid");/*设计insert触发器*/query->exec("CREATE TRIGGER license_stu AFTER INSERT ON licenseInfo FOR EACH ROW BEGIN UPDATE studentInfo SET leave_time=NEW.recv_time, scondition = '结业' WHERE stuaccount = NEW.stuaccount; END");/*设计update触发器*/query->exec("CREATE TRIGGER update_name AFTER UPDATE ON studentinfo FOR EACH ROW BEGIN UPDATE healthinfo SET stuname = NEW.stuname WHERE stuaccount = NEW.stuaccount;END");/*设计delete触发器*/query->exec("CREATE TRIGGER delete_stu AFTER DELETE ON studentinfo FOR EACH ROW BEGIN DELETE FROM gradeinfo WHERE stuaccount = OLD.stuaccount; DELETE FROM healthinfo WHERE stuaccount = OLD.stuaccount; DELETE FROM licenseinfo WHERE stuaccount = OLD.stuaccount;END");
这个项目的源码文件有点多,我将源码上传,有兴趣的朋友可以查看:源码分享
这里我上传几张截图,显示一下效果:
3 0
- MySql--实战(基于qt的学生管理系统)
- 基于qt和mysql的学生注册系统(一)
- 基于qt和mysql的学生注册系统(二)
- 基于qt和mysql的学生注册系统(一)
- 基于qt和mysql的学生注册系统(二)
- Java 基于MySQL数据库的简单学生管理系统
- 基于QT的学生信息管理系统开发
- 基于数据库的学生管理系统
- 基于C语言的学生管理系统
- 基于pickle模块的学生管理系统
- 基于JavaSwing+MySql的学生信息管理系统
- 基于QT的水果管理系统
- 基于QT的图书管理系统
- 基于链表的学生信息管理系统和基于MySQL的学生信息管理系统 -C语言
- 基于list.h的简单学生管理系统
- 学生管理系统-基于SQLite数据库的Android应用
- 基于金山快盘的学生作业管理系统简介
- 基于角色控制的学生权限管理系统
- 求两个数m,n的最大公约数和最小公倍数
- 每天一个Linux命令(34):date
- PHP常用基本语法
- 欢迎使用CSDN-markdown编辑器
- fastjson.serializer.SerializerFeature
- MySql--实战(基于qt的学生管理系统)
- html+css+jQuery实现多种图片简单切换功能大综合
- IP地址
- 阶乘
- Java基础-面向对象之封装和继承
- 【蓝桥杯·历届试题】分糖果
- 编译原理学习笔记(五)语法制导定义
- solr以及solr的Linux环境下安装
- Java注解(Annotation)原理详解