您好,欢迎访问三七文档
《程序设计基础综合实验》实验报告1《程序设计基础综合实验》实验报告题目名称:KTV点歌系统班级:CE20400104姓名:叶欣怡学号:1818010012合作者:卓艺暖18180300009日期:2019.5.22《程序设计基础综合实验》实验报告2KTV点歌系统一、选题随着社会的不断发展进步,人们的经济文化水平得到了显著的提高。所以人们在追求物质生活富足之余,对精神文化的需求也不断攀升。尤其是随着当代社会节奏的不断加快,人们在学习工作之余更加渴求用多样化的娱乐方式来陶冶情操、缓解压力。在众多娱乐消费方式中,KTV以其价格合理、花样繁多、受众范围广等特点受到了广泛追捧。为了进一步降低KTV娱乐行业的成本,更好地提升消费者的娱乐体验,在给消费者带来更多实惠便捷的同时为经营者带来更多的利润。我们针对KTV点歌系统的特点和需求,结合以往的开发经验,开发了这样一个操作便捷、界面简单、高效灵活的KTV点歌系统。二、需求分析(一)功能需求为满足用户需求,点歌系统首先应当具备多样便捷的点歌功能。基于系统操作的便捷性和用户群体的习惯性,本系统提供了最传统和便捷的两种检索方式——歌名点歌和歌手名点歌。此外,该点歌系统还应面具备增删歌曲的功能,以便系统管理员更好地开发管理曲库。(二)性能需求1.操作便捷、高效2.占用资源少、对硬件要求低《程序设计基础综合实验》实验报告33.系统安全、稳定4.界面简洁、大方(三)测试用例1.歌名点歌:1.1歌曲存在输入:用户歌名点歌再见输出:《再见》的歌词:我们的照片记录幸福到永远只是再幸福的画面只停格在一瞬间那些最煽情的电影情节都说爱能超越生死离别曾经我们都很坚决爱了就不改变1.2歌曲不存在输入:用户歌名点歌童年输出:未查询到此歌曲2.歌手名点歌2.1曲库中此歌手的歌曲数大于一输入:用户歌手名点歌2输出:《泡沫》的歌词:阳光下的泡沫是彩色的就像被骗的我是幸福的追究什么对错你的谎言基于你还爱我美丽的泡沫虽然一霎花火《程序设计基础综合实验》实验报告4你所有承诺全部都太脆弱2.2曲库中此歌手的歌曲数为一输入:用户歌手名点名田馥甄Yes输出:《小幸运》的歌词原来你是我最想留住的幸运原来我们和爱情曾经靠的那么近那为我对抗世界的决定那陪我淋的雨一幕幕都是你一尘不染的坚定2.3未检索到此歌手输入:用户歌手名点名周杰伦输出:未查询到此歌手3.添加输入:管理员添加歌曲1童年罗大佑池塘边的榕树上知了在声声叫着夏天#输出:曲库文件(KTV.txt)中新增了该歌曲的歌曲名(童年)、歌手名(罗大佑)和歌词文件名(童年.txt),歌词文件(童年.txt)中又存放着歌词“池塘边的榕树上知了在声声叫着夏天”。4.删除输入:管理员删除歌曲1童年输出:曲库文件(KTV.txt)中删除了该歌曲的歌曲名(童年)、歌手名(罗大佑)和歌词文件名(童年.txt),歌词文件(童年.txt)也被删除。《程序设计基础综合实验》实验报告5三、概要设计①设计方案的论证。如:该题目可采用的设计方案有哪些,其优缺点是什么;最终方案选取的依据和原则等;(一)设计方案方案一:关于删除模块,②数据结构的设计。要求给出数据结构的C语言描述,并针对要解决的具体问题做相应说明;③各模块的描述:包括功能、参数、调用关系;④软件结构图:画出整体软件的结构框图。四、详细设计1.歌手名点歌voidFind_singer(intt){inti,j=0,num[100],p,n,m=0;charsinger[max],ch;scanf(%s,singer);FILE*fp;printf(该歌手的歌曲有:\n);for(i=0;it;i++){if(strcmp(x[i].singer,singer)==0)//与结构体中的歌手名进行匹配{num[j]=i;//将匹配到的歌曲在结构体中的序号储存在num数组中printf(%d%s\n,++m,x[i].name);//将匹配到的歌曲的歌名输出到屏幕j++;}}if(j==1)//在结构体中检索到一首该歌手的歌曲{printf(请问这是您想要查找的歌曲吗?\n);printf(1.Yes2.No\n);《程序设计基础综合实验》实验报告6printf(请输入1或2:);scanf(%d,&n);if(n==1){p=num[0];//将所选歌曲在结构体中的序号从num数组中取出printf(该歌曲的歌词:\n);if((fp=fopen(x[p].filename,r))==NULL)//打开歌词文件并使fp指向此文件{printf(Cannotfindthisfile!\n);exit(0);}while(!feof(fp))//如果未遇到歌词文件的结束标志{ch=fgetc(fp);//从歌词文件读入一个字符,赋给变量chputchar(ch);//将ch显示到屏幕上}fclose(fp);}}elseif(j1)//在结构体中检索到一首以上该歌手的歌曲{printf(请输入所选歌曲的序号:\n);scanf(%d,&n);p=num[n-1];//将所选歌曲在结构体中的序号从num数组中取出printf(《%s》的歌词:\n,x[p].name);if((fp=fopen(x[p].filename,r))==NULL)//打开歌词文件并使fp指向此文件{printf(Cannotfindthisfile!\n);exit(0);}while(!feof(fp))//如果未遇到歌词文件的结束标志{ch=fgetc(fp);//从歌词文件读入一个字符,赋给变量chputchar(ch);//将ch显示到屏幕上}fclose(fp);}else//未在结构体中检索到该歌手printf(未查询到此歌手!\n);}2.歌曲名点歌voidFind_song(intt)《程序设计基础综合实验》实验报告7{FILE*fp;inti,j,flag=0;charch;charsong[max];scanf(%s,song);getchar();//消化换行符for(i=0;it;i++){if(strcmp(x[i].name,song)==0)//与结构体中的歌名进行匹配{flag=1;j=i;//将该歌曲在结构体中的序号赋值给jbreak;}}if(flag==1)//匹配到该歌曲{printf(《%s》的歌词:\n,x[j].name);if((fp=fopen(x[j].filename,r))==NULL)//打开歌词文件并使fp指向此文件{printf(Cannotfindthisfile!\n);exit(0);}while(!feof(fp))//如果未遇到歌词文件的结束标志{ch=fgetc(fp);//从歌词文件读入一个字符,赋给变量chputchar(ch);//将ch显示到屏幕上}fclose(fp);}else//未匹配到该歌曲printf(未查询到此歌曲!\n);}3.添加voidadd(intnum)//添加歌曲{intn,i,y=0;charstr[MAX],ch,a[9]={.txt},b[max]={0},m='';FILE*fp,*fp1;printf(请输入要添加歌曲的数量:\n);scanf(%d,&n);《程序设计基础综合实验》实验报告8getchar();//消化换行符for(i=0;in;i++){printf(请输入您要添加的第%d首歌曲的信息:\n,i+1);printf(请输入歌曲名:\n);gets(x[num+i].name);//将歌曲名存入结构体printf(请输入歌手名:\n);gets(x[num+i].singer);printf(请输入歌词:(以#结尾)\n);for(y=0;(ch=getchar())!='#';y++)str[y]=ch;getchar();//消化换行符strcpy(b,x[num+i].name);//将歌曲名保存在字符数组中strcpy(x[num+i].filename,strcat(x[num+i].name,a));//将歌曲名加上文件类型后缀作为歌词所在文件名fp=fopen(x[num+i].filename,w);//新建文本文档并打开fputs(str,fp);//将歌词放入文本文档fclose(fp);//关闭歌词文本文档fp1=fopen(KTV.txt,a);//打开KTV.txt,追加内容if(fp1==NULL){printf(cannotopenthefile.\n);exit(0);}fputs(b,fp1);//将歌名存入KTV.txtfputc(m,fp1);fputs(x[num+i].singer,fp1);//将歌手信息存入KTV.txtfputc(m,fp1);fputs(x[num+i].filename,fp1);fprintf(fp1,\n);//将存放歌词的文件名存入KTV.txtfclose(fp1);//关闭文件}printf(添加歌曲成功!\n);}4.删除voiddele(intnum){FILE*fp;charstr[max];inti,j,a,t,flag=0;printf(请输入需要删除歌曲的数量:\n);scanf(%d,&a);getchar();//消化换行符for(j=1;j=a;j++)《程序设计基础综合实验》实验报告9{printf(请输入需要删除的歌曲名%d:\n,j);gets(str);if((fp=fopen(KTV.txt,r))==NULL){printf(Cannotfindthisfile!\n);exit(0);}for(i=0;inum;i++)if(strcmp(x[i].name,str)==0){flag=1;t=i;break;}fclose(fp);if(flag){num--;remove(x[t].filename);//删除歌词文件for(i=t;inum;i++){strcpy(x[i].name,x[i+1].name);strcpy(x[i].singer,x[i+1].singer);strcpy(x[i].filename,x[i+1].filename);}remove(KTV.txt);if((fp=fopen(KTV.txt,w))==NULL){printf(Cannotfindthisfile!\n);exit(0);}for(i=0;inum;i++)fprintf(fp,%s%s%s\n,x[i].name,x[i].singer,x[i].filename);printf(删除成功!\n);fclose(fp);}elseprintf(Notfound!\n);}}五、调试分析《程序设计基础综合实验》实验报告10要求详细写出调试过程中逻辑错误的分析及解决方法。六、使用说明说明运行环境、使用方法。七、测试结果按照选取的测试用例(3组以上)进行测试,对测试结果分析其正确、合理性。附相应截图。八、附录源程序清单,应有必要的注释。其中注释应符合软件设计的基本规范。如有电子版,该部分可省略。
本文标题:KTV点歌系统报告
链接地址:https://www.777doc.com/doc-4687694 .html