数据库课程设计(上)(学生成绩管理系统)

SQL Server数据库设计

Course表:
(1)设计
在这里插入图片描述
(2)数据
在这里插入图片描述
属性依次为:课程号、课程名、先修课课程号、学分
主键为课程号

Student表:
(1)设计
在这里插入图片描述
(2)数据
在这里插入图片描述
属性依次为:学号、姓名、性别、年龄、所在系系名
主键为学号

SC表:表示学生选课关系
(1)设计
在这里插入图片描述
(2)数据
在这里插入图片描述
属性依次为学号、课程号、分数
主键为学号、课程号

触发器:
1)在Student表上定义一个DELETE触发器,当删除一个学生记录时,自动删除SC表上这个学生的所有选课记录 。
2)在Course表上定义一个UPDA TE触发器,当更新一门课程的课程号时,自动修改SC表上这门课程的课程号 。
3) 在SC表上定义一个DELETE触发器,当删除一条选课记录时,若这条记录是这门课程的唯一被选记录,则同时删除Course表中的这门课程 。

数据库与java结合形成图形化界面。
以下为java程序:

完成数据库中数据的增删改查(Add、Del、Update、Sel)
我的数据库中只有三个表,所以完成这些功能需要12个类:

AddC

/*
AddC
*/
package sc;
import java.awt.*;
import javax.swing.*;
import java.sql.*;
import java.awt.event.*;

public class AddC extends JPanel implements ActionListener{
   
   
	JTextField 课程号,课程名,先修课课程号,学分;
	JButton 录入;
	
public AddC(){
   
   
	try {
   
   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());}
	catch(Exception e){
   
   System.err.println("不能设置外观:   "+e);}
	
	课程号=new JTextField(12);
	课程名=new JTextField(12);
	先修课课程号=new JTextField(12);
	学分=new JTextField(12);
	录入=new JButton("录入");
	录入.addActionListener(this);
	
	Box box1=Box.createHorizontalBox();//横放box
	Box box2=Box.createHorizontalBox();
	Box box3=Box.createHorizontalBox();
	Box box4=Box.createHorizontalBox();
	Box box5=Box.createHorizontalBox();
	Box box6=Box.createHorizontalBox();
	box1.add(new JLabel("课程号:"));
	box1.add(课程号);
	box2.add(new JLabel("课程名:"));
	box2.add(课程名);
	box3.add(new JLabel("先修课课程号:"));
	box3.add(先修课课程号);
	box4.add(new JLabel("学分:"));
	box4.add(学分);
	box6.add(录入);
	Box boxH=Box.createVerticalBox();//竖放box
	boxH.add(box1);
	boxH.add(box2);
	boxH.add(box3);
	boxH.add(box4);
	boxH.add(box5);
	boxH.add(box6);
	boxH.add(Box.createVerticalGlue());
	JPanel messPanel=new JPanel();
	messPanel.add(boxH);
	setLayout(new BorderLayout());
	add(messPanel,BorderLayout.CENTER);
	validate();
}
public void actionPerformed(ActionEvent c){
   
   
	Object obj=c.getSource();
	if(obj==录入){
   
   
		if(课程号.getText().equals("")||课程名.getText().equals("")||先修课课程号.getText().equals("")||学分.getText().equals("")){
   
   
			JOptionPane.showMessageDialog(this,"学生信息请填满再录入!" );
		}
		Statement stmt=null;
		ResultSet rs=null,rs1=null;
		String sql,sql1;
		    sql1="select * from Course where Cno='"+课程号.getText()+"'";
		    sql="insert into Course values('"+课程号.getText()+"','"+课程名.getText()+"','"+先修课课程号.getText()+"','"+学分.getText()+"')";
	   try{
   
   
		   Connection dbConn1=CONN();
			stmt=(Statement)dbConn1.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
			rs1=stmt.executeQuery(sql1);
			if(rs1.next()){
   
   JOptionPane.showMessageDialog(this,"该课号以存在,无法添加");}
			else{
   
   
			stmt.executeUpdate(sql);	
			JOptionPane.showMessageDialog(this,"添加成功");
			}		
			rs1.close();
			
			stmt.close();
	   }
	   catch(SQLException e){
   
   
		   System.out.print("SQL Exception occur.Message is:"+e.getMessage());
		   }
	}
}
public static Connection CONN(){
   
   
	   String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";   //加载JDBC驱动
	   String dbURL = "jdbc:sqlserver://主机名:1433; DatabaseName=数据库名";   //连接服务器和数据库test
	   String userName = "sa";   //默认用户名
	   String userPwd = "密码";   //密码
	   Connection dbConn=null;

	   try {
   
   
	   Class.forName(driverName);
	   dbConn = DriverManager.getConnection(dbURL, userName, userPwd);
	   System.out.println("Connection Successful!");   //如果连接成功 控制台输出Connection Successful!
	   } catch (Exception e) {
   
   
	   e.printStackTrace();
	   }
	   return dbConn;
}

}

