数据库课程设计报告格式 电子版.docx
《数据库课程设计报告格式 电子版.docx》由会员分享,可在线阅读,更多相关《数据库课程设计报告格式 电子版.docx(91页珍藏版)》请在冰豆网上搜索。
数据库课程设计报告格式电子版
西安邮电大学
数据库课程设计报告
题目:
选课系统课程设计
学院名称
:
计算机学院
专业名称
:
软件工程
班级
:
软件1104
学号
:
04113125
学生姓名
:
郭亚涛
指导教师
:
乔平安
时间
:
2013年6月17日
至2013年6月30日
1、 课程设计目的
1.进一步学习和掌握数据库原理的基础知识和理论。
2.学习SQLServer数据库管理系统的基本功能和建立数据库各种对象的方法。
3.熟练掌握和使用SQL语言操纵数据库,使用T-SQL语言编程。
4.理解和掌握利用数据库所学的理论知识来设计数据库的基本方法和步骤。
5.通过上机操作和调试程序,提高学生理论联系实际和动手操作能力。
二、课程设计内容
1.完成数据的添加和修改,并提交数据库保存。
其中的数据包括:
学生信息、课程信息、教师信
2.设计实现学生信息查询,教师信息查询,课程信息查询,选课,选课查询,等JAVA图形化界面面 。
3.具备一定的安全性管理功能。
包括登录、退出等功能。
三、软硬件环境及系统所采用的体系结构
系统的体系结构为C/S,前台为Java,后台数据库一般为SQLServer
4、需求分析
学生管理是学校管理中的一项重要任务,以往的手工操作已经不能适应现在办公的需要.为了摆脱繁琐的劳动,提高工作效率,利用计算机进行信息处理成为必然.开发功能完善及安全可靠的管理系统可以大大提高学校资源的利用率,及时,准确地获取需要的信息,充分发挥人员的工作潜力。
正是咨询业的迅速发展使得人们从过去的手工劳动中得以解脱.同时,编写一套完善的学生管理系统的任务就显得尤为重要。
本学生管理系统可实现学生基本信息、成绩信息、课程信息、班级基本信息表、教师基本信息表等的录入、修改、查询、更新和删除。
2.功能需求分析
用户密码管理密码修改、用户删除和用户信息查询。
班级管理添加、修改、删除和查询班级信息。
教师管理添加、修改、删除和查询教师信息。
五、系统设计
本系统采用C/S体系结构,客户端负责提供表达逻辑、显示用户界面信息、访问数据库服务器,采用java作为开发工具;服务器端则用于提供数据服务,采用SQLServer2008标准版作为数据库管理系统。
本系统按照功能划分为以下三个个模块:
学生界面(包括学生添加和查询等)、教师界面(包括课程查询、成绩添加等)和管理员界面(包括课程管理、教师管理、学生管理等)。
系统的功能模块图如下图所示:
2、数据库设计
2、数据库设计
(1)数据库概念结构设计
本系统主要有三个实体:
a、学生实体、选修课两个实体,一个学生可以选修若干门课程,一门课程也可以被多个学生选修,这两个实体集之间是多对多联系,联系上有选课成绩;
b、教师和课程两个实体,一个老师可以教授若干门课程,一门课程也可以被多个老师教授,这两个实体集之间也是多对多联系;
2.数据库设计
(2)数据库逻辑结构设计
根据关系模型的转换原则,上面的E—R图可转换为如下所示的关系模型:
学生信息表:
student(学号,姓名,所属院系,课程编号,选修课程,选修成绩)
公选课信息表:
course(课程号,课程名,学分,学时,教师编号)
教师信息表:
teacher(教师编号,教师姓名,所属院系,教授课程号,教授课程名)
根据上面的E-R图设计及关系模型的设计,得出数据表的设计,在本系统中主要的数据表如下:
表1教师信息表teacher的表结构
主码
列名
数据类型
宽度
是否可为空
PK
教师工号
char
10
教师姓名
char
10
是
所属院系
char
10
是
教授课程号
char
10
教授课程名
char
10
是
表2学生信息表student的表结构
主码
列名
数据类型
宽度
是否可为空
PK
学号
char
10
姓名
char
10
是
所属院系
char
20
是
所选课程号
int
4
选修课程
char
10
是
选修成绩
int
10
是
表3公选课信息表course的表结构
主码
列名
数据类型
宽度
是否可为空
PK
课程号
char
10
课程名
char
10
是
学分
int
4
学时
int
4
下面在系统实施阶段就可以物理实现数据库了,本系统使用前面实验已经建好的服务器端SQLServer数据库
1.课程基本信息表E-R图:
2.成绩基本信息表E-R图:
3.教师基本信息表E-R图:
6、系统的实施
代码:
publiccharlogon()throwsSQLException
{
Stringtuserid=t1.getText();
Stringtpassword=newString(t2.getPassword());
Stringsql1=null,sql2=null;
ResultSetrs=null;
SqlManagerDBm=SqlManager.createInstance();//单态模式获取实例
DBm.connectDB();
sql1="execProcLogon'"+tuserid+"','"+tpassword+"'";
rs=DBm.executeQuery(sql1);
if(rs.next())//如果存储过程有结果返回,则将用户信息读入并保存
{
System.out.println(rs.getString
(1)+"如果存储过程有结果返回,则将用户信息读入并保存");
userid=rs.getString
(1);password=rs.getString
(2);
if(userid.startsWith("T"))
{TeaInfo.saveTea(userid);}
elseif(userid.startsWith("S"))
{StuInfo.saveStu(userid);}
elseif(userid.startsWith("A"))
{sql2=sql1;DBm.connectDB();rs=DBm.executeQuery(sql2);}
rs.close();DBm.closeDB();
returnuserid.substring(0,1).toCharArray()[0];
}
else{userid=null;password=null;
JOptionPane.showMessageDialog(this,"用户名或密码错误,请重新填写",
"警告",JOptionPane.WARNING_MESSAGE);
rs.close();DBm.closeDB();return'0';}}
publicvoidreset()
{t1.setText(null);t2.setText(null);t1.requestFocusInWindow();}
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==button)
{if(selectcourse()>0){
JOptionPane.showMessageDialog(this,"选课成功\n点击\"确定\"查看已选课程","选课成功",JOptionPane.INFORMATION_MESSAGE);
ChooseList.updateTable();stuPanel.card.show(StuPanel.pCenter,"已选课程");}}}
publicintselectcourse()
{
intselectedCount=ChooseList.getSelectedCount();
inta=xianzhi();intc=0;
String[]courseID=newString[selectedCount];if(selectedCount==3)
{
JOptionPane.showMessageDialog(this,"选课数目不能超过3门,你已经选择了3门\n点击\"确定\"查看已选课程",
"警告",JOptionPane.WARNING_MESSAGE);
ChooseList.updateTable();
StuPanel.card.show(StuPanel.pCenter,"已选课程");returnc;}
else{if(a+selectedCount>3)
{
JOptionPane.showMessageDialog(this,"选课数目不能超过3门,你已经选择了"+selectedCount+"门\n点击\"确定\"查看已选课程",
"警告",JOptionPane.WARNING_MESSAGE);
ChooseList.updateTable();
StuPanel.card.show(StuPanel.pCenter,"已选课程");returnc;}
else
{//不能选重复了
Stringsql="execSelectedCourse'"+Logon.userid+"'";
//System.out.println(sql+"不能选重复了");
SqlManagerDBm=SqlManager.createInstance();
DBm.connectDB();
ResultSetrs=DBm.executeQuery(sql);
try{inti=0;while(rs.next()){
courseID[i]=rs.getString
(1).trim();System.out.println(courseID[i]+"changdu");}
rs.close();}catch(SQLExceptione){e.printStackTrace();returnc;}
DBm.closeDB(){for(inti=0;i{
for(intj=0;j{
if(table1.getValueAt(i,0).toString().equals("true"))
{
//System.out.println(table1.getValueAt(i,1).toString().trim()+"选课不能重复,点击");
//System.out.println(courseID[j]);
if(table1.getValueAt(i,1).toString().trim().equals(courseID[j])){
JOptionPane.showMessageDialog(this,"选课不能重复,\n点击\"确定\"查看已选课程",
"警告",JOptionPane.WARNING_MESSAGE);
ChooseList.updateTable();
StuPanel.card.show(StuPanel.pCenter,"已选课程");
returnc;}}}}
for(inti=0;i{
if(table1.getValueAt(i,0).toString().equals("true"))
{
Stringcourseid=table1.getValueAt(i,1).toString();
sql="execSelectCourse'"+Logon.userid+"','"+courseid+"'";DBm.connectDB();
c=DBm.executeUpdate(sql);DBm.closeDB();System.out.println("c1="+c);
}System.out.println("c2="+c);}
if(c==0){
JOptionPane.showMessageDialog(this,"请选择选修课",
"警告",JOptionPane.WARNING_MESSAGE);}returnc;}}}
publicintxianzhi(){
inta=0;
for(inti=0;i{if(table1.getValueAt(i,0).toString().equals("true"))a++;}
returna;}}
publicvoidactionPerformed(ActionEvente)
{modify.setVisible(true);}
publicstaticvoidsaveStu(Stringid)
{SqlManagerDBm=SqlManager.createInstance();
DBm.connectDB();
Stringsql="execProcStudent'"+id+"'";
ResultSetrs=DBm.executeQuery(sql);
System.out.println(sql);
try{
rs.next();
jid.setText(rs.getString
(1));
jname.setText(rs.getString
(2));
jsex.setText(rs.getString(3));
jbirth.setText(rs.getString(4));
jclass.setText(rs.getString(5));}catch(SQLExceptione){
e.printStackTrace();}}}
七、系统评价及心得体会
通过将近两周的时间的艰苦历程,终于完成了本次数据库的课程设计——选修课程管理系统。
如果凭现在所学的知识来看要完成选修课程管理系统,这是远远不够的,因此需要下去大量查资料并自学很多知识。
所以在做的过程中,边做边学,作出的效果并不是那么的完善。
以前没有做过这种数据库管理系统,面对好几张表时,对于它们之间的联系、E-R图的结构,都是要经过深思熟虑之后才能动手开始整个数据库建立与java编程。
本次课程设计虽然完成了,但是我知道还是存在一些缺陷的,数据库还不是那么的完美,还存在一些漏洞,java编程界面面也不是那么的完美,界面结构也有一些缺点,但是我尽最大的能力来使我的数据库和界面面更加的人性化,更加的方便实用。
在以后的学习过程中,需要对事物多加考虑,对问题全面考虑。
要把问题更加的完善,不能想到什么就做什么,一定要在动手之前做好充分的准备,这样才可以做到事半功倍。
本次课程设计取得一定的成绩,是值得欣慰的。
同时,也认识到自学的重要性,要不懂多查书,多查资料。
在做的过程中,学习知识。
同时提高自己。
8、参考文献
[1]钱雪忠.数据库原理及应用(第二版).北京邮电大学出版社.2004
[2]钱雪忠.数据库原理及应用实验指导(第二版).北京邮电大学出版社.2004
[3]李刚.疯狂Java讲义.电子工业出版社.2008
9、附录:
源代码
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.table.DefaultTableModel;
importjava.sql.*;
importjava.util.Vector;
publicclassAdmPanelextendsJPanelimplementsActionListener,ItemListener,MouseListener
{
privatestaticfinallongserialVersionUID=1L;//添加默认序列号
JButtonb1,b2,b3,b4,b5,b6;
JPanelp1,p2,pCenter;
CardLayoutcard=null;
JTextFieldt1=newJTextField(10),
t2=newJTextField(10),
t3=newJTextField(10),
tt1=newJTextField(10),
tt2=newJTextField(10),
tt3=newJTextField(10);
ButtonGroupsex1=newButtonGroup(),
sex2=newButtonGroup();
JRadioButtonradio1=newJRadioButton("男",true),
radio2=newJRadioButton("女");
JRadioButtonr1=newJRadioButton("男",true),
r2=newJRadioButton("女");
JComboBoxyear,month,date,yy,mm,dd,post;
JTabletable1,table2;
VectorvectorColName1=newVector(),
vectorColName2=newVector();
Vector>vector1=newVector>(),
vector2=newVector>();
DefaultTableModelmodel1=newDefaultTableModel(vectorColName1,0){
privatestaticfinallongserialVersionUID=1L;//添加默认序列号
publicbooleanisCellEditable(introw,intcolumn)
{
returnfalse;
}
};
DefaultTableModelmodel2=newDefaultTableModel(vectorColName2,0){
privatestaticfinallongserialVersionUID=1L;//添加默认序列号
publicbooleanisCellEditable(introw,intcolumn)
{
returnfalse;
}
};
AdmPanel()
{
setLayout(newBorderLayout());
t1=newJTextField(10);
t2=newJTextField(10);
t3=newJTextField(10);
tt1=newJTextField(10);
tt2=newJTextField(10);
tt3=newJTextField(10);
sex1.add(radio1);
sex1.add(radio2);
sex2.add(r1);
sex2.add(r2);
year=newJComboBox();
month=newJComboBox();
date=newJComboBox();
yy=newJComboBox();
mm=newJComboBox();
dd=newJComboBox();
post=newJComboBox();
post.addItem("助教");
post.addItem("讲师");
post.addItem("副教授");
post.addItem("教授");
for(inti=1980;i<1995;i++)
year.addItem(i);
for(inti=1;i<=12;i++)
month.addItem(i);
for(inti=1;i<=31;i++)
date.addItem(i);
for(inti=1950;i<1995;i++)
yy.addItem(i);
for(inti=1;i<=12;i++)
mm.addItem(i);
for(inti=1;i<=31;i++)
dd.addItem(i);
year.addItemListener(this);
month.addItemListener(this);
yy.addItemListener(this);
mm.addItemListener(this);
post.addItemListener(this);
b1=newJButton("学生信息管理");
b2=newJButton("教师信息管理");
b3=newJButton("输入");
b4=newJButton("删除");
b5=newJButton("输入");
b6=newJButton("删除");
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
JPanelp0=newJPanel();
p0.add(b1);
p0.add(b2);
pCenter=newJPanel();
card=new