当前位置:文档之家› .NET程序设计期末大作业实验报告

.NET程序设计期末大作业实验报告

.NET程序设计期末大作业实验报告
.NET程序设计期末大作业实验报告

.NET程序设计实验报告

班级:物联1302学号:姓名:高华成绩:_________

一、实验名称:

多功能文件助手(包含文件分割、合并、压缩、解压等功能)

二、实验目的:

1、设计并实现一个多功能文件助手的软件。该软件拥有文件分割、文件

合并、文件压缩、文件解压缩的功能。

2、文件分割与文件合并功能可以根据用户指定的文件大小将大文件分

割为若干个容量相同的小文件并可将这些小文件合并为原始文件。

3、文件压缩和文件解压缩功能可以使用文件的GZip压缩的方法进行文

件的压缩和解压操作。

4、代码易读,软件界面友好,使用合适的控件,操作简便。

三、实验过程和算法描述

程序功能简述

1、用户界面设计

界面使用选项卡控件即TabControl控件分为分割、合并、GZip压缩、Gzip 解压四部分(截图如下)

(1)主界面窗体属性如下表:

(2)选项卡控件即TabControl控件的Name属性设置为tabSel。Appearance

属性设置为Normal。然后设置TabPages属性,单击该属性弹出“TabPage集合编辑器”对话框,设置连个选项卡。Name属性分别为pageSplit和pageMerge;Text属性分别为“文件分割”和“文件合并”。

(注:另外三个选项卡的主要控件及其主要属性设置与本页遵循相同的规则,此处不再加以罗列。)

2、算法设计

1)文件分割

上流程图中编写代码处理文件分割为核心代码区,程序确定徐分割的原文件及分割的单位后,计算得出该原文件分割后应得到的文件数目,并以源文件的名链接小文件序号作为小文件的名称。然后,通过创建BinaryReader 实例从源文件以小文件的大小读取数据,并通过创建BinaryWriter实例想创建的小文件中写入数据,循环此操作,最终实现把源文件分割成多个小文件。

2)文件合并

文件合并操作中,用户需选择分割文件中编号为“0001”的小文件,通过Directory类的GetFiles找到源文件所在目录中文件名汁编号不同的所有文件,计算得出该类型文件的数目,通过循环按此目录文件名称的顺序读取文件形成数据流,并使用BinaryWriter不断追加,循环结束即合并文件完成。

3)GZip文件压缩

本功能主要利用GZipStream类型来对文本文件内容进行GZip压缩。首先将需要压缩的文件数据以只读方式读出,然后创建GZipStream类型对象CompressionStream,最后通过流写入器对象writer向压缩流compressionStream中写入需要压缩的文件数据,此时compressionStream已将文件数据进行压缩并写入了新的文件中。

4)Gzip文件解压缩

本功能利用GZipStream类型对象对GZip压缩的文件进行解压缩。首先读取压缩文件中的数据,然后创建GZip类型对象compressionStream,通过文本流读取器从compressionStream中读取解压缩后的文件数据,最后将加压缩后的数据写入新的文件中。

四、实验结果及分析

1、未实现的功能及分析

(1)其实我之所以把它命名为“多功能文件助手”,是因为除了现有功能之外还有文件加密和文件解密的功能。但是在实际制作的时候始终找不到

DESCryptoServiceProvider所需要的引用,

System.Security.Cryptography命名空间直接添加无效。MSDN上说所需

的程序集:mscorlib(在 mscorlib.dll 中),可是从网上下载又放到相

应位置添加时引用依旧找不到,最后放弃了。

(2)GZip压缩和GZip解压缩选项卡中的进度条并不能真正的显示压缩和解压的进度。那个地方真的废了好大的劲,可惜最后还是没做出来。由于陈旭

是单线程的,文件的写入过程都是从开始写入到写入完成才能干其他的事,所以无法一边写入一边照应进度条的进度。于是我想到了多线程,但是当

我用到多线程的时候由于需要跨线程访问写入进度又出现了安全性问题

(两个线程可能同时访问同一对象)。于是我又试着使用Invoke方法,不

幸的是可能我没看懂,还是失败了。所以现在的进度条虽然有效果,但是

其实是写入完成后进度条才开始动的,并不能实时显示进度。

2、实现了但是有缺陷的功能

(1)FileStream fileCompress = File.OpenRead(srcDaiJieFilename);//打开压缩文件

listBoxUnzip.Items.Add("压缩文件大小: " + fileCompress.Length / 1024 + " KB");//在listBoxUnzip控件中显示压缩文件大小

fileCompress.Close();

文件解压缩时为了在用户选定源文件路径后就能显示源文件的大小,我就在用户选定后就立即打开文件,并显示大小。为了防止影响下面的操作和即使释放系统资源,显示大小后就立即关闭。我认为这种做法不是一种好的方法,但是并没有想到其他方法。

(2)解压文件

解压文件时,在listbox中返回的解压后文件大小事正常的,和压缩前的源文件大小一致,但是当我实际找到解压后的文件时发现他的大小事压缩前的源文件的两倍多接近三倍,目前还没有找到原因。

3、发现并解决了的问题

按照书中代码做好文件合并后,发现文件合并操作虽然提示成功实际上并没有合并而仅仅是把分割后的小文件的第一个文件复制的一遍。后来发现书中文件合并部分的代码有误。

