当前位置:文档之家› 大型软件项目实训.doc

大型软件项目实训.doc

大型软件项目实训报告题目:研究生招生管理系统选题来源:校内指导教师:姓名:班级:学号:目录1.序言 (2)1.1选题背景 (2)1.2选题目的及意义 (2)1.3 选题完成情况 (2)2.项目需求分析 (3)2.1项目功能需求 (3)2.2 项目性能需求 (4)2.3 其他需求 (4)3.项目概要设计 (5)3.1系统功能结构设计 (5)3.2系统整体架构设计 (8)3.3数据库结构设计 (8)4.详细设计 (15)4.1模块1描述 (15)5.实训总结 (33)5.1技术总结 (33)5.2 思想总结 (33)1.序言1.1选题背景《研究生招生管理系统》V1.0是一个功能比较完善的数据管理软件,具有数据操作高效迅速等优点。

该软件采用功能强大的数据库软件开发工具进行开发,可在应用范围较广的WINDOWS系列等操作系统上使用。

1.2选题目的及意义(1)希望借此次课程设计的机会巩固本学期所学到的知识,锻炼自己的专业技能,提高自己的软件开发能力。

(2)借此次进行课程设计的同时掌握软件工程的基础知识和理论,分析大型软件开发过程中出现的问题,了解软件开发生命周期中常用的技术,掌握软件开发过程的结构化方法和面向对象方法,学会运用面向对象的软件工程方法进行软件需求分析、系统设计、实现和测试,并通过课程实践,实际运用软件工程的思想和技术,掌握软件项目管理和团队开发的工作方法。

1.3 选题完成情况由于时间比较短,使用计算机不方便及对于网络编程不熟悉,本研究生招生信息管理系统并没有提供数据的远程访问功能。

对信息的保护手段仅限于设置用户级别,以及提供数据文件的备份,比较简单,安全性能有待进一步完善。

2.项目需求分析2.1项目功能需求2.1.1功能划分该软件具有如下功能:查询功能;插入功能;修改功能;删除功能;浏览功能;授权功能;2.1.2 功能描述(1)查询功能按照学号查询考生信息,成绩信息,录取信息;按照考生其他属性查询考生信息,成绩信息,录取信息;按照专业号查询专业信息;(2)插入功能增加一个考生记录;增加一个专业记录;增加一个成绩记录;增加一个录取考生记录;(3)修改功能修改某一个已存在的记录内容;(4)删除功能删除一个记录;(5)浏览功能管理员浏览各个记录信息(6)授权功能授权读者访问数据的权限2.2 项目性能需求2.2.1 数据精确度需求查询时应保证查全率,所有在相应域中包含查询关键字的记录都应能查到,同时保证查准率。

2.2.2 时间特性一般操作的响应时间应在1-2秒内。

2.2.3 适应性满足运行环境在允许操作系统之间的安全转换和与其它应用软件的独立运行要求。

2.3 其他需求2.3.1 运行需求(1)用户界面使用GUI的图形用户界面,界面友好。

(2)硬件接口支持各种x86系列PC机。

(3)软件接口运行于Windows95/98及更高版本具有WIN32 API的操作系统之上。

3.项目概要设计3.1系统功能结构设计3.1.1 考生录入考生录入模块调用:管理员身份检验模块考生身份检验模块考生信息输入模块数据库操作模块图3-1 考生录入3.1.2 修改信息修改模块调用:数据库查询模块数据库操作模块管理员身份验证模块考生信息修改模块录取考生信息修改模块专业信息修改模块图3-2 修改信息3.1.3 录取考生录取模块调用:管理员身份验证模块数据库查询模块数据库操作模块录取输入模块图3-3 录取考生3.1.4 统计信息统计模块调用:管理员身份验证模块数据库查询模块数据统计模块结果显示模块图3-4 统计信息3.1.5 系统管理系统管理模块调用:管理员身份验证模块数据备份模块数据恢复模块系统设置模块更改口令模块图3-5 系统管理3.2系统整体架构设计3.2.1 总体结构主模块调用:考生录入模块修改模块录取模块统计模块系统管理模块图3-6 总体结构3.3数据库结构设计3.3.1考生卷纸经阅卷后得到成绩单说明:每个考生有一份成绩单,每个成绩单只能下发给一个考生,因此考生和成绩单是1:1的关系。

图3-7 考生卷纸经阅卷后得到成绩单3.3.2 考生报考专业图3-8 考生报考专业3.3.3 招生管理员根据成绩单将考生信息录取到录取名单中说明:(1)1个招生管理员可以根据多个成绩单,将每个考生登录到相应的录取名单中(2)1个考生可以由多个管理员根据成绩单录入图3-9招生管理员根据成绩单将考生信息录取到录取名单中3.3.4 专业招收学生图3-10 专业招收学生3.3.5 汇总E-R 图图3-11 汇总E-R图3.3.6 数据库设计所生成的表表3-1 考生表表3-2 考生信息表表3-3 考生成绩表表3-4 专业表表3-5 招生管理员表表3-6录取表表3-7 招生表4.详细设计4.1模块1描述4.1.1 功能描述(1)主流程1)建立与数据库的连接2)获取系统设置3)显示对话框(即主界面)4)等待用户输入:如为报名:进入考生录入流程(显示报名对话框)。

如为修改:进入修改流程(显示修改对话框)。

如为录取:进入录入录取名单流程(显示录取对话框)。

如为统计:进入统计流程(显示统计对话框)。

如为系统管理:进入系统管理流程(进行授权)。

