KTV点歌系统.docx
- 文档编号:5643486
- 上传时间:2022-12-30
- 格式:DOCX
- 页数:19
- 大小:41.57KB
KTV点歌系统.docx
《KTV点歌系统.docx》由会员分享,可在线阅读,更多相关《KTV点歌系统.docx(19页珍藏版)》请在冰豆网上搜索。
KTV点歌系统
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结构框图
编号查询
歌名查询
歌手查询
类型查询
KTV点歌系统
歌曲查询
歌曲浏览
歌曲添加
歌曲删除
退出
3.3.2程序流图
开始
选择功能
文件存在
执行功能
结束
F
T
3.3.3模块功能分析及外部设计
●增加歌曲功能:
●浏览歌曲功能;
●删除歌曲功能:
●按歌曲类型查询功能:
●按歌手名查询功能:
●按歌名查询功能
●按歌曲编号查询功能:
●退出:
3.4抽象数据类定义
ADTS_C{
数据对象:
D={ai|ai
数据操作:
R1={ 基本操作: 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"); scanf("%d%s%s%s",&c.num,&c.name,&c.leixing,&c.geshou); fprintf(fp,"%d%s%s%s",c.num,c.name,c.leixing,c.geshou); fclose(fp); menu();} 4.2.1.2流程图 T F 打开歌曲文件 输出请输入歌曲基本信息 关闭文件 输出该文件不存在 输入添加歌曲的信息 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.name,&c.leixing,&c.geshou); printf("%d%s%s%s\n",c.num,c.name,c.leixing,c.geshou); } fclose(fp); menu(); } 4.2.2.2模块流程图 T F 打开歌曲文件 输出所有歌曲信息 关闭文件 输出该文件不存在 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.name,&c.leixing,&c.geshou); if(c.num==bianhao) printf("%d%s%s%s\n",c.num,c.name,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.name,&c.leixing,&c.geshou); if(strcmp(c.name,mingchen)==0) printf("%d%s%s%s\n",c.num,c.name,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.name,&c.leixing,&c.geshou); if(strcmp(c.leixing,leix)==0) printf("%d%s%s%s\n",c.num,c.name,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.name,&c.leixing,&c.geshou); if(strcmp(c.geshou,ges)==0) printf("%d%s%s%s\n",c.num,c.name,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模块流程图 T F 打开歌曲文件 输出对应歌曲信息 关闭文件 输出该文件不存在 选择查找方式 查询模块流程图 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用户手册 查询选项界面 附录2源程序 #include #include #include 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.name,&c.leixing,&c.geshou); fprintf(fp,"%d%s%s%s",c.num,c.name,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.name,&c.leixing,&c.geshou); printf("%d%s%s%s\n",c.num,c.name,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.name,&c.leixing,&c.geshou); if(c.num==bianhao) printf("%d%s%s%s\n",c.num,c.name,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.name,&c.leixing,&c.geshou); if(strcmp(c.name,mingchen)==0) printf("%d%s%s%s\n",c.num,c.name,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.name,&c.leixing,&c.geshou); if(strcmp(c.leixing,leix)==0) printf("%d%s%s%s\n",c.num,c.name,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.name,&c.leixing,&c.geshou); if(strcmp(c.geshou,ges)==0) printf("%d%s%s%s\n",c.num,c.name,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************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- KTV 点歌 系统