面向对象系统分析与设计

面向对象分析与设计

1 用例模型分析 1.1 需求描述

1)学生信息管理

教务人员通过学生信息管理模块来管理学生信息,如进行学生信息的添加、修改、删除等。在进行学生信息的添加时,要进行学生学号是否有重复的检查,如果添加的学生编号有重复就要对用户进行提示。只有在不重复的情况下才能进行信息的添加。在进行信息的删除时,要首先提示用户确认是否要删除,只有在用户确认的情况下才能进行信息的删除。在进行信息的修改时,要根据用户选定的学生进行修改,即列出用户选定的学生的所有信息,在这个基础上进行学生信息的修改。 2)教师信息管理

教务工作人员通过此模块来管理教师信息,包括教师信息的添加、修改、删除等。在进行教师信息的添加时候,要进行教师编号是否重复的检验,如果添加的教师编号重复要对用户进行提示,只有在不重复的情况下才能进行信息的添加。在进行信息的删除时,要提示用户确认是否删除,只有在用户确认后才能够进行信息的删除。在进行信息的修改时,要能够根据用户选定的教师项进行修改,即列出用户选定的教师的所有信息,在这个基础上进行班级信息的修改。 3)班级信息管理

教务工作人员通过此模块来管理班级的信息,包括班级信息的添加,修改,删除等。在进行班级信息的添加时,要进行班级的编号是否重复的检查,如果添加的班级编号重复要对用户进行提示,只有在信息不重复的前提下才能进行信息的添加,在进行信息的删除时,要提示用户确认是否删除,只有用户确认后才能进行信息的删除。在进行信息的修改时,要能根据用户选定的班级进行修改,即列出用户选定的班级的所有信息,在这个基础上进行班级信息的修改。 4)课程信息管理

教务工作人员通过该模块来管理课程的基本信息,包括: (1) 课程信息等的添加,修改,删除。

在进行信息的添加时,打开新的窗口进行信息的录入,在保存的时候要进行课程的编号

是否重复的检查,如果添加的课程编号重复的要对用户进行提示,只有在不重复的情况下才能进行信息的添加。在进行信息的删除的时候,要让用户确认是否要删除,只有确认后才能进行删除操作。在进行信息的修改的时候,要根据用户选定的课程进行修改,即列出用户选定课程的信息,在这个基础上进行课程信息的修改。

(2)班级课程的设置(教学任务)。 (3)教师授课信息的设置。 5)成绩信息管理

任课教师可以通过该模块录入自己担任的某门课的成绩,在录入学生成绩的时,教师选定课程并选定学生班级,才能输入学生成绩。教务工作人员通过该模块来进行学生成绩的修改。

6)综合信息查询

通过该模块可以查询教务所需要的各种信息。

学生能够查询:个人基本信息、个人成绩信息、班级上课信息;

教务人员可以查询:学生基本信息、教师基本信息、课程信息、班级信息、学生成绩信息; 7)系统维护

系统管理员能够创建和维护教师、学生、教务管理员等用户账号信息。

1.2 用例图

系统管理员

图1 教务管理系统用例图

1.3 用例描述

用例1. 学生信息管理 1.1 简要说明

教务人员通过学生信息管理模块来管理学生信息,如进行学生信息的添加、修改、删除等。 2. 上下文图

教务人员

图2 “学生信息管理用例”

3. 事件流 3.1 基本流

E1: 教务人员选择“添加学生”

E1.1 教务人员输入新学生的基本信息(学号、姓名、性别、出生日期、学生

联系电话、家庭住址、家庭联系电话等); E1.2 教务人员点击保存;

E1.3 系统检查已有的学生学号,如果学号重复则转到A1;如果学号不重复且学生信息添加完整,则保存该学生信息到学生信息表中; E2 教务人员“删除学生信息”

E2.1 教务人员输入或选择学生班级;

E2.2 教务人员输入或选择要删除的学生学号; E2.3 系统提示教务人员“确认删除” E2.3 教务人员点击“确认”

E2.3 系统检查要删除学生的“班级”和“学号”,如果输入的“班级”或“学号”在系统中不存在,则转到A2;否则,删除该学号的学生信息和该学号相关的成绩信息;

E3 教务人员选择“修改学生信息”

E3.1 教务人员输入或选择要修改学生所在班级; E3.2 教务人员输入或选择要修改的学生学号;

E3.3 系统检查要修改学生的班级或学号,如果要修改的“班级”或“学号”在系统中不存在,则转到A3;否则,系统提前该学生的基本信息,显示在界面上,学生的学号不允许修改;

E3.4 教务人员录入该学生的修改信息;

E3.4 教务人员点击保存,系统将修改后的信息保存到学生信息表中。 3.2 备选流

3.2.1 第一备选流

A1:系统提示“已经存在该学号的学生,请核对学生学号信息”,系统返回到添加学生信息的界面; A2:系统提示“要删除学生的班级或学号不存在,请确认”,系统返回到删除界面; A3:系统提示“要修改学生的班级或学号不存在,请确认”,系统返回到修改界面; 3.2.1.1 备选支流

