当前位置:文档之家› 软件工程课程设计----作业提交系统

软件工程课程设计----作业提交系统

作业提交系统1、引言1.1 问题定义解决传统的FTP服务器不能够满足作业上传的要求下:1.教师发布作业必须到服务器上建立文件夹2.教师发布作业由在黑板上写的形式改为在网页上写再发布3.教师不能对作业进行限制如大小,类型,过期时间4.教师下载作业的必须到服务器去下载改为在局域网内任何一台计算机都可以下载5.教师无法发布成绩改为通过网页发布成绩6.学生一次未完成的作业可以先上传再下载,完成之后再上传。

7.学生上传作业只须点一个按钮,无须选择要上传的目录2、开发环境2.1 Visual Studio 2005概述Visual Studio.2008是.NET平台下最为强大的开发工具,无论是软件服务商,还是企业应用程序的部署与发布,Visual 都可以提供近乎完美的解决方案。

VisuaStudio.2008提供了包括设计、编码、编译调试、数据库连接操作等基本功能和基于开放架构的服务器组件开发平台、企业开发工具和应用程序重新发布工具以及性能评测报告等高级功能。

2.2 C# 简介C#是一种先进,面向对象的语言,通过C#可以让开发人员快速的建立大范围的基于MS 网络平台的应用,并且提供大量的开发工具和服务帮助开发人员开发基于计算和通信的各种应用。

由于C#是一种面向对象的开发语言,所以C#可以大范围的适用于高层商业应用和底层系统的开发。

即使是通过简单的C#构造也可以使各种组件方便的转变为基于WEB的应用,并且能够通过Internet被各种系统或是其他开发语言所开发的应用程序调用。

2.3 ASP简介ASP是Active Server Page的缩写,意为“动态服务器页面”。

ASP是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单、方便的编程工具。

ASP的网页文件的格式是.asp,现在常用于各种动态网站中。

ASP是一种服务器端脚本编写环境,可以用来创建和运行动态网页或Web应用程序。

ASP网页可以包含HTML标记、普通文本、脚本命令以及COM组件等。

利用ASP可以向网页中添加交互式内容(如在线表单),也可以创建使用HTML网页作为用户界面的web 应用程序。

2.4 Server SQL Microsoft简介Microsoft SQL Server 2008是一个高性能的客户端/服务器结构的关系数据库管理系统(RDBMS,Relational Database Management System)。

SQL Server 2008是为了支持高容量的事务处理(比如在线订购录入、存货目录、记帐或制造)以及数据仓库和决策支持系统(比如销售分析应用)而设计的。

它运行在Microsoft Windows NT4或Microsoft Windows 20008 Server上——基于intel处理器的网络。

可以把SQL Server 2008作为一种个人桌面数据库系统安装在运行Window NT Workstation 4、Windows 2008 Professional、Windows98和Windows Millennium Edition(Me)的机器上。

3、需求分析3.1 可行性分析系统是基于b/s结构,在IIS平台上使用ASP与Microsoft SQL 2008开发的,主要使用本地计算机进行测试和使用,完全可以运行。

3.2 产品需求规格说明<> 目标解决学生上传作业问题,教师可以将新作业传到该系统上,也可以在次系统上下载学生上传的作业,并将成绩上传供学生查看。

<> 用户的特点用户是机房管理员,对计算机技术比较了解,学校教师专业教师能很快熟悉系统的使用方法,非专业教师也能很快掌握,学校学生能很快学会使用系统。

