1. 程式人生 > >學生管理系統(1:添加學生信息界面)

學生管理系統(1:添加學生信息界面)

his esp dds 顯示 ins com 編譯 只需要 學生管理

源碼上傳至: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>由於要在確認界面中進行學生信息顯式,所以用‘\n‘拼接,顯式出來更加容易確認,但是這樣的拼接不適用文件保存,文件保存的設計想法:一條學生記錄,放在一行來完成。這樣可以通過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+\n+id+\n;
10 
11     //獲取年齡和院系
12     QString age = this->ui->cb_age->currentText();
13     QString sche = this->ui->cb_sche->currentText();
14 
15     context += age+\n+sche+\n;
16 
17     //獲取性別
18     QString sex = this->sexGroup->checkedButton()->text();
19 
20     context += sex+\n;
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+\n;
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的方式來讀取文件,所以不能是用‘\n‘來拼接字符串,換成‘ ‘符號來重新拼接
37             QString src_s = name +  + id+ +sex+ +sche+ +age+ +ins+\n;
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>設置光標位置

學生管理系統(1:添加學生信息界面)