[如果能使表达更明确,备选流又可再分为多个支流。] 3.2.2 第二备选流

[在一个用例中很可能会有多个备选流。为了使表达更清晰,应将各个备选流分开说明。使用备选流可以提高用例的可读性,并防止将用例分解为过多的层次。应切记,用例只是文本说明,其主要目的是以清晰、简洁、易于理解的方式记录系统的行为。] 4. 非功能需求

[在这个小节中,主要对该用例所涉及的非功能性需求进行描述。由于其通常很难以在事件流中进行表述,因此单列为一小节进行阐述。这些需求通过包括法律法规、应用程序标准、质量属性(可用性、可靠性、性能、支持性等)、兼容性、可移植性,以及设计约束等方面的需求。在这些需求的描述方面,一定要注意使其可度量、可验证,否则就容易流于形式,形同摆设。] 5. 前置条件

教务人员须先进行身份验证,登陆到教务系统 6. 后置条件

教务人员完成学生信息管理操作后,可以返回到系统主界面或者退出系统 7. 扩展点

[此用例的扩展点,通常是用例图中的extent 关系。] 用例2. 信息查询 1.1 简要说明

教务人员通过学生信息管理模块来管理学生信息,如进行学生信息的添加、修改、删除等。 2. 上下文图

图2 “信息查询用例子图”

3. 事件流 3.1 基本流

E1: 教务人员选择“添加学生”

E1.1 教务人员输入新学生的基本信息(学号、姓名、性别、出生日期、学生

联系电话、家庭住址、家庭联系电话等); E1.2 教务人员点击保存;

E1.3 系统检查已有的学生学号,如果学号重复则转到A1;如果学号不重复且学生信息添加完整,则保存该学生信息到学生信息表中; E2 教务人员“删除学生信息”

E2.1 教务人员输入或选择学生班级;

E2.2 教务人员输入或选择要删除的学生学号; E2.3 系统提示教务人员“确认删除” E2.3 教务人员点击“确认”

E2.3 系统检查要删除学生的“班级”和“学号”,如果输入的“班级”或“学

号”在系统中不存在,则转到A2;否则,删除该学号的学生信息和该学号相关的成绩信息;

E3 教务人员选择“修改学生信息”

E3.1 教务人员输入或选择要修改学生所在班级; E3.2 教务人员输入或选择要修改的学生学号;

E3.3 系统检查要修改学生的班级或学号,如果要修改的“班级”或“学号”在系统中不存在,则转到A3;否则,系统提前该学生的基本信息,显示在界面上,学生的学号不允许修改;

E3.4 教务人员录入该学生的修改信息;

E3.4 教务人员点击保存,系统将修改后的信息保存到学生信息表中。 3.2 备选流

3.2.1 第一备选流

A1:系统提示“已经存在该学号的学生,请核对学生学号信息”,系统返回到添加学生信息的界面; A2:系统提示“要删除学生的班级或学号不存在,请确认”,系统返回到删除界面; A3:系统提示“要修改学生的班级或学号不存在,请确认”,系统返回到修改界面; 3.2.1.1 备选支流

[如果能使表达更明确,备选流又可再分为多个支流。] 3.2.2 第二备选流

[在一个用例中很可能会有多个备选流。为了使表达更清晰,应将各个备选流分开说明。使用备选流可以提高用例的可读性,并防止将用例分解为过多的层次。应切记,用例只是文本说明,其主要目的是以清晰、简洁、易于理解的方式记录系统的行为。] 4. 非功能需求

[在这个小节中,主要对该用例所涉及的非功能性需求进行描述。由于其通常很难以在事件流中进行表述,因此单列为一小节进行阐述。这些需求通过包括法律法规、应用程序标准、质量属性(可用性、可靠性、性能、支持性等)、兼容性、可移植性,以及设计约束等方面的需求。在这些需求的描述方面,一定要注意使其可度量、可验证,否则就容易流于形式,形同摆设。] 5. 前置条件

教务人员须先进行身份验证,登陆到教务系统 6. 后置条件

教务人员完成学生信息管理操作后,可以返回到系统主界面或者退出系统 7. 扩展点

[此用例的扩展点,通常是用例图中的extent 关系。]

2 实体类分析

2.1 实体类(名词分析方法)

角色:学生、教务人员、系统管理员、教师

实体:班级信息、课程信息、学生信息、教师信息、 行为结果:学生成绩、教师授课信息、教学任务

2.2 实体类之间的关系分析

学生、教务人员、系统管理员、教师 都是使用系统的用户;

系统管理员管理(添加、删除)学生、教务人员、系统管理员、教师用户; 学生 选修 课程 教师 教授 课程 班级 安排 课程

2.3 初步的类图

图3 业务类图

3 用例实现

3.1 用例实现类图(实现某个用例的实体类、边界类、控制类以及它们之间的关系,参考书上图11.31)

1 学生信息管理用例类图

图4学生信息管理用例类图

2 教师信息管理用例类图

图5教师信息管理用例类图

3 班级信息管理用例类图

