c语言 文件 添加一条信息,求助一下,关于C语言 文件操作的小问题,如何删除文件内的一条信息...

[C] 纯文本查看 复制代码#include

#include

#include

/****************************************** 所有数据结构定义 *******************************************/

typedef struct data

{

char num[5]; //歌曲编号

char songname[21]; //歌曲名

char writer[21]; //曲作者

char singer[21]; //歌手

char strokenum[3]; //歌曲笔划

char type[9]; //歌曲类型

char initsinger[2]; //歌手名字首字母

char initwriter[2]; //曲作者名字首字母

}DATA; //DATA为此结构体变量的类型名

/****************************************** 所有功能函数声明 *******************************************/

void NewSong(char*); //1.歌曲信息输入

void BrowseSong(char*); //2.歌曲信息浏览

void ModifySong(char*); //3.歌曲信息修改

void DeleteSong(char*); //4.歌曲信息删除

void Writer(); //5.曲作者名字的字母顺序

void Singer(); //6.歌手名字的字母顺序

void StrokeNum(); //7.歌曲名笔划排序

void SongType(); //8.歌曲类别

void SongNum(); //9.歌曲编号

int Choose(int); //10.选择函数

int JudgeNum(char*); //11.判断是否为数字

int JudgeDaxie(char*); //12.判断是否为大写字母

/****************************************** 所有功能函数定义 *******************************************/

void NewSong(char *fn)

