社团管理系统详细设计说明书

<社团管理系统> 详细设计说明书 [V1.0(版本号)] 拟 制 人 审 核 人 [ 年 月 日 ] 目录 1.引言 3 1.1编写目的 3 1.2项目背景 3 1.3定义 3 1.4参考资料 3 2.总体设计 4 2.1需求概述 4 2.2软件结构 5 3.程序描述 6 3.1功能 6 3.2性能 8 3.3运行环境及设备要求 9 3.4算法 9 3.5程序逻辑 21 3.6数据库设计 22 3.7测试要点 25 1.引言 1.1编写目的 本说明书在概要设计的基础上,对信息发布系统的各模块、程序分别进行了实现层面上的要求和说明。

1.2项目背景 l 项目全称:厦门理工学院社团管理系统 l 项目发起者:09软件工程班小组 l 项目开发者:09软件工程班小组 l 项目用户:厦门理工的广大师生 1.3定义 USE CASE 用例 会员 社团管理系统中合法的注册用户 游客 未注册或者未登录的社团管理系统平台浏览者 管理员 系统的管理者 1.4参考资料 [1] 天极网新技术研究室.ASP.NET完全入门.人民邮电出版社,2001.6 [2] Sanjeev Rohilla等著,陈君等译.ADO.NET专业项目实例开发.中国水利水电出版社,2003.5 [3] 启明工作室编著.ASP.NET网络应用系统开发与实例.人民邮电出版社,2005.7 [4] 王华杰,李律松 孙一波等编著.C#数据库开发技术.清华大学出版社,2003.2 [5] 攀建编著.ASP.NET+ADO.NET项目开发实例.清华大学出版社,2004.1 [6] (美)A.Russell Jones著,高春蓉等译.ASP.NET从入门到精通.电子工业出版,2002.1 [7] Scott Worley著,王文龙 刘湘宁译.ASP.NET技术内幕.人民邮电出版社,2002.4 [8] Russ Basiura等著,杨浩译.ASP.NET Web 服务高级编程.清华大学出版社, 2003.2 [9] (美)Angshuman Chakraborti等著,唐云深,赵世华等译.NET Framework专业项目实例开发..中国水利水电出版社,2003.6 [10] Scott Allen等著.C#数据库入门.郝启堂 张哲峰译.清华大学出版社,2003.2 [11] (美)微软公司著.NET框架1.1类库参考手册.清华大学出版社,2004.1 [12] Steve Walther著.ASP.NET:Tips,Tutorials,and Code.电子工业出版社,2003.7 [13] (美)Jeffrey Richte著.Microsoft.NET Frameworks.清华大学出版社,2003.4 [14] Alex Homer等.ASP.NET Web Forms Programming.清华大学出版社,2003.1 2.总体设计 2.1需求概述 社团管理系统需要满足来自三方面的需求,这三个方面分别是会员、社团和管理员。会员的需求是查询院系各社团的活动情况、会员参加的各个社团情况及会员信息的修改;
社团需对会员参加社团、注销社团的基本情况进行操作;
社团管理系统的管理员的功能最为复杂,包括对会员、社团的活动等各方面的信息进行管理和统计,及系统状态的查看、维护并生成会员社团统计表。会员可以直接查看参加社团及社团活动情况,会员可以根据本人学号和密码登录系统,还可以进行对本人参加社团情况的查询和维护部分个人信息以及各社团的活动安排等相关信息。一般情况下,会员只应该查询和维护本人的参加社团情况和个人信息,若查询和维护其他会员的信息,就要知道其他会员的学号和密码。这些是很难得到的,特别是密码,所以不但满足了会员的要求,还保护了会员的个人隐私。

社团工作人员有修改会员个人信息的权限,所以需对工作人员登陆本模块进行更多的考虑。在此系统中,社团工作人员可以为会员加入社团或是登陆记录,并打印生成相应的报表给用户查看和确认院系管理人员功能的信息量大,数据安全性和保密性要求最高。本功能实现对会员参加各社团相关信息的查询和统计、工作人员和管理人员信息查看及维护。社团管理员可以浏览、查询、修改、统计社团的基本信息;
浏览、查询、统计和修改会员参加社团活动的基本信息,设计不同用户的操作权限和登陆方法对所有用户开放的会员信息查询和个人部分信息维护查看个人情况信息维护会员个人密码根据注册的情况对数据库进行操作并生成报表。