图6班级信息管理用例类图

4 课程信息管理

图7课程信息管理类图

5 成绩信息管理

图8 成绩信息管理类图

其他用例的类图类似……

3.2 用例场景实现(顺序图或协作图,参考书上图11.35) 1、学生信息管理用例顺序图

图9学生信息管理用例顺序图

其他待续…….

4 完善后的类图(参考书上图11.59) 5 界面设计

1)“学生信息管理 ”模块界面设计

(1) 该应用程序基于命令行用户界面 (2) 首先出现如下的一级功能菜单: 1——学生信息添加 2——学生信息删除 3——学生信息更新 4——退出

6 面向对象设计

1)“学生信息管理 ”用例类的设计

(1) Student类,该类表示学生类,根据文件中的学生信息,至少需要定义下列成员变量:学生学号、学生姓名、学生年龄、学生专业、学生班号。然后定义相应的构造方法和上述成员变量的getter/setter。

(2) Frm_Student类,该类用于显示学生信息管理界面,根据前述的需求分析,至少需要定义如下方法:

public static void showMainMenu()

public static void showAddStudent()

public static void showUpdateStudent()

public static void showDeleteStudent()

(3)Con_Student类,该类完成具体的功能,如学生信息添加、修改和修改。 添加功能:

public static void addStudent(Student stu)

public static void deleteStudent(Student stu)

public static void updateStudent(Student stu)

(4)定义应用程序测试类StudentTestApplication

其他用例类的设计类似

………..

7 面向对象实现(可以打一个代码包)

1)“学生信息管理 ”用例类的实现

(1)Student 类的实现

import java.sql.*;

public class Student{

public Student() { }

public String getName() {

return sname;

}

public void setName(String name) {

this .sname = name;

}

public String getStudentNo() {

return sno;

}

public void setStudentNo(String sno) {

this .sno = sno;

}

public String getAge() {

return sage;

}

public void setAge(int age) {

this .sage = age;

}

public String getMagjor() {

return smajor;

}

public void setMajor(String major) {

this .smajor = major; }

public void setDsno(String dsno)

{

this .dsno = dsno

}

public String getDsno()

{

return this .dsno

}

private String sname ;// student name

private String sno ;// student number

private int sage ;// student age

private String smajor; // student major

private String dsno; // student class number

}

(2)Con_Student类的实现

import java.sql.*;

public class ConStudent{

public ConStudent() { }

public static void addStudent(Student stu){ Statement ps;

ResultSet rs;

Connection con;

String url;

// Connect Database

try {

name

"com.microsoft.sqlserver.jdbc.SQLServerDriver" ;

url ="jdbc:sqlserver://localhost:1433; DatabaseName=student";

Class.forName(name);

con = DriverManager.getConnection(url, "shang" , "shang123" );

ps

ResultSet.CONCUR_READ_ONLY);

}

catch (Exception err) {

String error = err.getMessage();

System.out.println("Database Connect Err" + error);

}

// Save Object Student to table Student

try { = = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,

ps.executeUpdate("Insert Into student Values('" +stu.sno +

"','" +stu.sname +

"','" +stu.sage + "','"

+stu.smajor + "','" +stu.dsno + "')" );

this .dispose();

}

catch (SQLException sqle) {

String error = sqle.getMessage();

System.out.println("save student error " + error);

}

// Close JDBC

if (rs != null ){

try {

rs.close() ;

}catch (SQLException e)

{

e.printStackTrace() ;

}

}

if (ps != null ){

try {

ps.close() ;

}catch (SQLException e){

e.printStackTrace() ;

}

}

if (con != null ){

try {

con.close() ;

}catch (SQLException e)

{

e.printStackTrace() ;

}

}

}

public static void deleteStudent(Student stu){ Statement ps;

ResultSet rs;

Connection con;

String url;

// Connect Database

try {

name

"com.microsoft.sqlserver.jdbc.SQLServerDriver" ;

url

Class.forName(name);

con = DriverManager.getConnection(url, "shang" , "shang123" );

ps

ResultSet.CONCUR_READ_ONLY);

}

catch (Exception err) {

String error = err.getMessage();

System.out.println("Database Connect Err" + error);

}

// Delete Object Student from table Student = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ="jdbc:sqlserver://localhost:1433; DatabaseName=student"; =

try {

ps.executeUpdate("DELETE FROM student WHERE sno = " + stu.sno );

this .dispose();

}

catch (SQLException sqle) {

String error = sqle.getMessage();

System.out.println("save student error " + error);

}

// Close JDBC

if (rs != null ){ //

try {

rs.close() ;

}catch (SQLException e)

{

e.printStackTrace() ;

}

}

if (ps != null ){

try {

ps.close() ;

}catch (SQLException e){

e.printStackTrace() ;

}

}

if (con != null ){

try {

con.close() ;

}catch (SQLException e)

{

e.printStackTrace() ;

}

}

