C语言【微项目01】—电话号码管理系统(文件操作实现)


【TDTX】
【通过文件进行增、删、查、改,在文件中增、删、查、改
【本微项目的精髓在于在文件写入后再读取时不发生格式错误,并且准确找到每条记录的开头处,返回当前位置】
【本微项目实现了核心的增、删、查、改】
【总共1400余行代码】
【注意】输入数据格式:1到5个字符(敲空格)1个字符(敲空格)11个字符(敲空格)1到3个字符
例如:jerry m 13648712503 22
【!样例中出现的电话号码均为随意打字,如有雷同纯属巧合!】

TelSeaSys.h

struct mytel
{
    char xm[6];
    char xb[2];
    char dh[12];
    char nl[4];
}kk;
void tratxt(void);
void rootmenu(void);
void abA1(void);
void abA2(void);
void abA3(void);
void abA4(void);

void abB1(void);
void abB2(void);
void abB3(void);
void abB4(void);

void abC1(void);
void abC2(void);
void abC3(void);
void abC4(void);

void abD1(void);
void abD2(void);
void abD3(void);
void abD4(void);

void menuA(void);
void menuB(void);
void menuC(void);
void menuD(void);

TelSeaSys.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "TelSeaSys.h"
void tratxt(void)
{
	printf("\n==================遍历检查表==================\n");
	FILE* fp;
	fp=fopen("./tell.txt","r");clearerr(fp);
	int i,ch,co=0,coo=0;
	printf("序号\t姓名\t性别\t电话\t\t年龄\n");
	for(i=0;(ch=fgetc(fp))!=EOF;i++)
	{
		if(ch=='>')
		{
			coo=0;
			printf("\n");
		}
		else
		{
			if(ch=='<')
			{
				co++;
				printf("%d\t",co);
			}
			else
			{
				if(ch=='+')
				{
					printf("\t");
				}
				if(ch!='+'&&ch!='*')
				{printf("%c",ch);}
				if(ch=='*')
				{printf(" ");}
			}
			
		}
//		getch(); 
	}
	printf("==================检查表完成==================\n\n");
	printf("按任意键继续:");
	getch();
	putchar('\n'); 
	fclose(fp);
}
void rootmenu(void)
{
    system("cls");
    printf("\n<---------------【电话号码管理系统version1.0_designed by TDTX】--------------->\n\n");
    printf("*********************************主菜单选项**********************************\n""|  A:存信息\tB:查信息\tC:改信息\tD:删信息\tE:编历检查  |\n");
    printf("*****************************************************************************\n");
    printf("请输入要操作的主菜单选项(A,B,C,D,E),退出系统请按Q:");
    return;
}

