基于JSP和Sql Server实现的私人订制DJ系统

阿西可可

发布日期: 2021-04-28 07:29:29 浏览量: 372
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

摘 要

随着人民生活水平的不断提高,人们的消费能力也日益增长,消费需求不断升级,对一成不变的事物已经不敏感,人们不再局限于大众品牌,大众服务,追求更周到的服务品质,因此在此基础上私人定制DJ系统这一块是个很好的发展方向。

我们这个系统的主要内容及功能如下:每次当庆典公司接到一次活动后,都要由专业的DJ根据客户的要求(可以要求具体的播放曲目或者喜欢的风格)确定在庆典上播放的歌曲,定制DJ系统主要是为客户活动确定播放曲目的系统,一般由专业庆典公司使用。

根据基本的用户需求调查,该系统分为以下几个基本模块:

  • 系统需要提供MIS系统的一些公有功能模块:包括用户管理,权限管理等

  • 员工管理模块:包括客服人员和专业DJ的基本信息管理

  • 曲目数据管理:专业DJ可以通过各种合法途径获取各种各样的曲目,并负责将这些曲目数据登记到数据库存储

  • 歌手、乐队数据管理:客户对于曲目的喜好可能来自于歌手或者乐队,有些客户会指定在某些活动上播放哪些歌手或乐队的歌曲

  • 客户活动管理:客服人员需要登记包括姓名、公司、联系方式在内的客户数据

  • 播放曲目管理:针对每一个具体的活动,责任DJ会为客户量身定制一个播放曲目列表,在征得客户意见之后进行修改,最后确定为活动的播放曲目

根据系统用户分析各个角色的需求如下:

  • 人事管理人员:录入客服人员和专业DJ的个人信息,并分配系统账号和初始密码

  • 客服人员:主要负责客户和活动信息的录入和维护

  • 专业DJ:主要负责曲目库的维护和为具体的活动制定播放曲目列表

一、开发背景

现在人们生活水平提高,对物质生活的要求也提高了,人们过节,结婚,过生日等过节日不再只满足于在家里叫上亲朋好友一起吃顿饭,而是要去一些庆典公司举办。一般的庆典公司如果纯靠人工管理制作每次的庆典,极不方便后期的管理并且需要耗费大量人力物力。

每次当庆典公司接到一次活动后,都要由专业的DJ根据客户的要求(可以要求具体的播放曲目或者喜欢的风格)确定在庆典上播放的歌曲。

现在科技发达,庆典公司如果有一个专门管理庆典信息的系统管理将更加方便和清楚。专门的DJ系统拥有客户信息管理,工作人员管理,活动信息管理,歌曲信息管理等功能模块。应用该系统节约了大量人力资源,更方便了管理,提高了操作技术。

二、需求分析

2.1 用户基本需求描述

人事管理人员录入客服人员和专业DJ的个人信息,并为他们分配系统账号和初始密码。

专业DJ获取各种各样的曲目,将曲目数据存入数据库,讲曲目按不同曲风分类,录入歌手和乐队的基本数据,歌曲基本数据。并且负责为客户推荐和确定曲目,在跟客户充分沟通的基础上,确定每个活动需要播放的歌曲列表,并把列表信息存入系统中,可以供客户或自己查询。

客户登记自己的基本信息和确定需要举办活动的信息。与专业DJ讨论确定歌曲播放列表。客服将客户信息和活动信息录入系统。为活动分配专业DJ。

2.2 数据流图分析

DJ系统数据流图-顶层图

DJ系统数据流图-0层图

DJ系统数据流图-分层图1-2

2.3 数据字典

数据流条目