public static void updateStudent(Student stu) {

Statement ps;

ResultSet rs;

Connection con;

String url;

// Connect Database

try {

name

"com.microsoft.sqlserver.jdbc.SQLServerDriver" ;

url

Class.forName(name);

con = DriverManager.getConnection(url, "shang" , "shang123" );

ps

ResultSet.CONCUR_READ_ONLY);

}

catch (Exception err) {

String error = err.getMessage();

System.out.println("Database Connect Err" + error);

}

// update Object Student from table Student

try { = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ="jdbc:sqlserver://localhost:1433; DatabaseName=student"; =

String sql = "UPDATE Registration " + "SET age = 30 WHERE id in (100, 101)"; ps.executeUpdate("UPDATE student SET sno = " + stu.sno + "sname = " + stu.sname + "sage = " + stu.sage + "smajor = " + stu.smajor + "dsno = " + stu.dsno ); this .dispose();

}

catch (SQLException sqle) {

String error = sqle.getMessage();

System.out.println("update student error " + error);

}

// Close JDBC

if (rs != null ){ //

try {

rs.close() ;

}catch (SQLException e)

{

e.printStackTrace() ;

}

}

if (ps != null ){

try {

ps.close() ;

}catch (SQLException e){

e.printStackTrace() ;

}

}

if (con != null ){

try {

con.close() ;

}catch (SQLException e)

{

e.printStackTrace() ;

}

}

}

}

(3)Frm_Student类的实现

import java.io.IOException;

import java.util.Scanner;

public class FrmStudent{

public static void showMainMenu()

{

boolean exitFlag = false ;

System.out.println("1 Add a new student");

System.out.println("2 Delete a student from table" );

System.out.println("3 Update student from student table");

System.out.println("4 exit");

while (true ) {

System.out.print("please

code" );

Scanner s = new Scanner(System.in);

int choice = s.nextInt();

switch (choice) {

case 1: showAddStudent(); break ;

case 2: showDeleteStudent();

break ;

case 3: showUpdateStudent();

break ;

case 4: exitFlag = true ;

break ;

default : System.err.println("error input 8 again" );

} choose function

if (exitFlag) {

break ;

}

}

}

public static void showAddStudent()

{

private String sname ;// student name private String sno ;// student number private int sage ;// student age

private String smajor; // student major

private String dsno; // student class number Scanner scanner = new Scanner(System.in); System.out.print("\t input student number"); sno = scanner.next();

Scanner scanner = new Scanner(System.in); System.out.print("\t input student name"); sname = scanner.next();

Scanner scanner = new Scanner(System.in); System.out.print("\t input student age"); sage = scanner.next();

Scanner scanner = new Scanner(System.in); System.out.print("\t input student major"); smajor = scanner.next();

Scanner scanner = new Scanner(System.in);

System.out.print("\t input student class number" );

dsno = scanner.next();

Student stu = new Student();

stu.setName(sname);

stu.setStudentNo(sno);

stu.setAge(sage);

stu.setMajor(smajor);

stu.setDsno(dsno);

ConStudent.addStudent(stu);

}

public static void showUpdateStudent(){}

public static void showDeleteStudent(){}

}

9 测试(见测试文档)

面向对象分析与设计

1 用例模型分析 1.1 需求描述

1)学生信息管理

教务人员通过学生信息管理模块来管理学生信息,如进行学生信息的添加、修改、删除等。在进行学生信息的添加时,要进行学生学号是否有重复的检查,如果添加的学生编号有重复就要对用户进行提示。只有在不重复的情况下才能进行信息的添加。在进行信息的删除时,要首先提示用户确认是否要删除,只有在用户确认的情况下才能进行信息的删除。在进行信息的修改时,要根据用户选定的学生进行修改,即列出用户选定的学生的所有信息,在这个基础上进行学生信息的修改。 2)教师信息管理

教务工作人员通过此模块来管理教师信息,包括教师信息的添加、修改、删除等。在进行教师信息的添加时候,要进行教师编号是否重复的检验,如果添加的教师编号重复要对用户进行提示,只有在不重复的情况下才能进行信息的添加。在进行信息的删除时,要提示用户确认是否删除,只有在用户确认后才能够进行信息的删除。在进行信息的修改时,要能够根据用户选定的教师项进行修改,即列出用户选定的教师的所有信息,在这个基础上进行班级信息的修改。 3)班级信息管理

教务工作人员通过此模块来管理班级的信息,包括班级信息的添加,修改,删除等。在进行班级信息的添加时,要进行班级的编号是否重复的检查,如果添加的班级编号重复要对用户进行提示,只有在信息不重复的前提下才能进行信息的添加,在进行信息的删除时,要提示用户确认是否删除,只有用户确认后才能进行信息的删除。在进行信息的修改时,要能根据用户选定的班级进行修改,即列出用户选定的班级的所有信息,在这个基础上进行班级信息的修改。 4)课程信息管理

教务工作人员通过该模块来管理课程的基本信息,包括: (1) 课程信息等的添加,修改,删除。

在进行信息的添加时,打开新的窗口进行信息的录入,在保存的时候要进行课程的编号

