Linux学生QT成绩查询系统大作业报告,GitHub - cxc1357/Student-Information-Manage-System: QT实现的学生信息管理系统,高程大作业...

学生信息管理系统

一、系统指南

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

5d0b8979ca592cdae9b4c42dccc34732.png

1、新建文件

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

2、打开文件

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

3、保存文件

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

4、增加

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

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

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

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

899f6d86532b6d46831ba014262936c0.png

0648efe4e5659129ee98187b315a4d37.png

5、删除

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

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

6、修改

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

ecd20cbec029b9f1e6e71f4729f845a6.png

12ac7a564142debc700d2002e77f0406.png

768955989194a76fa1d2d16583c69b10.png

7、搜索

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

684d1e40e8510585976edf72a211b5d5.png

b6159230fe988e74fe0d928f1d3558ac.png

a070cfa3f07232895055f554b4ef0ec7.png

8、排序

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

66db6d52e12061285df9e8cef32baf70.png

二、系统实现

本系统主要由三个继承类构成,一个是MianWindow类,它继承自QMainWindow类,是系统的主要部分,另外两个类为Delegate和DateDelegate类,它们都继承自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 *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:

};

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言学生成绩管理系统课程设计报告   学生成绩管理系统是为了管理上学期这门课的学习成绩而设计的。它具有查询和检 索功能,可以对指定的文件进行操作,也可以将多个文件组合成一个文件。a .设计内容   1.每份记录包括学生的学号、姓名、性别、各科成绩(上学期的科目)和平均成绩。   2.输入功能:   你可以一次输入几条记录。   3.显示功能:   完成所有学生记录的显示。   4.查找函数:   按姓名或学生编号完成学生记录的搜索并显示出来。   5.排序功能:   根据学生的平均分数。   6.插入功能:   按照学生编号的顺序插入学生记录。   7.将学生记录保存在学生档案中   8.应提供一个接口来调用每个函数。各功能的调用界面和操作界面应尽可能清晰美 观!b .设计要求   众所周知,有一个学生档案数据库存储着这个班学生的记录(包括学生编号、姓名、 学科成绩、性别等)。),并且所有学生都按照学生编号从小到大进行排序(文件是自己建 立的)。   它需要编程来实现查询、排序、插入和删除功能。具体要求如下:   A.需要显示以下界面* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1-a,设计内容   1.每份记录包括学生的学号、姓名、性别、各科成绩(上学期的科目)和平均成绩。   2.输入功能:   你可以一次输入几条记录。   3.显示功能:   完成所有学生记录的显示。   4.查找函数:   按姓名或学生编号完成学生记录的搜索并显示出来。   5.排序功能:   根据学生的平均分数。   6.插入功能:   按照学生编号的顺序插入学生记录。   7.将学生记录保存在学生档案中   8.应提供一个接口来调用每个函数。各功能的调用界面和操作界面应尽可能清晰美 观!b .设计要求   众所周知,有一个学生档案数据库存储着这个班学生的记录(包括学生编号、姓名、 学科成绩、性别等)。),并且所有学生都按照学生编号从小到大进行排序(文件是自己建 立的)。   它需要编程来实现查询、排序、插入和删除功能。具体要求如下:   A.需要显示以下界面* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1:按名称查询应采用顺序方式实现;根据查询结果实现查询结果小于m的学生;   找到学生并将学生的记录输出到屏幕上。如果找不到人,输出相关信息。如果你选 择2,你将根据你的成绩从上到下排列,你的名字和学生人数的顺序也将相应调整。如果 选择3,按照学生编号的顺序插入新的学生记录并将结果保存在学生文件中。如果选择4 ,删除指定学生的记录并将结果保存在学生文件中。例如,输入数据错误、文件操作错 误等。所有上述函数都被写入子函数,由主函数调用。利用结构数组实现学生成绩的数 据结构设计;   模块:   学生成绩管理系统查询模块排序模块显示模块保存模块删除模块插入模块结束显示 返回插入返回选择保存返回查询根据学生编号选择删除根据姓名选择删除返回主菜单根 据姓名查询排序根据成绩查询返回数学平均英语C语言健康教育返回计算机历史程序结构 图:   main:int标志=1;结构学生*头=空;head=load();do switch(menu())case"0": flag=0;休息;case ' 1 ' : search(head);休息;case ' 2 ' : port(head);休息;案例"3": head==NULL?head=插入(head):插入(head);拯救(头);休息;案例'- 根据查询结果实现查询结果小于m的学生;   找到学生并将学生的记录输出到屏幕上。如果找不到人,输出相关信息。如果你选 择2,你将根据你的成绩从上到下排列,你的名字和学生人数的顺序也将相应调整。如果 选择3,按照学生编号的顺序插入新的学生记录并将结果保存在学生文件中。如果选择4 ,删除指定学生的记录并将结果保存在学生文件中。例如,输入数据错误、文件操作错 误等。所有上述函数都被写入子函数,由主函数调用。利用结构数组实现学生成绩的数 据结构设计;   模块:   学生成绩管理系统查询模块排序模块显示模块保存模块删除模块插入模块结束显示 返回插入返回选择保存返回查询根据学生编号选择删除根据姓名选择删除返回主菜单根 据姓名查询排序根据成绩查询返回数学平均英语C语言健康教育返回计算机历史程序结构 图:   main:int标志=1;结构学生*头=空;head=load();do switch(menu())case"0": flag=0;休息;case ' 1 ' :
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值