AddS

/*
AddS
*/
package sc;
import java.awt.*;
import javax.swing.*;
import java.sql.*;
import java.awt.event.*;


public  class AddS extends JPanel implements ActionListener{
   
   
	JTextField 学号,姓名,性别,年龄,所在系系名;
	JButton 录入;
	
public AddS(){
   
   
	try {
   
   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());}
	catch(Exception e){
   
   System.err.println("不能设置外观:   "+e);}
	
	学号=new JTextField(12);
	姓名=new JTextField(12);
	性别=new JTextField(12);
	年龄=new JTextField(12);
	所在系系名=new JTextField(12);
	录入=new JButton("录入");
	录入.addActionListener(this);
	
	Box box1=Box.createHorizontalBox();//横放box
	Box box2=Box.createHorizontalBox();
	Box box3=Box.createHorizontalBox();
	Box box4=Box.createHorizontalBox();
	Box box5=Box.createHorizontalBox();
	Box box6=Box.createHorizontalBox();
	box1.add(new JLabel("学号:"/*,JLabel.CENTER*/));
	box1.add(学号);
	box2.add(new JLabel("姓名:"/*,JLabel.CENTER*/));
	box2.add(姓名);
	box3.add(new JLabel("性别:"/*,JLabel.CENTER*/));
	box3.add(性别);
	box4.add(new JLabel("年龄:"/*,JLabel.CENTER*/));
	box4.add(年龄);
	box5.add(new JLabel("所在系系名:"/*,JLabel.CENTER*/));
	box5.add(所在系系名);
	box6.add(录入);
	Box boxH=Box.createVerticalBox();//竖放box
	boxH.add(box1);
	boxH.add(box2);
	boxH.add(box3);
	boxH.add(box4);
	boxH.add(box5);
	boxH.add(box6);
	boxH.add(Box.createVerticalGlue());
	JPanel messPanel=new JPanel();
	messPanel.add(boxH);
	setLayout(new BorderLayout());
	add(messPanel,BorderLayout.CENTER);
	validate();
	}
public void actionPerformed(ActionEvent c){
   
   
	Object obj=c.getSource();
	if(obj==录入){
   
   
		if(学号.getText().equals("")||姓名.getText().equals("")||性别.getText().equals("")||年龄.getText().equals("")||所在系系名.getText().equals("")){
   
   
			JOptionPane.showMessageDialog(this,"学生信息请填满再录入!" );
		}
		Statement stmt=null;
		ResultSet rs1=null;
		String sql,sql1;
		    sql1="select * from Student where Sno='"+学号.getText()+"'";
		    sql="insert into Student values('"+学号.getText()+"','"+姓名.getText()+"','"+性别.getText()+"','"+年龄.getText()+"','"+所在系系名.getText()+"')";
	   try{
   
   
		   Connection dbConn1=CONN();
			stmt=(Statement)dbConn1.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
			rs1=stmt.executeQuery(sql1);
			if(rs1.next()){
   
   JOptionPane.showMessageDialog(this,"该学号已经存在,无法添加");}
			else{
   
   
			stmt.executeUpdate(sql);	
			JOptionPane.showMessageDialog(this,"添加成功");
			}		
			rs1.close();
			stmt.close();
	   }
	   catch(SQLException e){
   
   
		   System.out.print("SQL Exception occur.Message is:"+e.getMessage());
		   }
	}
}
public static Connection CONN(){
   
   
	   String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";   //加载JDBC驱动
	    String dbURL = "jdbc:sqlserver://主机名:1433; DatabaseName=数据库名";   //连接服务器和数据库test
	   String userName = "sa";   //默认用户名
	   String userPwd = "密码";   //密码
	   Connection dbConn=null;

	   try {
   
   
	   Class.forName(driverName);
	   dbConn = DriverManager.getConnection(dbURL, userName, userPwd);
	   System.out.println("Connection Successful!");   //如果连接成功 控制台输出Connection Successful!
	   } catch (Exception e) {
   
   
	   e.printStackTrace();
	   }
	   return dbConn;
}

}



