基于QT实现的学生信息管理系统

ilovehim

发布日期: 2019-02-28 15:15:10 浏览量: 1535
评分:
star_border star_border star_border star_border star_border star_border star_border star_border star_border star_border
*转载请注明来自write-bug.com

一、系统指南

本系统为表格式的学生信息管理系统,提供了文件新建、打开及保存功能,还可在表格中对数据进行增加、删除、修改、搜索,下面将一一介绍这些功能

1.1 新建文件

新建文件将会产生一个全新的空表格,在新建文件时,当前表格的内容将会被删除,系统会自动检测当前表格内容是否已经被保存过,如果未保存过的,会对用户进行提示;否则将直接生成新表格。

1.2 打开文件

系统可以打开由系统保存的、符合系统规范的.csv文件。

1.3 保存文件

系统将当前表格保存为.csv文件。之所以保存为.csv文件,除了考虑到这种文件具有非常规整的模式之外,还考虑到该格式可使用微软excel表格打开,便于实际场景中的使用。

1.4 增加

在系统菜单栏编辑项中和系统右键菜单中,有三种方式对表格数据进行增加,分别是“增加一行”,“上方插入一行”和“下方插入一行”。

  • 点击“增加一行”,会在表格末尾生成一行空行

  • 点击“上方插入一行”,会在当前选中表格的上方插入一行空行

  • 点击“下方插入一行”,会在当前选中表格的下方插入一行空行

1.5 删除

在系统菜单栏编辑项中和系统右键菜单中,提供了“删除”选项。

点击删除选项之后,当前选中的行会被删除掉。

1.6 修改

双击表项即可进入编辑模式,对表格内容进行编辑。其中性别、专业和出生日期栏还提供了下拉选择项,便于使用者对其进行编辑。

1.7 搜索

系统工具栏中有一个搜索文本框,用户只需要在框中输入搜索内容,之后点击窗口右边的“搜索”按钮即可进行搜索。除了搜索按钮以外,还有“上一个”和“下一个”按钮,用以继续查询。

1.8 排序

若要按照某个属性进行排序,只需要双击该属性表头即可。首次点击按照字符正序按该列对表格进行扩展排序,再次点击进行倒序排序,再次点击又变为正序排序,以此类推。搜索仅支持精确搜索,不支持模糊搜索。

二、系统实现

本系统主要由三个继承类构成,一个是MianWindow类,它继承自QMainWindow类,是系统的主要部分,另外两个类为DelegateDateDelegate类,它们都继承自QItemDelegate类,用以实现表项中的下拉选项,前者实现了性别和专业方向下拉选项,后者实现了出生日期的下拉选项。

MainWindow类中还集成了QAction类、QWidget类、QLayout类、QTableWidget类、QLineEdit类、QPushButton类、QString类。

请注意,系统中出现的其他Qt类,以及dialog.cpp、student.cpp、studentdatabase.cpp和他们对应的头文件中封装的类,仅为系统实现过程中的遗产代码,在系统中不发挥作用,仅为日后留作他用。其实就是懒得删掉。

2.1 MainWindow类

