中北大学
数据库原理
课 程 设 计 说 明 书
学生姓名:
学生姓名:
学生姓名:
学生姓名:
学 院:
专 业:
题 目:
指 导 教 师
武大为
学 号: 11060342X37
李力钊
学 号: 11060342X28
周荣祥
学 号: 11060342X20
南子锐
学 号: 11060342X44
信息商务学院
计算机科学与技术
学生学籍管理系统
武瑞娟
2013 年 6 月 27 日
1 设计目的:
按照关系型数据库的基本原理,综合运用所学的知识,以小组为单位,设计开发一个小
型的学生学籍管理系统。通过对一个实际问题的分析、设计与实现,将原理与应用相结合,
使学生学会如何把书本上学到的知识用于解决实际问题,培养学生的动手能力;另一方面,
使学生能深入理解和灵活掌握教学内容。
2 设计内容:
设计内容:设计如下主要功能模块
1) 实现学生基本情况的录入、修改、删除等基本操作。
2) 对学生基本信息提供灵活的查询方式。
3) 完成一个班级的学期选课功能。
4) 实现学生成绩的录入、修改、删除等基本操作。
5) 能方便的对学生的一个学期成绩进行查询。
6) 具有成绩统计、排名等功能。
7) 具有留级、休学等特殊情况的处理功能。
8) 能输出常用的各种报表。
9) 具有数据备份和数据恢复功能。
设计要求:
学生成绩表的设计,要考虑到不同年级的教学计划的变化情况。
对于新生班级,应该首先进行基本情况录入、选课、然后才能进行成绩录入。
3.功能模块详细设计
3.1 详细设计思想
这个学生管理系统,我们组用 Java 的 JDK1.6 开发工具和微软的 Microsoft SQL Server
数据库两者相结合做出来的。
一数据库的设计:
1 创建数据库 StudentManager
1.1 创建表:ClassInfo
1.2 创建表:DepartmentInfo
1.3 创建表:StudentInfo
图 1.0
图 1.1
图 1.2
图 1.3
二创建“数据源(ODBC)”
具体步骤:
“开始”-“控制面板”-“管理工具”-“数据源(ODBC)
-在用户 DNS 里,点“添加”--在数据源驱动列表最下方选择“SQLServer”
-点“完成”--出现了一个创建到 SQL Server 的新数据源
-在数据源“名称”右侧,填写数据库的名称;在“服务器”右侧,写(local)
-点“下一步”--继续点“下一步”
-在更改默认的数据库为“StudentManager”,这里的数据库为我刚刚新建的数据库。
-点“下一步”
-点“完成”
-出现一个“ODBC Microsoft SQL Server 安装”对话框
-点击下面的“测试数据源”
-出现图 2.1 就好了。
-下面依次点击“确定”就完成了。
-完成了以后,你会在数据源里看到自己刚刚新建的数据源,名为:“StudentManager”
图 2.1
图 2.2
3.2 核心代码:
三代码的编写:
3.1 数据库连接类的代码(文件名:DBConnect.java)注意,这个文件最先编译,因为后面
的几个文件的编译会用到该文件编译完产生的 DBConnect.class 文件
//导入 sql 数据库包
import java.sql.*;
//创建数据库连接类
public class DBConnect
{
//静态方法提高数据库的连接效率
public static Connection getConn() throws Exception
{
//加载 JDBC 驱动
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//以系统默认用户身份,连接数据库 StudentManager
return DriverManager.getConnection("jdbc:odbc:StudentManager","","");
}
}
3.2 添加学生面板类的代码(文件名:AddStudentPanel.java)
//导入系统的类包
import java.awt.*;
import java.sql.*;
import javax.swing.*;
import java.awt.event.*;
//创建“添加学生面板”类
public class AddStudentPanel extends JPanel implements ActionListener
{
//声明连接数据库对象
Connection con;
//声明 SQL 语句对象
Statement st;
//创建组件对象:标签、文本行、单选
JLabel jLabel1=new JLabel("学号");
JLabel jLabel2=new JLabel("姓名");
JLabel jLabel3=new JLabel("性别");
JLabel jLabel4=new JLabel("出生日期");
JLabel jLabel5=new JLabel("籍贯");
JLabel jLabel6=new JLabel("注意:出生日期格式为 YYYY-MM-DD");
JTextField jTextField1=new JTextField();
JTextField jTextField2=new JTextField();
JTextField jTextField3=new JTextField();
JTextField jTextField4=new JTextField();
JRadioButton jRadioButton1=new JRadioButton("男");
JRadioButton jRadioButton2=new JRadioButton("女");
ButtonGroup buttonGroup1=new ButtonGroup();
JButton jButton1=new JButton("存入数据库");
//构造方法
public AddStudentPanel()
{
try{
//调用初始化方法
jbInit();
}
catch(Exception exception){
exception.printStackTrace();
}
}
//界面初始化方法
private void jbInit() throws Exception
{
//连接数据库
con=DBConnect.getConn();
//创建一个 statement 对象来将 SQL 语句发送到数据库
st=con.createStatement();
//框架的布局
this.setLayout(null);
//设置各组件的大小
jLabel1.setBounds(new Rectangle(21,17,64,24));
jLabel2.setBounds(new Rectangle(21,51,53,22));
jLabel3.setBounds(new Rectangle(21,86,61,27));
jLabel4.setBounds(new Rectangle(21,122,59,25));
jLabel5.setBounds(new Rectangle(21,188,54,24));
jLabel6.setBounds(new Rectangle(102,153,219,27));
jTextField1.setBounds(new Rectangle(102,10,200,30));
jTextField2.setBounds(new Rectangle(102,49,200,30));
jTextField3.setBounds(new Rectangle(102,117,200,33));
jTextField4.setBounds(new Rectangle(102,183,200,29));
jRadioButton1.setBounds(new Rectangle(102,83,65,30));
jRadioButton2.setBounds(new Rectangle(190,85,85,30));
jButton1.setBounds(new Rectangle(103,217,180,30));
//设置单选按钮被选中
jRadioButton1.setSelected(true);
//添加按钮动作事件
jButton1.addActionListener(this);
//添加组件到面板
this.add(jTextField1);
this.add(jLabel1);
this.add(jLabel2);
this.add(jTextField2);
this.add(jRadioButton1);
this.add(jRadioButton2);
this.add(jLabel3);
this.add(jLabel4);
this.add(jTextField3);
this.add(jLabel6);
this.add(jTextField4);
this.add(jLabel5);
this.add(jButton1);
buttonGroup1.add(jRadioButton1);
buttonGroup1.add(jRadioButton2);
}
//点击按钮事件
//事件相应器 当你定义的事件捕捉以后就会执行这个里面的代码
public void actionPerformed(ActionEvent e)
{
//获取用户输入的信息
String xuehao=jTextField1.getText();
String xingming=jTextField2.getText();
String xingbie="";
if(jRadioButton1.isSelected())
xingbie+="男";
if(jRadioButton2.isSelected())
xingbie+="女";
String dateString=jTextField3.getText();
String jiguan=jTextField4.getText();
try{
//设置日期格式
st.execute("set dateformat ymd");
//利用 st 对象执行 SQL 语句,进行插入操作
st.executeUpdate("insert
StudentInfo
values('"+xuehao+"','"+xingming+"','"+xingbie+"','"+dateString+"','"+jiguan+"','"+xuehao.substrin
g(4,6)+"','"+xuehao.substring(0,6)+"')");
into
//清空文本行的内容
jTextField1.setText("");
jTextField2.setText("");
jTextField3.setText("");
jTextField4.setText("");
//利用消息对话框提示删除操作成功
JOptionPane.showMessageDialog(this,"插入成功!");
}
catch(Exception ex){
//利用消息对话框提示不能插入,并显示异常的信息
JOptionPane.showMessageDialog(this,"输入数据错误或者数据库不允许插入!
ex.printStackTrace();
");
}
}
}
3.3 删除学生面板类的代码(文件名:DeleteStudentPanel.java)
//导入系统的类包
import java.awt.*;
import java.sql.*;
import javax.swing.*;
import java.awt.event.*;
//创建“删除学生面板”类
public class DeleteStudentPanel extends JPanel implements ActionListener
{
//声明连接数据库对象
Connection con;
//声明 SQL 语句对象
Statement st;
//创建组件对象
JLabel jLabel1=new JLabel("请输入待删除的学生的学号:");
JTextField jTextField1=new JTextField();
JButton jButton1=new JButton("删除");
//构造方法
public DeleteStudentPanel()
{
try{
//调用初始化方法
jbInit();
}
catch(Exception exception){
exception.printStackTrace();
}
}
//界面初始化方法
private void jbInit() throws Exception
{
//连接数据库
con=DBConnect.getConn();
st=con.createStatement();
//框架的布局
this.setLayout(null);
//设置各组件的大小
jLabel1.setFont(new java.awt.Font("宋体",Font.BOLD,14));
jLabel1.setBounds(new Rectangle(70,20,200,30));
jTextField1.setBounds(new Rectangle(70,80,207,41));
jButton1.setBounds(new Rectangle(70,175,205,36));
//添加按钮动作事件
jButton1.addActionListener(this);
//添加组件到面板
this.add(jLabel1);
this.add(jTextField1);
this.add(jButton1);
}