是否重复的检查,如果添加的课程编号重复的要对用户进行提示,只有在不重复的情况下才能进行信息的添加。在进行信息的删除的时候,要让用户确认是否要删除,只有确认后才能进行删除操作。在进行信息的修改的时候,要根据用户选定的课程进行修改,即列出用户选定课程的信息,在这个基础上进行课程信息的修改。

(2)班级课程的设置(教学任务)。 (3)教师授课信息的设置。 5)成绩信息管理

任课教师可以通过该模块录入自己担任的某门课的成绩,在录入学生成绩的时,教师选定课程并选定学生班级,才能输入学生成绩。教务工作人员通过该模块来进行学生成绩的修改。

6)综合信息查询

通过该模块可以查询教务所需要的各种信息。

学生能够查询:个人基本信息、个人成绩信息、班级上课信息;

教务人员可以查询:学生基本信息、教师基本信息、课程信息、班级信息、学生成绩信息; 7)系统维护

系统管理员能够创建和维护教师、学生、教务管理员等用户账号信息。

1.2 用例图

系统管理员

图1 教务管理系统用例图

1.3 用例描述

用例1. 学生信息管理 1.1 简要说明

教务人员通过学生信息管理模块来管理学生信息,如进行学生信息的添加、修改、删除等。 2. 上下文图

教务人员

图2 “学生信息管理用例”

3. 事件流 3.1 基本流

E1: 教务人员选择“添加学生”

E1.1 教务人员输入新学生的基本信息(学号、姓名、性别、出生日期、学生

联系电话、家庭住址、家庭联系电话等); E1.2 教务人员点击保存;

E1.3 系统检查已有的学生学号,如果学号重复则转到A1;如果学号不重复且学生信息添加完整,则保存该学生信息到学生信息表中; E2 教务人员“删除学生信息”

E2.1 教务人员输入或选择学生班级;

E2.2 教务人员输入或选择要删除的学生学号; E2.3 系统提示教务人员“确认删除” E2.3 教务人员点击“确认”

E2.3 系统检查要删除学生的“班级”和“学号”,如果输入的“班级”或“学号”在系统中不存在,则转到A2;否则,删除该学号的学生信息和该学号相关的成绩信息;

E3 教务人员选择“修改学生信息”

E3.1 教务人员输入或选择要修改学生所在班级; E3.2 教务人员输入或选择要修改的学生学号;

E3.3 系统检查要修改学生的班级或学号,如果要修改的“班级”或“学号”在系统中不存在,则转到A3;否则,系统提前该学生的基本信息,显示在界面上,学生的学号不允许修改;

E3.4 教务人员录入该学生的修改信息;

E3.4 教务人员点击保存,系统将修改后的信息保存到学生信息表中。 3.2 备选流

3.2.1 第一备选流

A1:系统提示“已经存在该学号的学生,请核对学生学号信息”,系统返回到添加学生信息的界面; A2:系统提示“要删除学生的班级或学号不存在,请确认”,系统返回到删除界面; A3:系统提示“要修改学生的班级或学号不存在,请确认”,系统返回到修改界面; 3.2.1.1 备选支流

[如果能使表达更明确,备选流又可再分为多个支流。] 3.2.2 第二备选流

[在一个用例中很可能会有多个备选流。为了使表达更清晰,应将各个备选流分开说明。使用备选流可以提高用例的可读性,并防止将用例分解为过多的层次。应切记,用例只是文本说明,其主要目的是以清晰、简洁、易于理解的方式记录系统的行为。] 4. 非功能需求

[在这个小节中,主要对该用例所涉及的非功能性需求进行描述。由于其通常很难以在事件流中进行表述,因此单列为一小节进行阐述。这些需求通过包括法律法规、应用程序标准、质量属性(可用性、可靠性、性能、支持性等)、兼容性、可移植性,以及设计约束等方面的需求。在这些需求的描述方面,一定要注意使其可度量、可验证,否则就容易流于形式,形同摆设。] 5. 前置条件

教务人员须先进行身份验证,登陆到教务系统 6. 后置条件

教务人员完成学生信息管理操作后,可以返回到系统主界面或者退出系统 7. 扩展点

[此用例的扩展点,通常是用例图中的extent 关系。] 用例2. 信息查询 1.1 简要说明

教务人员通过学生信息管理模块来管理学生信息,如进行学生信息的添加、修改、删除等。 2. 上下文图

图2 “信息查询用例子图”

3. 事件流 3.1 基本流

E1: 教务人员选择“添加学生”

E1.1 教务人员输入新学生的基本信息(学号、姓名、性别、出生日期、学生

联系电话、家庭住址、家庭联系电话等); E1.2 教务人员点击保存;

E1.3 系统检查已有的学生学号,如果学号重复则转到A1;如果学号不重复且学生信息添加完整,则保存该学生信息到学生信息表中; E2 教务人员“删除学生信息”

E2.1 教务人员输入或选择学生班级;

E2.2 教务人员输入或选择要删除的学生学号; E2.3 系统提示教务人员“确认删除” E2.3 教务人员点击“确认”

