Qt 简易学生管理系统实现增删改查排序io流等等

5 篇文章 0 订阅
2 篇文章 0 订阅

ui
在这里插入图片描述
像素感人
在这里插入图片描述
里面的保存 和打开文件都是用io流做的
代码放行使用
mainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QApplication>
#include <QTableWidget>
#include <QSplitter>
#include <QDialog>
#include <QFormLayout>
#include <QRadioButton>
#include <QComboBox>
#include <QSpinBox>
#include <QVBoxLayout>
#include <QFontDialog>
#include <QColorDialog>
#include <QStackedWidget>
#include <QQueue>
#include <QFile>
#include <QTextStream>
#include <QFileDialog>
#include <QMenu>
#include <QAction>
#include <QMouseEvent>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void funSave();
    void funOpen();
    void funMove();
    void funPlus();
private slots:
    void on_pushButton_3_clicked();
    void slotBtn();
    void on_pushButton_4_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_clicked();

    void on_pushButton_5_clicked();

    void on_pushButton_6_clicked();

    void on_pushButton_7_clicked();

    void on_pushButton_8_clicked();

    void on_action_1_triggered();

    void on_action_2_triggered();

    void on_tableWidget_cellDoubleClicked(int row, int column);

    void slotAction1();
    void slotAction2();
    void slotAction3();

private:
    Ui::MainWindow *ui;
    QTableWidget *tablewidget;
    QApplication *m;
    QMenu *menu;
    QAction *action1;
    QAction *action2;
    QAction *action3;
    QPushButton *btn;

    QVBoxLayout *vboxlayout;
    QFormLayout *formlayout;

    QLineEdit *line;
    QRadioButton *radio;
    QRadioButton *radio2;
    QComboBox *combox;
    QComboBox *combox2;
    QSpinBox *spinbox;
    QDialog *w;
    QTableWidgetItem *it;
    QTableWidgetItem *it1;
    QTableWidgetItem *it2;
    QTableWidgetItem *it3;
    QTableWidgetItem *it4;
    QTableWidgetItem *it5;
    QTableWidgetItem *it6;
    QStringList *stringlist;
    QString str;
    QStackedWidget *stackwidget;
    QQueue<QTableWidgetItem>*queeue;    // 存储学号的容器
    QQueue<QTableWidgetItem>*queeue2;   // 存储姓名的容器
    int row;    // 行
    int col;    // 列
    int id;     // 学号
};
#endif // MAINWINDOW_H

mainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
    ,row(0)
    ,col(0)
    ,id(1)
    ,queeue(new QQueue<QTableWidgetItem>)
    ,queeue2(new QQueue<QTableWidgetItem>)
    ,stackwidget(new QStackedWidget)
    ,stringlist(new QStringList)
{
    ui->setupUi(this);
    ui->tableWidget->setRowCount(999);
    ui->tableWidget->setColumnCount(6);
    QStringList ss;
    ss<<tr("学号")<<tr("姓名")<<tr("年龄")<<tr("性别")<<tr("所在院系")<<tr("入学时间");
    ui->tableWidget->setHorizontalHeaderLabels(ss);
    ui->centralwidget->setLayout(ui->horizontalLayout);

    menu = menuBar()->addMenu(tr("工具"));
    action1 = menu->addAction(tr("添加"),nullptr,nullptr,QKeySequence("Ctrl+F"));
    action2 = menu->addAction(tr("删除"),nullptr,nullptr,QKeySequence("Ctrl+D"));
    action3 = menu->addAction(tr("退出"),nullptr,nullptr,QKeySequence("Esc"));
    connect(action1,SIGNAL(triggered()),this,SLOT(slotAction1()));
    connect(action2,SIGNAL(triggered()),this,SLOT(slotAction2()));
    connect(action3,SIGNAL(triggered()),this,SLOT(slotAction3()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::funSave()
{
    QFile file("../TestStu/test.txt");
    if(!file.open(QIODevice::WriteOnly|QIODevice::Append)){ // QIODevice io流类
        qDebug()<<"打开文件失败";
        return;
    }
    QTextStream out(&file);
    out<<str;
//    str="";
    file.close();
}

void MainWindow::funOpen()
{
    QString is;
    QString iss;
        QString s = QFileDialog::getOpenFileName(
                    this,
                    "打开文件",
                    "/",
                    "Text 只查找(*.txt);;C++ 只查找(*.cpp);;C 只查找(*.h)"  // 这里是用. 别搞错成,了
                    );
        qDebug() << s;
        QFile file(s);
        if(!file.open(QIODevice::ReadWrite)) // QIODevice io流类
            qDebug()<<"打开文件失败";
        QTextStream in(&file);
        iss = in.readLine(); // 读取一行
        is = in.readAll(); // 读取所有
        //in>>is;   // 流文件只能流一段遇到空格就不流, 我也想过用while来流但是判断不想c++啊
        if(!is.isEmpty()){
            ui->textEdit->setText(iss+is);
        }
        file.close();
}

void MainWindow::funMove()
{
    if(ui->tableWidget->currentItem()){
        int n =0,m=0;
        int index = ui->tableWidget->currentRow();
        QTableWidgetItem *iter = ui->tableWidget->item(index,0);
        QString s = str.left(4); // 拿到左边的4个字符 也就是学号
        int size = str.size();
        for(int i = 0;i<=str.length();i++,n++){
            if(str[i] == "\n"){
                if(s == iter->text()){
                    str.remove(m,i);
                }
                else {
                    m = i+1;
                    s = str.mid(m,4);
                }
            }
        }
        if(str == "\n")
            str = "";
        qDebug()<<str;
        queeue->removeAt(ui->tableWidget->currentRow());
        queeue2->removeAt(ui->tableWidget->currentRow());
        ui->tableWidget->removeRow(ui->tableWidget->currentRow());
        row--;
        id--;
    }
}

void MainWindow::funPlus()
{
    w = new QDialog;
    vboxlayout = new QVBoxLayout;
    formlayout = new QFormLayout;

    line = new QLineEdit(w);
    radio = new QRadioButton(w);
    radio2 = new QRadioButton(w);
    combox = new QComboBox(w);
    combox2 = new QComboBox(w);
    spinbox = new QSpinBox(w);
    btn = new QPushButton(tr("确认"),w);
    line->setMaxLength(4);
    radio->setText(tr("男"));
    radio2->setText(tr("女"));
    radio->setChecked(true);
    spinbox->setValue(1);
    spinbox->setMinimum(0);
    spinbox->setMaximum(100);
    combox->addItem(tr("信工系"));
    combox->addItem(tr("旅游系"));
    combox->addItem(tr("建筑系"));
    combox->addItem(tr("艺术系"));
    combox->addItem(tr("机械系"));
    combox->addItem(tr("其它"));
    combox2->addItem(tr("17"));
    combox2->addItem(tr("18"));
    combox2->addItem(tr("19"));
    combox2->addItem(tr("20"));
    formlayout->addRow(tr("姓名:"),line);
    formlayout->addRow(tr("年龄:"),spinbox);
    formlayout->addRow(radio,radio2);
    formlayout->addRow(tr("所在院系:"),combox);
    formlayout->addRow(tr("入校时间"),combox2);

    vboxlayout->addLayout(formlayout);
    vboxlayout->addWidget(btn);
    w->setLayout(vboxlayout);

    connect(btn,SIGNAL(clicked()),this,SLOT(slotBtn()));
    w->show();
}

void MainWindow::on_pushButton_3_clicked()
{
    funPlus();
}

void MainWindow::slotBtn()  // 判断对话框 输入是否合法
{
    bool isbox = true;
    QString name = line->text();
    for(auto i = name.begin();i!=name.end();i++){
        if(*i>='0' && *i<='9')
            isbox=false;
        else if(*i>='A' && *i<='z')
            isbox=false;
        else if(*i==' ')
            isbox=false;
    }
    if(name.size()<2)
        isbox = false;
    else if(spinbox->value()<=0 ||spinbox->value()>100)
        isbox = false;

    if(isbox){
        QString s = combox2->currentText();
        s+="0"+s.number(id);
        QString spin = QString::number(spinbox->value());
        id++;
        ui->tableWidget->setItem(row,col,it = new QTableWidgetItem(s));  // 学号
        str+=it->text()+" ";
        stringlist->append(it->text());
        queeue->append(*it);
//        stackwidget->addWidget(ui->tableWidget);
        col++;
        ui->tableWidget->setItem(row,col,it1 = new QTableWidgetItem(line->text())); // 姓名
        str+=it1->text()+" ";
        queeue2->append(*it1);
        col++;
        ui->tableWidget->setItem(row,col,it2 = new QTableWidgetItem(spin)); // 年龄
        str+=it2->text()+" ";
        stringlist->append(it2->text());
        col++;
        if(radio->isChecked()){
            ui->tableWidget->setItem(row,col,it3 = new QTableWidgetItem(tr("男")));
            str+=it3->text()+" ";
            stringlist->append(it3->text());
        }
        else {
            ui->tableWidget->setItem(row,col,it4 = new QTableWidgetItem(tr("女")));
            str+=it4->text()+" ";
            stringlist->append(it4->text());
        }
        col++;
        ui->tableWidget->setItem(row,col,it5 = new QTableWidgetItem(combox->currentText())); // 院系
        str+=it5->text()+" ";
        stringlist->append(it5->text());
        col++;
        ui->tableWidget->setItem(row,col,it6 = new QTableWidgetItem(combox2->currentText()+"/9/1")); // 入校时间
        str+=it6->text()+"\n";
        stringlist->append(it6->text());
        row++;
        col=0;
        w->close();
    }
}

void MainWindow::on_pushButton_4_clicked() // 删除学生
{
    funMove();
}

void MainWindow::on_pushButton_2_clicked()  // 学号查找
{
    QString s = ui->lineEdit_2->text();
    int y=0,x = 0;
    if(ui->pushButton_2->isChecked()){
        for(auto i=queeue->begin();i!=queeue->end();i++){
            if(i->text() == s){
                i->setForeground(QBrush(Qt::red));
                i->setBackground(Qt::yellow);
                ui->tableWidget->setItem(y,x,new QTableWidgetItem(*i));
            }
            y++;
        }
    }
    else {
        for(auto i=queeue->begin();i!=queeue->end();i++){
            if(i->text() == s){
                i->setForeground(QBrush(Qt::black));
                i->setBackground(Qt::white);
                ui->tableWidget->setItem(y,x,new QTableWidgetItem(*i));
            }
            y++;
        }
    }
}

void MainWindow::on_pushButton_clicked()    //姓名查找
{
    QString s = ui->lineEdit->text();
    int y=0,x = 1;
    if(ui->pushButton->isChecked()){
        for(auto i=queeue2->begin();i!=queeue2->end();i++){
            if(i->text() == s){
                i->setForeground(QBrush(Qt::red));
                i->setBackground(Qt::yellow);
                ui->tableWidget->setItem(y,x,new QTableWidgetItem(*i));
            }
            y++;
        }
    }
    else {
        for(auto i=queeue2->begin();i!=queeue2->end();i++){
            if(i->text() == s){
                i->setForeground(QBrush(Qt::black));
                i->setBackground(Qt::white);
                ui->tableWidget->setItem(y,x,new QTableWidgetItem(*i));
            }
            y++;
        }
    }
}

void MainWindow::on_pushButton_5_clicked()  //  设置文字
{
    QFontDialog *fontdialog = new QFontDialog(this);
    if(QDialog::Accepted == fontdialog->exec())
        ui->tableWidget->setFont(fontdialog->currentFont());
}

void MainWindow::on_pushButton_6_clicked()  // 排序
{
    if(ui->pushButton_6->isChecked()){
        ui->pushButton->setDisabled(true);
        ui->pushButton_2->setDisabled(true);
        ui->tableWidget->sortByColumn(2, Qt::DescendingOrder);  // 升序

    }
    else {
        ui->pushButton->setDisabled(false);
        ui->pushButton_2->setDisabled(false);
        ui->tableWidget->sortByColumn(2,Qt::AscendingOrder); // 降序
    }
}

void MainWindow::on_pushButton_7_clicked() // 按钮保存
{
    funSave();
}

void MainWindow::on_pushButton_8_clicked() // 按钮打开
{
    funOpen();
}

void MainWindow::on_action_1_triggered() // 菜单保存文件
{
    funSave();
}

void MainWindow::on_action_2_triggered() // 菜单打开文件
{
    funOpen();
}

void MainWindow::slotAction1() // 添加
{
    funPlus();
}

void MainWindow::slotAction2() //  删除
{
    funMove();
}

void MainWindow::slotAction3() // 退出程序
{
    m->quit();
}

void MainWindow::on_tableWidget_cellDoubleClicked(int row, int column)
{
    menu->exec(cursor().pos()); // 双击打开菜单栏
}

main.cpp

#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值