项目管理大型软件项目实训.docx
- 文档编号:10512470
- 上传时间:2023-02-17
- 格式:DOCX
- 页数:29
- 大小:110.88KB
项目管理大型软件项目实训.docx
《项目管理大型软件项目实训.docx》由会员分享,可在线阅读,更多相关《项目管理大型软件项目实训.docx(29页珍藏版)》请在冰豆网上搜索。
项目管理大型软件项目实训
大型软件项目实训报告
题目:
研究生招生管理系统
选题来源:
校内
指导教师:
姓名:
班级:
学号:
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及更高版本具有WIN32API的操作系统之上。
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.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个招生管理员可以根据多个成绩单,将每个考生登录到相应的录取名单中
3.3.4专业招收学生
招生管理员
图3-11汇总E-R图
成绩单
专业基础科目
所生成的表
表3-1考生表
属性名
含义
取值范围
ExamID
乍勺
“081000000'..
“081099999'
StuName
考生姓名
2{字母}24
表3-2考生信息表
属性名
含义
取值范围
StuName
考生姓名
2{字母}24
ExaSort
报考类别
[定向培养|非定向培养|委托培养|自筹经费]
PolStatus
政治面貌
2{字母}24
Source
来源
2{字母}50
Knowledge
2{字母}24
ThisYear
是否应届
[是|否]
Speciality
报一专业
[计算机科学与技术|动力理论学|振动控制|实验周力学|计算流体学|数字制造与信息化]
Sex
性别
[男|女]
Age
年龄
0..999
属性名
含义
取值范围
ExamID
乍勺
“081000000'..
“081099999'
SpeResult
专业科目
0..100
BasResult
基础科目
0..100
PolResult
政治
0..100
LanResult
外语
0..100
SpeBasResult
专业基础科目
0..100
表3-4专业表
属性名
含义
取值范围
SpeID
专业代码
00000..99999
SpeName
专业名称
2{字母}50
表3-5招生管理员表
属性名
含义
取值范围
AdmName
管理员姓名
2{字符}24
Password
密码
6{字符}10
表3-6录取表
属性名
含义
取值范围
ExamID
乍勺
“081000000'..
“081099999'
AdmName
管理员姓名
2{字符}24
MatrApartment
录取单位
2{字母}50
RetrObject
复试科目
(外语]政治|基础科目|专业基础科目|专业科目)
RetrResult
复试成绩
0..100
属性名
含义
取值范围
ExamID
乍勺
“081000000'..
“081099999'
SpelD
专业代码
00000..99999
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算法描述/逻辑流程
部分编码及注释:
publicclassDataBaseOperate{
privateConnectioncon;//定义连接
publicstaticintlength;//定义数据条数
//单独的方法创建数据库连接
privatevoidcontect(){
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(ClassNotFoundExceptione){
JOptionPane.showMessageDialog(null,"驱动程序未找到!
");
System.exit(-1);}catch(SQLExceptione){
JOptionPane.showMessageDialog(null,"数据库查询失败!
");
System.exit(-1);}}
//从数据库中读取记录publicObject叩readsql(){
contect();
Object叩ob=
null
try{
intcount=0;
Statementstmt=con.createStatement();
ResultSetrs=stmt.executeQuery("SELECT*FROMstudentifo");while(rs.next()){
count++;
}
length=count;
ob=newObject[count][7];
SELECT*FROMstudentifo")
"ExamID");
"AdmName";
"RetrResult");
"RetrObject");
rs=stmt.executeQuery(
inti=0;
while(rs.next()){
ob[i]=newObject[7];
ob[i][0]=rs.getString(
ob[i][1]=rs.getString(
ob[i][2]=rs.getString(
ob[i][3]=rs.getString(i++;
}
}catch(SQLExceptione){
JOptionPane.showMessageDialog(null,"数据库查询出错!
");
}
finally{
try{
con.close();
}catch(SQLExceptionex){
JOptionPane.showMessageDialog(null,"数据库关闭失败!
");
returnob;
//插入一条记录到数据库
publicvoidwritesql(Stuifostu){contect();
try{
Statementstmt=con.createStatement();
stmt.executeUpdate("insertintostudentifo(ExamID,AdmName,RetrResult,RetrObject)values1"+stu.getNo()+"','"+
stu.getName()+"','"+stu.getSex()+"','"+stu.getID().getID()+"','"+new
SimpleDateFormat("yyyy-MM-dd").format(stu.getBirthday())+"','"+
stu.getSelfintroduce()+"')");
}catch(SQLExceptione){
JOptionPane.showMessageDialog(null,"数据库更新失败!
");}finally{
try{con.close();
}catch(SQLExceptionex){JOptionPane.showMessageDialog(null,"数据库关闭失败!
");
}}
}
publicvoidupdatesql(Stuifostu){
contect();
//System.out.println(""+stu.getNo());
try{
PreparedStatementps=con.prepareStatement("UPDATEstudentifoSET
AdmName=?
RetrResult=?
RetrObject=?
WHEREExamID=?
");
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,new
SimpleDateFormat("yyyy-MM-dd").format(stu.getBirthday()));
ps.setString(6,stu.getSelfintroduce());
ps.executeUpdate();
//System.out.println(stu.getName());
}catch(SQLExceptione){
System.out.println(e.getMessage()+"\n"+e+"\n"+e.getErrorCode()+"\n");
JOptionPane.showMessageDialog(null,"数据库更新失败!
");}finally{try{
con.close();
}catch(SQLExceptionex){
JOptionPane.showMessageDialog(null,"数据库关闭失败!
");
}
}
}
publicvoiddeletesql(Stringno){
contect();
Statementstmt=
con.createStatement(ResultSet.TYPE_SCROLL_SENSIT,IVESultSet.CONCUR_UPDATA;BLE
ResultSetrs=stmt.executeQuery("SELECT*FROMstudentifo");
inta=-1;
while(rs.next()){if(rs.getString("ExamID").equals(no)){
rs.deleteRow();
}}
}catch(Exceptione){
JOptionPane.showMessageDialog(null,"删除数据失败!
");System.out.println(e);
}finally{try{con.close();
}catch(SQLExceptionex){JOptionPane.showMessageDialog(null,"数据库关闭失败!
");
}
}
//System.out.println(""+stu.getNo());
}
//在数据库中搜索相应记录
publicObject叩searchsql(Stringname){
contect();
Object口口ob=null;
intcount=0;
Statementstmt=con.createStatement();
ResultSetrs=stmt.executeQuery("SELECT*FROMstudentifo");
while(rs.next()){
if(rs.getString("AdmName".indexOf(name)!
=-1){
count++;
ob=newObject[count][7];
rs=stmt.executeQuery("SELECT*FROMstudentifo");
inti=0;
while(rs.next()){
Stringtemp=rs.getString("AdmName');
if(temp.indexOf(name)!
=-1){
"ExamID");
"RetrResult");
"RetrObject");
ob[i]=newObject[7];
ob[i][0]=rs.getString(
ob[i][1]=temp;
ob[i][2]=rs.getString(
ob[i][3]=rs.getString(i++;
}
}
}catch(SQLExceptione){
JOptionPane.showMessageDialog(null,"数据库查询出错!
");
}
finally{
con.close();
}catch(SQLExceptionex){
JOptionPane.showMessageDialog(null,"数据库关闭失败!
");
}
}
returnob;
}
//从数据库中找到权限信息进行分配权限
publicbooleanlogin(Stringname,Stringword){
contect();
booleanresult=false;
try{
Statementstmt=con.createStatement();
ResultSetrs=stmt.executeQuery("SELECT*FROMpassword");while(rs.next()){
if(rs.getString("用户名").trim().equals(name)){
if(rs.getString("密码").equals(word)){
result=true;
}
}
}
}catch(Exceptione){
JOptionPane.showMessageDialog(null,"连接数据库失败!
");
System.out.println(e);
try{
con.close();
}catch(SQLExceptionex){
JOptionPane.showMessageDialog(null,"数据库关闭失败!
");}}returnresult;
}}
4.1.4接口(或关键函数)设计
(1)用户接口
使用基于又t话框的GUI,用户通过鼠标的点击和键盘的输入完成操作,编辑框用于用户的输入。
(2)外部接口
主模块:
输入:
操作系统传递至的各种消息以及用户的输入数据
输出:
用户界面显示
上层模块:
无
下层模块:
考生录入模块、修改模块、录取模块、统计模块、系统管理模块考生录入模块:
输入:
考生信息输入
输出:
考生信息插入到数据库
上层模块:
主模块
下层模块:
管理员身份检验模块、考生信息输入模块
修改模块:
输入:
用户选择
输出:
用户界面显示
上层模块:
主模块
下层模块:
管理员身份检验模块、考生信息修改模块、录取考生信息修改模块、专业信息修改模块
录取模块:
输入:
录取考生信息输入
输出:
录取考生信息插入到数据库
上层模块:
主模块
下层模块:
管理员身份检验模块、录取输入模块
统计模块:
输入:
用户选择统计方式
输出:
用户界面显示
上层模块:
主模块
下层模块:
管理员身份检验模块、数据统计模块
系统管理模块:
输入:
用户选择管理方式
输出:
用户界面显示
上层模块:
主模块
下层模块:
管理员身份检验模块、数据备份模块、数据恢复模块、系统管理模块、口令更改模块
管理员身份验证模块:
输入:
管理员姓名、密码
输出:
成功信息或错误信息
上层模块:
主模块、考生录入模块、修改模块、录取模块、统计模块、系统管理模块
下层模块:
无
考生信息输入模块:
输入:
考生信息
输出:
考生信息
上层模块:
考生录入模块
下层模块:
考生信息校验模块、数据库操作模块
考生信息检验模块:
输入:
考生信息
输出:
成功信息或错误信息
上层模块:
考生信息检验模块
下层模块:
无
数据库操作模块:
输入:
数据库操作信息
输出:
成功信息或错误信息
上层模块:
考生信息输入模块、考生信息修改模块、录取考生信息修改模块、
专业信息修改模块、录取输入模块
下层模块:
无
考生信息修改模块:
输入:
考生信息
输出:
成功信息或错误信息
上层模块:
修改模块
下层模块:
数据库查询模块、数据库操作模块
录取考生修改模块:
输入:
录取考生信息
输出:
成功信息或错误信息
上层模块:
修改模块
下层模块:
数据库查询模块、数据库操作模块
专业信息修改模块:
输入:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 项目 管理 大型软件
![提示](https://static.bdocx.com/images/bang_tan.gif)