资源描述
沈 阳 航 空 航 天 大 学
课程设计
学 号
班 级 04070101
姓 名
指导老师
年 9 月 28 日
沈阳航空航天大学
课程设计任务书
学院:自动化学院 专业:测控技术和仪器 班级:04070101
学号: 题目:KTV点歌系统模拟(2)
一、课程设计时间
~第1学期第4周,累计1周,20课时。
二、课程设计内容
请你模范ktv点歌系统,用C语言编写软件完成以下任务:
1.读取功效:从song.txt 文件中读取歌曲信息;
2.查看功效:许可用户浏览所用歌曲,查看某个歌手演唱所用歌曲;
3.删除功效:删除歌曲。
三、课程设计要求
1.程序质量:
l 落实结构化程序设计思想。
l 用户界面友好,功效明确,操作方便。
l 用户界面中菜单最少应包含:“读取”、“查看”、“删除”、“退出”4项。
l 代码应合适缩进,并给出必需注释,以增强程序可读性。
2.课程设计说明书:
课程结束后,上交课程设计说明书和源程序。课程设计说明书格式和内容参见提供模板。
四、指导老师和学生签字
指导老师:________ 学生署名:________
五、成绩
六、老师评语
目录
一、需求分析 1
二、设计分析 2
三、关键界面截图 5
四、技术关键点 7
五、个人总结 8
六、参考文件 8
七、源程序 8
一、 需求分析
依据任务书给定“课程设计内容”和“课程设计要求”作以下需求分析。
该系统是一个常见ktv点歌系统,能够让用户依据自己喜好进行添加、查看、删除等操作。系统应该含有便捷、稳定、功效齐全特点。
1. 便捷性分析
系统管理歌曲包含到歌曲多种信息,数据量较大且是一个基础性数据,能够为用户提供很多快捷操作,且操作方便。
2. 稳定性分析
该系统比较稳定,也比较人性化,只要是用户合理操作,系统全部应给出合理正确回应,而不是出现令用户感到意外系统错误或系统瓦解。
3. 关键功效分析
(1)歌曲添加:许可用户输入添加歌曲数量、歌曲名、歌手名、专辑名、歌曲流派。同时,系统会自动把添加歌曲信息保留下来。用户因为疏忽录入非法数据,能够立即提醒并更正。
(2)歌曲查看:用户能够依据自己需求,输入歌曲名、歌手名、专辑名、歌曲流派中一项或几项其查看自己想要歌曲。
(3)歌曲删除:用户在查看歌曲以后,能够依据自己喜好,删除系统原有歌曲。用户只需输入歌曲名就能够删除歌曲。删除以后系统自动更新歌曲库。
二、设计分析
关键有5个功效模块,每个模块对应一个C语言自定义函数。这些函数原型及其功效简述以下:
1、程序总体结构图
图1程序总体结构图
2、关键功效模块框图
(1)读取歌曲函数choice
图2读取步骤图
(2)添加歌曲函数add
图3 添加步骤图
(3)删除歌曲函数dele
图4删除步骤图
三、关键界面截图
图1 程序主界面
图2 数据修改界面
四、技术关键点
1、结构体应用
用结构体来定义描述歌曲编号、歌曲名、歌手名、专辑名、歌曲流派。具体定义以下:
struct song_info{
int songnum;
char songname[15];
char songername[15];
char ablumname[15];
char type[10];
}; 所定义结构体关键用于定义数组。
2、文件操作
包含了文件写入和读取两个方面。文件写入操作,用于保留录入歌曲相关数据,也用于保留所修改数据。
3、多分支选择结构
在主函数中使用switch语句,利用自定义函数,实现查看、添加、删除歌曲功效。
五、个人总结
刚开始做时候,我基础上摸不找头脑,不知道从何处下手。以后,我经过查资料和请教老师,慢慢地学会很多,开始自己做。即使这期间,我碰到了很多很多困难,但我收获很多。这次课程设计使我对C语言有了更深了解,使我知道原来日常生活中很多系统全部是以C语言为基础,C语言在生产生活应用十分广泛。同时她也锻炼我逻辑思维能力,提升我处理实际问题能力。
六、参考文件
1 谭浩强.C程序设计.北京:清华大学出版社,
七、源程序
#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;
fp=fopen("d:\\song.txt","a+");
printf("请你输入要增添歌曲数量:");
scanf("%d",&j);
fflush(stdin);
for(i=0;i<j;i++){
printf("这是要增添第%d首歌信息:\n",i+1);
printf("歌曲编号是:");
scanf("%d",&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%15s%20s%15s%15s","歌曲编号","歌名","歌手","专辑","歌曲流派");
printf("\n");
for(i=0;i<k-1;i++)
{ printf("%03d%20s%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;
}
}
展开阅读全文