E2.3 系统检查要删除学生的“班级”和“学号”,如果输入的“班级”或“学

号”在系统中不存在,则转到A2;否则,删除该学号的学生信息和该学号相关的成绩信息;

E3 教务人员选择“修改学生信息”

E3.1 教务人员输入或选择要修改学生所在班级; E3.2 教务人员输入或选择要修改的学生学号;

E3.3 系统检查要修改学生的班级或学号,如果要修改的“班级”或“学号”在系统中不存在,则转到A3;否则,系统提前该学生的基本信息,显示在界面上,学生的学号不允许修改;

E3.4 教务人员录入该学生的修改信息;

E3.4 教务人员点击保存,系统将修改后的信息保存到学生信息表中。 3.2 备选流

3.2.1 第一备选流

A1:系统提示“已经存在该学号的学生,请核对学生学号信息”,系统返回到添加学生信息的界面; A2:系统提示“要删除学生的班级或学号不存在,请确认”,系统返回到删除界面; A3:系统提示“要修改学生的班级或学号不存在,请确认”,系统返回到修改界面; 3.2.1.1 备选支流

[如果能使表达更明确,备选流又可再分为多个支流。] 3.2.2 第二备选流

[在一个用例中很可能会有多个备选流。为了使表达更清晰,应将各个备选流分开说明。使用备选流可以提高用例的可读性,并防止将用例分解为过多的层次。应切记,用例只是文本说明,其主要目的是以清晰、简洁、易于理解的方式记录系统的行为。] 4. 非功能需求

[在这个小节中,主要对该用例所涉及的非功能性需求进行描述。由于其通常很难以在事件流中进行表述,因此单列为一小节进行阐述。这些需求通过包括法律法规、应用程序标准、质量属性(可用性、可靠性、性能、支持性等)、兼容性、可移植性,以及设计约束等方面的需求。在这些需求的描述方面,一定要注意使其可度量、可验证,否则就容易流于形式,形同摆设。] 5. 前置条件

教务人员须先进行身份验证,登陆到教务系统 6. 后置条件

教务人员完成学生信息管理操作后,可以返回到系统主界面或者退出系统 7. 扩展点

[此用例的扩展点,通常是用例图中的extent 关系。]

2 实体类分析

2.1 实体类(名词分析方法)

角色:学生、教务人员、系统管理员、教师

实体:班级信息、课程信息、学生信息、教师信息、 行为结果:学生成绩、教师授课信息、教学任务

2.2 实体类之间的关系分析

学生、教务人员、系统管理员、教师 都是使用系统的用户;

系统管理员管理(添加、删除)学生、教务人员、系统管理员、教师用户; 学生 选修 课程 教师 教授 课程 班级 安排 课程

2.3 初步的类图

图3 业务类图

3 用例实现

3.1 用例实现类图(实现某个用例的实体类、边界类、控制类以及它们之间的关系,参考书上图11.31)

1 学生信息管理用例类图

图4学生信息管理用例类图

2 教师信息管理用例类图

图5教师信息管理用例类图

3 班级信息管理用例类图

图6班级信息管理用例类图

4 课程信息管理

图7课程信息管理类图

5 成绩信息管理

图8 成绩信息管理类图

其他用例的类图类似……

3.2 用例场景实现(顺序图或协作图,参考书上图11.35) 1、学生信息管理用例顺序图

图9学生信息管理用例顺序图

其他待续…….

4 完善后的类图(参考书上图11.59) 5 界面设计

1)“学生信息管理 ”模块界面设计

(1) 该应用程序基于命令行用户界面 (2) 首先出现如下的一级功能菜单: 1——学生信息添加 2——学生信息删除 3——学生信息更新 4——退出

6 面向对象设计

1)“学生信息管理 ”用例类的设计

(1) Student类,该类表示学生类,根据文件中的学生信息,至少需要定义下列成员变量:学生学号、学生姓名、学生年龄、学生专业、学生班号。然后定义相应的构造方法和上述成员变量的getter/setter。

(2) Frm_Student类,该类用于显示学生信息管理界面,根据前述的需求分析,至少需要定义如下方法:

public static void showMainMenu()

public static void showAddStudent()

public static void showUpdateStudent()

public static void showDeleteStudent()

(3)Con_Student类,该类完成具体的功能,如学生信息添加、修改和修改。 添加功能:

public static void addStudent(Student stu)

public static void deleteStudent(Student stu)

public static void updateStudent(Student stu)

(4)定义应用程序测试类StudentTestApplication

其他用例类的设计类似

………..

7 面向对象实现(可以打一个代码包)

1)“学生信息管理 ”用例类的实现

(1)Student 类的实现

import java.sql.*;

public class Student{

public Student() { }

public String getName() {

return sname;

}

public void setName(String name) {

this .sname = name;

}

public String getStudentNo() {

return sno;

}

public void setStudentNo(String sno) {

this .sno = sno;

}

public String getAge() {

return sage;

}

public void setAge(int age) {

this .sage = age;

}

public String getMagjor() {

return smajor;

}

public void setMajor(String major) {

this .smajor = major; }

public void setDsno(String dsno)

{

this .dsno = dsno

}

public String getDsno()

{

return this .dsno

}

private String sname ;// student name

private String sno ;// student number

private int sage ;// student age

private String smajor; // student major

private String dsno; // student class number

}

