《数据库原理及应用》课程设计
课 程 名: 数据库原理及应用
课 题 名: 学生选课管理系统
小组成员: 崔海博、张佳华、袁徍豪 指导老师: 陈群贤
提交时间:2014.12.31
学生选课管理系统
一、 课程设计的目的和意义
《数据库原理及应用》课程设计是实践性教学环节之一,是《数据库原理及应用》课程的辅助教学课程。通过课程设计,使学生掌握数据库的基本概念,结合实际的操作和设
计,巩固课堂教学内容,使学生掌握数据库系统的基本概念、原理和技术,将理论与实际相结合,应用现有的数据建模工具和数据库管理系统软件,规范、科学地完成一个小型数据库的设计与实现,把理论课与实验课所学内容做一综合,并在此基础上强化学生的实践意识、提高其实际动手能力和创新能力。
二、 设计要求
通过设计一完整的数据库,使学生掌握数据库设计各阶段的输入、输出、设计环境、目标和方法。熟练掌握两个主要环节———概念结构设计与逻辑结构设计;熟练的使用SQL语言实现数据库的建立、应用和维护。安排1周的时间进行课程设计,以小组为单位,一般3~4人为一组。教师讲解数据库的设计方法以及布置题目,要求学生根据题目的需求描述,进行实际调研,提出完整的需求分析报告。
三、 需求分析
该系统具备管理学生信息、课程信息、选课信息的功能:用户通过输入账号和密码进下该系统后,可以进行一些基础维护(学生信息维护、课程信息维护、选课信息维护)。全部都可以进行增加、修改、删除、模糊查询。
四、 数据库的设计
1. 表admin(管理员表)
2. 表C(课程表)
3. 表S(学生表)
4. 表SC(选课表)
五、 系统功能描述
该小型系统主要是用于管理学生及课程的基本信息,主要功能包括四方面的:
1.管理学生信息,其中包括添加,删除,修改等操作。
2.管理课程信息,其中包括添加,删除,修改等操作。
3.管理选课信息,其中包括添加,删除,修改等操作。
4.查询信息,其中包括查询学生信息,查询课程信息,查询选课信息等操作。
六、 代码分析
该系统前台由java编写,后台使用sql server 2012。整个系统由AddC、AddSC、
Addstu、DelC、DelSC、Delstu、Menu、SelC、Selstu、Student、Updatastu、UpdateC、UpdateSC、User十五个类组成,实现了本系统要求实现的各个功能。
与数据库的连接:
本系统使用java语言编写,用jdbc来与sql server 2012进行连接:
// 连接数据库方法
public static Connection CONN(){
String driverName = \"com.microsoft.sqlserver.jdbc.SQLServerDriver\"; //加载JDBC驱动
String dbURL = \"jdbc:sqlserver://localhost:1433; DatabaseName=SSCM\"; //连接服务器和数据库SSCM
String userName = \"sa\"; //默认用户名
String userPwd = \"123456\"; //密码
Connection dbConn=null;
try {
Class.forName(driverName);
dbConn = DriverManager.getConnection(dbURL, userName, userPwd);
System.out.println(\"数据库连接成功!\"); //如果连接成功 控制台输出数据库连接成功!
} catch (Exception e) {
e.printStackTrace();
}
return dbConn;
}
七、 功能展示
(1) 登陆界面:
只有数据库管理者表中已有的用户才能通过输入用户名和密码的形式来登录该系统,使用相关功能。
1.登陆界面
(2) 系统主界面:
在该主界面上选择相关选项来使用各个功能和显示结果。
2.主界面
(3) 学生管理:
点击学生管理菜单可以实现学生信息的添加、修改、删除。
(4)
课程管理:
点击课程管理菜单对课程信息进行添加、修改和删除。
(5) 选课管理:
点击选课菜单对学生选课的信息进行添加、修改和删除。
(6)
查询管理:
点击查询管理菜单,可以对学生、课程、选课进行查询。
(7)
模糊查询:
在查询界面上,只输入学号、姓名、系别、课号、课名、成绩中的一项可以进行模糊查询。
八、 心得体会
这次历时一周的课程设计,对于我们来说确实收获了不少。第一天我们查找资料、了解有关的知识,相互探讨,了解学生选课管理系统的需求,做好需求分析后,开始系统的设计,画出E-R图,写出各个实体的属性。对于数据库的创建,虽然出现很多的问题,但经过探讨之后我们都能够很好的解决,这便让我们体会到上课专心听讲的重要性。对于所需表的创建是一个比较简单的内容,问题主要是存储过程和触发器的创建,在请教老师后,最后还是解决了各种难题。
接下来就是用java设计界面阶段了,由于对java知识掌握的不全面,很多问题也是不得其解,比如一开始时对数据的链接上。通过自己的复习和巩固,还有相互讨论,出现
的一些问题也迎刃而解了。
这次的学生选课管理系统设计不仅使我们学会了把数据库的各个模块联系起来,并与Djava相连接,更让我懂得了如何设计一个系统,了解了系统设计的过程,通过这次实习,我也了解到要设计一个好的系统并不是一件容易的事,听了老师的建议我们才知道,自己设计的系统存在很多的缺陷,还需要从各方面得以改善。
我们相信,只要自己肯努力、肯奋斗,总是会有收获的。
附录
User.java
public User(JFrame f){
super(\"系统登录\");
Container c=getContentPane();
c.setLayout(new FlowLayout());
use=new JLabel(\"用户名:\");
use.setFont(new Font(\"Serif\",Font.PLAIN,20));
password=new JLabel(\"密码:\");
password.setFont(new Font(\"Serif\",Font.PLAIN,20));
k1=new JTextField(12);
k2=new JPasswordField(12);
b1=new JButton(\"登录\");
b2=new JButton(\"退出\");
// 设置登录方法
BHandler b=new BHandler();
EXIT d=new EXIT();
b1.addActionListener(b);
b2.addActionListener(d);
//添加控件
c.add(use);
c.add(k1);
c.add(password);
c.add(k2);
c.add(b1);
c.add(b2);
setBounds(600,300,250,150);
setVisible(true);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//主函数
public static void main(String[] args) {
User f1=new User(new JFrame());
}
//登录按钮方法
private class BHandler implements ActionListener{
public void actionPerformed(ActionEvent event){
if(k1.getText().equals(\"\")||k2.getText().equals(\"\")){
JOptionPane.showMessageDialog(User.this,\"用户名密码不能为空!\" );
}
else{
Statement stmt=null;
ResultSet rs=null;
String sql;
sql=\"select * from admin where username='\"+k1.getText()+\"'\";
try{
Connection dbConn1=CONN();
stmt=(Statement)dbConn1.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=stmt.executeQuery(sql);
if(rs.next()){
String xm=rs.getString(\"password\");
if(k2.getText().equals(xm.trim())){JOptionPane.showMessageDialog(User.this,\"登录成功\");
dispose();
new Menu();//管理窗口
}
else{JOptionPane.showMessageDialog(User.this,\"密码错误\");}
}
else{JOptionPane.showMessageDialog(User.this,\"用户名错误\");}
rs.close();
stmt.close();
}
catch(SQLException e){
JOptionPane.showMessageDialog(User.this,\"SQL Exception occur.Message is:\"+e.getMessage());
}
}
}
}
//退出方法结束
private class EXIT implements ActionListener{
public void actionPerformed(ActionEvent even){
System.exit(0);
}
}
Menu.java
package SSCM;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Menu extends JFrame implements ActionListener{
Addstu 增加学生界面;
Updatastu 修改学生界面;
Delstu 删除学生界面;
AddC 增加课程界面;
DelC 删除课程界面;
UpdateC 修改课程界面;
AddSC 增加选课界面;
DelSC 删除选课界面;
UpdateSC 修改选课界面;
Selstu 学生查询界面;
JPanel pCenter;
CardLayout card=null;
JLabel label=null;
JMenuBar mb=new JMenuBar();//菜单栏
JMenu m1=new JMenu(\"学生管理\");
JMenuItem add1=new JMenuItem(\"添加学生信息\");
JMenuItem updata1=new JMenuItem(\"修改学生信息\");
JMenuItem delete1=new JMenuItem(\"删除学生信息\");
JMenu m2=new JMenu(\"课程管理\");
JMenuItem add2=new JMenuItem(\"添加课程信息\");
JMenuItem updata2=new JMenuItem(\"修改课程信息\");
JMenuItem delete2=new JMenuItem(\"删除课程信息\");
JMenu m3=new JMenu(\"选课管理\");
JMenuItem add3=new JMenuItem(\"添加选课信息\");
JMenuItem updata3=new JMenuItem(\"修改选课信息\");
JMenuItem delete3=new JMenuItem(\"删除选课信息\");
JMenu m4=new JMenu(\"查询管理\");
JMenuItem 学生查询=new JMenuItem(\"查询信息 \");
JMenuItem m5=new JMenuItem(\"系统退出\");
Font t=new Font (\"sanerif\",Font.PLAIN,12);
public Menu (){
this.setTitle(\"学生选课管理系统——编写者:崔海博、张佳华、袁徍豪\");
try
{UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());}
catch(Exception e){System.err.println(\"不能设置外观: \"+e);}
//组合菜单
addMenu1();
addMenu2();
addMenu3();
addMenu4();
addJMenuBar();
setJMenuBar(mb);
label=new JLabel(\"学生选课管理系统\",JLabel.CENTER);
label.setFont(new Font(\"黑体\",Font.BOLD,36));
label.setHorizontalTextPosition(SwingConstants.CENTER);
label.setForeground(Color.black);
//点击事件
add1.addActionListener(this);
updata1.addActionListener(this);
delete1.addActionListener(this);
m5.addActionListener(this);
add2.addActionListener(this);
delete2.addActionListener(this);
updata2.addActionListener(this);
add3.addActionListener(this);
delete3.addActionListener(this);
updata3.addActionListener(this);
学生查询.addActionListener(this);
card=new CardLayout();
pCenter=new JPanel();
pCenter.setLayout(card);
增加学生界面=new Addstu();
修改学生界面=new Updatastu();
删除学生界面=new Delstu();
增加课程界面=new AddC();
删除课程界面=new DelC();
修改课程界面=new UpdateC();
增加选课界面=new AddSC();
删除选课界面=new DelSC();
修改选课界面=new UpdateSC();
学生查询界面=new Selstu();
pCenter.add(\"欢迎界面\",label);
pCenter.add(\"增加学生界面\",增加学生界面);
pCenter.add(\"修改学生界面\",修改学生界面);
pCenter.add(\"删除学生界面\",删除学生界面);
pCenter.add(\"增加课程界面\",增加课程界面);
pCenter.add(\"删除课程界面\",删除课程界面);
pCenter.add(\"修改课程界面\",修改课程界面);
pCenter.add(\"增加选课界面\",增加选课界面);
pCenter.add(\"删除选课界面\",删除选课界面);
pCenter.add(\"修改选课界面\",修改选课界面);
pCenter.add(\"学生查询界面\", 学生查询界面);
add(pCenter,BorderLayout.CENTER);
validate();
setVisible(true);
setBounds(400,150,600,380);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addWindowListener(new WindowAdapter(){//关闭程序时的操作
public void windowClosing(WindowEvent e){System.exit(0);}
});
validate();
}
private void addJMenuBar() {
mb.add(m1);mb.add(m2);mb.add(m3);mb.add(m4);mb.add(m5);
}
private void addMenu4() {
m4.add(学生查询);
m4.setFont(t);
}
private void addMenu3() {
m3.add(add3);
m3.add(updata3);
m3.add(delete3);
m3.setFont(t);
}
private void addMenu2() {//将菜单加入到菜单栏中
m2.add(add2);
m2.add(updata2);
m2.add(delete2);
m2.setFont(t);
}
private void addMenu1() {
m1.add(add1);
m1.add(updata1);
m1.add(delete1);
m1.setFont(t);//字体
}
public void actionPerformed(ActionEvent e){
Object obj=e.getSource();
if(obj==m5){System.exit(0);}
else{if(obj==add1){
card.show(pCenter,\"增加学生界面\");
}
else{if(obj==updata1){
card.show(pCenter,\"修改学生界面\");
}
else{if(obj==delete1){
card.show(pCenter, \"删除学生界面\");
}
else{if(obj==add2){
card.show(pCenter, \"增加课程界面\");
}
else{if(obj==delete2){
card.show(pCenter, \"删除课程界面\");
}
else{if(obj==updata2){
card.show(pCenter, \"修改课程界面\");
}
else{if(obj==add3){
card.show(pCenter, \"增加选课界面\");
}
else{if(obj==delete3){
card.show(pCenter, \"删除选课界面\");
}
else{if(obj==updata3){
card.show(pCenter, \"修改选课界面\");
}
else{if(obj==学生查询){
card.show(pCenter, \"学生查询界面\");
}}
}}}}}}}}}}
public static void main(String[] args) {
new Menu();
}
}
AddC.java
package SSCM;
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 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(课名);
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,\"学生信息请填满再录入!\" );
}
Statement stmt=null;
ResultSet rs=null,rs1=null;
String sql,sql1;
sql1=\"select * from C where Cno='\"+课号.getText()+\"'\";
sql=\"insert into C values('\"+课号.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());
}
}
}
因篇幅问题不能全部显示,请点此查看更多更全内容