如为退出:检查所有子窗口,关闭对话框,断开与数据库的连接。

(2)考生录入流程1)要求考生输入考生信息2)考生身份检验3)返回成功或失败信息4)结束考生录入流程图4-1 考生录入流程(3)信息修改流程1)要求选择所要修改的数据库如为考生信息:修改考生信息如为录取信息:修改录取名单如为专业信息:修改专业信息2)等待用户输入3)返回成功或失败信息4)结束修改流程图4-2 信息修改流程(4)考生录取流程1)等待用户输入录取考生的考号和成绩2)返回成功或失败信息3)结束录取流程图4-3 考生录取流程(5)统计流程1)等待用户输入2)如为开始统计:读入统计条件输出统计结果如为结束统计:结束统计流程图4-4 统计流程(6)系统管理1)身份验证2)用户操作权限检验3)根据操作权限级别显示系统管理对话框4)等待用户选择操作5)结束系统管理流程图4-5 系统管理4.1.2 性能描述(1)数据精确度需求查询时应保证查全率,所有在相应域中包含查询关键字的记录都应能查到,同时保证查准率。

(2)时间特性一般操作的响应时间应在1-2秒内。

(3)适应性满足运行环境在允许操作系统之间的安全转换和与其它应用软件的独立运行要求。

4.1.3 算法描述/逻辑流程部分编码及注释:public class DataBaseOperate {private Connection con;//定义连接public static int length;//定义数据条数//单独的方法创建数据库连接private void contect(){try{Class.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,"驱动程序未找到!");System.exit(-1);}catch(SQLException e){JOptionPane.showMessageDialog(null,"数据库查询失败!");System.exit(-1);}}//从数据库中读取记录public Object[][] readsql(){contect();Object[][] ob = null;try{int count = 0;Statement stmt = con.createStatement();ResultSet rs = stmt.executeQuery("SELECT * FROM studentifo");while(rs.next()){count ++;}length = count;ob = new Object[count][7];rs = stmt.executeQuery("SELECT * FROM studentifo");int i = 0;while(rs.next()){ob[i] = new Object[7];ob[i][0] = rs.getString("ExamID");ob[i][1] = rs.getString("AdmName");ob[i][2] = rs.getString("RetrResult");ob[i][3] = rs.getString("RetrObject");i++;}}catch(SQLException e){JOptionPane.showMessageDialog(null,"数据库查询出错!");}finally{try{con.close();}catch(SQLException ex){JOptionPane.showMessageDialog(null,"数据库关闭失败!");}}return ob;}//插入一条记录到数据库public void writesql(Stuifo stu){contect();try{Statement stmt = con.createStatement();stmt.executeUpdate("insert intostudentifo(ExamID,AdmName,RetrResult,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,"数据库更新失败!");}finally{try{con.close();}catch(SQLException ex){JOptionPane.showMessageDialog(null,"数据库关闭失败!");}}}public void updatesql(Stuifo stu){contect();//System.out.println(""+stu.getNo());try{PreparedStatement ps = con.prepareStatement("UPDATE studentifo SET AdmName=?,RetrResult=?,RetrObject=? WHERE ExamID=?");ps.setString(7,Long.toString(stu.getNo()));ps.setString(1,stu.getName());ps.setString(2,stu.getSex());ps.setString(3,stu.getID().getID());ps.setString(5,newSimpleDateFormat("yyyy-MM-dd").format(stu.getBirthday()));ps.setString(6,stu.getSelfintroduce());ps.executeUpdate();//System.out.println(stu.getName());}catch(SQLException e){System.out.println(e.getMessage()+"\n"+e+"\n"+e.getErrorCode()+"\n");JOptionPane.showMessageDialog(null,"数据库更新失败!");}finally{try{con.close();}catch(SQLException ex){JOptionPane.showMessageDialog(null,"数据库关闭失败!");}}}public void deletesql(String no){contect();try{Statement stmt =con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);ResultSet 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);}finally{try{con.close();}catch(SQLException ex){JOptionPane.showMessageDialog(null,"数据库关闭失败!");}}//System.out.println(""+stu.getNo());}//在数据库中搜索相应记录public Object[][] searchsql(String name){contect();Object[][] ob = null;try{int count = 0;Statement stmt = con.createStatement();ResultSet rs = stmt.executeQuery("SELECT * FROM studentifo");while(rs.next()){if(rs.getString("AdmName").indexOf(name)!=-1){count++;}}ob = new Object[count][7];rs = stmt.executeQuery("SELECT * FROM studentifo");int i = 0;while(rs.next()){String temp = rs.getString("AdmName");if(temp.indexOf(name)!=-1){ob[i] = new Object[7];ob[i][0] = rs.getString("ExamID");ob[i][1] = temp;ob[i][2] = rs.getString("RetrResult");ob[i][3] = rs.getString("RetrObject");i++;}}}catch(SQLException e){JOptionPane.showMessageDialog(null,"数据库查询出错!");}finally{try{con.close();}catch(SQLException ex){JOptionPane.showMessageDialog(null,"数据库关闭失败!");}}return ob;}//从数据库中找到权限信息进行分配权限public boolean login(String name,String word){contect();boolean result = false;try{Statement 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);}finally{try{con.close();}catch(SQLException ex){JOptionPane.showMessageDialog(null,"数据库关闭失败!");}}return result;}}4.1.4接口(或关键函数)设计(1)用户接口使用基于对话框的GUI,用户通过鼠标的点击和键盘的输入完成操作,编辑框用于用户的输入。

相关主题