專業(yè)實(shí)習(xí)實(shí)驗(yàn)報(bào)告_第1頁
專業(yè)實(shí)習(xí)實(shí)驗(yàn)報(bào)告_第2頁
專業(yè)實(shí)習(xí)實(shí)驗(yàn)報(bào)告_第3頁
專業(yè)實(shí)習(xí)實(shí)驗(yàn)報(bào)告_第4頁
專業(yè)實(shí)習(xí)實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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六.專業(yè)實(shí)習(xí)心得體會(huì)8#本課題設(shè)計(jì)始于2015年10月26日,并于12月11日完成。本次設(shè)計(jì)的主要目的是通過http網(wǎng)絡(luò)文件的下載,學(xué)習(xí)界面開發(fā)工具QT的使用和熟練使用C++語言來編寫程序開發(fā)應(yīng)用,了解相關(guān)網(wǎng)絡(luò)協(xié)議,提高實(shí)際應(yīng)用系統(tǒng)開發(fā)的能力。開發(fā)實(shí)際應(yīng)用時(shí),需要對(duì)應(yīng)用所需具備的基本功能進(jìn)行分析(即需求分析),比如下載速度和文件大小的顯示等等,如此才能更好的提升用戶使用感。二.項(xiàng)目需求分析為了開發(fā)出真正滿足用戶需求的產(chǎn)品,就必須了解用戶的需求。因此,我們需要使用需求分析來確定系統(tǒng)“必須完成哪些工作”,也就是對(duì)目標(biāo)產(chǎn)品提出完整、準(zhǔn)確、具體的要求。功能需求:使用QT界面開發(fā)工具設(shè)計(jì)一個(gè)友好的客戶端界面,用戶能夠使用其下載各種類型的http網(wǎng)絡(luò)文件。在下載之前,用戶將網(wǎng)絡(luò)鏈接給出即可獲取要下載的文件的總大小。在下載的過程中,用戶能夠了解文件的下載進(jìn)度和下載速度??煽啃院涂捎眯孕枨螅河脩艨梢允褂迷摦a(chǎn)品下載任意一種http網(wǎng)絡(luò)文件,下載下來的文件可以使用并不會(huì)出錯(cuò)。接口需求:“網(wǎng)絡(luò)文件下載鏈接必須放在‘鏈接地址'文本框中,下載文件總大小須放在'totalsize'文本框中,已下載文件大小須放在'readyread'文本框中,下載速度須放在‘speed'文本框中,下載過程中進(jìn)度條'progressbar'會(huì)進(jìn)行更新顯示”為用戶接口需求。“下載的網(wǎng)絡(luò)文件必須以http://開頭作為地址鏈接”為通信接口需求。約束:開發(fā)必須使用linux系統(tǒng)下的界面開發(fā)工具QT,并且開發(fā)工具必須使用http協(xié)議作為通信協(xié)議來實(shí)現(xiàn)一個(gè)客戶端和服務(wù)端的請(qǐng)求和應(yīng)答??梢允褂肣T網(wǎng)絡(luò)模塊中提供的網(wǎng)絡(luò)訪問接口來實(shí)現(xiàn)http編程。將來可能提出的要求:可支持?jǐn)帱c(diǎn)下載的功能。E-R圖:文件大小下載HTTP開頭的鏈已下載文件大小下載界面下載速度網(wǎng)絡(luò)文件文件大小下載HTTP開頭的鏈已下載文件大小下載界面下載速度網(wǎng)絡(luò)文件客戶端三.項(xiàng)目概要設(shè)計(jì)需求分析確定過后,就需要概要設(shè)計(jì)來確定系統(tǒng)“應(yīng)該怎么做”了。由此來確定系統(tǒng)的組成模塊及其相互之間的關(guān)系。系統(tǒng)設(shè)計(jì)階段:使用QT網(wǎng)絡(luò)模塊中的網(wǎng)絡(luò)訪問接口來實(shí)現(xiàn)http編程。首先使用QNetworkRequest類創(chuàng)建使用http協(xié)議的對(duì)象url并發(fā)送網(wǎng)絡(luò)請(qǐng)求,使用QNetworkAccessManager類來協(xié)調(diào)網(wǎng)絡(luò)操作,同時(shí)可以使用QNetworkReply類來監(jiān)聽每一個(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客戶端界面,mainwindow.h頭文件,mainwindow.cpp界面設(shè)計(jì)內(nèi)容,main.cpp主函數(shù)。詳細(xì)設(shè)計(jì)需要具體提出實(shí)現(xiàn)系統(tǒng)功能的具體步驟。系統(tǒng)流程圖:開始客戶端界面如下圖:(其中進(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ò)地址QFile*file;//下載文件指針QStringerrorInfo;qint64totalsize,readysize1=0,readysize2=0;};獲取文件名并創(chuàng)建同名空文件:url=ui->lineEdit->text();//獲取界面輸入的url地址QFileInfoinfo(url.path());QStringfileName(info.fileName());//獲取文件名if(fileName.isEmpty())fileName="maomao.html";file=newQFile(fileName);//使用文件名創(chuàng)建一個(gè)同名空文件if(!file->open(QIODevice::WriteOnly)){//如果打開文件失敗,則刪除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;//用已下載文件的大小之差來表示速度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ù)寫入同名文件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)慈+凰打開共享+刻錄耳下載反=?名稱debugrelease修改日期2015/12/1113:122015/12/913:25文件矣文懊B輪輯舊童耆(V)工具⑴幫助(H)慈+凰打開共享+刻錄耳下載反=?名稱debugrelease修改日期2015/12/1113:122015/12/913:25文件矣「36OFreeAPSetup2015/12/1113江3應(yīng)用程序10,209KE怎庫(kù)陽杲腥視w亙圖片茍迅雷下載Jf肓樂■計(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文件類型:應(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訪問時(shí)間:2015年12月11日,13:10:52屬性:只讀?隱藏?高級(jí)?…確定」取消應(yīng)用⑥六.專業(yè)實(shí)習(xí)心得體會(huì)王雪蘭:本次課題實(shí)驗(yàn)感覺難度比較大。首先是QT界面開發(fā)工具的使用很不熟練,以前只用過delphi界面開發(fā)工具,但是這次要求在linux系統(tǒng)下進(jìn)行界面設(shè)計(jì),所以選擇了QT。查了很多的資料,發(fā)現(xiàn)QT一般都用C++進(jìn)行開發(fā),于是C++成了第二個(gè)難點(diǎn)。通過圖書館查閱資料對(duì)客戶端下載文件的基本功能實(shí)現(xiàn)有了認(rèn)識(shí),結(jié)果在編程的過程中遇到最多的問題就是C++語言的使用不熟悉,比如數(shù)據(jù)類型轉(zhuǎn)換將Qint64類型轉(zhuǎn)換為QString類型,QString::number();邊查資料和課本才慢慢適應(yīng)QT中C++的用法。然后就是文件能下載的時(shí)候發(fā)現(xiàn),無法在文件下載前就獲取到文件大小,只能下完才能獲取到。由于不能提前獲取到文件的總大小,導(dǎo)致即使獲取了文件當(dāng)前大小,進(jìn)度條無法顯示。于是就想通過manager.head(QNetworkRequest(url))獲取鏈接對(duì)應(yīng)的http頭部信息,然后用header(QNetworkRequest::ContentLengthHeader)從頭信息中獲取該文件的長(zhǎng)度并輸出,這樣進(jìn)度條也能顯示了。下載速度是通過下載文件的過程中,實(shí)時(shí)監(jiān)聽讀取數(shù)據(jù),使用每次讀取數(shù)據(jù)后文件的大小與前一次相減,得到的差值就是文件的下載速度。這次實(shí)驗(yàn)雖然很難,但是最終仍然能夠順利完成真的很激動(dòng)。每次進(jìn)步一小步都能夠很激勵(lì)人心。實(shí)驗(yàn)過程中查閱了大量的資料和課本,感覺都沒有哪次做實(shí)驗(yàn)這么麻煩,各種信息在大腦中轉(zhuǎn),剛開始也感覺沒有頭緒,很累,也自暴自棄。不過總是突然就想到解決的方法然后獲得成功和小進(jìn)步,最后就重拾信心了。在此,也要感謝同組小伙伴的合作和幫助!宋兵兵:本次主要是要在之前課程學(xué)習(xí)的基礎(chǔ)之上做一個(gè)在Linux下運(yùn)行的下載程序,這個(gè)程序是利用HTTP協(xié)議進(jìn)行數(shù)據(jù)傳輸?shù)某绦颍ㄟ^統(tǒng)一資源定位符URL進(jìn)行數(shù)據(jù)資源的獲取,功能涉及到文件總大小,下載速度,文件下載進(jìn)度,當(dāng)前已下載的文件大小等。本次試驗(yàn)是一個(gè)針對(duì)下載的程序,程序是用QT編寫的,內(nèi)容包括了課程內(nèi)容所涉及的地方,如LINUX下的通信與數(shù)據(jù)傳輸之類。在做數(shù)據(jù)傳輸時(shí)是利用QNetworkRequest實(shí)現(xiàn)功能的,通過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顯示,后來了解到是通過totalsize=QStrin

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論