049_网络硬盘系统
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
密 惠 保
3 系统需求分析
3.1 功能需求
3.1.1 对文件夹的操作
1. 浏览文件夹下的文件和文件夹
用户进入系统时,用一个页面显示系统根目录下的文件夹及文件。用户还可以根据需要在此页面上对文件夹进行一级一级的浏览。与浏览文件夹下的文件和文件夹功能块相对应的页面也是系统的主页,它记录访问系统的客户端信息,并把客户端信息存储在数据库中,供系统统计使用。
2. 新建文件夹
既然是网络硬盘系统,那么它就应该和本地硬盘一样用户可以新建一些比较有个性、方便查找和管理的文件夹名。用户通过新建文件夹功能块可以在系统上创建以用户所需要的名字命名的文件夹,方便用户管理文件,同时也方便查找文件。
3. 删除文件夹
当用户有需要删除一个或多个文件夹的时候,则需要一个对应的删除文件夹的功能块。用户可以单击页面中的【×】按钮可以删除选择的文件夹。为了防止用户误操作,当删除某一个文件夹时,需要弹出一个对话框来提醒用户,表示该文件夹是否真的可以被删除。如果操作成功,则显示提示消息;否则弹出失败对话框。 【买计算机毕业论文就到www.think58.com】
4. 重命名文件夹
一个文件夹不能够描述文件夹下的内容的时候,就需要对文件夹进行更名。当用户有需要变更文件夹名字的时候,单击页面中对应文件夹的【Edit】按钮进入重命名文件夹的页面。页面上的【确定】按钮触发事件以实现重命名文件夹的功能。 本文来自think58 [资料来源:http://think58.com]
5. 移动文件夹
当文件夹放错了地方,或是文件夹不应该归在当前目录下时,就需要使用到移动文件夹的功能。单击移动文件夹的页面中的【移动到】按钮可以移动选择的文件夹。移动文件夹的步骤具体为以下三步:选择移动的文件夹;选择移动到的文件夹;单击【移动到】按钮移动文件夹。
3.1.2 对文件的操作
1. 上传文件
上传文件作为网络硬盘最重要、最基础的功能,用户可以通过上传页面上传一个或同时上传多个文件。上传的文件保存在服务器硬盘中,并把文件信息保存到数据库中。
2. 下载文件
同样,下载文件也是网络硬盘最为重要和基础的功能,用户使用此项功能可以从服务器上下载所需要的文件到本地硬盘上来。
3. 查看文件属性
用户在使用系统时,光看某一个文件的名字有的时候并不能判断出这个文件是否是他所需要的,所以在系统中添加了查看文件属性这个功能块。当用户点击文件名,并由文件的链接进入查看文件属性页面,在页面中显示了文件的名字、所在目录、类型、大小和创建时间。
4. 删除文件
当一个文件过时或则已经没有用处的时候,这个文件还留在服务器的硬盘上,这就占用了服务器的硬盘资源,所以就需要删除文件这项功能。它实现方式和删除文件夹功能一样都是在同一页面中完成的。 内容来自think58
[来源:http://www.think58.com]
5. 移动文件
文件上传的时候传错了地方或是将文件归类到其他文件夹的时候,就需要把文件移动到相应的文件夹下。它的实现和移动文件夹功能一样同是单击浏览文件页面中的【移动到】按钮来完成的。
3.1.3 系统多语种化
系统所面对的用户不是使用单一语言的某一特定地区的人群,而是面对不同地区,使用不同语言的人群。这就要求系统具有多种语言来应对这种需求。
系统采用ASP.NET提供的使用网页资源本地化技术,来实现系统的多语种化。由于作者能力有限这里暂时先实现了三种语言,它们分别是:中文、日文和英文,其中中文为默认语言。
3.2 出错处理需求
要做到一个不出错的系统是非常难的,更何况系统是在短时间内完成的,系统出错是在所难免的。程序允许出错,但是要对错误进行相应的处理。这就需要一个专门的处理错误的页面。当系统发生异常时,系统会对异常进行捕获,然后把捕获的相关信息显示在错误处理页面。
3.3 开发环境的搭建
系统的用户可能使用的不同的平台来使用系统,系统是通过WEB形式运作,不同的平台都遵循WEB统一的协议。所以系统可以不用考虑用户使用的平台。在系统的开发过程中,采用的ASP.NET和C#.NET实现,这些都是微软的专属,所以开发的平台为WINDOWS。这里选用的操作系统为WINDOWS XP SP2。 内容来自think58
[资料来源:http://think58.com]
Visual Studio 2005是微软最新的开发工具,也是世界上最优秀的开发软件之一,它以强大的WINDOWS为基础。Visual Studio 2005支持ASP.NET 2.0中的所有特性。它能让我们在开发过程中少写70%的代码。所以选择Visual Studio 2005作为开发工具。
由于在课堂上学习数据库中,SQL SERVER 2000最为熟悉,而且SQL SERVER 2000有着大量的用户,它的技术也是相当的成熟。所以在系统的开发中选用SQL SERVER 2000作为系统数据库。
4 系统的总体设计方案
4.1 系统设计思想
网络硬盘是目前比较流行的网络应用系统,它主要实现文件的共享与保存。
系统设计严格按照系统的需求分析来设计,以满足人们对多语种网络硬盘的需求。
4.2 系统业务概要描述及开发模型
系统运行在服务器上,用户使用终端上的浏览器(Browser)通过网络来访问系统。系统能够自动识别浏览器上设置的默认地区码,并返回相应语言的信息给浏览器。用户可以在系统上进行对目录的新建、删除、浏览、修改操作,对文件的上传、下载、搜索、修改,查看操作。
一般用户的操作流程是:
首先通过浏览器进入系统,用户会看到相应语言的首页。然后再是用户对文件和目录进行的一些操作。
整个系统及外部关系概要图见下: think58好,好think58 [资料来源:THINK58.com]
内容来自think58 [资料来源:www.THINK58.com]
本文来自think58
[来源:http://www.think58.com]
think58好,好think58
[资料来源:http://www.THINK58.com]
copyright think58 [资料来源:THINK58.com]
[资料来源:http://THINK58.com]
图2 系统结构
4.3 系统设计目标和原则
系统实现了对文件和目录进行操作的八个功能,其中目录的操作为:添加、删除、更改名字,文件的操作为:查看属性、浏览、上传、下载、更改名字。
其设计原则归纳起来有如下几点:
1. 多语言:
系统本着为使用不同语言的人使用同以系统的目的,采用最新的技术实现多语种化。由于时间的关系,系统目前只实现了英语、日语和中文三种语言。
2. 友好性:
系统维护简单、方便,用户界面直观清晰。
3. 实用性:
所有输入界面直观而方便,符合操作习惯和顺序。要求所有的显示内容简洁明了,美观,易懂。
4. 可扩充性:
系统采用三层结构设计,模块化设计,随时可以增加新的功能模块。
4.4 系统基本模块设计
在模块的设计开发过程中,值得注意的有模块的可维护性、可补充性、可读性以及可靠性等。其中最重要的是可维护性。
可维护性是指理解、改正、改动、改进软件的难易程度,通常影响软件的可维护性的因素有以下三点:
1) 可理解性,提高软件的可理解性的措施:采用模块化的程序结构,书写详细正确的文档,采用结构化程序设计,使用良好的编程语言和程序设计风格; [来源:http://www.think58.com]
2) 可测试性,测试和诊断软件中的错误的难易程度,提高软件可测试性的措施有:书写详细正确的文档,采用良好的程序结构,使用测试工具和调试工具,保存以前的测试过程和测试用例等;
3) 可修改性,提高软件的可修改性的措施有:采用各种设计准则如信息隐蔽原则、模块独立、模块间联系的低耦合、高内聚。
模块的功能分别设计如下:
1、 对目录操作模块:
主要设计有以下几项功能:
A. 添加文件夹;
B. 删除文件夹;
C. 更改文件夹名;
2、 对文件操作模块:
主要设计有以下几项功能:
A. 查看文件属性;
B. 浏览文件;
C. 上传文件;
D. 下载文件;
E. 更改文件名字;
3、 多语言化:
主要设计有以下几项功能:
A. 默认语言(中文);
B. 英语;
C. 日语;
4、 错误处理页面设计:
错误处理页面处理整个应用系统的错误信息。
5、 数据库操作层:
数据库操作层负责连接数据库、查询数据、插入记录等对数据库进行的操作。
6、 业务逻辑层
负责响应用户层传过来的请求,发给数据库操作层,并接收从数据库返回的结果以提供给用户界面层。
5 系统的详细设计
内容来自think58 [资料来源:THINK58.com]
5.1 数据库设计
数据库的名称为WebDiskDB,版本为SQL Server 2000。该数据库中有文件目录表Directory和文件属性表Url。
在文件目录表Directory中:
A、 DirID字段存储ID;
B、 Name字段存储文件夹或文件的名称;
C、 ParentID字段存储文件夹或文件父目录的ID;
D、 Contain字段存储文件夹或文件大小;
E、 FileCount字段存储包含文件的数量;
F、 DirCount字段存储包含文件夹的数量;
G、 Flag字段存储是文件还是文件夹的标识;
H、 CreateDate字段存储文件夹或文件的创建时间
表1 文件目录表
字段名 数据类型 字段说明 备 注
DirID int ID 主键(自动增一)
Name varchat(50) 名称
ParentID int 父目录ID
Contain int 大小
FileCount Int 包含文件的数量
DirCount Int 包含文件夹的数量
Flag bit 文件标识 1:文件夹;2:文件
CreateDate datetime 创建时间
在文件属性表Url中:
A、 UrlID字段存储ID;
B、 Url字段存储文件的链接地址;
C、 Type字段存储文件的类型;
D、 DirID字段存储文件在文件目录表中的DirID值;
E、 CreateDate字段存储文件的创建时间; think58好,好think58
表2 文件属性表
字段名 数据类型 字段说明 备 注
UrlID int ID 主键(自动增一)
Url varchar(255) 链接地址
Type varchar(200) 文件的类型
DirID int 外键
CreateDate datetime 创建时间
5.2 设计错误处理页面
错误处理页面ErrorPage.aspx处理整个应用系统的错误信息。当应用程序发生错误时,跳转到该页面,并在该页面显示错误信息。
该页面设计比较简单。当页面初始化时,首先又函数Page_Load(object sender, EventArgs e)获取发生错误页面的地址,并把该地址保存在ViewState对象中,供页面上返回按钮相对应的事件BackBtn_Click(object sender,System.EventArgs e)使用。
5.3 数据库操作层设计
数据库操作层是直接与数据库打交到,它的上一层不需要了解这一层内部的详细结构,我们就把它用一个类Disk给封装起来,给它的上一层提供一个接口IDisk就行了。
接口IDisk的实现:
获取所有目录SqlDataReader GetAllDirectoryFile();
获取子目录和文件信息SqlDataReader GetDirectoryFile(int nParentID);
获取所有目录信息SqlDataReader GetDirectorys();
获取子目录信息SqlDataReader GetDirectory(int nParentID); think58好,好think58
获取单个目录信息SqlDataReader GetSingleDirectory(int nDirID);
新建一个目录int AddDirectory(string sName,int nParentID);
重命名目录int EditDirectory(int nDirID,string sName);
删除一个目录int DeleteDirectory(int nDirID);
移动一个目录int MoveDirectory(int nDirID,int nParentID);
获取所有文件SqlDataReader GetFiles();
获取给定目录下的所有文件SqlDataReader GetFile(int nParentID);
获取单个文件SqlDataReader GetSingleFile(int nFileID);
上载一个文件int AddFile(string sName,int nParentID,int nContain,string sUrl,string sType);
修改文件的名称int EditFile(int nFileID,string sName);
删除一个文件int DeleteFile(int nFileID);
移动文件 int MoveFile(int nFileID,int nParentID);
搜索文件 SqlDataReader SearchFiles(string sKey);
类Disk除了实现接口IDisk的所有方法外,类还定义了自己的方法ShowDirectory(DropDownList dirList,int nParentID)和方法CreateChildNode(DropDownList dirList,DataTable dataTable,int nParentID,string sParentName)。这两个方法实现按目录层次结果显示目录的信息。 内容来自think58
5.4 多语言化实现的设计
在创建资源文件时,首先开始创建基文件 .resx。对于要支持的每种语言,分别创建一个新文件,该文件具有同一基本文件名但包含语言或语言及区域性(区域性名称)。
在运行时,ASP.NET 使用与 CurrentUICulture 属性的设置最为匹配的资源文件。线程的 UI 区域性根据页的 UI 区域性进行设置。例如,如果当前的 UI 区域性是西班牙语,则 ASP.NET 使用.es.resx 文件的已编译版本。如果当前的 UI 区域性没有匹配项,则 ASP.NET 会使用资源后备;首先用特定区域性的资源,接着用非特定区域性,最后用默认资源文件。
在 ASP.NET 中,可以创建具有不同范围的资源文件。可以创建全局资源文件,这意味着可以从位于网站中的任意页或代码读取这些资源文件。也可以创建本地资源文件,这些文件存储单个 ASP.NET 网页(.aspx 文件)的资源。将资源文件放入应用程序根目录的保留文件夹 App_GlobalResources 中,即可创建全局资源文件。App_GlobalResources 文件夹中的任何 .resx 文件都具有全局范围。此外,ASP.NET 还生成了一个强类型对象,这为开发人员提供了一种以编程方式访问全局资源的简单方法。本地资源文件是只应用于一个 ASP.NET 页的文件(带有 .aspx、.ascx、.master 等扩展名的 ASP.NET 页)。本地资源文件所放入的文件夹具有 App_LocalResources 保留名称。App_LocalResources 文件夹可以存在于应用程序的任何文件夹中,这与 App_GlobalResources 根文件夹不同。通过资源文件名将一组资源文件与特定的网页相关联。文件的基名称与页文件名相同,后跟语言和区域性名称,最后以扩展名 .resx 结尾。 think58 [版权所有:http://think58.com]
资源文件分为全局资源文件和本地资源文件,它们各有各的优点与缺点。使用全局资源文件可以在各页之间共享资源,并且全局资源文件中的资源还是强类型的,用于以编程方式访问。本地资源文件使得单个 ASP.NET 网页的资源比较容易管理,但不能在各页之间共享资源。此外,如果有许多页必须本地化为多种语言,则可能会创建大量本地资源文件。如果站点是具有许多文件夹和使用多种语言的大型站点,则使用本地资源可能快速地在应用程序域中扩展程序集的数量。多语种网络硬盘系统是一个小型的系统,它的文件夹比较少,如果采用本地资源文件,则它的代码管理起来不方便。所以在系统开发中采用全局资源文件。
创建资源文件后,即可在 ASP.NET 网页中使用这些文件。通常使用资源来填充页上各控件的属性值。例如,可以使用资源设置 Button 控件的 Text 属性,而不必将该属性硬编码为特定的字符串。使用资源设置控件属性值,可以使用隐式本地化或显式本地化:隐式本地化使用的是本地资源,并允许将控件属性自动设置为匹配的资源;显式本地化可以使用资源表达式将控件属性设置为本地或全局资源文件中的特定资源。由于系统开发采用的是全局资源文件,所以这里就只能使用显式本地化。
采用全局资源显式本地化时,必须为要设置的每个属性分别使用一个资源表达式。表达式为如下形式:<%$ Resources: Class , ResourceID %>,其中Class是可选的,ResourceID是必需的。下面就是使用全局资源本地化的具体过程。 本文来自think58
首先建立3个与语言相对应的资源文件leng.resx、leng.ja.resx、leng.en.resx,他们分别对应中文,日文,英文。其中leng.resx是基资源文件,也是默认或后备资源文件。在创建资源文件的时候,VS2005会自动将所创建的资源文件放到应用程序根目录的保留文件夹 App_GlobalResources 中。资源文件创建好后,接着创建资源文件中的键/值对应。例如:页脚部分将文件移动到另外一个文件夹的Button控件的Text属性的对应键名为moveto,它在基资源文件中leng.resx的值是:移动到;在日文资源文件leng.ja.resx中对应的值是:移動;在英文资源文件leng.en.resx中对应的值是:Moves to。
然后在创建控件时,为控件绑定数据就可以实现。如: 内容来自think58
[资料来源:http://THINK58.com]
[来源:http://think58.com]
图3 绑定数据
最后, 设置所有页的区域性和 UI 区域性。向 Web.config 文件添加一个 globalization 节,然后设置 uiculture 和 culture 属性为auto。
这样在系统运行时就会根据客户端的地区信息来载入相关的语言了。
5.5 主要用户界面层的实现
用户界面层直接面向用户,它使用数据库操作层的方法来获取数据,这样开发难度就大大的降低了。
5.5.1 主页的实现
浏览网络硬盘由ShowDisk.aspx.cs实现。页面初始化时,要实现下面三个功能:
(1) 获取参数DirID和ParentID的值
(2) 显示DirList控件的目录信息。
(3) 显示当前目录下的硬盘信息。如果参数DirID大于-1,则显示DirID目录下的信息;如果ParentID大于-1,则显示ParentID目录下的信息;否则显示跟目录下的信息。上述功能由函数Page_Load(object sender, EventArgs e)实现。
函数BindDirectoryData()显示控件DirList的目录信息,这些功能都是由函数ShowDirectory(DropDownList dirList,int nParentID)实现。函数BindDirectoryData()的程序代码如下:
private void BindDirectoryData()
{ ///显示目录列表信息
Disk disk = new Disk();
disk.ShowDirectory(DirList,-1); copyright think58 [资料来源:www.THINK58.com]
if(DirList.Items.Count > 0)
{
DirList.SelectedIndex = 0;
}
disk.ShowDirectory(MoveDirList,-1); }
函数BindDirectoryData(int nParentID)首先根据参数nParentID从数据库中获取ID值为nParentID的目录和文件,然后使用DiskView控件显示文件夹和文件等信息,并设置【返回上级目录】按钮的可用性。函数BindDirectoryData(int nParentID)的程序代码如下:
private void BindDirectoryData(int nParentID)
{
///显示目录列表信息
IDisk disk = new Disk();
SqlDataReader dr = disk.GetDirectoryFile(nParentID);
///绑定控件的数据
DiskView.DataSource = dr;
DiskView.DataBind();
dr.Close();
ReturnBtn.Visible = nParentID > 0 ? true : false;
}
页面在显示目录、文件的标志时,使用函数FormatImageUrl(bool bFlag,string sType)获取图象的链接地址。该函数根据目录或者文件的类型获取不同图象的链接地址。
页面在显示目录、文件时,需要使用不同的链接地址。因此,页面使用函数格式化链接地址,由函数FormatHerf(int nDirID,int nParentID,bool bFlag)实现,该函数根据参数bFlag返回不同的链接地址。它的程序代码如下:
copyright think58 [资料来源:www.THINK58.com]
protected string FormatHerf(int nDirID,int nParentID,bool bFlag)
{ if(bFlag == true)
{
return ("ShowDisk.aspx?DirID=" + nDirID.ToString() + "&ParentID=" + nParentID.ToString());}
else
{
return ("ViewDisk.aspx?DirID=" + nDirID.ToString() + "&ParentID=" + nParentID.ToString());}
}
改变DirList控件的选择时,需要重新绑定DiskView控件的数据。该功能由DirList控件的事件DirList_SelectedIndexChanged(object sender,EventArgs e)实现。它的程序代码如下: