基于Qt(C++)实现(PC)学生信息管理系统【100010043】

news2024/11/26 14:48:46

学生信息管理系统

一、系统指南

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

1、新建文件

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

2、打开文件

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

3、保存文件

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

4、增加

在系统菜单栏编辑项中和系统右键菜单中,有三种方式对表格数据进行增加,分别是“增加一行”,“上方插入一行”和“下方插入一行”。
点击“增加一行”,会在表格末尾生成一行空行。
点击“上方插入一行”,会在当前选中表格的上方插入一行空行。
点击“下方插入一行”,会在当前选中表格的下方插入一行空行。
在这里插入图片描述

在这里插入图片描述

5、删除

在系统菜单栏编辑项中和系统右键菜单中,提供了“删除”选项。
点击删除选项之后,当前选中的行会被删除掉。

6、修改

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

7、搜索

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

在这里插入图片描述

8、排序

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

二、系统实现

本系统主要由三个继承类构成,一个是MianWindow类,它继承自QMainWindow类,是系统的主要部分,另外两个类为DelegateDateDelegate类,它们都继承自QItemDelegate类,用以实现表项中的下拉选项,前者实现了性别和专业方向下拉选项,后者实现了出生日期的下拉选项。
MainWindow类中还集成了QAction类、QWidget类、QLayout类、QTableWidget类、QLineEdit类、QPushButton类、QString类。请注意,系统中出现的其他Qt类,以及dialog.cpp、student.cpp、studentdatabase.cpp和他们对应的头文件中封装的类,仅为系统实现过程中的遗产代码,在系统中不发挥作用,仅为日后留作他用。其实就是懒得删掉。

1、MainWindow类

MainWindow类属性和接口定义如下

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
protected:
    void closeEvent(QCloseEvent *event);
private:
    Ui::MainWindow *ui;
    //文件保存标识符
    bool saved;
    
    QWidget *widget;

    //布局管理器
    QLayout *layout;

    //表格及其初始化函数
    QTableWidget *table;
    void tableInitialize();

    //菜单栏选项
    QAction *newAction;
    QAction *openAction;
    QAction *saveAction;
    QAction *exitAction;
    QAction *addAction;
    QAction *deleteAction;
    QAction *moveUpAction;
    QAction *moveDownAction;
    QAction *insertAction;
    
    //排序辅助数组。用于实现对某属性的第奇数次为正排,偶数次为倒排
    bool c[8];
    
    //储存有表格下拉选项的QComboBox
    QVector<QComboBox*> *QComboBoxList;

    //工具栏搜索的文本框、三个按钮和搜索关键词
    QLineEdit *searchQLineEditToolBar;
    QPushButton *searchButton;
    QPushButton *lastButton;
    QPushButton *nextButton;
    //搜索文本
    QString searchQstr;
    //当前搜索到的表格位置
    int searchRow;
    int searchColumn;

    //快速排序,按照字符串比较顺序   
    int partition(int p, int q, int column);
    void quickSort(int p, int q, int column);
    void Swap(int p1,int p2, int column);

    //表项右键菜单
    virtual void contextMenuEvent(QContextMenuEvent *event);

private slots:
    //响应函数们

    //新建文件
    void newFile();
    //打开文件
    void openFile();
    //保存文件
    void saveFile();
    //表格末尾增加一行
    void addModify();
    //菜单栏中的删除当前行
    void deleteModify();
    //菜单栏中的当前行上移一行
    void moveUpModify();
    //菜单栏中的当前行下移一行
    void moveDownModify();
    //按照选定属性进行排序
    //参数是选定属性所在列的索引
    void sortView(int colunmIndex);
    //表格修改
    //表格修改后,将saved改为false,标识文件未保存
    void tableModify(int row,int column);
    //在当前行上一行插入空行
    void insertBefore();
    //在当前行下一行插入空行
    void insertAfter();
    //右键菜单中的删除当前行
    //实际上与菜单栏中的删除当前行响应函数(void deleteModify())没有区别
    void deleteLine();
    //搜索文本获取
    //每当搜索文本框中内容改变时,调用该函数对搜索文本searchQstr进行赋值
    void searchQlineEditChanged(QString qstr);
    //搜索按钮响应函数
    //执行搜索,搜出第一个符合的位置并选中高亮。搜不到的话表格不会有任何变化。
    void searchToolBarTriggered();
    //搜索上一个
    void lastToolBarTriggered();
    //搜索下一个
    void nextToolBarTriggered();
};

2、Delegate类

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

class Delegate : public QItemDelegate
{
    Q_OBJECT

public:
    
