当前位置:   article > 正文

使用Qt数据库,实现简单的学生成绩管理系统_qt学生成绩管理系统

qt学生成绩管理系统

        通过使用Qt中的数据库,实现对学生成绩的管理,包括成绩的增删改查以及排序等操作。

1、项目框架

2、UI界面设计

3、相关运行代码

StudentSystem.pro

QT   += sql   // 与数据库相关的模块

studentSystem.h 头文件

  1. #ifndef STUDENTDIALOG_H
  2. #define STUDENTDIALOG_H
  3. #include <QDialog>
  4. #include <QSqlDatabase> // 管理数据库连接的类
  5. #include <QSqlQuery> // 执行SQL查询的类
  6. #include <QSqlQueryModel> // 在Qt模型/视图框架中显示SQL查询结果的类
  7. #include <QSqlError> // 于处理SQL相关错误的类
  8. #include <QDebug>
  9. #include <QMessageBox>
  10. #include <QFile> // 提供了对文件的读取和写入操作
  11. namespace Ui {a
  12. class StudentDialog;
  13. }
  14. class StudentDialog : public QDialog
  15. {
  16. Q_OBJECT
  17. public:
  18. explicit StudentDialog(QWidget *parent = 0);
  19. ~StudentDialog();
  20. private:
  21. // 创建数据库
  22. void createDB();
  23. // 创建数据表
  24. void createTable();
  25. // 查询
  26. void queryTable();
  27. private slots:
  28. // 插入按钮对应的槽函数
  29. void on_insertButton_clicked();
  30. // 删除按钮对应的槽函数
  31. void on_deleteButton_clicked();
  32. // 修改按钮对应的槽函数
  33. void on_updateButton_clicked();
  34. // 排序按钮对应的槽函数
  35. void on_sortButton_clicked();
  36. private:
  37. Ui::StudentDialog *ui;
  38. QSqlDatabase db; // 建立Qt和数据库链接
  39. QSqlQueryModel model ; // 保存查询结果集
  40. };
  41. #endif // STUDENTDIALOG_H

