1、课设名称: 学生信息管理系统 院 (系): 信息科学与工程学院 姓名: 蒋登丽 学号: 201410411406 年 级: 2014级 专业班级: 计算机科学与技术4班 指导教师: 黄荣兵 时间: 2016年11月 目录第一部分 摘 要2第二部分 目的背景与意义4第三部分 需求分析4第四部分 系统设计44.1 结构设计44。2 功能结构图54.3 功能流程以及工作流描述6第五部分 数据库的设计65。1数据库设计65.2数据表的设计7第六部分 详细设计76.1 学生管理系统主界面模块76.2 学生信息管理模块86。3 课程信息管理模块106。4 查询模块11图6。5 数据库操作模块11第七部分
2、课程设计心得11第一部分 摘 要该项目开发的软件为学校学生信息管理系统软件,是鉴于目前学校学生人数剧增,学生信息呈爆炸性增长的前提下,学校对学生信息管理的自动化与准确化的要求日益强烈的背景下构思出来的,该软件设计完成后可用于所有教育单位(包括学校,学院等等)的学生信息的管理。 目前社会上信息管理系统发展飞快,各个企事业单位都引入了信息管理软件来管理自己日益增长的各种信息,学生管理系统也是有了很大的发展,商业化的学生信息管理软件也不少,但本系统完全独立开发,力求使系统功能简洁明了,但功能齐全且易于操作。学生信息管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要。
3、本文介绍了学生信息管理系统的开发整个过程,阐述了系统分析、系统设计、数据库设计和系统实施的全过程.在开发方法上本系统利用了软件工程化的思想和方法,总体上采用结构化生命周期开发方法,具体模块实施采用了原型法和面向对象系统开发方法。并采用JAVA作为开发工具,mysql作为后台数据库。本系统具有学生管理、课程管理、成绩管理、信息查询等功能,分成四大模块,每个模块都相互联系,但不相互干扰,这符合了软件模块开发的思想.本系统完成了学生信息的增加、修改、删除、查询和选课,课程信息的增加、修改、删除、查询,成绩的添加、修改、查询等功能。【关键字】:信息管理系统、模块设计、软件工程。第二部分 目的背景与意义
4、学生信息管理系统是一个教育单位不可缺少的部分。一个功能齐全、简单易用的信息管理系统不但能有效地减轻学校相关工作人员的工作负担,它的内容对于学校的决策者和管理者来说都至关重要,所以学生信息管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案、统计和查询数据,这种管理方式存在着许多缺点,如:效率低、保密性差,人工的大量浪费;另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少困难。随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着来越重要的作用。作为计算机应用的一部分,使用计
5、算机对学校的各类信息进行管理,具有手工管理所无法比拟的优点。例如:检索迅速、查询方便、效率高、可靠性好、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高学校信息管理的效率,也是一个单位科学化、正规化管理,与世界接轨的重要条件。第三部分 需求分析学生信息管理系统的功能总结起来,共需要以下几个方面:1. 学生信息管理管理所有学生的基本信息,包括增加、修改、删除等,也可以根据各种条件查询出需要的信息。2. 课程信息管理管理所有课程的基本信息,包括增加、修改、删除等,也可以根据各种条件查询出需要的信息。3. 选课与成绩管理根据学号进行选课,登记课程的成绩,可以根据学号查询出来选课信息与成绩
6、。第四部分 系统设计4。1 结构设计根据对系统的需求分析,本系统将分为4个模块:l 学生管理:管理学生的基本信息,包括个人信息的添加、修改、删除,以及选课信息的添加。l 课程管理:管理课程的基本信息,包括课程信息的添加、修改和删除。l 成绩管理:管理学生的选课的成绩信息,包括成绩的登记与修改。l 信息查询:查询已经登记的信息,包括学生的基本信息、课程的基本信息与成绩信息。4.2 功能结构图系统的功能结构如图1所示。学生管理系统学生管理课程管理成绩管理信息查询增加修改删除学生选课增加修改删除增加修改学生查询课程查询成绩查询按学号查询按姓名查询按专业查询按性别查询按学院查询按课程名称查询按授课教师
7、查询查询所有成绩按学分绩点查询按单科成绩查询图1 学生管理系统功能结构图4.3 功能流程以及工作流描述1. 增加学生信息系统操作人员打开学生信息添加界面,输入相关的信息(姓名、性别、民族、籍贯、出生日期、入学年份、专业和学院等),在数据库中添加相关数据。2. 修改学生信息根据学生的学号查询出该学生的相关信息,修改相关条目后保存在数据库中。3. 删除学生信息根据学生的学号查询出该学生的相关信息,确定删除后,在数据库中删除该信息。4. 学生选课选择学生学号与需要选择的课程,确定无误后保存,数据库中将自动添加新的选课记录。5. 增加课程信息系统操作人员根据打开的课程增加界面,输入相关信息(课程名称、
8、授课教师、课程学分、课程系数、上课地点等),在数据库中添加相关的数据。6. 修改课程信息根据课程号查询出该课程的相关信息,修改条目后保存在数据库中。7. 删除课程信息根据课程号查询出该课程的相关信息,确认删除后,在数据库中删除该信息。8. 登记成绩根据学号,以及该学生所选择的课程,进行成绩登记,为选课的同学将无法登记。9. 修改成绩对已经登记的成绩信息进行修改。10. 学生查询可以根据学生学号、学生姓名、学生性别、学生所学专业、学生所属学院来对学生信息进行查询,所有符合查询条件的学生信息将都被显示出来.11. 课程查询按照课程名称和授课教师的名称对课程详细信息进行查询,所有符合查询条件的课程信
9、息都将会被显示出来。12. 成绩查询:根据学生的学号来查询该学生所有课程的成绩.第五部分 数据库的设计5。1数据库设计此系统使用的是mysql数据库,由于此系统需要的数据量不是很大,所以选择比较简便的mysql数据库。此系统的数据库名称是studentsys,创建语句如下:5。2数据表的设计数据库中包含三个表,即是学生信息表(student)、课程信息表(Course)和学生选课表(SC),设计要求如表13所示.表1 学生信息表(Student)名称字段名称数据类型主键非空学号SnumVarchar(20)YesYes学生姓名SnameVarchar(10)NoNo性别SsexVarchar(
10、2)NoNo民族SethnicVarchar(4)NoNo籍贯ShomeVarchar(20)NoNo入学年份SyearVarchar(10)NoNo专业SmajorVarchar(10)NoNo学院ScollegeVarchar(10)NoNo出生日期SbirthVarchar(10)NoNo学分绩点SpointVarchar(10)NoNo表2 课程信息表(Course)名称字段名称数据类型主键非空课程编码CnumVarchar(10)YesYes课程名称CnameVarchar(20)NoNo授课教师CteacherVarchar(10)NoNo上课地点CplaceVarchar(10)
11、NoNo课程学分CpointSmallintNoNo课程系数CratioVarchar(2,2)NoNo表3 学生选课表(SC)名称字段名称数据类型主键非空学号SnumVarchar(20)YesYes课程编码CnumVarchar(10)YesYes成绩GradeFloat(4,2)NoNo第六部分 详细设计该系统由6个模块构成,包括学生管理系统主界面模块、学生信息管理模块、课程信息管理模块、成绩管理模块、信息查询模块和数据库操作模块,以下分别加以叙述:6。1 学生管理系统主界面模块学生管理系统的主界面模块包括StuMS。java和StuMain.java两个文件。StuMS是学生管理系统的
12、主运行类,其中有整个程序的主方法main,该文件生成了StuMain类的一个实例,从而生成了学生管理系统的主界面,如图2所示.StuMain类继承了JFrame类,实现了事件监听接口,它有一个不带参数的构造函数StuMain(),用来生成StuMain实例,StuMain类将所有的功能集中到面板中,面板上的按键是按网格排布,生成按钮,通过按钮的响应函数调用其他模块的函数来实现学生管理系统的各个功能,以下是主界面的运行程序:图6。1。1 主界面运行程序6.2 学生信息管理模块学生信息管理模块主要由StuInfo.java、AddStuInfo。java、EditStuInfo。java、DelS
13、tuInfo.java、SelectCourse.java和StuInfoSearchSnum。java这六个文件组成,每个java文件只有一个类,完全实现模块化设计,StuInfo类是AddStuInfo、EditStuInfo、DelStuInfo的超类,因为这三个类生成的界面是相同的具有共同之处.SelectCourse模块是选课模块,StuInfoSearchSnum是查询模块,用于AddStuInfo、EditStuInfo、DelStuInfo调用来查询学生信息以便增加、修改和删除学生信息.学生信息管理模块的几个界面如下:图 6。2.1 学生信息添加界面图6.2。2 学生信息修改界
14、面图6。2。3 学生信息删除界面图6.2.3 学生选课界面6。3 课程信息管理模块课程信息管理模块主要由CourseInfo.java、AddCourseInfo。java、EditCourseInfo.java、DelCourseInfo。java和StuInfoSearchSnum.java这六个文件组成,每个java文件只有一个类,完全实现模块化设计,CourseInfo类是AddCourseInfo、EditCourseInfo、DelCourseInfo的超类,因为这三个类生成的界面是相同的具有共同之处。CourseInfoSearchSnum是查询模块,用于AddCourseInf
15、o、EditCourseInfo、DelCourseInfo调用来查询课程以便增加、修改和删除课程。课程信息管理模块的几个界面如下:图 6.3.1 课程信息增加界面图 6。3。1 课程信息修改界面图 6。3。1 课程信息删除界面6。4 查询模块查询模块分学生信息查询、课程信息查询和成绩查询:界面如下:图 6.4 查询模块图6。5 数据库操作模块数据库操作模块包括连接数据库和数据库操作,连接数据库在类DataBase.java中,操作数据库类分别在几个不同的类里,学生信息操作在StuBean.java,选课操作在Csbean。java中,课程操作在CrsBean。java中,代码在附录里,这里就
16、不重复了。第七部分 课程设计心得在本系统的开发过程中,由于本人是初次开发软件,在知识、经验方面都存在着不足。另外,在整个开发的过程中,时间也比较仓促.因此,该系统必然会存在一些缺陷和不足。因为对学生信息管理的整个流程不够熟悉,在需求分析时未能做到完全满足用户的需求.尽管本管理系统存在着很多不足,但其功能全面、易于日后程序更新、数据库管理容易、界面友好、操作方便、效率高、安全性好等优点是本管理系统所必需的.通过开发这个系统,我掌握了的项目基本开发过程,用到的知识巩固了我对JAVA的学习,但在这次设计中的最大收获并不是掌握这几门开发工具的应用,而是学会了设计系统的思维方法,以及与同学们之间相互帮助
17、的精神.第八部分 附录(部分代码)/Database.java/import java.sql.;import javax。naming。spi.DirStateFactory。Result;/ * 连接数据库的类 /public class Database private Statement stmt=null;ResultSet rs=null;private Connection conn=null;String sql;String strurl=jdbc:mysql:/127。0。0.1:3306/studentsys;public Database()/* * 打开数据库连接 *
18、/public void OpenConn()throws ExceptiontryClass.forName(com.mysql。jdbc.Driver); conn=DriverManager.getConnection(strurl,”root”,root);conn.setAutoCommit(false);catch(Exception e) System。err.println(”OpenConn:”+e.getMessage();e。printStackTrace();/ 执行sql语句,返回结果集rs */public ResultSet executeQuery(String
19、 sql)stmt = null;rs=null;trystmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet。CONCUR_READ_ONLY);rs=stmt.executeQuery(sql);catch(SQLException e)System。err.println(executeQuery:”+e。getMessage());e.printStackTrace();return rs; /* 执行sql语句 */public int executeUpdate(String sql)stmt=nu
20、ll; rs=null; int k=0;trystmt=conn。createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet。CONCUR_READ_ONLY);k=stmt.executeUpdate(sql);mit();catch(SQLException e)System.err。println(executeUpdate:+e。getMessage()); e。printStackTrace();return k;public void closeStmt()trystmt.close();catch(SQLExcepti
21、on e)System。err.println(”closeStmt:+e。getMessage(); /* 关闭数据库连接 */public void closeConn()tryconn.close();catch(SQLException ex)System.err。println(aq.closeConn:”+ex。getMessage()); /* 转换编码 /public static String toGBK(String str)try if(str=null)str = ”;elsestr=new String(str.getBytes(”ISO-88591),”GBK);
22、catch (Exception e) System.out。println(e);return str;/StuBean。java/import java.util.;import java。sql。*;import javax.swing。*;/ * 有关学生信息数据库操作的类 */public class StuBean String sql;ResultSet rs = null;String sNum;String sName;String sSex;String sBirth;String sHome;String sEthnic;String sYear;String sMajo
23、r;String sCollege;String sCourse;String colName;/列名String colValue;/列值String colValue2;/列值int stuId;/学生的新学号/ * 添加学生信息 */public void stuAdd(String Snum,String name, String sex, String birth, String home, String ethnic, String year, String major, String college)Database DB = new Database();this。sNum =
24、 Snum;this.sName = name;this.sSex = sex;this.sBirth = birth;this.sHome = home;this.sEthnic = ethnic;this。sYear = year;this。sMajor = major;this。sCollege = college;if(sName = null|sName。equals(”))JOptionPane.showMessageDialog(null, ”请输入学生姓名, 错误”, JOptionPane。ERROR_MESSAGE);return;elseString numS = 1”;
25、sql = insert into student(snum, sname,ssex,sbirth,shome,sethnic,syear,smajor,scollege) values (”+sNum+”,+sName+”,”+sSex+,”+sBirth+”,”+sHome+,+sEthnic+,+sYear+”,”+sMajor+,+sCollege+);tryDB。OpenConn();System.out.println(ksadhfasdf”);DB.executeUpdate(sql);System.out。println(”ksadhfasdf);JOptionPane.sho
26、wMessageDialog(null,成功添加一条新的纪录!);catch(Exception e)System。out.println(e);JOptionPane.showMessageDialog(null, 保存失败”, 错误, JOptionPane。ERROR_MESSAGE); finally DB。closeStmt();DB.closeConn();/* * 修改学生信息 */public void stuModify(String num, String name, String sex, String birth, String home, String ethnic,
27、 String year, String major, String college)Database DB = new Database();this。sNum = num;this。sName = name;this。sSex = sex;this.sBirth = birth;this。sHome = home;this。sEthnic = ethnic;this.sYear = year;this.sMajor = major;this。sCollege = college;if(sName = null|sName。equals(”)JOptionPane。showMessageDi
28、alog(null, 请输入学生姓名”, 错误”, JOptionPane.ERROR_MESSAGE);return;else/sql = ”update student set sname = +sName+, ssex = ”+sSex+, sbirth = +sBirth+, shome = ”+sHome+”, sethnic = +sEthnic+”, syear = +sYear+, smajor = +sMajor+, scollege = ”+sCollege+ where snum = +Integer。parseInt(sNum)+”;sql = update stude
29、nt set sname = +sName+, ssex = +sSex+”, sbirth = +sBirth+”, shome = +sHome+”, sethnic = ”+sEthnic+”, syear = ”+sYear+, smajor = ”+sMajor+”, scollege = ”+sCollege+” where snum = +sNum+”;tryDB.OpenConn();int k = DB.executeUpdate(sql);if(k = 1)JOptionPane。showMessageDialog(null,”成功修改一条新的纪录!”);catch(Exc
30、eption e)System。out。println(e);JOptionPane.showMessageDialog(null, 更新失败, ”错误”, JOptionPane。ERROR_MESSAGE); finally DB。closeStmt();DB.closeConn();/ * 删除学生信息 /public void stuDel(String num)Database DB = new Database();this.sNum = num;sql = delete from student where snum = +sNum+”;tryDB.OpenConn();DB.e
31、xecuteUpdate(sql);JOptionPane.showMessageDialog(null,成功删除一条新的纪录!);catch(Exception e)System。out.println(e);JOptionPane。showMessageDialog(null, ”删除失败”, 错误, JOptionPane。ERROR_MESSAGE); finally DB.closeStmt();DB.closeConn();/* * 根据学号查询学生信息 /public String stuSearch(String num)Database DB = new Database()
32、;this.sNum = num;String s = new String8;sql = ”select from student where snum = +sNum+”;tryDB.OpenConn();rs = DB.executeQuery(sql);if(rs.next()s0 = rs.getString(sname”);s1 = rs.getString(”ssex);s2 = rs.getString(sethnic”);s3 = rs.getString(shome);s4 = rs。getString(”syear);s5 = rs。getString(”smajor);
33、s6 = rs。getString(”scollege);s7 = rs。getString(sbirth);elses = null;catch(Exception e)finally DB。closeStmt();DB.closeConn();return s;/* 学生信息综合查询(按照一个条件进行查询) /public String stuAllSearch(String colname,String colvalue)this。colName = colname;this。colValue = colvalue;Database DB = new Database();String
34、sn = null;int row = 0;int i = 0;DB.toGBK(colvalue);if(colValue = nullcolValue.equals(”))sql = ”select from student;elsesql = ”select * from student where ”+colName+ = +colValue+”;tryDB。OpenConn();rs = DB.executeQuery(sql);if(rs.last()row = rs。getRow();if(row = 0)sn = null;elsesn = new Stringrow9;rs.
35、first();rs。previous();while(rs。next())sni0 = rs。getString(”snum);sni1 = rs.getString(sname”);sni2 = rs。getString(”ssex”);sni3 = rs。getString(”sethnic”);sni4 = rs。getString(”shome”);sni5 = rs.getString(”syear”);sni6 = rs。getString(smajor);sni7 = rs。getString(”scollege”);sni8 = rs。getString(”sbirth”);
36、i+;catch(Exception e)finally DB。closeStmt();DB。closeConn();return sn;/* * 学生信息综合查询(查询某范围内的记录) */public String stuAllSearch(String colname,String colvalue,String colvalue2)this。colName = colname;this.colValue = colvalue;this。colValue2 = colvalue2;Database DB = new Database();String sn = null;int row
37、= 0;int i = 0;sql = select from student where ”+colName+” between +colValue+ and +colValue2+”;tryDB.OpenConn();rs = DB.executeQuery(sql);if(rs。last())row = rs。getRow();if(row = 0)sn = null;elsesn = new Stringrow9;rs.first();rs.previous();while(rs.next()sni0 = rs。getString(”snum”);sni1 = rs。getString
38、(”sname”);sni2 = rs。getString(ssex);sni3 = rs.getString(sethnic);sni4 = rs。getString(shome”);sni5 = rs.getString(”syear);sni6 = rs.getString(”smajor”);sni7 = rs。getString(”scollege”);sni8 = rs.getString(”sbirth);i+;catch(Exception e)finally DB.closeStmt();DB。closeConn();return sn;public String stuSe
39、archBySimple(String course)this.sCourse = course;ResultSet rSet,rrSet;String LinCNUM = null;Database DB = new Database();String sn = null;String snnStrings = null;int row = 0;int i = 0;int j = 0;String sql1 = select course。 from course where ame=”+sCourse+”;String sql3 = null;tryDB。OpenConn();rSet =
40、 DB。executeQuery(sql1);if(rSet.last())row = rSet。getRow();if(row = 0)LinCNUM = null;elserSet。first();rSet。previous();while(rSet.next()LinCNUM = rSet。getString(cnum);System。out。println(LinCNUM);String sql2 = ”select sc.snum from sc where um=”+LinCNUM+” order by sc.grade desc”;rrSet = DB.executeQuery(sql2);if(rrSet.las