大型软件项目实训doc.docx

上传人:b****7 文档编号:9413909 上传时间:2023-02-04 格式:DOCX 页数:32 大小:381.46KB
下载 相关 举报
大型软件项目实训doc.docx_第1页
第1页 / 共32页
大型软件项目实训doc.docx_第2页
第2页 / 共32页
大型软件项目实训doc.docx_第3页
第3页 / 共32页
大型软件项目实训doc.docx_第4页
第4页 / 共32页
大型软件项目实训doc.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

大型软件项目实训doc.docx

《大型软件项目实训doc.docx》由会员分享,可在线阅读,更多相关《大型软件项目实训doc.docx(32页珍藏版)》请在冰豆网上搜索。

大型软件项目实训doc.docx

大型软件项目实训doc

 

大型软件项目实训报告

 

题目:

研究生招生管理系统

 

选题来源:

校内

指导教师:

姓名:

班级:

学号:

 

 

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.项目概要设计

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考生表

属性名

含义

取值范围

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

 

表3-3考生成绩表

属性名

含义

取值范围

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

表3-7招生表

属性名

含义

取值范围

ExamID

考号

“081000000”..“081099999”

SpeID

专业代码

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];

rs=stmt.executeQuery("SELECT*FROMstudentifo");

inti=0;

while(rs.next()){

ob[i]=newObject[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(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)values('"+stu.getNo()+"','"+stu.getName()+"','"+stu.getSex()+"','"+stu.getID().getID()+"','"+newSimpleDateFormat("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("UPDATEstudentifoSETAdmName=?

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,newSimpleDateFormat("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();

try{

Statementstmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

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;

try{

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){

ob[i]=newObject[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(SQLExceptione){

JOptionPane.showMessageDialog(null,"数据库查询出错!

");

}

finally{

try{

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);

}finally{

try{

con.close();

}catch(SQLExceptionex){

JOptionPane.showMessageDialog(null,"数据库关闭失败!

");

}

}

returnresult;

}

}

4.1.4接口(或关键函数)设计

(1)用户接口

使用基于对话框的GUI,用户通过鼠标的点击和键盘的输入完成操作,编辑框用于用户的输入。

(2)外部接口

主模块:

输入:

操作系统传递至的各种消息以及用户的输入数据

输出:

用户界面显示

上层模块:

下层模块:

考生录入模块、修改模块、录取模块、统计模块、系统管理模块

考生录入模块:

输入:

考生信息输入

输出:

考生信息插入到数据库

上层模块:

主模块

下层模块:

管理员身份检验模块、考生信息输入模块

修改模块:

输入:

用户选择

输出:

用户界面显示

上层模块:

主模块

下层模块:

管理员身份检验模块、考生信息修改模块、录取考生信息修改模块、专业信息修改模块

录取模块:

输入:

录取考生信息输入

输出:

录取考生信息插入到数据库

上层模块:

主模块

下层模块:

管理员身份检验模块、录取输入模块

统计模块:

输入:

用户选择统计方式

输出:

用户界面显示

上层模块:

主模块

下层模块:

管理员身份检验模块、数据统计模块

系统管理模块:

输入:

用户选择管理方式

输出:

用户界面显示

上层模块:

主模块

下层模块:

管理员身份检验模块、数据备份模块、数据恢复模块、系统管理模块、口令更改模块

管理员身份验证模块:

输入:

管理员姓名、密码

输出:

成功信息或错误信息

上层模块:

主模块、考生录入模块、修改模块、录取模块、统计模块、系统管理模块

下层模块:

考生信息输入模块:

输入:

考生信息

输出:

考生信息

上层模块:

考生录入模块

下层模块:

考生信息校验模块、数据库操作模块

考生信息检验模块:

输入:

考生信息

输出:

成功信息或错误信息

上层模块:

考生信息检验模块

下层模块:

数据库操作模块:

输入:

数据库操作信息

输出:

成功信息或错误信息

上层模块:

考生信息输入模块、考生信息修改模块、录取考生信息修改模块、专业信息

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 城乡园林规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1