(2)Con_Student类的实现

import java.sql.*;

public class ConStudent{

public ConStudent() { }

public static void addStudent(Student stu){ Statement ps;

ResultSet rs;

Connection con;

String url;

// Connect Database

try {

name

"com.microsoft.sqlserver.jdbc.SQLServerDriver" ;

url ="jdbc:sqlserver://localhost:1433; DatabaseName=student";

Class.forName(name);

con = DriverManager.getConnection(url, "shang" , "shang123" );

ps

ResultSet.CONCUR_READ_ONLY);

}

catch (Exception err) {

String error = err.getMessage();

System.out.println("Database Connect Err" + error);

}

// Save Object Student to table Student

try { = = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,

ps.executeUpdate("Insert Into student Values('" +stu.sno +

"','" +stu.sname +

"','" +stu.sage + "','"

+stu.smajor + "','" +stu.dsno + "')" );

this .dispose();

}

catch (SQLException sqle) {

String error = sqle.getMessage();

System.out.println("save student error " + error);

}

// Close JDBC

if (rs != null ){

try {

rs.close() ;

}catch (SQLException e)

{

e.printStackTrace() ;

}

}

if (ps != null ){

try {

ps.close() ;

}catch (SQLException e){

e.printStackTrace() ;

}

}

if (con != null ){

try {

con.close() ;

}catch (SQLException e)

{

e.printStackTrace() ;

}

}

}

public static void deleteStudent(Student stu){ Statement ps;

ResultSet rs;

Connection con;

String url;

// Connect Database

try {

name

"com.microsoft.sqlserver.jdbc.SQLServerDriver" ;

url

Class.forName(name);

con = DriverManager.getConnection(url, "shang" , "shang123" );

ps

ResultSet.CONCUR_READ_ONLY);

}

catch (Exception err) {

String error = err.getMessage();

System.out.println("Database Connect Err" + error);

}

// Delete Object Student from table Student = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ="jdbc:sqlserver://localhost:1433; DatabaseName=student"; =

try {

ps.executeUpdate("DELETE FROM student WHERE sno = " + stu.sno );

this .dispose();

}

catch (SQLException sqle) {

String error = sqle.getMessage();

System.out.println("save student error " + error);

}

// Close JDBC

if (rs != null ){ //

try {

rs.close() ;

}catch (SQLException e)

{

e.printStackTrace() ;

}

}

if (ps != null ){

try {

ps.close() ;

}catch (SQLException e){

e.printStackTrace() ;

}

}

if (con != null ){

try {

con.close() ;

}catch (SQLException e)

{

e.printStackTrace() ;

}

}

public static void updateStudent(Student stu) {

Statement ps;

ResultSet rs;

Connection con;

String url;

// Connect Database

try {

name

"com.microsoft.sqlserver.jdbc.SQLServerDriver" ;

url

Class.forName(name);

con = DriverManager.getConnection(url, "shang" , "shang123" );

ps

ResultSet.CONCUR_READ_ONLY);

}

catch (Exception err) {

String error = err.getMessage();

System.out.println("Database Connect Err" + error);

}

// update Object Student from table Student

try { = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ="jdbc:sqlserver://localhost:1433; DatabaseName=student"; =

String sql = "UPDATE Registration " + "SET age = 30 WHERE id in (100, 101)"; ps.executeUpdate("UPDATE student SET sno = " + stu.sno + "sname = " + stu.sname + "sage = " + stu.sage + "smajor = " + stu.smajor + "dsno = " + stu.dsno ); this .dispose();

}

catch (SQLException sqle) {

String error = sqle.getMessage();

System.out.println("update student error " + error);

}

// Close JDBC

if (rs != null ){ //

try {

rs.close() ;

}catch (SQLException e)

{

e.printStackTrace() ;

}

}

if (ps != null ){

try {

ps.close() ;

}catch (SQLException e){

e.printStackTrace() ;

}

}

if (con != null ){

try {

con.close() ;

}catch (SQLException e)

{

e.printStackTrace() ;

}

}

}

}

(3)Frm_Student类的实现

import java.io.IOException;

import java.util.Scanner;