AddSC

/*
AddSC
*/
package sc;

import java.awt.*;

import javax.swing.*;

import java.sql.*;
import java.util.*;
import javax.swing.filechooser.*;
import java.io.*;
import java.awt.event.*;

public class AddSC extends JPanel implements ActionListener{
   
   
	JTextField 课程号,学号,成绩;
	JButton 录入;
	
public AddSC(){
   
   
	try {
   
   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());}
	catch(Exception e){
   
   System.err.println("不能设置外观:   "+e);}
	
	课程号=new JTextField(12);
	学号=new JTextField(12);
	成绩=new JTextField(12);
	录入=new JButton("录入");
	录入.addActionListener(this);
	
	Box box1=Box.createHorizontalBox();//横放box
	Box box2=Box.createHorizontalBox();
	Box box3=Box.createHorizontalBox();
	Box box4=Box.createHorizontalBox();
	box1.add(new JLabel("课号:"));
	box1.add(课程号);
	box2.add(new JLabel("学号:"));
	box2.add(学号);
	box3.add(new JLabel("成绩:"));
	box3.add(成绩);
	box4.add(录入);
	Box boxH=Box.createVerticalBox();//竖放box
	boxH.add(box1);
	boxH.add(box2);
	boxH.add(box3);
	boxH.add(box4);
	boxH.add(Box.createVerticalGlue());
	JPanel messPanel=new JPanel();
	messPanel.add(boxH);
	setLayout(new BorderLayout());
	add(messPanel,BorderLayout.CENTER);
	validate();
}
public void actionPerformed(ActionEvent c){
   
   
	Object obj=c.getSource();
	if(obj==录入){
   
   
		if(课程号.getText().equals("")||学号.getText().equals("")){
   
   
			JOptionPane.showMessageDialog(this,"填写课号与学号才能录入!" );
		}
		else
		{
   
   
		Statement stmt=null;
		ResultSet rs=null,rs1=null,rsC=null,rsS=null;
		String sql,sql1,sqlS,sqlC;
		    sqlC="select * from Course where Cno='"+课程号.getText()+"'";
		    sqlS="select * from Student where Sno='"+学号.getText()+"'";
		    sql1="select * from SC where Cno='"+课程号.getText()+"' and Sno='"+学号.getText()+"'";
		    sql="insert into SC values('"+学号.getText()+"','"+课程号.getText()+"','"+成绩.getText()+"')";
	   try{
   
   
		   Connection dbConn1=CONN();
			stmt=(Statement)dbConn1.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
			rsC=stmt.executeQuery(sqlC);
			if(rsC.next()){
   
   
				rsS=stmt.executeQuery(sqlS);
				if(rsS.next()){
   
   
			rs1=stmt.executeQuery(sql1);
			if(rs1.next()){
   
   JOptionPane.showMessageDialog(this,"该学生以选该课程号,无法添加");}
			else{
   
   
			stmt.executeUpdate(sql);	
			JOptionPane.showMessageDialog(this,"添加成功");
			}
			rs1.close();
			}
				else{
   
   JOptionPane.showMessageDialog(this,"该学生不存在,无法添加");}
				rsS.close();
			}
			else{
   
   JOptionPane.showMessageDialog(this,"该课程不存在,无法添加");}
			rsC.close();
			stmt.close();
	   }
	   catch(SQLException e){
   
   
		   System.out.print("SQL Exception occur.Message is:"+e.getMessage());
		   }
	   }
	}
}
	public static Connection CONN(){
   
   
		   String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";   //加载JDBC驱动
		    String dbURL = "jdbc:sqlserver://主机名:1433; DatabaseName=数据库名";   //连接服务器和数据库test
	   String userName = "sa";   //默认用户名
	   String userPwd = "密码";   //密码
		   Connection dbConn=null;

		   try {
   
   
		   Class.forName(driverName);
		   dbConn = DriverManager.getConnection(dbURL, userName, userPwd);
		   System.out.println("Connection Successful!");   //如果连接成功 控制台输出Connection Successful!
		   } catch (Exception e) {
   
   
		   e.printStackTrace();
		   }
		   return dbConn;
	}

}

