學生管理系統(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>由於要在確認界面中進行學生信息顯式,所以用'\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>設置光標位置

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM