毕业论文学生信息管理系统开发课程设计.doc
广东海洋大学本科生课程设计学生信息管理系统开发文档目 录1. 学生信息管理系统概述11.1 研究背景1.2 开发意义2. 系统需求分析2.1 开发环境和软件2.2 系统设计与功能分析3 数据库设计3.1 系统概念结构设计3.2 系统逻辑结构设计3.3 数据库实现3.3.1 数据库关系图3.3.2 SQL语句实现4. 系统模块详细设计4.1用户登录模块4.2 各用户操作模块4.2.1 管理员操作模块4.2.2 教师操作模块4.2.3 学生操作模块5. 系统运行与测试5.1 管理员登录5.2 教师登录5.3 学生登录6课程设计总结7附录(代码)学生信息管理系统信管1081班,200811622124,吴晓阳指导教师:郑赞红 1. 学生信息管理系统概述1.1 研究背景学生信息管理系统是学校管理的重要工具,是学校不可或缺的部分。 随着在校大学生人数的不断增加,教务系统的数量也不断的上涨,。学校工作繁杂、资料众多,人工管理信息的难度也越来越大,显然是不能满足实际的需要,效率也是很低的。并且这种传统的方式存在着很多的弊端,如:保密性差、查询不便、效率低,很难维护和更新等。然而,本系统针对以上缺点能够极大地提高学生信息管理的效率,也是科学化、正规化的管理,与世界接轨的重要条件。所以如何自动高效地管理信息是这些年来许多人所研究的。 1.2 开发意义随着这些年电脑计算机的速度质的提高,成本的下降,IT互联网大众趋势的发展。我们使用电脑的高效率才处理数据信息成为可能。 学生学籍管理系统的出现,正是管理人员与信息数据,计算机的进入互动时代的体现。友好的人机交互模式,清晰简明的图形界面,高效安全的操作使得我们对成千上万的信息的管理得心应手。通过这个系统,可以做到信息的规范管理,科学统计和快速的查询,从而减少管理方面的工作量毋庸置疑,切实有效地把计算机管理引入学校教务管理中,对于促进学校管理制度,提高学校教学质量与办学水平有着显著意义2. 系统需求分析 2.1 开发环境和软件(1) 操作系统:Windows 7 (2) 数据库软件:SQL Server 2005 (3) Java开发工具:Eclipse 2.2 系统设计与功能分析 学生信息管理系统,可用于学校等机构的学生信息管理,查询,更新与维护,使用方便,易用性强,图形界面清晰明了。该软件用java语言编写,用SQLServer2005数据库作为后台的数据库进行信息的存储,用SQL语句完成学生学籍信息的添加,查询,修改,删除的操作以及成绩的录入,修改,删除等。用ODBC驱动实现前台Java与后台SQL数据库的连接。Java语言跨平台性强,可以在windows,linux,ubuntu等系统下使用,方便简单,安全性好。SQLServer2005数据库高效安全,两者结合可相互利用各自的优势。该系统实现的大致功能:1 用户登陆界面。该界面可以选择使用者的身份,“管理员,教师,学生”。不同的身份有不同的操作界面和功能权限。ID号和密码输入正确即可登录。学生管理界面。提供了学生学籍信息的查询,相关科目的成绩查询和排名,修改登录密码等功能。2 教师管理界面。提供了对学生学籍信息的查询,添加,修改,删除;学生成绩的录入,修改,删除,查询班级排名。修改密码等功能。3 管理员管理界面。拥有最高的权限。允许添加教师信息和课程信息等。4 登录的用户信息分别存储在SQL数据库的“管理员信息表”, “教师信息表”, “学籍信息表”中,如果用户信息不存在则三张表中,将会无权利登录本管理系统。保证了本学生管理系统的安全性。3 数据库设计3.1 系统概念结构设计 教师ID课程号教师教师姓名课程名称课程登录密码教师ID学号课程号成绩姓名成绩学号管理员ID性别学籍管理员籍贯登录密码班级号班级籍贯登录密码总人数班级号班级名称实体属性表:实体属性教师教师ID,教师姓名,登录密码课程课程号,课程名称,教师ID管理员管理员ID,登录密码班级班级号,班级名称,总人数学籍学号,姓名,性别,班级号,籍贯,登录密码成绩学号,课程号,成绩3.2 系统逻辑结构设计教师信息表:字段名 类型空值约束条件教师ID varchar(8)not null主键教师姓名varchar(8)not null登录密码varchar(8)not null课程信息表:字段名 类型空值约束条件课程号 varchar(8)not null主键课程名称varchar(12)not null教师IDvarchar(8)not null外键班级信息表:字段名 类型空值约束条件班级号 varchar(8)not null主键班级名称varchar(8)not null所属学院varchar(6)班级人数nchar(4)管理员信息表:字段名 类型空值约束条件管理员ID varchar(10)not null主键登录密码varchar(10)not null成绩信息表:字段名 类型空值约束条件班级号 varchar(15)not null主键,外键班级名称varchar(8)not null主键,外键所属学院smallintnot null学籍信息表:字段名 类型空值约束条件学号int not null主键姓名varchar(30)not null性别char(2)班级号varchar(30)not null 外键籍贯char(10) 登录密码moneynot null3.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,课程名称varchar(12) not null,教师ID varchar(8) not nullforeign 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,姓名varchar(8) not null ,性别varchar(4) ,班级号varchar(8) not null ,籍贯varchar(5) ,登录密码varchar(6) not nullforeign key (班级号) references 班级信息表(班级号)(5)成绩信息表创建:create table 成绩信息表(学号varchar(15),课程号varchar(8),成绩smallint primary key(学号,课程号)foreign key (学号) references 学籍信息表(学号),foreign key (课程号) references 课程信息表(课程号))(6)管理员信息表创建:create table 课程信息表(管理员ID varchar(8) primary key,登录密码 varchar(12) not null)视图的创建:(1)“教师课程详细信息”视图创建:create view 教师课程详细信息asSELECT 教师信息表.教师ID,教师信息表.教师姓名,课程信息表.课程号,课程信息表.课程名称,教师信息表.登录密码FROM 教师信息表JOIN 课程信息表 ON 教师信息表.教师ID =课程信息表.教师ID(2) “学生成绩信息”视图创建:create view 学生成绩信息asSELECT 学籍信息表.学号,学籍信息表.姓名,学籍信息表.性别,课程信息表.课程名称,成绩信息表.成绩FROM 成绩信息表JOIN 学籍信息表 ON 成绩信息表.学号 = 学籍信息表.学号JOIN 班级信息表 ON 班级信息表.班级号 = 学籍信息表.班级号JOIN 课程信息表 ON 课程信息表.课程号 = 成绩信息表.课程号存储过程创建:(1)“单科成绩排名”创建: create proc dbo.单科成绩排名kechenname char(8),classname char(8)asselect 学籍信息表.学号,姓名,成绩 from 成绩信息表 join 课程信息表on 课程信息表.课程号=成绩信息表.课程号 join 学籍信息表on 学籍信息表.学号=成绩信息表.学号join 班级信息表on 班级信息表.班级号=学籍信息表.班级号 where 课程名称=kechenname and 班级名称=classname order by 成绩desc(2)“全班排名”创建:create proc dbo.全班排名class char(8)asselect 学籍信息表.学号,姓名, avg(成绩) as 平均分,sum(成绩) as 总分 from 成绩信息表 join 学籍信息表 on 成绩信息表.学号=学籍信息表.学号join 班级信息表 on 班级信息表.班级号=学籍信息表.班级号where 班级信息表.班级名称=classgroup by 学籍信息表.姓名,学籍信息表.学号 order by avg(成绩) desc,学籍信息表.学号4. 系统模块详细设计4.1 用户登录模块4.2 各用户操作模块4.2.1 管理员操作模块(图1)4.2.2 教师操作模块(图2) 图1 图24.2.3 学生操作模块 5. 系统运行与测试5.1 管理员登录 点击“管理员”按钮。输入正确的ID和密码。验证成功则可进入管理员管理界面。管理员ID号和登录密码存在数据库中的管理员信息表。表中存在的管理员才允许登录。(1)添加教师信息。在弹出的输入栏中输入正确的数据。 如果输入重复的信息则会弹出。 如果某项未填则弹出。 输入的数据会分别写进“教师信息表”和“课程信息表”中。 增加的教师信息,允许让更多的教师登录本系统进行管理操作!(2)修改教师信息 如果要修改的教师信息不存在,则 (3)删除信息修改 输入的教师信息不存在,则 (4)查询教师信息5.2 教师登录 在登录界面选择“教师”按钮,并输入正确的ID号和密码,即可登录成功!输入错误则会弹出提示! ID号输入正确,登录成功!进入教师管理的操作界面: (1)显示学生信息。 (2)添加学生信息 新添加的信息会保存在学籍信息表中!如果输入的信息已经存在,则显示 如果输入的数据正确,则 (3)修改学生信息,输入正确则显示! (4) 删除学生信息, (5)录入学生成绩 (6)修改学生成绩 (7) 删除学生成绩 (8)查询学生成绩 (9)所有成绩排名 (10)单科成绩排名(11)更改登录密码 修改成功后即可用新的密码进行登录!5.3 学生登录 输入正确的ID号和密码,即可正常登录!(1) 显示学生信息(2) 查询个人成绩 (3)单科成绩排名 (4)全班成绩排名(5)修改密码 修改密码后会更新学生学籍表里面的登录密码,下次就可以用新密码登录。点击 后,就可以安全退出学生管理系统了!6课程设计总结课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程. 本次课程设计虽然很辛苦,实在是受益匪浅。本来这门课的知识学的就不够扎实,本次课程设计,在设计过程中碰到了很多问题,刚开始要设计的时候,还真不知道从哪里下手但最终在图书、同学和老师的帮助下都得到了解决,让我学会了好多书本上没有的东西,通过本次课程设计我也能将课本上的知识融会贯通,起到了很好的辅助学习的效果,但是我发现我学到的知识比整整一个学期学到的都多。理论和实践的相结合是学习最有效的方法。在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。 通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。 7附录(代码)由于篇幅有限,所以只附上主要功能的代码:登陆界面与主功能界面:public class Sql extends 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 JRadioButton("管理员"); 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("密码:"); 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); 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 rg=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); 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("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+"' and 登录密码='"+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.setVisible(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);JButton 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,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("修改密码");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(); 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_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.addActionListener(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.addActionListener(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 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(Exception e1) e1.printStackTrace(); public static void main(String args) Sql app=new Sql(); app.jiemian(); 向数据库添加新的学生信息:class DataBase / DataBase类public void Add(String xh,String xm,String xb,String bj,String jg,String mm) throws SQLException /为学籍管理系统添加新记录 try Class.forName("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 学号='"+xh+"'"); r.last(); if(r.getRow()=1) JOptionPane.showMessageDialog( null ,"该学号的学生信息已存在"); Else if(xh.equals("") /判断新输入的学号是否为空 JOptionPane.showMessageDialog( null ,"学号不能为空"); else s.executeUpdate(" insert into 学籍信息表 values ('"+xh+"','"+xm+"','"+xb+"','"+ bj+"','"+jg+"','"+mm+"')"); s.close();c.close(); JOptionPane.showMessageDialog( null ,"<html>"+"学号:"+xh+"<br>"+"姓名:"+xm+"<br>" +"性别:"+xb+"<br>"+"班级号:"+bj+"<br>" +"籍贯:"+jg+"<br>" +"登录密码:"+mm+"<br>学生记录添加成功!" ) ; catch (ClassNotFoundException e) JOptionPane.showMessageDialog( 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 c1=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 try Connection c=DriverManager.getConnection("jdbc:odbc:学生信息系统"); Statement s=c.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet r=s.executeQuery("select 学号 ,姓名,性别, 班级名称 as 班级,籍贯 from 学籍信息表 join 班级信息表 on 班级信息表.班级号=学籍信息表.班级号 where 学号='"+str22+"'"); /执行查询的SQL语句 r.last(); int cc=r.getRow(); if(cc=0) JOptionPane.showMessageDialog( null ,"未查询到相关信息!" ) ; elser.beforeFirst(); while(r.next() JOptionPane.showMessageDialog( null ,"<html>"+" 学号:"+r.getString("学号")+"<br>"+"姓名:"+r.getString("姓名")+"<br>"+"性别:"+r.getString("性别")+"<br>" +"班级:"+r.getString("班级")+"<br>"+"籍贯:"+r.getString("籍