1、大 型 软 件 项 目 实 训 报 告题 目: 研究生招生管理系统 选题来源: 校 内 指导教师:姓 名:班 级:学 号:1目 录1序言 21.1 选题背景 21.2 选题目的及意义 21.3 选题完成情况 22项目需求分析 32.1 项目功能需求 32.2 项目性能需求 42.3 其他需求 43项目概要设计 53.1 系统功能结构设计 53.2 系统整体架构设计 83.3 数据库结构设计 84.详细设计 154.1 模块 1 描述 155实训总结 335.1 技术总结 335.2 思想总结 3321序言1.1 选题背景研究生招生管理系统V1.0 是一个功能比较完善的数据管理软件,具有数据操作
2、高效迅速等优点。该软件采用功能强大的数据库软件开发工具进行开发,可在应用范围较广的 WINDOWS 系列等操作系统上使用。1.2 选题目的及意义(1)希望借此次课程设计的机会巩固本学期所学到的知识,锻炼自己的专业技能,提高自己的软件开发能力。(2)借此次进行课程设计的同时掌握软件工程的基础知识和理论,分析大型软件开发过程中出现的问题,了解软件开发生命周期中常用的技术,掌握软件开发过程的结构化方法和面向对象方法,学会运用面向对象的软件工程方法进行软件需求分析、系统设计、实现和测试,并通过课程实践,实际运用软件工程的思想和技术,掌握软件项目管理和团队开发的工作方法。1.3 选题完成情况由于时间比较
3、短,使用计算机不方便及对于网络编程不熟悉,本研究生招生信息管理系统并没有提供数据的远程访问功能。对信息的保护手段仅限于设置用户级别,以及提供数据文件的备份,比较简单,安全性能有待进一步完善。32项目需求分析2.1 项目功能需求2.1.1 功能划分该软件具有如下功能:查询功能;插入功能;修改功能;删除功能;浏览功能;授权功能;2.1.2 功能描述(1)查询功能按照学号查询考生信息,成绩信息,录取信息;按照考生其他属性查询考生信息,成绩信息,录取信息;按照专业号查询专业信息;(2)插入功能增加一个考生记录;增加一个专业记录;增加一个成绩记录;增加一个录取考生记录;(3)修改功能修改某一个已存在的记
4、录内容;(4)删除功能删除一个记录;(5)浏览功能管理员浏览各个记录信息(6)授权功能授权读者访问数据的权限42.2 项目性能需求2.2.1 数据精确度需求查询时应保证查全率,所有在相应域中包含查询关键字的记录都应能查到,同时保证查准率。2.2.2 时间特性一般操作的响应时间应在 12 秒内。2.2.3 适应性满足运行环境在允许操作系统之间的安全转换和与其它应用软件的独立运行要求。2.3 其他需求2.3.1 运行需求(1) 用户界面使用 GUI 的图形用户界面,界面友好。(2) 硬件接口支持各种 x86 系列 PC 机。(3) 软件接口运行于 Windows95/98 及更高版本具有 WIN3
5、2 API 的操作系统之上。53项目概要设计3.1 系统功能结构设计3.1.1 考生录入考生录入模块调用:管理员身份检验模块考生身份检验模块考生信息输入模块数据库操作模块考生录入模块管理员身份验证模块考生信息输入模块考生信息检验模块数据库操作模块图 3-1 考生录入3.1.2 修改信息修改模块调用:数据库查询模块数据库操作模块管理员身份验证模块考生信息修改模块录取考生信息修改模块专业信息修改模块6修改模块管理员身份验证模块考生信息修改模块 数据库查询模块数据库操作模块录取考生修改模块专业信息修改模块图 3-2 修改信息3.1.3 录取考生录取模块调用:管理员身份验证模块数据库查询模块数据库操作
6、模块录取输入模块录取模块管理员身份验证模块录取输入模块数据库查询模块数据库操作模块图 3-3 录取考生3.1.4 统计信息统计模块调用:管理员身份验证模块7数据库查询模块数据统计模块结果显示模块统计模块管理员身份验证模块数据统计模块数据库查询模块结果显示模块图 3-4 统计信息3.1.5 系统管理系统管理模块调用:管理员身份验证模块数据备份模块数据恢复模块系统设置模块更改口令模块系统管理模块管理员身份验证模块数据备份模块数据恢复模块系统设置模块更改口令模块图 3-5 系统管理83.2 系统整体架构设计3.2.1 总体结构主模块调用:考生录入模块修改模块录取模块统计模块系统管理模块研究生招生管理
7、系统主模块考生录入模块修改模块录取模块统计模块系统管理模块图 3-6 总体结构3.3 数据库结构设计3.3.1 考生卷纸经阅卷后得到成绩单说明:每个考生有一份成绩单,每个成绩单只能下发给一个考生,因此考生和成绩单是 1:1 的关系。9考生 考试后卷纸经批阅得到 成绩单1 1考号姓名性别年龄政治面貌报考专业 学力来源报考类别是否应届政治外语基础科目专业科目专业基础科目图 3-7 考生卷纸经阅卷后得到成绩单3.3.2 考生报考专业考生 报考 专业n 1考号姓名性别年龄政治面貌报考专业 学力来源报考类别是否应届专业名称专业代码图 3-8 考生报考专业3.3.3 招生管理员根据成绩单将考生信息录取到录
8、取名单中说明:(1)1 个招生管理员可以根据多个成绩单,将每个考生登录到相应的录取名单中10(2)1 个考生可以由多个管理员根据成绩单录入图 3-9 招生管理员根据成绩单将考生信息录取到录取名单中3.3.4 专业招收学生专业 招收 考生1 n专业名称专业代码 考号姓名性别年龄政治面貌报考专业报考类别是否应届来源学力图 3-10 专业招收学生考生 录取 成绩单p招生管理员nq来源学力姓名 口令录取单位复试科目复试成绩基础科目报考专业考号姓名性别年龄政治面貌报考类别是否应届政治外语专业科目专业基础科目113.3.5 汇总 E-R 图考生 考试后卷纸经批阅得到 成绩单1 1考号姓名性别年龄政治面貌报
9、考专业学力来源是否应届政治外语基础科目专业科目专业基础科目报考专业专业代码 专业名称招收专业代码专业专业名称录取招生管理员姓名 口令录取单位复试科目复试成绩成绩单政治外语基础科目专业科目专业基础科目报考类别图 3-11 汇总 E-R 图123.3.6 数据库设计所生成的表表 3-1 考生表属性名 含义 取值范围ExamID 考号 “081000000”“081099999”StuName 考生姓名 2字母24表 3-2 考生信息表属性名 含义 取值范围StuName 考生姓名 2字母24ExaSort 报考类别定向培养|非定向培养|委托培养|自筹经费PolStatus 政治面貌 2字母24So
10、urce 来源 2字母50Knowledge 学力 2字母24ThisYear 是否应届 是|否Speciality 报考专业计算机科学与技术|动力理论学|振动控制|实验固力学|计算流体学|数字制造与信息化Sex 性别 男|女Age 年龄 099913表 3-3 考生成绩表属性名 含义 取值范围ExamID 考号 “081000000”“081099999”SpeResult 专业科目 0100BasResult 基础科目 0100PolResult 政治 0100LanResult 外语 0100SpeBasResult 专业基础科目 0100表 3-4 专业表属性名 含义 取值范围SpeI
11、D 专业代码 0000099999SpeName 专业名称 2字母50表 3-5 招生管理员表属性名 含义 取值范围AdmName 管理员姓名 2字符24Password 密码 6字符10表 3-6 录取表属性名 含义 取值范围ExamID 考号 “081000000”“081099999”AdmName 管理员姓名 2字符24MatrApartment 录取单位 2字母50RetrObject 复试科目(外语|政治|基础科目|专业基础科目|专业科目)RetrResult 复试成绩 010014表 3-7 招生表属性名 含义 取值范围ExamID 考号 “081000000”“08109999
12、9”SpeID 专业代码 0000099999154.详细设计4.1 模块 1 描述4.1.1 功能描述(1) 主流程1)建立与数据库的连接2)获取系统设置3)显示对话框(即主界面)4)等待用户输入:如为报名:进入考生录入流程(显示报名对话框) 。如为修改:进入修改流程(显示修改对话框) 。如为录取:进入录入录取名单流程(显示录取对话框) 。如为统计:进入统计流程(显示统计对话框) 。如为系统管理:进入系统管理流程(进行授权) 。如为退出:检查所有子窗口,关闭对话框,断开与数据库的连接。(2) 考生录入流程1)要求考生输入考生信息2)考生身份检验3)返回成功或失败信息4)结束考生录入流程16启
13、动系统输入口令查验 退出流程NO显示主菜单YES输入考生信息检验更新数据库YES显示错误NO图 4-1 考生录入流程(3) 信息修改流程1)要求选择所要修改的数据库如为考生信息:修改考生信息如为录取信息:修改录取名单如为专业信息:修改专业信息2)等待用户输入3)返回成功或失败信息4)结束修改流程17启动系统输入口令查验 退出流程NO显示主菜单YES选择项考生信息输入关键字找到输入新考生信息存入录取信息输入关键字找到输入新录取信息存入专业信息输入关键字找到输入新专业信息存入退出图 4-2 信息修改流程(4)考生录取流程1)等待用户输入录取考生的考号和成绩2)返回成功或失败信息3)结束录取流程18
14、启动系统输入口令查验 退出流程NO显示主菜单YES输入考生信息检验更新数据库YES显示错误NO是否继续YES NO图 4-3 考生录取流程(5) 统计流程1)等待用户输入2)如为开始统计:读入统计条件输出统计结果如为结束统计:结束统计流程19启动系统输入口令查验 退出流程NO显示主菜单YES输入统计条件统计显示统计结果正确显示错误统计错误是否继续YES NO图 4-4 统计流程(6) 系统管理1)身份验证2)用户操作权限检验3)根据操作权限级别显示系统管理对话框4)等待用户选择操作5)结束系统管理流程20启动系统输入口令查验 退出流程NO显示主菜单YES数据备份输入要求确认备份数据恢复输入文件
15、名确认恢复系统设置输入数据确认设置更改口令输入口令确认更改口令退出图 4-5 系统管理4.1.2 性能描述(1) 数据精确度需求查询时应保证查全率,所有在相应域中包含查询关键字的记录都应能查到,同时保证查准率。(2) 时间特性一般操作的响应时间应在 12 秒内。(3) 适应性满足运行环境在允许操作系统之间的安全转换和与其它应用软件的独立运行要求。214.1.3 算法描述/逻辑流程部分编码及注释:publicclassDataBaseOperate private Connection con;/定义连接publicstaticintlength;/定义数据条数/单独的方法创建数据库连接priv
16、atevoid contect()tryClass.forName(“com.mysql.jdbc.Driver“);con = DriverManager.getConnection(“jdbc:mysql:/localhost:3306/student“,“root“,“root“);if(con.isClosed()JOptionPane.showMessageDialog(null,“数据库连接失败!“);System.exit(-1);catch(ClassNotFoundException e)JOptionPane.showMessageDialog(null,“驱动程序未找到!
17、“);System.exit(-1);catch(SQLException e)JOptionPane.showMessageDialog(null,“数据库查询失败!“);System.exit(-1);/从数据库中读取记录public Object readsql()contect();22Object ob = null;tryint count = 0;Statement stmt = con.createStatement();ResultSet rs = stmt.executeQuery(“SELECT * FROM studentifo“);while(rs.next()cou
18、nt +;length = count;ob = new Objectcount7;rs = stmt.executeQuery(“SELECT * FROM studentifo“);int i = 0;while(rs.next()obi = new Object7;obi0 = rs.getString(“ExamID“);obi1 = rs.getString(“AdmName“);obi2 = rs.getString(“RetrResult“);obi3 = rs.getString(“RetrObject“);i+;catch(SQLException e)JOptionPane
19、.showMessageDialog(null,“数据库查询出错!“);finallytrycon.close();catch(SQLException ex)JOptionPane.showMessageDialog(null,“数据库关闭失败!“);23return ob;/插入一条记录到数据库publicvoid writesql(Stuifo stu)contect();tryStatement stmt = con.createStatement();stmt.executeUpdate(“insert into studentifo(ExamID,AdmName,RetrResul
20、t,RetrObject) values(“ + stu.getNo() + “,“ + stu.getName() +“,“ + stu.getSex() + “,“ + stu.getID().getID() +“,“ +new SimpleDateFormat(“yyyy-MM-dd“).format(stu.getBirthday() +“,“+ stu.getSelfintroduce() +“)“);catch(SQLException e)JOptionPane.showMessageDialog(null,“数据库更新失败!“);finallytrycon.close();ca
21、tch(SQLException ex)JOptionPane.showMessageDialog(null,“数据库关闭失败!“);publicvoid updatesql(Stuifo stu)contect();24/System.out.println(“+stu.getNo();tryPreparedStatement ps = con.prepareStatement(“UPDATE studentifo SET AdmName=?,RetrResult=?,RetrObject=? WHERE ExamID=?“); ps.setString(7,Long.toString(st
22、u.getNo();ps.setString(1,stu.getName();ps.setString(2,stu.getSex();ps.setString(3,stu.getID().getID();ps.setString(5,new SimpleDateFormat(“yyyy-MM-dd“).format(stu.getBirthday();ps.setString(6,stu.getSelfintroduce();ps.executeUpdate();/System.out.println(stu.getName();catch(SQLException e)System.out.
23、println(e.getMessage()+“n“+e+“n“+e.getErrorCode()+“n“);JOptionPane.showMessageDialog(null,“数据库更新失败!“);finallytrycon.close();catch(SQLException ex)JOptionPane.showMessageDialog(null,“数据库关闭失败!“);publicvoid deletesql(String no)contect();tryStatement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENS
24、ITIVE,ResultSet.CONCUR_UPDATABLE);25ResultSet rs = stmt.executeQuery(“SELECT * FROM studentifo“);int a=-1;while(rs.next()if(rs.getString(“ExamID“).equals(no)rs.deleteRow();catch(Exception e)JOptionPane.showMessageDialog(null,“删除数据失败!“);System.out.println(e);finallytrycon.close();catch(SQLException e
25、x)JOptionPane.showMessageDialog(null,“数据库关闭失败!“);/System.out.println(“+stu.getNo();/在数据库中搜索相应记录public Object searchsql(String name)contect();Object ob = null;tryint count = 0;Statement stmt = con.createStatement();26ResultSet rs = stmt.executeQuery(“SELECT * FROM studentifo“);while(rs.next()if(rs.ge
26、tString(“AdmName“).indexOf(name)!=-1)count+;ob = new Objectcount7;rs = stmt.executeQuery(“SELECT * FROM studentifo“);int i = 0;while(rs.next()String temp = rs.getString(“AdmName“);if(temp.indexOf(name)!=-1)obi = new Object7;obi0 = rs.getString(“ExamID“);obi1 = temp;obi2 = rs.getString(“RetrResult“);
27、obi3 = rs.getString(“RetrObject“);i+;catch(SQLException e)JOptionPane.showMessageDialog(null,“数据库查询出错!“);finallytrycon.close();catch(SQLException ex)27JOptionPane.showMessageDialog(null,“数据库关闭失败!“);return ob;/从数据库中找到权限信息进行分配权限publicboolean login(String name,String word)contect();boolean result = fal
28、se;tryStatement stmt = con.createStatement();ResultSet rs = stmt.executeQuery(“SELECT * FROM password“);while(rs.next()if(rs.getString(“用户名“).trim().equals(name)if(rs.getString(“密码“).equals(word)result = true;catch(Exception e)JOptionPane.showMessageDialog(null,“连接数据库失败!“);System.out.println(e);fina
29、llytrycon.close();28catch(SQLException ex)JOptionPane.showMessageDialog(null,“数据库关闭失败!“);return result;4.1.4 接口(或关键函数)设计(1) 用户接口使用基于对话框的 GUI,用户通过鼠标的点击和键盘的输入完成操作,编辑框用于用户的输入。(2) 外部接口主模块:输入:操作系统传递至的各种消息以及用户的输入数据输出:用户界面显示上层模块:无下层模块:考生录入模块、修改模块、录取模块、统计模块、系统管理模块考生录入模块:输入:考生信息输入输出:考生信息插入到数据库上层模块:主模块下层模块:管理
30、员身份检验模块、考生信息输入模块修改模块:输入:用户选择输出:用户界面显示上层模块:主模块下层模块:管理员身份检验模块、考生信息修改模块、录取考生信息修改模块、专业信息修改模块29录取模块:输入:录取考生信息输入输出:录取考生信息插入到数据库上层模块:主模块下层模块:管理员身份检验模块、录取输入模块统计模块:输入:用户选择统计方式输出:用户界面显示上层模块:主模块下层模块:管理员身份检验模块、数据统计模块系统管理模块:输入:用户选择管理方式输出:用户界面显示上层模块:主模块下层模块:管理员身份检验模块、数据备份模块、数据恢复模块、系统管理模块、口令更改模块管理员身份验证模块:输入:管理员姓名、密码输出:成功信息或错误信息上层模块:主模块、考生录入模块、修改模块、录取模块、统计模块、系统管理模块下层模块:无考生信息输入模块:输入:考生信息输出:考生信息上层模块:考生录入模块下层模块:考生信息校验模块、数据库操作模块考生信息检验模块:输入:考生信息