C++实验11 基于Qt的学生管理系统

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

所使用的开发工具及环境:
PC机一套 Visual Studio 2010

实验要求:
1.硬件基本配置:Intel PentiumIII以上级别的CPU,大于64MB的内存。
2.软件要求:Window 2000操作系统,Visual Studio 6.0或更高版本开发环 境。
3.实验学时:2学时
4.实现实验内容中的题目。
5.写实验报告

实验目的:
1.学会学生管理系统

三、实验内容
editdialog.cpp

#include "editdialog.h"
#include "ui_editdialog.h"
#include<QFile>
#include<QTextStream>
#include<QDebug>
#include<QMessageBox>


EditDialog::EditDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::EditDialog)
{
    ui->setupUi(this);
    this->stu_model=new QStandardItemModel;
    stu_model->setHorizontalHeaderItem(0,new QStandardItem(QObject::tr("姓名")));
    stu_model->setHorizontalHeaderItem(1,new QStandardItem(QObject::tr("学号")));
    stu_model->setHorizontalHeaderItem(2,new QStandardItem(QObject::tr("性别")));
    stu_model->setHorizontalHeaderItem(3,new QStandardItem(QObject::tr("出生日期")));
    //stu_model->setHorizontalHeaderItem(4,new QStandardItem(QObject::tr("interest")));
    stu_model->setHorizontalHeaderItem(4,new QStandardItem("英语"));
    stu_model->setHorizontalHeaderItem(5,new QStandardItem("数学"));
    stu_model->setHorizontalHeaderItem(6,new QStandardItem("语文"));
    stu_model->setHorizontalHeaderItem(7,new QStandardItem("总分"));

    ui->tableView->setModel(stu_model);     //在UI界面中展示出输入的数据


/*
    ui->tableView->setColumnWidth(0,100);
    ui->tableView->setColumnWidth(1,100);
    ui->tableView->setColumnWidth(2,100);
    ui->tableView->setColumnWidth(3,150);
    ui->tableView->setColumnWidth(4,150);
*/
    QFile file("./student.txt");    //给出文件打开路径
    if(!file.open(QIODevice::ReadOnly|QIODevice::Text))     //设置文件打开方式为readonly只读
    {return ;}
    QTextStream in(&file);

    while(!in.atEnd())      //判断是否是文件末尾,当不是文件末尾时,执行while循环
    {   QString s=in.readLine();
        stu_list.append(s);     //在stu_list列表后面追加s

    }
    showStudent();      //调用showStudent函数
    file.close();       //关闭文件


}
void EditDialog::showStudent()
{
    int row=0;
   for(int line=0;line<stu_list.size();line++)      //for循环输出文件内容
    {
    QString s=stu_list[line];
    QStringList stus=s.split(' ');
    for(int i=0;i<stus.size();i++)
      stu_model->setItem(row,i,new QStandardItem(stus[i]));
   /* QString interst;
    for(int i=4;i<stus.size();i++)
        interst+=stus[i]+" ";
    stu_model->setItem(row,4,new QStandardItem(interst));
    */
    row++;
   }
}

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

void EditDialog::on_pushButton_clicked()        //定义on_pushButton_clicked函数
{
    int rows=stu_model->rowCount();
    for(int i=0;i<rows;i++)
    {
        stu_model->removeRow(0);
    }

    int index=ui->findcomboBox->currentIndex();
    QString inputFind=ui->searchEdit->text();       //searchEdit框中的内容赋值给inputFind,进行查找
    int row=0;
    for(int i=0;i<stu_list.size();i++)      //for循环,当syu_list.size()函数大于i时执行
    {
       QString s=stu_list[i];
       QStringList student=s.split(' ');        //s以‘ ’分隔
       if(index==0)
           if(inputFind!=student[0]) continue;      //如果student[0]不等于输入的需要查找的内容,跳出本次循环
       if(index==1)
             if(inputFind!=student[1]) continue;        //相似于if(inputFind!=student[0]) continue; 
       if(index==2)
             if(inputFind!=student[2]) continue;        //相似于if(inputFind!=student[0]) continue; 
       if(index==3)
             ui->searchEdit->setText("");

       for(int j=0;j<student.size();j++)        //for循环显示查找到的数据,直到全部显示
           stu_model->setItem(row,j,new QStandardItem(student[j]));
      /* QString interst;
       for(int j=4;j<student.size();j++)
           interst+=student[j]+" ";
       stu_model->setItem(row,4,new QStandardItem(interst));
       */
       row++;
    }
}

void EditDialog::on_delButton_clicked()     //定义on_delButton_clicked函数
{
    int index=ui->tableView->currentIndex().row();
//弹出窗口,询问确认是否删除
    if(QMessageBox::Yes==QMessageBox::information(this,"确认删除","确定要删除吗?",QMessageBox::Yes,QMessageBox::No))
   {    stu_model->removeRow(index);//界面中删除数据
        stu_list.removeAt(index);//删除stu_list列表该数据

        QFile file("./student.txt");
        if(!file.open(QIODevice::WriteOnly|QIODevice::Text))
        {return;}
        QTextStream out(&file);
        for(int i=0;i<stu_list.size();i++)//for循环保存修改
        {
            out<<stu_list[i]<<endl;//保存
        }
    }
}


