这是一个效果图:
由于本人水平有限,和大家交流下:
#include "main.h"
/******************************************************/
int main()
{
LTM *head=NULL;
char *fp=0;
char *name=NULL;
char *str[100];
int tim;
int x,y;
int sec=0,min=0;
unsigned long int num;
ShellExecute( NULL, NULL, "TTPlayer.exe",".\\简单爱.mp3",NULL,1);
name=open_file(&num,fp);
head=strtok1(name,str);
while(1)
{
get_time = time(NULL);
local=localtime(&get_time);
if (user_time != get_time)
{
// GoToXY(5,6);
// printf("本地时间:the week:%02d 20%02d-%02d-%02d %02d:%02d:%02d\r",local->tm_wday,local->tm_year-100,local->tm_mon+1,local->tm_mday,local->tm_hour,local->tm_min,local->tm_sec);
user_time = get_time;
}
if (sec++>=59)
{
sec=0;
min++;
if (min>=60)
{
min=0;
}
}
whereXY(&x,&y);
GoToXY(5,6);
//获取电脑的本地时间
printf("本地时间:the week:%02d 20%02d-%02d-%02d %02d:%02d:%02d\r",local->tm_wday,local->tm_year-100,local->tm_mon+1,local->tm_mday,local->tm_hour,local->tm_min,local->tm_sec);
GoToXY(15,7);
printf("the time:%02d:%02d\r", min,sec);
Sleep(960);
GoToXY(15,9);
SetText_Color(4);
tim=min*60+sec;
link_search(head,tim);
// GoToXY(x,y);
}
return 0;
}
/****************************************************/
#include "Open_file.h"
/*********************打开文件***************************************/
char * open_file(unsigned long int * length,char *src_name)
{
FILE *fp;
unsigned long int size;
char *str;
if (!(fp=fopen(".\\简单爱.lrc","rb")))
{
perror("open");
}
// printf("success\n");
fseek(fp ,0,SEEK_END);
size=ftell(fp);
*length=size;
rewind(fp);
str=(char *)malloc(size);
if(fread(str,size,1,fp)==0)
{
printf("read from fp fail\n");
return NULL;
}
fclose(fp);
return str;
}
/*****************************************************/
#include "strtok.h"
extern char *msg_done[100];
/********************************************************************/
LTM * strtok1(char *msg_src)
{
LTM *head=NULL,*pi;
char *src;
int time1;
char *msg_done1[100];
int i=0;
int line;
int count=0;
int time_num=6;
src=msg_src;
msg_done[i++]=strtok(src,"\n");
while((msg_done[i++]=strtok(NULL,"\n"))!=NULL)
count++ ;
line=count;
//////////////////////////////////////////////////////////////
printf("制作人: QiZheGuang\n");
*(msg_done[0]+35)='\0';
printf("歌名:\t\t%s\n",(msg_done[0]+4));
*(msg_done[1]+10)='\0';
printf("歌手:\t\t%s\n",(msg_done[1]+4));
*(msg_done[2]+10)='\0';
printf("专辑:\t\t%s\n",(msg_done[2]+4));
*(msg_done[3]+10)='\0';
printf("制作:\t\t%s\n\n\n",(msg_done[3]+4));
/////////////////////////////////////////////////////////////
for (i=4;i {
int count1=0;
int k=0;
int j=0;
msg_done1[j++]=strtok(msg_done[i],"]");
//////////////////////////////////////////////////////////////////////////////////
/* if(*msg_done1[j]=='[')
{
msg_time[count2++]=atoi(msg_done1[j]+1)*60+atoi(msg_done1[j]+4); //转换时间
}
j++;
*/
//////////////////////////////////////////////////////////////////////////////////
while((msg_done1[j++]=strtok(NULL,"]"))!=NULL)// 解析每一行的时间
count1++;
/////////////////////////////////////////////////////////////////////////////////
// printf("%d\n",count1);
// printf("%s\n",msg_done1[j]);
/* if (*msg_done1[j]=="[")
{
msg_time[count2++]=atoi(msg_done1[j]+1)*60+atoi(msg_done1[j]+4); //转换时间
printf("time=%d\n",msg_time[count2]);
}
j++;
*/
/********************这种方法比较笨,导致代码冗余,另一种办法简单写了下,屏蔽的就是**********************************/
for(j=0;j {
if (2==count1)
{
time1=atoi(msg_done1[j]+1)*60+atoi(msg_done1[j]+4); //转换时间
pi=(LTM *)malloc(sizeof(LTM));
pi->time=time1;
strcpy(pi->name,msg_done1[j+2]);
head=link_insert(head,pi);
j++;
time1=atoi(msg_done1[j]+1)*60+atoi(msg_done1[j]+4); //转换时间
pi=(LTM *)malloc(sizeof(LTM));
pi->time=time1;
j++;
strcpy(pi->name,msg_done1[j]);
head=link_insert(head,pi);
break;
}
if (3==count1)
{
time1=atoi(msg_done1[j]+1)*60+atoi(msg_done1[j]+4); //转换时间
pi=(LTM *)malloc(sizeof(LTM));
pi->time=time1;
strcpy(pi->name,msg_done1[j+3]);
head=link_insert(head,pi);
j++;
time1=atoi(msg_done1[j]+1)*60+atoi(msg_done1[j]+4); //转换时间
pi=(LTM *)malloc(sizeof(LTM));
pi->time=time1;
strcpy(pi->name,msg_done1[j+2]);
head=link_insert(head,pi);
j++;
time1=atoi(msg_done1[j]+1)*60+atoi(msg_done1[j]+4); //转换时间
pi=(LTM *)malloc(sizeof(LTM));
pi->time=time1;
j++;
strcpy(pi->name,msg_done1[j]);
head=link_insert(head,pi);
break;
}
time1=atoi(msg_done1[j]+1)*60+atoi(msg_done1[j]+4); //转换时间
pi=(LTM *)malloc(sizeof(LTM));
pi->time=time1;
j++;
strcpy(pi->name,msg_done1[j]);
head=link_insert(head,pi);
/*****************************************************************************/
}
}
/*
for (k=0;k {
pi=(LTM *)malloc(sizeof(LTM);
pi->time=msg_time[k];
pi->name=msg_done1[j-1];
}
*/
return head;
}
///////////////////////////////////////////////////////////////////////
#include "link_int.h"
/********************插入链表*************************/
LTM * link_insert(LTM * head,LTM * pi)
{
LTM * pf,* pb;
pb=pf=head;
if(head==NULL)
{
head=pi;
head->next=NULL;
return head;
}
//查找第一个num 比pi 的num 大的结点pb
while((pi->time >= pb->time)&&(pb->next!=NULL))
{
pf=pb;// pf保存pb的位置
pb=pb->next;// pb 指向下一个结点
}
if(pi->time <= pb->time)
{
if(pb==head)// 插在头结点的前面
{
pi->next=head;
head=pi;
}
else
{
pi->next=pb;
pf->next=pi;
}
}
else//原先链表中没找到比pi的num 大的结点,插在尾端
{
pb->next=pi;
pi->next=NULL;
}
return head;
}
/****************************************************************/
#include "link_sch.h"
extern char *msg_done[100];
/********************搜索链表**********************/
LTM * link_search(LTM * head,int tim)
{
LTM * pb=head;
int i;
// int m=6;
while(pb!=NULL)
{
if(pb->time==tim)
{
system("cls");
GoToXY(0,0);
SetText_Color(7);
printf("制作人: QiZheGuang\n");
*(msg_done[0]+35)='\0';
printf("歌名:\t\t%s\n",(msg_done[0]+4));
*(msg_done[1]+10)='\0';
printf("歌手:\t\t%s\n",(msg_done[1]+4));
*(msg_done[2]+10)='\0';
printf("专辑:\t\t%s\n",(msg_done[2]+4));
*(msg_done[3]+10)='\0';
printf("制作:\t\t%s\n\n\n",(msg_done[3]+4));
// GoToXY(15,6);
// printf("the time:%02d:%02d\r", min,sec);
for(i=0;i<6;i++)
{
if (i==0)
// if(m==6)
{
GoToXY(12,i+9);
SetText_Color(7);
printf(">>");
}
else
SetText_Color(i);
GoToXY(15,i+9);
printf("%s\n",pb->name);
pb=pb->next;
if(pb==NULL)
break;
}
break;
}
pb=pb->next;
}
return 0;
}
/*************************************************/
#include "console.h"
#include
//获取当前光标位置,并存放到变量 x,y中
void whereXY(int *x,int *y)
{
HANDLE h1;
CONSOLE_SCREEN_BUFFER_INFO scrInfo;
h1=GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(h1,&scrInfo);
*x=scrInfo.dwCursorPosition.X;
*y=scrInfo.dwCursorPosition.Y;
}
//跳转到光标指定位置
void GoToXY(int x,int y)
{
HANDLE h1;
COORD pos;
pos.X=x;
pos.Y=y;
h1=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(h1,pos);
}
/*
第一个值为背景色,第二个值为前景色:
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);
}