点歌管理系统数据库设计.docx
《点歌管理系统数据库设计.docx》由会员分享,可在线阅读,更多相关《点歌管理系统数据库设计.docx(19页珍藏版)》请在冰豆网上搜索。

点歌管理系统数据库设计
点歌管理系统数据库设计
1需求分析
1.1整体功能描述
点歌管理系统能够存储歌曲,并按多种不同方式查找歌曲,如歌曲名,歌手名,歌曲类型,歌曲语言等等,并能够方便的对歌曲库进行管理,如歌曲的增加和删除。
具体的功能需求如下。
歌曲管理:
(1)添加歌曲:
用户可以在系统中增加歌曲,在增加之前必须填写完整歌曲的属性。
(2)删除歌曲:
用户可以删除系统中已经存在的歌曲。
(3)修改歌曲属性:
用户可以自由修改系统中已经存在的歌曲的属性。
歌曲的属性包括:
歌曲的存放的位置,歌曲名字,歌手名字,曲风类型,歌曲语言。
歌手信息管理:
(4)添加歌手:
用户可以向系统增加歌手的信息。
(5)删除歌手:
用户可以删除系统中的歌手信息。
(6)修改歌手信息:
用户可以修改歌手的信息。
歌手信息包括:
歌手名
字,所属地区,性别。
查找歌曲方面的:
(7)按歌曲名查找:
用户给定歌曲的名字,系统返回歌曲的信息。
(8)按歌手名查找:
用户给定歌手的名字,系统返回该歌手的所有歌曲。
(9)按歌曲类型查找:
用户给定歌曲的类型,系统返回该类型所有歌曲。
(10)按歌曲语言类型查找:
用户给定歌曲的语言类型,系统返回该语言类型的所有歌曲。
查找歌手方面:
(11)按性别查找:
用户给定歌手的性别(男或女),系统返回符合条件的歌手信息。
(12)按地区查找:
用户给定歌手的所属地区,系统返回符合条件的歌手信息。
(13)按名字查找:
用户给定歌手的名字,系统返回符合条件的歌手信息。
系统安全性:
(14)登录系统:
系统对用户的身份进行验证,授权用户才能操作系统。
1.2数据流图
(1)根据系统的功能需求,可以画出系统的第1层数据流图。
(2)在系统的第1层数据流图之后,再画出系统的第2层数据流图。
歌曲歌曲
歌曲歌曲歌曲不存在
歌曲已存在,添加失败
添加成功信息
歌曲删除歌曲
歌曲歌曲歌曲存在
歌曲不存在,删除歌曲失败信息
删除成功信息
歌曲歌曲
歌曲歌曲歌曲
歌曲不存在,修改失败信息
修改成功信息
歌曲
查找歌曲的参数查找参数歌曲
歌曲不存在信息
歌曲
(3)以上只是给出了一部分功能的数据流图,其它的数据图和给出的数据流图的流程大体相似。
1.3数据字典
名字
帐号
别名
无
描述
用于系统的身份验证
定义
帐号=帐号编号+密码+用户名
位置
帐号记录表
名字
帐号编号
别名
无
描述
唯一确定一个帐号
定义
帐号编号=正整数
位置
帐号记录表
名字
密码
别名
无
描述
帐号的密码
定义
密码=字符串
位置
帐号记录表
名字
用户名
别名
无
描述
帐号的用户名字
定义
用户名=字符串
位置
帐号记录表
名字
歌曲
别名
无
描述
描述歌曲的属性
定义
歌曲=歌曲编号+歌曲的存放路径+歌曲名字+歌手编号+歌曲类型+歌曲语言
位置
歌曲信息记录表
图10歌曲数据定义
名字
歌曲编号
别名
无
描述
确定唯一首歌曲
定义
歌曲编号=正整数
位置
歌曲记录
图11歌曲编号数据定义
名字
歌曲的存放位置
别名
无
描述
描述歌曲所在的文件夹
定义
歌曲的存放位置=磁盘中的路径格式
位置
歌曲记录
图12歌曲存放位置数据定义
名字
歌曲名字
别名
无
描述
描述歌曲的名字
定义
歌曲名字=字符串+‘.’+音频文件扩展名
位置
歌曲记录
图13歌曲名字数据定义
名字
曲风类型
别名
无
描述
描述歌曲的曲风类型
定义
曲风类型={流行音乐|民族音乐|摇滚音乐|爵士音乐}
位置
歌曲记录
图14曲风类型数据定义
名字
歌曲语言
别名
无
描述
描述歌曲的演唱语言种类
定义
歌曲类型={粤语|国语|英语|日语|韩语}
位置
歌曲记录
图15歌曲语言数据定义
名字
歌手
别名
无
描述
描述歌手的信息
定义
歌手=歌手编号+歌手名字+所属地区+性别
位置
歌手信息记录表
图16歌手数据定义
名字
歌手编号
别名
无
描述
唯一确定一个歌手的标识符
定义
歌手编号=字符串
位置
歌手记录
图17歌手编号数据定义
名字
歌手名字
别名
无
描述
描述歌手的名字
定义
歌手名字=字符串
位置
歌手记录
图18歌手名字数据定义
名字
所属地区
别名
无
描述
描述歌手工作的地方
定义
所属地区=字符串
位置
歌手记录
图19所属地区数据定义
名字
性别
别名
无
描述
描述歌手的性别
定义
性别={男|女}
位置
歌手记录
图20性别数据定义
2概念设计
2.1局部视图设计
对需求分析阶段收集到的数据按照E-R模型的要求进行分类,组织,形成实体,实体的属性,标识实体的码,确定实体之间的联系类型(1:
1,1:
n,m:
n),设计分E-R图。
n1
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设计师之路】,电子工业出版社