studentSystem.h 源文件

  1. #include "studentdialog.h"
  2. #include "ui_studentdialog.h"
  3. StudentDialog::StudentDialog(QWidget *parent) :
  4. QDialog(parent),
  5. ui(new Ui::StudentDialog)
  6. {
  7. ui->setupUi(this);
  8. createDB();
  9. createTable();
  10. queryTable();
  11. }
  12. StudentDialog::~StudentDialog()
  13. {
  14. delete ui;
  15. }
  16. // 创建数据库
  17. void StudentDialog::createDB()
  18. {
  19. // 检查数据库文件是否已经存在
  20. if (QFile::exists("student.db"))
  21. {
  22. // 数据库文件已经存在,直接打开
  23. db = QSqlDatabase::addDatabase("QSQLITE"); // 添加数据库驱动库
  24. db.setDatabaseName("student.db"); // 设置数据库名字(文件名)
  25. if (db.open())
  26. {
  27. qDebug() << "打开数据库成功!";
  28. }
  29. else
  30. {
  31. qDebug() << "打开数据库失败!";
  32. }
  33. }
  34. else
  35. {
  36. // 数据库文件不存在,创建并打开
  37. db = QSqlDatabase::addDatabase("QSQLITE"); // 添加数据库驱动库
  38. db.setDatabaseName("student.db"); // 设置数据库名字(文件名)
  39. if (db.open())
  40. {
  41. qDebug() << "创建/打开数据库成功!";
  42. }
  43. else
  44. {
  45. qDebug() << "创建/打开数据库失败!";
  46. }
  47. }
  48. }
  49. // 创建数据表
  50. void StudentDialog::createTable()
  51. {
  52. QSqlQuery query;
  53. QString selectsql = QString("select * from sqlite_master where name='student'"); //是否已经存在表
  54. query.exec(selectsql);
  55. if(query.next())
  56. {
  57. qDebug() << "数据表已经存在!";
  58. }
  59. else
  60. {
  61. QString str = QString("CREATE TABLE student ("
  62. "id INT PRIMARY KEY NOT NULL,"
  63. "name TEXT NOT NULL,"
  64. "score REAL NOT NULL)");
  65. // 判断表是否创建成功
  66. if(query.exec(str) == false)
  67. {
  68. qDebug() << str ;
  69. }
  70. else
  71. {
  72. qDebug() << "创建数据表成功!";
  73. }
  74. }
  75. }
  76. // 查询
  77. void StudentDialog::queryTable()
  78. {
  79. QString str = QString("SELECT * FROM student;");
  80. if(str == "")
  81. {
  82. qDebug() << "表中没有任何的数据";
  83. }
  84. else
  85. {
  86. model.setQuery(str);
  87. ui->tableView->setModel(&model);
  88. }
  89. }
  90. // 插入按钮对应的槽函数
  91. void StudentDialog::on_insertButton_clicked()
  92. {
  93. QSqlQuery query;
  94. int id = ui->idEdit->text().toInt();
  95. if(id <= 0)
  96. {
  97. QMessageBox::critical(this,"Error","ID输入错误!(id > 0)");
  98. return;
  99. }
  100. QString name = ui->nameEdit->text();
  101. if(name == "")
  102. {
  103. QMessageBox::critical(this,"Error","姓名输入错误!");
  104. return;
  105. }
  106. double score = ui->scoreEdit->text().toDouble();
  107. if(score < 0 || score > 100)
  108. {
  109. QMessageBox::critical(this,"Error","成绩输入错误!(0-100)");
  110. return;
  111. }
  112. QString sql = QString("SELECT * from student WHERE id=%1;").arg(id);
  113. query.prepare(sql);
  114. query.bindValue(":id", id);
  115. if (query.exec() && query.next())
  116. {
  117. QMessageBox::critical(this, "Error", "该用户id已经存在");
  118. return ; // 存在该记录
  119. }
  120. QString str = QString("INSERT INTO student VALUES(%1,'%2', %3);"
  121. ).arg(id).arg(name).arg(score);
  122. if(query.exec(str) == false)
  123. {
  124. qDebug() << str ;
  125. }
  126. else
  127. {
  128. queryTable();
  129. QMessageBox::information(this, "success","插入操作成功!" ) ;
  130. // qDebug() << "插入数据成功!";
  131. }
  132. }
  133. // 删除按钮对应的槽函数: 根据ID删除一条数据
  134. void StudentDialog::on_deleteButton_clicked()
  135. {
  136. QSqlQuery query;
  137. int id = ui->idEdit->text().toInt();
  138. if(id <= 0)
  139. {
  140. QMessageBox::critical(this, "error","请输入正确的id!" ) ;
  141. return;
  142. }
  143. QString sql = QString("SELECT * from student WHERE id=%1;").arg(id);
  144. query.prepare(sql);
  145. query.bindValue(":id", id);
  146. if (query.exec() && query.next())
  147. {
  148. QString str = QString("DELETE FROM student WHERE id = %1;").arg(id);
  149. if(QMessageBox::question(this,"删除","确定要删除?",
  150. QMessageBox::Yes|QMessageBox::No) == QMessageBox::No)
  151. {
  152. return;
  153. }
  154. if(query.exec(str) == false)
  155. {
  156. qDebug() << str ;
  157. QMessageBox::critical(this, "Error", "删除失败");
  158. }
  159. else
  160. {
  161. queryTable();
  162. QMessageBox::information(this, "success","删除操作成功!" ) ;
  163. // qDebug() << "删除操作成功";
  164. }
  165. }
  166. else
  167. {
  168. QMessageBox::critical(this, "Error", "该用户id不存在");
  169. return ; // 不存在该记录
  170. }
  171. }
  172. // 修改按钮对应的槽函数 : 根据ID修改成绩
  173. void StudentDialog::on_updateButton_clicked()
  174. {
  175. QSqlQuery query;
  176. int id = ui->idEdit->text().toInt();
  177. if(id == 0)
  178. {
  179. QMessageBox::critical(this, "error","请输入正确的id!" ) ;
  180. return;
  181. // qDebug() << "请输入正确的id";
  182. }
  183. double score = ui->scoreEdit->text().toDouble();
  184. if(score < 0 || score > 100)
  185. {
  186. QMessageBox::critical(this, "error","修改的成绩有误!(0-100)" ) ;
  187. return;
  188. // qDebug() << "修改的成绩有误!";
  189. }
  190. QString sql = QString("SELECT * from student WHERE id=%1;").arg(id);
  191. query.prepare(sql);
  192. query.bindValue(":id", id);
  193. if (query.exec() && query.next())
  194. {
  195. QString str = QString("UPDATE student SET score=%1 WHERE id=%2;"
  196. ).arg(score).arg(id);
  197. if(query.exec(str)==false)
  198. {
  199. qDebug() << str;
  200. QMessageBox::critical(this, "Error", "修改失败");
  201. }
  202. else
  203. {
  204. queryTable();
  205. QMessageBox::information(this, "success","修改操作成功!" ) ;
  206. // qDebug() << "修改操作成功!";
  207. }
  208. }
  209. else
  210. {
  211. QMessageBox::critical(this, "Error", "该用户id不存在");
  212. return ; // 不存在该记录
  213. }
  214. }
  215. // 排序按钮对应的槽函数
  216. void StudentDialog::on_sortButton_clicked()
  217. {
  218. // 获取排序列名
  219. QString value = ui->valueComboBox->currentText();
  220. // 获取排序方式
  221. QString condition;
  222. if(ui->condComboBox->currentIndex() == 0)
  223. {
  224. condition = "ASC"; // 升序
  225. }
  226. else
  227. {
  228. condition = "DESC"; // 降序
  229. }
  230. QString str = QString("SELECT * FROM student ORDER BY %1 %2;"
  231. ).arg(value).arg(condition);
  232. // 查询和显示
  233. model.setQuery(str);
  234. ui->tableView->setModel(&model);
  235. QMessageBox::information(this, "success","排序成功!" ) ;
  236. }

4、运行结果

        对学生成绩进行查询 、添加、删除、修改以及排序等。有兴趣的还可以添加其他的功能。

未完待续


有疑问或者有更好的项目,小伙伴们可以留言一起交流讨论!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/946892
推荐阅读
相关标签
  

闽ICP备14008679号