点歌管理系统数据库设计.docx
《点歌管理系统数据库设计.docx》由会员分享,可在线阅读,更多相关《点歌管理系统数据库设计.docx(21页珍藏版)》请在冰豆网上搜索。
![点歌管理系统数据库设计.docx](https://file1.bdocx.com/fileroot1/2023-6/14/850ba643-b3a4-499c-8fcf-a9409a4633cd/850ba643-b3a4-499c-8fcf-a9409a4633cd1.gif)
点歌管理系统数据库设计
点歌管理系统数据库设计
1需求分析
1.1整体功能描述
点歌管理系统能够存储歌曲,并按多种不同方式查找歌曲,如歌曲名,歌手名,歌曲类型,歌曲语言等等,并能够方便的对歌曲库进行管理,如歌曲的增加和删除。
具体的功能需求如下。
歌曲管理:
(1)添加歌曲:
用户可以在系统中增加歌曲,在增加之前必须填写完整歌曲的属性。
(2)删除歌曲:
用户可以删除系统中已经存在的歌曲。
(3)修改歌曲属性:
用户可以自由修改系统中已经存在的歌曲的属性。
歌曲的属性包括:
歌曲的存放的位置,歌曲名字,歌手名字,曲风类型,歌曲语言。
歌手信息管理:
(4)添加歌手:
用户可以向系统增加歌手的信息。
(5)删除歌手:
用户可以删除系统中的歌手信息。
(6)修改歌手信息:
用户可以修改歌手的信息。
歌手信息包括:
歌手名
字,所属地区,性别。
查找歌曲方面的:
(7)按歌曲名查找:
用户给定歌曲的名字,系统返回歌曲的信息。
(8)按歌手名查找:
用户给定歌手的名字,系统返回该歌手的所有歌曲。
(9)按歌曲类型查找:
用户给定歌曲的类型,系统返回该类型所有歌曲。
(10)按歌曲语言类型查找:
用户给定歌曲的语言类型,系统返回该语言类型的所有歌曲。
查找歌手方面:
(11)按性别查找:
用户给定歌手的性别(男或女),系统返回符合条件的歌手信息。
(12)按地区查找:
用户给定歌手的所属地区,系统返回符合条件的歌手信息。
(13)按名字查找:
用户给定歌手的名字,系统返回符合条件的歌手信息。
系统安全性:
(14)登录系统:
系统对用户的身份进行验证,授权用户才能操作系统。
1.2数据流图
(1)根据系统的功能需求,可以画出系统的第1层数据流图。
业务信息
歌手
查找参数
歌手
歌曲
歌曲
查找参数
查找参数
查找参数
业务信息
业务信息
用户
歌手管理
歌手信息
歌曲管理
查找歌曲
查找歌手
歌曲信息
图1点歌管理系统第1层数据流图
业务信息
(2)在系统的第1层数据流图之后,再画出系统的第2层数据流图。
歌曲歌曲
歌曲歌曲歌曲不存在
歌曲已存在,添加失败
添加成功信息
歌曲删除歌曲
歌曲歌曲歌曲存在
歌曲不存在,删除歌曲失败信息
删除成功信息
歌曲歌曲
歌曲歌曲歌曲
歌曲不存在,修改失败信息
修改成功信息
歌曲
查找歌曲的参数查找参数歌曲
歌曲不存在信息
歌曲
(3)以上只是给出了一部分功能的数据流图,其它的数据图和给出的数据流图的流程大体相似。
1.3数据字典
名字
帐号
别名
无
描述
用于系统的身份验证
定义
帐号=帐号编号+密码+用户名
位置
帐号记录表
名字
帐号编号
别名
无
描述
唯一确定一个帐号
定义
帐号编号=正整数
位置
帐号记录表
名字
密码
别名
无
描述
帐号的密码
定义
密码=字符串
位置
帐号记录表
名字
用户名
别名
无
描述
帐号的用户名字
定义
用户名=字符串
位置
帐号记录表
图9用户名数据定义
名字
歌曲
别名
无
描述
描述歌曲的属性
定义
歌曲=歌曲编号+歌曲的存放路径+歌曲名字+歌手编号+歌曲类型+歌曲语言
位置
歌曲信息记录表
图10歌曲数据定义
名字
歌曲编号
别名
无
描述
确定唯一首歌曲
定义
歌曲编号=正整数
位置
歌曲记录
图11歌曲编号数据定义
名字
歌曲的存放位置
别名
无
描述
描述歌曲所在的文件夹
定义
歌曲的存放位置=磁盘中的路径格式
位置
歌曲记录
图12歌曲存放位置数据定义
名字
歌曲名字
别名
无
描述
描述歌曲的名字
定义
歌曲名字=字符串+‘.’+音频文件扩展名
位置
歌曲记录
图13歌曲名字数据定义
名字
曲风类型
别名
无
描述
描述歌曲的曲风类型
定义
曲风类型={流行音乐|民族音乐|摇滚音乐|爵士音乐}
位置
歌曲记录
图14曲风类型数据定义
名字
歌曲语言
别名
无
描述
描述歌曲的演唱语言种类
定义
歌曲类型={粤语|国语|英语|日语|韩语}
位置
歌曲记录
图15歌曲语言数据定义
名字
歌手
别名
无
描述
描述歌手的信息
定义
歌手=歌手编号+歌手名字+所属地区+性别
位置
歌手信息记录表
图16歌手数据定义
名字
歌手编号
别名
无
描述
唯一确定一个歌手的标识符
定义
歌手编号=字符串
位置
歌手记录
图17歌手编号数据定义
名字
歌手名字
别名
无
描述
描述歌手的名字
定义
歌手名字=字符串
位置
歌手记录
图18歌手名字数据定义
名字
所属地区
别名
无
描述
描述歌手工作的地方
定义
所属地区=字符串
位置
歌手记录
图19所属地区数据定义
名字
性别
别名
无
描述
描述歌手的性别
定义
性别={男|女}
位置
歌手记录
图20性别数据定义
2概念设计
2.1局部视图设计
对需求分析阶段收集到的数据按照E-R模型的要求进行分类,组织,形成实体,实体的属性,标识实体的码,确定实体之间的联系类型(1:
1,1:
n,m:
n),设计分E-R图。
歌曲
歌手
演唱
图21E-R实体图
n1
图22歌曲属性图
3逻辑设计
3.1E-R图向关系模型的转换
在这个阶段,逻辑设计的主要任务就是要将上一步得到的E-R图向关系模型转换,将实体和实体型间的联系转换为关系模式,确定这些模式属性和码。
将E-R图转换后,得到的关系模式如下,画有下划线的为主码:
歌曲(歌曲编号,歌曲名字,歌曲存放位置,曲风类型编号,歌曲语言编号)
曲风类型(曲风类型编号,名字)
歌曲语言(歌曲语言编号,名字)
歌手(歌手编号,歌手名字,所属地区,性别)
演唱(歌曲编号,歌手编号)
帐号(帐号编号,用户名,密码)
一个视图:
视图_歌曲(歌曲名字,歌曲存放位置,曲风类型名字,歌曲语言名字,歌手名字)
3.2设计DBMS的数据字典
将得到的关系模式转换为MSSQL2000所支持的数据模型,所得到的表格如下。
图25帐号记录表
图26歌手记录表
图27歌曲记录表
图28曲风类型记录表
图29歌曲语言种类记录表
图30演唱关系表
图31“视图_歌曲”视图
3.2约束条件
本系统选择的数据库管理系统为MSSQL2005。
(1)演唱关系表的主键为(songid,singerid)同时songid为SONG(songid)的外码,singerid为SINGER(singerid)的外码。
(2)所有的关系表的主键都为自动递增的正整数,演唱关系表的主键例外。
(3)SONG(style)为SONGSTYLE(sytleid)的外码,SONG(lanStyle)为SONGLANGUANGE(languageid)的外码。
(4)SONG(sex)只能为‘M’或者‘F’。
(5)SONGLANGUAGE(name)的值唯一。
(6)SONGSTYLE(name)的值唯一。
4物理设计
本系统选择的数据库管理系统为MSSQL2000。
数据库的存取方法,存取路径没有特殊要求,按照系统的默认值来设置。
索引,聚族,日志,备份等参数,因为本数据库没有特殊要求,都没设置。
5数据库实施阶段
由于时间上的限制,本人只是实现了系统的两个功能,一个是“系统的登录”,
另一个是就是“添加歌手”.
5.1“添加歌手”功能的代码
#pragmaonce
//SingerMan.h
//CSingerMan命令目标
#include
classCSingerMan:
publicCObject
{
public:
CSingerMan();
CSingerMan(CStringname,CStringaddress,CStringsex);
staticboolAddSinger(CSingerMan&singer,CDatabase&db);
virtual~CSingerMan();
public:
CStringm_singerName;
CStringm_address;
CStringm_sex;
CStringm_singerId;
};
//SingerMan.cpp:
实现文件
//
#include"stdafx.h"
#include"SingSong.h"
#include"SingerMan.h"
//CSingerMan
CSingerMan:
:
CSingerMan()
{
}
CSingerMan:
:
CSingerMan(CStringname,CStringaddress,CStringsex)
{
m_singerName=name;
m_address=address;
m_sex=sex;
}
CSingerMan:
:
~CSingerMan()
{
}
boolCSingerMan:
:
AddSinger(CSingerMan&singer,CDatabase&db)
{
if(!
db.IsOpen())//fail
{
AfxMessageBox(_T("数据库的连接已经断开,无法执行操作!
\n请重新登录!
"));
returnfalse;
}
CRecordsetrs(&db);
CStringstrSql;
strSql.Format(_T("insertintoSINGER(name,address,sex)values('%s','%s','%s')"),
singer.m_singerName,singer.m_address,singer.m_sex);
db.ExecuteSQL(strSql);
returntrue;
}
//SingerAddDlg.cpp:
实现文件
//
#include"stdafx.h"
#include"SingSong.h"
#include"SingerAddDlg.h"
#include"SingerMan.h"
#include
externCDatabasegal_db;
//CSingerAddDlg对话框
IMPLEMENT_DYNAMIC(CSingerAddDlg,CDialog)
CSingerAddDlg:
:
CSingerAddDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CSingerAddDlg:
:
IDD,pParent)
m_singerId(_T(""))
m_singerName(_T(""))
m_address(_T(""))
{
}
CSingerAddDlg:
:
~CSingerAddDlg()
{
}
voidCSingerAddDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
DDX_Text(pDX,IDC_EDIT_SINGERID,m_singerId);
DDX_Text(pDX,IDC_EDIT_SINGERNAME,m_singerName);
DDX_Text(pDX,IDC_EDIT_ADDRESS,m_address);
}
BEGIN_MESSAGE_MAP(CSingerAddDlg,CDialog)
ON_BN_CLICKED(IDOK,&CSingerAddDlg:
:
OnBnClickedOk)
END_MESSAGE_MAP()
//CSingerAddDlg消息处理程序
voidCSingerAddDlg:
:
OnBnClickedOk()
{
//TODO:
在此添加控件通知处理程序代码
UpdateData(true);
CButton*p=(CButton*)GetDlgItem(IDC_RADIO_MALE);
if(!
p->GetState())
m_sex=_T("F");
CSingerMansinger(m_singerName,m_address,m_sex);
if(CSingerMan:
:
AddSinger(singer,gal_db))
{
MessageBox(_T("成功添加歌曲!
"),_T("成功信息"));
OnOK();
}
else
MessageBox(_T("添加歌曲失败!
"),_T("失败信息"));
}
BOOLCSingerAddDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//TODO:
在此添加额外的初始化
CButton*p=(CButton*)(GetDlgItem(IDC_RADIO_MALE));
p->SetCheck(TRUE);
m_sex=_T("M");
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
//异常:
OCX属性页应返回FALSE
}
5.2程序运行图
图32系统初始界面
图33系统登录
图34添加歌手
5自我评价与总结
总的来说,这次的课程设计的难度比较大。
一个课程设计,是对该们课程的一次实践,是一次具体的动手能力的考验,是理论联系实践的一个过程。
《数据库系统原理》是一门比较难的课程,课程设计自然而然的就比较难了。
做这个课程设计时,老师只是给了我一个题目和一些简短的需求描述,但是要完成一个系统的设计,这些需求是远远不够的。
通过在网上搜索资料,去图书馆翻阅文献,最终把功能需求确定下来了。
有了需求描述,接下来的几个阶段都是比较好实现的,但是到了数据库实施这一步时,就出现问题了。
原因是本人对具体数据库的实施不是很了解,是第一次做这个工作。
对其中的某些名词不是很明白,例如,聚族索引,也不知道如何科学的确定存取方法,确定数据库的存储结构。
这些知识都是实践上的知识,感觉课本上学到的理论不知如何才能运用到实践当中。
总的来说,这次的课程设计锻炼了我的理论结合实践的能力,尽管效果不是很好,但是这种能力确实提高了,并且我得到了很多实践的经验。
6参考文献
[1]王珊编著【数据库系统简明教程】,高等教育出版社
[2]王海龙,董智勇等编著【VisualC++6.0设计师之路】,电子工业出版社