/*下面是分功能函数*/ 
void abA1(void)
{
	system("cls");
	FILE* fp;
	printf("请输入一条信息,以空格分隔项目:");
	scanf("%s %s %s %s",kk.xm,kk.xb,kk.dh,kk.nl);
	switch(strlen(kk.xm))
	{
		case 1:kk.xm[1]='*',kk.xm[2]='*',kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 2:kk.xm[2]='*',kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 3:kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 4:kk.xm[4]='*',kk.xm[5]='\0';break;
		default:break;
	}
	switch(strlen(kk.nl))
	{
		case 1:kk.nl[2]=kk.nl[0],kk.nl[0]='*',kk.nl[1]='*',kk.nl[3]='\0';break;
		case 2:kk.nl[2]=kk.nl[1],kk.nl[1]=kk.nl[0],kk.nl[0]='*',kk.nl[3]='\0';break;
		default:break;
	}
	fp=fopen("./tell.txt","a");
	if(fp==NULL)
	{
		printf("fail\n"); 
	}
	else
	{
		printf("OK\n");
	}
	fprintf(fp,"<%s+%s+%s+%s>\0",kk.xm,kk.xb,kk.dh,kk.nl);
	fclose(fp); 
	tratxt();
	printf("\n自动返回选项功能A!");
	sleep(2); 
	return;
}
void abA2(void)
{
	system("cls");
	FILE* fp;
	printf("请输入第一条信息,以空格分隔项目:");
	scanf(" %s %s %s %s",kk.xm,kk.xb,kk.dh,kk.nl); 
	switch(strlen(kk.xm))
	{
		case 1:kk.xm[1]='*',kk.xm[2]='*',kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 2:kk.xm[2]='*',kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 3:kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 4:kk.xm[4]='*',kk.xm[5]='\0';break;
		default:break;
	}
	switch(strlen(kk.nl))
	{
		case 1:kk.nl[2]=kk.nl[0],kk.nl[0]='*',kk.nl[1]='*',kk.nl[3]='\0';break;
		case 2:kk.nl[2]=kk.nl[1],kk.nl[1]=kk.nl[0],kk.nl[0]='*',kk.nl[3]='\0';break;
		default:break;
	}
	fp=fopen("./tell.txt","a");
	if(fp==NULL)
	{
		printf("fail\n"); 
	}
	else
	{
		printf("OK\n");
	}
	fprintf(fp,"<%s+%s+%s+%s>\0",kk.xm,kk.xb,kk.dh,kk.nl);
	fclose(fp); 
	tratxt();
	printf("请输入第二条信息,以空格分隔项目:");
	scanf(" %s %s %s %s",kk.xm,kk.xb,kk.dh,kk.nl); 
	switch(strlen(kk.xm))
	{
		case 1:kk.xm[1]='*',kk.xm[2]='*',kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 2:kk.xm[2]='*',kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 3:kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 4:kk.xm[4]='*',kk.xm[5]='\0';break;
		default:break;
	}
	switch(strlen(kk.nl))
	{
		case 1:kk.nl[2]=kk.nl[0],kk.nl[0]='*',kk.nl[1]='*',kk.nl[3]='\0';break;
		case 2:kk.nl[2]=kk.nl[1],kk.nl[1]=kk.nl[0],kk.nl[0]='*',kk.nl[3]='\0';break;
		default:break;
	}
	fp=fopen("./tell.txt","a");
	if(fp==NULL)
	{
		printf("fail\n"); 
	}
	else
	{
		printf("OK\n");
	}
	fprintf(fp,"<%s+%s+%s+%s>\0",kk.xm,kk.xb,kk.dh,kk.nl);
	fclose(fp); 
	tratxt();
	printf("\n自动返回选项功能A!");
	sleep(2); 
	return;
}
void abA3(void)
{
	system("cls");
	FILE* fp;
	printf("请输入第一条信息,以空格分隔项目:");
	scanf(" %s %s %s %s",kk.xm,kk.xb,kk.dh,kk.nl); 
	switch(strlen(kk.xm))
	{
		case 1:kk.xm[1]='*',kk.xm[2]='*',kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 2:kk.xm[2]='*',kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 3:kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 4:kk.xm[4]='*',kk.xm[5]='\0';break;
		default:break;
	}
	switch(strlen(kk.nl))
	{
		case 1:kk.nl[2]=kk.nl[0],kk.nl[0]='*',kk.nl[1]='*',kk.nl[3]='\0';break;
		case 2:kk.nl[2]=kk.nl[1],kk.nl[1]=kk.nl[0],kk.nl[0]='*',kk.nl[3]='\0';break;
		default:break;
	}
	fp=fopen("./tell.txt","a");
	if(fp==NULL)
	{
		printf("fail\n"); 
	}
	else
	{
		printf("OK\n");
	}
	fprintf(fp,"<%s+%s+%s+%s>\0",kk.xm,kk.xb,kk.dh,kk.nl);
	fclose(fp); 
	tratxt();
	printf("请输入第二条信息,以空格分隔项目:");
	scanf(" %s %s %s %s",kk.xm,kk.xb,kk.dh,kk.nl); 
	switch(strlen(kk.xm))
	{
		case 1:kk.xm[1]='*',kk.xm[2]='*',kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 2:kk.xm[2]='*',kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 3:kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 4:kk.xm[4]='*',kk.xm[5]='\0';break;
		default:break;
	}
	switch(strlen(kk.nl))
	{
		case 1:kk.nl[2]=kk.nl[0],kk.nl[0]='*',kk.nl[1]='*',kk.nl[3]='\0';break;
		case 2:kk.nl[2]=kk.nl[1],kk.nl[1]=kk.nl[0],kk.nl[0]='*',kk.nl[3]='\0';break;
		default:break;
	}
	fp=fopen("./tell.txt","a");
	if(fp==NULL)
	{
		printf("fail\n"); 
	}
	else
	{
		printf("OK\n");
	}
	fprintf(fp,"<%s+%s+%s+%s>\0",kk.xm,kk.xb,kk.dh,kk.nl);
	fclose(fp); 
	tratxt();
	printf("请输入第三条信息,以空格分隔项目:");
	scanf(" %s %s %s %s",kk.xm,kk.xb,kk.dh,kk.nl); 
	switch(strlen(kk.xm))
	{
		case 1:kk.xm[1]='*',kk.xm[2]='*',kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 2:kk.xm[2]='*',kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 3:kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 4:kk.xm[4]='*',kk.xm[5]='\0';break;
		default:break;
	}
	switch(strlen(kk.nl))
	{
		case 1:kk.nl[2]=kk.nl[0],kk.nl[0]='*',kk.nl[1]='*',kk.nl[3]='\0';break;
		case 2:kk.nl[2]=kk.nl[1],kk.nl[1]=kk.nl[0],kk.nl[0]='*',kk.nl[3]='\0';break;
		default:break;
	}
	fp=fopen("./tell.txt","a");
	if(fp==NULL)
	{
		printf("fail\n"); 
	}
	else
	{
		printf("OK\n");
	}
	fprintf(fp,"<%s+%s+%s+%s>\0",kk.xm,kk.xb,kk.dh,kk.nl);
	fclose(fp); 
	tratxt();
	printf("\n自动返回选项功能A!");
	sleep(2); 
	return;
}
void abA4(void)
{
	system("cls");
	FILE* fp;
	printf("请输入第一条信息,以空格分隔项目:");
	scanf(" %s %s %s %s",kk.xm,kk.xb,kk.dh,kk.nl); 
	switch(strlen(kk.xm))
	{
		case 1:kk.xm[1]='*',kk.xm[2]='*',kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 2:kk.xm[2]='*',kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 3:kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 4:kk.xm[4]='*',kk.xm[5]='\0';break;
		default:break;
	}
	switch(strlen(kk.nl))
	{
		case 1:kk.nl[2]=kk.nl[0],kk.nl[0]='*',kk.nl[1]='*',kk.nl[3]='\0';break;
		case 2:kk.nl[2]=kk.nl[1],kk.nl[1]=kk.nl[0],kk.nl[0]='*',kk.nl[3]='\0';break;
		default:break;
	}
	fp=fopen("./tell.txt","a");
	if(fp==NULL)
	{
		printf("fail\n"); 
	}
	else
	{
		printf("OK\n");
	}
	fprintf(fp,"<%s+%s+%s+%s>\0",kk.xm,kk.xb,kk.dh,kk.nl);
	fclose(fp); 
	tratxt();
	printf("请输入第二条信息,以空格分隔项目:");
	scanf(" %s %s %s %s",kk.xm,kk.xb,kk.dh,kk.nl); 
	switch(strlen(kk.xm))
	{
		case 1:kk.xm[1]='*',kk.xm[2]='*',kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 2:kk.xm[2]='*',kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 3:kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 4:kk.xm[4]='*',kk.xm[5]='\0';break;
		default:break;
	}
	switch(strlen(kk.nl))
	{
		case 1:kk.nl[2]=kk.nl[0],kk.nl[0]='*',kk.nl[1]='*',kk.nl[3]='\0';break;
		case 2:kk.nl[2]=kk.nl[1],kk.nl[1]=kk.nl[0],kk.nl[0]='*',kk.nl[3]='\0';break;
		default:break;
	}
	fp=fopen("./tell.txt","a");
	if(fp==NULL)
	{
		printf("fail\n"); 
	}
	else
	{
		printf("OK\n");
	}
	fprintf(fp,"<%s+%s+%s+%s>\0",kk.xm,kk.xb,kk.dh,kk.nl);
	fclose(fp); 
	tratxt();
	printf("请输入第三条信息,以空格分隔项目:");
	scanf(" %s %s %s %s",kk.xm,kk.xb,kk.dh,kk.nl);
	switch(strlen(kk.xm))
	{
		case 1:kk.xm[1]='*',kk.xm[2]='*',kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 2:kk.xm[2]='*',kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 3:kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 4:kk.xm[4]='*',kk.xm[5]='\0';break;
		default:break;
	}
	switch(strlen(kk.nl))
	{
		case 1:kk.nl[2]=kk.nl[0],kk.nl[0]='*',kk.nl[1]='*',kk.nl[3]='\0';break;
		case 2:kk.nl[2]=kk.nl[1],kk.nl[1]=kk.nl[0],kk.nl[0]='*',kk.nl[3]='\0';break;
		default:break;
	}
	fp=fopen("./tell.txt","a");
	if(fp==NULL)
	{
		printf("fail\n"); 
	}
	else
	{
		printf("OK\n");
	}
	fprintf(fp,"<%s+%s+%s+%s>\0",kk.xm,kk.xb,kk.dh,kk.nl);
	fclose(fp); 
	tratxt();
	printf("请输入第四条信息,以空格分隔项目:");
	scanf(" %s %s %s %s",kk.xm,kk.xb,kk.dh,kk.nl); 
	switch(strlen(kk.xm))
	{
		case 1:kk.xm[1]='*',kk.xm[2]='*',kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 2:kk.xm[2]='*',kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 3:kk.xm[3]='*',kk.xm[4]='*',kk.xm[5]='\0';break;
		case 4:kk.xm[4]='*',kk.xm[5]='\0';break;
		default:break;
	}
	switch(strlen(kk.nl))
	{
		case 1:kk.nl[2]=kk.nl[0],kk.nl[0]='*',kk.nl[1]='*',kk.nl[3]='\0';break;
		case 2:kk.nl[2]=kk.nl[1],kk.nl[1]=kk.nl[0],kk.nl[0]='*',kk.nl[3]='\0';break;
		default:break;
	}
	fp=fopen("./tell.txt","a");
	if(fp==NULL)
	{
		printf("fail\n"); 
	}
	else
	{
		printf("OK\n");
	}
	fprintf(fp,"<%s+%s+%s+%s>\0",kk.xm,kk.xb,kk.dh,kk.nl);
	fclose(fp); 
	tratxt();
	printf("\n自动返回选项功能A!");
	sleep(2); 
	return;
}
void abB1(void)
{
	system("cls");
	FILE* fp;
	char xmm[6];
	printf("请输入要查询的姓名(5):");
	scanf(" %s",xmm); 
	fp=fopen("./tell.txt","r");clearerr(fp);
	if(fp==NULL)
	{
		printf("fail\n"); 
	}
	else
	{
		printf("OK\n");
	}
	int i,j,k=0,co=0,f=0;
	char ch,t[29];
	for(i=0;(ch=fgetc(fp))!=EOF;i++)
	{
		if(ch=='\n'||ch=='\r'||ch=='>')
		{
			if(ch=='>')
			{
				t[k]='>';
				t[k+1]='\0';
			}
//			puts(t);
			for(co=0,j=1;t[j]!='+';j++)
			{
//				printf("j=%d:%c,j-1=%d:%c\n",j,t[j],j-1,xmm[j-1]);
				if(t[j]==xmm[j-1])
				{
					co++;//printf("co=%d\n",co);
				}
			}
			if(co==strlen(xmm))
			{
				puts(t);f=1;k=0;break;
			}
			else
			{
				k=0;continue;
			}

		}
		if(ch!=' '&&ch!='\n')
		{
			t[k++]=ch;
		}
	}
	if(f==0)
	{
		printf("\n通讯录没有此姓名,可以存入其信息!\n\n");
	}
	fclose(fp);
	system("pause");
	return;
}
void abB2(void)
{
	system("cls");
	FILE* fp;
	char xbb[2];
	printf("请输入要查询的性别(男-m,女-w):");
	scanf(" %s",xbb); 
	fp=fopen("./tell.txt","r");clearerr(fp);
	if(fp==NULL)
	{
		printf("fail\n"); 
	}
	else
	{
		printf("OK\n");
	}
	int i,j,co=0,k=0,f=0;
	char ch,t[29];
	for(i=0;(ch=fgetc(fp))!=EOF;i++)
	{
		if(ch=='\n'||ch=='\r'||ch=='>')
		{
			if(ch=='>')
			{
				t[k]='>';
				t[k+1]='\0';
			}
			for(j=5;j<10;j++)
			{
				if(j>0&&t[j-1]=='+'&&(t[j]=='m'||t[j]=='w')&&t[j+1]=='+')
				{
//					printf("进来了2,t[%d]:%c\n",j,t[j]);
					if(t[j]==xbb[0])
					{
						co=1;puts(t);f=1;k=0;continue;
					}
					else
					{
						k=0;break;
					}
				}
			}
			continue;
		}
		if(ch!=' '&&ch!='\n')
		{
			t[k++]=ch;
		}

	}
	if(f==0)
	{
		printf("\n通讯录没有此性别,非法性别查找!\n\n");
	}
	fclose(fp);
	system("pause");
	return;
}
void abB3(void)
{
	system("cls");
	FILE* fp;
	char dhh[12];
	printf("请输入要查询的电话:");
	scanf(" %s",dhh); 
	fp=fopen("./tell.txt","r");clearerr(fp);
	if(fp==NULL)
	{
		printf("fail\n"); 
	}
	else
	{
		printf("OK\n");
	}
	int i,j,k=0,m=0,co=0,f=0;
	char ch,t[29],th[12];
	for(i=0;(ch=fgetc(fp))!=EOF;i++)
	{
		if(ch=='\n'||ch=='\r'||ch=='>')
		{
			if(ch=='>')
			{
				t[k]='>';
				t[k+1]='\0';
			}
			for(co=0,j=8;j<22;j++)
			{
//				printf("进来了1");
				if(t[j]>='0'&&t[j]<='9')
				{
//					printf("找到数字了!");
					if(t[j]==dhh[m++])
					{
						co++;
					}
					else
					{
						m=0;break;
					}
				}
			}
			if(co==strlen(dhh))
			{
				puts(t);f=1;k=0;m=0;break;
			}
			else
			{
				k=0;m=0;continue;
			}

		}
		if(ch!=' '&&ch!='\n')
		{
			t[k++]=ch;
		}
	}
	if(f==0)
	{
		printf("\n通讯录没有此电话,可以存入其信息!\n\n");
	}
	fclose(fp);
	system("pause");
	return;
}
void abB4(void)
{
	system("cls");
	FILE* fp;
	char nll[4];
	printf("请输入要查询的年龄:");
	scanf(" %s",nll); 
	fp=fopen("./tell.txt","r");clearerr(fp);
	if(fp==NULL)
	{
		printf("fail\n"); 
	}
	else
	{
		printf("OK\n");
	}
	int i,j,k=0,m=0,co=0,f=0,dhhlen=0;
	char ch,t[29],th[12];
	for(i=0;(ch=fgetc(fp))!=EOF;i++)
	{
		if(ch=='\n'||ch=='\r'||ch=='>')
		{
			if(ch=='>')
			{
				t[k]='>';
				t[k+1]='\0';
			}
			for(m=strlen(nll)-1,co=0,j=strlen(t)-1-1;t[j]!='+';j--)
			{
//				printf("t[%d]=%c,nll[%d]=%c\n",j,t[j],m,nll[m]);
				if(t[j]==nll[m]&&m>=0)
				{
//					printf("进来了1,t[%d]=%c\n",j,t[j]);
					co++;m--;
				}
				else
				{
					break;
				}
			}
			if(co==strlen(nll))
			{
				puts(t);f=1;k=0;continue;
			}
			else
			{
				k=0;continue;
			}
		}
		if(ch!=' '&&ch!='\n')
		{
			t[k++]=ch;
		}
	}
	if(f==0)
	{
		printf("\n通讯录没有此年龄,可以存入其信息!\n\n");
	}
	fclose(fp);
	system("pause");
	return;
}
void abC1(void)
{
	system("cls");
	FILE* fp;
	char xmm[6];
	printf("请输入要被修改的姓名:");
	scanf(" %5s",xmm); 
	fp=fopen("./tell.txt","r+");clearerr(fp);
	if(fp==NULL)
	{
		printf("fail\n"); 
	}
	else
	{
		printf("OK\n");
	}
	int i,j,k=0,co=0,f=0;
	char ch,t[29];
	int ft=0; 
	for(i=0;(ch=fgetc(fp))!=EOF;i++)
	{
		if(ch=='\n'||ch=='\r'||ch=='>')
		{
			if(ch=='>')
			{
				t[k]='>';
				t[k+1]='\0';
			}
			puts(t);
			for(co=0,j=0;t[j]!='+';j++)
			{
//				printf("进来了,t[%d]:%c\n",j,t[j]);
				if(t[j+1]==xmm[j])
				{
//					putchar(t[j]);
					co++;
				}
			}
			if(co==strlen(xmm))
			{
				clearerr(fp);
				printf("已找到该姓名,请输入要改为的姓名:");
				f=1;k=0;
				scanf(" %s",xmm);
				switch(strlen(xmm))
				{
					case 1:t[1]=xmm[0],t[2]='*',t[3]='*',t[4]='*',t[5]='*';break;
					case 2:t[1]=xmm[2],t[2]=xmm[1],t[3]='*',t[4]='*',t[5]='*';break;
					case 3:t[1]=xmm[0],t[2]=xmm[1],t[3]=xmm[2],t[4]='*',t[5]='*';break;
					case 4:t[1]=xmm[0],t[2]=xmm[1],t[3]=xmm[2],t[4]=xmm[3],t[5]='*';break;
					case 5:t[1]=xmm[0],t[2]=xmm[1],t[3]=xmm[2],t[4]=xmm[3],t[5]=xmm[4];break;
					default:break;
				}
				//t[1]=xmm[0];t[2]=xmm[1];t[3]=xmm[2];t[4]=xmm[3];t[5]=xmm[4];
				puts(t);
				system("pause");
				printf("找到后ft=%ld",ft);
				fseek(fp,ft,SEEK_SET);
				fprintf(fp,"%s\0",t);
				fclose(fp);
				system("pause");
				return;
			}
			else
			{
				k=0;continue;
			}
		}
		if(i==0&&k==0&&ch!='\n')
		{
			ft=ftell(fp)-1;//名字的第一个字符所在的位置锚定
			printf("ft=%ld\n",ft); 
		}
		if(i!=0&&k==0&&ch!='\n')
		{
			ft=ftell(fp)-1;//名字的第一个字符所在的位置锚定
			printf("ft=%ld\n",ft); 
		}
		if(ch!=' '&&ch!='\n')
		{
			t[k++]=ch;
		}
	}
	if(f==0)
	{
		printf("\n通讯录没有此姓名,可以存入其信息!\n\n");
	}
	fclose(fp);
	system("pause");
	return;
}
void abC2(void)
{
	system("cls");
	FILE* fp;
	char xmm[6],xbb[2];
	printf("请输入要被修改性别的姓名:");
	scanf(" %5s",xmm); 
	fp=fopen("./tell.txt","r+");clearerr(fp);
	if(fp==NULL)
	{
		printf("fail\n"); 
	}
	else
	{
		printf("OK\n");
	}
	int i,j,k=0,co=0,f=0;
	char ch,t[29];
	int ft=0; 
	for(i=0;(ch=fgetc(fp))!=EOF;i++)
	{
		if(ch=='\n'||ch=='\r'||ch=='>')
		{
			if(ch=='>')
			{
				t[k]='>';
				t[k+1]='\0';
			}
			puts(t);
			for(co=0,j=0;t[j]!='+';j++)
			{
//				printf("进来了,t[%d]:%c\n",j,t[j]);
				if(t[j+1]==xmm[j])
				{
//					putchar(t[j]);
					co++;
				}
			}
			if(co==strlen(xmm))
			{
				clearerr(fp);
				printf("已找到该姓名,请输入要改为的性别:");
				f=1;k=0;
				scanf(" %1s",xbb);
				t[7]=xbb[0];
				puts(t);
				system("pause");
				printf("找到后ft=%ld",ft);
				fseek(fp,ft,SEEK_SET);
				fprintf(fp,"%s\0",t);
				fclose(fp);
				system("pause");
				return;
			}
			else
			{
				k=0;continue;
			}
		}
		if(i==0&&k==0&&ch!='\n')
		{
			ft=ftell(fp)-1;//名字的第一个字符所在的位置锚定
			printf("ft=%ld\n",ft); 
		}
		if(i!=0&&k==0&&ch!='\n')
		{
			ft=ftell(fp)-1;//名字的第一个字符所在的位置锚定
			printf("ft=%ld\n",ft); 
		}
		if(ch!=' '&&ch!='\n')
		{
			t[k++]=ch;
		}
	}
	if(f==0)
	{
		printf("\n通讯录没有此姓名,可以存入其信息!\n\n");
	}
	fclose(fp);
	system("pause");
	return;
}
void abC3(void)
{
	system("cls");
	FILE* fp;
	char xmm[6],dhh[12];
	printf("请输入要被修改电话的姓名:");
	scanf(" %5s",xmm); 
	fp=fopen("./tell.txt","r+");clearerr(fp);
	if(fp==NULL)
	{
		printf("fail\n"); 
	}
	else
	{
		printf("OK\n");
	}
	int i,j,k=0,co=0,f=0;
	char ch,t[29];
	int ft=0; 
	for(i=0;(ch=fgetc(fp))!=EOF;i++)
	{
		if(ch=='\n'||ch=='\r'||ch=='>')
		{
			if(ch=='>')
			{
				t[k]='>';
				t[k+1]='\0';
			}
			puts(t);
			for(co=0,j=0;t[j]!='+';j++)
			{
//				printf("进来了,t[%d]:%c\n",j,t[j]);
				if(t[j+1]==xmm[j])
				{
//					putchar(t[j]);
					co++;
				}
			}
			if(co==strlen(xmm))
			{
				clearerr(fp);
				printf("已找到该姓名,请输入要改为的电话:");
				f=1;k=0;
				int tellen=0;
				while(tellen!=11)
				{
					scanf(" %11s",dhh);
					tellen=strlen(dhh);
					if(tellen!=11)
					{
						printf("输入电话应该是11位,请重新输入要改为的电话:");
					}
				}
				t[9]=dhh[0];t[10]=dhh[1];t[11]=dhh[2];
				t[12]=dhh[3];t[13]=dhh[4];t[14]=dhh[5];
				t[15]=dhh[6];t[16]=dhh[7];t[17]=dhh[8];
				t[18]=dhh[9];t[19]=dhh[10];
				puts(t);
				system("pause");
				printf("找到后ft=%ld",ft);
				fseek(fp,ft,SEEK_SET);
				fprintf(fp,"%s\0",t);
				fclose(fp);
				system("pause");
				return;
			}
			else
			{
				k=0;continue;
			}
		}
		if(i==0&&k==0&&ch!='\n')
		{
			ft=ftell(fp)-1;//名字的第一个字符所在的位置锚定
			printf("ft=%ld\n",ft); 
		}
		if(i!=0&&k==0&&ch!='\n')
		{
			ft=ftell(fp)-1;//名字的第一个字符所在的位置锚定
			printf("ft=%ld\n",ft); 
		}
		if(ch!=' '&&ch!='\n')
		{
			t[k++]=ch;
		}
	}
	if(f==0)
	{
		printf("\n通讯录没有此姓名,可以存入其信息!\n\n");
	}
	fclose(fp);
	system("pause");
	return;
}
void abC4(void)
{
	system("cls");
	FILE* fp;
	char xmm[6],nll[4];
	printf("请输入要被修改年龄的姓名:");
	scanf(" %5s",xmm); 
	fp=fopen("./tell.txt","r+");clearerr(fp);
	if(fp==NULL)
	{
		printf("fail\n"); 
	}
	else
	{
		printf("OK\n");
	}
	int i,j,k=0,co=0,f=0;
	char ch,t[29];
	int ft=0; 
	for(i=0;(ch=fgetc(fp))!=EOF;i++)
	{
		if(ch=='\n'||ch=='\r'||ch=='>')
		{
			if(ch=='>')
			{
				t[k]='>';
				t[k+1]='\0';
			}
			puts(t);
			for(co=0,j=0;t[j]!='+';j++)
			{
//				printf("进来了,t[%d]:%c\n",j,t[j]);
				if(t[j+1]==xmm[j])
				{
//					putchar(t[j]);
					co++;
				}
			}
			if(co==strlen(xmm))
			{
				clearerr(fp);
				printf("已找到该姓名,请输入要改为的年龄(3):");
				f=1;k=0;
				scanf(" %s",nll);
				if(strlen(nll)==1)
				{
					t[21]='*';t[22]='*';t[23]=nll[0];
				}
				if(strlen(nll)==2)
				{
					t[21]='*';t[22]=nll[0];t[23]=nll[1]; 
				}
				if(strlen(nll)==3)
				{
					t[21]=nll[0];t[22]=nll[1];t[23]=nll[2]; 
				}
				puts(t);
				system("pause");
				printf("找到后ft=%ld",ft);
				fseek(fp,ft,SEEK_SET);
				fprintf(fp,"%s\0",t);
				fclose(fp);
				system("pause");
				return;
			}
			else
			{
				k=0;continue;
			}
		}
		if(i==0&&k==0&&ch!='\n')
		{
			ft=ftell(fp)-1;//名字的第一个字符所在的位置锚定
			printf("ft=%ld\n",ft); 
		}
		if(i!=0&&k==0&&ch!='\n')
		{
			ft=ftell(fp)-1;//名字的第一个字符所在的位置锚定
			printf("ft=%ld\n",ft); 
		}
		if(ch!=' '&&ch!='\n')
		{
			t[k++]=ch;
		}
	}
	if(f==0)
	{
		printf("\n通讯录没有此姓名,可以存入其信息!\n\n");
	}
	fclose(fp);
	system("pause");
	return;
}
void abD1(void)
{
	system("cls");
	FILE* fp;
	char xmm[6];
	printf("请输入要被删除的姓名:");
	scanf(" %5s",xmm); 
	fp=fopen("./tell.txt","r+");clearerr(fp);
	if(fp==NULL)
	{
		printf("fail\n"); 
	}
	else
	{
		printf("OK\n");
	}
	int i,j,k=0,co=0,f=0;
	char ch,t[29];
	int ft=0; 
	for(i=0;(ch=fgetc(fp))!=EOF;i++)
	{
		if(ch=='\n'||ch=='\r'||ch=='>')
		{
			if(ch=='>')
			{
				t[k]='>';
				t[k+1]='\0';
			}
			puts(t);
			for(co=0,j=0;t[j]!='+';j++)
			{
//				printf("进来了,t[%d]:%c\n",j,t[j]);
				if(t[j+1]==xmm[j])
				{
//					putchar(t[j]);
					co++;
				}
			}
			if(co==strlen(xmm))
			{
				clearerr(fp);
				printf("已找到该姓名,开始删除!");
				f=1;k=0;
				xmm[0]='*';xmm[1]='*';xmm[2]='*';xmm[3]='*';xmm[4]='*';xmm[5]='\0';
				t[1]=xmm[0];t[2]=xmm[1];t[3]=xmm[2];t[4]=xmm[3];t[5]=xmm[4];
				puts(t);

				system("pause");
				printf("找到后ft=%ld",ft);
				fseek(fp,ft,SEEK_SET);
				fprintf(fp,"%s\0",t);
				printf("已经删除该姓名!");
				fclose(fp);
				system("pause");
				return;
			}
			else
			{
				k=0;continue;
			}
		}
		if(i==0&&k==0&&ch!='\n')
		{
			ft=ftell(fp)-1;//名字的第一个字符所在的位置锚定
			printf("ft=%ld\n",ft); 
		}
		if(i!=0&&k==0&&ch!='\n')
		{
			ft=ftell(fp)-1;//名字的第一个字符所在的位置锚定
			printf("ft=%ld\n",ft); 
		}
		if(ch!=' '&&ch!='\n')
		{
			t[k++]=ch;
		}
	}
	if(f==0)
	{
		printf("\n通讯录没有此姓名,可以存入其信息!\n\n");
	}
	fclose(fp);
	system("pause");
	return;
}
void abD2(void)
{
	system("cls");
	FILE* fp;
	char xmm[6],xbb[2];
	printf("请输入要被删除性别的姓名:");
	scanf(" %5s",xmm); 
	fp=fopen("./tell.txt","r+");clearerr(fp);
	if(fp==NULL)
	{
		printf("fail\n"); 
	}
	else
	{
		printf("OK\n");
	}
	int i,j,k=0,co=0,f=0;
	char ch,t[29];
	int ft=0; 
	for(i=0;(ch=fgetc(fp))!=EOF;i++)
	{
		if(ch=='\n'||ch=='\r'||ch=='>')
		{
			if(ch=='>')
			{
				t[k]='>';
				t[k+1]='\0';
			}
			puts(t);
			for(co=0,j=0;t[j]!='+';j++)
			{
//				printf("进来了,t[%d]:%c\n",j,t[j]);
				if(t[j+1]==xmm[j])
				{
//					putchar(t[j]);
					co++;
				}
			}
			if(co==strlen(xmm))
			{
				clearerr(fp);
				printf("已找到该姓名的性别,开始删除!");
				f=1;k=0;
				t[7]='*';
				puts(t);
				system("pause");
				printf("找到后ft=%ld",ft);
				fseek(fp,ft,SEEK_SET);
				fprintf(fp,"%s\0",t);
				printf("已删除该姓名的性别!");
				fclose(fp);
				system("pause");
				return;
			}
			else
			{
				k=0;continue;
			}
		}
		if(i==0&&k==0&&ch!='\n')
		{
			ft=ftell(fp)-1;//名字的第一个字符所在的位置锚定
			printf("ft=%ld\n",ft); 
		}
		if(i!=0&&k==0&&ch!='\n')
		{
			ft=ftell(fp)-1;//名字的第一个字符所在的位置锚定
			printf("ft=%ld\n",ft); 
		}
		if(ch!=' '&&ch!='\n')
		{
			t[k++]=ch;
		}
	}
	if(f==0)
	{
		printf("\n通讯录没有此姓名,可以存入其信息!\n\n");
	}
	fclose(fp);
	system("pause");
	return;
}
void abD3(void)
{
	system("cls");
	FILE* fp;
	char xmm[6],dhh[12];
	printf("请输入要被删除电话的姓名:");
	scanf(" %5s",xmm); 
	fp=fopen("./tell.txt","r+");clearerr(fp);
	if(fp==NULL)
	{
		printf("fail\n"); 
	}
	else
	{
		printf("OK\n");
	}
	int i,j,k=0,co=0,f=0;
	char ch,t[29];
	int ft=0; 
	for(i=0;(ch=fgetc(fp))!=EOF;i++)
	{
		if(ch=='\n'||ch=='\r'||ch=='>')
		{
			if(ch=='>')
			{
				t[k]='>';
				t[k+1]='\0';
			}
			puts(t);
			for(co=0,j=0;t[j]!='+';j++)
			{
//				printf("进来了,t[%d]:%c\n",j,t[j]);
				if(t[j+1]==xmm[j])
				{
//					putchar(t[j]);
					co++;
				}
			}
			if(co==strlen(xmm))
			{
				clearerr(fp);
				printf("已找到该姓名的电话,开始删除!");
				f=1;k=0;
				t[9]='*';t[10]='*';t[11]='*';
				t[12]='*';t[13]='*';t[14]='*';
				t[15]='*';t[16]='*';t[17]='*';
				t[18]='*';t[19]='*';
				puts(t);
				system("pause");
				printf("找到后ft=%ld",ft);
				fseek(fp,ft,SEEK_SET);
				fprintf(fp,"%s\0",t);
				printf("已经删除该姓名的电话!"); 
				fclose(fp);
				system("pause");
				return;
			}
			else
			{
				k=0;continue;
			}
		}
		if(i==0&&k==0&&ch!='\n')
		{
			ft=ftell(fp)-1;//名字的第一个字符所在的位置锚定
			printf("ft=%ld\n",ft); 
		}
		if(i!=0&&k==0&&ch!='\n')
		{
			ft=ftell(fp)-1;//名字的第一个字符所在的位置锚定
			printf("ft=%ld\n",ft); 
		}
		if(ch!=' '&&ch!='\n')
		{
			t[k++]=ch;
		}
	}
	if(f==0)
	{
		printf("\n通讯录没有此姓名,可以存入其信息!\n\n");
	}
	fclose(fp);
	system("pause");
	return;
}
void abD4(void)
{
	system("cls");
	FILE* fp;
	char xmm[6],nll[4];
	printf("请输入要被删除年龄的姓名:");
	scanf(" %5s",xmm); 
	fp=fopen("./tell.txt","r+");clearerr(fp);
	if(fp==NULL)
	{
		printf("fail\n"); 
	}
	else
	{
		printf("OK\n");
	}
	int i,j,k=0,co=0,f=0;
	char ch,t[29];
	int ft=0; 
	for(i=0;(ch=fgetc(fp))!=EOF;i++)
	{
		if(ch=='\n'||ch=='\r'||ch=='>')
		{
			if(ch=='>')
			{
				t[k]='>';
				t[k+1]='\0';
			}
			puts(t);
			for(co=0,j=0;t[j]!='+';j++)
			{
//				printf("进来了,t[%d]:%c\n",j,t[j]);
				if(t[j+1]==xmm[j])
				{
//					putchar(t[j]);
					co++;
				}
			}
			if(co==strlen(xmm))
			{
				clearerr(fp);
				printf("已找到该姓名的年龄,开始删除!");
				f=1;k=0;
				t[21]='*';t[22]='*';t[23]='*'; 
				puts(t);
				system("pause");
				printf("找到后ft=%ld",ft);
				fseek(fp,ft,SEEK_SET);
				fprintf(fp,"%s\0",t);
				printf("已删除该姓名的年龄!");
				fclose(fp);
				system("pause");
				return;
			}
			else
			{
				k=0;continue;
			}
		}
		if(i==0&&k==0&&ch!='\n')
		{
			ft=ftell(fp)-1;//名字的第一个字符所在的位置锚定
			printf("ft=%ld\n",ft); 
		}
		if(i!=0&&k==0&&ch!='\n')
		{
			ft=ftell(fp)-1;//名字的第一个字符所在的位置锚定
			printf("ft=%ld\n",ft); 
		}
		if(ch!=' '&&ch!='\n')
		{
			t[k++]=ch;
		}
	}
	if(f==0)
	{
		printf("\n通讯录没有此姓名,可以存入其信息!\n\n");
	}
	fclose(fp);
	system("pause");
	return;
}
/*下面是主功能函数*/
void menuA(void)
{
	while(1)
	{
	    system("cls");
	    printf("*************************选项A功能*************************\n""|  A1:存一次    A2:存两次    A3:存三次    A4:存四次  |\n");
	    printf("***********************************************************\n");
	    printf("请输入要操作的选项A功能(1,2,3,4),返回主菜单请按R:");
	    getchar();
	    switch(getchar())
	    {
	    	case 'R':return;
	    	case 'r':return;
	    	case '1':abA1();break;
	    	case '2':abA2();break;
	    	case '3':abA3();break;
	    	case '4':abA4();break;
		}
	} 
}
void menuB(void)
{
	while(1)
	{
	    system("cls");
    	printf("*************************选项B功能*************************\n""|  B1:查姓名    B2:查性别    B3:查电话    B4:查年龄  |\n");
	    printf("***********************************************************\n");
	    printf("请输入要操作的选项A功能(1,2,3,4),返回主菜单请按R:");
	    getchar();
	    switch(getchar())
	    {
	    	case 'R':return;
	    	case 'r':return;
	    	case '1':abB1();break;
	    	case '2':abB2();break;
	    	case '3':abB3();break;
	    	case '4':abB4();break;
		}
	} 
}
void menuC(void)
{
	while(1)
	{
	    system("cls");
    	printf("*************************选项C功能*************************\n""|  C1:改姓名    C2:改性别    C3:改电话    C4:改年龄  |\n");
	    printf("***********************************************************\n");
	    printf("请输入要操作的选项A功能(1,2,3,4),返回主菜单请按R:");
	    getchar();
	    switch(getchar())
	    {
	    	case 'R':return;
	    	case 'r':return;
	    	case '1':abC1();break;
	    	case '2':abC2();break;
	    	case '3':abC3();break;
	    	case '4':abC4();break;
		}
	} 
}
void menuD(void)
{

	while(1)
	{
	    system("cls");
    	printf("*************************选项D功能*************************\n""|  D1:删姓名    D2:删性别    D3:删电话    D4:删年龄  |\n");
	    printf("***********************************************************\n");
	    printf("请输入要操作的选项A功能(1,2,3,4),返回主菜单请按R:");
	    getchar();
	    switch(getchar())
	    {
	    	case 'R':return;
	    	case 'r':return;
	    	case '1':abD1();break;
	    	case '2':abD2();break;
	    	case '3':abD3();break;
	    	case '4':abD4();break;
		}
	} 
}

