面向对象课程设计长沙学院课程设计说明书.docx
《面向对象课程设计长沙学院课程设计说明书.docx》由会员分享,可在线阅读,更多相关《面向对象课程设计长沙学院课程设计说明书.docx(49页珍藏版)》请在冰点文库上搜索。
面向对象课程设计长沙学院课程设计说明书
长沙学院
课程设计说明书
题目学生成绩管理系统
系(部)计算机科学与技术系
专业(班级)信息系统2班
姓名谌雨晴
学号2009022324
指导教师叶晖
起止日期2011、12、19~2011、12、30
课程设计任务书
课程名称:
面向对象程序设计课程设计
设计题目:
学生成绩管理系统
已知技术参数和设计要求:
主要功能:
(1)用户管理:
管理用户,不同的用户赋予不同的权限。
(2)课程管理:
维护各学期开设课程的信息。
(3)成绩管理:
输入、修改成绩,对成绩进行排名、汇总。
(4)学生、任课老师信息管理:
增删改学生和老师的个人信息。
(5)授课信息管理:
对课程名、班级、任课老师等信息进行维护。
(6)查询:
对学生成绩等信息进行查询。
设计要求:
界面友好,易于操作,运用面向对象的分析方法来设计模型,掌握数据库编程的基本方法。
各阶段具体要求:
1、需求分析阶段
(1)写出需求分析(做什么)
(2)分析系统中的各个实体之间的关系及其属性和行为
(3)要求问题分析和功能定义准确
2、系统设计阶段
(1)根据问题描述,设计系统的类层次
(2)完成类层次中各个类的描述(包括属性和方法)
(3)完成类中各个成员函数的定义
(4)用户界面的设计
(5)要求理解和掌握面向对象设计思想,运用到设计中
(6)要求数据结构定义合理,类层次结构清晰
3、编码实现阶段
(1)完成代码编写
(2)要求代码编写规范
4、系统测试阶段
(1)完成功能调试
(2)要求完成必要的测试工作
5、交付实施阶段
(1)提交可正常执行的系统
(2)提交系统需求说明书、设计说明书、程序代码
(3)撰写课程设计报告书
(4)要求规范地书写文档
设计工作量:
40课时
工作计划:
安排两周时间进行课程设计,软件开发流程如下,第一周完成1~4,第二周完成5~8,设计说明书同步进行;
1)选定题目
2)需求分析
3)系统设计
4)编码实现
5)系统测试
6)交付实施
计划时间
指导老师
学生
15~16周
段晓娟
09系统1班
15~16周
叶晖
09系统2班
15~16周
毛伟
09嵌入1班
15~16周
胡灵敏
09嵌入2班
指导教师签名:
日期:
教研室主任签名:
日期:
系主任签名:
日期:
长沙学院课程设计鉴定表
姓名
谌雨晴
学号
2009022324
专业
信息系统
班级
系统2班
设计题目
学生成绩管理系统
指导教师
叶晖
指导教师意见:
评定等级:
教师签名:
日期:
答辩小组意见:
评定等级:
答辩小组长签名:
日期:
教研室意见:
教研室主任签名:
日期:
系(部)意见:
系主任签名:
日期:
说明
课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;
一、目的及要求
根据已知的需求说明及要求进行系统的设计与实现,掌握面向对象程序设计的基础知识、基本理论、原理和实现技术。
使学生获得面向对象程序设计思想,并能运用JAVA语言进行面向对象程序的设计和研究的基本知识和能力,为学生进一步的学习和今后的工作打下扎实的基础,具体包括:
(1)完成问题陈述中所提到的所有需求功能。
(2)要求撰写不少于3000个文字的文档,包括:
系统需求、系统设计、程序代码、测试结果等。
二、需求规约
2.1功能需求
根据课程设计任务书可知,该学生成绩管理系统(以后简称系统)各实体间的基本关系如下图。
图1-1各实体间的关系图
根据该用例图,进行细化后可知,该系统最少应该实现以下功能:
1、登录
输入:
用户名和密码
输出:
用户名和密码匹配,进入下一个界面
异常:
用户名和密码不匹配,提示错误信息。
处理流程:
用户从登录界面填写自己的用户名与密码,单击登录,进入系统。
单击取消,对出登录界面。
若用户名与密码不匹配,则抛出异常。
说明:
每一个用户只有一个账号。
用户名和密码是有管理员事先导入到数据库中的,学生用户名为学生学号,密码为学生生日,长度为8位。
老师用户名为职工号,密码老师生日,长度为8位。
管理员自身有一个系统帐号manager,密码为123456.。
并且学生、老师、管理员之间的权限是不同的。
同时由初始管理员在新增管理员账号。
另外,老师、学生和管理员登录成功以后进入的界面是不同的。
具体界面设计请参照界面设计部分。
2、信息维护,包括以下几点:
说明:
该部分的以下所有功能仅对管理员开放。
2.1对课程信息的增删改查
说明:
课程信息包括课程名称,上课的老师,上课的人数,上课的教室,上课的班级。
2.1.1查询
输入:
课程编号或者课程名
输出:
对应该课程编号或者课程名的所有课程信息。
异常:
没有找到相应的课程信息,提示错误信息。
处理流程:
用户在文本框中输入课程编号或者课程名,单击查询。
连接数据库,找到相应的课程信息,并以表格的形式将所有找到的信息显示出来。
若找不到相应的信息则抛出异常。
2.1.2添加
输入:
课程信息
异常:
课程已经存在,提示错误信息
处理流程:
单击添加按钮,用户输入课程信息,单击确认。
连接到数据库,看是否已经存在相应的信息,不存在则添加成功,并回到添加界面。
存在则抛出异常。
2.1.3删除
输入:
课程编号或者课程名
输出:
提示删除成功信息
异常:
该课程不存在,提示错误信息
处理流程:
选定要删除的对象,单击删除,提示确认删除信息。
单击确认,如果存在该信息则删除该信息,并回到上一界面。
如果不存在则抛出异常。
如果单击取消,则回到上一界面。
2.1.4修改
输入:
课程编号或者课程名
异常:
修改后的数据不合法,提示错误信息。
处理流程:
选定要修改的对象,单击修改。
用户修改信息完成后,单击确认。
如果信息合法回到上一界面。
如果信息不合法,抛出异常。
2.2对成绩进行增删改查
说明:
成绩信息应该包括课程编号,学生编号,分数。
2.2.1查询
输入:
课程编号或者学生编号
输出:
对应该课程编号的所有学生的成绩,或者对应该学生编号的所有课程成绩。
异常:
没有找到相应的课程编号或者学生编号,提示错误信息。
处理流程:
在输入信息后,单击查询。
如果存在满足条件的信息,则以表单的形式,输出所有满足条件的信息。
如果不存在,则抛出异常。
2.2.1添加
输入:
成绩信息
异常:
该项成绩信息已经存在,提示错误信息
处理流程:
单击添加按钮,用户输入成绩信息,单击确认。
连接到数据库,看是否已经存在相应的信息,不存在则添加成功,并回到添加界面。
存在则抛出异常。
2.2.3删除
输入:
课程编号或者学生编号
输出:
提示删除成功信息
异常:
该成绩信息不存在,提示错误信息
处理流程:
选定要删除的对象,单击删除,提示确认删除信息。
单击确认,如果存在该信息则删除该信息,并回到上一界面。
如果不存在则抛出异常。
如果单击取消,则回到上一界面。
2.2.4修改
输入:
课程编号或者学生编号
异常:
修改后的数据不合法,提示错误信息。
处理流程:
选定要修改的对象,单击修改。
用户修改信息完成后,单击确认。
如果信息合法回到上一界面。
如果信息不合法,抛出异常。
2.3对用户信息的增删改查
说明:
用户信息应该包括编号,用户名,密码,角色(根据角色分配权限)。
2.3.1查询
输入:
编号或者用户名
输出:
该编号或者对应该用户名的所有用户成绩。
异常:
没有找到相应的课号或者用户名,提示错误信息。
处理流程:
在输入信息后,单击查询。
如果存在满足条件的信息,则以表单的形式,输出所有满足条件的信息。
如果不存在,则抛出异常。
2.3.1添加
输入:
用户信息
异常:
该项成绩信息已经存在,提示错误信息
处理流程:
单击添加按钮,用户输入用户信息,单击确认。
连接到数据库,看是否已经存在相应的信息,不存在则添加成功,并回到添加界面。
存在则抛出异常。
2.3.3删除
输入:
编号或者用户名
输出:
提示删除成功信息
异常:
该成绩信息不存在,提示错误信息
处理流程:
选定要删除的对象,单击删除,提示确认删除信息。
单击确认,如果存在该信息则删除该信息,并回到上一界面。
如果不存在则抛出异常。
如果单击取消,则回到上一界面。
2.3.4修改
输入:
编号或者用户名
异常:
修改后的数据不合法,提示错误信息。
处理流程:
选定要修改的对象,单击修改。
用户修改信息完成后,单击确认。
如果信息合法回到上一界面。
如果信息不合法,抛出异常。
2.4对全校师生的信息增删改查
说明:
老师信息包括职工号、姓名、出生日期、工作部分、岗位、入职日期。
学生信息应该包括学号、姓名、出生日期、入学日期、系部、班级、性别。
在进行增删改查时,查询老师和学生的信息的实现和流程都是非常相似的,因此不做分开说明。
学生的学号和老师的职工号都用编号表示。
但是在实现时应该分开实现。
2.4.1查询
输入:
编号或者姓名
输出:
该编号或者对应该用户名的所有用户成绩。
异常:
没有找到相应的课号或者用户名,提示错误信息。
处理流程:
在输入信息后,单击查询。
如果存在满足条件的信息,则以表单的形式,输出所有满足条件的信息。
如果不存在,则抛出异常。
2.3.1添加
输入:
老师或者学生信息
异常:
该项老师或者学生信息已经存在,提示错误信息
处理流程:
单击添加按钮,用户输入老师或者学生信息,单击确认。
连接到数据库,看是否已经存在相应的信息,不存在则添加成功,并回到添加界面。
存在则抛出异常。
2.3.3删除
输入:
编号或者姓名
输出:
提示删除成功信息
异常:
该成绩信息不存在,提示错误信息
处理流程:
选定要删除的对象,单击删除,提示确认删除信息。
单击确认,如果存在该信息则删除该信息,并回到上一界面。
如果不存在则抛出异常。
如果单击取消,则回到上一界面。
2.3.4修改
输入:
编号或者姓名
异常:
修改后的数据不合法,提示错误信息。
处理流程:
选定要修改的对象,单击修改。
用户修改信息完成后,单击确认。
如果信息合法回到上一界面。
如果信息不合法,抛出异常。
3、录入成绩与修改成绩
说明:
系统应该对老师开放录入成绩与修改成绩的功能。
3.1录入成绩
输入:
成绩信息
异常:
该项成绩信息已经存在,提示错误信息
处理流程:
单击添加按钮,用户输入成绩信息,单击确认。
连接到数据库,看是否已经存在相应的信息,不存在则添加成功,并回到添加界面。
存在则抛出异常。
3.2修改成绩
输入:
课程编号或者学生编号
异常:
修改后的数据不合法,提示错误信息。
处理流程:
选定要修改的对象,单击修改。
用户修改信息完成后,单击确认。
如果信息合法回到上一界面。
如果信息不合法,抛出异常。
4、查询
说明:
该功能是对老师和学生开放的。
功能与实现流程与维护信息中的查询一致。
只是界面有所不同,详细的界面设计在后面的界面设计中会提到。
该功能的具体约束如下
1)学生能只够查询自己各科的成绩,总分以及排名以及自己所在班级要上的课。
2)老师可以根据自己的要求查询某一科目所有学生的成绩,某个班级的成绩排名情况。
3)老师可以查询自己要教的课程。
另外,如果没有找到所要查询的信息则应该提示相应的信息,提醒用户检查输入的查询条件。
2.2资源需求
硬件需求:
系统对硬件没有特殊要求,普通的PC机即可。
软件需求:
系统开发运行在windows操作系统下,使用eclipse开发,并且需要连接到数据库。
数据库选用MicrosoftAccess2000。
三、概要设计
3.1数据库设计
用户表user
字段名
字段类型
字段长度
字段约束
备注
ID
Int
50
Notnull
编号PrimaryKey
userID
Varchar
50
Notnull
学号或者职工号
role
int
10
Notnull
分教师、学生、系统管理员
pwd
Varchar
50
Notnull
密码
成绩表score:
字段名
字段类型
字段长度
字段约束
备注
score
int
10
本门课程该学生的得分
studentID
int
10
Notnull
对应学生表中得id
courseID
Int
10
Notnull
PrimaryKey对应课程表中得课程id
课程表course:
字段名
字段类型
字段长度
字段约束
备注
courseID
Varchar
50
Notnull
PrimaryKey
courseName
Varchar
50
Notnull
课程名
teacherName
Varchar
50
授课教师姓名
className
Varchar
50
上课的班级
number
int
50
Notnull
上课人数
room
char
4
Notnull
上课教室
学生表student:
字段名
字段类型
字段长度
字段约束
备注
studentID
char
10
Notnull
学号PrimaryKey
name
Varchar
50
Notnull
姓名
sex
char
1
Notnull
性别
Birthday
date
Notnull
出生年月
department
Varchar
50
Notnull
系部
className
int
10
Notnull
班级
entryDate
date
Notnull
入学年月
老师表teacher:
字段名
字段类型
字段长度
字段约束
备注
employeeID
char
10
Notnull
职工编号PrimaryKey
name
Varchar
50
Notnull
姓名
sex
char
1
Notnull
性别
birthday
date
Notnull
出生年月
department
Varchar
50
Notnull
工作部门
entryDate
date
Notnull
入职年月
3.2出错信息输出处理
该系统利用JoptionPane和MsgUtil类,编写了各种提示错误信息的方法。
程序课根据不同的情况调用不同的方法,来处理出错的信息。
例如:
JOptionPane.showMessageDialog(frame,msg);//显示提示信息
JOptionPane.showMessageDialog(this,"账号或密码错误!
");
同时,这些对话框不仅可以用来处理错误信息,还可用来完成一些提示功能
例如:
publicstaticintshowConfirmMsg(JFrameframe,Stringmsg){
intresult=JOptionPane.showConfirmDialog(frame,msg,"系统提示",
JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
returnresult;
}//显示确认对话框,该对话框的标题为系统提示,采用询问信息的方式,添加YES_NO_OPTION按钮。
例如:
intresult=viewer.MsgUtil.showConfirmMsg(ScoreInformationViewer.this,"确认退出窗口?
");
if(result==JOptionPane.YES_OPTION){
ScoreInformationViewer.this.dispose();
}
if(result==JOptionPane.NO_OPTION){
ScoreInformationViewer.this.setVisible(true);
}
四、详细设计
4.1登录模块
4.1.1功能
用户输入用户名和密码,系统根据用户名判断用户名与密码是否匹配,并根据用户的不同权限进入不同的子系统。
4.1.2输入项
用户名与密码,输入方式为键盘输入。
(如果没有特别说明,下文中输入信息的方式均为键盘输入)
4.1.3输出项
不同的子系统的主界面。
4.1.4流程/算法
首先收集用户输入的用户名与密码。
这里要注意的是由于密码使用的是JpasswordField,必须采用以下语句:
sp=String.valueOf(pwdField.getPassword()).trim();
将密码提取出来。
接下来是判断用户输入是否合法。
这主要有以下几种情况:
1、用户名不存在;
2、用户名与密码不匹配;
3、用户名与密码都正确
当出现用户名与密码都正确时,开始判断用户的权限,也就是user表中的role。
根据role的取值分为以下三种情况:
if(rr.equals("S")){
StudentMainViewersmv=newStudentMainViewer();//学生账号,进入学生系统的主界面
smv.setVisible(true);
smv.studentID=su;
}
if(rr.equals("T")){
TeacherMainViewertmv=newTeacherMainViewer();//老师账号,进入老师系统的主界面
tmv.setVisible(true);
tmv.eID=su;
}
if(rr.equals("M")){
AdminMainVieweramv=newAdminMainViewer();//管理员账号,进入管理员系统的主界面
amv.setVisible(true);
}
4.1.5接口
该模块数据接口为数据库中的user表。
4.1.6测试要点
能否在不同的错误情况下提示错误信息。
4.1.7尚未解决的问题
在该系统中用户不能自己对密码进行修改,但实际情况下,管理员只是提供一个初始密码,用户应该能够对密码进行修改。
而且在管理员的修改密码的过程中,并没有确认密码这一项。
4.2查询模块
4.2.1功能
查询数据库中的数据
4.2.2输入项
输入数据根据要查询的表的不同而有所不同,但主要选取大家比较容易记住的。
如要查询某个学生的信息,就输入某个学生的名字,要查询成绩就输入某个分数段。
4.2.3输出项
输出的项目为要查询的表中符合条件的所有信息。
并且以表格的形式出现在容器中。
4.2.4流程/算法
首先收集用户输入的查询条件,并保存在一个字符串变量中。
连接数据库,创建查询语句。
例如,在管理员系统中要查询某门课程的信息,便将下列语句传到数据库中:
csql.ps=csql.con.prepareStatement("SELECT*FROMcourseWHEREcourseName=?
");
其中?
为待传值的变量,将该变量赋值为存储用户输入信息。
语句如下:
csql.ps.setString(1,n);
执行查询语句:
csql.rs=csql.ps.executeQuery();
利用循环,首先将这些数据存到一个叫做course的对象中,在将这个对象插入到表格的第一行。
while(csql.rs.next()){
Object[]course={csql.rs.getString("courseID"),csql.rs.getString("courseName"),
csql.rs.getString("room"),csql.rs.getString("teacherName"),csql.rs.getInt("number"),csql.rs.getString("className")};//每一条结果都存在course对象中
model.insertRow(0,course);//将数据加载到表格中
}
4.2.5接口
该模块数据接口为数据库中的表。
为了连接方便,编写了一个connectSQL类用来连接数据库。
4.2.6测试要点
数据是否支持中文字符。
当数据超出一页时,是否会出现滚动条。
另外最重要的一点是信息内容要符合查询条件。
下面是输入中文字符的查询结果截图。
有图可知,在数据达到一定量的时候确实会出现滚动条,而且也支持中文查询。
图4-用户输入中文课程名
4.2.7尚未解决的问题
本模块只能查找符合某一个条件的信息,而且该条件还必须是系统预先设定的,例如查询课程信息就只能按照课程名来查找。
系统会在输入查询条件的输入框旁边提示输入的内容。
但是往往用户的需求是多样化。
实际上,该模块应该能够输出所有满足用户输入关键字的信息。
4.3添加模块
4.3.1功能
用户输入某一个项目的所有信息,将这些信息添加到数据库中。
4.3.2输入项
某个项目的所有信息,例如添加成绩时,就要输入课程编号,学生学号,成绩。
4.3.3输出项
没有输出,在添加成功以后会关闭添加窗口回到上一界面,并更新信息。
4.3.4流程/算法
首先收集用户输入的某个项目的所有信息,以下流程实现都以添加成绩为例。
在收集到这些信息以后要判断这些信息的合理性。
添加成绩时可能出现的不合法情况有:
1、输入信息中有一个或多个为空;
2、输入的成绩小于0或者大于100;
3、输入的学号或者课程号不存在于数据库中;
4、输入的某个学号的学生所在的班级并没有开设该课程号的课程。
通过连接数据库,比对输入信息与数据库中的信息,如果没有出现以上不合理的情况,那么说明该成绩是合法的,那么就将该信息插入到数据库中。
这时候数据库会自己判断该学生的该课程的成绩是否已经存在与数据库中,如果存在就会抛出一个SQLException,我们可以利用这个异常来弹出提示信息框,提示用户输入了重复的成绩。
总体来说,添加模块的氛围三大步骤,第一收集信息;第二判断信息是否合法;第三插入合法信息,如果信息重复,抛出异常处理的对话框。
4.3.5接口
该模块数据接口为数据库中的表。
4.3.6测试要点
能否在不同的错误情况下提示错误信息。
再添加成功之后,数据是否插入到了数据库,数据能否正茬显示在后续的查询界面中。
4.3.7尚未解决的问题
在添加是必须一个一个的添加,有很多的信息必须要重复输入。
比如,在录入某门课程的学生成绩时,应该在输入一次课程号以后,就不需要在此输入课称号,直到该课程号的所有学生的成绩都录入完毕。
4.4删除模块
4.4.1功能
删除用户选择的信息
4.4.2输入项
用户不需要输入数据,只需要单击到要删除的对象即可。
(如果没有特别说明,下文中选择对象均为用鼠标点击)
4.4.3输出项
没有输出,在删除成功以后会关闭添加窗口回到上一界面,并更新信息。
4.4.4流程/算法
首先用户可先通过查询某块缩小自己