社团管理系统的数据流程:首先由社团工作人员或系统管理员等有录入权限的用户将各自权限范围内的信息进行录入处理,然后保存信息到数据库中。有权限的人可以对这些库信息进行修改和删除处理。所有用户均可以进行信息查询和统计,没有权限用户还可以基于注册界面进行注册,来参加相应的社团。

2.2软件结构 本程序采用B/S架构,并使用了四层逻辑结果,如图1所示:
数据层(DB) 数据访问层(DAL) 业务逻辑层(BLL) 用户层(UI) 图1 系统结构示意图 以下为用户社团管理系统流程图,也是我们的核心工作流程图,如图2所示:
图2 系统流程图 3.程序描述 3.1功能 工作流程为:
打开该系统网站,普通浏览者能浏览、阅读和社团信息及新闻,能进行注册,注册后为网站准会员,系统管理员登录进入新闻后台管理区,可以进行如下管理:
l 社团信息管理 u 删除和修改社团信息 u 对已有社团进行部门管理 u 对社团章程管理 u 对社团的活动信息进行管理 u 添加社团(注:授权码最为重要,它将在社团注册时为唯一识别码)
l 管理员信息管理 u 添加管理员 u 修改或删除管理员信息 l 新闻管理 u 公告管理(添加、删除和修改)
u 新闻管理(添加、删除和修改)
l 用户管理 u 个人用户管理(添加、删除和修改)
u 协会用户管理(添加、删除和修改)
l 下载管理 u 表格管理(修改和删除)
u 资料管理(删除和修改)
u 添加信息(添加下载资料)
l 留言管理 u 个人留言管理(回复和删除留言)
l 图片管理 u 添加图片 u 删除图片 u 修改图片 l 实用信息管理 u 添加使用信息 l 系部管理(添加、删除和修改系部)
3.2性能 该系统操作简单、界面友好: 完全控件式的页面布局,使得社团信息及新闻的录入工作更简便,为用户提供方便快捷的社团管理及相关信息的发布,更将作为一个向外部展示本学校的社团建设成就。

即时可见:对社团信息的处理(包括录入、修改、删除)将立即在主页的对应栏目显示出来,达到“即时发布、即时见效”的功能;

系统运行应该快速、稳定、高效和可靠;

在结构上应具有很好的可扩展性,便于将来的功能扩展和维护。

3.3运行环境及设备要求 设备 客户机硬件要求:具有 Pentium III 处理器以上且满足以下要求的计算机:最低 64 MB 内存,最小 2.1 GB 硬盘。

服务器硬件要求:具有 Pentium III 处理器以上且满足以下要求的计算机:最低 256MB 内存,最小 8 GB 硬盘。

支持程序 客户端 操作系统:Windows 98/NT/2000/XP或更高版本 浏览器:IE 5.0以上或Netscape同等版本以上 服务器 操作系统:Windows 2000 Server或者Windows 2003 Server Web服务器:MS IIS 应用服务器:IIS、COM+等企业级应用服务器 数据库:SQL SERVER 3.4算法 重要算法及部分代码 Web用户控件 该系统中创建了两个Web用户控件Foot.ascx和Head.ascx,在首页、新闻动态、社联简介、资料下载等页面的HTML代码里都进行了引用,调用方式为:
<%@ Register Src=“../WebControl/Head.ascx“ TagName=“Head“ TagPrefix=“uc1“ %> <%@ Register Src=“../WebControl/Foot.ascx“ TagName=“Foot“ TagPrefix=“uc2“ %> @ Register指令注册用户控件,同时把属性TagName(标签名)和TagPrefix(标签前缀)添加到@ Register指令中,Src属性表示该用户控件相对于父页面的相对地址。用户控件也是服务器端控件,还必须在用户控件代码中添加Runat=server属性,用法如下:
<uc1:Head ID=“Head1“ runat=“server“ /> <uc2:Foot ID=“Foot1“ runat=“server“ /> 其中Head.ascx用户控件作用是显示导航栏Flash按钮,Foot.ascx用户控件作用是显示底部相关网站信息等。

用户控件是非常易于代码重用的,可以把许多相关功能和用户界面封装在一个用户控件中,然后在任何需要该功能的地方重用此控件。

