1、 至第二学期期末考试 课 程: java语言程序设计 题 目: 学生信息管理系统 类 别: 论文□ 设计√ 院 系: 计算机和信息工程系 专业班级: 信息管理 级本科1班 学 号: 03,04,07,08,15 学生姓名:
2、 邱丹丹,范柳,谭鸿儒,何婧,陆瑶 任课老师: 周 方 完成时间: 6月24日 教 务 处 制 二○一五年九月 目 录 1. 学生信息管理系统概述 2 1.1 研究背景 2 1.2 开发意义 2 2.1 开发环境和软件 3 2.2 系统设计和功效分析 3 2.3 功效层次图 4 3 数据库设计 4 3.1 系统概念结构设计 4 3.2 系统逻辑结构设计 5 3.3 数据库实现 7 3.3.1 数据库关系图
3、 7 3.3.2 SQL语句实现 7 4. 系统模块具体设计 10 4.1 用户登录模块 10 4.2 各用户操作模块 11 4.2.1 管理员操作模块(图1) 11 4.2.2 老师操作模块(图2) 11 4.2.3 学生操作模块(图3) 11 5. 系统运行和测试 12 5.1 管理员登录 12 5.2 老师登录 15 5.3 学生登录 20 6.课程设计总结 23 7.附录(代码) 23 1 学生信息管理系统 1. 学生信息管理系统概述 1.1 研究背景 学生信息管理系统是学校管理关键工具,是
4、学校不可或缺部分。 伴随在校大学生人数不停增加,教务系统数量也不停上涨,。学校工作繁杂、资料众多,人工管理信息难度也越来越大,显然是不能满足实际需要,效率也是很低。而且这种传统方法存在着很多弊端,如:保密性差、查询不便、效率低,极难维护和更新等。然而,本系统针对以上缺点能够极大地提升学生信息管理效率,也是科学化、正规化管理,和世界接轨关键条件。所以怎样自动高效地管理信息是这些年来很多人所研究。 1.2 开发意义 伴随这些年电脑计算机速度质提升,成本下降,IT互联网大众趋势发展。我们使用电脑高效率才处理数据信息成为可能。 学生学籍管理系统出现,正是管理人员和信息数据,计算机
5、进入互动时代表现。友好人机交互模式,清楚简明图形界面,高效安全操作使得我们对成千上万信息管理得心应手。经过这个系统,能够做到信息规范管理,科学统计和快速查询,从而降低管理方面工作量。毋庸置疑,切实有效地把计算机管理引入学校教务管理中,对于促进学校管理制度,提升学校教学质量和办学水平有着显著意义。 2. 系统需求分析 2.1 开发环境和软件 (1) 操作系统:Windows 7 (2) 数据库软件:mysql-5.7.13-winx64 (3) Java开发工具: Eclipse mysql-connector-java-5(JDBC驱动包)
6、 jdk-8u73-windows-x64(java运行环境压缩包) 2.2 系统设计和功效分析 学生信息管理系统,可用于学校等机构学生信息管理,查询,更新和维护,使用方便,易用性强,图形界面清楚明了。该软件用java语言编写,用SQLServer数据库作为后台数据库进行信息存放,用SQL语句完成学生学籍信息添加,查询,修改,删除操作和成绩录入,修改,删除等。用ODBC驱动实现前台Java和后台SQL数据库连接。Java语言跨平台性强,能够在windows,linux,ubuntu等系统下使用,方便简单,安全性好。SQLServer数据库高效安全,二
7、者结合可相互利用各自优势。 该系统实现大致功效: 1. 用户登陆界面。该界面能够选择使用者身份,“管理员,老师,学生”。不一样身份有不一样操作界面和功效权限。ID号和密码输入正确即可登录。学生管理界面。提供了学生学籍信息查询,相关科目标成绩查询和排名,修改登录密码等功效。 2. 老师管理界面。提供了对学生学籍信息查询,添加,修改,删除;学生成绩录入,修改,删除,查询班级排名。修改密码等功效。 3. 管理员管理界面。拥有最高权限。许可添加老师信息和课程信息等。 4. 登录用户信息分别存放在SQL数据库“管理员信息表”, “老师信息表”, “学籍信息表”中,假如用户信息不存在则三张表
8、中,将会无权利登录本管理系统。 确保了本学生管理系统安全性。 2.3 功效层次图 3 数据库设计 3.1 系统概念结构设计 老师ID 课程号 老师 老师姓名 课程名称 课程 登录密码 老师ID 学号 课程号 成绩 姓名 成绩 学号 管理员ID 性别 学籍 管理员 籍贯 登录密码 班级号 班级 籍贯 登录密码 总人数 班级号 班级名称 实体属性表: 实体
9、属性 老师 老师ID,老师姓名,登录密码 课程 课程号,课程名称,老师ID 管理员 管理员ID,登录密码 班级 班级号,班级名称,总人数 学籍 学号,姓名,性别,班级号,籍贯,登录密码 成绩 学号,课程号,成绩 3.2 系统逻辑结构设计 老师信息表: 字段名 类型 空值 约束条件 老师ID varchar(8) not null 主键 老师姓名 varchar(8) not null 登录密码 varchar(8) not null 课程信息表: 字段名 类型 空值 约束条件 课程号
10、 varchar(8) not null 主键 课程名称 varchar(12) not null 老师ID varchar(8) not null 外键 班级信息表: 字段名 类型 空值 约束条件 班级号 varchar(8) not null 主键 班级名称 varchar(8) not null 所属学院 varchar(6) 班级人数 nchar(4) 管理员信息表: 字段名 类型 空值 约束条件 管理员ID varchar(10) not null 主键 登录
11、密码 varchar(10) not null 成绩信息表: 字段名 类型 空值 约束条件 班级号 varchar(15) not null 主键,外键 班级名称 varchar(8) not null 主键,外键 所属学院 smallint not null 学籍信息表: 字段名 类型 空值 约束条件 学号 int not null 主键 姓名 varchar(30) not null 性别 char(2) 班级号 varchar(30) not null 外键 籍
12、贯 char(10) 登录密码 money not null 3.3 数据库实现 3.3.1 数据库关系图 3.3.2 SQL语句实现 数据表创建: (1)老师信息表创建: create table 老师信息表( 老师ID varchar(8) primary key , 老师姓名varchar(8) not null unique, 登录密码varchar(8) not null, ) (2)课程信息表创建: create table 课程信息表( 课程号varchar(8) primary key, 课程名称varch
13、ar(12) not null, 老师ID varchar(8) not null foreign key(老师ID) references 老师信息表(老师ID) ) (3)班级信息表创建: create table 班级信息表( 班级号varchar(8) not null primary key, 班级名称varchar(8) not null unique, 所属学院varchar(8) , 班级人数 nchar(4) ) (4)学籍信息表创建: create table 学籍信息表( 学号varchar(15) primary key, 姓
14、名varchar(8) not null , 性别varchar(4) , 班级号varchar(8) not null , 籍贯varchar(5) , 登录密码varchar(6) not null foreign key (班级号) references 班级信息表(班级号) ) (5)成绩信息表创建: create table 成绩信息表( 学号varchar(15), 课程号varchar(8), 成绩smallint primary key(学号,课程号) foreign key (学号) references 学籍信息表(学号), foreign k
15、ey (课程号) references 课程信息表(课程号) ) (6)管理员信息表创建: create table 课程信息表( 管理员ID varchar(8) primary key, 登录密码 varchar(12) not null ) 视图创建: (1)“老师课程具体信息”视图创建: create view 老师课程具体信息 as SELECT 老师信息表.老师ID,老师信息表.老师姓名,课程信息表.课程号,课程信息表.课程名称, 老师信息表.登录密码 FROM 老师信息表 JOIN 课程信息表 ON 老师信息表.老师ID =课程信息表.老师
16、ID (2) “学生成绩信息”视图创建: create view 学生成绩信息 as SELECT 学籍信息表.学号,学籍信息表.姓名,学籍信息表.性别, 课程信息表.课程名称,成绩信息表.成绩 FROM 成绩信息表 JOIN 学籍信息表 ON 成绩信息表.学号 = 学籍信息表.学号 JOIN 班级信息表 ON 班级信息表.班级号 = 学籍信息表.班级号 JOIN 课程信息表 ON 课程信息表.课程号 = 成绩信息表.课程号 存放过程创建: (1)“单科成绩排名”创建: create proc [dbo].[单科成绩排名] @kec
17、henname char(8), @classname char(8) as select 学籍信息表.学号,姓名,成绩 from 成绩信息表 join 课程信息表on 课程信息表.课程号=成绩信息表.课程号 join 学籍信息表on 学籍信息表.学号=成绩信息表.学号 join 班级信息表on 班级信息表.班级号=学籍信息表.班级号 where 课程名称=@kechenname and 班级名称=@classname order by 成绩desc (2)“全班排名”创建: create proc [dbo].[全班排名] @class
18、 char(8) as select 学籍信息表.学号,姓名, avg(成绩) as 平均分,sum(成绩) as 总分 from 成绩信息表 join 学籍信息表 on 成绩信息表.学号=学籍信息表.学号 join 班级信息表 on 班级信息表.班级号=学籍信息表.班级号 where 班级信息表.班级名称=@class group by 学籍信息表.姓名,学籍信息表.学号 order by avg(成绩) desc,学籍信息表.学号 4. 系统模块具体设计 4.1 用户登录模块 4.2 各用户操作模块 4.2
19、1 管理员操作模块(图1) 4.2.2 老师操作模块(图2) 4.2.3 学生操作模块(图3) 图1 图2 图3 5. 系统运行和测试 5.1 管理员登录 点击“管理员”按钮。输入正确ID和密码。验证成功则可进入管理员管理界面。 管理员ID号和登录密码存在数据库中管理员信息表。表中存在管理员才许可登录。 (1)添
20、加老师信息。在弹出输入栏中输入正确数据,点击“确定添加”。 假如输入反复信息则会弹出。 假如某项未填则弹出。 输入数据会分别写进“老师信息表”和“课程信息表”中。 增加老师信息,许可让更多老师登录本系统进行管理操作! (2)修改老师信息 假如要修改老师信息不存在,则 (3)删除信息修改 输入老师信息不存在,则 (4)查询老师信息 5.2 老师登录 在登录界面选择“老师”按钮,并输入正
21、确ID号和密码,即可登录成功! 输入错误则会弹出提醒! ID号输入正确,登录成功!进入老师管理操作界面: (1)显示学生信息。 (2)添加学生信息 新添加信息会保留在学籍信息表中! 假如输入信息已经存在,则显示 假如输入数据正确,则 (3)修改学生信息,输入正确则显示! (4) 删除学生信息, (5)录入学生成绩 (6)修改学
22、生成绩 (7) 删除学生成绩 (8)查询学生成绩 (9)全部成绩排名 (10)单科成绩排名 (11)更改登录密码 修改成功后即可用新密码进行登录! 5.3 学生登录 输入正确ID号和密码,即可正常登录! (1) 显示学生信息 (2) 查询个人成绩 (3)单科成绩排名 (4)全班成绩排名 (5)修改密码 修改
23、密码后会更新学生学籍表里面登录密码,下次就能够用新密码登录。 点击 后,就能够安全退出学生管理系统了! 6.课程设计总结 课程设计是培养学生综合利用所学知识,发觉,提出,分析和处理实际问题,锻炼实践能力关键步骤,是对学生实际工作能力具体训练和考察过程. 此次课程设计即使很辛劳,实在是受益匪浅。原来这门课知识学就不够扎实,此次课程设计,在设计过程中碰到了很多问题,刚开始要设计时候,还真不知道从哪里下手但最终在图书、同学和老师帮助下全部得到了处理,让我学会了好多书本上没有东西,经过此次课程设计我也能将书本上知识融会贯通,
24、起到了很好辅助学习效果,不过我发觉我学到知识比整整一个学期学到全部多。理论和实践相结合是学习最有效方法。在设计过程中发觉了自己不足之处,对以前所学过知识了解得不够深刻,掌握得不够牢靠,经过这次课程设计以后,一定把以前所学过知识重新温故。 经过这次课程设计使我知道了理论和实际相结合是很关键,只有理论知识是远远不够,只有把所学理论知识和实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提升自己实际动手能力和独立思索能力。 7.附录(代码) 因为篇幅有限,所以只附上关键功效代码: 登陆界面和主功效界面: public class Login ext
25、ends JFrame implements ActionListener{ JFrame mm=new JFrame("您好!请您先登录!"); JTextField t2=new JTextField(null,15); JTextField t4=new JPasswordField(null,15); public String zh=null; JRadioButton b=new JRadioButton("老师"); JRadioButton b1=new JRadioButton("学生"); JRadioButton b2=new JR
26、adioButton("管理员"); public void jiemian(){ mm.setSize(300,340); mm.setVisible(true); mm.setLocation(200,300); mm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel t1=new JLabel("ID号:"); JLabel t3=new JLabel("密码
27、"); JButton denglu2=new JButton("登录"); denglu2.setContentAreaFilled(false); Container n=mm.getContentPane(); n.setLayout(null); t1.setBounds(42,125,75,35); t2.setBounds(80,125,150,35); t3.setBounds(40,180,75,35);
28、 t4.setBounds(80,180,150,35); denglu2.setBounds(102,245,70,30); n.add(t1);n.add(t2); n.add(t3); n.add(t4); n.add(denglu2); b.setBounds(130,85,70,30); b1.setBounds(70,85,70,30); b2.setBounds(190,85,70,30); ButtonGroup r
29、g=new ButtonGroup(); b.setSelected(false); b1.setSelected(true); b1.setSelected(false); n.add(b); n.add(b2); rg.add(b2); rg.add(b); n.add(b1); rg.add(b1); b.setContentAreaFilled(false); b1.setContentAreaFilled(false);
30、 b2.setContentAreaFilled(false); denglu2.addActionListener(this); } public void actionPerformed(ActionEvent e) { JButton denglu2=(JButton)e.getSource(); if(b.isSelected()) { zh=t2.getText(); String mima=t4.getText(); try { Class.forName
31、"sun.jdbc.odbc.JdbcOdbcDriver"); Connection c=DriverManager.getConnection("jdbc:odbc:学生信息系统"); Statement s=c.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet r=s.executeQuery("select * from 老师信息表 where 老师ID='"+zh+"' an
32、d 登录密码='"+mima+"'"); r.last(); if(r.getRow()==1) { mm.setVisible(false); r.beforeFirst(); while(r.next()){ JOptionPane.showMessageDialog( null ,r.getString("老师姓名")+"老师!您好!欢迎登录老师管理系统!" ) ; } JFrame mmm=new JFrame(); mmm.setSize(400,420); mmm.setVisi
33、ble(true); mmm.setLocation(200,300); mmm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel aaa=new JLabel("学生信息管理:");JLabel aaa1=new JLabel("学生成绩管理:"); JButton b1=new JButton("显示学生信息");b1.setBounds(40,45,140,30); JButton b2=new JButton("添加学生信息");b2.setBounds(200,45,140,30); JButt
34、on b3=new JButton("修改学生信息");b3.setBounds(40,90,140,30); JButton b4=new JButton("删除学生信息");b4.setBounds(200,90,140,30); JButton b5=new JButton("录入学生成绩");b5.setBounds(40,170,140,30); JButton b6=new JButton("修改学生成绩");b6.setBounds(200,170,140,30); JButton b7=new JButton("删除学生成绩");b7.setBounds(40,
35、215,140,30); JButton b8=new JButton("查询学生成绩");b8.setBounds(200,215,140,30); JButton b9=new JButton("全部成绩排名");b9.setBounds(40,260,140,30); JButton b12=new JButton("单科成绩排名");b12.setBounds(200,260,140,30); JButton b10=new JButton("退出系统");b10.setBounds(60,325,100,30); JButton b11=new JButton("
36、修改密码");b11.setBounds(220,325,100,30); aaa.setBounds(15,15,90,30); aaa1.setBounds(15,140,90,30); Container n=mmm.getContentPane(); n.setLayout(null); J_ActionListener1 a1=new J_ActionListener1(); J_ActionListener2 a2=new J_ActionListener2(); J_ActionListener3 a3=new J_ActionListener3()
37、 J_ActionListener4 a4=new J_ActionListener4(); J_ActionListener5 a5=new J_ActionListener5(); J_ActionListener7 a7=new J_ActionListener7(); J_ActionListener8 a8=new J_ActionListener8(); J_ActionListener9 a9=new J_ActionListener9(); J_ActionListener10 a10=new J
38、ActionListener10(); J_ActionListener12 a12=new J_ActionListener12(); J_ActionListener11 a11=new J_ActionListener11(); n.add(b1);n.add(b2);n.add(b3);n.add(b4);n.add(b5);n.add(b6); n.add(b7);n.add(b8);n.add(b9);n.add(b10);n.add(aaa);n.add(aaa1); n.add(b11);n.add(b12);b1.add
39、ActionListener(a1);b2.addActionListener(a2); b3.addActionListener(a3);b4.addActionListener(a4);b5.addActionListener(a5); b6.addActionListener(a7);b7.addActionListener(a8);b8.addActionListener(a9); b9.addActionListener(a10); b11.addActionListener(a1)b12.addActionListener(a12); b10.a
40、ddActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { System.exit(0); } }); ((JComponent) mmm.getContentPane()).setOpaque(false); .URL url = Sql.class.getResource("未命名.jpg"); ImageIcon img = new
41、ImageIcon(url); JLabel background = new JLabel(img); mmm.getLayeredPane().add(background, new Integer(Integer.MIN_VALUE)); background.setBounds(0, 0, img.getIconWidth(), img.getIconHeight()); } else{ JOptionPane.showMessageDialog( null ,"老师ID或密码有误!请重新输入!") ; } } catch(E
42、xception e1) { e1.printStackTrace(); } }} public static void main(String args[]){ Login app=new Login(); app.jiemian(); } } 向数据库添加新学生信息: class DataBase{ // DataBase类 public static Connection getConnection()throws SQLException,java.lang.ClassNotFoun
43、dException{ //建立当地数据库连接,编码规则转换为正常录入汉字) String url= "jdbc:mysql://localhost:3306/studentmanagement?useUnicode=true&characterEncoding=GBK"; Class.forName("com.mysql.jdbc.Driver"); String userName="root"; Connection con=DriverManager.getConnection(url, userName, ""); return con; } pub
44、lic void Add(String xh,String xm,String xb,String bj,String jg,String mm) throws SQLException { //为学籍管理系统添加新统计 try { Statement DataBaseCreate = null; Connection con=DataBaseCreate.getConnection(); Statement s; s = con.createStatement( ResultSet.T
45、YPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet r=s.executeQuery("select * from 学籍信息表 where 学号='"+xh+"'"); r.last(); if(r.getRow()==1) { JOptionPane.showMessageDialog( null ,"该学号学生信息已存在");}
46、 Else if(xh.equals("")){ //判定新输入学号是否为空 JOptionPane.showMessageDialog( null ,"学号不能为空");} else{ s.executeUpdate(" insert into 学籍信息表 values ('"+xh+"','"+xm+"','"+xb+"','"+ bj+"','"+jg+"','"+mm+"')"); s.close();c.close(); JOptionP
47、ane.showMessageDialog( null ,""+"学号:"+xh+"
"+"姓名:"+xm+"
" +"性别:"+xb+"
"+"班级号:"+bj+"
" +"籍贯:"+jg+"
"
+"登录密码:"+mm+"
学生统计添加成功!" ) ; }
}
catch (ClassNotFoundException e)
{JOptionPane.showM
48、essageDialog( null , "数据添加异常!" ) ;} } public void DisplayAll(ResultSet r){ JFrame m=new JFrame("显示全部学生信息"); m.setBounds(60,70,700,600); m.setVisible(true); JTextArea aa=new JTextArea(); aa.setBounds(0,0,700,600); Container c
49、1=m.getContentPane(); c1.setLayout(null); c1.add(aa); try{ r.last(); aa.append("\t学号"+"\t"+" 姓名"+"\t"+"性别"+"\t"+"班级"+"\t"+"籍贯"+"\n"); r.beforeFirst(); while(r.next()) { aa.append("第"+r.getRow()+"行统计: "); aa.append(r.getString("学号")); aa.append("\t"+r.getString("姓名")); aa.append("\t"+r.getString("性别")); aa.append("\t"+r.getString("班级")); aa.append("\t"+r.getString("籍贯")+"\n"); } } catch(Exception e) { e.printStackTrace();} } public void DisplayOne(String str22) throws Exception