<> 基本功能1.不同用户登录进入不同的界面2.学生作业的查看3.学生作业成绩的查看4.学生作业上传5.教师布置作业6.教师删除作业7.教师修改作业8.教师发布成绩9.教师修改成绩10.教师下载作业11.管理员添加教师用户12.管理员添加学生用户13.个人资料的查看14.个人密码的修改<> 假定与约束1.如果压缩文件夹的功能不能解决,那么只有教师到服务器拷贝文件夹2.如果学校觉得系统不能满足学生作业上传的需要,那么将不能放在机房,供学生使用3.如果遇到一些技术问题无法解决,那么将会加大系统的开发周期4.如果此系统在离开学期之前都无法开发成功,那么也不能提供给机房使用5.不同用户登录进入不同的界面6.管理员添加教师用户7.管理员添加学生用户8.个人资料的查看9.个人密码的修改<> 对性能的规定1.要求系统支持Microsoft .NET Framework 1.12.要求系统支持Microsoft SQL Server数据库<> 限制条件1.教师不可以进入管理员页面,还有学生页面;2.管理员也不可以进行学生和教师页面;3.每个学生登录进入之后只能看到自己班级的作业,不可以看到别的班级的作业;4.每个教师登录只对自己发布的作业进行管理不可以对别的教师发布的作业进行管理;5.当学生注册时输入的学号必需与选定的班级匹配;6.不同的用户使用修改密码都只能修改自己的密码,无法修改他人的;7.不同的用户使用个人数据功能时也是只可以看到自己的信息不可以看到他们的信息;8.学生上传作业的类型,大小,时间等,受到教师发布作业的约束。

<> 数据流图总数据图:细化后数据流图:图 2<> 数据字典<> E-R图Array图34、系统设计4.1 总体设计4.1.1 系统功能体系图4.1.3 功能模块设计在线作业提交批改系统从功能上可分为教师管理程序、学生管理程序和管理员管理程序,教师管理程序部分主要实现学生信息的添加、所交班级信息的添加、课程信息的添加、上传下载作业和评定成绩的管理,学生管理程序部分主要实现了学生对作业的下载和上传。

管理员具有系统的完全权限,管理员具有添加和删除教师的权限。

系统主要功能模块具体描述如下:<> 学生模块主要包括学生管理,主要功能:查看教师布置的作业,并下载作业,完成作业后提交到服务器,以及修改学生自己的基本情况等。

<> 教师模块主要包括搜索作业模块,布置作业模块,管理作业模块,,查看成绩模块,统计作业递交情况模块,修改资料模块。

搜索作业模块,主要功能:搜索教师自己所布置的作业学生递交情况。

<> 布置作业模块主要功能:教师编辑所布置的作业,向学生发布作业,以及指明是否允许学生上传作业。

<> 管理作业模块主要功能:下载作业,评阅作业,给学生打分,以及删除本次作业。

<> 修改资料模块主要功能:修改教师自己的基本信息情况。

<> 管理员模块主要包括教师管理,学生管理,系统配置管理,主要功能:增加,修改,删除教师用户,配置系统参数,配置上传文件类型。

4.2 数据库设计4.2.1 数据库图4.2.2 数据库的约束与关系管理员表与其它表无关系只是为了存放管理员的帐号与密码等数据教师表里的ID字段为主键用于存放老师的ID学生表与教师表之间存在着外键约束,如果学生表里教师代号字段的值与教师表里面的学号代号值关键。

作业表也是最重要的一个表它同时与二个表存在着外键约束,teaname字段与教师的代号之间相关联。

4.3 特殊功能的原理4.3.1管理员添加教师管理员的原理管理员可以添加教师用户,教师用户必须由管理员添加,每次当管理员添加教师用户时就会在网站目录下的一个专门用于存放上传作业的目录(up)的根目录下以教师的姓名为目录名新建一个根目录。

用于教师布置作业之后,学生上传作业的存放目录。

4.3.2 教师发布修改作业的原理老师发布作业之后可以修改作业,而且二个功能都是使用的一个界面来完成,通过传递的一个参数来判断用户的操作是发布作业还是修改作业,如果是修改作业而取得一个ID值将数据库里的内容绑定到用户界面。

4.3.3 教师发布修改成绩的原理教师发布成绩或修改成绩的原理和教师发布修改作业的原理大至一样,都是使用一个页面来完成的,通过一个参数来判断用户的操作是发布还是修改。

4.3.4 教师批量下载作业的原理教师批量下载作业是将学生上传后的作业全部打包成一个zip的压缩文件,然后从服务器上下载。

4.3.5 学生上传下载作业的原理学生上传作业的时候,首先应该选择上传哪个教师哪一次的作业。