{

DATA d1[100]; //1000条歌曲信息

int i = 0, a = 0, j, k, ch1, ch2, ch3;

char ss;

char numx[10], songx[50], writerx[50], singerx[50], strokex[10], initw[10], inits[10];

char typex[6][9] = { "民歌","美声","戏曲" ,"流行乐","外语歌曲","其他" };

FILE *fp;

if ((fp = fopen(fn, "a+")) == NULL) exit(0); //打开文件

do

{

mark0:

system("cls");

printf("******************** 添加新歌曲信息 ********************\n\n");

printf("请输入歌曲编号(4位数字):");

scanf("%s", numx);

getchar();

system("cls");

if ((strlen(numx) != 4)||(JudgeNum(numx)==0))//检查合法性

{

printf("编号格式错误,请按回车键后,重新输入编号!");

scanf("%c", &ss);

fflush(stdin);//清空输入缓存

goto mark0;

}

rewind(fp);//使位置指针fp重返回文件的开头

for (k = 0; feof(fp) == 0; k++) //判断文件指针fp在其所指的文件末

{

fscanf(fp, "歌曲编号:%s\t 歌曲名称:%s\t 作曲者:%s\t 曲作首:%s\t 歌手:%s\t 歌手首:%s\t 歌曲笔划:%s\t 歌曲类型:%s\t \n", d1[k].num, d1[k].songname, d1[k].writer, d1[k].initwriter, d1[k].singer, d1[k].initsinger, d1[k].strokenum, d1[k].type);

//printf("歌曲编号:%s\t 歌曲名称:%s\t 作曲者:%s\t 曲作首:%s\t 歌手:%s\t 歌手首:%s\t 歌曲笔划:%s\t 歌曲类型:%s\t \n", d1[k].num, d1[k].songname, d1[k].writer, d1[k].initwriter, d1[k].singer, d1[k].initsinger, d1[k].strokenum, d1[k].type);

}

for (j=0;d1[j].num[0] != '\0';j++) //检查重复性

{

if (strcmp(d1[j].num, numx) == 0)

{

printf("此编号已存在,请按回车键后,重新输入编号!");

scanf("%c", &ss);

fflush(stdin);//清空输入缓存

goto mark0;

}

}

j = 0;

strcpy(d1[i].num, numx);

mark1:

system("cls");

printf("******************** 添加新歌曲信息 ********************\n\n");

printf("请输入歌曲名(不超过10位汉字):");

scanf("%s", songx);

getchar();

system("cls");

if ((strlen(songx) > 20) || (strlen(songx) == 0))//检查合法性

{

printf("歌曲名格式错误,请按回车键后,重新输入!");

scanf("%c", &ss);

fflush(stdin);//清空输入缓存

goto mark1;

}

strcpy(d1[i].songname, songx);

mark2:

system("cls");

printf("******************** 添加新歌曲信息 ********************\n\n");

printf("请输入曲作者名(不超过10位汉字):");

scanf("%s", writerx);

getchar();

system("cls");

if ((strlen(writerx) > 20) || (strlen(writerx) == 0))//检查合法性

{

printf("曲作者名格式错误,请按回车键后,重新输入!");

scanf("%c", &ss);

fflush(stdin);//清空输入缓存

goto mark2;

}

strcpy(d1[i].writer, writerx);

mark3:

system("cls");

printf("******************** 添加新歌曲信息 ********************\n\n");

printf("请输入曲作者名首字母(1位大写英文字母):");

scanf("%s", initw);

getchar();

system("cls");

if ((strlen(initw) != 1) || (JudgeDaxie(initw) == 0))//检查合法性?

{

printf("格式错误,请按回车键后,重新输入!");

scanf("%c", &ss);

fflush(stdin);//清空输入缓存

goto mark3;

}

strcpy(d1[i].initwriter, initw);

mark4:

system("cls");

printf("******************** 添加新歌曲信息 ********************\n\n");

printf("请输入歌手名(不超过10位汉字):");

scanf("%s", singerx);

getchar();

system("cls");

if ((strlen(singerx) > 20) || (strlen(singerx) == 0))//检查合法性

{

printf("歌手名格式错误,请按回车键后,重新输入!");

scanf("%c", &ss);

fflush(stdin);//清空输入缓存

goto mark4;

}

strcpy(d1[i].singer, singerx);

mark5:

system("cls");

printf("******************** 添加新歌曲信息 ********************\n\n");

printf("请输入歌手名首字母(1位大写英文字母):");

scanf("%s", inits);

getchar();

system("cls");

if ((strlen(inits) != 1) || (JudgeDaxie(inits) == 0))//检查合法性

{

printf("格式错误,请按回车键后,重新输入!");

scanf("%c", &ss);

fflush(stdin);//清空输入缓存

goto mark5;

}

strcpy(d1[i].initsinger, inits);

mark6:

system("cls");

printf("******************** 添加新歌曲信息 ********************\n\n");

printf("请输入歌曲名笔划(数字):");

scanf("%s", strokex);

getchar();

system("cls");

if ((strlen(strokex) != 1) || (JudgeNum(strokex) == 0))//检查合法性

{

printf("格式错误,请按回车键后,重新输入!");

scanf("%c", &ss);

fflush(stdin);//清空输入缓存

goto mark6;

}

strcpy(d1[i].strokenum, strokex);

system("cls");

printf("******************** 添加新歌曲信息 ********************\n\n");

printf("*******************\n");

printf("** 1.民歌 **\n");

printf("** 2.美声 **\n");

printf("** 3.戏曲 **\n");

printf("** 4.流行乐 **\n");

printf("** 5.外语歌曲 **\n");

printf("** 6.其他 **\n");

printf("*******************\n");

printf("最后请选择歌曲类型(1-6):");

//getchar();

ch2 = Choose(6);

strcpy(d1[i].type, typex[ch2 - 1]);

//getchar();

system("cls");

system("cls");

printf("******************** 添加新歌曲信息 ********************\n\n");

printf("您将添加的歌曲信息如下:\n\n");

printf("歌曲编号:%-5s\t 歌曲名称:%-20s\t 作曲者:%-10s\t 曲作首:%-2s\t 歌手:%-10s\t 歌手首:%-2s\t 歌曲笔划:%-2s\t 歌曲类型:%-8s\t \n",d1[i].num, d1[i].songname, d1[i].writer, d1[i].initwriter,d1[i].singer, d1[i].initsinger,d1[i].strokenum,d1[i].type);

printf("\n");

printf("******************\n");

printf("** **\n");

printf("** 1.是 **\n");

printf("** 2.否 **\n");

printf("** **\n");

printf("******************\n");

printf("请选择是否保存此条歌曲信息:");

ch3 = Choose(2);

system("cls");

if (ch3 == 1)

{

fprintf(fp, "歌曲编号:%-5s\t 歌曲名称:%-20s\t 作曲者:%-10s\t 曲作首:%-2s\t 歌手:%-10s\t 歌手首:%-2s\t 歌曲笔划:%-2s\t 歌曲类型:%-8s\t \n", d1[i].num, d1[i].songname, d1[i].writer, d1[i].initwriter, d1[i].singer, d1[i].initsinger, d1[i].strokenum, d1[i].type); //将数据格式化输出到文件中

printf("已保存此条歌曲信息!\n按回车键进行下一步!");

scanf("%c", &ss);

fflush(stdin);//清空输入缓存

}

else

{

printf("未保存此条歌曲信息!\n按回车键进行下一步!");

scanf("%c", &ss);

fflush(stdin);//清空输入缓存

}

i++;

system("cls");

printf("******************\n");

printf("** **\n");

printf("** 1.是 **\n");

printf("** 2.否 **\n");

printf("** **\n");

printf("******************\n");

printf("请选择是否继续添加下一条歌曲信息:");

ch1 = Choose(2);

if (ch1 == 1)

a = 0;

else if (ch1 == 2)

a = 1;

} while (a==0);

fclose(fp);

}