原代码为:

filename = fileName + "*." + fileExtra; //得到所有需合并的小文件的名称

//使用GetFile方法获取率小文件所在目录中所有需合并的小文件

arrFileNames = Directory.GetFiles(srcMerFilename, filename);

iFileCount = arrFileNames.Length;

//获得合并后的文件名(删除小文件名尾部的编号)

filename = fileName.Substring(0, fileName.Length - 4);

progBarMerge.Maximum = iFileCount;

//以合并后的文件名称和打开方式来创建并初始化FileStream文件流

desMergeStream = new FileStream(txtMergDes.Text + "\\" + fileName + "." + fileExtra, FileMode.OpenOrCreate);

更正后为:

//获得合并后的文件名(删除小文件名尾部的编号)

fileName = fileName.Substring(0, fileName.Length - 4);

filename = fileName + "*." + fileExtra; //得到所有需合并的小文件的名称

//使用GetFile方法获取率小文件所在目录中所有需合并的小文件

arrFileNames = Directory.GetFiles(srcMerFilename, filename);

iFileCount = arrFileNames.Length;

//获得合并后的文件名(删除小文件名尾部的编号)

//filename = fileName.Substring(0, fileName.Length - 4);

progBarMerge.Maximum = iFileCount;

//以合并后的文件名称和打开方式来创建并初始化FileStream文件流

desMergeStream = new FileStream(txtMergDes.Text + "\\" + fileName + "." + fileExtra, FileMode.OpenOrCreate);

a、原代码中变量名混淆

由于编者定义了fileName又定义了filename。终于还是把自己弄混了

b、原代码中顺序错误

原代码中还没有为fileName赋新值就使用了,导致fileName中的数据可能还是上次操作中的甚至是不可预测的,导致文件合并失败。

五、总结

匆匆忙忙的这门课就要结束了,由于我在这门课上花的时间不多所以,学到的东西也不多,但是在做大作业的这几天里,我收获很大,最主要的是获得了一些感悟和启示。这门课让我对编程有了进一步的了解,相信在以后的学习中一定能起到很好的推进作用。

vb大作业 实验报告

软件技术实验报告 学号2009300186 姓名赵佶男班级010109卓 越 大作业机房管理系统 课题基本目标要求: 1)可在系统中由系统管理员按班级指定时间进行上机课时安排,安排上机不得与其他已安排机时冲突。 2)在指定上机课时段,除了上机班级学生可以登录外,其余无关学生一律不得登录,除非系统管理员授权。预定上机时间结束时,自动 提前5分钟提示,待真正结束时即自动锁屏。 3)除上机课时安排以外,可以在机动时间段接受学生凭个人一卡通上机,且上机实施计时自动收费(即扣除学生一卡通上因上机而应缴 纳的上机服务费) 4)在接受零散学生付费上机时,可自动为其分配空闲机器并授权使用,在分配机器时应考虑机器的使用情况分布均匀,即每次分配机器是 前一时段未曾使用的机器,当学生一卡通上的余额,不足以支付1 小时上机服务费时,应提示其下机充值,并实施锁屏。 实验步骤: 首先,根据大作业的要求,我建立了机器表,流水表,学生基本情况表,上课表,以及一卡通表五个数据库表。机器表用来按照使用情况,选择空闲时间最长的机器。流水表用来记录现在机器以及人员使用的情况,是个

动态表,用来方便的取用和修改数据。学生基本情况表用来存放学生的学号,密码,班级等基本情况,以实现学生上课登录和自由登录。上课表存放各个班级的上课下课时间,以实现排课功能。一卡通表记录了每个学生一卡通内的金额,用来帮助实现上下机的扣费,以及余额不够支付一小时时间情况下得强制下机。 然后,我进行了窗体的设计。经过筛选优化,我设计了五个窗体,分别是主选择窗体,注册窗体,登录窗体,上课安排窗体,实时计费和下机窗体。 主选择窗体可以用来进行上课登录、学生自由登录、管理员登录和机器的推荐。注册窗体是用来进行学生登录密码的注册。登录窗体限制学生的学号和密码必须匹配才能登录。上课安排窗体可以输入班号、上下课时间并选择星期值。实时计费和下机窗体用来扣费并方便学生随时下机。 接下来,要按照要求进行代码的编写。 A)可在系统中由系统管理员按班级指定时间进行上机课时安排,安排上机不得与其他已安排机时冲突。 此功能我在排课窗体下用select选择出全体班级的上下课以及星期值,并将管理员希望的上下课时间转换为时间类型数值,进行循环比较,用do until 语句逐个比较,使得上下课时间点都不得在其他班级的上课时间段内。如果时间不冲突,就实施修改数据库的功能,并更新保存。 B)在指定上机课时段,除了上机班级学生可以登录外,其余无关学生一律不得登录,除非系统管理员授权。预定上机时间结束时,自动提前5分钟提示,待真正结束时即自动锁屏。 在主选择窗体内有上课登录按钮和自由登录按钮。点击上课登录,输入学

Web程序设计实验报告

Web程序设计实验报告 姓名:冯刚 学号:200905030324 班级:计科3班

Html代码: 1.首页代码 无标题文档