1、目录 一、需求分析11.1课程设计目的11.2课程设计要求11.3选题与操作流程11.4开发环境与开发平台2二、总体设计22.1总体设计概念22.2系统功能22.3系统架构32.4 模块划分3三、 详细设计43.1 SQL数据库表43.2程序系统设计图:53.3主要的类及类间关系:5四、 系统实现编码及运行结果64.1登陆界面:64.2管理员权限:74.3学生权限:134.4核心代码:14五、结论与总结295.1课程设计结论295.2课程设计总结与体会29 一、需求分析1.1课程设计目的a) 掌握面向对象程序设计基本要素(封装、继承、多态)b) 掌握JAVA语言常用类包及其常用方法和JAVA语
2、言基本语法c) 掌握基于AWT的图形用户界面设计i. 常用标准控件的使用,如标签、按钮、菜单、文本框、单选按钮、滚动条等。ii. 事件处理机制d) 掌握布局、对话框的使用e) 掌握发布JAVA应用程序1.2课程设计要求1. 学生学籍管理系统的需求分析。2. 学生学籍管理系统的总体设计,列出主要的类和类间关系。3. 列出具体的实现代码。4. 写出程序的实现细节,主要的功能界面,实现说明。5. 写出总结和评价1.3选题与操作流程在一些学校等机构,随着学生数量的不断增加,学生的信息不断增多,人工管理信息的难度也越来越大。而且效率也是很低的。所以如何自动高效地管理信息是这些年来许多人所研究的。学生学籍
3、管理系统,以SQL数据库作为后台信息存储,Java作为前台系统的语言。提供了对学生信息添加,查询,修改,删除的功能。实现了最基本的信息管理。1.4开发环境与开发平台操作系统:Windows 8数据库: SQL 2012Java开发工具: My Eclipse2014JDK: JDK1.7二、总体设计2.1总体设计概念学生学籍管理系统,可用于学校等机构的学生信息管理,查询,更新与维护,使用方便,易用性强,图形界面清晰明了。该软件用java语言编写,用SQLServer2012数据库作为后台的数据库进行信息的存储,用SQL语句完成添加,查询,修改,删除的操作。用JDBC驱动实现前台Java与后台S
4、QL数据库的连接。Java语言跨平台性强,可以在Windows等系统下使用,方便简单,安全性好。2.2系统功能该系统实现的大致功能:1 登录界面。该登录分为学生登录和管理员登录,用于权限分配。用户通过验证通过后方可进入管理系统。管理员登录后可以对学生信息进行增加、修改、删除、查询。一定程度上保证了信息安全性,防止他人未经允许篡改学生信息。学生登录后可以进行查询和修改登录密码的功能。2 查询学生信息。可以选择由用户选择“显示系统中当前的所有学生信息”。也可以选择按照“某一个学号查询该学号的学生信息”。查询到的信息会在窗口中依次显示出来。3 添加学生信息。可以按照图形的界面的显示依次输入新学生的“
5、学号”,“姓名”,“性别”,“专业”,“家庭住址”,“籍贯”,“入学时间”。完成新纪录的添加。以及添加学生的各科成绩。4 修改学生信息。可以选择按照“学号”找到该学生的学生信息并输入要修改的属性,并输入新的数据。完成对学生记录的修改。5 删除学生记录。可以根据输入的“学号”进行删除的操作。6 修改密码。登录当前系统的用户可以通过此功能实现登录密码的修改。2.3系统架构界面使用Java应用程序用户界面的开发工具包Swing进行窗体界面的布局,以及实现部分窗口事件的相应。后台使用SQL2012数据库进行数据的存储。2.4 模块划分该系统可以分为两大模块1)管理员:主要实现对学生信息的管理功能。具体
6、功能如下:添加功能: 添加学生基本信息和学生成绩。修改功能: 对学生的基本信息进行修改。删除功能: 删除某个学号学生的基本信息。查询功能: 可以查询某个学生的基本信息,也可以将所有学生的信息和成绩以表格的形式显示出来。修改密码: 管理员可以将自己的登录密码进行修改。退出系统: 点击后,将会退出该系统。2)学生:主要实现查询功能。具体功能如下:查询成绩:点击该选项,就会将当前登陆的学生成绩显示出来。修改密码:登录后,学生可以根据需要对自己的登录密码进行修改。退出系统: 点击后,将会退出该系统。三、 详细设计3.1 SQL数据库表 该系统数据库中有三张表分别是users(管理员)、student(
7、学生基本信息)、grade(学生成绩)Users表 Student表 Grade表 3.2程序系统设计图:修 改登录增 加学生学籍管理系统 删 除登录验证证 查 询 失败 管理员成功修改密码 退出 学生成功退出修改密码查询成绩退 出 Database数据库连接 Add 3.3主要的类及类间关系:ChangePassword extendsStuBean数据库操作 Modify ManagerLogin Delete Stu Select :SelectGradeChangePassword 四、 系统实现编码及运行结果4.1登陆界面: 登录界面选择用户类型,输入“用户名”和“密码”,点击“登录
8、”,通过验证则进入主功能菜单。如果输入错误则会有相应的警告!用户名或密码不正确时:登录成功后会进入相应的主界面。4.2 管理员权限: 4.2.1添加学生信息 当管理员点击添加学生信息时出现此界面。当添加的学生在数据库中已经存在时出现此提示信息: 4.2.2添加学生成绩:当管理员点击添加学生成绩时出现此界面。当添加的学生的成绩在数据库中已经存在时出现此提示信息:添加成功后出现此提示信息:4.2.3修改学生信息:管理员输入要修改的学生学号,点击查询,该学生信息就会出现,此时修改按钮可用修改后,点击“修改”,出现确认对话框点击“是”之后,出现提示消息 4.2.4删除学生信息:管理员输入要删除的学生学
9、号,点击查询,该学生信息就会出现,此时“删除”按钮可用管理员点击“删除”后,出现确认对话框点击“是”之后学生信息被删除。4.2.5查询单个学生信息: 点击查询后,该学生信息将会被显示出来。4.2.6 查询所有学生信息:4.2.7查询所有学生成绩:4.2.8修改密码: 原密码不正确时,提示消息:原密码正确,但两次新密码不相同时,提示消息:成功修改后,提示消息:4.3学生权限: 4.3.1学生成绩查询: 4.3.2学生修改密码: 界面同管理员修改密码4.4核心代码: 数据库Database:package 学生学籍管理系统;import java.sql.*;public class Databa
10、se private Statement stmt=null;ResultSet rs=null;private Connection conn=null;String sql;String strurl=jdbc:sqlserver:/localhost:1433;DatabaseName=student; public Database() /* * 打开数据库连接 */ public void OpenConn()throws Exception try Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver); conn=D
11、riverManager.getConnection(strurl,sa,201314); catch(Exception e) System.err.println(OpenConn:+e.getMessage(); /* * 执行SQL语句,返回数据集rs */ public ResultSet executeQuery(String sql) stmt =null; rs=null; try stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); rs=stmt.ex
12、ecuteQuery(sql); catch(SQLException e) System.err.println(executeQuery:+e.getMessage(); return rs; /* * 执行SQL语句 */ public void executeUpdate(String sql) stmt =null; rs=null; try stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); stmt.executeQuery(sql); mit(); ca
13、tch(SQLException e) System.err.println(executeUpdate:+e.getMessage(); public void closeStmt() try stmt.close(); catch(SQLException e) System.err.println(closeStmt:+e.getMessage(); /* * 关闭数据库连接 */ public void closeConn() try conn.close(); catch(SQLException e) System.err.println(aq.closeConn:+e.getMe
14、ssage(); 数据库操作类StuBean: package 学生学籍管理系统;import java.sql.*;import javax.swing.*;public class StuBean String sql; ResultSet rs=null; String Name; String Password; String Type; String sNum; String sName; String sSex; String sMajor; String sHome; String sBirth; String sYear; String GaoDeng; String LiSa
15、n; String ShuJu; String GaiLv; String Java; String English; /* * 验证登陆 */ public boolean login(String name,String password,String type) Database DB=new Database(); this.sNum=name; this.Name=name; this.Password=password; this.Type=type; if(Password=null|Password.equals() JOptionPane.showMessageDialog(
16、null, 请输入正确的用户名和密码,错误,JOptionPane.ERROR_MESSAGE); return false; else if(Type.equals(学生) sql=select * from student where snum=+sNum+and password=+Password+; else if(Type.equals(管理员) sql=select * from users where name=+Name+and password=+Password+; try DB.OpenConn(); rs=DB.executeQuery(sql); if(rs.nex
17、t() return true; else return false; catch(Exception e) return false; finally DB.closeStmt(); DB.closeConn(); /* * 修改密码 */ public void ChangePassword(String name,String password,String type) Database DB=new Database(); this.sNum=name; this.Name=name; this.Password=password; this.Type=type; if(Passwor
18、d=null|Password.equals() JOptionPane.showMessageDialog(null, 请输入新密码,错误,JOptionPane.ERROR_MESSAGE); else if(Type.equals(学生) sql=update student set password=+Password+ where snum =+sNum+; else if(Type.equals(管理员) sql=update users set password=+Password+ where name =+Name+; try DB.OpenConn(); DB.execut
19、eUpdate(sql); JOptionPane.showMessageDialog(null,成功修改密码!); catch(Exception e) System.out.println(e); JOptionPane.showMessageDialog(null,修改失败!,错误,JOptionPane.ERROR_MESSAGE); finally DB.closeStmt(); DB.closeConn(); /* * 添加学生信息 */ public void stuAdd(String num,String name,String sex,String major,String
20、 home,String birth,String year) Database DB=new Database(); this.sNum=num; this.sName=name; this.sSex=sex; this.sMajor=major; this.sHome=home; this.sBirth=birth; this.sYear=year; if(sNum=null|sNum.equals()|sName=null|sName.equals() JOptionPane.showMessageDialog(null, 请输入学号和姓名,错误,JOptionPane.ERROR_ME
21、SSAGE); else sql=insert into student(snum,sname,ssex,smajor,shome,sbirth,syear) values + (+sNum+,+sName+,+sSex+,+sMajor+,+sHome+,+sBirth+,+sYear+) ; try DB.OpenConn(); DB.executeUpdate(sql); JOptionPane.showMessageDialog(null,成功添加一条新的纪录!); catch(Exception e) System.out.println(e); JOptionPane.showMe
22、ssageDialog(null,保存失败!,错误,JOptionPane.ERROR_MESSAGE); finally DB.closeStmt(); DB.closeConn(); /* * */ public void GradeAdd(String num,String name,String gaodeng,String lisan,String shuju ,String gailv,String java ,String english ) Database DB=new Database(); this.sNum=num; this.sName=name; this.GaoD
23、eng=gaodeng; this.LiSan=lisan; this.ShuJu=shuju; this.GaiLv=gailv; this.Java=java; this.English=english; if(sNum=null|sName=null) JOptionPane.showMessageDialog(null, 请输入学号和姓名,错误,JOptionPane.ERROR_MESSAGE); else sql=insert into grade(snum,sname,高等数学,离散数学,数据结构,概率论,Java,大学英语) values + (+sNum+,+sName+,+
24、GaoDeng+,+LiSan+,+ShuJu+,+GaiLv+,+Java+,+English+) ; try DB.OpenConn(); DB.executeUpdate(sql); JOptionPane.showMessageDialog(null,成功添加一条新的纪录!); catch(Exception e) System.out.println(e); JOptionPane.showMessageDialog(null,保存失败!,错误,JOptionPane.ERROR_MESSAGE); finally DB.closeStmt(); DB.closeConn(); /*
25、 * 修改学生信息 */ public void stuModify(String num,String name,String sex,String major,String home,String birth,String year) Database DB=new Database(); this.sNum=num; this.sName=name; this.sSex=sex; this.sMajor=major; this.sHome=home; this.sBirth=birth; this.sYear=year; sql=update student set sname=+sNa
26、me+,ssex=+sSex+,smajor=+sMajor+,shome=+sHome+,sbirth=+sBirth+,syear=+sYear+ where snum=+Integer.parseInt(sNum)+; try DB.OpenConn(); DB.executeUpdate(sql); JOptionPane.showMessageDialog(null,成功修改一条新的纪录!); catch(Exception e) System.out.println(e); JOptionPane.showMessageDialog(null,更新失败!,错误,JOptionPan
27、e.ERROR_MESSAGE); finally DB.closeStmt(); DB.closeConn(); /* * 删除学生信息 */ public void stuDelete(String num) Database DB=new Database(); this.sNum=num; sql=delete from student where snum=+Integer.parseInt(sNum)+; try DB.OpenConn(); DB.executeUpdate(sql); JOptionPane.showMessageDialog(null,成功删除一条纪录!);c
28、atch(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(); this.sNum=num; String s=new String6; if(sNum=null|sNum.equals() s=nul
29、l; JOptionPane.showMessageDialog(null, 请输入学号,错误,JOptionPane.ERROR_MESSAGE); else sql=select * from student where snum=+Integer.parseInt(sNum)+; try DB.OpenConn(); rs=DB.executeQuery(sql); if(rs.next() s0=rs.getString(sname); s1=rs.getString(ssex); s2=rs.getString(smajor); s3=rs.getString(shome); s4=
30、rs.getString(sbirth); s5=rs.getString(syear); else s=null; JOptionPane.showMessageDialog(null, 您查询的学生信息不存在,错误,JOptionPane.ERROR_MESSAGE); catch(Exception e) finally DB.closeStmt(); DB.closeConn(); return s; /* * 查询成绩 */ public String stuSelectGrade(String num) Database DB=new Database(); this.sNum=n
31、um; String s=new String7; sql=select * from grade where snum=+Integer.parseInt(sNum)+; try DB.OpenConn(); rs=DB.executeQuery(sql); if(rs.next() s0=rs.getString(sname); s1=rs.getString(高等数学); s2=rs.getString(离散数学); s3=rs.getString(数据结构); s4=rs.getString(概率论); s5=rs.getString(java); s6=rs.getString(大学
32、英语); else s=null; catch(Exception e) finally DB.closeStmt(); DB.closeConn(); return s; 登陆类Login: package 学生学籍管理系统;import javax.swing.*;import java.awt.*;import java.awt.event.*;public class Login extends JFrame implements ActionListenerstatic String type;JFrame m=new JFrame(您好,请您先登录!);JTextField t1=
33、new JTextField(null,5); JPasswordField t2=new JPasswordField(null,5); JPasswordField t3=new JPasswordField(null,5);JRadioButton b1=new JRadioButton(学生);JRadioButton b2=new JRadioButton(管理员);JLabel l1=new JLabel(用户名:); JLabel l2=new JLabel(密码:); Label l3=new Label(确认密码:); JLabel jpic; JLabel l=new JL
34、abel(欢迎登陆学籍管理系统); JButton bt1=new JButton(登陆); JButton bt2=new JButton(退出); public Login() Container n=m.getContentPane(); n.setLayout(null); l.setFont(new Font(TimesRoman,Font.BOLD,24); l.setBounds(120,20,300,30); l1.setBounds(193,100,75,30); l1.setFont(new Font(TimesRoman,Font.BOLD,16); t1.setBoun
35、ds(250,100,150,30); l2.setBounds(193,140,75,30); l2.setFont(new Font(TimesRoman,Font.BOLD,16); t2.setBounds(250,140,150,30); bt1.setBounds(250,180,60,30); bt2.setBounds(340,180,60,30); jpic=new JLabel(new ImageIcon(image/denglu.jpg); jpic.setBounds(68,90,120,100); n.add(l);n.add(l1);n.add(t1); n.add(l2); n.add(t2);n.add(l3);n.add(t3); n.add(bt1);n.add(bt2);n.add(jpic); b1.setBounds(250,70,70,30); b2.setBounds(340,70,70,30); ButtonGroup rg=new ButtonGroup(); n.add(b2); rg.add(b2); n.add(b1); rg.add(b1); bt1.addActionListener(this); bt2.addActionListener(this); m.setSize(500,400);