void BrowseSong(char *fn)

{

int k;

DATA d2[100];

FILE *fp;

if ((fp = fopen(fn, "r")) == NULL) exit(0); //打开文件

printf("*******************************************************************************************************************************************************************************\n");

printf("** 所有歌曲 **\n");

rewind(fp);//使位置指针重返回文件的开头

for (k = 0; feof(fp) == 0; k++)

{

fscanf(fp, "歌曲编号:%s\t 歌曲名称:%s\t 作曲者:%s\t 曲作首:%s\t 歌手:%s\t 歌手首:%s\t 歌曲笔划:%s\t 歌曲类型:%s\t \n", d2[k].num, d2[k].songname, d2[k].writer, d2[k].initwriter, d2[k].singer, d2[k].initsinger, d2[k].strokenum, d2[k].type);

//printf("歌曲编号:%s\t 歌曲名称:%s\t 作曲者:%s\t 曲作首:%s\t 歌手:%s\t 歌手首:%s\t 歌曲笔划:%s\t 歌曲类型:%s\t \n", d2[k].num, d2[k].songname, d2[k].writer, d2[k].initwriter, d2[k].singer, d2[k].initsinger, d2[k].strokenum, d2[k].type);

printf("歌曲编号:%-5s\t 歌曲名称:%-20s\t 作曲者:%-10s\t 曲作首:%-2s\t 歌手:%-10s\t 歌手首:%-2s\t 歌曲笔划:%-2s\t 歌曲类型:%-8s\t \n", d2[k].num, d2[k].songname, d2[k].writer, d2[k].initwriter, d2[k].singer, d2[k].initsinger, d2[k].strokenum, d2[k].type);

}

printf("*******************************************************************************************************************************************************************************\n");

fclose(fp);

}

void ModifySong(char *fn)

{

}

void DeleteSong(char *fn)

