C语言课程设计-KTV点歌系统

  • 需求分析:

1.设计题目:KTV点歌系统模拟(该系统是一个常用的ktv点歌系统,可以让用户根据自己的喜好进行添加、查看、删除等操作。系统应该具有便捷、稳定、功能齐全的特点。)

2.系统功能需求分析:

1.便捷性分析

系统管理的歌曲涉及到歌曲的各种信息,数据量较大且是一种基础性数据,能够为用户提供许多快捷操作,且操作方便。

2.稳定性分析

该系统比较稳定,也比较人性化,只要是用户的合理操作,系统都应给出合理正确的回应,而不是出现令用户感到意外的系统错误或系统崩溃。

3.主要功能分析

(1)歌曲的添加:允许用户输入添加歌曲的数量、歌曲名、歌手名、专辑名、歌曲流派。同时,系统会自动把添加歌曲信息保存下来。用户由于疏忽录入的非法数据,能够及时提示并更正。

(2)歌曲的查看:用户可以根据自己的需求,输入歌曲名、歌手名、专辑名、歌曲流派中的一项或几项其查看自己想要的歌曲。

(3) 歌曲的删除:用户在查看歌曲之后,可以根据自己的喜好,删除系统原有的歌曲。用户只需输入歌曲名就可以删除歌曲。删除之后系统自动更新歌曲库。

  • 概要设计:

主要有5个功能模块,每个模块对应一个C语言自定义函数。

读取歌曲函数choice

添加歌曲函数add

 删除歌曲函数dele

  • 详细设计:
  • 用结构体来定义描述歌曲编号、歌曲名、歌手名、专辑名、歌曲流派。具体的定义如下:
  • struct song. info{
  • int songnum; .
  • char songname[15];
  • char songername[15];char ablumnamee[15];char type[10];
  • }; 所定义的结构体主要用于定义数组。
  • 2、文件操作
  • 包括了文件的写入和读取两个方面。文件的写入操作,用于保存录入的歌曲的有关数据,也用于保存所修改的数据,
  • 3、多分支选择结构,利用自定义函数实现查看,添加,删除歌曲的功能。

 测试结果:程序总体结构图

程序代码

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define N 30
int i,j,k;
FILE *fp;
struct song_info{
	int  songnum;
	char  songname[15];
	char  songername[15];
	char  ablumname[15];
	char  type[10];
};
typedef  struct song_info SINFO;
SINFO *pso;
void choice(SINFO*pso){
char a[15];
	int q,t;
	FILE*fp;
	printf("请输入要查看歌手的名字: ");
		scanf("%s",a);
	fp=fopen(" d:\\song. txt", "rt");
	if (fp==NULL)
	{
		printf("the file :song. txt not found!");
		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++;
			printf("%s\n", pso[q]. songname) ;
		}
	}
if(t==0)
printf(" 本系统还无该歌手歌曲,请增添! \n");

fclose(fp) ;
	}
}
void add(SINFO *pso) 
{
FILE *fp;
scanf ("%d",&j) ;
	printf("请你输入要增添歌曲的数量: ") ;
fp=fopen(" d:\\song. txt", "a+");
fflush(stdin);
for(i=0;i<j;i++) {
printf("这是要增添的第%d首歌的信息:\n", i+1);printf("歌曲编号是:");
scanf("%d\n",&pso[i]. songnum);
fflush(stdin);
printf("歌曲名字是: ");
gets (pso[i]. songname);
fflush(stdin) ;
printf("歌手名字是:");
gets(pso[i]. songername);
fflush(stdin);
printf("专辑的名字是: ");
gets (pso[i]. ablumname) ;
fflush(stdin) ;
printf("歌曲流派是: ");
gets (pso[i].type);
fflush(stdin) ;
system("cls");
fwrite (&pso[i], sizeof (SINFO), 1, fp) ;
}
fclose(fp) ;
printf("歌曲增添成功! \n");
}
void show(SINFO *pso) {
	FILE *fp;
fp=fopen("d:\\song. txt", "rt");
if (fp==NULL)
{
printf("the file :song. txt not found! ");
exit(-1);
}
printf(" 所有歌曲信息如下:  \n");
for(k=0;!feof(fp);k++)
{
fread (&pso[k], sizeof (SINFO), 1, fp) ;
}
fclose(fp) ;
printf("%s%15s620s%15s%15s"," 歌曲编号","歌名","歌手专辑","歌曲流派");
printf("\n");
for(i=0;i<k-1;i++)
{
printf ("%03d%620s%20s%15s%15s",pso[i].songnum,
pso[i].songname,pso[i]. songername,pso[i]. ablumname,pso[i].type);
printf("\n");
}
}
void dele (SINFO *pso){
 char a[15];
int q;
FILE *fp;
printf("请输入要删除歌曲的名字: ");
scanf("%s",a);
fp=fopen(" d:\\song. txt", "rt");
if (fp==NULL)
{
printf("the file :song. txt not found! ");
exit(-1);
}
for(k=0; (!feof (fp));k++)
fread (&pso[k], sizeof (SINFO), 1, fp);
fclose(fp);
for(q=0;q<k;q++)
if(!strcmp (a, pso[q]. songname))
memset (&pso[q],0,sizeof (SINFO));
fp=fopen(" d:\\song. txt", "w+");
for(k=0;k<q;k++)
fwrite (&pso[k], sizeof (SINFO), 1, fp) ;
fclose (fp);
printf("删除信息成功! \n");
}
void out() 
{
char a;
printf("确认退出系统? (y/n)");
scanf(" %c" , &a);
if("y" ==a)
exit(0);
}
main(){
SINFO *pso ;
loop: printf ("欢迎使用KTV选歌系统\n");
printf("1.选歌\n"); 
printf ("2.新增歌曲\n");
printf("3. 查看歌曲信息\n");
printf("4. 删除歌曲\n");
printf("5.退出\n");
printf("请选择功能: ");
scanf("%d", &i);
fflush(stdin);
pso=(SINFO*)malloc(N*sizeof (SINFO));
memset (pso, 0, (N*sizeof (SINFO)));
system("cls");
switch(i) {
case 1:choice (pso) ;
goto loop;
break;
case 2: add(pso) ;
goto loop;
break;
case 3:show(pso) ;
goto loop;
break;
case 4:dele (pso) ;
goto loop;
break ;
case 5:out() ;
goto loop;
break;
default:printf("输入错误!请重新选择! \n");
goto loop;
	}
}

 

 

  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

X-MTing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值