• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于QT的學(xué)生信息管理系統(tǒng)的實(shí)現(xiàn)

      2018-03-04 07:03張會
      電腦知識與技術(shù) 2018年36期
      關(guān)鍵詞:信息管理系統(tǒng)

      摘要:該文利用 Qt應(yīng)用框架,應(yīng)用Qt信號槽機(jī)制實(shí)現(xiàn)了一個學(xué)生信息管理系統(tǒng)。系統(tǒng)具有添加,修改,分類查詢,刪除,計(jì)算總分及退出等功能。學(xué)生成績管理系統(tǒng)是一個集繼承、圖形界面、事件處理等面向?qū)ο缶幊讨R的綜合應(yīng)用的實(shí)例程序。

      關(guān)鍵詞:Qt;C++;槽函數(shù);信息管理系統(tǒng)

      中圖分類號:TP311? ? ? ?文獻(xiàn)標(biāo)識碼:A? ? ? 文章編號:1009-3044(2018)36-0046-03

      大部分大學(xué)一年級學(xué)生初接觸到的是C/C++計(jì)算機(jī)編程語言,而用C/C++語言編寫界面程序時多在黑屏白字的application console下采用文字描述模擬菜單選擇,學(xué)生體驗(yàn)感及成就感較差。而初學(xué)者只有一定的C++面向?qū)ο缶幊袒A(chǔ),可以使用Qt輕松實(shí)現(xiàn)圖形界面編程。本文利用Qt圖形庫,采用 C++語法,在Qt Creator集成開發(fā)環(huán)境下,實(shí)現(xiàn)了一個基于Qt的學(xué)生成績管理系統(tǒng)。

      1 Qt的特點(diǎn)

      Qt被用于高性能的跨平臺軟件開發(fā),它是一個標(biāo)準(zhǔn)的技術(shù)成熟的C++框架,Qt不僅擁有擴(kuò)展的C++類庫,還提供了大量可用來快速編寫應(yīng)用程序的工具[1],Qt是采用C++實(shí)現(xiàn)的框架。Qt Creator是一款新的輕量級集成開發(fā)環(huán)境(IDE),IDE支持跨平臺運(yùn)行,支持的系統(tǒng)包括 Mac OS X 、Linux( 32 位及 64 位)以及Windows等系統(tǒng)。Qt Creator的設(shè)計(jì)目標(biāo)是方便開發(fā)人員利用Qt這個應(yīng)用程序框架更加快速、輕易地完成相關(guān)開發(fā)任務(wù)[2]。

      2 系統(tǒng)功能

      學(xué)生信息管理系統(tǒng)主要功能包括:學(xué)生基本信息和成績的錄入,瀏覽、查詢、刪除、修改及計(jì)算成績等功能。功能分析如下:

      1) 添加/輸入學(xué)生信息:輸入的學(xué)生信息包括學(xué)生姓名,學(xué)號,性別,出生日期,英語成績,語文成績,數(shù)學(xué)成績。

      2) 查詢學(xué)生信息:可以按姓名、學(xué)號、性別進(jìn)行分類查詢,及全部查詢,從而把所有學(xué)生記錄重新全部顯示出來。其中分類查詢支持模糊查詢,如按姓名查詢時可以把包括“張”字的多條學(xué)生記錄查詢出來。

      3) 計(jì)算總分功能:在輸入學(xué)生基本信息及各科成績后,系統(tǒng)自動計(jì)算各科成績總分。

      4) 修改功能:可以對學(xué)生的基本信息及各科成績進(jìn)行修改,并有提示確認(rèn)修改對話框。當(dāng)修改了學(xué)生的各科成績后,學(xué)生成績的總分自動重新計(jì)算并修改。當(dāng)各科成績未做改動時,修改其總分,總分不會有變化。

      5) 刪除功能:可以刪除選定學(xué)生記錄,并提示確認(rèn)刪除操作,若取消刪除操作,則不執(zhí)行刪除操作,若確定刪除,則實(shí)現(xiàn)學(xué)生記錄的刪除。

      3 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

      通過在Qt Creater環(huán)境中新建一個Qt Widgets Application應(yīng)用程序,并新建一個繼承于QMainWindow類的MainWindow窗口類,設(shè)計(jì)一個主界面,方便用戶添加學(xué)生信息,管理學(xué)生信息功能的選擇,其中管理學(xué)生信息包括了對學(xué)生信息的瀏覽,查詢,修改,刪除等功能,如圖1所示。

      3.1 添加學(xué)生信息功能

      通過單擊主界面中的“添加學(xué)生信息”按鈕,進(jìn)入圖2所示inputDialog界面。InputDialog界面類是在Qt Creator開發(fā)環(huán)境中界面文件下通過添加繼承于QDialog類自動生成。在Qt中為了能實(shí)現(xiàn)事件處理及界面跳轉(zhuǎn)可以通過對控件的信號函數(shù)添加槽函數(shù),當(dāng)單擊圖1的“添加學(xué)生信息”按鈕時,發(fā)出一個click信號,再在click信號函數(shù)上添加on_inputButton_clicked()槽函數(shù)來實(shí)現(xiàn)從主界面到添加學(xué)生信息界面的跳轉(zhuǎn)。

      在inputDialog界面中分別插入姓名,學(xué)號,性別,出生日期,英語,數(shù)學(xué),語文QLable標(biāo)簽控件。性別做成QRadioButton單選按鈕控件,出生日期對應(yīng)插入QDate Edit控件,用于避免輸入日期格式的不一致,在其他QLable標(biāo)簽后面插入QLineEdit單行文本框控件以實(shí)現(xiàn)各類學(xué)生信息數(shù)據(jù)的輸入,如圖2所示。

      單擊“保存”按鈕實(shí)現(xiàn)學(xué)生信息的添加并保存于student.txt磁盤文件中,并在InputDialog界面清空掉前一次所輸入信息。在“保存”按鈕的click信號函數(shù)上添加on_saveButton_clicked()槽函數(shù)實(shí)現(xiàn)學(xué)生信息保存功能。具體代碼如下:

      void InputDialog::on_saveButton_clicked()

      {QString name,id,sex,birthday,english,math,chinese;//暫存界面上錄入的信息

      QString name=ui→nameEdit→text();

      QString id=ui→idEdit→text();

      ……

      double total=english.toDouble()+math.toDouble()+chinese.toDouble();//計(jì)算總分

      QStringtotalStr=QString::number(total,'f',2);

      QFile file("./student.txt");? ?//文件對象,保存學(xué)生信息

      if(!file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Append))//追加打開文件

      {return ;}

      QTextStream out(&file);//使用輸出流對象寫學(xué)生數(shù)據(jù)入文件

      out<<name<<" "<<id<<" "<<sex<<" "<<birthday<<" "<<english<<" "<<math<<" "<<chinese<<" "<<totalStr<<endl;

      file.close();

      ui→nameEdit→clear();//保存完信息后,清除界面之前輸入的各類信息

      ……

      }

      3.2 學(xué)生信息管理功能

      在圖1 系統(tǒng)主界面中的“管理學(xué)生信息”按鈕上的click信號函數(shù)上添加槽函數(shù),實(shí)現(xiàn)主界面到EditDialog界面類的切換。在editDialog界面(如圖3)中,可以瀏覽所有學(xué)生的信息,同時實(shí)現(xiàn)了學(xué)生信息的查詢,刪除,修改等功能。在editDialog頁面中插入QTableView表格控件實(shí)現(xiàn)學(xué)生信息的瀏覽顯示,使用QTableView顯示數(shù)據(jù)需要通過ui→tableView→setModel()方法將表格對象tableView與QStandardItemModel類對象stu_model進(jìn)行關(guān)聯(lián),另外再在EditDialog類中定義QListstu_list成員變量來存放從文件中讀取到的所有學(xué)生信息,再將stu_list中的學(xué)生信息通過循環(huán)逐條置于stu_model中,從而實(shí)現(xiàn)在與stu_model關(guān)聯(lián)的表格對象tableView中顯示學(xué)生信息。為實(shí)現(xiàn)頁面進(jìn)入editDialog頁面時就能瀏覽所有學(xué)生的信息,因此上面所述瀏覽學(xué)生信息功能在EditDialog類的構(gòu)造函數(shù)中進(jìn)行實(shí)現(xiàn)。

      1) 查詢功能的實(shí)現(xiàn)

      在圖3的QComBox下拉列表控件中添加各分類查詢項(xiàng),在其后添加QTextEdit控件以用于輸入查詢內(nèi)容,再在“查詢”按鈕的click信號函數(shù)上添加on_searchButton_clicked()槽函數(shù)實(shí)現(xiàn)分類模糊查詢功能。在實(shí)現(xiàn)分類模糊查詢時,首先將stu_Model中的數(shù)據(jù)清除,再通過ui→findcomboBox→currentIndex()獲取當(dāng)前查詢選項(xiàng),由于在初始化圖3界面時,stu_list中存放著文件中所有學(xué)生記錄,因此把輸入的查詢內(nèi)容與stu_list中存放的學(xué)生信息按查詢字段進(jìn)行逐條比較,如果不同則continue略過本次循環(huán),否則把本條記錄重置于與表格關(guān)聯(lián)的stu_model中,以作為多條或單條查詢結(jié)果記錄顯示于tableView表格中。

      代碼如下:

      void EditDialog::on_searchButton_clicked()

      {

      int rows=stu_model→rowCount();

      for(int i=0;i<rows;i++)//將stu_Model中所有行的數(shù)據(jù)清除

      {? ? stu_model→removeRow(0);? }

      int index=ui→findcomboBox→currentIndex();//獲得分類查詢項(xiàng)的index值

      QStringinputFind=ui→searchEdit→text().trimmed();//獲得查詢內(nèi)容

      int row=0;

      for(int i=0;i<stu_list.size();i++)//將文件中滿足條件的學(xué)生信息重置于stu_model中

      {

      QString s=stu_list[i];

      QStringList student=s.split(' ');

      if(index==0)

      if(!student[0].contains(inputFind)) continue;//用contains()進(jìn)行模糊匹配

      if(index==1)

      if(!student[1].contains(inputFind)) continue;

      if(index==2)

      if(inputFind!=student[2]) continue;

      if(index==3)

      ui→searchEdit→setText("");

      for(int j=0;j<student.size();j++)//將查詢到的內(nèi)容置于stu_model中并自動關(guān)聯(lián)到tableView對象中再以表格形式顯示,以作為查詢結(jié)果

      stu_model→setItem(row,j,new QStandardItem(student[j]));

      row++;

      }}

      2) 刪除功能的實(shí)現(xiàn)

      刪除功能的實(shí)現(xiàn)不但在界面的顯示上需要刪除,而且在確認(rèn)刪除后,student.txt文件中的相應(yīng)內(nèi)容也需要刪除。代碼實(shí)現(xiàn)時,首先通過ui→tableView→currentIndex().row()獲取要刪除的行,通過QMessageBox::information()函數(shù)彈出一個確認(rèn)刪除信息提示框,通過選擇yes或no進(jìn)行確認(rèn)或取消刪除,若返回值與QMessageBox::Yes相等表示確認(rèn)刪除,則需要將stu_model中的該條記錄用removeRow(index)刪除,同時把stu_list中的該條記錄也移除,并把stu_list中的內(nèi)容重寫入文件,以保證文件內(nèi)容與界面上所顯示數(shù)據(jù)的一致性。

      代碼如下:

      void EditDialog::on_delButton_clicked()

      {

      int index=ui→tableView→currentIndex().row();

      QString s=stu_list[index];

      QStringList student=s.split(' ');

      QString info="確定要刪除 "+student[0]+" 嗎?";

      if(QMessageBox::Yes==QMessageBox::information(this,"確認(rèn)刪除",info,QMessageBox::Yes,QMessageBox::No))

      {? ? stu_model→removeRow(index);

      stu_list.removeAt(index);

      //重寫文件

      QFile file("./student.txt");

      if(!file.open(QIODevice::WriteOnly|QIODevice::Text))

      {return;}

      QTextStream out(&file);

      for(int i=0;i<stu_list.size();i++)

      { out<<stu_list[i]<<endl; }

      }}

      3) 修改功能的實(shí)現(xiàn)

      雙擊圖3表格中的某條記錄的某條字段,該字段將會呈可編輯狀態(tài),從而可以修改某條記錄的相關(guān)字段的內(nèi)容,在代碼實(shí)現(xiàn)時,本文用oldStr來保存修改前的記錄字符串,用newStr來保存修改后的記錄字符串,由于總分值是由三門課程求和所得,若在未修改各科成績的情況下,總分是不能手動修改,即總分始終保持為三科成績之和,所以用newStr2來記錄重新計(jì)算了總成績的記錄字符串。當(dāng)單擊“修改”按鈕,若oldStr不同于newStr時彈出“確認(rèn)修改”對話框,否則不彈出。若確認(rèn)修改,則把當(dāng)前修改的記錄首先從stu_list中刪除,再把newStr2插入到stu_list中修改記錄所在位置處,并將stu_list內(nèi)容重寫入文件,為保持文件內(nèi)容與系統(tǒng)界面顯示內(nèi)容一致,最后再把stu_model中的相應(yīng)記錄重置為修改后的數(shù)據(jù)。若取消修改,則把oldStr中的內(nèi)容重置于stu_model中,以把修改了的數(shù)據(jù)再還原為修改前的狀態(tài)。

      代碼如下:

      void EditDialog::on_modifyButton_clicked()

      {int row=ui→tableView→currentIndex().row();

      QStringnewStr,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)? //重新計(jì)算總分

      {? QStringscoreStr=stu_model→item(row,col)→text().trimmed();

      double score=scoreStr.toDouble();

      total+=score;

      }}

      QStringtotalStr=QString::number(total,'f',2);

      newStr2+=totalStr;//將計(jì)算了的總分加入newStr2串中

      QStringoldStr=stu_list[row];

      if(oldStr.trimmed()!=newStr.trimmed())

      {? ?if(QMessageBox::Yes==QMessageBox::information(this,"確認(rèn)修改","確認(rèn)要修改?",QMessageBox::Yes,QMessageBox::No))

      {? ?stu_list.removeAt(row);

      stu_list.insert(row,newStr2);

      ……//把stu_list中的內(nèi)容重寫入文件(同刪除功能中重寫文件),使文件內(nèi)容與修改后的內(nèi)容一致

      QStringListnewStr2List=newStr2.split(' ');

      for(int i=0;i<7;i++)

      { stu_model→setItem(row,i,new QStandardItem(newStr2List[i]));? ? ?}

      stu_model→setItem(row,7,new QStandardItem(totalStr));

      }else

      {? ?QStringListstus=oldStr.split(' ');

      for(int col=0;col<8;col++)

      stu_model→setItem(row,col,new QStandardItem(stus[col]));

      }}}

      4 結(jié)束語

      本系統(tǒng)通過使用Qt應(yīng)用框架呈現(xiàn)出人機(jī)交互界面,采用QTextStrea流對象實(shí)現(xiàn)對QFile對象所關(guān)聯(lián)的文件進(jìn)行讀寫操作,采用Qt信號槽機(jī)制實(shí)現(xiàn)學(xué)生記錄的增,刪,改,查等功能。本程序是在學(xué)習(xí)完C++程序設(shè)計(jì)這門課程后的一個集繼承、圖形界面、事件處理等面向?qū)ο缶幊讨R的綜合應(yīng)用的實(shí)例程序,對于初學(xué)者來說,能更好地培養(yǎng)面向?qū)ο缶幊趟季S及編程興趣,便于理解及掌握,并且對《C++程序設(shè)計(jì)》課程教學(xué)有一定的參考作用。

      參考文獻(xiàn):

      [1] MonteiroFR,GarciaMAP,CordeiroLC,etal.Boundedmodel checkingofC++ programsbasedon theQt cross-platformframework[J].SoftwareTestingVerification&Reliability,2017(5):179-180.

      [2] Saleem K,BellahseneZ,HuntE. PORSCHE: PerformanceOriented Schema mediation[J] .Information Systems, 2008,3378:637-657.

      [3] 彭莉.基于C語言的學(xué)生成績管理系統(tǒng)的實(shí)現(xiàn)[J].武漢職業(yè)技術(shù)學(xué)院學(xué)報,2017(4):36-39.

      [4] 張會. 基于Java的記事本程序的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識與技術(shù),2017(30):88-90.

      [通聯(lián)編輯:謝媛媛]

      猜你喜歡
      信息管理系統(tǒng)
      三維可視化信息管理系統(tǒng)在選煤生產(chǎn)中的應(yīng)用
      信息管理系統(tǒng)在工程項(xiàng)目管理的應(yīng)用
      基于三維TGIS的高速公路綜合信息管理系統(tǒng)
      SaaS模式下的房地產(chǎn)中介公司信息管理系統(tǒng)
      高速公路綠色通道信息管理系統(tǒng)開發(fā)與實(shí)踐
      信息管理系統(tǒng)在招標(biāo)代理工作中的應(yīng)用
      變電站“四遙”信息管理系統(tǒng)的開發(fā)與應(yīng)用
      基于C/S架構(gòu)的醫(yī)院信息管理系統(tǒng)的研究與實(shí)現(xiàn)
      高速公路排隊(duì)預(yù)警信息管理系統(tǒng)
      基于Web的高職學(xué)生信息管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
      大丰市| 萨迦县| 萨嘎县| 连云港市| 德格县| 中卫市| 进贤县| 玛沁县| 佛坪县| 甘南县| 黄平县| 柏乡县| 三明市| 安乡县| 卓尼县| 报价| 明水县| 胶州市| 南充市| 内丘县| 台江县| 和政县| 临湘市| 日土县| 邵东县| 彭山县| 陆丰市| 卓尼县| 土默特右旗| 凤城市| 来宾市| 凤翔县| 马山县| 苗栗县| 新密市| 弥勒县| 商城县| 神池县| 石家庄市| 水城县| 松滋市|