软件工程课程设计
题 目: 学生档案管理系统
学生姓名:
学 号:
专业班级:
指导教师:
目 录
一、课题名称:--- 1
二、主要功能:--- 1
三、学校学生管理信息系统的简介--- 1
四、学校学生管理信息系统的分析和设计--- 2
(1)开发环境的简介--- 2
(2)学校学生管理信息系统数据库设计--- 2
(3)窗体设计--- 2
(4)系统模块设计-- 3
(5)数据流程图--- 3
(6)数据库逻辑结构设计--- 3
(7)系统管理部分的代码--- 5
五、学校学生管理信息系统的使用说明--- 11
a) 添加学籍信息--- 12
b) 修改学籍信息--- 12
c) 查询学籍信息--- 13
d) 其他系统功能--- 13
六、结束语--- 14
学生信息管理系统课程设计
一、课题名称:
学生信息管理系统
二、主要功能:
1.学生信息管理
2.班级信息管理
3.课程信息管理
4.成绩信息管理
5.用户信息管理
三、学校学生管理信息系统的简介
学校学生管理信息系统是针对学校人事处的大量业务处理工作而开发的管理软件,是典型的管理信息系统(Management Information System)。它能够为用户提供充足的信息和快捷的查询手段。能有效的帮助学校和老师掌握学生的情况,为学生提供成绩跟课程方面的查询。功能基本符合课程设计的要求。
学生用户通过输入学生基本信息、课程基本信息等,由系统自行生成相应的数据以供学生查询,另外管理用户还可以对这些基本信息进行更新和删除,学生管理信息系统力求给用户方便快捷的途径去管理这些繁琐的数据。
具体系统功能需求描述如下:
(1) 学生信息管理
实现学生基本情况的查询、添加、删除、更新。
(2) 班级信息管理
实现班级的查询、添加、删除、更新。
(3)课程信息管理
实现课程查询、添加、删除、修改。
(4)成绩信息管理
实现了成绩的输入、删除、更新。但是没有做到查询到平均成绩以及单科最高最低成绩以及个人成绩。这还有待完善
(5)系统用户管理
因为本系统是供多人一起使用的,必须对某一些人进行限制。于是设置了教师(充当DBO的角色),学生只能进行查询操作,不能进行更改。
四、学校学生管理信息系统的分析和设计
(1)开发环境的简介
设计平台:Java
Java是一个对象导向设计的应用程序语言,是开发数据库前端的经典工具,它的编程语言简洁明快、组件功能强大和编程环境灵活方便。采用Java来开发数据库应用程序具有灵活性和可扩展性。
数据库:Access
Access是关系数据库开发工具,数据库能汇集各种信息以供查询、存储和检索。Access的优点在于它能使用数据表示图或自定义窗体收集信息。数据表示图提供了一种类似于 Excel 的电子表格,可以使数据库一目了然。Access是一种关系数据库工具,关系数据库是已开发的最通用的数据库之一。Access多用于中小型企业来设计中小型数据库,一般的学校教务系统的数据库用Access来设计完全能达到要求。
(2)学校学生管理信息系统数据库设计
由于考虑到本系统是应用在单机系统上,另外根据学校人员规模,我只建立起一个数据库,在此数据库基础上建立起如下七个基本表:
用户表:用户名,密码
学生基本信息表:学号,姓名,性别,出生日期,专业,所属班级,入学时间
教师基本信息表:教师编号,教师姓名,民族,职称,所属院系,工资
班级基本信息表:班级编号,班级名,专业,班级人数,创建时间,班主任
课程基本信息表:课程号,课程名,学分,学时
成绩基本信息表:成绩主键,学号,课程号,分数,学期
选课表:选课表编号,班级编号,课程号,授课教师,上课时间,上课地点
(3)窗体设计:
用户登录窗体:学生和教师通过用一个窗口进入,根据不同的权限设置导出不同的操作窗体
主窗体设计:
教师主窗体(充当管理员的角色):
对系统进行管理
用户的增删修改+学生的增删修改+班级的增删修改+成绩的增删修改 +课程的增删修改
学生主窗体:
学生信息查询+成绩信息查询
(4)系统模块设计
(5)数据流程图(Data Flow Diagram):
(6)数据库逻辑结构设计
用户表
学生基本信息表:
教师基本信息表
班级基本信息表:
课程基本信息表:
成绩基本信息表:
班级选课表:
(7)系统管理部分关键代码(本人负责成绩管理模块的编码)
添加成绩信息代码如下:
publicclassxgcjextends JFrame {
String bx = new String("必修");
……………………………//省略部分
Statement ps, is, cr, xms, bhs, ins,kcs;
ResultSet rs, as, xsxm, bhss,kcss;
Connection con;
String url;
JLabel jLabel9 = new JLabel();
public xgcj() {
try {
jbInit();
}
catch (Exception e) {
e.printStackTrace();}
try { //连接数据库
String url ="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Student;";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection( "jdbc:odbc:lee", "sa", "123");
ps = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
bhs = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
xms = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
is = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ins = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
kcs = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = ps.executeQuery("select * from result");
if (rs.next()) {
ksbh.addItem(rs.getString("exam_No"));}
}catch (Exception err) {
err.printStackTrace(System.out);
}}
publicstaticvoid main(String[] args) {
xgcj xgkc = new xgcj();
}
privatevoid jbInit() throws Exception {
jLabel1.setFont(new java.awt.Font("Dialog", 0, 15));
jLabel1.setText("考试编号");
……………………………//省略部分
this.getContentPane().add(jLabel2, null);
this.getContentPane().add(jLabel9, null);
this.setBounds(200, 200, 500, 400);
this.setVisible(true);
}
void xgjl_actionPerformed(ActionEvent e) {
JOptionPane.showConfirmDialog(null,"确定修改", "修改成绩", JOptionPane.YES_NO_OPTION);
try {
ins.executeUpdate("Update result set result='" + fs.getText().trim() +
"' where exam_No='" + ksbh.getSelectedItem() +
"'and student_ID='" + xh.getSelectedItem() +
"'and class_No='" + bh.getSelectedItem() + "'");
JOptionPane.showMessageDialog(null, "修改成功!");
try{
ksbh.removeAllItems();
rs = ps.executeQuery("select * from result");
if (rs.next()) {
ksbh.addItem(rs.getString("exam_No"));}
}catch (Exception err) {
err.printStackTrace(System.out);}
}catch (SQLException ex) {
String err = ex.getMessage();
JOptionPane.showMessageDialog(null, err);
}}
void gxsj_actionPerformed(ActionEvent e) {
try{
ksbh.removeAllItems();
rs = ps.executeQuery("select * from result");
if (rs.next()) {ksbh.addItem(rs.getString("exam_No"));}
JOptionPane.showMessageDialog(null, "数据已更新");
}catch (Exception err) {
err.printStackTrace(System.out);}}
void scjl_actionPerformed(ActionEvent e) {
JOptionPane.showConfirmDialog(null,"确定删除!", "删除成绩", JOptionPane.YES_NO_OPTION);
try {
ins.executeUpdate("delete from result where exam_No='" +
ksbh.getSelectedItem().toString().trim() + "'and student_ID='" +
xh.getSelectedItem().toString().trim() + "'and class_NO='" +
bh.getSelectedItem().toString().trim() + "' and course_Name='" +
kc.getSelectedItem().toString().trim() + "'");
log.info("\r\r删除成绩成功");
JOptionPane.showMessageDialog(null, "删除成功!");
}catch (SQLException ex) {
String err = ex.getMessage();
JOptionPane.showMessageDialog(null, err);}}
void cencel_actionPerformed(ActionEvent e) {
this.dispose();}
void bh_itemStateChanged(ItemEvent e) {
try {
xh.removeAllItems();
as = is.executeQuery(
"select distinct student_ID from result where class_NO='" +
bh.getSelectedItem() + "' and exam_No='" +
ksbh.getSelectedItem() + "'"); //ORDER BY class_NO DESC
while (as.next()) {
xh.addItem(as.getString("student_ID"));
}}catch (Exception err) {
JOptionPane.showMessageDialog(null, err.getMessage());}}
void xh_itemStateChanged(ItemEvent e) {
kc.removeAllItems();
xm.setText("");
try {
xsxm = xms.executeQuery("select * from result where class_NO='" +
bh.getSelectedItem().toString().trim() + "'and student_ID='" +
xh.getSelectedItem().toString().trim() + "'and exam_No='" +
ksbh.getSelectedItem().toString().trim() + "'"); //ORDER BY class_NO DESC
while (xsxm.next()) {
xm.setText(xsxm.getString("student_Name"));
kc.addItem(xsxm.getString("course_Name"));
}}catch (Exception err) {
err.printStackTrace();
JOptionPane.showMessageDialog(null, err.getMessage(););}}
void ksbh_itemStateChanged(ItemEvent e) {
try {
bh.removeAllItems();
bhss = bhs.executeQuery(
"select distinct class_No from result where exam_No='" +
ksbh.getSelectedItem() + "'"); //ORDER BY class_NO DESC
while (bhss.next()) {
bh.addItem(bhss.getString("class_No"));
}} catch (Exception err) {
JOptionPane.showMessageDialog(null, err.getMessage());
}}
void kc_itemStateChanged(ItemEvent e) {
fs.setText("");
try {
kcss = kcs.executeQuery(
"select * from result where class_NO='" +
bh.getSelectedItem().toString().trim() + "'and student_ID='" +
xh.getSelectedItem().toString().trim() + "'and exam_No='" +
ksbh.getSelectedItem().toString().trim() + "'and course_Name='" +
kc.getSelectedItem().toString().trim() + "'"); //ORDER BY class_NO DESC
while (kcss.next()) {
fs.setText(kcss.getString("result")); }
}catch (Exception err) {
JOptionPane.showMessageDialog(null, err.getMessage());
}}}
class xgcj_xgjl_actionAdapter
implements java.awt.event.ActionListener {
xgcj adaptee;
xgcj_xgjl_actionAdapter(xgcj adaptee) {
this.adaptee = adaptee;
}
……………………………//省略部分
publicvoid itemStateChanged(ItemEvent e) {
adaptee.kc_itemStateChanged(e);}}
修改成绩信息代码如下:
publicclassxgcjextends JFrame {
String bx = new String("必修");
……………………………//省略部分
Statement ps, is, cr, xms, bhs, ins,kcs;
ResultSet rs, as, xsxm, bhss,kcss;
Connection con;
String url;
JLabel jLabel9 = new JLabel();
public xgcj() {
try {
jbInit();
}catch (Exception e) {
e.printStackTrace();}
try {
String url ="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Student;";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:lee","sa", "123");
ps = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
bhs = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
xms = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
is = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,、ResultSet.CONCUR_READ_ONLY);
ins = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
kcs = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = ps.executeQuery("select * from result");
if (rs.next()) {
ksbh.addItem(rs.getString("exam_No"));
}}catch (Exception err) {
err.printStackTrace(System.out);
}}
publicstaticvoid main(String[] args) {
xgcj xgkc = new xgcj();
}
privatevoid jbInit() throws Exception {
jLabel1.setFont(new java.awt.Font("Dialog", 0, 15));
……………………………//省略部分
this.getContentPane().add(jLabel9, null);
this.setBounds(200, 200, 500, 400);
this.setVisible(true);}
void xgjl_actionPerformed(ActionEvent e) {
JOptionPane.showConfirmDialog(null,"确定修改", "修改成绩", JOptionPane.YES_NO_OPTION);
try {
ins.executeUpdate("Update result set result='" + fs.getText().trim() +
"' where exam_No='" + ksbh.getSelectedItem() +
"'and student_ID='" + xh.getSelectedItem() +
"'and class_No='" + bh.getSelectedItem() + "'");
JOptionPane.showMessageDialog(null, "修改成功!");
try{
ksbh.removeAllItems();
rs = ps.executeQuery("select * from result");
if (rs.next()) {
ksbh.addItem(rs.getString("exam_No"));}}
catch (Exception err) {
err.printStackTrace(System.out);}}
catch (SQLException ex) {
String err = ex.getMessage();
JOptionPane.showMessageDialog(null, err); }}
void gxsj_actionPerformed(ActionEvent e) {
try{
ksbh.removeAllItems();
rs = ps.executeQuery("select * from result");
if (rs.next()) {
ksbh.addItem(rs.getString("exam_No"));}
JOptionPane.showMessageDialog(null, "数据已更新");}
catch (Exception err) {
err.printStackTrace(System.out);
}}
void scjl_actionPerformed(ActionEvent e) {
JOptionPane.showConfirmDialog(null,"确定删除!", "删除成绩", JOptionPane.YES_NO_OPTION);
try {
ins.executeUpdate("delete from result where exam_No='" +
ksbh.getSelectedItem().toString().trim() + "'and student_ID='" +
xh.getSelectedItem().toString().trim() + "'and class_NO='" +
bh.getSelectedItem().toString().trim() + "' and course_Name='" +
kc.getSelectedItem().toString().trim() + "'");
log.info("\r\r删除成绩成功");
JOptionPane.showMessageDialog(null, "删除成功!");
}catch (SQLException ex) {
String err = ex.getMessage();
JOptionPane.showMessageDialog(null, err);}}
void cencel_actionPerformed(ActionEvent e) {
this.dispose();}
void bh_itemStateChanged(ItemEvent e) {
try {
xh.removeAllItems();
as = is.executeQuery(
"select distinct student_ID from result where class_NO='" +
bh.getSelectedItem() + "' and exam_No='" +
ksbh.getSelectedItem() + "'"); //ORDER BY class_NO DESC
while (as.next()) {
xh.addItem(as.getString("student_ID"));
}}catch (Exception err) {
err.printStackTrace();
String error = err.getMessage();
JOptionPane.showMessageDialog(null, error);}}
void xh_itemStateChanged(ItemEvent e) {
kc.removeAllItems();
xm.setText("");
try {
xsxm = xms.executeQuery(
"select * from result where class_NO='" +
bh.getSelectedItem().toString().trim() + "'and student_ID='" +
xh.getSelectedItem().toString().trim() + "'and exam_No='" +
ksbh.getSelectedItem().toString().trim() + "'"); //ORDER BY class_NO DESC
while (xsxm.next()) {
xm.setText(xsxm.getString("student_Name"));
kc.addItem(xsxm.getString("course_Name"));}}
catch (Exception err) {
err.printStackTrace();
String error = err.getMessage();
JOptionPane.showMessageDialog(null, error);
}}
void ksbh_itemStateChanged(ItemEvent e) {
try {
bh.removeAllItems();
bhss = bhs.executeQuery(
"select distinct class_No from result where exam_No='" +
ksbh.getSelectedItem() + "'"); //ORDER BY class_NO DESC
while (bhss.next()) {
bh.addItem(bhss.getString("class_No"));
}}catch (Exception err) {
err.printStackTrace();
String error = err.getMessage();
JOptionPane.showMessageDialog(null, error);
}}
void kc_itemStateChanged(ItemEvent e) {
fs.setText("");
try {
kcss = kcs.executeQuery(
"select * from result where class_NO='" +
bh.getSelectedItem().toString().trim() + "'and student_ID='" +
xh.getSelectedItem().toString().trim() + "'and exam_No='" +
ksbh.getSelectedItem().toString().trim() + "'and course_Name='" +
kc.getSelectedItem().toString().trim() + "'"); //ORDER BY class_NO DESC
while (kcss.next()) {
fs.setText(kcss.getString("result"));
}}catch (Exception err) {
JOptionPane.showMessageDialog(null, err.getMessage());}}}
class xgcj_xgjl_actionAdapter
implements java.awt.event.ActionListener {
xgcj adaptee;
xgcj_xgjl_actionAdapter(xgcj adaptee) {
this.adaptee = adaptee;
}
……………………………//省略部分
publicvoid itemStateChanged(ItemEvent e) {
adaptee.kc_itemStateChanged(e);
}}
查看成绩信息代码如下:
publicclasssacnresultextends JFrame {
Statement ps;
ResultSet rs;
Connection con;
String url;
Logger log=Logger.getRootLogger();
……………………………//省略部分
public sacnresult() {
try {
jbInit();
}catch (Exception e) {
e.printStackTrace();
}}
publicstaticvoid main(String[] args) {
sacnresult sacnresult = new sacnresult();
}
privatevoid jbInit() throws Exception {
……………………………//省略部分
this.setVisible(true);
buttonGroup2.add(xh);
buttonGroup2.add(bh);
buttonGroup2.add(kc);
}
void cancel_actionPerformed(ActionEvent e) {
this.dispose();}
void ok_actionPerformed(ActionEvent e) {
try { //连接数据库
String url ="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Student;";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection( "jdbc:odbc:lee","sa", "123");
ps = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
int i = 0;
try {
if (xh.isSelected()) {
rs = ps.executeQuery("select * from result where student_ID='" +
input.getText().trim() + "'");
}elseif (kc.isSelected()) {
rs = ps.executeQuery("select * from result where course_Name='" +
input.getText().trim() + "'");
}elseif (bh.isSelected()) {
rs = ps.executeQuery("select * from result where class_NO='" +
input.getText().trim() + "'");
}else
rs = ps.executeQuery("select * from result");
}catch (Exception err) {
log.debug("\r\r"+"浏览成绩出错!");
JOptionPane.showMessageDialog(null, "没有数据!");
}while (rs.next()) {
rowData[i][0] = rs.getString("exam_No");
rowData[i][1] = rs.getString("student_ID");
rowData[i][2] = rs.getString("student_Name");
rowData[i][3] = rs.getString("class_NO");
rowData[i][4] = rs.getString("course_Name");
rowData[i][5] = rs.getString("result");
i++;
}}catch (Exception err) {
log.debug("\r\r数据库连接出错");
JOptionPane.showMessageDialog(null, err.getMessage());
}}}
class sacnresult_cancel_actionAdapter
implements java.awt.event.ActionListener {
sacnresult adaptee;
sacnresult_cancel_actionAdapter(sacnresult adaptee) {
this.adaptee = adaptee;}
……………………………//省略部分
publicvoid actionPerformed(ActionEvent e) {
adaptee.ok_actionPerformed(e);
}}
五、学校学生管理信息系统的使用说明
本系统分为学生用户和管理用户,如果你不是教师,能进行查询,对数据没有修改权力。只能进行查询,针对学生有成绩查询,学生基本信息查询。各个界面都简单明了,只要输入你所需要的条件,系统自动调出数据。
教师(充当管理员)登陆系统,输入用户及密码,跟数据库的用户表比较。如果通过
则能进行用户,学生,课程,成绩,班级的各个信息的增删修改。
通过管理员身份验证后,管理员进入的就是学生学籍信息管理的页面,当用户选择不同的操作时系统户跳入到不同的界面进行操作,如学生成绩信息的添加、查询和修改等功能。
a) 添加成绩信息
输入的学生信息可以包括学生的姓名、性别、学号、班级、联系电话、联系地址及备注。其中学号为主键,如果输入了相同的学号或者是非阿拉伯数字,系统将不写入数据库,会出现提示页面。
b) 修改成绩信息
当学生的成绩信息有变化时,管理员需要对学生的成绩信息进行修改,选择班级和班号、学号、课程,输入分数后选择相关的操作,就可以对学生的信息修改。
c) 查询成绩信息
查询学生成绩,该部分是通过三种方式来查询:按学号、按班号、按课程。不同的方式可以查看不同的信息。用户输入学号后如果数据库中不存在该学生的成绩信息,系统将会提示该学生成绩不存在信息。如果存在该学生成绩信息将会输出该学生的详细信息显示如下:
d) 其他系统功能
对于系统的其他一些班级、课程及学籍的相关功能和上面介绍基本相同。不同的模块将实现不同的操作,并将个操作与数据库进行读写,及时更新数据库内容。
六、结束语
软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言,数据库,软件开发工具,系统平台,标准,设计模式等方面。对于决定要做开发这条路的我开说,软件工程这学科在我的开发生涯中将会起巨大的作用,从开发接触到做课程设计。这一个流程下来,自己对软件工程的有了深刻的理解。需求分析--概要设计—详细设计—编码—测试。软件开发中的这一整套流程,在这次课程设计中,通过实践与切身的开发体验,体会到了软件工程学是一门多伟大的学科或者说是一门艺术,太完美了。现在才知道开发并不是一味的去编码实现功能,前期的工作在开发流程中是多么的重要,软件工程在开发的运用的好与坏直接关系到开发出的软件的质量,而软件的质量对与开发企业来说是尤其的重要。
这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的辛勤指导下,终于游逆而解。同时,在老师的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!