数据流名称 数据流别名 说明 数据流来源 数据流去向 数据流组成
客户活动信息 活动信息 客户活动的信息 客户 活动数据处理2 客户表=活动ID+名称+类别+地点+场所+活动时间
客户需求信息 需求信息 客户提出的需求 客户 活动数据处理2 客户表=客户ID+姓名+联系电话+公司
播放曲目列表 活动中要播放的曲目列表 读取歌曲列表4 客户 播放曲目表=播放曲目ID+播放顺序+播放基本要求+状态
曲库 歌曲库 专业DJ 读取歌曲列表4 曲库表=歌曲ID+歌曲名+曲风+使用场合+时长
歌曲列表 曲库中的曲目制定的播放列表 专业DJ 播放曲目列表处理5 播放曲目表=播放曲目ID+播放顺序+播放基本要求+状态
活动数据 关于活动的信息 读取活动信息1和读取需求信息3 专业DJ 活动表=活动ID+名称+类别+地点+场所+活动时间

数据存储条目

数据储存条目 别名 简述 组成 组成方式 查询方式
曲目库 存放曲目 曲库表=歌曲ID+歌曲名+曲风+使用场合+时长 索引文件,以曲目ID为关键字 要求能立即查询
活动信息库 存放活动信息 活动表=活动ID+名称+类别+地点+场所+活动时间 索引文件,以活动ID为关键字 要求能立即查询
客户信息库 存放客户信息 客户表=客户ID+姓名+联系电话+公司 索引文件,以客户ID为关键字 要求能立即查询
曲目列表库 存放曲目列表信息 播放曲目表=播放曲目ID+播放顺序+播放基本要求+状态 索引文件,以播放曲目ID为关键字 要求能立即查询

数据项条目

数据项名称 数据项别名 说明 类型 长度
客户ID cId DJ系统客户的唯一标识 int
姓名 cName DJ系统的客户姓名 varchar 50
联系电话 cTel DJ系统的客户的联系电话 varchar 50
公司 cTel DJ系统的客户的公司 varchar 50

三、详细设计

3.1 概念模型设计

3.2 关系模型设计

  • 客户客户ID,姓名,公司,联系方式)

  • 曲库歌曲ID演唱者ID(外键),歌曲名,曲风,使用场所,时长)

  • 专业DJ员工ID,姓名,密码,账号,联系电话,员工类型)

  • 播放曲目表播放曲目ID歌曲ID(外键)活动ID(外键),播放顺序,播放基本要求,状态)

  • 活动活动ID员工ID(外键)客户ID(外键),名称,活动时间,场所,类别,地点)

  • 演唱者演唱者ID,名称,类型,演唱者风格)

3.3 物理模型设计

曲库表(Song)

学段名 中文名 类型 长度 允许为空 约束
sId 歌曲ID Int PK
sName 歌曲名 Varchar 50
sStyle 曲风 Varchar 50
sPlace 使用场合 Varchar 50
sTime 时长 Float
rId 演唱者ID int FK

演唱者信息表(Singer)

学段名 中文名 类型 长度 允许为空 约束
rId 演唱者ID Int PK
rName 名称 Varchar 50
rType 类型 Varchar 50
rStyle 演唱者风格 Varchar 50

活动信息表(Activity)

