KTV点歌系统—歌曲管理查询
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数学与计算机学院
课程设计说明书
课程名称:软件工程课程设计
课程代码:8404131
题目:KTV点歌系统—歌曲管理查询
年级/专业/班:09软件4班
学生姓名:
学号:
开始时间:2011年05月25日
完成时间:2011年06月5日
课程设计成绩:
指导教师签名:年月日
软件工程课程设计任务书
学院名称:数学与计算机学院课程代码:___8404131____
专业:软件工程年级:2009级
一、设计题目
KTV点歌管理系统
二、主要内容
本课程设计完成一KTV自动点歌管理系统,本系统包括歌曲管理和点歌查询界面等功能。
三、具体要求及应提交材料
具体要求:
本课程设计要求学生运用软件工程的思想,严格按照软件生命周期各阶段的目的和任务,完成对系统的分析、设计、编码、及测试。
1.完成系统的需求分析
2.完成系统的设计:
针对分析阶段提出的软件要求,给出实现的方案和具体细节的说明。
(1)导出系统的数据流程图和功能模块图。
(2)设计数据库。
使用MicrosoftAccess创建数据库。
确定数据库中数据表的组成。
确定数据表中字段的构成、主键字段和有关字段的约束条件等。
依靠数据表中主键字段建立数据表之间的关系,并由此建立数据表之间的参照完整性约束。
(3)根据功能确定软件模块组成及调用关系。
(4)确定每个模块的数据结构及算法。
3.编码
建造模块,在可视化编程环境下,按照软件设计要求制作界面和完成对模块的编码,由此使软件设计具体化为软件作品。
4.测试
编写合适的测试用例完成系统的测试工作并分析结果。
5.编写课程设计报告
应提交材料:
1.上交源程序:学生按照课程设计的具体要求所开发的所有源程序(应该放到一个文件夹中);
2.课程设计报告的打印稿和电子稿;
四、主要技术路线提示
1.认真阅读相关知识,完成系统的功能分析和系统设计
2.选用ACCESS作为DBMS
五、进度安排
六、参考资料
[1]张海藩.软件工程导论.北京:清华大学出版社,2004
[2]陈明.实用软件工程基础.北京:清华大学出版社,2003
[3]殷人昆.实用软件工程.北京:清华大学出版社,2003
指导教师签名日期年月日
系主任审核日期年月日
目录
五、进度安排................................... 错误!未指定书签。
六、参考资料................................... 错误!未指定书签。
1前言......................................... 错误!未指定书签。
2需求分析..................................... 错误!未指定书签。
2.1功能分析............................................... 错误!未指定书签。
2.2方案分析............................................... 错误!未指定书签。
3概要设计..................................... 错误!未指定书签。
3.1数据结构............................................... 错误!未指定书签。
3.2逻辑结构与物理结构..................................... 错误!未指定书签。
3.3功能模块划............................................. 错误!未指定书签。
3.4抽象数据类定义......................................... 错误!未指定书签。
4详细设计..................................... 错误!未指定书签。
4.1数据类型定义........................................... 错误!未指定书签。
4.2主要模块内部设计....................................... 错误!未指定书签。
4.2.1tianjia()模块设计................................. 错误!未指定书签。
4.2.2liulan()模块设计.................................. 错误!未指定书签。
4.2.3chaxun()模块设计.................................. 错误!未指定书签。
5实现与调试分析............................... 错误!未指定书签。
5.1实现环境............................................... 错误!未指定书签。
5.2语言选择............................................... 错误!未指定书签。
5.3调试分析............................................... 错误!未指定书签。
6测试分析..................................... 错误!未指定书签。
6.1测试用例............................................... 错误!未指定书签。
6.2测试结果............................................... 错误!未指定书签。
错误!未指定书签。
6.3性能分析............................................... 错误!未指定书签。
7用户手册..................................... 错误!未指定书签。
总结 .......................................... 错误!未指定书签。
参考文献 ...................................... 错误!未指定书签。
附录 .......................................... 错误!未指定书签。
1前言
KTV系统发展至今,已经非常成熟,用户需求不同,方案各异,由此而来的整个系统造价也是相距甚大。
花少量的钱,办尽量多的事。
KTV系统宏观分为有盘系统与无盘系统,有盘系统每点有单独的歌库,造价高且不便于维护。
无盘系统是基于网络版点歌系统的,基本为C/S结构,即由一台服务器(Server)为客户机(Client)并发提供点歌信息和歌曲。
无盘系统客户机用户操作与有盘系统完全相同,但造价经济,宜于维护,且宜于整个KTV系统升级。
2需求分析
2.1功能分析
KTV点歌系统主要分为歌曲的查询与管理,管理主要包括歌曲的添加,删除,分类;查询可以按照歌手查询,歌曲类型查询,歌曲名查询。
添加:根据用户需求管理员为用户添加歌曲的基本信息(包括歌曲编号,歌曲名,歌手等)
删除:管理员对过时的或者错误的歌曲进行删除操作
查询
1.按照歌手查询:根据歌手来分类查找想
要的歌
2.歌曲类型查询:按照歌曲的类型(流行,
民歌,情歌等)查询
3.歌曲名查询:根据名字查询
2.2方案分析
KTV点歌系统可以方便商家更好的对歌曲管理,也方便用户更加快捷的选歌,有极大的便利。
歌曲管理分为歌曲的添加,删除,浏览。
歌曲查询可按照不同的条件查找,给予了用户很大的方便,节约时间。
3概要设计
3.1数据结构
数据元素包括商家管理人员,顾客,歌曲
管理人员:添加,删除歌曲,给歌曲分类
顾客:选择歌曲
歌曲:歌曲编号,歌曲名,歌曲类型,歌手
数据字典:
名字:歌曲
别名:
描述:歌曲=编号+歌曲名+歌曲类型+歌手名
位置:输出到选择界面
系统E-R图
3.2逻辑结构与物理结构
逻辑结构:
通过对上述数据结构的分析,根据KTV自动选歌系统的需求,将以上的E-R图转换为关系模式:
歌曲(编号,歌名,类型,歌手);
物理结构:采用顺序存储的方式存储所有的数据。
3.3功能模块划
3.3.1结构框图
退
开
选
F T
文
执
结束
3.3.3模块功能分析及外部设计
增加歌曲功能:
浏览歌曲功能;
删除歌曲功能:
按歌曲类型查询功能:
按歌手名查询功能:
按歌名查询功能
按歌曲编号查询功能:
退出:
3.4抽象数据类定义
ADTS_C{
数据对象:D={ai|ai<ElemSet,i=1,2,…,n,n>=0}
数据操作:R1={<ai-1,ai>|ai-1,ai<D,i=2,…,n}
基本操作:
voidputout()操作结果:输出用户界面。
intmyread(classins[20])操作结果:输出所有课程的完整信息。
voidmyfind(classins[20])
操作结果:按指定的课程编号输出该课程的完整信息。
intselection(ins)
操作结果:选课,并把选课记录保存在Lessoninfo.txt文件中。
intoutput(ins)操作结果:输出选课记录。
intmymodify(ins)操作结果:修改选课记录。
}ADTS_C
4详细设计
4.1数据类型定义
structgequ
{intnum;//*编号
charname[15];//*名称
charleixing[10];//*类型
chargeshou[15];//*歌手名};
4.2主要模块内部设计
4.2.1tianjia()模块设计
4.2.1.1模块算法
voidtianjia()//*添加歌曲
{voidmenu();
FILE*fp;
structgequc;
if((fp=fopen("gequ.txt","a+"))==NULL)
{printf("cannotopenfile\n");}
printf("\n\tInputgequ'sinformation:\n");
printf("\ttheformatisnumnameleixinggeshou:\n");
menu();}
4.2.1.2流程图
tianjia()模块流程图
4.2.2liulan()模块设计
4.2.2.1模块算法
voidliulan()//*浏览歌曲
{
voidmenu();
FILE*fp;
structgequc;
if((fp=fopen("gequ.txt","r"))==NULL)
{
printf("\nCannotopengequ!\n");
}
for(;!feof(fp);)
{
fscanf(fp,"%d%s%s%s",&c.num,&,&c.leixing,&c.geshou);
printf("%d%s%s%s\n",c.num,,c.leixing,c.geshou);
}
fclose(fp);
menu();
}
4.2.2.2模块流程图
liulan()模块流程图
4.2.3chaxun()模块设计
4.2.3.1模块算法
voidchaxun()//*查询歌曲
{
voidmenu();
FILE*fp;
structgequc;
intbianhao;charmingchen[20];charleix[10];charges[15];
intn;intw=0;
printf("\n\t\tPLEASEENTERANUMBERFROM0TO4!");
printf("\n\n\n\t*******************MENU**************************");
printf("\n\t\t1-按编号查找");
printf("\n\t\t2-按名称查找");
printf("\n\t\t3-按类型查找");
printf("\n\t\t4-按歌手查找");
printf("\n\t\t0-退出");
printf("\n\n\n\t********************************************"); printf("\n\n\n\n\n\n\t\tChoosethenumber,please:");
scanf("%d",&n);
do
{
if(n>4||n<0)
{
printf("\nWrong!inputagain!");
scanf("%d",&n);
}
elsew=1;
}while(w==0);
switch(n)
{
case1: printf("\ninputthebianhaoyouwanttosearch:");
scanf("%d",&bianhao);
if((fp=fopen("gequ.txt","r"))==NULL)
{
printf("\nCannotopengequ!\n");
}
for(;!feof(fp);)
{
fscanf(fp,"%d%s%s%s",&c.num,&,&c.leixing,&c.geshou);
if(c.num==bianhao)
printf("%d%s%s%s\n",c.num,,c.leixing,c.geshou);}break; case2:printf("\ninputthenameyouwanttosearch:");
scanf("%s",mingchen);
if((fp=fopen("gequ.txt","r"))==NULL)
{
printf("\nCannotopengequ!\n");
}
for(;!feof(fp);)
{
fscanf(fp,"%d%s%s%s",&c.num,&,&c.leixing,&c.geshou); if(strcmp(,mingchen)==0)
printf("%d%s%s%s\n",c.num,,c.leixing,c.geshou);}break; case3:printf("\ninputtheleixingyouwanttosearch:");
scanf("%s",leix);
if((fp=fopen("gequ.txt","r"))==NULL)
{
printf("\nCannotopengequ!\n");
}
for(;!feof(fp);)
{
fscanf(fp,"%d%s%s%s",&c.num,&,&c.leixing,&c.geshou);
if(strcmp(c.leixing,leix)==0)
printf("%d%s%s%s\n",c.num,,c.leixing,c.geshou);}break; case4:printf("\ninputthegeshouyouwanttoserch:");
scanf("%s",ges);
if((fp=fopen("gequ.txt","r"))==NULL)
{
printf("\nCannotopengequ!\n");
}
for(;!feof(fp);)
{
fscanf(fp,"%d%s%s%s",&c.num,&,&c.leixing,&c.geshou);
if(strcmp(c.geshou,ges)==0)
printf("%d%s%s%s\n",c.num,,c.leixing,c.geshou);}break;
case0:menu();}
fclose(fp);
menu();
}
voidmenu()
{intn,w=0;
printf("\n\t\tPLEASEENTERANUMBERFROM0TO5!");
printf("\n\n\n\t*******************MENU**************************"); printf("\n\t\t1-歌曲浏览");
printf("\n\t\t2-歌曲添加");
printf("\n\t\t3-歌曲删除");
printf("\n\t\t4-歌曲查询");
printf("\n\t\t0-退出");
printf("\n\n\n\t********************************************"); printf("\n\n\n\n\n\n\t\tChoosethenumber,please:");
scanf("%d",&n);
do
{
if(n>5||n<0)
{
printf("\nWrong!inputagain!");
scanf("%d",&n);
}
elsew=1;
}while(w==0);
switch(n)
{
case1:liulan();break;
case2:tianjia();break;
//*case3:shanchu();break;
case4:chaxun();break;
case0:exit(0);
}
}
4.2.3.2模块流程图
查询模块流程图
5实现与调试分析
5.1实现环境
WindowsXP系统
操作平台MicrosoftVisualC++6.0
5.2语言选择
C语言
5.3调试分析
通过对系统的调试,各个模块基本功能都能实现。
6测试分析
6.1测试用例
输入数据:1(用户界面的功能选项)
预期输出数据:全部歌曲的完整基本信息(包括歌曲编号,歌名,歌曲类型,歌手);
输入数据:2(用户界面的功能选项),4(歌曲编号),改变(歌曲名),流行(歌曲类型),王力宏(歌手);
预期输出数据:全部歌曲的完整基本信息(包括新添加的信息);
输入数据:3(功能选项),(未完成)
输入数据:4(功能选项)
预期输出数据:出现4个选择功能,分别是(1.按歌曲编号查询)(2.按歌曲名查询)(3.按歌曲类型查询)(4.按歌手查询)
6.2测试结果
复制DOS测试过程的窗口内容
功能选项界面
查询选项界面
6.3性能分析
可扩充性要求:
任何软件都有缺陷,对于学生选课系统但学校的需求发生变化时,增加一个新的功能模块,要求系统能够很好地对其进行扩充,既可补充性。
可维护性要求:
当操作系统平台发生变化或者支持软件学生信息管理系统发生变化时,为了适应这些变化必需对系统进行维护,即要求有可维护性。
7用户手册
该模块分为KTV信息浏览,添加,查询模块组成
歌曲浏览:
可以浏览所有歌曲的信息,包括歌曲编号,名称,类型,歌手。
添加:
添加新的歌曲信息,包括歌曲编号,名称,类型,歌手。
歌曲查询:
该模块分为4中查询方式,分别是按歌曲编号,名称,类型,歌手查询,方便快速选歌。
总结
开始做这个的时候感觉无从下手的感觉,然后找了一些相关的书看了下,在网上查了下资料,跟同学们商量了下慢慢开始掌握到大概的思路,然后自己开始边想边做,最后还是勉强做了出来。
通过做这个课程设计加深了对这门课的一个理解,要注重一个过程的学习而不是仅仅一个结果的学习,要不然到时候做不出自己想要的东西。
而且我觉得动手很重要,看着别人的东西感觉很简单,到时候自己去做的时候会是另外一回事情,所以我们应该多多动手实践一下。
总体来说。
做这个课程设计对我来说是有好处的,加深了对所学的理解,当然自己能做出一点东西出来也感觉有成就感的。
通过本次我学到了不少新的东西,也发现了大量的问题,有些在设计过程中已经解决,有些还有待今后慢慢学习。
只要学习就会有更多的问题,有更多的难点,但也会有更多的收获。
参考文献
[1]张海藩.软件工程导论.北京:清华大学出版社,2004
[2]陈明.实用软件工程基础.北京:清华大学出版社,2003
[3]殷人昆.实用软件工程.北京:清华大学出版社,2003
附录
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
structgequ
{
intnum;//*编号
charname[15];//*名称
charleixing[10];//*类型
chargeshou[15];//*歌手名
};
voidtianjia()//*添加歌曲
{
voidmenu();
FILE*fp;
structgequc;
if((fp=fopen("gequ.txt","a+"))==NULL)
{
printf("cannotopenfile\n");
}
printf("\n\tInputgequ'sinformation:\n");
printf("\ttheformatisnumnameleixinggeshou:\n");
scanf("%d%s%s%s",&c.num,&,&c.leixing,&c.geshou); fprintf(fp,"%d%s%s%s",c.num,,c.leixing,c.geshou); fclose(fp);
menu();
}
voidliulan()//*浏览歌曲
{
voidmenu();
FILE*fp;
structgequc;
if((fp=fopen("gequ.txt","r"))==NULL)
{
printf("\nCannotopengequ!\n");
}
for(;!feof(fp);)
{
fscanf(fp,"%d%s%s%s",&c.num,&,&c.leixing,&c.geshou); printf("%d%s%s%s\n",c.num,,c.leixing,c.geshou);
}
fclose(fp);
menu();
}
voidchaxun()//*查询歌曲
{
voidmenu();
FILE*fp;
structgequc;
intbianhao;charmingchen[20];charleix[10];charges[15];
intn;intw=0;
printf("\n\t\tPLEASEENTERANUMBERFROM0TO4!");
printf("\n\n\n\t*******************MENU**************************"); printf("\n\t\t1-按编号查找");
printf("\n\t\t2-按名称查找");
printf("\n\t\t3-按类型查找");
printf("\n\t\t4-按歌手查找");
printf("\n\t\t0-退出");
printf("\n\n\n\t********************************************"); printf("\n\n\n\n\n\n\t\tChoosethenumber,please:");
scanf("%d",&n);
do
{
if(n>4||n<0)
{
printf("\nWrong!inputagain!");
scanf("%d",&n);
}
elsew=1;
}while(w==0);
switch(n)
{
case1: printf("\ninputthebianhaoyouwanttosearch:");
scanf("%d",&bianhao);
if((fp=fopen("gequ.txt","r"))==NULL)
{
printf("\nCannotopengequ!\n");
}
for(;!feof(fp);)
{
fscanf(fp,"%d%s%s%s",&c.num,&,&c.leixing,&c.geshou);
if(c.num==bianhao)
printf("%d%s%s%s\n",c.num,,c.leixing,c.geshou);}break; case2:printf("\ninputthenameyouwanttosearch:");
scanf("%s",mingchen);
if((fp=fopen("gequ.txt","r"))==NULL)
{
printf("\nCannotopengequ!\n");
}
for(;!feof(fp);)
{
fscanf(fp,"%d%s%s%s",&c.num,&,&c.leixing,&c.geshou); if(strcmp(,mingchen)==0)
printf("%d%s%s%s\n",c.num,,c.leixing,c.geshou);}break; case3:printf("\ninputtheleixingyouwanttosearch:");
scanf("%s",leix);
if((fp=fopen("gequ.txt","r"))==NULL)
{
printf("\nCannotopengequ!\n");
}
for(;!feof(fp);)
{
fscanf(fp,"%d%s%s%s",&c.num,&,&c.leixing,&c.geshou); if(strcmp(c.leixing,leix)==0)
printf("%d%s%s%s\n",c.num,,c.leixing,c.geshou);}break; case4:printf("\ninputthegeshouyouwanttoserch:");
scanf("%s",ges);
if((fp=fopen("gequ.txt","r"))==NULL)
{
printf("\nCannotopengequ!\n");
}
for(;!feof(fp);)
{
fscanf(fp,"%d%s%s%s",&c.num,&,&c.leixing,&c.geshou); if(strcmp(c.geshou,ges)==0)
printf("%d%s%s%s\n",c.num,,c.leixing,c.geshou);}break; case0:menu();}
fclose(fp);
menu();
}
voidmenu()
{intn,w=0;
printf("\n\t\tPLEASEENTERANUMBERFROM0TO5!");
printf("\n\n\n\t*******************MENU**************************"); printf("\n\t\t1-歌曲浏览");
printf("\n\t\t2-歌曲添加");
printf("\n\t\t3-歌曲删除");
printf("\n\t\t4-歌曲查询");
printf("\n\t\t0-退出");
printf("\n\n\n\t********************************************"); printf("\n\n\n\n\n\n\t\tChoosethenumber,please:");
scanf("%d",&n);
do
{
if(n>5||n<0)
{
printf("\nWrong!inputagain!");
scanf("%d",&n);
}
elsew=1;
}while(w==0);
switch(n)
{
case1:liulan();break;
case2:tianjia();break;
//*case3:shanchu();break;
case4:chaxun();break;
case0:exit(0);
}
}
voidmain()
{
menu();
}。