DelC

/*
DelC
*/
package sc;

import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.*;
public class DelC extends JPanel implements ActionListener{
   
   
	String save=null;
	JTextField 课号1,课程号,课程名,先修课课程号,学分;
	JButton 删除,查找;
	
public DelC(){
   
   
	try {
   
   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());}
	catch(Exception e){
   
   System.err.println("不能设置外观:   "+e);}
	
	课号1=new JTextField(12);
	课程号=new JTextField(12);
	课程名=new JTextField(12);
	先修课课程号=new JTextField(12);
	学分=new JTextField(12);
	删除=new JButton("删除");
	查找=new JButton("查找");
	
	Box box1=Box.createHorizontalBox();//横放box
	Box box2=Box.createHorizontalBox();
	Box box3=Box.createHorizontalBox();
	Box box4=Box.createHorizontalBox();
	Box box5=Box.createHorizontalBox();
	Box box6=Box.createHorizontalBox();
	Box box7=Box.createHorizontalBox();
	box1.add(new JLabel("课程号:",JLabel.CENTER));
	box1.add(课程号);
	box2.add(new JLabel("课程名:",JLabel.CENTER));
	box2.add(课程名);
	box3.add(new JLabel("先修课课程号:",JLabel.CENTER));
	box3.add(先修课课程号);
	box4.add(new JLabel("学分:",JLabel.CENTER));
	box4.add(学分);
	box6.add(删除);
	box7.add(new JLabel("课号:",JLabel.CENTER));
	box7.add(课号1);
	box7.add(查找);
	Box boxH=Box.createVerticalBox();//竖放box
	boxH.add(box1);
	boxH.add(box2);
	boxH.add(box3);
	boxH.add(box4);
	boxH.add(box5);
	boxH.add(box6);
	//boxH.add(box7);
	boxH.add(Box.createVerticalGlue());
	
	删除.addActionListener(this);
    查找.addActionListener(this);
	
