JAVA+JDBC+SQL server实现小型学生信息管理系统
根据所学JAVA以及数据库知识,实现符合要求简单的学生信息管理系统
一、在SQL server中建立表和视图
(1)首先创建数据库--“教务系统”;
(2)在SQL Server 2008中创建关系数据模型(即表结构),共设计6个表分别为管理员,教师表,学生表,班级表,课程表和成绩表;以及设计4个视图分别为班级表1,成绩表1,课程表1,课程表2。
(视图:视图是为了满足某种查询而建立的一个对象。视图适合于多表连接浏览时使用,不适合增、删、改,存储过程适合于使用较频繁的SQL语句,这样可以提高执行效率! 一个视图可以对应一个基本表,也可以对应多个基本表(多表字段名称不能有重复)。)
create database 教务系统; --创建一个数据库 use 教务系统;
--使用这个数据库,在这个数据库下创建表
create table 管理员( --管理员表
管理员号 char(10) ,
登录密码 char(20));
create table 教师表( --教师表
教师号 char(20) primary key, --设置主键
姓名 char(20),
性别 char(2),
学历 char(20),
职称 char(20),
所属学院 char(20),
登录密码 char(20));
create table 班级表( --班级表
班级号 char(10) primary key, --设置主键
班级名称 char(20),
所属学院 char(20),
班级人数 smallint,
班主任 char(20));
create table 学生表( --学生表
学号 char(10) not null primary key, --设置主键
姓名 char(20) not null,
性别 char(2),
年龄 smallint, --存储两个字节的整数
班级号 char(10),
foreign key(班级号) references 班级表(班级号), --外码,一个学生的班级号,必须来源于另一个表(班级表)中的“班级主键(即班级号)”字段。
密码 char(20));
create table 课程表( --课程表
课程号 char(20) primary key, --设置主键
课程名 char(20) ,
教师号 char(20),
foreign key(教师号) references 教师表(教师号)); --外码,一个教师的教师号,必须来源于另一个表(教师表)中的“教师主键(即教师号)”字段。
create table 成绩表( --成绩表
学号 char(10),
课程号 char(20),
成绩 smallint,
primary key(学号,课程号), --学号和课程号联合做主键,即当一个字段无法确定唯一性的时候,需要其他字段来一起形成唯一性。用来组成唯一性的字段
foreign key(学号) references 学生表(学号), --外码,一个学生的学生号,必须来源于另一个表(学生表)中的“学生主键(即学生号)”字段。
foreign key(课程号) references 课程表(课程号)); --外码,一节课程的课程号,必须来源于另一个表(课程表)中的“课程主键(即课程号)”字段。
go create view 班级表1 --创建学生班级视图,要求查询所有学生的学号、班级号、班级名称、所属学院、班级人数及班主任 as select 学生表.学号,班级表.班级号,班级表.班级名称,班级表.所属学院,班级表.班级人数,班级表.班主任 from 学生表,班级表 where 学生表.班级号=班级表.班级号; go create view 成绩表1 --创建学生成绩视图,要求查询所有学生的学号、姓名、课程号、课程名、教师姓名及成绩 as select 成绩表.学号,学生表.姓名,成绩表.课程号,课程表.课程名,教师表.姓名,成绩表.成绩 from 成绩表,学生表,课程表,教师表 where 成绩表.学号=学生表.学号 and 成绩表.课程号=课程表.课程号 and 课程表.教师号=教师表.教师号; go create view 课程表1 --创建学生课程表视图,要求查询所有学生课程号、课程名、教师号及教师姓名 as select 成绩表.课程号,课程表.课程名,课程表.教师号,教师表.姓名 from 成绩表,课程表,教师表 where 成绩表.课程号=课程表.课程号 and 课程表.教师号=教师表.教师号; go create view 课程表2 --创建学生课程表视图,要求查询所有学生学号、课程号、课程名、教师号及教师姓名 as select 成绩表.学号,成绩表.课程号,课程表.课程名,课程表.教师号,教师表.姓名 from 成绩表,课程表,教师表 where 成绩表.课程号=课程表.课程号 and 课程表.教师号=教师表.教师号; go create view 学生信息表 --创建学生信息视图,要求查询所有学生学号、姓名、性别、年龄、班级号、班级名称、课程号、课程名、成绩及教师号 as select 学生表.学号,学生表.姓名,学生表.性别,学生表.年龄,学生表.班级号,班级表.班级名称,成绩表.课程号,课程表.课程名,成绩表.成绩,课程表.教师号 from 学生表,班级表,成绩表,课程表 where 学生表.班级号=班级表.班级号 and 学生表.学号=成绩表.学号 and 课程表.课程号=成绩表.课程号;
(3)向创建好的表中填入数据
表
管理员表
教师表
学生表
班级表
课程表
成绩表
视图
班级表1
成绩表1
课程表1
课程表2
学生信息表1
二、JAVA的实现
(1)用jdbc连接数据库
数据库中所需要的表和视图都已经建立好了要开始用java代码来创建页面,实现功能了,但是在这之前,要用jdbc来实现将eclipse和数据库连接,以达到系统实现后能用前台操作来控制后台数据库。(一定记得将下载好的JDBC导入包内)
package xueshengguanlixitong;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
public class LJSJK {
public static void main (String args[]) {
Connection conn;//指的是数据库连接对象
Statement stmt;//一个接口,提供了向数据库发送执行语句和获取结果的方法
String url = "jdbc:sqlserver://localhost:1433;DatabaseName=教务系统;";
try { // 连接数据库
conn = DriverManager.getConnection(url, "java", "654321");//****是自己的密码
// 建立Statement对象
stmt = conn.createStatement(); // /**
// * Statement createStatement() 创建一个 Statement 对象来将 SQL 语句发送到数据库。
System.out.println("数据库连接成功"); }
catch (SQLException e) {
e.printStackTrace();
System.out.println("数据库连接失败"); } } }
(2)建立登录界面
先制作最简单的登录界面,帐号密码登录与注册(按钮未写入功能),
(3)实现登录按钮的功能
主要进行两种功能:一.判断帐号密码是否正确
A.帐号密码错误时,给错误提示框
B.帐号密码正确时,给正确提示框
二.帐号密码为空时,给错误提示框(确保引入SQL server)
(2)(3)整合代码
package xueshengguanlixitong;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
public class Main {
static final String JDBC_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; //连接数据库
static final String DB_URL = "jdbc:sqlserver://localhost:1433;DatabaseName=教务系统"; //database为连接数据库中数据库的名字
static final String USER = "java";//连接用的账户名 static final String PASS = "321";//密码
private static void login(){//构造函数
JFrame jf=new JFrame("系统学生管理系统登录界面");//登录主界面,用JFrame是java里面的一个类,具体说是一个窗体类。
jf.setSize(350, 200);
JPanel jp=new JPanel();//制作界面,JPanel:Java图形用户界面(GUI)工具包swing中的面板容器类,按钮、文本框等都可以放在这个容器中。JPanel面板本身是不能作为窗口进行显示,必须依赖于JFrame容器等进行显示
jf.add(jp); jp.setLayout(null); JLabel acc=new JLabel("帐号");//帐号,JLabel标签 JLabel pass=new JLabel("密码");//密码,标签Label
jp.add(pass); jp.add(acc); acc.setBounds(50,20,80,25);//setBounds(x,y,width,height):x:组件在容器X轴上的起点;y:组件在容器Y轴上的起点;width:组件的长度;height:组件的高度。
pass.setBounds(50,50,80,25);//setBounds(x,y,width,height):x:组件在容器X轴上的起点;y:组件在容器Y轴上的起点;width:组件的长度;height:组件的高度。 JTextField text1=new JTextField();//帐号输入
text1.setBounds(110, 20, 165, 25); jp.add(text1); JPasswordField text2=new JPasswordField();//密码输入 text2.setBounds(110, 50, 165, 25); jp.add(text2);
JButton loginButton=new JButton("登录");//登录按钮 loginButton.setBounds(120, 100, 80, 25); jp.add(loginButton); JButton regButton=new JButton("注册");//注册按钮
regButton.setBounds(220, 100, 80, 25); jp.add(regButton); jf.setVisible(true); loginButton.addActionListener(new ActionListener() {//放在按钮触发来实现,loginButton是设置的登录按钮的名字,登录所要完成的功能就会写在这个函数里面
private int ERROR_MESSAGE; public void actionPerformed(ActionEvent e) {//写完触发框架,就要在里面添加触发后所需要的功能函数框架 String s1=text1.getText().toString();//读取帐号框和密码框的内容
String s2=new String(text2.getPassword());//读取帐号框和密码框的内容 Connection c=null; PreparedStatement stmt=null; try {
Class.forName(JDBC_DRIVER); c = DriverManager.getConnection(DB_URL,USER,PASS);////连接数据库 String sql1="SELECT * FROM 管理员 where 管理员号=? and 登录密码=?";//连接数据库,可以实现查询的功能,只需要把帐号和密码的信息放进数据库里面的表,然后在代码中实现一个在表中查询的功能,即可实现判断正确
stmt=c.prepareStatement(sql1);//prepareStatement会先初始化SQL,先把这个SQL提交到数据库中进行预处理,多次使用可提高效率。 stmt.setString(1, s1);//第一个参数是该参数在语句中的索引。参数标记具有从 1 开始的编号。 通常指的是第一个“?” 第二个参数是要对第一个参数设置的值。 stmt.setString(2, s2);
ResultSet rs = stmt.executeQuery();////查询返回的结果集 if(s1.length()!=0&&s2.length()!=0) { if(rs.next()) { JOptionPane.showMessageDialog(null, "登陆成功");//显示信息对话框 }
else{ JOptionPane.showMessageDialog(null, "帐号或密码有误", "错误", ERROR_MESSAGE);//显示信息对话框 } }else if(s1.length()==0||s2.length()==0) {
JOptionPane.showMessageDialog(null, "请输入帐号或密码", "错误", ERROR_MESSAGE);//显示信息对话框 } rs.close(); stmt.close(); c.close(); } catch ( Exception e1 ) { System.err.println( e1.getClass().getName() + ": " + e1.getMessage() ); System.exit(0); } } }); } public static void main(String[] args) {//在主函数中实现 login(); } }
(4)用java连接数据库显示
package xueshengguanlixitong;
import java.sql.*;
import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class Manage {//构造函数
static final String JDBC_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; //连接数据库
static final String DB_URL = "jdbc:sqlserver://localhost:1433;DatabaseName=教务系统"; //database为连接数据库中数据库的名字
static final String USER = "java";//连接用的账户名 static final String PASS = "321";//密码 static Vector rowData;//rowData用来存放行数据