资源描述
数据库原理课程设计报告学生档案管理系统学生姓名: 学 号:班 级:指导老师:日 期: 数学与计算机科学工程学院1 设计目标学生信息档案管理是高校管理的重要组成部分。学生的稳定是学校快速发展的有力保障,这不仅仅关系到学生在校期间的表现,在很大程度上度量了一个学生的跟踪管理。学生管理的重要性不言而喻,但是学生管理在学校中很繁琐的,在每个系,每个学生都需要有对应的档案记录。在学校各项管理中,学生管理牵涉到的其他管理内容是最复杂的,它牵涉到了学生个人档案管理、成绩管理等。所以在实际管理工作中,往往由于记录的数量多、管理复杂、可连续性差,造成学生管理的混乱。对这一混乱,最好的解决办法就是借助计算机技术和数据库管理系统,对整个学生管理进行记载,并实行电子化管理。本课题的目的就是开发“学生信息档案管理系统”,通过这一系统来掌握学生的管理情况,实现学生信息管理的电子化,提供一个电子化的学生管理平台。 本系统的设计以简易和方便使用为目标,系统能对学生的基本档案信息能进行很好的管理,主要包括学生学籍信息管理,班级信息管理,课程设置,学生成绩管理。其中每各管理模块都能进行添加,删除,修改,查询的基本操作。主要功能:(1). 要求在前台主界面上显示数据库中存放的学生的基本信息,由特定权限的管理员或者用户登录后通过按钮或菜单对学生的信息进行录入、修改、查询、删除等功能。(2). 利用ODBC驱动程序连接数据库,修改、存储学生的基本信息。2. 功能设计1 学籍管理:对学生的学籍信息进行管理2 班级管理:对各年级的班级进行管理3 课程设置:能对各年级的课程进行添加,修改等操作或添加新的课程,删除以前的课程4 成绩管理:对学生的各学期的考试成绩进行录入,修改,查询等操作本系统是对学生的基本档案信息进行管理,主要包括学生学籍信息管理,班级信息管理,课程设置,学生成绩管理。其中每各管理模块都能进行添加,删除,修改,查询的基本操作。系统主要划分为四个模块:(1). 学籍管理模块:对学生的学籍信息进行综合管理,学生入学时,可以添加学籍信息,退学或转学时可以删除学生的学籍信息,学生学籍信息的修改,查询。(2). 班级管理模块:对各年级的班级信息进行管理,能添加新的班级,删除已有班级或更新原有班级的信息(3). 课程设置模块:对所有年级的课程进行综合管理,能添加新的课程,删除已有课程或更新某一年级的课程(4). 成绩管理模块:对学生各学期考试的成绩信息进行综合管理,能在考试后添加学生的成绩或删除学生的某课程的成绩以及按学号,班级,课程三种查询方式查询学生的成绩信息程序设计组成框图:文件名功能描述start.java系统开始运行的界面Scanuser.java浏览系统用户Cxbj.java查询学生班级Addxj.java添加学生档案(学籍)Scanresult.java查询成绩信息Adduser.java添加用户Cxxj.java查询学生档案(学籍)Tjkcxx.java添加学生的课程信息Xiugaimima.java修改用户的密码Addresult.java添加学生成绩Xgbj.java修改学生的班级Xgcj.java修改学生的成绩Xgkcxx.java修改学生的课程信息Xgxjxx.java修改学生的学籍信息Mainframe.java主题窗口学生档案管理系统总体结构图系统流程图:选择对应菜单进行操作退出开始登录成功?系统学籍管理班级管理课程设置成绩管理更换背景背景音乐帮助系统主界面结束NO 执行结束3数据库设计(1)需求分析随着学校向全国学生人数的增加,对于学生的信息管理也越来越复杂,要求也越来越高,因此需要一个全面、详细的学生档案管理系统,以便完成对学生档案信息的管理。基于文件、表格等纸介质的手工处理,学生信息管理部门信息处理工作量大,容易出错,且管理方面因人而异。然而学校系统软件对学生信息管理系统应该覆盖各个所需功能,使各级管理人员和广大教职工在信息系统的辅助下进行工作,提高管理的整体水平。使得学生信息管理更方便。学生信息管理系统,可以用集中的数据库将与人力资源管理相关的信息全面、有机地联系起来,有效地减少了信息更新和查找中的重复劳动,保证了信息的相容性,从而大大地提高了工作效率,还能使原来不可能提供的分析报告成了可能。在采用和实施学生信息管理系统之后,就会将依赖于人的过程改为依赖于计算机系统的过程。学校管理人员只要获取了相应的权限,就可以随时进入系统,直接查阅相应的信息。采用和实施学生档案管理系统不仅仅是为了提高工作效率。同时在使用学生档案管理系统后,学校相关领导可以较为全面、准确的了解到同学们的综合信息,然后方便更具各种信息对学校的管理做出各种决策。(2)数据库结构设计班级信息表:create table class(class_No int primary key,grade int,director char(10),classroom_No char(10)课程信息表:create table course(course_No int primary key,course_Name varchar,course_Type char(10),course_Des char(50)年级课程信息表:create table gradecourse(grade char(10) primary key,course_Name char(10)学生基本信息表:create table student(student_ID int primary key,student_Name varchar(50),student_Sex char(2),born_Date datetime,class_NO int,tele_Number varchar(50),ru_Date datetime,address varchar(50),commentvar char(50)学生成绩信息表:create table result(exam_No char(10),student_ID int,student_Name varchar(50),class_No int,course_Name varchar(50),result float(8),primary key(exam_No,student_ID),foreign key(student_ID) references student(student_ID)用户信息表:create table users(username varchar(50) primary key,pwd varchar(50),power varchar(50)(3). E-R模型设计以上每个表的E-R图如下:班级信息:班级班号年级班主任教室课程信息:课程课程号课程名课程类型说明学生成绩信息:学生成绩考号学号学生姓名班号课程名成绩年级课程信息:年级课程年级课程学生基本信息:学生学号姓名性别出生日期课程号电话号码入学时间家庭住址备注用户信息:用户用户名密码访问权限(4). 概念结构设计完整的实体联系图:出生日期课程号性别班级班号年级班主任教室电话号码姓名学号备注学生 管理 n 1家庭住址入学时间 n 1选课成绩管理学号课程号 n n课程名 成绩学生成绩课程类型课程 1 1考号 说明学生姓名上课 n成绩课程名班号 1年级课程 课程年级4. 系统实现(1). 登录界面对于已经注册的管理员,在进入管理系统之前先要进行登录,在下面的登录界面经过身份验证后才能进入系统操作界面。只有有正确用户名及密码的管理员或者用户才能进入系统界面,对数据库中的学生信息进行添加、修改及删除等功能。当登录不成功时,系统不提供除修改密码和退出以外的任何操作。(2). 学生学籍信息的管理通过管理员身份验证后,管理员进入的就是学生学籍信息管理的页面,当用户选择不同的操作时系统户跳入到不同的界面进行操作,如学生学籍信息的添加查询和修改等功能。a) 添加学籍信息输入的学生信息可以包括学生的姓名、性别、学号、班级、联系电话、联系地址及备注。其中学号为主键,如果输入了相同的学号或者是非阿拉伯数字,系统将不写入数据库,会出现提示页面。b) 修改学籍信息当学生的相关资料有变化时,管理员需要对学生的信息进行维护与修改,为了操作方便,只要输入相应的学号,就可以对学生的信息修改。也可以逐条修改。修改学生信息的时候我们还可以对其相关的学籍信息进行删除。c) 查询学籍信息查询学籍,该部分是通过用户输入的欲查询的学生学号、名字或者班级来查询该学生的详细信息。用户输入学号后如果数据库中不存在该学生的学籍信息,系统将会提示该学生不存在信息。如果存在该学生系统将会输出该学生的详细信息,包括学生姓名、学号、性别、班级,学生详细信息显示如下:(3). 班级管理a) 添加班级信息点击添加班级信息,就可以添加班号、班主任、年级、教师等信息。b) 修改班级信息当班级信息有变化时,则点击修改班级信息就可以对班级信息各属性进行修改。如修改班主任在班主任文本行里输入新班主任。(4). 课程设置设置管理a) 添加课程信息如果要对某一个班级添加新的课程,点击添加课程信息按钮,则进入界面输入课程信息并添加,课程表就增加了所添加课程。b) 修改课程信息若某一课程的课程号、名字、课程类型变了,点击修改课程信息对其修改。c) 设置年级课程在这个功能模块里可以对某一年级安排课程,也可以对班级所修课程信息就行修改,如果在所有课程里没有要选修的课程,可以通过添加课程信息,然后再对班级课程添加选修的课程,对多加的课程也能进行移除。(5). 成绩管理a) 添加成绩信息一学生考完试需要添加成绩,点击添加成绩信息,输入该界面所要求输入的信息,则可以添加该学生的成绩。b) 修改成绩信息如果发现学生的成绩有误,点击修改学生成绩信息,进入修改界面,输入要修改的值,点击确定,修改成功。 c) 查询成绩信息在这个模块中学生和老师都可以查看学生的各门课程的成绩,只要点击按学号、按班号或者按课程,输入其值,点击确定即可。(6). 在界面上还有更换背景和背景音乐扩展功能,这样能使界面和系统更完善。5分析及结论通过对数据库的学习,使我们对数据库有了一定的了解,知道了如何建立数据库,通过对Java数据库编程的学习,我们学会了如何将数据库和Java编程联系在一起,初步掌握了通过编程实现学生信息管理系统的主要核心,实现了一个简单的学生信息管理系统。本系统在目前的调试中,基本达到了当初的设计要求,设计上基本合理,功能基本完善,能够做到对学生各项档案信息的查询,删除,添加,修改等基本功能。其次本系统代码在附录中只给出了一部分,因为很多操作都是类似的,因此多数代码的主要轮廓都比较相似。由于对数据库和Java的知识水平有限,我们设计的学生档案管理系统只实现了几个主要的功能,还存在着一些问题有待解决,系统设计的还不够完善,同时也存在着很多的不足与缺陷。首先是管理员的注册功能,这个功能应当设计在管理员系统管理内部,以保证其安全性,控制其注册范围,因此管理员一般是不可以初测的,这就保证了管理系统的安全性、保密性。其次是学生的档案信息,在这个部分中录入的信息并不全面,只是最基本的信息,主要是完成了对学生学籍,课程,成绩和其他一些基本信息的操作。而没有对学生的退学,转学的功能进行考虑。还有密码修改的问题,虽显示成功,但不能将修改结果保存到数据库中;对于信息的查询,由于时间紧促和Java的知识水平有限,界面不能够实现自动更新,未找到解决办法,需手动操作一下等等诸多问题,都还需要我们更进一步的完善。在这个学生管理系统的页面设计中,也有许多的不足,页面设计很不够精致,这些都需要去完善的。对于这个系统的种种不足之处需要我们更进一步的去完善。其中的不足有待更进一步的弥补,这些都需要在使用中发现与修改。6 参考文献1 王珊,数据库系统概论,高等教育出版社2 张白一、崔尚森,面向对象程序设计JAVA,西安电子科技大学出版社3 黄明、梁旭,JAVA信息系统设计与开发实例,机械工业出版社7 附录修改学生的学籍信息package studentsystem; /声明studentsystem包import javax.swing.*;import java.awt.*;import java.sql.*;import java.awt.event.*;public class xgxjxx extends JFrame Statement ps, up,sc; ResultSet rs; Connection con; String url; JLabel jLabel1 = new JLabel(); /创建标签 JTextField xh = new JTextField(); /创建文本行 JLabel jLabel2 = new JLabel(); JLabel jLabel3 = new JLabel(); JLabel jLabel4 = new JLabel(); JLabel jLabel5 = new JLabel(); JLabel jLabel6 = new JLabel(); JLabel jLabel7 = new JLabel(); JLabel jLabel8 = new JLabel(); JLabel jLabel9 = new JLabel(); JTextField xm = new JTextField(); JTextField rxrq = new JTextField(); JTextField rq = new JTextField(); JTextField tel = new JTextField(); JScrollPane jScrollPane1 = new JScrollPane(); /创建滚动条 JTextPane address = new JTextPane(); JScrollPane jScrollPane2 = new JScrollPane(); JTextPane comment = new JTextPane(); JLabel jLabel10 = new JLabel(); JButton previous = new JButton(); /创建按钮 JButton next = new JButton(); JButton last = new JButton(); JButton first = new JButton(); JButton xgxl = new JButton(); JButton gxjl = new JButton(); JButton cancel = new JButton(); JButton delete = new JButton(); JLabel jLabel11 = new JLabel(); JTextField sex = new JTextField(); JComboBox jComboBox1 = new JComboBox(); /创建组合框 JComboBox jComboBox2 = new JComboBox(); JComboBox bh = new JComboBox(); public xgxjxx() /构造函数 try jbInit(); catch (Exception e) e.printStackTrace(); try 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); sc=con.createStatement(ResultSet. TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); catch (Exception err) err.getMessage(); String error = err.getMessage(); JOptionPane.showMessageDialog(null, error); try rs = ps.executeQuery(select * from student); /读取数据库 if (rs.next() xh.setText(rs.getString(student_ID); xm.setText(rs.getString(student_Name); sex.setText(rs.getString(student_Sex); rq.setText(rs.getString(born_Date).substring(0, 10); bh.addItem(rs.getString(class_NO); tel.setText(rs.getString(tele_Number); rxrq.setText(rs.getString(ru_Date).substring(0, 10); address.setText(rs.getString(address); comment.setText(rs.getString(comment); catch (SQLException sqle) String error = sqle.getMessage(); JOptionPane.showMessageDialog(null, error); sqle.printStackTrace(); public static void main(String args) /主函数 xgxjxx xgxjxx = new xgxjxx(); private void jbInit() throws Exception /窗口界面初始化 jLabel1.setFont(new java.awt.Font(Dialog, 0, 15); jLabel1.setText(学 号); jLabel1.setBounds(new Rectangle(26, 34, 58, 44); this.setForeground(Color.black); this.setResizable(false); this.setState(Frame.NORMAL); this.setTitle(修改学籍信息); this.getContentPane().setLayout(null); xh.setBackground(Color.white); xh.setFont(new java.awt.Font(Dialog, 0, 15); xh.setEditable(false); xh.setText(); xh.setBounds(new Rectangle(90, 39, 143, 30); jLabel2.setBounds(new Rectangle(26, 78, 58, 44); jLabel2.setText(性 别); jLabel2.setFont(new java.awt.Font(Dialog, 0, 15); jLabel3.setFont(new java.awt.Font(Dialog, 0, 15); jLabel3.setText(班 号); jLabel3.setBounds(new Rectangle(26, 125, 58, 44); jLabel4.setBounds(new Rectangle(16, 164, 65, 44); jLabel4.setText(入校日期); jLabel4.setFont(new java.awt.Font(Dialog, 0, 15); jLabel5.setBounds(new Rectangle(31, 215, 58, 44); jLabel5.setText(备 注); jLabel5.setFont(new java.awt.Font(Dialog, 0, 15); jLabel6.setBounds(new Rectangle(264, 33, 58, 44); jLabel6.setText(姓 名); jLabel6.setFont(new java.awt.Font(Dialog, 0, 15); jLabel7.setFont(new java.awt.Font(Dialog, 0, 15); jLabel7.setText(出生日期); jLabel7.setBounds(new Rectangle(256, 78, 65, 44); jLabel8.setBounds(new Rectangle(262, 125, 65, 44); jLabel8.setText(联系电话); jLabel8.setFont(new java.awt.Font(Dialog, 0, 15); jLabel9.setFont(new java.awt.Font(Dialog, 0, 15); jLabel9.setText(家庭住址); jLabel9.setBounds(new Rectangle(256, 165, 65, 44); /sex.addItem(男); / sex.addItem(女); xm.setBounds(new Rectangle(347, 38, 126, 30); xm.setText(); xm.setFont(new java.awt.Font(Dialog, 0, 15); rxrq.setBounds(new Rectangle(89, 173, 153, 30); rxrq.setText(); rxrq.setFont(new java.awt.Font(Dialog, 0, 15); rq.setBounds(new Rectangle(348, 86, 126, 30); rq.setText(); rq.setFont(new java.awt.Font(Dialog, 0, 15); tel.setBounds(new Rectangle(351, 130, 126, 30); tel.setText(); tel.setFont(new java.awt.Font(Dialog, 0, 15); jScrollPane1.setBounds(new Rectangle(329, 185, 152, 131); address.setFont(new java.awt.Font(Dialog, 0, 15); address.setText(); jScrollPane2.setBounds(new Rectangle(85, 217, 161, 118); comment.setFont(new java.awt.Font(Dialog, 0, 15); comment.setText(); jLabel10.setFont(new java.awt.Font(Dialog, 0, 15); jLabel10.setText(查看学籍信息); jLabel10.setBounds(new Rectangle(22, 343, 97, 33); previous.setText(上一条记录); previous.addActionListener(new xgxjxx_previous_actionAdapter(this); previous.setBounds(new Rectangle(147, 378, 111, 33); previous.setFont(new java.awt.Font(Dialog, 0, 15); next.setFont(new java.awt.Font(Dialog, 0, 15); next.setBounds(new Rectangle(264, 378, 111, 33); next.setText(下一条记录); next.addActionListener(new xgxjxx_next_actionAdapter(this); last.setFont(new java.awt.Font(Dialog, 0, 15); last.setBounds(new Rectangle(384, 378, 131, 33); last.setText(最后一条记录); last.addActionListener(new xgxjxx_last_actionAdapter(this); first.setFont(new java.awt.Font(Dialog, 0, 15); first.setBounds(new Rectangle(26, 378, 111, 33); first.setText(第一条记录); first.addActionListener(new xgxjxx_first_actionAdapter(this); xgxl.setBounds(new Rectangle(34, 452, 96, 37); xgxl.setFont(new java.awt.Font(Dialog, 0, 15); xgxl.setText(修改记录); xgxl.addActionListener(new xgxjxx_xgxl_actionAdapter(this); gxjl.setText(更新记录); gxjl.addActionListener(new xgxjxx_gxjl_actionAdapter(this); gxjl.setFont(new java.awt.Font(Dialog, 0, 15); gxjl.setBounds(new Rectangle(143, 452, 96, 37); cancel.setBounds(new Rectangle(377, 453, 96, 38); cancel.setFont(new java.awt.Font(Dialog, 0, 15); cancel.setText(退 出); cancel.addActionListener(new xgxjxx_cancel_actionAdapter(this); delete.setText(删除记录); delete.addActionListener(new xgxjxx_delete_actionAdapter(this); delete.setFont(new java.awt.Font(Dialog, 0, 15); delete.setBounds(new Rectangle(263, 452, 96, 38); jLabel11.setFont(new java.awt.Font(Dialog, 0, 15); jLabel11.setText(修改学籍信息); jLabel11.setBounds(new Rectangle(26, 416, 101, 37); sex.setBounds(new Rectangle(90, 84, 143, 30); sex.setText(); sex.setFont(new java.awt.Font(Dialog, 0, 15); bh.setFont(new java.awt.Font(Dialog, 0, 15); bh.setBounds(new Rectangle(89, 125, 150, 35); this.getContentPane().add(jLabel1, null); this.getContentPane().add(xh, null); this.getContentPane().add(jLabel3, null); this.getContentPane().add(jLabel2, null); this.getContentPane().add(jLabel5, null); this.getContentPane().add(jLabel4, null); this.getContentPane().add(rxrq, null); this.getContentPane().add(jScrollPane1, null); jScrollPane1.getViewport().add(address, null); this.getContentPane().add(jScrollPane2, null); jScrollPane2.getViewport().add(comment, null); this.getContentPane().add(tel, null); this.getContentPane().add(rq, null); this.getContentPane().add(xm, null); this.getContentPane().add(jLabel7, null); this.getContentPane().add(jLabel6, null); this.getContentPane().add(jLabel8, null); this.getContentPane().add(jLabel9, null); this.getContentPane().add(jLabel10, null); this.getContentPane().add(previous, null); this.getContentPane().add(next, null); this.getContentPane().add(last, null); this.getContentPane().add(first, null); this.getContentPane().add(xgxl, null); this.getContentPane().add(gxjl, null); this.getContentPane().add(jLabel11, null); this.getContentPane().add(sex, null); this.getContentPane().add(delete, null); this.getContentPane().add(cancel, null); this.getContentPane().add(bh, null); this.getContentPane().add(bh, null); this.getContentPane().add(bh, null); this.setBounds(200, 150, 550, 550); this.setVisible(true); void first_actionPerformed(ActionEvent e) /动作响应函数 try if (rs.first() xh.setText(rs.getString(student_ID); xm.setText(rs.getString(student_Name); sex.setText(rs.getString(student_Sex); rq.setText(rs.getString(born_Date).substring(0, 10); bh.addItem(rs.getString(class_NO); tel.setText(rs.getString(tele_Number); rxrq.setText(rs.getString(ru_Date).substring(0, 10); address.setText(rs.getString(address); comment.setText(rs.getString(comment); else JOptionPane.showMessageDialog(null, 这是第一条记录); catch (SQLException sqle) String error = sqle.getMessage(); JOptionPane.showMessageDialog(null, error); sqle.printStackTrace(); void next_actionPerformed(ActionEvent e) /动作响应函数 try if (rs.next() xh.setText(rs.getString(student_ID); xm.setText(rs.getString(student_Name); sex.setText(rs.getString(student_Sex); rq.setText(rs.getString(born_Date).substring(0, 10); bh.addItem(rs.getString(class_NO); tel.setText(rs.getString(tele_Number); rxrq.setText(rs.getString(ru_Date).substring(0, 10); address.setText(rs.getString(address); comment.setText(rs.getString(comment); else JOptionPane.showMessageDialog(null, 这是最后一条记录); catch (SQLException sqle) String error = sqle.getMessage(); JOptionPane.showMessageDialog(null, error); sqle.printStackTrace(); void previous_actionPerformed(ActionEvent e) /动作响应函数 try if (rs.previous() xh.setText(rs.getString(student_ID); xm.setText(rs.getString(student_Name); sex.setText(rs.getString(student_Sex); rq.setText(rs.getString(born_Date).substring(0, 10); bh.addItem(rs.getString(class_NO); tel.setText(rs.getString(tele_Number); rxrq.setText(rs.getString(ru_Date).substring(0, 10); address.setText(rs.getString(address); comment.setText(rs.getString(comment); else JOptionPane.showMessageDialog(null, 这是第一条记录); catch (SQLException sqle) String error = sqle.getMessage(); JOptionPane.showMessageDialog(null, error); sqle.printStackTrace(); void last_actionPerformed(ActionEvent e) /动作响应函数 try if (rs.last() xh.setText(rs.getString(student_ID); xm.setText(rs.getString(student_Name); sex.setText(rs.getString(student_Sex); rq.setText(rs.getString(born_Date).substring(0, 10); bh.addItem(rs.getString(class_NO); tel.setText(rs.getString(tele_Number); rxrq.setText(rs.getString(ru_Date).substring(0, 10); address.setText(rs.getString(address); comment.setText(rs.getString(comment); else JOptionPane.showMessageDialog(null, 这是最后一条记录); catch (SQLException sqle) String error = sqle.getMessage(); JOptionPane.showMessageDialog(null, error); sqle.printStackTrace(); void gxjl_actionPerformed(ActionEvent e) /动作响应函数 try rs = ps.executeQuery(select * from student); /读取数据库 if (rs.next() xh.setText(rs.getString(student_ID); xm.setText(rs.getString(student_Name); sex.setText(rs.getString(student_Sex); rq.setText(rs.getString(born_Date).substring(0, 10); bh.addItem(rs.getString(class_NO); tel.setText(rs.getString(tele_Number); rxrq.setText(rs.getString(ru_Date).substring(0, 10); address.setText(rs.getString(address); comment.setText(rs.getString(comment); catch (SQLException sqle) String error = sqle.getMessage(); JOptionPane.showMessageDialog(null, error); sqle.printStackTrace();
展开阅读全文