c语言课程设计ktv点歌系统Word文件下载.docx
《c语言课程设计ktv点歌系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《c语言课程设计ktv点歌系统Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。
三、课程设计要求
1.程序质量:
●贯彻结构化的程序设计思想。
●用户界面友好,功能明确,操作方便。
●用户界面中的菜单至少应包括:
“读取”、“查看”、“删除”、“退出”4项。
●代码应适当缩进,并给出必要的注释,以增强程序的可读性。
2.课程设计说明书:
课程结束后,上交课程设计说明书和源程序。
课程设计说明书的格式和内容参见提供的模板。
四、指导教师和学生签字
指导教师:
________学生签名:
________
五、成绩
六、教师评语
一、需求分析
根据任务书给定的“课程设计内容”和“课程设计要求”作如下的需求分析。
该系统是一个常用的ktv点歌系统,可以让用户根据自己的喜好进行添加、查看、删除等操作。
系统应该具有便捷、稳定、功能齐全的特点。
1.便捷性分析
系统管理的歌曲涉及到歌曲的各种信息,数据量较大且是一种基础性数据,能够为用户提供许多快捷操作,且操作方便。
2.稳定性分析
该系统比较稳定,也比较人性化,只要是用户的合理操作,系统都应给出合理正确的回应,而不是出现令用户感到意外的系统错误或系统崩溃。
3.主要功能分析
〔1〕歌曲的添加:
允许用户输入添加歌曲的数量、歌曲名、歌手名、专辑名、歌曲流派。
同时,系统会自动把添加歌曲信息保存下来。
用户由于疏忽录入的非法数据,能够及时提示并更正。
〔2〕歌曲的查看:
用户可以根据自己的需求,输入歌曲名、歌手名、专辑名、歌曲流派中的一项或几项其查看自己想要的歌曲。
〔3〕歌曲的删除:
用户在查看歌曲之后,可以根据自己的喜好,删除系统原有的歌曲。
用户只需输入歌曲名就可以删除歌曲。
删除之后系统自动更新歌曲库。
二、设计分析
主要有5个功能模块,每个模块对应一个C语言自定义函数。
这些函数原型及其功能简述如下:
1、程序总体结构图
图1程序总体结构图
2、主要功能模块框图
〔1〕读取歌曲函数choice
图2读取流程图
〔2〕添加歌曲函数add
图3添加流程图
〔3〕删除歌曲函数dele
图4删除流程图
三、主要界面截图
图1程序主界面
图2数据修改界面
四、技术要点
1、结构体的应用
用结构体来定义描述歌曲编号、歌曲名、歌手名、专辑名、歌曲流派。
具体的定义如下:
structsong_info{
intsongnum;
charsongname[15];
charsongername[15];
charablumname[15];
chartype[10];
};
所定义的结构体主要用于定义数组。
2、文件操作
包括了文件的写入和读取两个方面。
文件的写入操作,用于保存录入的歌曲的有关数据,也用于保存所修改的数据。
3、多分支选择结构
在主函数中使用switch语句,利用自定义函数,实现查看、添加、删除歌曲的功能。
五、个人总结
刚开始做的时候,我基本上摸不找头脑,不知道从何处下手。
后来,我通过查资料和请教老师,慢慢地学会许多,开始自己做。
虽然这期间,我遇到了很多很多的困难,但我收获很多。
这次课程设计使我对C语言有了更深的理解,使我知道原来日常生活中的许多系统都是以C语言为基础的,C语言在生产生活应用十分广泛。
同时他也锻炼我的逻辑思维能力,提高我解决实际问题的能力。
六、参考文献
1谭浩强.C程序设计.北京:
清华大学出版社,2005
七、源程序
#include<
stdio.h>
stdlib.h>
conio.h>
string.h>
#defineN30
inti,j,k;
FILE*fp;
chartype[10];
typedefstructsong_infoSINFO;
SINFO*pso;
voidchoice(SINFO*pso){
chara[15];
intq,t;
FILE*fp;
printf("
请输入要查看歌手的名字:
"
);
scanf("
%s"
a);
fp=fopen("
d:
\\song.txt"
"
rt"
if(fp==NULL)
{
printf("
thefile:
song.txtnotfound!
exit(-1);
}
for(k=0;
(!
feof(fp));
k++)
fread(&
pso[k],sizeof(SINFO),1,fp);
fclose(fp);
t=0;
for(q=0;
q<
k;
q++)
if(!
strcmp(a,pso[q].songername))
if(t==0)
printf("
该歌手有以下歌曲:
\n"
t++;
%s\n"
pso[q].songname);
if(t==0)
本系统还无该歌手歌曲,请增添!
}
voidadd(SINFO*pso){
a+"
请你输入要增添歌曲的数量:
%d"
&
j);
fflush(stdin);
for(i=0;
i<
j;
i++){
这是要增添的第%d首歌的信息:
i+1);
歌曲编号是:
scanf("
pso[i].songnum);
fflush(stdin);
歌曲名字是:
gets(pso[i].songname);
歌手名字是:
gets(pso[i].songername);
专辑的名字是:
gets(pso[i].ablumname);
歌曲流派是:
gets(pso[i].type);
system("
cls"
fwrite(&
pso[i],sizeof(SINFO),1,fp);
歌曲增添成功!
voidshow(SINFO*pso){
所有歌曲信息如下:
!
feof(fp);
{
%s%15s%20s%15s%15s"
歌曲编号"
歌名"
歌手"
专辑"
歌曲流派"
k-1;
i++)
{printf("
%03d%20s%20s%15s%15s"
pso[i].songnum,pso[i].songname,pso[i].songername,pso[i].ablumname,pso[i].type);
voiddele(SINFO*pso){
intq;
请输入要删除歌曲的名字:
if(!
strcmp(a,pso[q].songname))
memset(&
pso[q],0,sizeof(SINFO));
fp=fopen("
w+"
for(k=0;
k<
q;
fwrite(&
fclose(fp);
删除信息成功!
voidout(){
chara;
确认退出系统?
(y/n)"
%c"
a);
if('
y'
==a)
exit(0);
main(){
SINFO*pso;
loop:
欢送使用KTV选歌系统\n"
1.选歌\n"
2.新增歌曲\n"
3.查看歌曲信息\n"
4.删除歌曲\n"
5.退出\n"
请选择功能:
"
i);
pso=(SINFO*)malloc(N*sizeof(SINFO));
memset(pso,0,(N*sizeof(SINFO)));
switch(i){
case1:
choice(pso);
gotoloop;
break;
case2:
add(pso);
case3:
show(pso);
case4:
dele(pso);
case5:
out();
default:
printf("
输入错误!
请重新选择!
}