国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

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

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

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

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

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

1 Qt的特點(diǎn)

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

2 系統(tǒng)功能

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

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

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

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

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

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

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

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

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

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

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

單擊“保存”按鈕實(shí)現(xiàn)學(xué)生信息的添加并保存于student.txt磁盤文件中,并在InputDialog界面清空掉前一次所輸入信息。在“保存”按鈕的click信號(hào)函數(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");? ?//文件對(duì)象,保存學(xué)生信息

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

{return ;}

QTextStream out(&file);//使用輸出流對(duì)象寫學(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信號(hào)函數(shù)上添加槽函數(shù),實(shí)現(xiàn)主界面到EditDialog界面類的切換。在editDialog界面(如圖3)中,可以瀏覽所有學(xué)生的信息,同時(shí)實(shí)現(xiàn)了學(xué)生信息的查詢,刪除,修改等功能。在editDialog頁(yè)面中插入QTableView表格控件實(shí)現(xiàn)學(xué)生信息的瀏覽顯示,使用QTableView顯示數(shù)據(jù)需要通過ui→tableView→setModel()方法將表格對(duì)象tableView與QStandardItemModel類對(duì)象stu_model進(jìn)行關(guān)聯(lián),另外再在EditDialog類中定義QListstu_list成員變量來(lái)存放從文件中讀取到的所有學(xué)生信息,再將stu_list中的學(xué)生信息通過循環(huán)逐條置于stu_model中,從而實(shí)現(xiàn)在與stu_model關(guān)聯(lián)的表格對(duì)象tableView中顯示學(xué)生信息。為實(shí)現(xiàn)頁(yè)面進(jìn)入editDialog頁(yè)面時(shí)就能瀏覽所有學(xué)生的信息,因此上面所述瀏覽學(xué)生信息功能在EditDialog類的構(gòu)造函數(shù)中進(jìn)行實(shí)現(xiàn)。

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

在圖3的QComBox下拉列表控件中添加各分類查詢項(xiàng),在其后添加QTextEdit控件以用于輸入查詢內(nèi)容,再在“查詢”按鈕的click信號(hào)函數(shù)上添加on_searchButton_clicked()槽函數(shù)實(shí)現(xiàn)分類模糊查詢功能。在實(shí)現(xiàn)分類模糊查詢時(shí),首先將stu_Model中的數(shù)據(jù)清除,再通過ui→findcomboBox→currentIndex()獲取當(dāng)前查詢選項(xiàng),由于在初始化圖3界面時(shí),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中并自動(dòng)關(guān)聯(lián)到tableView對(duì)象中再以表格形式顯示,以作為查詢結(jié)果

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

row++;

}}

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

刪除功能的實(shí)現(xiàn)不但在界面的顯示上需要?jiǎng)h除,而且在確認(rèn)刪除后,student.txt文件中的相應(yīng)內(nèi)容也需要?jiǎng)h除。代碼實(shí)現(xiàn)時(shí),首先通過ui→tableView→currentIndex().row()獲取要?jiǎng)h除的行,通過QMessageBox::information()函數(shù)彈出一個(gè)確認(rèn)刪除信息提示框,通過選擇yes或no進(jìn)行確認(rèn)或取消刪除,若返回值與QMessageBox::Yes相等表示確認(rèn)刪除,則需要將stu_model中的該條記錄用removeRow(index)刪除,同時(shí)把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="確定要?jiǎng)h除 "+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表格中的某條記錄的某條字段,該字段將會(huì)呈可編輯狀態(tài),從而可以修改某條記錄的相關(guān)字段的內(nèi)容,在代碼實(shí)現(xiàn)時(shí),本文用oldStr來(lái)保存修改前的記錄字符串,用newStr來(lái)保存修改后的記錄字符串,由于總分值是由三門課程求和所得,若在未修改各科成績(jī)的情況下,總分是不能手動(dòng)修改,即總分始終保持為三科成績(jī)之和,所以用newStr2來(lái)記錄重新計(jì)算了總成績(jī)的記錄字符串。當(dāng)單擊“修改”按鈕,若oldStr不同于newStr時(shí)彈出“確認(rèn)修改”對(duì)話框,否則不彈出。若確認(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()+" ";//包含總成績(jī)

if(col<7) newStr2+=stu_model→item(row,col)→text()+" ";//不包含總成績(jī)

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é)束語(yǔ)

本系統(tǒng)通過使用Qt應(yīng)用框架呈現(xiàn)出人機(jī)交互界面,采用QTextStrea流對(duì)象實(shí)現(xiàn)對(duì)QFile對(duì)象所關(guān)聯(lián)的文件進(jìn)行讀寫操作,采用Qt信號(hào)槽機(jī)制實(shí)現(xiàn)學(xué)生記錄的增,刪,改,查等功能。本程序是在學(xué)習(xí)完C++程序設(shè)計(jì)這門課程后的一個(gè)集繼承、圖形界面、事件處理等面向?qū)ο缶幊讨R(shí)的綜合應(yīng)用的實(shí)例程序,對(duì)于初學(xué)者來(lái)說,能更好地培養(yǎng)面向?qū)ο缶幊趟季S及編程興趣,便于理解及掌握,并且對(duì)《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語(yǔ)言的學(xué)生成績(jī)管理系統(tǒng)的實(shí)現(xiàn)[J].武漢職業(yè)技術(shù)學(xué)院學(xué)報(bào),2017(4):36-39.

[4] 張會(huì). 基于Java的記事本程序的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(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)用
廣西電力(2016年4期)2016-07-10 10:23:38
基于C/S架構(gòu)的醫(yī)院信息管理系統(tǒng)的研究與實(shí)現(xiàn)
高速公路排隊(duì)預(yù)警信息管理系統(tǒng)
基于Web的高職學(xué)生信息管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
海丰县| 正宁县| 酉阳| 太保市| 鹤山市| 安吉县| 潮安县| 印江| 宜都市| 佳木斯市| 阿拉善盟| 石首市| 萨迦县| 镶黄旗| 乾安县| 淄博市| 景德镇市| 常宁市| 南充市| 钟祥市| 晋江市| 甘南县| 抚远县| 清水河县| 垣曲县| 太仆寺旗| 紫云| 汶上县| 嘉兴市| 满洲里市| 北海市| 偏关县| 扶绥县| 化德县| 莱阳市| 正定县| 珠海市| 红安县| 怀化市| 修文县| 且末县|