void EditDialog::on_modifyButton_clicked()//定义on_modifyButton_clicked函数
{
    int row=ui->tableView->currentIndex().row();
    QString newStr,newStr2;
    double total=0;
    for(int col=0;col<8;col++)
    {
        newStr+=stu_model->item(row,col)->text()+" ";//包含总成绩
        if(col<7) newStr2+=stu_model->item(row,col)->text()+" ";//不包含总成绩
        if(col>=4&&col<7)
        {  QString scoreStr=stu_model->item(row,col)->text().trimmed();//使表格里的数据同步改变
           double score=scoreStr.toDouble();
           total+=score;
        }
    }
    qDebug()<<"total:"<<total;
    QString totalStr=QString::number(total,'f',2);
    newStr2+=totalStr;
    qDebug()<<"newStr2:"<<newStr2;
    qDebug()<<"newStr:"<<newStr;
    QString oldStr=stu_list[row];
    qDebug()<<"oldStr:"<<oldStr;
    if(oldStr.trimmed()!=newStr.trimmed())//if判断是否有新的数据,如果有,执行if语句
        if(QMessageBox::Yes==QMessageBox::information(this,"确认修改","确认要修改?",QMessageBox::Yes,QMessageBox::No))
        {   stu_list.removeAt(row);//移除原来的数据
            stu_list.insert(row,newStr2);//在移除数据的位置插入新的数据
            QFile file("./stuent.txt");
            if(!file.open(QIODevice::WriteOnly|QIODevice::Text))
            {return ;}
            QTextStream out(&file);
            for(int i=0;i<stu_list.size();i++)//for循环保存文件
                out<<stu_list[i]<<endl;
            file.close();
            stu_model->setItem(row,7,new QStandardItem(totalStr));
        }else
        {
            QStringList stus=oldStr.split(' ');//将' '作为分隔符
            for(int col=0;col<8;col++)//for循环显示数据
                stu_model->setItem(row,col,new QStandardItem(stus[col]));
          /*  QString interst;
            for(int col=4;col<stus.size();col++)
                interst+=stus[col]+" ";
            stu_model->setItem(row,4,new QStandardItem(interst));
           */
        }
}


void EditDialog::on_exitButton_clicked()//定义on_exitButton_clicked函数
{
    close();//关闭文件
}

inputdialog.cpp

#include "inputdialog.h"
#include "ui_inputdialog.h"
#include<QDebug>
#include<QFile>
#include<QTextStream>

InputDialog::InputDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::InputDialog)
{
    ui->setupUi(this);
}

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

void InputDialog::on_saveButton_clicked()//定义on_saveButton_clicked()函数
{
   QString name=ui->nameEdit->text();//从UI界面中获取nameEdit文本并赋值给name变量
   QString id=ui->idEdit->text();
   QString sex=ui->sexGroup->checkedButton()->text();
   QString birthday=ui->birthdaydateEdit->text();
   QString english=ui->englishEdit->text();
   QString math=ui->mathEdit->text();
   QString chinese=ui->chineseEdit->text();//从UI界面中获取ChineseEdit文本并复制给Chinese

   double total;
   total=english.toDouble()+math.toDouble()+chinese.toDouble();//用.toDouble()函数将成绩转换为double型
   QString totalStr=QString::number(total,'f',2);
   /*获得多选按钮被选中的按钮
   QString interest;
   QList<QAbstractButton *> ins=ui->interestGroup->buttons();
   for(int i=0;i<ins.size();i++)
       if(ins[i]->isChecked()) interest+=ins[i]->text()+" ";
    */
   QFile file("./student.txt");
   if(!file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Append))//打开方式为writeonly只写
   {return ;}
   QTextStream out(&file);
   out<<name<<" "<<id<<" "<<sex<<" "<<birthday<<" "<<english<<" "<<math<<" "<<chinese<<" "<<totalStr<<endl;//将数据输入到文件中
   file.close();//关闭文件

   ui->nameEdit->clear();//清空nameEdit框中的内容
   ui->idEdit->clear();
   ui->boyradioButton->setChecked(true);//设置boyradioButton多选按钮默认选项为true
   ui->girlradioButton->setChecked(false);
  /* 将多选按钮设置为不选状态
     for(int i=0;i<ins.size();i++)
       ins[i]->setChecked(false);
  */

    /*QString birthday=ui->birthdaydateEdit->text();
    QString name=ui->nameEdit->text();
    QString id=ui->idEdit->text();
    QString sex=ui->sexGroup->checkedButton()->text();
    QString interest;
    QList<QAbstractButton*> ins=ui->interestGroup->buttons();
    for(int i=0;i<ins.size();i++)
      if(ins[i]->isChecked())interest+=ins[i]->text()+" ";

    QFile file("./studentinfo.txt");
    if(!file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Append))
    {return ;}
    QTextStream out(&file);
    out<<name<<" "<<id<<" "<<sex<<" "<<birthday<<" "<<interest.trimmed()<<endl;
    file.close();
    ui->nameEdit->clear();
    ui->idEdit->clear();
    ui->boyradioButton->setChecked(true);
    ui->girlradioButton->setChecked(false);
    for(int i=0;i<ins.size();i++)
        ins[i]->setChecked(false);
        */
}

void InputDialog::on_quitButton_clicked()
{
    close();//退出
}

Main.cpp
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();//调用show()函数

    return a.exec();
}

Mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "inputdialog.h"
#include "editdialog.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);//setupUI()函数将程序与UI界面联系起来
}

MainWindow::~MainWindow()//析构函数MainWindow(),删除内存释放资源
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()//定义on_pushButton_clicked()函数
{
    InputDialog d;
    d.exec();//显示一个inputDialog对话框
}

void MainWindow::on_pushButton_2_clicked()
{
    EditDialog d;
    d.exec();
}

猜你喜欢

转载自blog.csdn.net/qq_44621510/article/details/94338035