相关文章推荐
闷骚的山楂  ·  c# - When using ...·  1 年前    · 
憨厚的松树  ·  python ...·  1 年前    · 
JAVA+JDBC+SQL server实现小型学生信息管理系统

JAVA+JDBC+SQL server实现小型学生信息管理系统

4 年前

根据所学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用来存放行数据