学生管理系统-jsp
第1章 需求分析................................................................................ 1
1.1功能需求.................................................................................. 1
1.2数据需求.................................................................................. 1
第2章 数据库设计.......................................................................... 2
2.1数据库逻辑级设计................................................................... 2
2.2 关系模式................................................................................. 2
2.3基本表...................................................................................... 3
第3章 概要设计.............................................................................. 4
3.1系统结构与模块功能............................................................... 4
3.2系统模块.................................................................................. 5
第4章 详细设计与实现.................................................................. 6
4.1模块流程图.............................................................................. 6
4.2界面效果图及代码................................................................... 7
第5章 总结................................................................................... 18
第1章 需求分析
进行数据库设计首先必须准确了解与分析用户需求(包括数据与处理)。需求分析阶段包括功能需求与数据需求。
1.1功能需求
立足于校园实际,着眼于未来发展,建成符合标准化协议、通用性较强、实用的系统。学生成绩管理系统是一种基于集中统一规划的数据库数据管理新模式。在对学生成绩的管理,其实是对学生成绩数据的管理。
在该系统之中,全面记录学生信息、课程信息以及学生成绩信息,管理人员可以管理学生信息、课程信息、学生成绩信息以及注销等;还可以查询学生信息、课程信息以及学生成绩信息等。当然还可以对成绩情况给出一些统计,计算不及格人数、生成给予警告名单等。
学生成绩管理系统需要实现的功能主要有:
(1)学生信息管理:管理员可登录系统进入管理员界面,进入学生信息管理,可按照行政班级进行添加、删除、修改学生信息;
(2)课程信息管理:管理员可添加、删除、修改课程信息;
(3)学生成绩管理:管理员可添加、删除、修改学生成绩;计算学生的总分和平均分,课程的平均分;
(4)信息查询:管理员可查询学生信息,课程信息、学生成绩;
(5)统计。管理员可统计具有各等级奖学金资格的人数和不及格人数并生成给予警告名单;
(6)学生可查询课程信息;
(7)学生可查询个人成绩。
1.2数据需求
(1)用户登录需要账号,密码数据。
(2)学生信息需记录其学生学号、姓名、性别、出生日期、系别、学分、成绩等数据。
(3)课程需记录其课程号、课程名、课程类型、学时、学分,等信息。
(4)学生成绩需记录其学生学号、课程号、成绩、等级等数据。
第2章 数据库设计
2.1数据库逻辑级设计
E-R图设计如图1:
图1 E-R图
2.2 关系模式
将E-R图中的实体、实体的属性和实体之间的联系转化为关系模式,确定关系模式名字,确定主码,外码,确定第三范式。根据转换规则转换,采用一两个关系模式分析一下,进行验证确认,并进行关系模式优化,关系模式如下:
学生(学号,姓名,性别,出生年月,学分绩点,班级号)
课程(课程号,课程名,课程类型,学分)
成绩(学号,课程号,期中成绩,期末成绩,有效成绩)
用户(账号,密码)
统计(学号,平均分,成绩等级)
2.3基本表
创建名为student_admianistration的数据库,并且及表如图2:
图2 表设计
第3章 概要设计
3.1系统结构与模块功能
系统结构设计:
(1)Main设计
包含main方法的主类。
(2) Login设计
实现登录功能的类。
(3)ssms.dal包设计
包括实现各种功能操作的类。
(4)ssms. dataUtil设计
包括实现数据库连接的类。
(5)ssms.view设计
包括实现各个功能的界面的类
模块功能:
1.登录模块:提供系统启动时的系统登录界面。实现用户身份验证功能,只有当用户输入正确的账号和密码后才能进入本系统。
2.主界面模块:提供系统的主界面,是主系统的唯一入口和出口,提供用户选择并调用各子模块。
3.学生添加模块:管理员登录后可对学生进行添加操作的界面。
4.学生删改模块:管理员登录后可对学生进行删改操作的界面。
3.课程添加模块:管理员登录后可对课程进行添加操作的界面。
4.课程删改模块:管理员登录后可对课程进行删改操作的界面。
5.课程查询模块:学生用户查询课程信息界面。
6.成绩添加模块:管理员登录后可对成绩进行添加操作的界面。
7.成绩删改模块:管理员登录后可对成绩进行删改操作的界面。
8.成绩查询模块:学生用户直接查询成绩界面。
9.计算成绩模块:管理员登录后可实现计算个人平均分,计算课程平均分,计算成绩等级功能的界面。
10.统计成绩模块:管理员登录后可实现统计奖学金个数,统计不及格人数功能的界面。
3.2系统模块
图3 系统模块
成绩管理
|
学生管理 |
课程管理 |
用户登录 |
查询课程 |
删除与更新
|
删除与更新
|
统计人数 |
添加成绩 |
删除与更新
|
统计数据 |
查询成绩 |
计算成绩 |
添加学生 |
添加课程 |
安全退出
|
调用setVisible函数根据不同用户的权限隐藏相关菜单栏。
管理员有以上所有功能,学生用户只有查询和退出功能。
第4章 详细设计与实现
4.1模块流程图
管理员登录 |
学生管理模块 |
课程管理模块 |
成绩管理模块 |
统计分析模块 |
安全退出 |
图4 管理员功能模块
学生登录 |
课程查询模块 |
成绩查询模块 |
安全退出 |
图5 学生功能模块
4.2界面效果图及代码
(1)登录界面:
图6 登录界面
源代码:
public class FrmLogin extends JFrame {
private JPanel contentPane;
private JTextField textUserName;
private JTextField textPassWord;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
FrmLogin frame = new FrmLogin();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
} //登录按钮的动作
protected void btnLogin_actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String userName=textUserName.getText();
String password=new String(textPassWord.getText());
if (StringUtil.isEmpty(userName)){
JOptionPane.showMessageDialog(null, "UserName cannot be empty!");
return;
}
if (StringUtil.isEmpty(password)){
JOptionPane.showMessageDialog(null, "PassWord cannot be empty!!");
return;
}
(2)主界面:
图7 主界面
源代码:
public class Main extends JFrame {
private JPanel contentPane;
private JDesktopPane table;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Main frame = new Main();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
//调出StudentAdd窗口
private void mntmStudentAddactionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
StudentAdd studentAdd=new StudentAdd(table);
studentAdd.setVisible(true);
table.add(studentAdd);
}
//调出StudentManage窗口
private void mntmStudentManageactionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
StudentManage studentManage=new StudentManage(table);
studentManage.setVisible(true);
table.add(studentManage);
}
//调出AddCourse窗口
private void mntmAddCourseactionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
CourseAdd courseAdd=new CourseAdd(table);
courseAdd.setVisible(true);
table.add(courseAdd);
}
//调出CourseManage窗口
private void mntmCourseManageactionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
CourseManage courseManage=new CourseManage(table);
courseManage.setVisible(true);
table.add(courseManage);
}
//调出ScoreAdd窗口
private void mntmScoreAddactionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
ScoreAdd scoreAdd=new ScoreAdd(table);
scoreAdd.setVisible(true);
table.add(scoreAdd);
}
//调出ScoreManage窗口
private void mntmScoreManageactionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
ScoreManage scoreManage=new ScoreManage(table);
scoreManage.setVisible(true);
table.add(scoreManage);
}
private void mntmCount1e(ActionEvent e) {
// TODO Auto-generated method stub
Addup addup=new Addup(table);
addup.setVisible(true);
table.add(addup);
}
}
(3)学生添加界面:
图8 学生添加界面
源代码:
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
StudentAdd frame = new StudentAdd();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
public StudentAdd() {
getContentPane().setFont(UIManager.getFont("CheckBoxMenuItem.acceleratorFont"));
setTitle("Student Add");
setBounds(100, 100, 450, 401);
setMaximizable(true);
setClosable(true);
}
(4)学生删改界面:
图8 学生删改界面
源代码:
/**
* 初始化表格数据
* @param book
*/
private void fillTable(Student student){
DefaultTableModel dtm=(DefaultTableModel) Stable.getModel();
dtm.setRowCount(0); // 设置成0行
Connection conn=null;
try{
conn=dbUtil.getCon();
ResultSet rs=Studentdal.list(conn, student);
while(rs.next()){
@SuppressWarnings("rawtypes")
Vector<Comparable> v=new Vector<Comparable>();
v.add(rs.getInt("id"));
v.add(rs.getString("studentno"));
v.add(rs.getString("sname"));
v.add(rs.getString("birthday"));
v.add(rs.getString("sex"));
v.add(rs.getFloat("point"));
v.add(rs.getString("classno"));
dtm.addRow(v);
}
}catch(Exception e){
e.printStackTrace();
}finally{
try {
DbUtil.closeCon(conn);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
(5)课程添加界面:
图9 课程添加界面
源代码:
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
CourseAdd frame = new CourseAdd();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
(6)课程删改界面:
图10 课程修改界面
源代码:
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
CourseManage frame = new CourseManage();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
ctable = new JTable();
ctable.addMouseListener(new MouseAdapter() {
@Override
//点击列表选择操作
//tidm tcoum tcnam tctym tcrem
public void mousePressed(MouseEvent e) {
int currRow=ctable.getSelectedRow();
tidm.setText(ctable.getValueAt(currRow, 0).toString());
tcoum.setText((String) ctable.getValueAt(currRow, 1));
tcnam.setText((String)ctable.getValueAt(currRow, 2));
tctym.setText((String)ctable.getValueAt(currRow, 3));
tcrem.setText(ctable.getValueAt(currRow, 4).toString());
}
});}
(7)成绩添加界面:
图11 成绩添加界面
源代码:
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ScoreAdd frame = new ScoreAdd();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
/**
* Create the frame.
*/
public ScoreAdd() {
setTitle("Score Add");
setBounds(100, 100, 450, 341);
setMaximizable(true);
setClosable(true);
//重置按钮
private void btnResertScoreactionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
resetValue();
}
(8)成绩删改界面:
图12 课程删改界面
源代码:
public ScoreManage() {
setTitle("Sccore Manage");
setBounds(100, 100, 493, 453);
setMaximizable(true);
setClosable(true);
JLabel lblScoreTable = new JLabel("Score Table");
lblScoreTable.setFont(new Font("宋体", Font.BOLD, 15));
JScrollPane scrollPane = new JScrollPane();
JPanel panel = new JPanel();
JButton btnupdate = new JButton("update");
btnupdate.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btnupdateactionPerformed(e);
}
});
}
(9)成绩统计界面:
图11 统计成绩界面
源代码:
public class Addup extends JInternalFrame {
private JTable table2;
private JTable table0;
private DbUtil dbUtil=new DbUtil();
private Scoredal scoredal=new Scoredal();
//private Count count=new Count();
private JDesktopPane table=null;
private Score score;
private Count count;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Addup frame = new Addup();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Addup() {
setTitle("statistic score");
setBounds(100, 100, 450, 406);
setMaximizable(true);
setClosable(true);
}
}
经试运行,该学生成绩管理系统可具体实现如下功能:
- 管理员可登录系统进入管理员界面。进行学生信息管理。包括添加学生信息、删除学生信息、修改学生信息;
- 管理员可以进行课程信息管理。包括添加课程信息、删除课程信息、修改课程信息;
- 管理员可以进行成绩信息管理。包括添加成绩信息、删除成绩信息、修改成绩信息;
- 管理员可以进行信息查询。包括学生信息查询、课程信息查询、学生成绩查询;
- 管理员可以统计信息。包括统计不及格人数、生成警告名单;
- 学生可以查询个人信息;、
- 学生可以查询课程信息;
- 学生可以查询成绩信息。
管理员和学生,可以通过密码登录系统,并进入各自不同的管理界面,实现不同的操作。可防止越权操作。
经过两周的设计和开发,学生成绩管理系统的开发基本完成。由于时间较为紧迫,该系统还有很多不尽人意的地方,比如系统功能少,学生与班级无法进行关联等诸多方面的问题,这些都有待进一步的改善。在设计过程中,更加深入领会了软件工程的软件开发方法,把软件开发设计方法运用到开发实践中,并运用Java程序设计和数据库设计技术实现系统,我结合以前在课堂上学的知识和收集课外的相关资料,不断学习,感谢郭老师细心指导。在实训中,难免会遇到各种各样的问题,不过,也正是通过对这些问题的思考,我们对系统设计理解的更深,找到方法,解决问题,我们更是受益良多