main.c

#include <stdio.h>
#include <stdlib.h>
#include "TelSeaSys.h"
int main() 
{
	tratxt();
    while(1)
    {
        rootmenu();
        switch(getchar())
        {
            case 'Q': printf("\n<----------------【电话号码管理系统version1.0_已执行退出!!】---------------->\n\n");return 0;
            case 'A': menuA();break;
            case 'B': menuB();break;
            case 'C': menuC();break;
            case 'D': menuD();break;
            case 'E': tratxt();break; 
            case 'q': printf("\n<-----------------【电话号码管理系统version1.0_已执行退出!!】----------------->\n\n");return 0;
            case 'a': menuA();break;
            case 'b': menuB();break;
            case 'c': menuC();break;
            case 'd': menuD();break;
            case 'e': tratxt();break; 
            default: break;
        }
    }
    system("pause");
    return 0;
}

运行结果示例

1.启动界面
在这里插入图片描述

2.退出界面
在这里插入图片描述
3.主菜单界面
在这里插入图片描述

4.功能A界面
在这里插入图片描述
5.功能B界面
在这里插入图片描述
6.功能C界面
在这里插入图片描述
7.功能D界面
在这里插入图片描述
8.功能A第二个选项“A2:存两次”举例
在这里插入图片描述

9.功能B第四个选项“B4:查年龄”举例
在这里插入图片描述
10.功能C第三个选项“C3:改电话”举例
在这里插入图片描述

11.功能D第四个选项“D4:删年龄”举例及操作结果查看
在这里插入图片描述
在这里插入图片描述


------------------------------------------------------第一次发项目类文章有点激动啊!-----------------------------------------------------
-----------------------------------------------------【C语言—微项目—自编练习】------------------------------------------------------
----------------------------------------------------------------【TDTX】-----------------------------------------------------------------

posted @ 2021-11-23 14:15  TDTX  阅读(172)  评论(0编辑  收藏  举报