5、主要功能模块界面及编码实现5.1 系统运行资源管理图5.2 登录界面及编码屏幕切换编码:<SCRIPT language=JavaScript type=text/javascript>if (self != top) {top.location = self.location;}function switchSysBar() {if (switchPoint.innerHTML == '&lt;') {switchPoint.innerHTML = '&gt;'document.getElementById("frmTitle").style.display = "none";}else {switchPoint.innerHTML = '&lt;'document.getElementById("frmTitle").style.display = "block";}}function changeMainFrameSrc(url) {//alert(url);document.getElementById("mainFrame").src = url;}</SCRIPT><TABLE border=0 cellSpacing=0 cellPadding=0 width="100%" height="100%"><TBODY><TR><TD id=frmTitle height="100%" vAlign=center noWrap align=middle><IFRAME id=nagFrame class=iframe1 src="nag.htm" frameBorder=0name=nagFrame></IFRAME></TD><TD class=td2><TABLE border=0 cellSpacing=0 cellPadding=0 height="100%"><TBODY><TR><TD onclick=switchSysBar()><FONTclass=switchbarfont><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><SPAN id=switchPoint class=navPoint title=关闭/打开左栏>&lt;</SPAN> <BR><BR><BR><BR><BR><BR><BR><BR>屏幕切换</FONT></TD></TR></TBODY></TABLE></TD><TD style="WIDTH: 100%"><IFRAME id=mainFrame class=iframe2src="login.aspx"" frameBorder=0 name=mainFramescrolling=yes></IFRAME></TD></TR></TBODY></TABLE><SCRIPT language=JavaScript type=text/javascript>if (window.screen.width < '1024') { switchSysBar() }</SCRIPT>5.3 管理员添加用户界面及编码protected void b_register_Click(object sender, EventArgs e){string user = "";string scmd="";if (r_admin.Checked == true){user = "admin";scmd = string.Format("insert into admin(username,adminid,password,name) values ('{0}','{1}','{2}','{3}');",t_username.Text.ToString(),t_id.Text.ToString(),t_i d.Text.ToString(),t_name.Text.ToString());}else if (r_student.Checked == true){user = "student";scmd = string.Format("insert into student(username,stuid,password,stuname,sex,grade,class) values('{0}','{1}','{2}','{3}','{4}','{5}','{6}');",t_username.Text.ToString(),t_id.Text.ToString(), t_id.Text.ToString(), t_name.Text.ToString(),t_sex.Text.ToString(), t_grade.Text.ToString(), t_class.Text.ToString());}else{user = "teacher";scmd = string.Format("insert into teacher(username,teaid,password,teaname,sex,fuction) values ('{0}','{1}','{2}','{3}','{4}','{5}');",t_username.Text.ToString(),t_id.Text.ToString(),t_id.Text.ToString(),t_name.Text.ToString(),t_sex.Text.ToString(),t_fuction.Text.ToString());}if (t_id.Text.ToString() == ""){Page.ClientScript.RegisterStartupScript(Page.GetType(), "", string.Format("<script>alert('请输入用户名!');</script>"));}else if (t_name.Text.ToString() == ""){Page.ClientScript.RegisterStartupScript(Page.GetType(), "", string.Format("<script>alert('请输入姓名!');</script>"));}else{string sconn = @"server=(local)\SQLEXPRESS;database=homework;Trusted_Connection=True";SqlConnection conn = new SqlConnection(sconn);conn.Open();SqlCommand cmd = new SqlCommand(scmd, conn);cmd.ExecuteNonQuery();conn.Close();Page.ClientScript.RegisterStartupScript(Page.GetType(), "", string.Format("<script>alert('添加成功!');</script>"));Response.Redirect("admin.aspx");}5.4教师发布修改作业界面及编码protected void Page_Load(object sender, EventArgs e){if (Session["username"] == null){Response.Redirect("menus.htm");}else{ teachername = Session["username"].ToString();SetBind();}}private void SetBind(){DataSet ds = new DataSet();string sconn = @"server=(local)\SQLEXPRESS;database=homework;Trusted_Connection=True";SqlConnection conn = new SqlConnection(sconn);SqlDataAdapter da = new SqlDataAdapter(string.Format("select ID,title,num,conten from work where teaname='{0}'", teachername), conn);da.Fill(ds);GridView1.DataSource = ds;GridView1.DataBind();conn.Close();}protected void b_addhomework_Click(object sender, EventArgs e){string path = string.Format("/work/{0}",t_addhomework.Text.ToString());//目录在E盘if (!Directory.Exists(path)){string sconn = @"server=(local)\SQLEXPRESS;database=homework;Trusted_Connection=True";SqlConnection conn = new SqlConnection(sconn);conn.Open();string scmd=string.Format("insert work(title,teaname,num,conten) values('{0}','{1}','0','{2}')",t_addhomework.Text.ToString(),teachername,TextBo x1.Text.ToString());SqlCommand cmd = new SqlCommand(scmd,conn);cmd.ExecuteNonQuery();conn.Close();Directory.CreateDirectory(path);Page.ClientScript.RegisterStartupScript(Page.GetType(), "", string.Format("<script>alert('添加成功!');</script>"));}else{Page.ClientScript.RegisterStartupScript(Page.GetType(), "", string.Format("<script>alert('已经有该作业文档,请重新命名!');</script>"));}}protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e){if (mandName == "Select"){int iIndex = Convert.ToInt16(mandArgument);string title = GridView1.DataKeys[iIndex].Value.ToString();Response.Redirect(string.Format("showwork.aspx?title={0}", title)); }}protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e){int iIndex = Convert.ToInt16(e.RowIndex);string ID = GridView1.DataKeys[iIndex].Value.ToString();string sconn = @"server=(local)\SQLEXPRESS;database=homework;Trusted_Connection=True";SqlConnection conn = new SqlConnection(sconn);string scmd = string.Format("delete from work where title='{0}'",ID); conn.Open();SqlCommand cmd = new SqlCommand(scmd, conn);cmd.ExecuteNonQuery();conn.Close();SetBind();Page.ClientScript.RegisterStartupScript(Page.GetType(), "", string.Format("<script>alert('删除成功!');</script>"));}5.5教师批量下载作业界面及编码protected void Button2_Click(object sender, EventArgs e){hello();string strtxtPath = strFileUploadPath;string strzipPath = strFileUploadPath+"\\free.zip";System.Diagnostics.Process Process1 = new System.Diagnostic s.Process();Process1.StartInfo.FileName = "Winrar.exe";Process1.StartInfo.CreateNoWindow = true;////压缩c:\freezip\free.txt(即文件夹及其下文件freezip\free.txt)////到c:\freezip\free.rar// strzipPath = "C: \\freezip\\free";//设置压缩方式为.zipProcess1.StartInfo.Arguments = " a -afzip " + strzipPath + " " + strtxtPath;//// 3Process1.Start();if (Process1.HasExited){int iExitCode = Process1.ExitCode;if (iExitCode == 0){Response.Write(iExitCode.ToString() + " 正常完成");}else{Response.Write(iExitCode.ToString() + " 有错完成");}}5.6学生上传作业界面及编码private void hello(){strFileUploadPath = string.Format("D: \\work\\{0}\\", title );string ID = Request.QueryString["ID"].ToString();SqlConnection conn = new SqlConnection(@"server=(local)\SQL EXPRESS;database=homework;Trusted_Connection=True");conn.Open();SqlCommand cmd = new SqlCommand(string.Format("select * f rom work where ID={0}", ID), conn);SqlDataReader read = cmd.ExecuteReader();read.Read();teacher = read["teaname"].ToString();title = read["title"].ToString();conn.Close();}private void InitFileList(){hello();strFileUploadPath = string.Format("D: \\work\\{0}\\", title );//组合成物理路径file:///D:\homework\pic\//string strFilePath = Server.MapPath(strFileUploadPath);//读取文件夹下所有文件FileInfo[] arrFiles = new DirectoryInfo(strFileUploadPath). GetFiles();//把文件名逐一添加到列表框控件控件foreach (FileInfo fi in arrFiles)lb_FileList.Items.Add();}private void InitUploadLimit(){//从config中读取上传文件类型限制并根据逗号分割成字符串数组string[] arrFileTypeLimit = ConfigurationManager.AppSettings ["FileTypeLimit"].ToString().Split(',');//从config中读取上传文件大小限制double iFileSizeLimit = Convert.ToInt32(ConfigurationManager .AppSettings["FileSizeLimit"]);//遍历字符串数组把所有项加入项目编号控件for (int i = 0; i < arrFileTypeLimit.Length; i++)bl_FileTypeLimit.Items.Add(arrFileTypeLimit[i].ToString ());//把文件大小限制赋值给标签lab_FileSizeLimit.Text = string.Format("{0:f2} M", iFileSiz eLimit / 1024);}hello();strFileUploadPath = string.Format("D: \\work\\{0}\\", title );int itemNo = (Int16)(lb_FileList.Items.Count - 1);do{ListItem item;item = lb_FileList.Items[itemNo];if (lb_FileList.Items[itemNo].Selected){string strFileName = lb_FileList.SelectedVal ue;//组合成物理路径string strFilePhysicalPath = strFileUploadPa th + strFileName;Response.Clear();Response.ContentType = "application/octet-str eam";Response.AddHeader("Content-Disposition", "att achment;FileName=" + HttpUtility.UrlEncode(strFileName, System.Text.Encoding .UTF8));Response.WriteFile(strFilePhysicalPath);Response.End();5.7数据库类编码hello();//判断用户是否选择了文件if (FileUpload.HasFile){//调用自定义方法判断文件类型是否符合要求if (IsAllowableFileType()){//调用自定义方法判断文件大小是否符合要求if (IsAllowableFileSize()){if (FileUpload.HasFile){strFileUploadPath = string. Format("D: \\work\\{0}\\", title);string filename = FileUplo ad.FileName;string filenewname = Sessi on["ID"].ToString();string fileext = Path.GetE xtension(filename);string strFileName = Serve r.MapPath(filenewname + fileext);FileUpload.SaveAs(strFileUplo adPath + filenewname + fileext);SqlConnection conn = new SqlConnection(@"server=(local)\SQLEXPRESS;database=homework;Trusted_Connection= True");conn.Open();SqlCommand cmd1 = new Sql Command(string.Format("select * from student where username='{0}'", Sessi on["username"].ToString()), conn);SqlDataReader read1 = cmd1 .ExecuteReader();read1.Read();string stuid = read1["stui d"].ToString();string stuname = read1["st uname"].ToString();read1.Close();SqlCommand cmd2 = new Sql Command(string.Format("select * from teacher where teaname='{0}'", teache r), conn);SqlDataReader read2 = cmd2 .ExecuteReader();read2.Read();string teaid = read2["teai d"].ToString();string teaname = read2["te aname"].ToString();read2.Close();SqlCommand cmd3 = new Sql Command(string.Format("insert into homework(title,stuname,teaname,stuid,teaid ,mark) values ('{0}','{1}','{2}','{3}','{4}','0')", title, stuname, teanam e, stuid, teaid), conn);cmd3.ExecuteNonQuery();conn.Close();lb_FileList.Items.Add(filenewname + fileext);//更新文件夹信息InitFolderInfo();//调用自定义方法显示提示ShowMessageBox("文件成功上传");}else{//调用自定义方法显示提示ShowMessageBox("文件大小不符合要求,请参看上传限制");}}else{//调用自定义方法显示提示ShowMessageBox("文件类型不符合要求,请参看上传限制");}}5.9 其他功能protected void btnSubmit_Click(object sender, EventArgs e){string user = Session["user"].ToString();string sconn = @"server=(local)\SQLEXPRESS;database=homework;Trusted_Connection=True";SqlConnection conn = new SqlConnection(sconn);conn.Open();SqlCommand cmd = new SqlCommand(string.Format("update {0} set password='{1}' where (username='{2}')", user,txtPwd.Text.ToString(), txtName.Text.ToString()),conn);cmd.ExecuteNonQuery();conn.Close();Page.ClientScript.RegisterStartupScript(Page.GetType(), "", string.Format("<script>alert('修改成功!');</script>"));}6、实验心得经过小组的共同的努力,作业提交系统终于完成了,实现了需求分析的基本功能,基本满足了作业上传及批量下载的需求,开发过程中一开始一直在实现界面的优化,发现后续工作一团糟,只能全部重来,然后将问题弄清楚,明白了需求分析才知道什么事设计主体,然后按照需求分析一步步完成,当有不会时,尽量查更多的书,也有网上搜索,是在解决不掉的,也就只能放弃这个功能,对于批量下载,一开始很难实现,然后才知道asp中也有一个类能实现,可是都是英文的,花了相当一段时间才看明白了,现在基本能实现了,软件工程的分析对开发一个系统影响很大。

相关主题