专业实习实验报告

  • 格式:doc
  • 大小:485.00 KB
  • 文档页数:10

下载文档原格式

  / 10
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

一. 项目概述 (1)

二. 项目需求分析 (1)

三. 项目概要设计 (1)

四. 项目详细设计 (2)

五. 测试分析 (5)

六. 专业实习心得体会 (8)

一.项目概述

本课题设计始于2015年10月26日,并于12月11日完成。本次设计的主要目的是通过http网络文件的下载,学习界面开发工具QT的使用和熟练使用C++语言来编写程序开发应用,了解相关网络协议,提高实际应用系统开发的能力。开发实际应用时,需要对应用所需具备的基本功能进行分析(即需求分析),比如下载速度和文件大小的显示等等,如此才能更好的提升用户使用感。

二.项目需求分析

为了开发出真正满足用户需求的产品,就必须了解用户的需求。因此,我们需要使用需求分析来确定系统“必须完成哪些工作”,也就是对目标产品提出完整、准确、具体的要求。

功能需求:使用QT界面开发工具设计一个友好的客户端界面,用户能够使用其下载各种类型的http网络文件。在下载之前,用户将网络链接给出即可获取要下载的文件的总大小。在下载的过程中,用户能够了解文件的下载进度和下载速度。

可靠性和可用性需求:用户可以使用该产品下载任意一种http网络文件,下载下来的文件可以使用并不会出错。

接口需求:“网络文件下载链接必须放在‘链接地址’文本框中,下载文件总大小须放在‘totalsize’文本框中,已下载文件大小须放在‘readyread’文本框中,下载速度须放在‘speed’文本框中,下载过程中进度条‘progressbar’会进行更新显示”为用户接口需求。“下载的网络文件必须以http://开头作为地址链接”为通信接口需求。

约束:开发必须使用linux系统下的界面开发工具QT,并且开发工具必须使用http协议作为通信协议来实现一个客户端和服务端的请求和应答。可以使用QT网络模块中提供的网络访问接口来实现http编程。

将来可能提出的要求:可支持断点下载的功能。

三.项目概要设计

需求分析确定过后,就需要概要设计来确定系统“应该怎么做”了。由此来确定系统的组成模块及其相互之间的关系。

系统设计阶段:使用QT网络模块中的网络访问接口来实现http编程。首先使用QNetworkRequest类创建使用http协议的对象url并发送网络请求,使用QNetworkAccessManager类来协调网络操作,同时可以使用QNetworkReply类来监听每一个应答信号并触发槽函数。即下载前发送请求,统一下载后获取要下载的文件的总大小并显示,此时进度条隐藏;下载时获取当前已读取的数据的大小并显示,同时计算下载速度并更新进度条;下载后删除文件指针,隐藏进度条,速度清零。

结构设计阶段:QT客户端界面,mainwindow.h头文件,mainwindow.cpp界面设计内容,main.cpp主函数。

四.项目详细设计

详细设计需要具体提出实现系统功能的具体步骤。

系统流程图:

客户端界面如下图:(其中进度条隐藏)

头文件mainwindow.h:

class MainWindow:public QMainWindow

{

Q_OBJECT

public:

explicit MainWindow(QWidget*parent=0);

~MainWindow();

void downloadFile(QUrl url);//请求链接

qint64getFileSize(QUrl url,int tryTimes=3);

void updateSpeed();

private slots:

void httpFinished();//完成下载后的处理

void httpReadyRead();//接收数据时的处理

void updateDataReadProgress(qint64,qint64);//更新进度条void on_pushButton_clicked();//下载按钮的单击事件槽函数private:

Ui::MainWindow*ui;

QNetworkAccessManager*manager;

QNetworkReply*reply;

QUrl url;//存储网络地址

QFile*file;//下载文件指针

QString errorInfo;

qint64totalsize,readysize1=0,readysize2=0;

};

获取文件名并创建同名空文件:

url=ui->lineEdit->text();//获取界面输入的url地址

QFileInfo info(url.path());

QString fileName(info.fileName());//获取文件名

if(fileName.isEmpty())fileName="maomao.html";

file=new QFile(fileName);//使用文件名创建一个同名空文件

if(!file->open(QIODevice::WriteOnly))

{//如果打开文件失败,则删除file,是指针为0并返回

qDebug()<<"file open error";

delete file;

file=0;

return;

}

下载前获取文件总大小getfilesize()函数:

//发出请求,获取目标地址的头部信息

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;

}

QVariant var = reply->header(QNetworkRequest::ContentLengthHeader); reply->deleteLater();

size = var.toLongLong();

Getfilesize()调用:

totalsize=getFileSize(url);

QString size=QString::number(totalsize/1024,10);

ui->totalsizelineEdit->setText(size);

更新速度updatespeed()函数:

qint64speed=readysize2-readysize1; //用已下载文件的大小之差来表示速度readysize1=readysize2;

QString readyspeed=QString::number(speed/1024,10);

ui->speedLineEdit->setText(readyspeed);

Updatespeed()调用:

readysize2=bytesRead; //获取已下载文件的大小

readsize=QString::number(bytesRead/1024);

ui->readyreadlineEdit->setText(readsize);