1、点歌管理系统数据库设计1 需求分析1.1 整体功能描述点歌管理系统可以存储歌曲,并按各种不同方式查找歌曲,如歌曲名,歌手名,歌曲类型,歌曲语言等等,并可以以便对歌曲库进行管理,如歌曲增长和删除。详细功能需求如下。歌曲管理:(1) 添加歌曲:顾客可以在系统中增长歌曲,在增长之前必要填写完整歌曲属性。(2) 删除歌曲:顾客可以删除系统中已经存在歌曲。(3) 修改歌曲属性:顾客可以自由修改系统中已经存在歌曲属性。歌曲属性涉及:歌曲存储位置,歌曲名字,歌手名字,曲风类型,歌曲语言。歌手信息管理:(4) 添加歌手:顾客可以向系统增长歌手信息。(5) 删除歌手:顾客可以删除系统中歌手信息。(6) 修改歌手
2、信息:顾客可以修改歌手信息。歌手信息涉及:歌手名字,所属地区,性别。查找歌曲方面:(7) 按歌曲名查找:顾客给定歌曲名字,系统返回歌曲信息。(8) 按歌手名查找:顾客给定歌手名字,系统返回该歌手所有歌曲。(9) 按歌曲类型查找:顾客给定歌曲类型,系统返回该类型所有歌曲。(10) 按歌曲语言类型查找:顾客给定歌曲语言类型,系统返回该语言类型所有歌曲。查找歌手方面:(11) 按性别查找:顾客给定歌手性别(男或女),系统返回符合条件歌手信息。(12) 按地区查找:顾客给定歌手所属地区,系统返回符合条件歌手信息。(13) 按名字查找:顾客给定歌手名字,系统返回符合条件歌手信息。系统安全性:(14) 登
3、录系统:系统对顾客身份进行验证,授权顾客才干操作系统。1.2 数据流图(1) 依照系统功能需求,可以画出系统第1层数据流图。业务信息歌手查找参数歌手歌曲歌曲查找参数查找参数查找参数业务信息业务信息顾客歌手管理歌手信息歌曲管理查找歌曲查找歌手歌曲信息图1 点歌管理系统第1层数据流图业务信息(2) 在系统第1层数据流图之后,再画出系统第2层数据流图。顾客接受歌曲信息查找歌曲添加歌曲歌曲信息顾客图2 添加歌曲 歌曲 歌曲 歌曲 歌曲 歌曲不存在 歌曲已存在,添加失败 添加成功信息顾客接受歌曲信息查找歌曲删除歌曲歌曲信息顾客图3 删除歌曲 歌曲 删除歌曲 歌曲 歌曲 歌曲存在 歌曲不存在,删除歌曲失败
4、信息 删除成功信息顾客接受歌曲信息查找歌曲修改歌曲歌曲信息顾客图4 修改歌曲信息 歌曲 歌曲 歌曲 歌曲 歌曲 歌曲不存在,修改失败信息 修改成功信息歌曲信息 歌曲 显示歌曲查找歌曲接受查找参数顾客 查找歌曲参数 查找参数 歌曲 歌曲不存在信息 歌曲顾客图5 修改歌曲信息(3) 以上只是给出了一某些功能数据流图,其他数据图和给出数据流图流程大体相似。1.3数据字典名字帐号别名无描述用于系统身份验证定义帐号 = 帐号编号 + 密码 + 顾客名位置帐号登记表图6 帐号数据定义名字帐号编号别名无描述唯一拟定一种帐号定义帐号编号 = 正整数位置帐号登记表图7帐号编号数据定义名字密码别名无描述帐号密码定
5、义密码 = 字符串位置帐号登记表图8 密码数据定义名字顾客名别名无描述帐号顾客名字定义顾客名 = 字符串位置帐号登记表图9 顾客名数据定义名字歌曲别名无描述描述歌曲属性定义歌曲 = 歌曲编号 + 歌曲存储途径+歌曲名字 + 歌手编号 + 歌曲类型 + 歌曲语言位置歌曲信息登记表 图10 歌曲数据定义名字歌曲编号别名无描述拟定唯一首歌曲定义歌曲编号 = 正整数位置歌曲记录 图11 歌曲编号数据定义名字歌曲存储位置别名无描述描述歌曲所在文献夹定义歌曲存储位置= 磁盘半途径格式位置歌曲记录图12 歌曲存储位置数据定义名字歌曲名字别名无描述描述歌曲名字定义歌曲名字 = 字符串 +.+ 音频文献扩展名位
6、置歌曲记录 图13 歌曲名字数据定义名字曲风类型别名无描述描述歌曲曲风类型定义曲风类型= 流行音乐 | 民族音乐 | 摇滚音乐 | 爵士音乐位置歌曲记录 图14 曲风类型数据定义名字歌曲语言别名无描述描述歌曲演唱语言种类定义歌曲类型= 粤语 | 国语 | 英语 | 日语 | 韩语位置歌曲记录 图15 歌曲语言数据定义名字歌手别名无描述描述歌手信息定义歌手 = 歌手编号 + 歌手名字 + 所属地区 + 性别位置歌手信息登记表图16 歌手数据定义名字歌手编号别名无描述唯一拟定一种歌手标记符定义歌手编号 = 字符串位置歌手记录 图17 歌手编号数据定义名字歌手名字别名无描述描述歌手名字定义歌手名字
7、= 字符串位置歌手记录 图18 歌手名字数据定义名字所属地区别名无描述描述歌手工作地方定义所属地区 = 字符串位置歌手记录 图19 所属地区数据定义名字性别别名无描述描述歌手性别定义性别 = 男 | 女 位置歌手记录 图20 性别数据定义2 概念设计2.1 局部视图设计对需求分析阶段收集到数据按照E-R模型规定进行分类,组织,形成实体,实体属性,标记实体码,拟定实体之间联系类型(1:1,1:n,m:n),设计分E-R图。歌曲歌手演唱图21 E-R实体图 n 1歌曲歌曲编号歌曲存储位置歌手编号歌曲名字曲风类型歌曲语言图22 歌曲属性图歌手歌手编号所属地区性别歌手名字 图23 歌手属性图帐号帐号编
8、号密码顾客名 图 24 帐号属性图3 逻辑设计3.1 E-R图向关系模型转换在这个阶段,逻辑设计重要任务就是要将上一步得到E-R图向关系模型转换,将实体和实体型间联系转换为关系模式,拟定这些模式属性和码。将E-R图转换后,得到关系模式如下,画有下划线为主码:歌曲(歌曲编号,歌曲名字,歌曲存储位置,曲风类型编号,歌曲语言编号)曲风类型(曲风类型编号,名字)歌曲语言(歌曲语言编号,名字)歌手(歌手编号,歌手名字,所属地区,性别)演唱(歌曲编号,歌手编号)帐号(帐号编号,顾客名,密码)一种视图:视图_歌曲(歌曲名字,歌曲存储位置,曲风类型名字,歌曲语言名字,歌手名字)3.2 设计DBMS数据字典将得
9、到关系模式转换为MS SQL 所支持数据模型,所得到表格如下。图25 帐号登记表图26 歌手登记表图27 歌曲登记表图28 曲风类型登记表图29 歌曲语言种类登记表图30 演唱关系表图31 “视图_歌曲” 视图3.2 约束条件本系统选取数据库管理系统为MS SQL 。(1) 演唱关系表主键为(songid,singerid)同步songid为SONG (songid)外码,singerid为SINGER(singerid)外码。(2) 所关于系表主键都为自动递增正整数,演唱关系表主键例外。(3) SONG(style)为SONGSTYLE(sytleid)外码,SONG(lanStyle)为S
10、ONGLANGUANGE(languageid)外码。(4) SONG(sex)只能为M或者F。(5) SONGLANGUAGE(name)值唯一。(6) SONGSTYLE(name)值唯一。4 物理设计本系统选取数据库管理系统为MS SQL 。数据库存取办法,存取途径没有特殊规定,按照系统默认值来设立。索引,聚族,日记,备份等参数,由于本数据库没有特殊规定,都没设立。5 数据库实行阶段由于时间上限制,本人只是实现了系统两个功能,一种是“系统登录”,另一种是就是“添加歌手”.5.1“添加歌手”功能 代码#pragma once/SingerMan.h/ CSingerMan 命令目的#inc
11、lude class CSingerMan :public CObjectpublic:CSingerMan();CSingerMan(CString name,CString address,CString sex);static bool AddSinger(CSingerMan& singer ,CDatabase& db);virtual CSingerMan();public:CString m_singerName;CString m_address;CString m_sex;CString m_singerId;/ SingerMan.cpp :实现文献/#include st
12、dafx.h#include SingSong.h#include SingerMan.h/ CSingerManCSingerMan:CSingerMan()CSingerMan:CSingerMan( CString name,CString address,CString sex )m_singerName=name;m_address=address;m_sex=sex;CSingerMan:CSingerMan()bool CSingerMan:AddSinger( CSingerMan& singer ,CDatabase& db )if(!db.IsOpen()/ failAfx
13、MessageBox(_T(数据库连接已经断开,无法执行操作!n请重新登录!);return false;CRecordset rs(&db);CString strSql;strSql.Format(_T(insert into SINGER (name,address,sex ) values (%s,%s,%s),singer.m_singerName,singer.m_address,singer.m_sex);db.ExecuteSQL(strSql);return true;/ SingerAddDlg.cpp :实现文献/#include stdafx.h#include Sin
14、gSong.h#include SingerAddDlg.h#include SingerMan.h#include extern CDatabase gal_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:CSingerA
15、ddDlg()void CSingerAddDlg: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:OnBnCli
16、ckedOk)END_MESSAGE_MAP()/ CSingerAddDlg 消息解决程序void CSingerAddDlg:OnBnClickedOk()/ TODO:在此添加控件告知解决程序代码UpdateData(true);CButton* p=(CButton*)GetDlgItem(IDC_RADIO_MALE);if(!p-GetState()m_sex=_T(F);CSingerMan singer(m_singerName,m_address,m_sex);if(CSingerMan:AddSinger(singer,gal_db)MessageBox(_T(成功添加歌曲
17、!),_T(成功信息);OnOK();elseMessageBox(_T(添加歌曲失败!),_T(失败信息);BOOL CSingerAddDlg:OnInitDialog()CDialog:OnInitDialog();/ TODO: 在此添加额外初始化CButton* p=(CButton*)(GetDlgItem(IDC_RADIO_MALE);p-SetCheck(TRUE);m_sex=_T(M);return TRUE; / return TRUE unless you set the focus to a control/ 异常:OCX 属性页应返回FALSE5.2程序运营图图3
18、2 系统初始界面图33系统登录图34 添加歌手5 自我评价与总结总来说,这次课程设计难度比较大。一种课程设计,是对该们课程一次实践,是一次详细动手能力考验,是理论联系实践一种过程。数据库系统原理是一门比较难课程,课程设计自然而然就比较难了。做这个课程设计时,教师只是给了我一种题目和某些简短需求描述,但是要完毕一种系统设计,这些需求是远远不够。通过在网上搜索资料,去图书馆翻阅文献,最后把功能需求拟定下来了。有了需求描述,接下来几种阶段都是比较好实现,但是到了数据库实行这一步时,就浮现问题了。因素是本人对详细数据库实行不是很理解,是第一次做这个工作。对其中某些名词不是很明白,例如,聚族索引,也不懂得如何科学拟定存取办法,拟定数据库存储构造。这些知识都是实践上知识,感觉课本上学到理论不知如何才干运用到实践当中。总来说,这次课程设计锻炼了我理论结合实践能力,尽管效果不是较好,但是这种能力的确提高了,并且我得到了诸多实践经验。6 参照文献 1王珊编著 【数据库系统简要教程】,高等教诲出版社2王海龙,董智勇等编著 【Visual C+ 6.0设计师之路】,电子工业出版社