	JPanel picPanel=new JPanel();
	JPanel messPanel=new JPanel();
	messPanel.add(box7);
	picPanel.add(boxH);
	setLayout(new BorderLayout());
	JSplitPane splitV=new JSplitPane(JSplitPane.VERTICAL_SPLIT,messPanel,picPanel);//分割
	add(splitV,BorderLayout.CENTER);
	validate();

学生成绩管理系统 1 问题描述 1.1 背景 1)某大学有学生若干万名,每个学生每学期必须学习若干门课程。 2)每个学生有学号、姓名、性别、班级、出生日期等基本信息。 3)每门课程有课程号,课程名称、任课教师、学分等信息。 4)学校需要对每个学生的基本信息、所学课程、成绩进行统一管理,以便于对信息进行 查询、浏览和修改。 1.2 数据需求 学生成绩管理系统主要用于学生成绩信息管理,据分析学生成绩管理系统的数据表可浓 缩为:学生基本信息表、课程基本信息表和学生成绩信息表。根据学校的情况,可按下 面的步骤来分析: 1) 确定学生所在的院系、所学的专业以及所在的班级。 2) 确定学生所在班级的课程以及该课程学生的成绩;另外还需要知道学生所在班级、学 号和学期。 3) 分析学生的基本信息,如姓名、性别、出生年月、家庭住址、联系电话。 4) 用户信息分析,通常包括用户名和密码。 2 解决方案 (数据库系统设计 ) 2.1 E-R 模型设计 根据E—R图,将其转化为如下数据实体,数据库学生成绩管理系统.dbc,包括如下的表 和视图: 1) 学生登记表——学生.dbf。 字段名称 字段类型 字段宽度 xh 字符型 10 xm 字符型 6 xb 字符型 2 csrq 日期型 8 bj 字符型 4 2) 课程登记表——课程表.dbf。 字段名称 字段类型 字段宽度 kch 字符型 2 kcm 字符型 10 js 字符型 10 xf 字符型 10 3) 成绩登记表——成绩表.dbf 字段名称 字段类型 字段宽度 xh 字符型 10 kch 字符型 2 cj 数值型 3 4) 借书视图(lyxview)。 为了进行浏览总表的需要,需要设计了一个总表浏览视图,该视图从学生.dbf等 3个表中提取了10个字段的数据: 学生.xh 学生.xm 学生.xb 学生.csrq 学生.bj 课程表.kch 课程表.kcm 课程表.js 课程表.xf 成绩表.cj 其视图关系可由以下SQL语句定义: SELECT 学生.*, 课程表.*, 成绩表.cj; FROM 学生成绩管理系统!学生表, 学生成绩管理系统!课程表,; 学生成绩管理系统!成绩表; WHERE 学生.xh = 成绩表.xh; AND 课程表.kch = 成绩表.kch 所建数据库如下图所示: 2.2 数据表 本系统需要使用的数据如下: 3 系统实现 3.1 开发环境 本系统由SQL语言编写,在Visual Foxpro 6.0软件环境下可以正常运行 3.2 系统流程图 系统流程图模块主要由刘龙洋同学设计,而系统的功能设计主要由李江滨同学完成, 我主要负责程序主要功能界面的设计,下面是部分流程图: 、 3.3 程序主要功能界面 1、登录界面的设计: 第一步:在表单上单击鼠标右键,并在弹出菜单中选择"数据环境"项,打开数据环境 设计器,添加数据表mm.dbf; 第二步:创建表单并保存为"登录"; 第三步:添加lable1,并设置其caption属性为"欢迎使用学生成绩管理系统!"; 第四步:添加lable2和text1并设置相关属性; 第五步:添加timer控件,并设置其Enabled属性为"真",用于设计窗口动画。 登录界面如下图所示: 2、修改密码表单的设计: 第一步:在表单上单击鼠标右键,并在弹出菜单中选择"数据环境"项,打开数据环境 设计器,添加数据表mm.dbf; 第二步:创建表单并保存为"修改密码"; 第三步:添加label1 、label2、 label3,并设置其caption属性分别为"请输入旧密码"、"请输入新密码"、"请确认新密 码"; 第四步:添加text1、 text2、 text3,并设置相关属性; 第五步:添加command1和command2,并设置其caption属性分别为"确认"和"取消"; 修改密码表单如下图: 3、学生基本信息维护表单的设计: 第一步:创建表单,并保存为学生.scx; 第二步:添加lable1~lable5,其caption的属性如下图所示 ; 第三步: 添加文本框text1~text5,并设置相关属性; 第四步:添加"院系"、"专业"、"班级"和"学期"列表框; 第五步:添加类,并设置相关属性,用于增添和修改学生基本信息; 第六步:添加文本框text6,并设置相关属性; 第七步:添加command1~command10,并设置相关属性; 第八步:添加"返回"按钮,其功能是关闭此界面; 第九步:执行运行命令,并进行测试。 4、课程信息维护表单的设计: 第一步:创建表单,并保存为课程表.scx; 第二步:添加lable1~lable4,其caption的属性如下图所示 ; 第三步: 添加文本框text1~text4,并设置
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值