1、软件详细设计说明书项目名称:学生公寓信息管理系统 日期: 年 月 日1 引言11.1编写目的11。2 项目背景11。3 定义11。4 参考资料12 总体设计22.1 需求概述22.2 软件结构23 程序描述43.1 下面对各模块的功能,性能,输入,输出进行具体描述43。2 算法93.3 程序逻辑93.4 接口123。5测试要点124 数据库实现134。1 SQL Server2008数据库建立过程134。2表结构实现145 详细设计175。1登录模块的设计与实现185。2 主操作页面效果211 引言信息社会的高科技,商品经济化的高效益,使计算机的应用已普及到经济和社会生活的各个领域。计算机虽然
2、与人类的关系愈来愈密切,还有人由于计算机操作不方便继续用手工劳动。为了适应现代社会人们高度强烈的时间观念,学籍管理系统软件将会为教学办公室带来了极大的方便。1。1编写目的本需求的编写目的在于研究学籍管理系统软件的开发途径和应用方法,主要是为了对学生公寓管理系统进行使用和维护.本需求的预期读者是与学籍管理系统软件开发有联系的决策人,开发组成人员,扶助开发者,支持本项目的领导和公司人员,软件验证者。该需求充分利用计算机的功能实现对系统管理、信息录入、信息查询,信息打印等的自动化控制,将会使学生公寓管理工作大大减轻,方便友好的信息管理用户界面,简便的操作,完善的数据库管理,将会使得信息管理系统极大限
3、度地应用于现代化学生成绩管理,成为管理人员的得力助手。 1。2 项目背景 项目的委托单位:XXXXXXXX学院 主管部门:学生公寓管理委员会 该软件系统与其他系统的关系:与学生管理相关联。 1.3 定义 本需求的编写目的在于研究学籍管理系统软件的开发途径和应用方法。本 需求的预期读者是与学籍管理系统软件开发有联系的决策人,开发组成人员,扶助开发者,支持本项目的领导和公司人员,软件验证者。专门术语:Data processing 数据处理 feedback反馈DTE数据终端设备 transmission传输介质DCE数据数据设备 LAN局域网1。4 参考资料软件工程基础教程- 刘文,朱飞雪 主编
4、: 粘新育,陶洁 副主编:出版社: 北京大学出版社程序设计 - 尚俊杰 编著:出版社: 清华大学出版社SQL Server 2008 实用教程- 蒋文沛 主编: 韦善周,梁凡 副主编:出版社:人民邮电出版社软件工程案例教程,韩万江,机械工业出版社2 总体设计2。1 需求概述(1)、系统高级管理员功能的需求:A、学生查询信息管理:可浏览,添加,修改,删除所有学生信息。B、学生违纪信息管理:可浏览,添加,修改,删除所有违纪、考勤信息。C、用户信息管理:管理系统中所有登录用户的信息,分配用户的权限。D、系统后台信息管理:可浏览,添加,修改,删除后台的任务信息,包括数据管理,参数设定,权限设定(1)、
5、系统一般管理员功能的需求:A、晚归信息管理:可浏览所有晚归信息,添加,修改,删除属于自己添加的晚归信息。B、考勤信息管理:可浏览所有考勤信息,添加,修改,删除属于自己添加的考勤信息。3、系统一般用户功能的需求:A、公寓信息管理:可浏览一般的水电报修、卫生检查、物品管理等信息。B、学生违纪信息管理:可浏览一般的考勤信息。C、学生查询管理:可以浏览一般的学生数据信息.2.2 软件结构软件详细结构图1软件详细结构图2软件详细结构图3软件详细结构图43 程序描述3。1 下面对各模块的功能,性能,输入,输出进行具体描述 1、登录模块 功能:实现登录功能,输入用户名称和用户密码,正确则进入欢迎界面。不正确
6、则返回原来的界面。 性能:由注销功能调用。 输入项目:用户名称和用户密码. 输出项目:正则进入到欢迎界面,负则返回原来的界面。 2、学生查询 功能:实现学生身份查询功能.查询相关的学生信息。对于相应文本框类型,输入相应的内容,不相符合则提示出错。 性能:为用户提供学生信息查询界面。 输入项目:学生姓名,学号. 输出项目:班级,姓名、系部、班级、宿舍、籍贯等。 3、物品管理 功能:实现贵重物品进出宿舍区本月汇总情况。 性能:为用户提供物品管理信息本月汇总情况。 输入项目:日期。 输出项目:(本月汇总情况)汇总时间, ,班级,姓名,日期, 贵重物品名称、令,当前页数,总页数,项数。4、晚归管理 功
7、能:增加晚归信息。 性能:为用户提供增加晚归信息界面. 输入项目:区门,值班人员,日期,时间,系部,专业,班级,姓名,宿舍号,录入人员,晚归事由,晚归备注。 输出项目:正则提示增加成功,负则提示增加失败。5、考勤查询 功能:实现考勤信息功能. 性能:为用户提供考勤信息查询功能。 输入项目: 开始时间,结束时间,系部,专业,班级,学生姓名,页数。 输出项目: 考勤ID,班级,姓名,事件,日期,课时,备注,命令,页数,当前页数,项数。6、考勤管理 功能:实现考勤信息的增加。 性能:为用户提供考勤信息录入界面. 输入项目:事件,考勤教师,日期,系部,专业,班级,学生姓名,课时,录入人员,备注,事件事
8、由。 输出项目:考勤ID,班级,姓名,事件,日期,课时,备注,命令,页数,当前页数,项数.7、修改密码 功能:实现密码修改功能. 性能:为用户提供密码修改界面. 输入项目:用户旧密码,用户新密码,确认新密码. 输出项目:正则成功,负则失败。8、后台管理(1)、系部管理 功能:实现系部查询功能. 性能:为用户提供系部查询界面。 输入项目:系部名称。 输出项目:(系部信息)系部ID,系部名称,命令。页数,当前页数,项数.(2)、系部信息编辑: 功能:实现系部信息编辑功能。 性能:为用户提供系部信息编辑界面. 输入项目:系部名称。 输出项目: 正则成功,负则失败。(3)增加系部 功能:实现系部增加功
9、能。 性能:为用户提供系部增加界面。 输入项目:系部名称。 输出项目: 正则成功,负则失败。(4)、专业管理1)、专业查询 功能:实现专业信息查询功能。 性能:为用户提供专业信息查询界面。 输入项目:系部名称或专业名称.页数。 输出项目: 专业ID,专业名称,所属系部,命令,页数,当前页数。专业信息编辑2)、专业编辑 功能:实现专业信息编辑功能。 性能:为用户提供专业信息编辑界面。 输入项目:为修改的专业名称或要修改为的所属系部。 输出项目: 正则成功,负则失败.3)、增加专业 功能:实现专业增加功能。 性能:为用户提供专业增加界面. 输入项目:所属系部,专业名称。 输出项目: 正则成功,负则
10、失败。(5)、班级管理1)、班级查询 功能:实现班级信息查询功能. 性能:为用户提供班级信息查询界面. 输入项目:班级名称或专业名称或系部名称。 输出项目: 班级ID,班级名称,所属系部,所属专业,命令。班级信息编辑2)班级编辑 功能:实现班级信息编辑功能。 性能:为用户提供班级信息编辑界面。 输入项目:要修改为的班级名称或修改为哪个系,哪个专业. 输出项目: 正则成功,负则失败。(6)、增加班级 功能:实现班级增加功能. 性能:为用户提供班级增加界面。 输入项目:所属系部,所属专业,班级名称. 输出项目: 正则成功,负则失败.(7)事件管理 功能:实现增加事件和修改事件名称功能. 性能:这用
11、户提供增加事件和修改事件界面。 输入项目:事件名称或所修改的事件名称。 输出项目: 正则成功,负则失败.9、用户管理1)用户查询 功能:实现用户信息查询功能。 性能:为用户提供用户信息查询界面。 输入项目:用户名称 输出项目: 用户ID,用户名称,用户密码,一般权限,高级权限,用户说明,命令。用户信息编辑。2)、用户编辑 功能:实现用户信息编辑功能。 性能:为用户提供用户信息编辑界面. 输入项目:用户密码,权限,用户说明。 输出项目: 正则成功,负则失败。10、晚归信息编辑 功能:实现晚归信息编辑功能。 性能:为用户提供晚归信息编辑界面. 输入项目:区门,值班人员,日期,时间,系部,专业,班级
12、,学生姓名,宿舍号,录入人员,事由,备注. 输出项目: 正则成功,负则失败.11、考勤信息编辑 功能:实现考勤信息编辑功能。 性能:为用户提供考勤信息编辑界面。 输入项目:事件,考勤教师,日期,系部,专业,班级,姓名,课时,录入人员,备注,事由。 输出项目: 正则成功,负则失败.3.2 算法登录模块:该登录模块中应用选择算法,根据用户的要求选择不同的模式。学生查询模块:该登录模块中采用的算法基本同等级模块相同,为满足学生的要求可能将学生的查询条件进行相应的数据格式装换,确保系统的稳定,安全,可靠。物品管理模块:模块的实现算法简单没有具体要求,可以是顺序,也可以是选择,保证没有逻辑错误。晚归管理
13、模块:模块的实现算法简单没有具体要求,可以是顺序,也可以是选择,保证没有逻辑错误。考勤查询模块:该登录模块中采用的算法基本同等级模块相同,为满足学生的要求可能将学生的查询条件进行相应的数据格式装换,确保系统的稳定,安全,可靠。考勤管理模块:模块的实现算法简单没有具体要求,可以是顺序,也可以是选择,保证没有逻辑错误。修改密码模块:该登录模块中应用选择算法,可以按用户的输入要求进行相应的数据格式装换,确保系统的稳定,安全。后台管理模块:该模块中应用选择算法,根据管理员的选择要求选择不同的操作模式。用户管理模块:模块的实现算法简单没有具体要求,可以是顺序,也可以是选择,保证没有逻辑错误。晚归信息编辑
14、模块:该登录模块中应用选择算法,可以按用户的输入要求进行相应的数据格式装换,确保系统的稳定,安全。考勤信息编辑模块:该登录模块中应用选择算法,可以按用户的输入要求进行相应的数据格式装换,确保系统的稳定,安全。3.3 程序逻辑登录模块逻辑流程图:后台管理模块逻辑流程图:查询模块逻辑流程图:用户管理模块逻辑流程图:信息编辑模块逻辑流程图:3.4 接口 存储分配 限制条件1、软件资源:Window xp操作系统或更高以上操作系统, VS。net编程软件和SQL数据开发维护软件.2、硬件资源:具有VS。net应用软件计算机三到五台,具有SQL应用软件运行服务器一台。3.5测试要点测试工件为四个阶段:单
15、元测试、组装测试、确认测试、系统测试。单元测试:采用白盒法和黑盒法相结合的方法,对于逻辑结构复杂的模块采用白盒法,对于以输入、输出为主的模块采用黑盒法测试,以提高测试的效率。组装测试:自底向上的增式测试.确认测试:由用户参与按需求规格说明书验收。系统测试:采用人工测试方法.(1) 系统环境模块测本测试是为了检测系统环境模块,数据连接是否正确,数据能否正确,并进行仔细核对.(2) 基本信息测试基本信息模块是本系统的一个重要模块,本模块能否正确运行关系到系统设计成败的关键,所以有必要专门对这个之模块进行严格的测试。以弥补设计过程中的不足。及早发现和修改问题.(3) 查询模块的测试所有的数据库管理软
16、件设计的目的之一都是为了人们提供快捷方便的数据查询功能,查询设计的是否合理和正确是系统的又一关键之所在。4 数据库实现4。1 SQL Server2008数据库建立过程首先把SQL Server 2008的“服务管理器”打开,鼠标左键单击“开始/继续”按钮,然后在“开始”“程序”内选择“Microsoft SQL Server “企业管理器”。展开左边的程序树,如图22所示.在“数据库”文件夹图标上单击鼠标右键,选择“新建数据库,弹出新建数据库窗体,如图2-3所示.然后,开始建立本系统需要的数据库表,方法如下:首先,在新建的数据库上单击鼠标右键,选择“新建“表”,如图24所示。输入完表字段后,
17、为表的字段添加主键、约束和关系等,方法是在添加约束或关系的字段上单击鼠标右键,选择“设置主键”或“关系”等保存该表,命名为Student。接下来在建立本章需要的其他表,在此不再详述了。接下来就是如何向已经建立好的数据表内输入数据了,方法如下,首先在建立好的表上单击鼠标右键,选择“打开表”“返回所有行,如图27所示4.2表结构实现根据系统功能设计的要求以及功能模块的划分,对于系统用户信息数据库,可以列出以下数据项和数据结构:(1)、名称:学生信息表表名称标识:Student表数据来源:新生信息录入模块进行录入.表2-1学生信息表(Student)(2)、名称:学生成绩表表名称标识:Student
18、_course表数据来源:学生成绩录入模块进行录入。表2-2学生成绩表(Student_course)(3)、名称:用户表表名称标识:user表数据来源:用户管理模块进行录入表23用户表(user)(4)、名称:角色表表名称标识:Role表数据来源:角色管理模块进行录入表24课程表(role)(5)、名称:部门表表名称标识:Department表数据来源:部门管理模块进行录入表25用户表(Department)5 详细设计本系统主要实现学生信息的浏览、查询、编辑、添加和删除,同时对班级和课程进行管理,增加权限的管理。根据已有的需求分析和总体设计,我们在此基础上来进行系统的详细设计和实现,为此,
19、我们建立了一个C#.NET项目。在“开始菜单中找到“MircoSoft Visual Studio。Net 2010,启动应用程序,鼠标单击“文件” “新建 “项目”,单击“Visual C项目”,建立一个“Windows 应用程序”,命名为“StudentSystem,位置默认。如图29所示。图29新建C项目窗体然后我们把这个项目生成的默认窗体作为本系统的主窗体,我们再向这个项目中添加一个窗体,鼠标单击“项目”“添加Windows窗体,输入窗体名称为“Login”把新添加的窗体作为登陆窗体,调整窗体大小到合适值.修改该窗体的name属性为“Login”,text属性为“用户登陆”,Start
20、Position属性为“CenterScreen”,其他属性默认.我们接下来的所有窗体文件都是使用这种方法在这个项目中添加.5。1登录模块的设计与实现1用户身份验证IPO图输入:用户名和密码。处理:(1) 用户登录窗体启动。(2) 输入用户名和密码。(3) 从用户信息表中检查是否有相应的用户名和密码。(4) 如果用户名或密码为空或者错误,进行提示。(5) 如果输入的用户名和密码正确,则允许该用户进入系统。(6) 进入主控制平台。输出:主控制平台。2用户登录模块的窗体设计,如图210所示:图210用户登录模块的窗体效果3用户登录模块的主要代码using System;using System。C
21、ollections.Generic;using System。ComponentModel;using System。Data;using System。Drawing;using System.Linq;using System。Text;using System.Windows。Forms;using Proj。BLL;using Proj。Model;using System。Security.Cryptography;namespace UIpublicpartialclassfrmLogin : Form publicstaticstring strUserId,strUserPw
22、d;public frmLogin() InitializeComponent(); privatevoid btnCancel_Click(object sender, EventArgs e) Close(); privatevoid btnOk_Click(object sender, EventArgs e) string sUserId = tbUserId。Text;string sUserPwd = tbPwd。Text;string strId, strUser, strPwd, strRole;ListUser users = newUserManager()。GetUser
23、SelectByUserId(sUserId);if (users != null users。Count 0) strId = users0。UserId.Trim(); strUser = users0。UserName。Trim(); strPwd = users0.UserPwd.Trim(); strRole = users0。UserRole。Trim();if ( MD5(sUserPwd) != strPwd) MessageBox。Show(”用?户密码?错,?请?重?新?输?入?密码?!?); tbPwd.Text = ”; tbPwd。Focus();return; el
24、se /MessageBox.Show(用?户密码?正y确!?); strUserId = tbUserId。Text; strUserPwd = tbPwd。Text;Menu mnu = newMenu(); mnu。ShowDialog(); else MessageBox。Show(用?户号?错,?请?重?新?输?入?用?户号?!?”); tbUserId。Text = ”; tbPwd.Text = ”; tbUserId。Focus();return; publicstring MD5(string password) byte oriByte = newUnicodeEncodi
25、ng()。GetBytes(password);byte cryByte = newMD5CryptoServiceProvider().ComputeHash(oriByte);returnBitConverter。ToString(cryByte); privatevoid tbUserId_KeyDown(object sender, KeyEventArgs e) if (e。KeyCode = Keys。Enter) tbPwd。Focus(); privatevoid tbUserId_Validated(object sender, EventArgs e) ListUser u
26、sers = newListUser(); users = newUserManager().GetUserSelectByUserId(tbUserId。Text.Trim());if (users。Count 0) tbUserName。Text = users0。UserName。Trim(); privatevoid tbPwd_KeyDown(object sender, KeyEventArgs e) if (e。KeyCode=Keys。Enter) btnOk.Focus(); privatevoid frmLogin_Load(object sender, EventArgs
27、 e) 5。2 主操作页面效果1主控制平台的窗体设计,如图211所示:图211 用户登录模块的窗体效果3主控制平台的主要代码using System;using System。Collections.Generic;using System。ComponentModel;using System.Data;using System。Drawing;using System。Linq;using System.Text;using System。Windows.Forms;namespace UIpublicpartialclassMenu : Form privateint childForm
28、Number = 0;public Menu() InitializeComponent(); privatevoid ShowNewForm(object sender, EventArgs e) Form childForm = newForm(); childForm。MdiParent = this; childForm.Text = ”窗口 ” + childFormNumber+; childForm.Show(); privatevoid OpenFile(object sender, EventArgs e) OpenFileDialog openFileDialog = ne
29、wOpenFileDialog(); openFileDialog.InitialDirectory = Environment。GetFolderPath(Environment。SpecialFolder.Personal); openFileDialog。Filter = ”文?本?文?件t(*.txt)*.txt所有D文?件t(*.)|*.;if (openFileDialog。ShowDialog(this) = DialogResult.OK) string FileName = openFileDialog。FileName; privatevoid SaveAsToolStri
30、pMenuItem_Click(object sender, EventArgs e) SaveFileDialog saveFileDialog = newSaveFileDialog(); saveFileDialog。InitialDirectory = Environment。GetFolderPath(Environment。SpecialFolder.Personal); saveFileDialog。Filter = ”文?本?文?件t(.txt)*。txt所有D文?件t(*。)|。*;if (saveFileDialog.ShowDialog(this) = DialogRes
31、ult。OK) string FileName = saveFileDialog.FileName; privatevoid ExitToolsStripMenuItem_Click(object sender, EventArgs e) this.Close(); privatevoid CutToolStripMenuItem_Click(object sender, EventArgs e) privatevoid CopyToolStripMenuItem_Click(object sender, EventArgs e) privatevoid PasteToolStripMenuI
32、tem_Click(object sender, EventArgs e) privatevoid ToolBarToolStripMenuItem_Click(object sender, EventArgs e) privatevoid StatusBarToolStripMenuItem_Click(object sender, EventArgs e) privatevoid CascadeToolStripMenuItem_Click(object sender, EventArgs e) LayoutMdi(MdiLayout。Cascade); privatevoid TileV
33、erticalToolStripMenuItem_Click(object sender, EventArgs e) LayoutMdi(MdiLayout。TileVertical); privatevoid TileHorizontalToolStripMenuItem_Click(object sender, EventArgs e) LayoutMdi(MdiLayout。TileHorizontal); privatevoid ArrangeIconsToolStripMenuItem_Click(object sender, EventArgs e) LayoutMdi(MdiLa
34、yout。ArrangeIcons); privatevoid CloseAllToolStripMenuItem_Click(object sender, EventArgs e) foreach (Form childForm in MdiChildren) childForm.Close(); privatevoid Menu_Load(object sender, EventArgs e) privatevoid 系统3退?出?ToolStripMenuItem_Click(object sender, EventArgs e) Application.Exit(); privatev
35、oid 密码?修T改?ToolStripMenuItem_Click(object sender, EventArgs e) 修T改?密码? mnu = new修T改?密码?(); mnu。ShowDialog(); privatevoid 用?户添加ToolStripMenuItem_Click(object sender, EventArgs e) 用?户添加 mnu = new用?户添加(); mnu。ShowDialog(); privatevoid 用?户删?除yToolStripMenuItem_Click(object sender, EventArgs e) frmUserDe
36、lete mnu = newfrmUserDelete(); mnu。ShowDialog(); privatevoid 修T改?用?户密码?ToolStripMenuItem_Click(object sender, EventArgs e) frmModifyUserPwd mnu = newfrmModifyUserPwd(); mnu。ShowDialog(); privatevoid 角?色?添加ToolStripMenuItem_Click(object sender, EventArgs e) frmAddRole mnu = newfrmAddRole(); mnu.ShowD
37、ialog(); privatevoid 部?门?录?入?ToolStripMenuItem_Click(object sender, EventArgs e) frmAddDepa mnu = newfrmAddDepa(); mnu.ShowDialog(); privatevoid 部?门?删?除yToolStripMenuItem_Click(object sender, EventArgs e) frmDeleteDepa mnu = newfrmDeleteDepa(); mnu。ShowDialog(); privatevoid 学生档案?录?入?ToolStripMenuIte
38、m_Click(object sender, EventArgs e) frmAddStud mnu = newfrmAddStud(); mnu.ShowDialog(); privatevoid 学生成绩录?入?ToolStripMenuItem_Click(object sender, EventArgs e) frmAddScore mnu = newfrmAddScore(); mnu。ShowDialog(); privatevoid 学生档案?删?除yToolStripMenuItem_Click(object sender, EventArgs e) frmDeleteStud
39、 mnu = newfrmDeleteStud(); mnu。ShowDialog(); privatevoid 学生成绩删?除yToolStripMenuItem_Click(object sender, EventArgs e) frmDeleteScore mnu = newfrmDeleteScore(); mnu。ShowDialog(); privatevoid 学生档案?信?息查询ToolStripMenuItem_Click(object sender, EventArgs e) frmQueryStudent mnu = newfrmQueryStudent(); mnu.ShowDialog(); privatevoid 学生成绩查询ToolStripMenuItem_Click(object sender, EventArgs e) frmQueryScore mnu = newfrmQueryScore(); mnu。ShowDialog(); 18