zoukankan      html  css  js  c++  java
  • 学生管理系统(1:添加学生信息界面)

    源码上传至:https://github.com/data1213/QT_Studnt_Manager

    添加学生信息界面:

    添加学生实现代码:

    需求:

    1、点击确定按钮时,能够获取当前界面的所有控件的输入信息,在一个新的确认信息界面进行显式,等待确认。

    2、在确认界面中,确认ok,点击确定按钮能够将学生信息写入到文件中保存起来,同时,将添加学生信息的界面恢复到初始值状态。

     1 /*********addstudents.h********/
     2 #ifndef ADDSTUDENTS_H
     3 #define ADDSTUDENTS_H
     4 
     5 #include <QDialog>
     6 #include <QButtonGroup>
     7 
     8 namespace Ui {
     9 class AddStudents;
    10 }
    11 
    12 class AddStudents : public QDialog
    13 {
    14     Q_OBJECT
    15 
    16 public:
    17     explicit AddStudents(QWidget *parent = nullptr);
    18     ~AddStudents();
    19     void clear_on_addstudent_ok();      //确认界面点击确定之后,恢复添加学生信息界面的初始值
    20     void write_to_file(QString src);    //写文件
    21 
    22 private slots:
    23     void my_add_students_info_ok_slots();    //添加学生信息界面的确定按钮槽函数
    24     void my_add_students_info_cancel_slots();//添加学生信息界面的取消按钮槽函数
    25 private:
    26     QButtonGroup *sexGroup;     //存放性别单选按钮
    27     QButtonGroup *habbitGroup;  //存放爱好多选按钮
    28     Ui::AddStudents *ui;        //添加学生信息界面的UI
    29 };
    30 
    31 #endif // ADDSTUDENTS_H

    在addstudents.cpp中:

    1、首先看构造函数:

    1>需要绑定当前界面的按钮与槽函数,需要点击发送信号的有两个按钮:确定按钮+取消按钮

    2>对于性别一栏,两个单选按钮,是互斥的,只能选择其中一个,当一个被选中,那么另外一个一定是未选中状态。

    3>对于爱好一栏:四个选项是多选的,可以被同时选中、部分被选中、或者都不选。

    这里做些支持处理,使其具有单选功能/多选功能,编组——QButtionGroup

     1 AddStudents::AddStudents(QWidget *parent) :QDialog(parent),ui(new Ui::AddStudents)
     2 {
     3     ui->setupUi(this);
     4 
     5     //单选按钮放进组,多选按钮放进组
     6     sexGroup = new QButtonGroup(this);
     7     sexGroup->addButton(this->ui->rb_male,0);
     8     sexGroup->addButton(this->ui->rb_female,1);
     9     this->ui->rb_male->setChecked(true); //default
    10 
    11     habbitGroup = new QButtonGroup(this);
    12     habbitGroup->addButton(this->ui->cb_1,0);
    13     habbitGroup->addButton(this->ui->cb_2,1);
    14     habbitGroup->addButton(this->ui->cb_3,2);
    15     habbitGroup->addButton(this->ui->cb_4,3);
    16     // 设置不互斥
    17     habbitGroup->setExclusive(false);//这样的话就支持多选了。
    18 
    19     //连接“确认”按钮到槽函数
    20     connect(this->ui->btn_ok,SIGNAL(clicked()),this,SLOT(my_add_students_info_ok_slots()));
    21     //连接“取消”按钮到槽函数
    22     connect(this->ui->btn_cancel,SIGNAL(clicked()),this,SLOT(my_add_students_info_cancel_slots()));
    23 }

    点击确定按钮的槽函数:

    1>获取当前控件的信息,然后拼接成QString的字符串,

    2>由于要在确认界面中进行学生信息显式,所以用' '拼接,显式出来更加容易确认,但是这样的拼接不适用文件保存,文件保存的设计想法:一条学生记录,放在一行来完成。这样可以通过readline方法一次性获取。方便后续进行查询。

    3>QMessageBox窗口,作为确认界面,响应确定按钮的之后,实现写文件操作+恢复添加学生信息界面默认值,这里可以直接通过返回值类型标识点击的按钮,不用再绑定信号与槽

     1 void AddStudents::my_add_students_info_ok_slots(){
     2 
     3     QString context = "";  //context用来拼接当前界面所有控件的信息
     4 
     5     //获取姓名+学号
     6     QString name = this->ui->lineedit_name->text();
     7     QString id = this->ui->lineedit_id->text();
     8 
     9     context +=name+'
    '+id+'
    ';
    10 
    11     //获取年龄和院系
    12     QString age = this->ui->cb_age->currentText();
    13     QString sche = this->ui->cb_sche->currentText();
    14 
    15     context += age+'
    '+sche+'
    ';
    16 
    17     //获取性别
    18     QString sex = this->sexGroup->checkedButton()->text();
    19 
    20     context += sex+'
    ';
    21 
    22     //获取兴趣,遍历
    23     QList<QAbstractButton*> ins_list = habbitGroup->buttons();
    24     QString ins="";
    25     for(int i =0 ;i<ins_list.length();i++)
    26     {
    27         QAbstractButton *che = ins_list.at(i);
    28         if(che->isChecked())
    29             ins += che->text() + " ";
    30     }
    31     context += ins+'
    ';
    32     //检查当前是否姓名,学号,爱好都填写完毕
    33     if(context.length() != 0 && name != "" && id !="" && ins.length()!= 0){
    34         int res = QMessageBox::information(this,"请确认信息",context,"确认","取消");  //context用来显示在确认界面
    35         if(res == 0){              //点击确定
    36             //由于准备采用readline的方式来读取文件,所以不能是用'
    '来拼接字符串,换成' '符号来重新拼接
    37             QString src_s = name +' ' + id+' '+sex+' '+sche+' '+age+' '+ins+'
    ';
    38             write_to_file(src_s);
    39             //恢复添加界面属性值为初始值
    40             clear_on_addstudent_ok();
    41         }
    42     }else{  //当前是否姓名,学号,爱好有一项未填写就返回错误提示界面
    43 
    44         QMessageBox::critical(this,"请确认信息","信息不完整,请重新输入!","确认","取消");
    45         //重新设置光标位置。这里设置name对应的lineEdit控件获取光标
    46         this->ui->lineedit_name->setFocus();
    47     }
    48 }
     1 //当点击添加学生信息界面的确定之后,需要恢复当前界面的初始值,等待继续添加
     2 void AddStudents::clear_on_addstudent_ok(){
     3     //this->ui->lineedit_name->setText("");
     4     this->ui->lineedit_name->clear();
     5     this->ui->lineedit_id->clear();
     6 
     7     //对于sex的单选框,只需要设置默认为男性就好
     8     this->ui->rb_male->setChecked(true);
     9 
    10     //下拉菜单恢复设置
    11     this->ui->cb_age->setCurrentIndex(0);
    12     this->ui->cb_sche->setCurrentIndex(0);
    13 
    14     //多选框恢复到都未勾选状态
    15     QList<QAbstractButton*> ins_list = habbitGroup->buttons();
    16     QString ins;
    17     for(int i =0 ;i<ins_list.length();i++)
    18     {
    19         QAbstractButton *che = ins_list.at(i);
    20         che->setChecked(false);
    21     }
    22 
    23     //重新设置光标位置。这里设置name对应的lineEdit控件获取光标
    24     this->ui->lineedit_name->setFocus();
    25 }
    26 
    27 //保存添加学生信息界面的数据到文本
    28 void AddStudents::write_to_file(QString src){
    29     QFile file("stu.txt");
    30     if (!file.open(QIODevice::Append | QIODevice::Text)){
    31         QMessageBox::critical(this,"打开文件错误","确认");
    32         return;
    33     }
    34     QTextStream out(&file);
    35     out << src;
    36 }
    37 
    38 //取消按钮的槽函数
    39 void AddStudents::my_add_students_info_cancel_slots(){
    40     this->close();
    41 }

    进入添加学生信息界面:

    填写完整新增学生信息:

    确认界面:

    点击确认界面的确定之后,添加学生信息的界面恢复默认值:

    同时,在当前编译目录下,生成了stu.txt文本

    填写学生信息不完整时,弹出错误窗口:

     当前知识点:

    1> button编组

    2> Qfile文件读写

    3> QMessagBox窗口以及预定义四种窗口,以及自定义控件、返回值获取

    4>Grid layout布局

    5>设置光标位置

    内在的趣味,表面的繁琐
  • 相关阅读:
    Kafka原理与java simple producer示例
    【转载】kafka的工作原理
    Python 基本类型转换
    hadooop2.6 job pending research
    记一次zookeeper集群搭建错误的排除
    Apache Drill Install and Test
    Linux或Unix环境利用符号链接升级Maven
    Android之Linearlayouy线性布局
    Effective Java Second Edition --- Builder Pattern
    java生产者/消费者模式实现——一生产者一消费者(操作值)
  • 原文地址:https://www.cnblogs.com/data1213/p/10801774.html
Copyright © 2011-2022 走看看