{

DATA d3[100];

char numx[10];

char ss,c;

int i,k,ch1,ch2,ch3;

int len = 0;

FILE *fp;

mark2:

BrowseSong(fn);//显示所有歌曲

if ((fp = fopen(fn, "a+")) == NULL) exit(0); //打开文件

printf("请输入要删除的歌曲信息的编号:");

scanf("%s", numx);

getchar();

system("cls");

rewind(fp);//使位置指针重返回文件的开头

for (k = 0; feof(fp) == 0; k++)

{

fscanf(fp, "歌曲编号:%s\t 歌曲名称:%s\t 作曲者:%s\t 曲作首:%s\t 歌手:%s\t 歌手首:%s\t 歌曲笔划:%s\t 歌曲类型:%s\t \n", d3[k].num, d3[k].songname, d3[k].writer, d3[k].initwriter, d3[k].singer, d3[k].initsinger, d3[k].strokenum, d3[k].type);

if (strcmp(d3[k].num, numx) == 0)

{

printf("您将要删除的歌曲信息为:\n");

printf("歌曲编号:%-5s\t 歌曲名称:%-20s\t 作曲者:%-10s\t 曲作首:%-2s\t 歌手:%-10s\t 歌手首:%-2s\t 歌曲笔划:%-2s\t 歌曲类型:%-8s\t \n", d3[k].num, d3[k].songname, d3[k].writer, d3[k].initwriter, d3[k].singer, d3[k].initsinger, d3[k].strokenum, d3[k].type);

goto mark1;

}

}

k = 0;

printf("不存在此歌曲编号,按回车键后重新输入!\n");

scanf("%c", &ss);

fflush(stdin);//清空输入缓存

goto mark2;

mark1:

printf("\n");

printf("******************\n");

printf("** **\n");

printf("** 1.是 **\n");

printf("** 2.否 **\n");

printf("** **\n");

printf("******************\n");

printf("请选择是否删除此条歌曲信息:");

ch1 = Choose(2);

system("cls");

if (ch1 == 1)

{

//删除操作(未完成)

while ((c=fgetc(fp))!=EOF)

{

if(c=='\n')

len++;

}

for (;k

{

d3[k] = d3[k + 1];

}

for (i = 0;i

{

rewind(fp);//使位置指针重返回文件的开头

fprintf(fp, "歌曲编号:%-5s\t 歌曲名称:%-20s\t 作曲者:%-10s\t 曲作首:%-2s\t 歌手:%-10s\t 歌手首:%-2s\t 歌曲笔划:%-2s\t 歌曲类型:%-8s\t \n", d3[i].num, d3[i].songname, d3[i].writer, d3[i].initwriter, d3[i].singer, d3[i].initsinger, d3[i].strokenum, d3[i].type);

}

len=0;

printf("已删除此条歌曲信息!\n");

printf("\n");

printf("******************\n");

printf("** **\n");

printf("** 1.是 **\n");

printf("** 2.否 **\n");

printf("** **\n");

printf("******************\n");

printf("请选择是否继续删除其他歌曲信息:");

ch3 = Choose(2);

system("cls");

if (ch3 == 1)

{

goto mark2;

}

}

else if (ch1 == 2)

{

printf("已取消删除此条歌曲信息!\n");

printf("\n");

printf("******************\n");

printf("** **\n");

printf("** 1.是 **\n");

printf("** 2.否 **\n");

printf("** **\n");

printf("******************\n");

printf("请选择是否继续删除其他歌曲信息:");

ch2 = Choose(2);

system("cls");

if (ch2 == 1)

{

goto mark2;

}

}

fclose(fp);

}

void Writer()

{

}

void Singer()

{

}

void StrokeNum()

{

}

void SongType()

{

}

void SongNum()

{

}

int Choose(int n)

{

char x[10];//防止恶意输入长字符串,溢出

int ch = 0;

char num[30][3] = { "1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30" };

int i;

while (ch == 0)

{

gets(x);

fflush(stdin);

for (i = 0;i

{

if (strcmp(x, num[i]) == 0)

{

ch = i + 1;

return ch;

}

}

printf("对不起,没有这个选项。请重新输入!\n");

}

}

int JudgeNum(char *num)

{

int i;

for (i = 0;num[i]!='\0';i++)

{

if ((num[i] < '0') || (num[i] > '9'))

return 0; //含其他字符

}

return 1; //纯数字

}

int JudgeDaxie(char *zimu)

{

int i;

for (i = 0;zimu[i];i++)

{

if ((zimu[i] < 'A') || (zimu[i] > 'Z'))

return 0; //含其他字符

}

return 1; //大写字母

}

/****************************************** 主函数 *******************************************/

int main()

{

char filename[21];

//scanf("%s",filename);

FILE *fp;

//if ((fp = fopen(filename, "a+")) == NULL) exit(0); //打开文件

//fclose(fp);

FILE *mima;

char ss;

char ch0, ch1, ch2, ch3, ch4;

char password[70],pw[70];

int a = 0;

printf("\n");

printf("*********************************************************************************************\n");

printf("*** ***\n");

printf("*** 欢迎使用点歌台! ***\n");

printf("*** ***\n");

printf("*********************************************************************************************\n");

printf("\n\n");

printf("按回车键开始使用点歌台!\n");

scanf("%c", &ss);

fflush(stdin);//清空输入缓存

do

{

system("cls");

printf("\n");

printf("*****************************************************************\n");

printf("** **\n");

printf("** 点歌台 **\n");

printf("** **\n");

printf("** 1.管理员操作 **\n");

printf("** 2.顾客点歌台 **\n");

printf("** 3.歌曲播放列表 **\n");

printf("** 4.退出系统 **\n");

printf("** **\n");

printf("*****************************************************************\n");

printf("请输入选择项(1-4):");

ch0 = Choose(4);

system("cls");

if (ch0 == 4)//退出系统

{

system("cls");

printf("\n");

printf("***********************************\n");

printf("** **\n");

printf("** 谢谢使用! **\n");

printf("** 再见! **\n");

printf("** **\n");

printf("***********************************\n");

printf("\n\n");

//getchar();

printf("按回车键关闭程序!\n");

scanf("%c", &ss);

exit(0);

}

if (ch0 == 1)//管理员操作

{

if ((mima = fopen("mima.dat", "r")) == NULL)

{

mima = fopen("mima.dat", "w+");

mark1:

system("cls");

printf("\n");

printf("***********************************\n");

printf("** **\n");

printf("** 管理员操作 **\n");

printf("** **\n");

printf("***********************************\n");

printf("首次使用系统,请设置管理员密码(六位字符):");

scanf("%s", password);

getchar();

system("cls");

if (strlen(password) != 6)//密码长度

{

printf("密码格式错误,请按回车键后,重新设置密码!");

scanf("%c", &ss);

fflush(stdin);//清空输入缓存

goto mark1;

}

printf("!!!您设置管理员密码为:%s\n\n",password);

printf("******************\n");

printf("** **\n");

printf("** 1.是 **\n");

printf("** 2.否 **\n");

printf("** **\n");

printf("******************\n");

printf("请选择是否使用此密码:");

ch2 = Choose(2);

if (ch2 == 2)

goto mark1;

if (ch2 == 1)

{

fprintf(mima,"%s",password);

fclose(mima);

}

fflush(stdin);//清空输入缓存

system("cls");

}

mark:

printf("\n");

printf("***********************************\n");

printf("** **\n");

printf("** 管理员操作 **\n");

printf("** **\n");

printf("***********************************\n");

printf("输入管理员密码:");

scanf("%s", pw);

system("cls");

getchar();

fgets(password,7,mima);

if (strcmp(password, pw) == 0)

{

do

{

while (a == 0) /*********************************** 建立歌曲信息文件 **************************************/

{

printf("\n请建立歌曲信息文件!\n");

printf("\n请输入文件名:\n");

scanf("%s", filename);

getchar();

if ((fp = fopen(filename, "r+")) == NULL)

{

if ((fp = fopen(filename, "w+")) == NULL) exit(0); //打开文件

printf("\n新建歌曲信息文件成功!\n");

printf("\n按回车键开始使用管理员功能!\n");

scanf("%c", &ss);

fflush(stdin);//清空输入缓存

}

else

{

system("cls");

printf("%s此歌曲信息文件已存在!\n",filename);

printf("**************************\n");

printf("** **\n");

printf("** 1.继续使用 **\n");

printf("** 2.覆盖使用 **\n");

printf("** **\n");

printf("**************************\n");

printf("请选择继续使用或覆盖:");

ch4 = Choose(2);

if (ch4 == 1)

{

system("cls");

printf("将继续使用原文件!\n");

//if ((fp = fopen(filename, "a+"))== NULL) exit(0);

printf("\n按回车键开始使用管理员功能!\n");

scanf("%c", &ss);

fflush(stdin);//清空输入缓存

}

if (ch4 == 2)

{

system("cls");

printf("已覆盖原文件!\n");

if ((fp = fopen(filename, "w+")) == NULL) exit(0);

printf("\n按回车键开始使用管理员功能!\n");

scanf("%c", &ss);

fflush(stdin);//清空输入缓存

}

}

fclose(fp);

a = 1;

};

/************************************************* 管理员功能 ******************************************************/

system("cls");

printf("\n");

printf("****************************************************************\n");

printf("** **\n");

printf("** 管理员 **\n");

printf("** **\n");

printf("** 1.歌曲信息输入 **\n");

printf("** 2.歌曲信息浏览 **\n");

printf("** 3.歌曲信息修改 **\n");

printf("** 4.歌曲信息删除 **\n");

printf("** 5.修改管理密码 **\n");

printf("** 6.返回上一页面 **\n");

printf("** **\n");

printf("****************************************************************\n");

printf("请输入选择项(1-6):");

ch1 = Choose(6);

system("cls");

if (ch1 == 1)//新增歌曲信息

{

NewSong(filename);

//getchar();

printf("\n按回车键继续使用管理员功能!\n");

scanf("%c", &ss);

fflush(stdin);

system("cls");

}

if (ch1 == 2)//查看歌曲信息

{

BrowseSong(filename);/*查看所有歌曲的函数*/

printf("\n按回车键继续使用管理员功能!\n");

scanf("%c", &ss);

fflush(stdin);

system("cls");

}

if (ch1 == 3)//修改歌曲信息

{

/*修改歌曲信息的函数*/

printf("\n按回车键继续使用管理员功能!\n");

scanf("%c", &ss);

fflush(stdin);

system("cls");

}

if (ch1 == 4)//删除歌曲信息

{

DeleteSong(filename);/*删除歌曲信息的函数*/

printf("\n按回车键继续使用管理员功能!\n");

scanf("%c", &ss);

fflush(stdin);

system("cls");

}

if (ch1 == 5)//修改管理密码

{

mima = fopen("mima.dat", "r+");

mark2:

system("cls");

printf("\n");

printf("***********************************\n");

printf("** **\n");

printf("** 管理员操作 **\n");

printf("** **\n");

printf("***********************************\n");

printf("请设置新的管理员密码(六位字符):");

scanf("%s", password);

getchar();

system("cls");

if (strlen(password) != 6) //密码长度

{

printf("密码格式错误,请按回车键后,重新设置密码!");

scanf("%c", &ss);

fflush(stdin);//清空输入缓存

goto mark2;

}

printf("!!!您设置管理员密码为:%s\n\n", password);

printf("******************\n");

printf("** **\n");

printf("** 1.是 **\n");

printf("** 2.否 **\n");

printf("** **\n");

printf("******************\n");

printf("请选择是否使用此密码:");

ch2 = Choose(2);

if (ch2 == 2)

goto mark2;

if (ch2 == 1)

{

fprintf(mima, "%s", password);

fclose(mima);

}

system("cls");

printf("\n修改密码成功!\n按回车键继续使用管理员功能!\n");

scanf("%c", &ss);

fflush(stdin);

system("cls");

}

if (ch1 == 6)

break; //返回主菜单

} while (1);

}

else

{

printf("\n密码错误,请按回车键后重新输入!\n");

scanf("%c", &ss);

fflush(stdin);

system("cls");

goto mark;

}

}

if (ch0 == 2)//顾客点歌台

{

do

{

printf("\n");

printf("***********************************************************\n");

printf("** **\n");

printf("** 顾客点歌台 **\n");

printf("** **\n");

printf("** 1.按歌曲曲作者名字的字母顺序显示歌曲 **\n");

printf("** 2.按歌手名字的字母顺序显示歌曲 **\n");

printf("** 3.按歌曲名笔划排序显示歌曲 **\n");

printf("** 4.按歌曲类别显示歌曲 **\n");

printf("** 5.直接输入歌曲编号 **\n");

printf("** 6.返回主菜单 **\n");

printf("** **\n");

printf("***********************************************************\n");

printf("请输入选择项(1-6):");

ch3 = Choose(6);

system("cls");

if (ch3 == 6)//返回主菜单

{

break;

}

if (ch3 == 1)//曲作者名字字母顺序

{

}

if (ch3 == 2)//歌手名字的字母顺序

{

}

if (ch3 == 3)//歌曲名笔划排序

{

}

if (ch3 == 4)//歌曲类别

{

}

if (ch3 == 5)//歌曲编号

{

}

}while(1);

}

if (ch0 == 3)//歌曲播放列表

{

}

}while (1);

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值