通用类代码 在所有相关页面显示文件和Web用户控件的代码隐藏文件.aspx.cs或.ascx.cs中,通过对数据访问类的引用(以创建类实例方式),调用数据访问类里的相应函数完成相关功能,如建立数据库连接、打开和关闭数据库、对数据库执行查询、插入、删除和更新操作、页面登陆检验等。

此处列举Dbhelp类(数据访问类)中主要函数的源码:
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.SqlClient; using System.Text; using System.Text.RegularExpressions; /// <summary> /// Dbhelp 的摘要说明 /// </summary> public class Dbhelp { protected static string con = ConfigurationManager.ConnectionStrings[“connstr“].ToString(); public SqlConnection conn = new SqlConnection(con); //public SqlConnection conn = new SqlConnection(“Data Source=.;Initial Catalog=Studentdatabase;uid=sa;pwd=123456;“); #region 用户登录验证 /// <summary> /// 验证用户是否是合法用户 /// </summary> /// <param name=“sql“>接受SQL语句</param> /// <returns></returns> public int CheckLogin(string sql) { try { SqlCommand cmd = new SqlCommand(sql, conn); if (conn.State == ConnectionState.Closed) { conn.Open(); } int result = (int)cmd.ExecuteScalar(); return result; } catch (Exception ex) { HttpContext.Current.Response.Write(ex.Message); throw; } } #endregion #region 用户信息提示 /// <summary> /// 对话框信息 /// </summary> /// <param name=“TxtMessage“>接受要显示给用户的信息</param> public void MessageShowBox(string TxtMessage) { HttpContext.Current.Response.Write(“<script language='javascript' type='text/javascript'>alert('“ + TxtMessage + “')</script>“); } #endregion #region 查询数据库信息 /// <summary> /// 数据填充 /// </summary> /// <param name=“sql“>接受SQL语句</param> /// <returns>返回DataSet类型数据ds</returns> public DataSet GetData(string sql) { try { DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(sql, conn); if (conn.State == ConnectionState.Closed) { conn.Open(); } da.Fill(ds, “DataTable“); return ds; } catch (Exception ex) { HttpContext.Current.Response.Write(ex.Message); throw; } } #endregion #region 数据库信息更新 /// <summary> /// 实现数据库的更新 /// </summary> /// <param name=“sql“>接受Sql语句</param> /// <returns>返回受影响行数</returns> public int Exucte(string sql) { try { SqlCommand cmd = new SqlCommand(sql, conn); if (conn.State == ConnectionState.Closed) { conn.Open(); } int result = cmd.ExecuteNonQuery(); return result; } catch (Exception ex) { HttpContext.Current.Response.Write(ex.Message); throw; } } #endregion #region 读取数据库数据 public DataSet Excute1(string sql) { DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(sql,conn); if (conn.State == ConnectionState.Closed) conn.Open(); da.Fill(ds,“News“); if (conn.State == ConnectionState.Open) conn.Close(); return ds; } #endregion #region Session传值判断注册身份 public void TeamAdd() { HttpContext.Current.Session[“identity“] = “团体注册“; HttpContext.Current.Response.Redirect(“Register.aspx“); } public void Person() { HttpContext.Current.Session[“identity“] = “个人注册“; HttpContext.Current.Response.Redirect(“Register.aspx“); } #endregion #region 获取数据库字段 public SqlDataReader GetRed(string sql) { SqlCommand cmd = new SqlCommand(sql,conn); if (conn.State == ConnectionState.Closed) conn.Open(); SqlDataReader red = cmd.ExecuteReader(); return red; red.Close(); conn.Close(); } #endregion } 前台主要页面代码 1. 首页 1) 填充首页各信息控件模块:
Application[“UserInfor“] = string.Empty;//将用户登陆信息置空 GVNews.DataSource = dh.GetData(“select top 6 * from News order by NewID desc“);//读取最新前六条新闻 GVNews.DataBind(); TxtName.Focus(); GvDonload.DataSource = dh.GetData(“select top 5 DName,Id from Download order by Id desc“);//读取最新下载资料 GvDonload.DataBind(); GvLeague.DataSource = dh.GetData(“select top 5 * from League_Table order by ID desc“);//填充协会信息模块 GvLeague.DataBind(); DataSet ds = dh.GetData(“select top 1 Contents from Affiche order by Id desc“);//填充通告模块 if(ds.Tables[0].Rows.Count>0) LblAd.Text = ds.Tables[0].Rows[0][0].ToString(); GVActivity.DataSource = dh.GetData(“select top 5 Name,Activity,ID from League_Table where IntActivity=1 order by ID desc“); GVActivity.DataBind();//填充社团活动新闻信息模块 ds = dh.GetData(“select top 1 Viscera from News order by NewID desc“); //填充专题报道信息模块 if(ds.Tables[0].Rows.Count>0) LblReport.Text = ds.Tables[0].Rows[0][0].ToString(); DataList1.DataSource = dh.GetData(“select * from ShowImage“); DataList1.DataKeyField = “Id“;//根据主键:Id读取数据库中新闻图片的存储路径用以动态填充图片新闻模块 DataList1.DataBind(); DataList2.DataSource = dh.GetData(“select top 6 * from UrlMessege order by Id desc“); DataList2.DataBind();//填充实用信息模块 在HTML代码中对后台代码的Data数据集进行调用:<marquee id=“marquee3“  onmouseover=this.stop() onmouseout=this.start() behavior=“scroll“ direction=“left“ scrollamount=“3“ style=“width: 859px; height: 103px; border-right: #ccffff thin double; border-top: #ccffff thin double; border-left: #ccffff thin double; border-bottom: #ccffff thin double; text-align: right;“><A style=“BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none“ href=“Association.aspx“></A>&nbsp;<A style=“BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none“ onmouseover=“show()“ href=“Association.aspx“></A>&nbsp;<A style=“BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none“ href=“Association.aspx“></A>&nbsp;<A style=“BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none“ href=“Association.aspx“></A> <asp:DataList id=“DataList1“ runat=“server“ __designer:wfdid=“w2“ RepeatDirection=“Horizontal“><ItemTemplate> <asp:Image id=“ImageShow“ AlternateText=“风景如画“ Height=“120“ Width=“90“ runat=“server“ ImageUrl='<%#Eval(“FilePhotoPath“) %>' __designer:wfdid=“w3“></asp:Image> 2. 下载页面代码:
1) 实现下载功能代码:
从数据库中读取文件路径:
string num = ds.Tables[0].Rows[0][0].ToString(); string FilePath = ds.Tables[0].Rows[0][1].ToString(); 判断数据库文件类型:
if (FilePath.Trim() == “Word文件“) { filetype = “DownLoad_Doc“; filepostfix = “.doc“; } else if (FilePath.Trim() == “Excel表格“) { filetype = “DownLoad_xls“; filepostfix = “.xls“; } string fileName = num + filepostfix;//客户端保存的文件名 string filePath = Server.MapPath(filetype + “/“ + fileName);//路径 //以字符流的形式下载文件 FileStream fs = new FileStream(filePath, FileMode.Open); byte[] bytes = new byte[(int)fs.Length]; fs.Read(bytes, 0, bytes.Length); fs.Close(); Response.ContentType = “application/octet-stream“; //通知浏览器下载文件而不是打开 Response.AddHeader(“Content-Disposition“, “attachment; filename=“ + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)); Response.BinaryWrite(bytes); Response.Flush(); Response.End(); 3.留言本实现代码:
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.SqlClient; public partial class Message : System.Web.UI.Page { Dbhelp dh = new Dbhelp(); public string sql = “select top 5 * from Massage order by Id desc“;//从数据库中读取前五条最新留言 protected void Page_Load(object sender, EventArgs e) { DLBinit(sql); } #region 绑定数据 protected void DLBinit(string sql) { //用数据适配器对DataSet数据集进行填充留言本内容 if (dh.conn.State == ConnectionState.Closed) dh.conn.Open(); SqlDataAdapter da = new SqlDataAdapter(sql, dh.conn); DataSet ds = new DataSet(); da.Fill(ds, “table“); PagedDataSource ps = new PagedDataSource(); ps.AllowPaging = true;//允许分页功能 ps.PageSize = 5;//设置每页显示五条信息 ps.DataSource = ds.Tables[“table“].DefaultView; DataList1.DataSource = ps; DataList1.DataBind(); } #endregion protected void BtnMassage_Click(object sender, EventArgs e) {//点击留言按钮跳转到留言界面 Response.Redirect(“ReplyMassage.aspx“); } } 后台主要页面代码 1. 图片管理页面代码:
填充图片信息代码:
protected void DLBinit(string sql) {//进行填充已上传的图片进行填充模块 if (dh.conn.State == ConnectionState.Closed) dh.conn.Open(); SqlDataAdapter da = new SqlDataAdapter(sql, dh.conn); DataSet ds = new DataSet(); da.Fill(ds, “table“); PagedDataSource ps = new PagedDataSource(); ps.DataSource = ds.Tables[“table“].DefaultView; GridView1.DataSource = ps; GridView1.DataBind(); } 删除图片信息代码:
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) {//删除图片信息 int id = int.Parse(GridView1.DataKeys[e.RowIndex].Value.ToString()); string sql = “select * from ShowImage where Id='“ + id + “'“; DataSet ds = dh.GetData(sql); string filename = ds.Tables[0].Rows[0][1].ToString(); try { string[] value = filename.Split('/'); filename = value[2].ToString(); } catch (Exception) { dh.MessageShowBox(“删除失败!“); return; } 物理删除图片代码:
string filepath = Server.MapPath(“~“)+“/ShowImage/“ + filename; if (File.Exists(filepath))//判断文件是否存在 { File.Delete(filepath);//进行物理删除文件 sql = “delete ShowImage where Id='“ + id + “'“;//删除数据库中文件信息 if (dh.Exucte(sql) > 0) { sql = “select * from ShowImage“; DLBinit(sql);//删除后重新进行填充模块 } } else { dh.MessageShowBox(“删除失败!“); } 2. 资料信息管理代码:
删除下载资料代码:
protected void GVAdminLoad_RowDeleting(object sender, GridViewDeleteEventArgs e) {//删除下载资料信息 string sql = “select DName from DownLoad where Id='“+GVAdminLoad.DataKeys[e.RowIndex].Value.ToString()+“'“; DataSet ds = dh.GetData(sql); string name = ds.Tables[0].Rows[0][0].ToString(); string filepath = Server.MapPath(“~“)+“\\DownLoad_Doc\\“ + name + “.doc“; if (File.Exists(filepath)) {//物理删除下载资料信息 File.Delete(filepath); int id =int.Parse(GVAdminLoad.DataKeys[e.RowIndex].Value.ToString()); sql = “delete DownLoad where Id='“ + id + “'“; if (dh.Exucte(sql) > 0) { DataBinit(); } } else { dh.MessageShowBox(“删除失败!“); return; } } 添加下载资料信息代码:
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.SqlClient; using System.IO; public partial class Web_Admin_AdminSource : System.Web.UI.Page { string filepath = ““; string filepostfix = ““; Dbhelp dh = new Dbhelp(); protected void Page_Load(object sender, EventArgs e) { TxtName.Focus(); } protected void BtnSubmit_Click(object sender, EventArgs e) {//进行添加下载资料信息 string str = FUFile.PostedFile.FileName; if (str == String.Empty) { dh.MessageShowBox(“附件不能为空!!“); return; } this.GetFilePath(); filepostfix = str.Substring(str.LastIndexOf(“.“)); try {//判断上传资料文件类型 if (DDLType.Text.Trim() == “Word文件“) { if (filepostfix != “.doc“) { dh.MessageShowBox(“请附加正确的Word文件“); return; } } else if (DDLType.Text.Trim() == “Excel表格“) { if (filepostfix != “.xls“) { dh.MessageShowBox(“请附加正确的Excel表格“); return; } } //将文件进行物理添加 string filename = str.Substring(str.LastIndexOf(“\\“) + 1); string name = filename.Substring(0,filename.Length-4); string path = “../../“ + filepath + “/“ + filename; FileInfo fileinfo = new FileInfo(str); long filesize = (fileinfo.Length / 1024) / 1024; if (filesize > 20) {//限制文件大小不能超过20兆 dh.MessageShowBox(“对不起,文件大小不能超过20MB!“); return; } //将所上传文件信息上传到数据库中 string sql = “insert into DownLoad (DName,DType) values('“ + name + “','“ + DDLType.Text.Trim() + “')“; if (dh.Exucte(sql) > 0) { this.FUFile.PostedFile.SaveAs(Server.MapPath(path)); dh.MessageShowBox(“上传成功!“); } else { dh.MessageShowBox(“上传失败!“); return; } } catch (Exception ex) { Response.Write(ex.Message); throw; } } #region 获取文件路径 protected void GetFilePath() { if (DDLType.Text.Trim() == “Word文件“) { filepath = “DownLoad_doc“; } else if (DDLType.Text.Trim() == “Excel表格“) { filepath = “DownLoad_xls“; } } #endregion protected void BtnCancel_Click(object sender, EventArgs e) { //Response.Redirect(““); } } 3.5程序逻辑 逻辑模型就是把概念模型,即E-R图,转换为与数据模型相符合的逻辑模型——关系模型。E-R图向关系模型转换,首先要进行数据的规范化。所谓规范化是指在一个数据结构中没有重复出现的项组。规范化是在关系数据库中减少数据冗余的过程。

具体E-R图向关系模型转换的结果如下所示,其中带下划线的为关键码:
普通会员:(会员编号、所属社团、姓名、届时、加入时期、职位、性别、出生日期、所在班级、所在系、寝室号、电话号码、备注)
社团:(社团编号、社团全称、社团负责人、社团创始人、主管单位、成立日期、社团性质、社团简介、备注)
活动表:(活动编号、活动主题、日期、审核状态、活动负责人、社联监查人员、承办单位、活动内容、备注)
社联:(社联届时、社联负责人、办公地点、联系电话、备注)
社团评优表:(社团编号、届时、总得分、备注)
财务:(社团编号、届时、金额、收入支出性质、经手人、日期、备注)系统E-R图 3.6数据库设计 数据库设计 该系统使用SQL SERVER作为应用程序的数据库,建立了有16张数据表,下面主要介绍以下9张具有代表性的表:Administration表用于存储管理员帐户的信息,AssociationInfor表用于存储协会部门信息,Depart表用于存储学院系部信息, DownLoad表用于存储下载资料的存储路径信息, LeagueLogin_Table表用于存储社团注册信息, LeagueRule表用于存储协会章程信息,Massage表用来存储留言信息,News表用来存储新闻信息,ShowImage表用来存储新闻图片的存储路径, 在6个数据表中,介绍一下新闻表和账户表如下:
Administration表如表3-6-1所示:
表3-6-1管理员信息表 Id为该表主键,Name为管理员名称,Pwd为密码。

AssociationInfo表如表3-6-2所示:
表3-6-2社团部门表 Id为该表主键,Department部门,Duty为部门职责,Rules协会章程。

Depart表如表3-6-3所示:
表3-6-3系部表 ID为该表主键,DepartName为系部名称,SpecialityName为所属系部的专业名称。

DownLoad表如表3-6-4所示:
表3-6-4资料下载表 Id为该表主键,Dname为资料标题,Dtimes为上传时间,Dtype为文件类型,DfileFhpoto为文件存储路径。

LeagueLogin_Table表如表3-6-5所示:
表3-6-5社团注册表 ID为该表主键,LeagueName为社团名称,LeaguePwd为密码,Name为负责人姓名,TeacherName为知道老师姓名,BiuldTime为成立时间,Depart为社团所属系别,Speciality为所属专业,Phone为社团联系电话,CheckCode为授权码,IntRule判断社团章程章程是否添加。

LeagueRule表如表3-6-6所示:
表3-6-6社团章程表 Id为该表主键,Name为章程所属社团名称,Rules为社团章程。

Massage表如表3-6-7所示:
表3-6-7留言信息表 Id为该表主键,Name为留言者名称,Times为留言时间,Contents为留言内容,Reply为管理员的回复内容。

News表如表3-6-8所示:
表3-6-8新闻表 NewID为该表主键,Name为新闻主题,Time为新闻发布时间,Viscera为新闻内容。

ShowImage表如表3-6-9所示:
表3-6-9图片信息表 Id为该表主键,FilePhotoPath为图片存储路径,PhotoName为图片名称。

3.7测试要点 软件测试就是在软件投入运行之前对软件的需求分析、设计规格说明和编码实现的最终审核,是保证软件质量的关键因素。即软件测试是为了发现错误而执行程序的过程。

当模块设计完成并经过编译没有错误之后,便要进行调试和测试,这是程序设计中一个非常重要的环节,只有通过在不同的应用环境下反复调试和测试,才能确保能实现其预期的目标和保障系统的可靠性,实用性的提高。

以下我选取登陆系统测试举例。首先进入登陆页面,如果漏输用户名、权限、密码任何一个而登录,则跳出消息提示:“请检查用户名、密码、权限是否为空”;
若输入用户名与权限、密码不符,则跳出消息提示:“请查看用户名、密码或用户权限是否正确,重新输入”;
用户名、权限及密码输入正确,不同身份进入不同的界面。

推荐访问:管理系统 社团 说明书