MainWindow类属性和接口定义如下:

  1. class MainWindow : public QMainWindow
  2. {
  3. Q_OBJECT
  4. public:
  5. explicit MainWindow(QWidget *parent = 0);
  6. ~MainWindow();
  7. protected:
  8. void closeEvent(QCloseEvent *event);
  9. private:
  10. Ui::MainWindow *ui;
  11. //文件保存标识符
  12. bool saved;
  13. QWidget *widget;
  14. //布局管理器
  15. QLayout *layout;
  16. //表格及其初始化函数
  17. QTableWidget *table;
  18. void tableInitialize();
  19. //菜单栏选项
  20. QAction *newAction;
  21. QAction *openAction;
  22. QAction *saveAction;
  23. QAction *exitAction;
  24. QAction *addAction;
  25. QAction *deleteAction;
  26. QAction *moveUpAction;
  27. QAction *moveDownAction;
  28. QAction *insertAction;
  29. //排序辅助数组。用于实现对某属性的第奇数次为正排,偶数次为倒排
  30. bool c[8];
  31. //储存有表格下拉选项的QComboBox
  32. QVector<QComboBox*> *QComboBoxList;
  33. //工具栏搜索的文本框、三个按钮和搜索关键词
  34. QLineEdit *searchQLineEditToolBar;
  35. QPushButton *searchButton;
  36. QPushButton *lastButton;
  37. QPushButton *nextButton;
  38. //搜索文本
  39. QString searchQstr;
  40. //当前搜索到的表格位置
  41. int searchRow;
  42. int searchColumn;
  43. //快速排序,按照字符串比较顺序
  44. int partition(int p, int q, int column);
  45. void quickSort(int p, int q, int column);
  46. void Swap(int p1,int p2, int column);
  47. //表项右键菜单
  48. virtual void contextMenuEvent(QContextMenuEvent *event);
  49. private slots:
  50. //响应函数们
  51. //新建文件
  52. void newFile();
  53. //打开文件
  54. void openFile();
  55. //保存文件
  56. void saveFile();
  57. //表格末尾增加一行
  58. void addModify();
  59. //菜单栏中的删除当前行
  60. void deleteModify();
  61. //菜单栏中的当前行上移一行
  62. void moveUpModify();
  63. //菜单栏中的当前行下移一行
  64. void moveDownModify();
  65. //按照选定属性进行排序
  66. //参数是选定属性所在列的索引
  67. void sortView(int colunmIndex);
  68. //表格修改
  69. //表格修改后,将saved改为false,标识文件未保存
  70. void tableModify(int row,int column);
  71. //在当前行上一行插入空行
  72. void insertBefore();
  73. //在当前行下一行插入空行
  74. void insertAfter();
  75. //右键菜单中的删除当前行
  76. //实际上与菜单栏中的删除当前行响应函数(void deleteModify())没有区别
  77. void deleteLine();
  78. //搜索文本获取
  79. //每当搜索文本框中内容改变时,调用该函数对搜索文本searchQstr进行赋值
  80. void searchQlineEditChanged(QString qstr);
  81. //搜索按钮响应函数
  82. //执行搜索,搜出第一个符合的位置并选中高亮。搜不到的话表格不会有任何变化。
  83. void searchToolBarTriggered();
  84. //搜索上一个
  85. void lastToolBarTriggered();
  86. //搜索下一个
  87. void nextToolBarTriggered();
  88. };

2.2 Delegate类

Delegate类继承自QDelegate类,用以实现的性别和专业自定义委托。Delegate类属性和接口定义如下:

  1. class Delegate : public QItemDelegate
  2. {
  3. Q_OBJECT
  4. public:
  5. Delegate(QObject *parent = nullptr);
  6. ~Delegate();
  7. //绘制下拉选项菜单
  8. void paint(QPainter *painter, const QStyleOptionViewItem &option,
  9. const QModelIndex &index) const;
  10. //下拉选项大小
  11. QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
  12. //创建自定义按钮
  13. QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
  14. //设置自定义按钮内容
  15. void setEditorData(QWidget *editor, const QModelIndex &index) const;
  16. void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
  17. private:
  18. };

2.3 DateDelegate类

DateDelegate类也继承自QDelegate类,用以实现出生日期的自定义委托,DateDelegate类属性和接口定义如下:

  1. class DateDelegate : public QItemDelegate
  2. {
  3. Q_OBJECT
  4. public:
  5. DateDelegate(QObject *parent = nullptr);
  6. ~DateDelegate();
  7. //返回改变Model数据的widget,该widget是经过定制行为的Widget
  8. QWidget *createEditor(QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const;
  9. //将可操作的数据提供给widget
  10. void setEditorData(QWidget * editor, const QModelIndex & index) const;
  11. //将widget的数据展示到Item中
  12. void setModelData(QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const;
  13. //确保widget能够正确显示到view中
  14. void updateEditorGeometry(QWidget * editor, const QStyleOptionViewItem & option, const QModelIndex & index) const;
  15. private:
  16. };
上传的附件 cloud_download 基于QT实现的学生信息管理系统.7z ( 1.76mb, 25次下载 )
error_outline 下载需要11点积分

发送私信

岁月极美,在于它必然的流逝

13
文章数
12
评论数
最近文章
eject