信息与电气工程毕业设计_基于WEB网络硬盘设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息与电气工程学院
软件程序设计CDIO三级项目
设计说明书
(2013/2014学年第一学期)
题目:Web版网络U盘
目录
1. 项目设计目的 (1)
2. 项目设计正文 (1)
2.1 系统分析 (1)
2.1.1 网络硬盘系统功能要求 (1)
2.1.2 网络硬盘系统分析说明 (2)
2.2 系统设计 (2)
2.2.1 数据库设计 (2)
2.2.2 系统总体结构框图 (3)
2.2.3 系统流程图 (4)
2.3 网络硬盘系统实现 (6)
2.3.1 登录模块 (6)
2.3.2管理员上传文件模块 (7)
2.3.3文件下载模块一 (9)
2.3.4文件下载模块二 (11)
2.3.5查看下载记录模块 (12)
2.4系统测试 (13)
3. 项目设计总结 (15)
4. 参考文献 (15)
1.项目设计目的
1) 进一步巩固和加深对“C#.NET程序语言设计”课程的基本知识,了解ASP动态网页设计知识在实际中的应用;
2) 综合运用“C#.NET程序语言设计”课程和先修课程的理论及生产实际知识去分析和解决问题,进行的相关训练;
3) 学习ASP动态网页设计的一般方法,了解和掌握通用数据库的连接、数据的相关操作或网站的设计过程和进行方式,培养正确的设计思想和分析问题、解决问题的能力,特别是网站功能规划的能力和实现相关功能的能力;
4) 通过对系统的分析、系统设计、数据库设计和功能的实现等,培养ASP动态网页设计的基本技能,巩固C#知识。
2.项目设计正文
2.1 系统分析
2.1.1 网络硬盘系统功能要求
本设计为网路硬盘,管理员可以上传、分享一些文件,供普通用户下载,管理员可以添加、管理用户,浏览用户下载记录,删除以上传文件,从而对网盘进行维护和管理。
网络硬盘的功能要求:
1) 管理员:
用户登录、注销
上传文件
通过搜索找到已上传文件,对其管理或下载
浏览普通用户下载记录
添加新账户
管理已添加账户
修改自己的密码
2) 普通用户:
用户登录、注销
下载已上传文件
修改自己的账户信息及密码
2.1.2 网络硬盘系统分析说明
本系统用于网上文件的管理,账户注册方式为管理员添加开发,不提供自行注册。
管理员对该系统具有绝对控制权限,可添加、管理用户,上传、管理网盘文件,浏览已被下载的文件记录。
而普通用户需向管理员索要账户和密码,自己仅有修改该账户信息和浏览下载已上传的文件。
登陆模块下,通过账户名连接数据库判断目前用户为管理员还是普通用户,并在账户、密码验证后跳转到相应的网页。
管理员子系统内,上传文件模块可实现浏览选择本地文件,并获取所选文件地址和文件名,以及上传时间,然后将该文件上传到相应位置并将获取的各种信息保存到数据库相应列表内,供后续功能调用。
文件管理模块与下载历史记录模块通过Visual Studio自带的控件及数据绑定,实现已上传文件的删查操作及各用户对文件的下载记录。
通过链接数据库及相应C#代码实现新账户的添加、已有账户的权限管理及本账户的密码修改。
普通用户子系统内,文件下载模块需实现网盘内文件的浏览及下载,通过代码和数据库保存用户的下载文件名称、下载时间等信息,用于管理员下载历史浏览模块的调用。
该子系统内账户同样可修改自己的账户信息及账户密码。
2.2 系统设计
2.2.1 数据库设计
所用数据库FileManage.mdf包含三张数据表,用户信息表(UserLists)、文件存放表(FileLists)、下载历史记录表(DownloadHistory),表设计如下:
表2-1 用户信息表(UserLists)
列名数据类型长度是否为主键是否允许为空注释UserListID bigint 8 是否用户帐号UserAccount nvarchar 50 否否用户登录账户名UserPassword nvarchar 50 否否用户登录密码DepartmentName nvarchar 50 否是部门(学院)名称Contactor nvarchar 50 否是联系人Tel nvarchar 50 否是联系电话
Email nvarchar 50 否是E-mail
Address nvarchar 255 否是地址
UserLevel int 4 否是用户权限等级
表2-2 文件存放表(FileLists)
表2-3 下载历史记录表(DownloadHistory)
2.2.2 系统总体结构框图
图2-1 网络硬盘系统的总体结构
列名 数据类型 长度 是否为主键
是否允许为空
注释 FileListID bigint 8 是 否 文件序号 UserAccount nvarchar 50 否 是 用户登录账户名
Contactor nvarchar 50 否 是 联系人 UpFileName nvarchar 50 否 否 文件名 FileContent ntext 16 否 是 文件说明 FileSize nvarchar 50 否 是 文件大小 FileType nvarchar 50 否 是 文件类型 DownloadTimes int 4 否 是 文件下载次数 AddTime
datetime
8
否
是
记录添加时间
列名
数据类型 长度 是否为主键
是否允许为空
注释 DownloadHistoryID bigint 8 是 否 文件下载序号 UserAccount nvarchar 50 否 是 用户登录账户名
Contactor nvarchar 50 否 是 联系人 FileListID bigint 8 否 否 文件编号 UpFileName ntext 16 否 是 文件名 DownDatetime datetime
8
否
是
文件大小
WebUSB 网络U 盘系统
普通用户子系统 管理员子系统
用户登录模块
用户密码修改模块
文件下载模块
页面显示控制模块
管理员登陆模块
文件上传模块 文件管理模块
浏览下载记录模块
添加用户模块 管理用户模块 修改密码模块
页面显示控制模块
2.2.3 系统流程图
开始
初始化程序
与数据库内账号和密码相符?
是否为管理员?
输入用户名和密码
输出登录失败信息
单击菜单
单击菜单
添加用户 管理用户 查看下载记录 管理文件 上传文件 修改密码 下载文件
修改账户信息及密码
N
N
Y
Y
图2-2 系统流程图
2.3 网络硬盘系统实现
2.3.1 登录模块
图2-3 登录页面展示
登录模块后台功能实现代码:
///<summary>
///用户单击登录按钮事件方法
///</summary>
///<param name="sender"></param>
///<param name="e"></param>
protected void Button1_Click(object sender, EventArgs e)
{
//获取用户在页面上的输入
string userAccount = Account.Text; //用户登陆名
string userPassword = Password.Text; //用户登陆密码
UserList userlist = new UserList();
userlist.LoadData(userAccount);
if (userlist.Exist)
{
if (erPassword == userPassword) //如果密码正确转入管理员页面
{
HttpCookie cookie = new HttpCookie("pcrepair"); //定义cookie对象以及名为aInfo的项
DateTime dt = DateTime.Now; //定义时间对象
TimeSpan ts = new TimeSpan(1, 0, 0, 0); //cookie有效作用时间
cookie.Expires = dt.Add(ts); //添加作用时间
cookie.Values.Add("UserListID", erListID.ToString()); //增加属性
cookie.Values.Add("UserAccount", erAccount.ToString()); //增加属性
cookie.Values.Add("DepartmentName",HttpUtility.UrlEncode(userlist.DepartmentName.ToString())); cookie.Values.Add("Contactor", HttpUtility.UrlEncode(userlist.Contactor.ToString()));//增加属性cookie.Values.Add("Tel",HttpUtility.UrlEncode(userlist.Tel.ToString())); //增加属性
cookie.Values.Add("Address",HttpUtility.UrlEncode(userlist.Address.ToString()));//增加属性
cookie.Values.Add("UserLevel", erLevel.ToString()); //增加属性
Response.AppendCookie(cookie); //确定写入cookie中
switch (erLevel.ToString())
{
case"0":
Response.Redirect("admin/admin.aspx"); break;
case"2":
Response.Redirect("user/admin.aspx"); break;
default: break;
}
}
//如果密码错误,给出提示,光标停留在密码框中
else
{
Response.Write("<Script Language=JavaScript>alert(\"密码错误,请重新输入密码!\")</Script>"); Password.Focus();
}
}
else
{
Response.Write("<Script Language=JavaScript>alert(\"您输入的用户名不存在!\")</Script>");
}
}
}
2.3.2管理员上传文件模块
图2-4 文件上传页面展示一
图2-5 文件上传页面展示二
文件上传模块后台功能实现代码:
protected void Button1_Click(object sender, EventArgs e)
{
Hashtable ht = new Hashtable();
ht.Add("UserAccount", SqlStringConstructor.GetQuotedString
(Convert.ToString(Request.Cookies["pcrepair"].Values["UserAccount"])));
ht.Add("Contactor", SqlStringConstructor.GetQuotedString(HttpUtility.
UrlDecode(Convert.ToString(Request.Cookies["pcrepair"].Values["Contactor"]))));
ht.Add("FileContent", SqlStringConstructor.GetQuotedString(FileContent.Text));
//上传文件名为原文件名
string affixFileName = InputAffixFile.Value.Trim();
int ShowFileSize = Convert.ToInt32(InputAffixFile.PostedFile.ContentLength.ToString())/1024; string ShowFileType = affixFileName.Substring(stIndexOf(".") + 1).ToLower(); int idx = stIndexOf('\\');
affixFileName = affixFileName.Substring(idx + 1);
string fileName = "";
if (affixFileName != "")
{
string path = this.InputAffixFile.PostedFile.FileName;
fileName = Path.GetFileName(path);
ht.Add("UpFileName", SqlStringConstructor.GetQuotedString(fileName));
ht.Add("FileSize", SqlStringConstructor.GetQuotedString(Convert.ToString(ShowFileSize)));
ht.Add("FileType", SqlStringConstructor.GetQuotedString(ShowFileType));
InputAffixFile.PostedFile.SaveAs(Server.MapPath("~//upfile//affix//") + fileName);
FileList filelist = new FileList();
filelist.Add(ht);
Response.Write("<Script Language=JavaScript>alert(\"恭喜,文件上传成功!\")</Script>");
}
else
{
Response.Write("<Script Language=JavaScript>alert(\"请选择上传文件!\")</Script>"); }
}
}
2.3.3文件下载模块一
该部分实现绑定数据的文件下载
图2-6 文件下载页面展示
图2-7 文件下载页面VS设计界面文件下载模块后台功能实现代码:
protected void Page_Load(object sender, EventArgs e)
{
//加载
if (!IsPostBack)
{
//绑定数据
DataView dvlist = FileList.QueryFileLists();
AspNetPager1.RecordCount = dvlist.Table.Rows.Count;
Session["dvlist"] = dvlist;
bindData();
}
}
void bindData()
{
PagedDataSource pds = new PagedDataSource();
pds.AllowPaging = true;
pds.PageSize = AspNetPager1.PageSize;
pds.CurrentPageIndex = AspNetPager1.CurrentPageIndex - 1;
pds.DataSource = (DataView)Session["dvlist"];
GridView1.DataSource = pds;
GridView1.DataBind();
}
protected void AspNetPager1_PageChanged(object sender, EventArgs e) {
bindData();
}
}
2.3.4文件下载模块二
该部分功能为:下载时将文件的名字、路径、下载时间及下载人的部分信息传到数据库,供管理员查看下载记录程序调用。
代码如下:
public partial class user_file_download_prs : System.Web.UI.Page
{
public string filePath, showFilePath;
public int fileListID;
protected void Page_Load(object sender, EventArgs e)
{
filePath = Convert.ToString(Request.QueryString["FilePath"]);
fileListID = Convert.ToInt32(Request.QueryString["FileListID"]);
if (!IsPostBack)
{
AddDownloadHistory();
UpdateDownloadTimes();
}
Response.Redirect(filePath);
}
///<summary>
///增加下载历史记录
///</summary>
private void AddDownloadHistory()
{
showFilePath = Path.GetFileName(filePath);
Hashtable ht = new Hashtable();
ht.Add("FileListID",fileListID);
ht.Add("UserAccount", SqlStringConstructor.GetQuotedString
(Convert.ToString(Request.Cookies["pcrepair"].Values["UserAccount"])));
ht.Add("Contactor", SqlStringConstructor.GetQuotedString(HttpUtility.UrlDecode (Convert.ToString(Request.Cookies["pcrepair"].Values["Contactor"]))));
ht.Add("UpFileName", SqlStringConstructor.GetQuotedString(showFilePath));
DownloadHistory downloadHistory = new DownloadHistory();
downloadHistory.Add(ht);
}
///<summary>
///增加下载次数
///</summary>
private void UpdateDownloadTimes()
{
FileList filelist = new FileList();
filelist.FileListID = fileListID;
Hashtable ht = new Hashtable();
ht.Add("DownloadTimes", "DownloadTimes+1");
filelist.Update(ht);
}
}
2.3.5查看下载记录模块
图2-8 文件下载记录页面
后台代码:
public partial class admin_download_history : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Request.Cookies["pcrepair"] != null)
{ //加载
if (!IsPostBack)
{
//绑定数据
DataView dvlist = DownloadHistory.QueryDownloadHistoryView(); AspNetPager1.RecordCount = dvlist.Table.Rows.Count;
Session["dvlist"] = dvlist;
bindData();
}
}
}
void bindData()
{
PagedDataSource pds = new PagedDataSource();
pds.AllowPaging = true;
pds.PageSize = AspNetPager1.PageSize;
pds.CurrentPageIndex = AspNetPager1.CurrentPageIndex - 1;
pds.DataSource = (DataView)Session["dvlist"];
GridView1.DataSource = pds;
GridView1.DataBind();
}
protected void AspNetPager1_PageChanged(object sender, EventArgs e)
{
bindData();
}
}
2.4系统测试
图2-9 文件上传测试页面
图2-10 上传文件列表
图2-11 文件下载记录页面
图2-12 文件下载记录页面
图2-13 修改个人资料及密码页面经测试,该web版网络硬盘系统运行稳定。
3.项目设计总结
4.参考文献
[1] 邱锦伦,曹旻.Visual C#.NET程序设计教程[M].清华大学出版社,2006,9
[2] (美)恰坡(Chappell,D.) 荣耀译. .NET大局观(第2版)[M], 电子工业出版社,2006,9,1
[3] (美)Karli Watson Christian Nagel.C#入门经典(第3版)[M],清华大学出版社,2006,5,1
[4]Treeview动态添加子菜单,CSDN论坛,2014.01.04 /topics/390688951
项目设计
评语
项目设计成绩指导教师
(签字)年月日。