C语言技术报告
班级:
学号:
姓名:
项目说明:
1、本程序在 VC环境下调试成功
环境:需安装千千静听到默认路径下,同时安装vc6.0环境
2、本程序完成功能:
同时在屏幕上将解析出的歌词进行实时显示
基本功能实现:
1、读取文件,能正确打印到屏幕上。
2、切割字符串,正确存到一个结构体数组中。
3、能正确判断歌曲的歌名与演唱者,并打印出来。
4、实现模拟时钟的功能。
5、按顺序将歌词输出。
6、能滚动显示歌词。
7、能与时间匹配突出显示歌词的颜。
项目流程:
1、首先将歌词文件内容 通过fopen全部读到一个数组song_word[][]中,然后将歌词内容保存到数组song_word1[][]。
2、通过函数message_song1()判断歌曲的歌名与演唱者,并打印出前4行的歌曲信息。
3、用函数message_song2()和strtok将同一行的歌词和时间一一对应的进行切割,并分别保存在数组lyric[][]和time[][]中,并通过Sleep(1000)将时间标签转换为以s为单位的模拟时钟。
4、在每一秒内对将时钟的时间与歌词前面的时间相比较,如果相等那么就输出当前时间后面的歌词,实现了歌词与时间的同步显示。
5、歌词的前5行依次输出,当歌词大于5行时,用函数MoveText(22,6,20,5,22,5);实现将歌词整块移动并每次显示5行。
7、GoToXY(22,m)和SetText_Color(2)实现将光标定位在当前行并且显示相应的颜,使已显示的歌词变为白,而刚出现的歌词变为相应的颜。
6、在主程序运行时即可启动千千静听
ShellExecute( NULL, NULL, "",".\\LRC\\简单爱.mp3",NULL,1);
代码:
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
#include"console.h"
//跳转到光标指定位置
void GoToXY(int x,int y)
{
HANDLE h1;
COORD pos;
pos.X=x;
pos.Y=y;
h1=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(h1,pos);
}
//屏幕整块移动
//参数:startx、starty:要移动的块的起始坐标
// sizex、sizey:块的大小
// destx、desty: 目标坐标,即要移动到得位置
void MoveText(int startx, int starty, int sizex, int sizey, int destx, int desty)
{
SMALL_RECT rc = {startx, starty,startx+sizex, starty+sizey};
COORD crDest = {destx, desty};
CHAR_INFO chFill;
HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO bInfo;
GetConsoleScreenBufferInfo(hout, &bInfo);
chFill.Attributes = bInfo.wAttributes;
chFill.Char.AsciiChar =' ';
ScrollConsoleScreenBuffer(hout, &rc, NULL, crDest, &chFill);
}
/*
第一个值为背景,第二个值为前景:
0 = 黑 8 = 灰
1 = 蓝 9 = 淡蓝
2 = 绿 A = 淡绿
3 = 湖蓝 B = 淡浅绿
4 = 红 C = 淡红
5 = 紫 D = 淡紫
6 = 黄 E = 淡黄
7 = 白 F = 亮白
*/
//设置接下来终端显示文本的背景和文本颜
简单爱的歌词
void SetText_Color(int color)
{
HANDLE hStdout;
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hStdout,color);
}
void message_song1(char song[4][100])//切割前四行
{
int i;
char delims[]="[:]";
char *result=NULL;
char *sign[4]={"歌名","歌手","制作","专辑"};
for(i=0;i<4;i++)
{
strtok(song[i],delims);
result= strtok(NULL,delims);
printf("%s %s\n",sign[i],result);
}
printf("\n\n");
}
void message_song2(char song1[100][100],char time[100][100] ,char lyric[100][100] )//切割歌词和时间
{
int i,j,k1=0,k2=0,min=0,tsec=0,gsec=0,b=6;
int flag=0,m=5;
char delims1[]="[]";
char *result1=NULL;
for(j=0;song1[j][0]!='\0';j++)
{
result1=
strtok(song1[j],delims1);
for(i=0;result1!=NULL;i++)
{
if(i%2==0)
{
strcpy(time[k1],result1);
result1=strtok(NULL,delims1);
k1++;
}
if(i%2==1)
{
strcpy(lyric[k2],result1);
result1=strtok(NULL,delims1);
k2++;
}
}
}
j=0;
for(i=0;;i++)
{
GoToXY(22,5);
printf("The time is:0%d:%d%d ",min,tsec,gsec);
Sleep(1000);
gsec++;
if(gsec==10)
{
tsec++;
gsec=0;
}
if(tsec==6)
{
min++;
tsec=0;
}
for(j=0;j<50;j++)
{
if((min==time[j][1]-48)&&(tsec==time[j][3]-48)&&(gsec==time[j][4]-48))
{
if(m<10) m+=1;
else m=10;
GoToXY(22,m);
SetText_Color(2);
printf("%s\t\t\t\t\n",lyric[j-1]);
GoToXY(22,m-1);
SetText_Color(7);
printf("%s\t\t\t\t\n",lyric[j-2]);
flag++;
if(flag>=5)
MoveText(22,6,20,5,22,5);
}
}
}
}
void main()
{
FILE*fp;
int i=0;
char time[100][100]={0};
char lyric[100][100]={0};
char infile[1000]={0},song_word[100][100]={0},song_word1[100][100]={0};
发布评论