    Delegate(QObject *parent = nullptr);
    ~Delegate();
    //绘制下拉选项菜单
    void paint(QPainter *painter, const QStyleOptionViewItem &option,
        const QModelIndex &index) const;
    //下拉选项大小
    QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
    //创建自定义按钮
    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
    //设置自定义按钮内容
    void setEditorData(QWidget *editor, const QModelIndex &index) const;

    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;

private:

};

3、DateDelegate类

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

class DateDelegate : public QItemDelegate
{
    Q_OBJECT

public:
    DateDelegate(QObject *parent = nullptr);
   ~DateDelegate();

    //返回改变Model数据的widget,该widget是经过定制行为的Widget
    QWidget *createEditor(QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const;

    //将可操作的数据提供给widget
    void setEditorData(QWidget * editor, const QModelIndex & index) const;
    
    //将widget的数据展示到Item中
    void setModelData(QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const;  

    //确保widget能够正确显示到view中
    void updateEditorGeometry(QWidget * editor, const QStyleOptionViewItem & option, const QModelIndex & index) const;
private:

};

♻️ 资源

在这里插入图片描述

大小: 3.93MB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87248433

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/92462.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于java+springmvc+mybatis+vue+mysql的少儿编程管理系统

项目介绍 在国家重视教育影响下&#xff0c;教育部门的密确配合下&#xff0c;对教育进行改革、多样性、质量等等的要求&#xff0c;使教育系统的管理和运营比过去十年前更加理性化。依照这一现实为基础&#xff0c;设计一个快捷而又方便的网上少儿编程教育网站系统是一项十分…

原来这就是BFC,遇到样式问题别瞎搞了

看到一篇前端面试题&#xff0c;第一个问题是 什么是BFC &#xff1f;&#xff0c;一下子唤起了我的辛酸回忆&#xff0c;那是在七月&#xff0c;在沪漂找工作的路上&#xff0c;预约的一个电话面试&#xff0c;眼看着时间就要到了&#xff0c;人生第一次进星巴克&#xff0c;提…

leetcode 337. 打家劫舍 III-[python3图解]-递归+记忆化搜索

题目 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口&#xff0c;我们称之为root。除了root之外&#xff0c;每栋房子有且只有一个“父“房子与之相连。一番侦察之后&#xff0c;聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连…

【Python百日进阶-数据分析】Day130 - plotly柱状图(条形图):go.bar()实例1

文章目录4.2 plotly.graph_objects条形图4.2.1 go的基本条形图4.2.2 分组条形图4.2.3 堆叠条形图4.2.4 带悬停文本的条形图4.2.5 带直接文本标签的条形图4.2.6 使用uniformtext控制文本大小4.2.7 旋转条形图标签4.2.8 自定义单个条颜色4.2.9 自定义单个条的宽度4.2.10 自定义单…

NetInside网络分析为企业IT工作保驾护航(二)

前言 某企业的DMS经销商在线系统&#xff0c;最近一段时间运维人员经常接到反馈&#xff0c;DMS使用出现大量访问慢的情况,针对此情况进行监测分析。 该企业已部署NetInside流量分析系统&#xff0c;使用流量分析系统提供实时和历史原始流量&#xff0c;重点针对DMS系统性能进…

MobileNetV3基于NNI剪枝操作

NNI剪枝入门可参考&#xff1a;nni模型剪枝_benben044的博客-CSDN博客_nni 模型剪枝 1、背景 本文的剪枝操作针对CenterNet算法的BackBone&#xff0c;即MobileNetV3算法。 该Backbone最后的输出格式如下&#xff1a; 假如out model(x)&#xff0c;则x[-1][hm]可获得heatma…

Spring框架04(Spring框架中AOP)

一、spring中bean的生命周期 1.singleton 容器启动的时候创建对象&#xff0c;容器正常关闭时销毁对象 2.prototype 获取对象的时候创建对象&#xff0c;spring容器不负责对象的销毁 生命周期的过程&#xff1a; 1.调用无参创建对象 2.调用set方法初始化属性 3.调用初始化…

知识付费系统源码,可直接打包成app、H5、小程序

知识付费&#xff0c;在近几年来&#xff0c;越来越受到大家的关注。知识付费系统源码是将知识通过互联网渠道变现的方式。以知识为载体&#xff0c;通过付费获得在线知识以及在线学习所带来的收益。知识付费平台主要以分享知识内容&#xff0c;内容分为直播、录播、图文等形式…

【从零开始学爬虫】采集收视率排行数据

l 采集网站 ​【场景描述】采集收视率排行数据。 【源网站介绍】收视率排行网提供收视率排行,收视率查询,电视剧收视率,综艺节目收视率和电视台收视率信息。 【使用工具】前嗅ForeSpider数据采集系统 【入口网址】http://www.tvtv.hk/archives/category/tv 【采集内容】 …

产线工控安全

场景描述 互联网飞速发展&#xff0c;工业4.0的大力推行&#xff0c;让工控产线更加智能化&#xff0c;生产网已经发展成一个组网的计算机环境。这些工控产线组网中的所有工控设备现在统称为主机。 信息化虽然提高各大企业的生产效率&#xff0c;但也会遭遇各类安全问题&…

Problem B: 算法10-15~10-17:基数排序

Problem Description 基数排序是一种并不基于关键字间比较和移动操作的排序算法。基数排序是一种借助多关键字排序的思想对单逻辑关键字进行排序的方法。 通过对每一个关键字分别依次进行排序&#xff0c;可以令整个关键字序列得到完整的排序。而采用静态链表存储记录&#xf…

FAST-LIO论文阅读

1. 摘要 本文提出一个开销较小且鲁棒的激光惯性里程计框架。使用迭代扩展卡尔曼滤波器来实现激光雷达特征点和IMU的紧耦合&#xff0c;可以在快速运动、有噪声或重复纹理等退化环境中鲁棒地定位。为了在测量数据量很大的情况下降低开销&#xff0c;提出了计算卡尔曼增益的新公…

如何做电商运营

电商是通过电子设备和网络技术进行的商业模式&#xff0c;通俗的来说也就是通过网络结识买家完成最终交易。电子商务凭借它便宜&#xff0c;丰富和方便的特性&#xff0c;迅速占领了中国一大半的经济市场&#xff0c;作为个人怎么才能做好电商呢&#xff1f;掌握这几个要点就不…

物联网开发笔记(63)- 使用Micropython开发ESP32开发板之控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程:显示中文

一、目的 这一节我们学习如何使用我们的ESP32开发板来控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程的第一步&#xff1a;显示中文。 二、环境 ESP32 3.2寸 ILI9341触摸屏 Thonny IDE 几根杜邦线 Win10 接线方法&#xff1a;请看上一篇文章。 三、流程介绍 …

Verilog刷题HDLBits——Conwaylife

Verilog刷题HDLBits——Conwaylife题目描述代码结果题目描述 Conway’s Game of Life is a two-dimensional cellular automaton. The “game” is played on a two-dimensional grid of cells, where each cell is either 1 (alive) or 0 (dead). At each time step, each c…

【图像融合】小波变换(加权平均法+局域能量+区域方差匹配)图像融合【含Matlab源码 1819期】

⛄一、小波变换彩色图像融合简介 1 前言 图像融合是将不同传感器所获得的多个图像根据某种算法进行融合处理,取长补短,使一幅图像能够更清楚、更准确地反映多幅图像的信息,多聚焦彩色图像融合是图像融合的一个分支。目前在各种图像采集与分析系统中已使用的CCD数码相机,对于聚…

分享7 个VUE项目用得上的JavaScript库

借助开源库加速VUE项目的开发进度是现代前端开发比较常见的方式&#xff0c;平常收集一些JavaScript库介绍&#xff0c;在遇到需要的时候可以信手拈来。 VUE 生态有很多不错的依赖库或者组件&#xff0c;是使用VUE开发前端的原因之一。 1. vueuse 这是 GitHub 上星最多的库之…

【coarse-to-fine:基于频谱和空间损失约束】

UPanGAN: Unsupervised pansharpening based on the spectral and spatial loss constrained Generative Adversarial Network &#xff08;UPanGAN&#xff1a;基于频谱和空间损失约束的生成式对抗网络的无监督全色锐化&#xff09; 研究发现&#xff0c;在大多数基于神经网…

扎根底层核心技术:OPPO发布旗舰蓝牙音频SoC芯片

OPPO自研芯片能力更进一步。 2022年12月14日&#xff0c;OPPO发布自研芯片马里亚纳MariSilicon Y&#xff0c;作为一颗旗舰蓝牙音频SoC&#xff0c;实现了三大核心技术突破&#xff0c;使OPPO具备了计算连接能力的蓝牙SoC平台的设计能力。 这是OPPO发布的第二款自研芯片。去年…

初学者数据分析——Python职位全链路分析

最近在做Python职位分析的项目&#xff0c;做这件事的背景是因为接触Python这么久&#xff0c;还没有对Python职位有一个全貌的了解。所以想通过本次分析了解Python相关的职位有哪些、在不同城市的需求量有何差异、薪资怎么样以及对工作经验有什么要求等等。分析的链路包括&…