public class FrmStudent{

public static void showMainMenu()

{

boolean exitFlag = false ;

System.out.println("1 Add a new student");

System.out.println("2 Delete a student from table" );

System.out.println("3 Update student from student table");

System.out.println("4 exit");

while (true ) {

System.out.print("please

code" );

Scanner s = new Scanner(System.in);

int choice = s.nextInt();

switch (choice) {

case 1: showAddStudent(); break ;

case 2: showDeleteStudent();

break ;

case 3: showUpdateStudent();

break ;

case 4: exitFlag = true ;

break ;

default : System.err.println("error input 8 again" );

} choose function

if (exitFlag) {

break ;

}

}

}

public static void showAddStudent()

{

private String sname ;// student name private String sno ;// student number private int sage ;// student age

private String smajor; // student major

private String dsno; // student class number Scanner scanner = new Scanner(System.in); System.out.print("\t input student number"); sno = scanner.next();

Scanner scanner = new Scanner(System.in); System.out.print("\t input student name"); sname = scanner.next();

Scanner scanner = new Scanner(System.in); System.out.print("\t input student age"); sage = scanner.next();

Scanner scanner = new Scanner(System.in); System.out.print("\t input student major"); smajor = scanner.next();

Scanner scanner = new Scanner(System.in);

System.out.print("\t input student class number" );

dsno = scanner.next();

Student stu = new Student();

stu.setName(sname);

stu.setStudentNo(sno);

stu.setAge(sage);

stu.setMajor(smajor);

stu.setDsno(dsno);

ConStudent.addStudent(stu);

}

public static void showUpdateStudent(){}

public static void showDeleteStudent(){}

}

9 测试(见测试文档)


相关内容

  • 学校选课系统面向对象分析与设计
  • 学校选课系统面向对象分析与设计 王晓辉1谭晓华2 (1山东大学管理学院,山东 济南250100) 济南 250014) (2山东财政学院计算机信息工程学院,山东 [摘要]本文以学校选课系统为例,对如何利用umI'L吾言进行对象建模.如何利用面向对象语言实现对象模型等问题进行了初步探讨.[关键词]面向 ...

  • [软件工程]教学大纲
  • 软件工程 一. 说明 (一) 课程性质 <软件工程>课程是计算机科学与技术专业必修的一门专业课程.为了摆脱软件危机的困扰,一门研究软件开发与维护的普遍原理和技术的工程学科--软件工程学从60年代末期开始迅速发展起来了,现在它已经成为计算机科学技术的一个重要分支,一个异常活跃的研究领域.严 ...

  • 信息管理系统常用开发方法分类
  • 信息管理系统常用开发方法分类 在系统开发的早期,由于缺乏系统开发思想,没能形成工程的概念,以至于60年代出现了所谓"软件危机",也促使了一门新科学--"软件工程"的诞生.管理信息系统工作者对信息系统的开发提出了许多开发方法,其中常用的有结构化法(Structu ...

  • 51Testing软件测试网:面向对象软件的测试
  • 当前位置:首页>>软件测试技术>>功能测试>>正文 面向对象软件的测试 文章出处:不详 作者:周梦醒 发布时间:2005-10-30 一 摘要(Abstract) [摘要] 面向对象技术在软件工程中的推广使用,使得传统的测试技术和方法受到了极大的冲击.对面向对象技 ...

  • 面向对象的软件工程与面向对象的建模方法
  • 54 福建电脑 2007年第8期 面向对象的软件工程与面向对象的建模方法 毕忠东.刘启明 (烟台师范学院 [摘 要]: 山东烟台264025) 本文评述了软件工程的两个发展阶段,重点介绍了面向对象的几种建模方法并作一比较,阐述了统一建模 语言的优越性,并对其组成.特征.建模过程进行了描述. [关键词 ...

  • 程序设计方法学
  • 程序设计方法学 程序设计方法学是指用以指导程序设计各阶段工作的原理和原则,以及依此提出的设计技术.有时也指研究这些原理.原则和技术的学科.程序设计方法学的目标是能设计出可靠.易读而且代价合理的程序.程序设计方法学包括程序理论.研制技术.支援环境.工程规范和自动程序设计等课题,使程序设计更加科学化和工 ...

  • 程序设计基础课程简介
  • <程序设计基础>课程简介 课程编号:E1112101 英文名称:Programming Fundamentals 学 分:3 学 时:48 授课对象:计算机科学与技术专业,软件工程专业,网络工程专业 课程目标:通过理论教学,使学生初步了解计算机软硬件系统,掌握计算机的基本使用方法使学生较 ...

  • 软件工程(第三版)教学大纲
  • 软件工程(第三版) 教学大纲 一.教学目的与任务 软件工程是计算机软件.计算机应用等相关专业的一门重要的专业课.必修课.是一门综合性和实践性很强的课程.本课程讲述软件工程的基本概念.原理和方法,软件开发的过程.步骤.方法与技术,要求学生了解软件项目开发的一般过程,掌握软件开发的主流方法,了解软件开发 ...

  • 软件工程考试范围
  • 1. 什么是软件?软件与硬件的区别?软件的特点? 软件的定义:软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合. 软件与硬件的区别: 软件的特点:(1)软件是一种逻辑实体,而不是具体的物理实体.因而它具有抽象性 (2)软件的生产与硬件不同,在它的开发过程中没有明显 ...

  • [面向对象的分析与设计]教学大纲
  • ACCP4.0STAGE3面向对象的分析与设计 教学大纲2005 年 11 月 29 日 Version 1.01 修改记录: 版本 V1.0 日期 2005-12 修改人 董平一. 课程目标  掌握 UML 建模语言  掌握使用 UML 进行面向对象的分析与设计  掌握使用 Rational ...