版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄TOC\o"1-5"\h\z一.項(xiàng)目概述1二.項(xiàng)目需求分析1三.項(xiàng)目概要設(shè)計(jì)1四.項(xiàng)目詳細(xì)設(shè)計(jì)2五.測(cè)試分析5六.專(zhuān)業(yè)實(shí)習(xí)心得體會(huì)8#本課題設(shè)計(jì)始于2015年10月26日,并于12月11日完成。本次設(shè)計(jì)的主要目的是通過(guò)http網(wǎng)絡(luò)文件的下載,學(xué)習(xí)界面開(kāi)發(fā)工具QT的使用和熟練使用C++語(yǔ)言來(lái)編寫(xiě)程序開(kāi)發(fā)應(yīng)用,了解相關(guān)網(wǎng)絡(luò)協(xié)議,提高實(shí)際應(yīng)用系統(tǒng)開(kāi)發(fā)的能力。開(kāi)發(fā)實(shí)際應(yīng)用時(shí),需要對(duì)應(yīng)用所需具備的基本功能進(jìn)行分析(即需求分析),比如下載速度和文件大小的顯示等等,如此才能更好的提升用戶(hù)使用感。二.項(xiàng)目需求分析為了開(kāi)發(fā)出真正滿(mǎn)足用戶(hù)需求的產(chǎn)品,就必須了解用戶(hù)的需求。因此,我們需要使用需求分析來(lái)確定系統(tǒng)“必須完成哪些工作”,也就是對(duì)目標(biāo)產(chǎn)品提出完整、準(zhǔn)確、具體的要求。功能需求:使用QT界面開(kāi)發(fā)工具設(shè)計(jì)一個(gè)友好的客戶(hù)端界面,用戶(hù)能夠使用其下載各種類(lèi)型的http網(wǎng)絡(luò)文件。在下載之前,用戶(hù)將網(wǎng)絡(luò)鏈接給出即可獲取要下載的文件的總大小。在下載的過(guò)程中,用戶(hù)能夠了解文件的下載進(jìn)度和下載速度。可靠性和可用性需求:用戶(hù)可以使用該產(chǎn)品下載任意一種http網(wǎng)絡(luò)文件,下載下來(lái)的文件可以使用并不會(huì)出錯(cuò)。接口需求:“網(wǎng)絡(luò)文件下載鏈接必須放在‘鏈接地址'文本框中,下載文件總大小須放在'totalsize'文本框中,已下載文件大小須放在'readyread'文本框中,下載速度須放在‘speed'文本框中,下載過(guò)程中進(jìn)度條'progressbar'會(huì)進(jìn)行更新顯示”為用戶(hù)接口需求?!跋螺d的網(wǎng)絡(luò)文件必須以http://開(kāi)頭作為地址鏈接”為通信接口需求。約束:開(kāi)發(fā)必須使用linux系統(tǒng)下的界面開(kāi)發(fā)工具QT,并且開(kāi)發(fā)工具必須使用http協(xié)議作為通信協(xié)議來(lái)實(shí)現(xiàn)一個(gè)客戶(hù)端和服務(wù)端的請(qǐng)求和應(yīng)答。可以使用QT網(wǎng)絡(luò)模塊中提供的網(wǎng)絡(luò)訪問(wèn)接口來(lái)實(shí)現(xiàn)http編程。將來(lái)可能提出的要求:可支持?jǐn)帱c(diǎn)下載的功能。E-R圖:文件大小下載HTTP開(kāi)頭的鏈已下載文件大小下載界面下載速度網(wǎng)絡(luò)文件文件大小下載HTTP開(kāi)頭的鏈已下載文件大小下載界面下載速度網(wǎng)絡(luò)文件客戶(hù)端三.項(xiàng)目概要設(shè)計(jì)需求分析確定過(guò)后,就需要概要設(shè)計(jì)來(lái)確定系統(tǒng)“應(yīng)該怎么做”了。由此來(lái)確定系統(tǒng)的組成模塊及其相互之間的關(guān)系。系統(tǒng)設(shè)計(jì)階段:使用QT網(wǎng)絡(luò)模塊中的網(wǎng)絡(luò)訪問(wèn)接口來(lái)實(shí)現(xiàn)http編程。首先使用QNetworkRequest類(lèi)創(chuàng)建使用http協(xié)議的對(duì)象url并發(fā)送網(wǎng)絡(luò)請(qǐng)求,使用QNetworkAccessManager類(lèi)來(lái)協(xié)調(diào)網(wǎng)絡(luò)操作,同時(shí)可以使用QNetworkReply類(lèi)來(lái)監(jiān)聽(tīng)每一個(gè)應(yīng)答信號(hào)并觸發(fā)槽函數(shù)。即下載前發(fā)送請(qǐng)求,統(tǒng)一下載后獲取要下載的文件的總大小并顯示,此時(shí)進(jìn)度條隱藏;下載時(shí)獲取當(dāng)前已讀取的數(shù)據(jù)的大小并顯示,同時(shí)計(jì)算下載速度并更新進(jìn)度條;下載后刪除文件指針,隱藏進(jìn)度條,速度清零。結(jié)構(gòu)設(shè)計(jì)階段:QT客戶(hù)端界面,mainwindow.h頭文件,mainwindow.cpp界面設(shè)計(jì)內(nèi)容,main.cpp主函數(shù)。詳細(xì)設(shè)計(jì)需要具體提出實(shí)現(xiàn)系統(tǒng)功能的具體步驟。系統(tǒng)流程圖:開(kāi)始客戶(hù)端界面如下圖:(其中進(jìn)度條隱藏)頭文件mainwindow.h:classMainWindow:publicQMainWindow{Q_OBJECTpublic:explicitMainWindow(QWidget*parent=0);~MainWindow();voiddownloadFile(QUrlurl);//請(qǐng)求鏈接qint64getFileSize(QUrlurl,inttryTimes=3);voidupdateSpeed();privateslots:voidhttpFinished();//完成下載后的處理voidhttpReadyRead();//接收數(shù)據(jù)時(shí)的處理voidupdateDataReadProgress(qint64,qint64);//更新進(jìn)度條voidon_pushButton_clicked();//下載按鈕的單擊事件槽函數(shù)private:Ui::MainWindow*ui;QNetworkAccessManager*manager;QNetworkReply*reply;QUrlurl;//存儲(chǔ)網(wǎng)絡(luò)地址Q(chēng)File*file;//下載文件指針QStringerrorInfo;qint64totalsize,readysize1=0,readysize2=0;};獲取文件名并創(chuàng)建同名空文件:url=ui->lineEdit->text();//獲取界面輸入的url地址Q(chēng)FileInfoinfo(url.path());QStringfileName(info.fileName());//獲取文件名if(fileName.isEmpty())fileName="maomao.html";file=newQFile(fileName);//使用文件名創(chuàng)建一個(gè)同名空文件if(!file->open(QIODevice::WriteOnly)){//如果打開(kāi)文件失敗,則刪除file,是指針為0并返回qDebug()<<"fileopenerror";deletefile;file=0;return;}下載前獲取文件總大小getfilesize()函數(shù)://發(fā)出請(qǐng)求,獲取目標(biāo)地址的頭部信息QNetworkReply*reply=manager.head(QNetworkRequest(url));if(!reply)continue;connect(reply,SIGNAL(finished()),&loop,SLOT(quit()));loop.exec();if(reply->error()!=QNetworkReply::NoError){errorInfo=reply->errorString();continue;}QVariantvar=reply->header(QNetworkRequest::ContentLengthHeader);reply->deleteLater();size=var.toLongLong();Getfilesize()調(diào)用:totalsize=getFileSize(url);QStringsize=QString::number(totalsize/1024,10);ui->totalsizelineEdit->setText(size);更新速度updatespeed()函數(shù):qint64speed=readysize2-readysize1;//用已下載文件的大小之差來(lái)表示速度readysize1=readysize2;QStringreadyspeed=QString::number(speed/1024,10);ui->speedLineEdit->setText(readyspeed);Updatespeed()調(diào)用:readysize2=bytesRead;//獲取已下載文件的大小readsize=QString::number(bytesRead/1024);ui->readyreadlineEdit->setText(readsize);updateSpeed();更新進(jìn)度條:ui->progressBar->setMaximum(totalBytes);//讀取最大值ui->progressBar->setValue(bytesRead);//讀取當(dāng)前值關(guān)聯(lián)信號(hào)和槽://當(dāng)有新數(shù)據(jù)可以讀取時(shí)發(fā)送readyread()信號(hào),執(zhí)行httpreadyread()函數(shù)將新數(shù)據(jù)寫(xiě)入同名文件connect(reply,SIGNAL(readyRead()),this,SLOT(httpReadyRead()));//當(dāng)網(wǎng)絡(luò)請(qǐng)求的下載進(jìn)度更新時(shí)發(fā)送downloadprogress()信號(hào),執(zhí)行updateDataReadProgress()函數(shù)更新進(jìn)度條和下載速度connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(updateDataReadProgress(qint64,qint64)));//當(dāng)應(yīng)答處理結(jié)束時(shí)發(fā)送finished()信號(hào),執(zhí)行httpFinished()函數(shù)清空速度文本框,隱藏進(jìn)度條,刪除file指針connect(reply,SIGNAL(finished()),this,SLOT(httpFinished()));五.測(cè)試分析
文懊B輪輯舊童耆(V)工具⑴幫助(H)慈+凰打開(kāi)共享+刻錄耳下載反=?名稱(chēng)debugrelease修改日期2015/12/1113:122015/12/913:25文件矣文懊B輪輯舊童耆(V)工具⑴幫助(H)慈+凰打開(kāi)共享+刻錄耳下載反=?名稱(chēng)debugrelease修改日期2015/12/1113:122015/12/913:25文件矣「36OFreeAPSetup2015/12/1113江3應(yīng)用程序10,209KE怎庫(kù)陽(yáng)杲腥視w亙圖片茍迅雷下載Jf肓樂(lè)■計(jì)帥曲360sd_std_121⑥360se_setup@8155029倉(cāng)download雯□-U-U-U□■=〕instlinkMakefileMakefiIe.Release5ui_mainwindow2015/12/1113:0929,460KB2015/12/1112:2346,249KB2015/12/1111:11ChromeHTMLD...39KB2015/12/1111:19WinRAR壓縮文件0KB2015/12/1112:151049KB2015/12/1110:561KB2015/12/1022:5820KB2015/12/1022:58DEBUGS?件47KB2015/12/1022:58RELEASE文件47KB2015/12/920:54文件1KB2015/12/1113:03C++Headerfile8KB360FreeAP_Setup修改日期:2015/12/1113:13創(chuàng)建日期:2015/12/1113:10硏孑齷聞K小:9.96ME已站]項(xiàng)i■計(jì)已站]項(xiàng)f360FreeAP_Setup性常規(guī)]兼容性數(shù)宇簽名安全詳細(xì)信息以前的版本SFiOFrepAF_Setup文件類(lèi)型:應(yīng)用程序cexe)描述:3旳免費(fèi)肛虹安裝程序位置:C:''i.Ueere'i.Aiininiet「3.torIDesktop''i.duwnlo3.JI1大小:9.96MB(10?453?616宇節(jié)〕占用空間:9.97MB(10,457,088宇節(jié))創(chuàng)建時(shí)間:2015年12月11日,13:10:52修改時(shí)間:2015年12月11日,13:13:20訪問(wèn)時(shí)間:2015年12月11日,13:10:52屬性:只讀?隱藏?高級(jí)?…確定」取消應(yīng)用⑥六.專(zhuān)業(yè)實(shí)習(xí)心得體會(huì)王雪蘭:本次課題實(shí)驗(yàn)感覺(jué)難度比較大。首先是QT界面開(kāi)發(fā)工具的使用很不熟練,以前只用過(guò)delphi界面開(kāi)發(fā)工具,但是這次要求在linux系統(tǒng)下進(jìn)行界面設(shè)計(jì),所以選擇了QT。查了很多的資料,發(fā)現(xiàn)QT一般都用C++進(jìn)行開(kāi)發(fā),于是C++成了第二個(gè)難點(diǎn)。通過(guò)圖書(shū)館查閱資料對(duì)客戶(hù)端下載文件的基本功能實(shí)現(xiàn)有了認(rèn)識(shí),結(jié)果在編程的過(guò)程中遇到最多的問(wèn)題就是C++語(yǔ)言的使用不熟悉,比如數(shù)據(jù)類(lèi)型轉(zhuǎn)換將Qint64類(lèi)型轉(zhuǎn)換為QString類(lèi)型,QString::number();邊查資料和課本才慢慢適應(yīng)QT中C++的用法。然后就是文件能下載的時(shí)候發(fā)現(xiàn),無(wú)法在文件下載前就獲取到文件大小,只能下完才能獲取到。由于不能提前獲取到文件的總大小,導(dǎo)致即使獲取了文件當(dāng)前大小,進(jìn)度條無(wú)法顯示。于是就想通過(guò)manager.head(QNetworkRequest(url))獲取鏈接對(duì)應(yīng)的http頭部信息,然后用header(QNetworkRequest::ContentLengthHeader)從頭信息中獲取該文件的長(zhǎng)度并輸出,這樣進(jìn)度條也能顯示了。下載速度是通過(guò)下載文件的過(guò)程中,實(shí)時(shí)監(jiān)聽(tīng)讀取數(shù)據(jù),使用每次讀取數(shù)據(jù)后文件的大小與前一次相減,得到的差值就是文件的下載速度。這次實(shí)驗(yàn)雖然很難,但是最終仍然能夠順利完成真的很激動(dòng)。每次進(jìn)步一小步都能夠很激勵(lì)人心。實(shí)驗(yàn)過(guò)程中查閱了大量的資料和課本,感覺(jué)都沒(méi)有哪次做實(shí)驗(yàn)這么麻煩,各種信息在大腦中轉(zhuǎn),剛開(kāi)始也感覺(jué)沒(méi)有頭緒,很累,也自暴自棄。不過(guò)總是突然就想到解決的方法然后獲得成功和小進(jìn)步,最后就重拾信心了。在此,也要感謝同組小伙伴的合作和幫助!宋兵兵:本次主要是要在之前課程學(xué)習(xí)的基礎(chǔ)之上做一個(gè)在Linux下運(yùn)行的下載程序,這個(gè)程序是利用HTTP協(xié)議進(jìn)行數(shù)據(jù)傳輸?shù)某绦?,通過(guò)統(tǒng)一資源定位符URL進(jìn)行數(shù)據(jù)資源的獲取,功能涉及到文件總大小,下載速度,文件下載進(jìn)度,當(dāng)前已下載的文件大小等。本次試驗(yàn)是一個(gè)針對(duì)下載的程序,程序是用QT編寫(xiě)的,內(nèi)容包括了課程內(nèi)容所涉及的地方,如LINUX下的通信與數(shù)據(jù)傳輸之類(lèi)。在做數(shù)據(jù)傳輸時(shí)是利用QNetworkRequest實(shí)現(xiàn)功能的,通過(guò)readyread函數(shù)讀取數(shù)據(jù)然后進(jìn)行存儲(chǔ),數(shù)據(jù)傳輸結(jié)束發(fā)送finished信號(hào),在QT里利用connect將信號(hào)與槽進(jìn)行連接,實(shí)現(xiàn)信號(hào)觸發(fā)控制函數(shù)。在試驗(yàn)中出現(xiàn)了對(duì)數(shù)據(jù)轉(zhuǎn)換的錯(cuò)誤,從數(shù)據(jù)流獲取的數(shù)據(jù)不能傳遞給進(jìn)度條和lineedit顯示,后來(lái)了解到是通過(guò)totalsize=QStrin
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 峨眉山旅游股份有限公司2026年公開(kāi)招聘專(zhuān)業(yè)人才備考題庫(kù)含答案詳解
- 企業(yè)內(nèi)部控制制度建立與執(zhí)行手冊(cè)
- 市級(jí)機(jī)關(guān)文印服務(wù)中心2025年編外用工招聘?jìng)淇碱}庫(kù)及1套參考答案詳解
- 常寧市2025年第二批公開(kāi)選調(diào)事業(yè)單位工作人員備考題庫(kù)及1套參考答案詳解
- 2026年溫州商學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)及答案1套
- 2026年廣東科學(xué)技術(shù)職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)附答案
- 2026年電工知識(shí)考試題庫(kù)及參考答案
- 航空客運(yùn)服務(wù)流程與規(guī)范手冊(cè)(標(biāo)準(zhǔn)版)
- 廣東交通職業(yè)技術(shù)學(xué)院2025年公開(kāi)招聘工作人員備考題庫(kù)完整答案詳解
- 廣東省第二榮軍優(yōu)撫醫(yī)院2025年非編人員招聘?jìng)淇碱}庫(kù)及參考答案詳解1套
- 人工智能+靈活就業(yè)創(chuàng)新模式研究報(bào)告
- 冬季通信工程安全培訓(xùn)課件
- 板換式換熱器施工方案
- 福建省計(jì)算機(jī)專(zhuān)項(xiàng)考評(píng)員試題含答案
- 2025年中遠(yuǎn)海運(yùn)招聘1189人(含社招)筆試參考題庫(kù)附帶答案詳解
- (正式版)DB61∕T 1878-2024 《餐飲業(yè)油煙管道系統(tǒng)清洗規(guī)范》
- 水利水電工程單元工程施工質(zhì)量驗(yàn)收標(biāo)準(zhǔn) 第4部分:堤防與河道整治工程
- 青鳥(niǎo)纜式線型感溫火災(zāi)探測(cè)器JTW-LD-JBF4310施工指導(dǎo)及調(diào)試注意事項(xiàng)
- 譯林版新高一英語(yǔ)《語(yǔ)法填空》專(zhuān)項(xiàng)練習(xí)題匯編(含答案解析)
- 腎病尿檢知識(shí)培訓(xùn)課件
- 2025至2030中國(guó)水工金屬結(jié)構(gòu)行業(yè)發(fā)展趨勢(shì)分析與未來(lái)投資戰(zhàn)略咨詢(xún)研究報(bào)告
評(píng)論
0/150
提交評(píng)論