学段名 中文名 类型 长度 允许为空 约束
aId 活动ID Int PK
aName 名称 Varchar 50
aType 类别 Varchar 50
aSite 地点 Varchar 50
aPlace 场合 Varchar( 50
aDate 活动时间 date
cId 客户ID int FK
eId 员工ID int FK

员工表(Employee)

学段名 中文名 类型 长度 允许为空 约束
eId 员工ID Int PK
eAccount 账号 Varchar 50
ePwd 密码 Varchar 50
eType 员工类型 Varchar 50
eName 姓名 Varchar 50
eTel 联系电话 int

客户表(Client)

学段名 中文名 类型 长度 允许为空 约束
cId 客户ID Int PK
cName 姓名 Varchar 50
cTel 联系电话 Int
cCompany 公司 Int

播放曲目表(Player)

学段名 中文名 类型 长度 允许为空 约束
pId 播放曲目ID Int PK
pOrder 播放顺序 Int
pRemark 播放基本要求 Varchar 50
pState 状态 Char 10
aId 活动ID Int FK
sId 歌曲ID Int FK

四、系统功能模块说明

4.1 系统功能模块图

4.2 私人订制DJ系统功能模块说明

私人订制DJ系统的主要功能有曲目库、歌手、乐队数据、活动曲目、客户信息、活动信息、客服和专业DJ的管理。该系统的登录分专业DJ登录、客服登录、人事登录三个模块,专业DJ登录系统管理曲目、歌手乐队数据和活动曲目。客服登录系统管理客户信息和活动信息。人事登录系统管理客服和专业DJ的信息。

功能模块详细说明:

  • 专业DJ模块:分曲目库管理、歌手乐队管理和活动曲目管理。曲目库可以进行添加,修改,查询,将曲目添加到活动曲目中等操作。歌手乐队数据管理可以进行添加、修改、查询等操作。活动曲目管理可以查询、删除等操作

  • 客服模块:分客户信息管理和活动信息管理。客户信息管理可以进行添加、修改、查询等操作。活动信息管理可以进行添加、修改、查询等操作

  • 人事模块:分客服信息管理和专业DJ信息管理。客服信息管理可以进行添加、修改、查询、删除等操作。专业DJ信息管理可以进行添加、修改、查询、删除等操作

4.3 私人订制DJ系统功能模块代码

例:活动曲目增删查改功能

  1. package dao;
  2. import java.sql.Connection;
  3. import java.sql.PreparedStatement;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. import utils.DBHelper;
  9. import bean.ActivityBean;
  10. import bean.PlayerBean;
  11. public class PlayerDao {
  12. // 查询
  13. public List<PlayerBean> selectPlayer(int djId) {
  14. Connection con = null;
  15. PreparedStatement stat = null;
  16. ResultSet rst = null;
  17. List<PlayerBean> lists = new ArrayList<PlayerBean>();
  18. try {
  19. con = DBHelper.getConnection();
  20. stat = con.prepareStatement("select p.p_id,s.s_name,p.p_order,p.p_remark,a.a_name,c.c_tel from Player p,Activity a,Client c,Song s where p.activity_id = a.a_id and a.client_id = c.c_id and p.song_id = s.s_id and a.employee_id =?");
  21. stat.setInt(1, djId);
  22. rst = stat.executeQuery();
  23. while (rst.next()) {
  24. PlayerBean bean = new PlayerBean();
  25. bean.setId(rst.getInt(1));
  26. bean.setSongName(rst.getString(2));
  27. bean.setOrder(rst.getString(3));
  28. bean.setRemark(rst.getString(4));
  29. bean.setActivityName(rst.getString(5));
  30. bean.setTel(rst.getString(6));
  31. lists.add(bean);
  32. }
  33. } catch (SQLException e) {
  34. e.printStackTrace();
  35. } finally {
  36. try {
  37. DBHelper.close(rst, stat, con);
  38. } catch (SQLException e) {
  39. e.printStackTrace();
  40. }
  41. }
  42. return lists;
  43. }
  44. // 根据电话查询
  45. public List<PlayerBean> selectPlayerByTel(int djId,String tel) {
  46. Connection con = null;
  47. PreparedStatement stat = null;
  48. ResultSet rst = null;
  49. List<PlayerBean> lists = new ArrayList<PlayerBean>();
  50. try {
  51. con = DBHelper.getConnection();
  52. stat = con.prepareStatement("select p.p_id,s.s_name,p.p_order,p.p_remark,a.a_name,c.c_tel from Player p,Activity a,Client c,Song s where p.activity_id = a.a_id and a.client_id = c.c_id and p.song_id = s.s_id and a.employee_id =? and c.c_tel =?");
  53. stat.setInt(1, djId);
  54. stat.setString(2, tel);
  55. rst = stat.executeQuery();
  56. while (rst.next()) {
  57. PlayerBean bean = new PlayerBean();
  58. bean.setId(rst.getInt(1));
  59. bean.setSongName(rst.getString(2));
  60. bean.setOrder(rst.getString(3));
  61. bean.setRemark(rst.getString(4));
  62. bean.setActivityName(rst.getString(5));
  63. bean.setTel(rst.getString(6));
  64. lists.add(bean);
  65. }
  66. } catch (SQLException e) {
  67. e.printStackTrace();
  68. } finally {
  69. try {
  70. DBHelper.close(rst, stat, con);
  71. } catch (SQLException e) {
  72. e.printStackTrace();
  73. }
  74. }
  75. return lists;
  76. }
  77. // 根据活动名查询
  78. public List<PlayerBean> selectPlayerByClinetName(int djId,String aName) {
  79. Connection con = null;
  80. PreparedStatement stat = null;
  81. ResultSet rst = null;
  82. List<PlayerBean> lists = new ArrayList<PlayerBean>();
  83. try {
  84. con = DBHelper.getConnection();
  85. stat = con.prepareStatement("select p.p_id,s.s_name,p.p_order,p.p_remark,a.a_name,c.c_tel from Player p,Activity a,Client c,Song s where p.activity_id = a.a_id and a.client_id = c.c_id and p.song_id = s.s_id and a.employee_id =? and a.a_name =?");
  86. stat.setInt(1, djId);
  87. stat.setString(2, aName);
  88. rst = stat.executeQuery();
  89. while (rst.next()) {
  90. PlayerBean bean = new PlayerBean();
  91. bean.setId(rst.getInt(1));
  92. bean.setSongName(rst.getString(2));
  93. bean.setOrder(rst.getString(3));
  94. bean.setRemark(rst.getString(4));
  95. bean.setActivityName(rst.getString(5));
  96. bean.setTel(rst.getString(6));
  97. lists.add(bean);
  98. }
  99. } catch (SQLException e) {
  100. e.printStackTrace();
  101. } finally {
  102. try {
  103. DBHelper.close(rst, stat, con);
  104. } catch (SQLException e) {
  105. e.printStackTrace();
  106. }
  107. }
  108. return lists;
  109. }
  110. // 添加
  111. public void addPlayer(int songId, int activityId, String order, String remark) {
  112. Connection con = null;
  113. PreparedStatement stat = null;
  114. try {
  115. con = DBHelper.getConnection();
  116. stat=con.prepareStatement("insertPlayer(p_order,p_remark,song_id,activity_id)values (?,?,?,?)");
  117. stat.setString(1, order);
  118. stat.setString(2, remark);
  119. stat.setInt(3, songId);
  120. stat.setInt(4, activityId);
  121. int num = stat.executeUpdate();
  122. if (num > 0) {
  123. System.out.println("新增成功!");
  124. }
  125. } catch (SQLException e) {
  126. e.printStackTrace();
  127. } finally {
  128. try {
  129. DBHelper.close(null, stat, con);
  130. } catch (SQLException e) {
  131. e.printStackTrace();
  132. }
  133. }
  134. }
  135. // 删除
  136. public void deletePlayer(int id) {
  137. Connection con = null;
  138. PreparedStatement stat = null;
  139. try {
  140. con = DBHelper.getConnection();
  141. stat = con.prepareStatement("delete from Player where a_id=?");
  142. stat.setInt(1, id);
  143. int sum = stat.executeUpdate();
  144. if (sum > 0) {
  145. System.out.println("删除成功!");
  146. }
  147. } catch (SQLException e) {
  148. e.printStackTrace();
  149. } finally {
  150. try {
  151. DBHelper.close(null, stat, con);
  152. } catch (SQLException e) {
  153. e.printStackTrace();
  154. }
  155. }
  156. }
  157. }

五、系统实现

5.1 项目结构图

5.2 主界面

登录界面的登陆分三种类型,不同类型的员工登陆进入不同的管理界面,进行不同的事务管理。

5.3 人事模块

人事管理界面可以查看和管理客服和专业DJ的信息。人事为客服和专业DJ分配账号,对客服和专业DJ的信息进行管理,可以对客服和专业DJ的数据进行添加、删除、修改、查询。

5.4 客服模块

客服管理界面可以查看和管理客户和活动管理的信息。客服可以对客户和活动的数据进行添加、修改、查询。

5.5 专业DJ模块

专业DJ主界面的客服管理界面类似,可以查看和曲目库、歌手乐队数据和活动曲目管理的信息。专业DJ可以对歌手乐队数据的数据进行添加、修改、查询。对活动曲目的数据进行查询和删除。对曲目库的数据进行添加、修改、查询。

除此之外还可对曲目库的数据进行添加到活动曲目中。显示为专业DJ管理添加活动曲目界面。

5.6 密码修改

所有的登录进入系统的工作人员都可以修改自己的密码。

总 结

  • 在这次课设中,主要负责大部分项目代码及数据库结构设计,巩固了Java方面的知识和数据库设计方面的知识以及代码调试能力。自学了滑动验证,换肤等项目效果。也出现过多表查询时显示只有外键的编号问题,主要是主外键关系表要在查询时显示外检标的非主属性,我采取的是添加实体类前台栏位暂时存放,这样既不会破坏数据库表的二范式又能使之查询显示。同时我体会到了团队的分工合作是很重要的,我们组分工明确,分配的任务大家都很努力完成。最终很顺利也较快的完成了该课程设计,也增加了一些默契。

  • 在这次课设中我主要是完成的部分是需求分析,数据流图数据字典,概念模型设计。和项目实现功能的一小部分。项目实现方面不是很擅长所以做的比较少。在需求分析,数据流图和数据字典的制作中,主要是软件工程方面的知识。是项目制作的前期需要。数据字典之前也没有做过返利,制作构成中有点麻烦,制作过程中遇到很多麻烦,经过查手机,问同学最后才获得头绪。数据流图和概念模型设计进过前期的准备和老师的讲解最终整理修改成最终的结果。以前没有团队做过项目,这次通过团队合作使我感触良多,团队合作制作项目速度更快,可以根据每个人的优势完成擅长的部分,增加团队之间的合作默契。

  • 在这次课程中我主要是负责:客服管理,修改密码,课程设计报告的文档,关系模型这几部分,经过这次课程设计对数据库有了一定的深入了解,了解了数据库的基本步骤(需求分析-概念结构设计-逻辑结构设计-物理结构)对E-R图的大致掌握,由于之前做的都是vs项目,可能第一次做Java项目代码基础较弱,很多地方其实不是很明白,但是不懂的地方都有问组长,晚上也有在加班敲代码,项目完成后对java项目也有些许了解和兴趣了,很感谢老师给我们这样一个机会让我们团队合作式完成项目,让我学会了很多东西。

参考文献

[1] 李春葆.数据库原理与技术-基于SQL Server 2012[M].清华大学出版社,2015.

[2] 赵松涛.SQL Server 2005系统管理实录[M].电子工业出版社,2006.

[3] 秦婧.SQL Server 2012王者归来[M].清华大学出版社,2014.

[4] 贾铁军.数据库原理应用与实践[M].科学出版社,2013.

[5] 宋晓峰.SQL Server 2005基础培训教程[M].人民邮电出版社,2007.

[6] 李昭原.数据库原理与应用[M].科学出版社,1999.

[7] 赵杰,杨丽丽,陈雷.数据库原理与应用[M].人民邮电出版社,2002.

[8] 何文华,李萍.SQL Server 2000应用开发教程[M].电子工业出版社,2004.

[9] 李春葆.C#程序设计教程.2版[M].清华大学出版社,2010.

[10] 李春葆.SQL Server 2012数据库应用与开发教程[M].清华大学出版社,2015.

[11] 李春葆,等.数据库原理与应用-基于SQL Server[M].清华大学出版社,2012.

[12] 张海藩,牟永敏.软件工程导论(第六版)[M].清华大学出版社,2013.

[13] 张海藩.软件工程(第二版)[M].人民邮电出版社,2006.

[14] 李春葆,曾慧.数据库原理习题与解析.3版[M].清华大学出版社,2007

上传的附件 cloud_download 基于JSP实现的私人订制DJ系统.zip ( 4.16mb, 2次下载 )
error_outline 下载需要13点积分

发送私信

26
文章数
1
评论数
最近文章
eject