数据库课程设计实验报告.docx
《数据库课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《数据库课程设计实验报告.docx(29页珍藏版)》请在冰豆网上搜索。
数据库课程设计实验报告
一、概述……………………………………………………………………………
(2)
二、需求分析…………………………………………………………………….(3)
三、数据库设计………………………………………………………………..(5)
四、数据库测试………………………………………………………………..(9)
五、课设心得……………………………………………………………………(20)
六、附录:
数据库建立语句……………………………………………...(21)
第一章:
概述
1.1项目背景
现在社会是信息技术高速发展的社会,网络在人们生活和交际中的应用越来越广泛。
对求职者来说,网站为他们提供了方便、快捷的查询工作岗位路径。
对招聘单位来说,招聘网站也为他们提供了检索应聘者信息的平台,使招聘工作变得轻松易行。
求职者和招聘公司/单位可以在网上通过Internet,实现工作求职和公司/单位的人才招聘。
网上招聘与传统招聘相比具有招聘范围广,信息量大,可挑选余地大,会有大量技术高的应聘人员,招聘效果好,费用低的优势,因此获得了越来越多公司的认可,同时它有着经营成本低、用户检索方便、地域限制少等特点。
招聘作为人力资源管理的一部分,在整个企业的人力资源管理中发挥了重大作用。
然而,很多实践工作者却还没有认识到招聘工作的重要性,没有把招聘工作摆上重要的议程,这就使得整个企业的人力资源管理出现了“瓶颈”问题,而随着计算机及网络技术的发展,在线招聘系统的开发则能有效帮助企业解决这一“瓶颈”问题。
1.2目的和意义
其主要目的是:
减少参加招聘单位工作人员的工作量和招聘成本,减少进行求职的人员求职时参加招聘会投递简历所耗费的时间和精力,使求职和招聘的过程通过互连网完成,从而实现招聘时双向选择的自动化。
网络求职有其突出的优点,即信息量大,资源丰富,更新速度快,招聘职位多等,很符合年轻人希望以最快捷、便利的方式获得最多最有效信息的求职要求。
本系统就是一个模拟网上求职招聘的系统,具备现实中人才中介机构的功能。
可以为个人用户提供需要的求职与招聘的信息,也可以为单位用户提供需要的人才信息,可以说是两者互动的一种重要渠道。
第二章:
需求分析
2.1功能需求
设计一个网上电子求职应聘系统,该系统的用户分别是:
求职者(普通用户)、企业用户和系统管理员。
不同的用户拥有不同的权限,各自完成各自的管理功能,不同的用户看到不同的系统功能。
用sqlserver2012创建后台数据库,对数据库的操作,按照要求完成所有的功能和模块。
求职者的主要功能模块包括:
(1)求职者注册与登陆
(2)求职者信息的添加、修改和删除。
(3)查询招聘信息、投递简历
企业的主要功能模块包括:
(1)企业注册与登陆
(2)发布招聘信息。
(3)查看求职信息、发布录用信息
系统管理员的主要功能模块包括:
(1)求职者信息管理
(2)企业信息管理
2.2数据流图
[1]顶层数据流图
[2]第二层数据流图
2.3E-R图
2.3.1普通用户(求职者)实体图
2.3.2职位实体图
2.3.3企业实体图
2.3.4系统ER图
第三章:
数据库设计
[1]PDM模型
[2]数据库表结构设计
(1)普通用户表
(2)账户信息表
(3)管理用户表
(4)企业用户表
(5)企业信息表
(6)职位信息表
(7)职位申请表
(8)招聘广告表
(9)投诉信息表
(10)新闻发布信息表
(11)管理日志表
第四章:
数据库测试
4.1通过JDBC连接 SQLSERVER,测试数据库是否连接成功
packagepkg;
importjava.sql.*;
publicclassMain{
publicstaticvoidmain(String[]args)
{
StringdriverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";
StringdbURL="jdbc:
sqlserver:
//localhost:
1433;DatabaseName=ASD";
StringuserName="sa";
StringuserPwd="123456";
Stringsql="SELECT*FROM[ASD].[dbo].[ADMIN_INFO]";
Stringsql1="SELECT*FROM[ASD].[dbo].[ID_INFO]";
PreparedStatementpre;
ResultSetrs;
try
{
Class.forName(driverName);
ConnectiondbConn=DriverManager.getConnection(dbURL,userName,userPwd);
System.out.println("连接数据库成功");
pre=dbConn.prepareStatement(sql);
rs=pre.executeQuery();
System.out.println("管理用户表");
System.out.print("账户编号"+"\t"+"\t"+"管理权限"+"\t"+"姓名"+"\t"+"性别"+"\t");
System.out.println("电话");
while(rs.next()){
System.out.print(rs.getString
(1)+"\t");
System.out.print(rs.getString
(2)+"\t");
System.out.print(rs.getString(3)+"\t");
System.out.print(rs.getString(4)+"\t");
System.out.println(rs.getString(5));
}
pre=dbConn.prepareStatement(sql1);
rs=pre.executeQuery();
System.out.println("\n");
System.out.println("全体用户表");
System.out.print("账户编号"+"\t"+"\t"+"昵称"+"\t"+"密码"+"\t"+"用户类型"+"\t");
System.out.println("邮箱");
while(rs.next()){
System.out.print(rs.getString
(1)+"\t");
System.out.print(rs.getString
(2)+"\t");
System.out.print(rs.getString(3)+"\t");
System.out.print(rs.getString(4)+"\t");
System.out.println(rs.getString(5));
}
}
catch(Exceptione)
{
e.printStackTrace();
System.out.print("连接失败");
}
}
}
4.2界面设计及数据库测试
packagepkg;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.sql.*;
importjavax.swing.*;
publicclassExample2extendsJFrameimplementsActionListener{
/**
*
*/
privatestaticfinallongserialVersionUID=1L;
JButtonadd,select,del,update;
JTabletable;
Objectbody[][]=newObject[50][5];
Stringtitle[]={"账号编号","管理权限","姓名","性别","电话"};
Connectionconn;
Statementstat;
ResultSetrs;
JTabbedPanetp;
publicExample2(){
super("数据库操作");
this.setSize(700,600);
this.setLocation(200,100);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanelps=newJPanel();
add=newJButton("添加");
select=newJButton("显示");
update=newJButton("更改");
del=newJButton("删除");
add.addActionListener(this);
select.addActionListener(this);
update.addActionListener(this);
del.addActionListener(this);
ps.add(add);ps.add(select);ps.add(update);ps.add(del);
table=newJTable(body,title);
tp=newJTabbedPane();
tp.add("ADMIN_INFO表",newJScrollPane(table));
this.getContentPane().add(tp,"Center");
this.getContentPane().add(ps,"South");
this.setVisible(true);
this.connection();
}
publicvoidconnection(){
StringdriverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";
StringdbURL="jdbc:
sqlserver:
//localhost:
1433;DatabaseName=ASD";
StringuserName="sa";
StringuserPwd="123456";
try{
Class.forName(driverName);
}
catch(ClassNotFoundExceptione)
{
System.out.println(""+e);
}
try{
conn=DriverManager.getConnection(dbURL,userName,userPwd);
stat=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
}
catch(SQLExceptione)
{
System.out.println(e);
}
}
publicstaticvoidmain(String[]args){
newExample2();
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==add)
{add();}
if(e.getSource()==select)
{select();}
if(e.getSource()==update)
{update();}
if(e.getSource()==del)
{del();}
}
publicvoiddel(){
try{
introw=table.getSelectedRow();
stat.executeUpdate("deletefromADMIN_INFOwhereID='"+body[row][0]+"'");
JOptionPane.showMessageDialog(null,"数据已成功删除");
this.select();
}catch(SQLExceptione){
System.out.println(e);
}
}
publicvoidupdate(){
try{
introw=table.getSelectedRow();
JTextFieldt[]=newJTextField[6];
t[0]=newJTextField("输入姓名:
");
t[0].setEditable(false);
t[1]=newJTextField();
t[2]=newJTextField("输入性别:
");
t[2].setEditable(false);
t[3]=newJTextField();
t[4]=newJTextField("输入电话:
");
t[4].setEditable(false);
t[5]=newJTextField();
Stringbut[]={"确定","取消"};
intgo=JOptionPane.showOptionDialog(null,t,"修改信息",JOptionPane.YES_OPTION,JOptionPane.INFORMATION_MESSAGE,null,but,but[0]);
if(go==0){
try{
StringNAME=t[1].getText();
StringSEX=t[3].getText();
StringPHONE=t[5].getText();
stat.executeUpdate("updateADMIN_INFOsetName='"+NAME+"',Sex='"+SEX+"',Phone='"+PHONE+"'whereID='"+body[row][0]+"'");
JOptionPane.showMessageDialog(null,"修改数据成功");
this.select();
}catch(Exceptionee)
{
JOptionPane.showMessageDialog(null,"修改数据错误!
");
}
}
}
catch(Exceptione){
System.out.println(e);
}
}
publicvoidselect(){
try{
for(intx=0;x<50;x++)
{
body[x][0]=null;
body[x][1]=null;
body[x][2]=null;
body[x][3]=null;
body[x][4]=null;
}
inti=0;
rs=stat.executeQuery("select*fromADMIN_INFO");
while(rs.next()){
body[i][0]=rs.getString
(1);
body[i][1]=rs.getString
(2);
body[i][2]=rs.getString(3);
body[i][3]=rs.getString(4);
body[i][4]=rs.getString(5);
i=i+1;
}
this.repaint();
}
catch(SQLExceptione)
{
System.out.println(e);
}
}
privatevoidadd(){
try{
table.getSelectedRow();
JTextFieldt[]=newJTextField[9];
t[0]=newJTextField("输入编号:
");
t[0].setEditable(false);
t[1]=newJTextField();
t[2]=newJTextField("输入管理权限:
");
t[2].setEditable(false);
t[3]=newJTextField();
t[4]=newJTextField("输入姓名:
");
t[4].setEditable(false);
t[5]=newJTextField();
t[6]=newJTextField("输入性别:
");
t[6].setEditable(false);
t[7]=newJTextField();
t[8]=newJTextField("输入联系电话:
");
t[8].setEditable(false);
t[9]=newJTextField();
Stringbut[]={"确定","取消"};
intgo=JOptionPane.showOptionDialog(null,t,"插入信息",JOptionPane.YES_OPTION,JOptionPane.INFORMATION_MESSAGE,null,but,but[0]);
if(go==0){
try{
StringID=t[1].getText();
StringPOWER=t[3].getText();
StringName=t[5].getText();
StringSex=t[7].getText();
StringPhone=t[9].getText();
stat.executeUpdate("insertintoADMIN_INFOvalues('"+ID+"','"+POWER+"','"+Name+"','"+Sex+"','"+Phone+"')");
JOptionPane.showMessageDialog(null,"数据已成功插入!
");
}catch(Exceptionee){
JOptionPane.showMessageDialog(null,"插入数据错误!
");
}
}
}catch(Exceptione){
System.out.println(e);
}
}
}
4.3结构化查询语句测试
[1]建立视图(企业视图)
createVIEW企业信息
as
selectCO_INFO.CO_ID企业编号,CO_INFO.CO_Name企业名称,CO_INFO.CO_Address企业地址,CO_INFO.CO_Phone企业电话,CO_INFO.CO_Profile企业简介fromCO_INFO
[2]存储过程建立(计算各人年龄并插入表中)
createprocedureAGE_UPDATE
as
updateNORMAL_INFO
setAge=year(getdate())-year(Birth)
whereIDin(selectIDfromNORMAL_INFO)
go
ExecuteAGE_UPDATE;
存储过程建立前:
存储过程建立后:
[3]触发器建立(防止误删建有外键的数据)
createtriggerADMIN_INFO_deleteonADMIN_INFO
fordeleteas
declare@nint
select@n=COUNT(*)fromdeleted,ID_INFOwheredeleted.ID=ID_INFO.ID
if@n>=1
begin
raiserror('该用户在ADMIN_INFO被引用,暂时不能删除',16,1)
rollbacktransaction
end
测试代码:
deletefromADMIN_INFO
whereID='00000001';
触发结果:
第五章:
课设心得体会
学会如何独立完成对一个数据库系统的分析,分析各实体间关系及属性设计ER图,同时通过对项目业务流程分析,知道如何设计数据流图,最终得出PDM模型;在建立PDM模型中,了解各数据类型的区别(如varchar和navarchar),同时实践出如何选择正确的数据类型;在外键和主键的设置上也有切身的体会和了解;在数据库设计方面,了解数据的冗余性,耦合性等;同时也温习了遍数据库查询语句的用法,能更好建立触发器以及存储过程
这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,给以后的学习以及工作中积累经验教训。
附录:
数据库建立语句
/*==============================================================*/
/*DBMSname:
MicrosoftSQLServer2008*/
/*Createdon:
2014-06-2221:
51:
33*/
/*==============================================================*/
ifexists(select1
fromsys.sysreferencesrjoinsys.sysobjectsoon(o.id=r.constidando.type='F')
wherer.fkeyid=object_id('ADMIN_INFO')ando.name='FK_ADMIN_IN_REFERENCE_ID_INFO')
altertableADMIN_INFO
dropconstraintFK_ADMIN_IN_REFERENCE_ID_INFO
go
ifexists(select1
fromsys.sysreferencesrjoinsys.sysobjectsoon(o.id=r.constidando.type='F')
wherer.fkeyid=object_id('AD_INFO')ando.name='FK_AD_INFO_REFERENCE_CO_MAN_I')
altertableAD_INFO
dropconstraintFK_AD_INFO_REFERENCE_CO_MAN_I
go
ifexists(select1
fromsys.sysreferencesrjoi