资源描述
重庆邮电大学
计算机科学和技术学院
设计名称: Java程序设计汇报
设计题目: 学生成绩管理系统
学生学号:
专业班级:
学生姓名:
目录
一、需求分析 - 3 -
1.1 功能需求分析 - 4 -
1.2 性能需求分析 - 4 -
1.3 数据库需求分析――数据流图 - 5 -
1.3.1 数据结构 - 5 -
1.3.2 数据流: - 5 -
二、概要结构设计 - 6 -
2.1系统功能结构设计 - 6 -
2.1.1模块的功能设计 - 6 -
2.2 概要结构设计 - 7 -
三、详细设计及实现 8
3.1用户登陆模块 8
3.1.1 代码实现 8
3.2 管理员界面 13
3.2.1 代码实现: 13
3.3 用户界面 16
3.3.1 代码实现: 16
3.4 添加模块 24
3.4.1 添加模块代码实现: 24
3.5 删除模块 30
3.5.1 代码实现: 31
心得体会: 34
参考文献 35
一、需求分析
编写目标:
学生成绩管理系统模块是为了实现学校人力资源优化和学生成绩管理科学管理而设计,经过使用本系统,能够愈加有效管理学生信息,其大包含学生基础信息,成绩信息而且含有信息增加,查询,修改等功效。
需求分析说明书是为软件开发者能愈加好了解开发需求,避免因为对问题认识不清或错误了解而增加更多开发成本。需求分析是软件系统生存期中定义阶段最终一个步骤;是作为整个软件开发范围指南,是软件开发人员开发出正确符适用户要求软件关键;是为明确软件需求、安排项目计划和进度、组织软件开发和测试,撰写本文档。该文档将最终交给软件具体开发人员进行具体开发,其针正确对象是软件开发人员。
处理了实现该系统需求程序模块设计问题。包含怎样把该系统划分成若干个模块、决定各个模块之间接口、模块之间传输信息,和数据结构、模块结构设计等。在以下概要设计汇报中将对在本阶段中对系统所做全部概要设计进行具体说明。具体设计中,程序设计员可参考此概要设计汇报,在概要设计对学生信息管理系统所做模块结构设计基础上,对系统进行具体设计。在以后软件测试和软件维护阶段也可参考此说明书,方便于了解在概要设计过程中所完成各模块设计结构,或在修改时找出在本阶段设计不足或错误。
此需求规格说明书是对用户需求分析结果,明确系统应含有功效及性能和界面方面需求,使系统分析员及软件开发组组员能清楚地了解用户需求,并在此基础上完成后续工作和开发工作。学生信息管理系统将由两部分组成:置于学生信息前台程序,和置于管理员数据库服务器。
1.1 功效需求分析
该学生成绩管理系统含有三方面功效:首先是学生用户,学生经过输入学号和密码进下该系统后,能够进行部分基础查询(学生信息查询、班级信息查询、课程信息查询)、成绩管理(成绩查询、计算平均分)重新登陆系统;首先老师进入该系统则比学生多部分权限:成绩输入、成绩查询。
具体功效:
1、 选择[学生基础维护]菜单命令,即可进入 [学生基础维护]功效窗体,在其中输入学生相关信息,假如需要添加或修改学生信息,则单击对应按纽,输入新信息后单击[添加]就能够了。需要删除一条信息,则只要选择这条信息再点击 [删除]。在搜索条件中输入相关条件,单击 [查询]就可查找信息。
2、 选择[学生信息查询]菜单命令,即可进入[学生信息查询]功效窗体,在其中下拉列表中选择你要看信息,则在下面表格中显示你要信息。
3、选择[成绩管理] [添加成绩]菜单命令,即可进入 [添加成绩]功效窗体,此功效权限只有管理员和老师。
4、选择[成绩管理] [输入成绩]菜单命令,即可进入 [输入成绩]功效窗体,
此功效权限只有管理员和老师。
5、 选择[成绩管理] [修改成绩] 界面,此功效规管理员全部。
6、 选择[成绩管理] [查询成绩]界面此界面对学生也是可见,它权限规全部用户全部。
7、 选择[登陆] [重新登陆] 则会返回登陆界面,为用户提供方便。
8、 选择[退出]将退出整个系统。
1.2 性能需求分析
时间特征要求:在软件方面,响应时间有点慢,因为是用Eclipse做,它占用内存比较大,更新处理时间比较快而且快速。
安全性:设置口令号和密码验证方法,预防非法用户登录进行操作。也就是用户只有管理员、学生和老师才能进入这个系统,用户凭口令号和密码进入此系统,系统会自动判定用户是那种类型,分别拥有不一样权限。
1.3 数据库需求分析――数据流图
1.3.1 数据结构
在系统中功效模块关键牵涉到信息包含:是学生信息(Student)、课程信息(Course)、成绩表(SC).
学生信息:包含学号(STNO)、姓名(SNAME)、年纪(SAGE)、性别(SSEX)、系别(SDEPT)
课程信息:包含课程编号(Cno)、课程名称(Cname)、先行课(Cpno)
成绩表;学号(STNO)、课程号(Cno)、成绩(Grade)
1.3.2 数据流:
1) 数据流名:口令号
说明:依据这个口令号定位到用户管理数据库,方便进行身份验证。
数据流起源:登陆界面输入口令号和密码。
数据流去向:其中用户口令信息将存在于整个操作过程中,预防非法登陆。
数据流组成:口令号(文本);密码(文本)
2) 数据流名:寻求信息
说明:依据用户在学生信息维护时候所填写信息。
数据流起源:学生信息维护界面学生输入包含学号、班级编号、名称等。
数据流去向:学号将存在整个操作,其它存入数据库。
数据流组成:学号(文本);姓名(文本)等
3) 数据流名:寻求信息
说明:依据用户在成绩管理时候所填写信息。
数据流起源:成绩输入、修改、添加等界面用户输入包含课程编号、课程名称、成绩、老师。
数据流去向:学号、班级编号、课程编号将存在整个操作,其它存入数据库。
数据流组成:课程编号(文本)、课程名称(文本)、老师(文本)等。
4) 数据流名:返回信息
说明:依据用户在学生信息维护时候所填写信息存入了数据库以后。
数据流起源:由学生信息维护界面学生输入包含学号、姓名、性别等存入数据库。
数据流去向:学生信息维护界面。
数据流组成:学号(文本)、姓名(文本)、班级名称(文本)、性别(文本)等。
5) 数据流名:返回信息
说明:依据用户在成绩管理时候所填写信息存入数据库后。
数据流起源:由成绩管理输入包含班级名称、老师、课程名、成绩存入数据库。
数据流去向:成绩管理各子界面。
数据流组成:班级编号(文本);班级名称(文本);老师(文本)等;
二、概要结构设计
2.1系统功效结构设计
2.1.1模块功效设计
依据需求分析阶段得到功效需求,管理员、学生和老师用户经过输入口令号和密码进下该系统后,能够进行部分学生基础信息查询(学生信息查询、班级信息查询、课程信息查询)、学生信息维护、成绩管理(成绩查询、计算平均分)重新登陆系统、退出。
模块功效大约能够分为以下4个方面:这多个模块学生基础维护、成绩管理、登陆、退出。其中基础维护还要包含学生信息维护、班级信息维护、课程信息维护。成绩管理包含成绩查询、添加成绩、成绩输入等。总而言之,得到用户端功效模块图以下2.2所表示。
2.2 概要结构设计
用户登陆
管理员登陆
登陆
删除信息
增加信息
查询信息
查询信息
开课
E-R 图:学生
年纪
系别
课程
系别
名称
含有
先行课
成绩
课名
学号
姓名
选课
三、具体设计及实现
3.1用户登陆模块
3.1.1 代码实现
package stu_manager;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Login extends JFrame {
private static final long serialVersionUID = 5311099L;
TextField f1;
TextField f2;
JButton b1;
JButton b2;
JButton b3;
String power;//表示权限
Login(){
Container cp=getContentPane();
cp.setLayout(new GridLayout(4,1));
Label l1=new Label("用户名");
Label l2=new Label("密 码");
Panel p1=new Panel();
Panel p2=new Panel();
Panel p3=new Panel();
f1=new TextField(10);
f2=new TextField(10);
f2.setEchoChar('*');
b1=new JButton("登录");
b2=new JButton("重置");
b3=new JButton("退出");
p1.add(l1);
p1.add(f1);
p2.add(l2);
p2.add(f2);
p3.add(b1);
p3.add(b2);
p3.add(b3);
cp.add(p1);
cp.add(p2);
cp.add(p3);
b1.addActionListener(new Enter());
b2.addActionListener(new ReWrite());
b3.addActionListener(new Close());
}
public static void main(String[] args) {
Login log=new Login();
log.setTitle("系统登录");
log.setBounds(200, 200, 300, 300);
log.setBackground(Color.blue);
log.setVisible(true);
}
class Enter implements ActionListener{
public void actionPerformed(ActionEvent e)
{
if((f1.getText()).equals("tang")&&(f2.getText()).equals("051141"))
{
JOptionPane.showMessageDialog(null, "登录成功!用户权限是管理员");
power="管理员";
XueSheng frame1 = new XueSheng();
frame1.setResizable(true);
}
else if((f1.getText()).equals("tang")&&(f2.getText()).equals("123456"))
{
JOptionPane.showMessageDialog(null, "登录成功!登录成功!用户权限是游客");
power="游客";
Find f2 = new Find();
f2.setVisible(true);
}
else JOptionPane.showMessageDialog(null, "登录失败,请重新登录!");
}
}
class ReWrite implements ActionListener{
public void actionPerformed(ActionEvent e)
{
f1.setText("");
f2.setText("");
f1.requestFocus();
}
}
class Close implements ActionListener{
public void actionPerformed(ActionEvent e)
{
JButton bt=(JButton)e.getSource();
if(bt==b3)
System.exit(0);
}
}
}
3.2 管理员界面
3.2.1 代码实现:
package stu_manager;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JFrame;
public class XueSheng extends JFrame implements ActionListener {
JButton cx, zj, tc, sc;
XueSheng() {
setBounds(100, 100, 600, 600);
JPanel panel2 = new JPanel();
setContentPane(panel2);
panel2.setLayout(null);
JLabel label1 = new JLabel("欢迎进入学生信息管理界面");
label1.setFont(new Font("BOLD", Font.BOLD, 28));
panel2.add(label1);
label1.setBounds(50, 20, 400, 100);
cx = new JButton("查询");
panel2.add(cx);
cx.setBounds(50, 200, 80, 50);
zj = new JButton("增加");
panel2.add(zj);
zj.setBounds(150, 200, 80, 50);
sc = new JButton("删除");
panel2.add(sc);
sc.setBounds(250, 200, 80, 50);
tc = new JButton("退出");
panel2.add(tc);
tc.setBounds(350, 200, 80, 50);
cx.addActionListener(this);
zj.addActionListener(this);
sc.addActionListener(this);
tc.addActionListener(this);
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == cx) {
Find f = new Find();
}
if(e.getSource()==zj){
AddFI f = new AddFI();
}
if(e.getSource()==sc){
Delet d = new Delet();
}
if(e.getSource()==tc){
shutDown();
}
}
private void shutDown(){
this.dispose();
}
}
3.3 用户界面
3.3.1 代码实现:
package stu_manager;
import java.awt.*;
import java.awt.event.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.*;
public class Find extends JFrame implements ActionListener {
JTextField t1;
String STNO, r1, r2, r3, r4, r5, r6;
JButton b1, b2;
XueSheng xue;
Find() {
super("查询学生信息");
Container c1 = this.getContentPane();
setBackground(new Color(215, 215, 215));
c1.setLayout(new GridLayout(3, 2));
JPanel pp = new JPanel();
JLabel label0 = new JLabel("请输入你学号");
label0.setForeground(Color.blue);
pp.add(label0);
JPanel p1 = new JPanel();
t1 = new JTextField(10);
p1.add(new Label(""));
p1.add(t1);
c1.add(p1);
JPanel p2 = new JPanel();
b1 = new JButton("查询");
b2 = new JButton("退出");
b1.addActionListener(this);
b2.addActionListener(this);
p2.add(b1);
p2.add(b2);
c1.add(p2);
this.setVisible(true);
this.setBounds(200, 200, 400, 300);
}
public void actionPerformed(ActionEvent e) {
try {
if (e.getSource() == b1) {
try {
STNO = t1.getText();
Class.forName(
"com.microsoft.sqlserver.jdbc.SQLServerDriver")
.newInstance();
String url = "jdbc:sqlserver://localhost:1433; DatabaseName=ss";
String userName = "sa"; // 默认用户名
String userPwd = "051141";
Connection cn = DriverManager.getConnection(url, userName,
userPwd);
String str = "select Student.SNAME,Student.SAGE,Student.SSEX,Student.STNO,Course.Cname,SC.Grade from Student,Course ,SC where Student.STNO = SC.STNO and SC.Cno = Course.Cno and Student.STNO ='"+STNO+"'";
PreparedStatement ps = cn.prepareStatement(str);
ResultSet rs = ps.executeQuery();
System.out.println("STNO=" + STNO);
if (rs.next()) {
r1 = rs.getString("STNO");
r2 = rs.getString("SNAME");
r3 = rs.getString("SAGE");
r4 = rs.getString("SSEX");
r5 = rs.getString("Cname");
r6 = rs.getString("Grade");
} else {
JOptionPane.showMessageDialog(null, "你输入学号有误");
}
cn.close();
} catch (SQLException g) {
System.out.println("Error" + g.getErrorCode());
System.out.println("Merrage=" + g.getMessage());
} catch (Exception f) {
f.printStackTrace();
}
File f = new File();
this.dispose();
}
if (e.getSource() == b2) {
t1.setText("");
t1.repaint();
}
} catch (NumberFormatException ex) {
JOptionPane.showMessageDialog(null, "数据转换错误");
}
}
class File extends JFrame implements ActionListener {
JTextField tt1, t2, t3, t4, t5, t6;
JButton b3;
File() {
super("查询学生信息");
Container c2 = this.getContentPane();
setBackground(new Color(215, 215, 215));
c2.setLayout(new GridLayout(3, 1));
tt1 = new JTextField(r1);
t2 = new JTextField(r2);
t3 = new JTextField(r3);
t4 = new JTextField(r4);
t5 = new JTextField(r5);
t6 = new JTextField(r6);
tt1.setEditable(false);
t2.setEditable(false);
t3.setEditable(false);
t4.setEditable(false);
t5.setEditable(false);
t6.setEditable(false);
JPanel pp1 = new JPanel();
JLabel label2 = new JLabel("学号为" + STNO + "学生信息");
pp1.add(label2);
label2.setFont(new Font("BOLD", Font.BOLD, 28));
c2.add(pp1);
JPanel pp2 = new JPanel(new GridLayout(6, 2));
pp2.add(new JLabel("学号", SwingConstants.CENTER));
tt1.setText(STNO);
pp2.add(tt1);
pp2.add(new JLabel("姓名", SwingConstants.CENTER));
pp2.add(t2);
pp2.add(new JLabel("年纪", SwingConstants.CENTER));
pp2.add(t3);
pp2.add(new JLabel("性别", SwingConstants.CENTER));
pp2.add(t4);
pp2.add(new JLabel("课程", SwingConstants.CENTER));
pp2.add(t5);
pp2.add(new JLabel("成绩", SwingConstants.CENTER));
pp2.add(t6);
c2.add(pp2);
JPanel pp3 = new JPanel();
b3 = new JButton("返回");
b3.addActionListener(this);
pp3.add(b3);
c2.add(pp3);
this.setBounds(200, 200, 600, 400);
setVisible(true);
}
public void actionPerformed(ActionEvent f) {
if (f.getSource() == b3) {
this.dispose();
}
}
}
}
3.4 添加模块
3.4.1 添加模块代码实现:
package stu_manager;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
public class AddFI extends JFrame implements ActionListener {
JTextField STNOText, SNAMEText, SAGEText, SSEXText, SDEPTText;
JButton b1, b2, b3;
String STNO, SNAME, SAGE, SSEX, SDEPT;
public AddFI() {
Container c = this.getContentPane();
c.setLayout(new GridLayout(3, 1));
JPanel center = new JPanel(new GridLayout(5, 2));
JPanel low = new JPanel(new FlowLayout());
JLabel label1 = new JLabel("添加學生信息", SwingConstants.CENTER);
label1.setFont(new Font("TRUE", Font.TRUETYPE_FONT, 20));
c.add(label1);
STNOText = new JTextField(30);
SNAMEText = new JTextField(30);
SSEXText = new JTextField(30);
SAGEText = new JTextField(30);
SDEPTText = new JTextField(30);
center.add(new JLabel("学号", SwingConstants.CENTER));
center.add(STNOText);
center.add(new JLabel("姓名", SwingConstants.CENTER));
center.add(SNAMEText);
center.add(new JLabel("性别", SwingConstants.CENTER));
center.add(SSEXText);
center.add(new JLabel("年纪", SwingConstants.CENTER));
center.add(SAGEText);
center.add(new JLabel("系别", SwingConstants.CENTER));
center.add(SDEPTText);
c.add(center);
b1 = new JButton("添加");
b2 = new JButton("清除");
b3 = new JButton("退出");
low.add(b1);
low.add(b2);
low.add(b3);
c.add(low);
// 為按鈕添加jianting
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
this.setBounds(200, 200, 600, 400);
this.setVisible(true);
this.setTitle("添加學生信息");
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == b1) {
addFI();
}
if (e.getSource() == b2) {
clearForm();
}
if (e.getSource() == b3) {
shutdown();
}
}
private void addFI() {
STNO = STNOText.getText();
SNAME = SNAMEText.getText();
SSEX = SSEXText.getText();
SAGE = SAGEText.getText();
SDEPT = SDEPTText.getText();
if (STNO.length() == 0 || SNAME.length() == 0 || SAGE.length() == 0
|| SDEPT.length() == 0 || SSEX.length() == 0)
JOptionPane.showMessageDialog(this, "请添加完全信息");
else {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
.newInstance();
String url = "jdbc:sqlserver://localhost:1433; DatabaseName=ss";
String userName = "sa"; // 默认用户名
String userPwd = "051141";
Connection cn = DriverManager.getConnection(url, userName,
userPwd);
String str = "INSERT INTO Student VALUES(?,?,?,?,?)";
PreparedStatement ps = cn.prepareStatement(str);
ps.setString(1, STNO);
ps.setString(2, SNAME);
ps.setString(3, SSEX);
ps.setString(4, SAGE);
ps.setString(5, SDEPT);
ps.executeUpdate();
cn.close();
JOptionPane.showMessageDialog(this, "添加成功");
clearForm();
} catch (SQLException e) {
System.out.println("ECode" + e.getErrorCode());
System.out.println("E M=" + e.getMessage());
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void clearForm() {
STNOText.setText("");
SNAMEText.setText("");
SAGEText.setText("");
SSEXText.setText("");
SDEPTText.setText("");
}
private void shutdown() {
this.dispose();
}
}
3.5 删除模块
3.5.1 代码实现:
package stu_manager;
import java.awt.*;
import java.awt.event.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.swing.*;
public class Delet exte
展开阅读全文