通讯录管理系统

 

文件

函数名或其他成分

参数和返回值

功能

main.c

main

参数为无,

返回值为0

实现系统处理主流程,对其他函数进行调用

data.h

struct  tel

struct acc

参数为无,

返回值为无

结构体定义;全局变量定义;

add.c

Add

参数为Telinf a[MAX],int i,

返回值为i

录入联系人的各类信息

dele.c

Dele

参数为Telinf a[MAX],int i,

返回值为i

删除联系人的各类信息

search.c

Search

参数为Telinf a[MAX],int i,

返回值为无

根据输入信息查询联系人

update.c

Update

参数为Telinf a[MAX],int i,

返回值为无

修改对应联系人的信息

Fuzzy.c

fuzzy

参数为Telinf a[MAX],int i,

返回值为无

根据输入信息查询联系人

Sort.c

sort

参数为Telinf a[MAX],int i,

返回值为无

对联系人进行排序

Show.c

Show

参数为Telinf a[MAX],int i,

返回值为无

显示所有联系人

accountmain.c

accountmain

参数为

accoount a[MAX],account *b,

返回值为无

账号处理主流程,对其他函数进行调用

enter.c

enter

参数为accoount a[MAX],

int i, account *b,

返回值为i

账户的登入界面

register.c

registe

参数为

accoount a[MAX],int i,

返回值为i

账户的注册界面

accountupdate.c

accountupdate

参数为

accoount a[MAX],int i,

返回值为无

账户的修改界面

coveraccount.c

coveraccount

参数为无,

返回值为无

输入账户的提示界面

cover.c

cover

参数为无,

返回值为无

输入联系人信息的提示界面

Quit.c

quit

参数为无,

返回值为无

退出通讯录管理系统的界面

Save.c

Save

参数为Telinf a[MAX],int i,

Account *b

返回值为无

联系人信息保存界面

Init.c

init

参数为Telinf a[MAX],int i,

Account *b

返回值为无

联系人信息初始化界面

saveaccount.c

saveaccount

参数为

accoount a[MAX],int i,

返回值为无

账户信息保存界面

accountinit

accountinit

参数为

accoount a[MAX],int i,

返回值为无

 账户信息初始化界面

​

# include <stdio.h>
#include <string.h>
# include <stdlib.h>
#define MAX_NAME 10
#define MAX_SEX 4
#define MAX_BIRTHDAY 15
#define MAX_MOBILE 15
#define MAX_TEL_QQ 15
#define MAX_TEL_WEI 15
#define MAX 200
#define MAX_ACCOUNT 20
#define MAX_PASSWORD 15
#define MAX_NUMBER 15
#define MAX_AGE 15 
#define MAX_FRUIT 15

typedef struct tel 
{
	char number[MAX_NUMBER];  //编号 
	char name [MAX_NAME];  //姓名 
	char sex [MAX_SEX];  //性别 
	char birthday [MAX_BIRTHDAY];  //生日 
	char mobile_phone [MAX_MOBILE];  //移动电话 
	char wx[MAX_TEL_WEI];//微信 
	char qq[MAX_TEL_QQ];//QQ
	char age[MAX_AGE];//年龄 
} Telinf;

typedef struct acc 
{
	char accout[MAX_ACCOUNT];//账户 
	char password[MAX_PASSWORD];//密码 
 }account;
void Save(Telinf a[MAX],int i,account *b)联系人信息保存到文件 
void cover();zha通讯录信息的主菜单
int Add (Telinf a[MAX], int i);添加 
int Dele (Telinf a[MAX], int i);删除
void Search(Telinf a[MAX], int i);查找
void Update (Telinf a[MAX], int i);修改
void sort(Telinf a[MAX], int i);排序
void fuzzy(Telinf a[MAX], int i);模糊查找
void Quit();退出界面
void Show (Telinf a[MAX], int i);显示所有信息
int accountinit(account a[MAX]);账户初始化
void saveaccount (account a[MAX], int i);账户保存到文件
void accountmain(account a[MAX], account *b);账户的登入主界面
void accountupdate(account a[MAX], int i);账户修改
int enter(account a[MAX], int i, account *b);账户登入
int registe(account a[MAX], int i);账户注册
int Init(Telinf a[MAX],account *b);联系人信息初始化|导入
void coveraccount();账户登入的主菜单
int main ()
{
	Telinf tel[200];
	char c[10] = ".txt";
	account acc[200],b;
	account *mz = &b;
	int choice;
	int length = 0;
	char ch;
	int h = 0;
	accountmain(acc, mz);
	
	strcat(mz -> accout, c);
	length = Init (tel, *mz); 
	do{
		cover (); 
		fflush (stdin);
		scanf ("%d", &choice);
		switch (choice)
		{	
			case 1 : 
				length = Add (tel, length);
				Save (tel, length, *mz);
			break;
			case 2 : 
				length = Dele (tel, length); 
				Save (tel, length, *mz);
			break;
			case 3 : 
				Update (tel, length); 
				Save (tel, length, *mz);
			break;
			case 4 : 
				Search (tel, length); 
			break;
			case 7 :
				Show (tel, length);
			break;
			case 5 :
				fuzzy (tel, length);
			break;
			case 6 :
				sort(tel, length);
				Save (tel, length, *mz);
			break;
			default : 
				Quit (); return 0;
	 		} 
	 		fflush(stdin);
	 		if (choice == 1 || choice == 2 || choice == 3)
	 			printf ("\t\t\t\t\t          输入内容已经完成记录\n");
	 		printf ("\t\t    如果继续使用其他功能,请输入y,否则输入其他\n"); 
			 scanf ("%c", &ch); 
			 if (ch != 'y' && ch != 'Y') Quit ();
			 system("cls"); 
		}while (ch == 'y'|| ch == 'Y');
		getchar();
		
	return 0;
 }  
int Add (Telinf a[MAX], int i)  //添加 
{
	int j = 0;
	printf ("请输入你的编号:");
	fflush (stdin);
	scanf ("%s", a[i].number);
	printf ("请输入你的名字:");
	fflush (stdin);
	scanf ("%s", a[i].name);
	printf ("请输入你的年龄:");
	fflush (stdin);
	scanf ("%s", a[i].age);
	printf ("请输入你的性别:");
	fflush (stdin);
	scanf ("%s", a[i].sex);
	printf ("请输入你的生日:");
	fflush (stdin);
	scanf ("%s", a[i].birthday);
	printf ("请输入你的移动电话:");
	fflush (stdin);
	scanf ("%s", a[i].mobile_phone);
	printf ("请输入你的微信:");
	fflush (stdin);
	scanf ("%s", a[i].wx);
	printf ("请输入你的QQ:");
	fflush (stdin);
	scanf ("%s", a[i].qq);
	return i + 1;	 
}  
void cover ()
{
	printf("\n");
	printf("\t\t\t\t**************************************\n");
	printf("\t\t\t\t************通讯录管理系统************\n");
	printf("\t\t\t\t======================================\n");
	printf("\t\t\t\t*          1.录入联系人信息          *\n");
	printf("\t\t\t\t*          2.删除联系人信息          *\n");
	printf("\t\t\t\t*          3.修改联系人信息          *\n");
	printf("\t\t\t\t*          4.查找联系人信息          *\n");
	printf("\t\t\t\t*          5.模糊查找联系人          *\n");
	printf("\t\t\t\t*          6.联系人排序              *\n");
	printf("\t\t\t\t*          7.显示所有联系人          *\n");
	printf("\t\t\t\t*          0.退出系统                *\n");
	printf("\t\t\t\t======================================\n");
	printf("\t\t\t\t**************************************\n");
	printf("\t\t\t\t          请选择(0-7):");
}
int Dele (Telinf a[MAX], int i)  //删除 
{
	char sech[20], num[15];
	int k,find;
	int n;
	int z = 0, j, m = 0;
	printf ("请输入要删除的姓名");
	fflush (stdin);
	gets (sech);
	for (k = 0; k < i; k ++)
	{
		if (strcmp(sech, a[k].name) == 0) 
		{
			printf ("编号:%s", a[k].number);
			printf ("\t姓名:%s", a[k].name);
			printf ("\t年龄:%s", a[k].age);
			printf ("\t性别:%s", a[k].sex);
			printf ("\t生日:%s", a[k].birthday);
			printf ("\t移动电话:%s", a[k].mobile_phone);
			printf ("\t微信:%s", a[k].wx);
			printf ("\tQQ:%s\n", a[k].qq);
			m ++;
		}
	}
	if(m > 1)
	{
		printf("由于通讯录中含有多条你要删除姓名的信息:\n");
		printf("一起删除,请按1。\n");
		printf("选择其中一条删除,请按2。\n");
		scanf("%d",&n);
	}
	if(n == 2 || m == 1)
	{
		printf("请选择你要删除的编号:");
		scanf("%s" ,num); 
		for (k = 0; k < i; k ++)
		{
			if(strcmp(num, a[j].number) == 0) 
			 	break;
		}
		for (find = k; find < i - 1; find ++)
			a[find] = a[find + 1];
	}
	else if(n == 1)
	{
		for(k = 0; k < m; k ++)
		{
			for(j = 0; j < i; j ++)
			{
				if(strcmp(num, a[j].number) == 0) 
					break;
			}
			for (find = k; find < i - 1; find ++)
				a[find] = a[find + 1];
			i --;
		}
	}
	return i - 1;
}
void Search(Telinf a[MAX], int i)  //查找 
{
	char ch[15];
	int j;
	int num;
	printf("请选择你要查找的方式:\n");
	printf("姓名查找,请按1。\n");
	printf("电话查找,请按2。\n");
	scanf("%d",&num); 
	if(num == 1)
	{
		printf ("请输入你想查找人的名字:");
		scanf ("%s",ch);
		for (j = 0; j < i; j ++)
		{
			if (strcmp(ch, a[j].name) == 0) 
			{
				printf ("编号:%s\n", a[j].number);
				printf ("姓名:%s\n", a[j].name);
				printf ("年龄:%s\n", a[j].age);
				printf ("性别:%s\n", a[j].sex);
				printf ("生日:%s\n", a[j].birthday);
				printf ("移动电话:%s\n", a[j].mobile_phone);
				printf ("微信:%s\n", a[j].wx);
				printf ("QQ:%s\n", a[j].qq);
			}
		} 
		if(j == i)
		 	printf ("请重新确定你要找的人的姓名。"); 	
	}
	else if(num  == 2)
	{
		printf ("请输入你想查找人的电话:");
		scanf ("%s",ch);
		for (j = 0; j < i; j ++)
		{
			if (strcmp(ch, a[j].mobile_phone) == 0) 
			{
				printf ("编号:%s\n", a[j].number);
				printf ("姓名:%s\n", a[j].name);
				printf ("年龄:%s\n", a[j].age);
				printf ("性别:%s\n", a[j].sex);
				printf ("生日:%s\n", a[j].birthday);
				printf ("移动电话:%s\n", a[j].mobile_phone);
				printf ("微信:%s\n", a[j].wx);
				printf ("QQ:%s\n", a[j].qq);
			}
		} 
		if(j == i)
	 		printf ("请重新确定你要找的人的电话。");
	}
}
void Update (Telinf a[MAX], int i)  //修改 
{
	char x[100];
	int j;
	int m; 
	printf ("请输入你要修改人的名字:");
	scanf ("%s", x);
	for (j = 0; j < i; j ++)
	{
		if (strcmp(x, a[j].name) == 0)
		break;
	}
	
	printf ("修改姓名请按0\n"); 
	printf ("修改年龄请按1\n"); 
	printf ("修改性别请按2\n"); 
	printf ("修改生日请按3\n"); 
	printf ("修改移动电话请按4\n"); 
	printf ("修改微信请按5\n"); 
	printf ("修改QQ请按6\n"); 
	scanf ("%d", &m);
	switch (m)
	{
		case 0: 
		printf ("请输入你要修改的名字:"); 
		scanf ("%s",a[j].name);
		break; 
		case 1: 
		printf ("请输入你要修改的年龄:");
		scanf ("%s",a[j].age);
		break; 
		case 2: 
		printf ("请输入你要修改的性别:");
		scanf ("%s",a[j].sex);
		break; 
		case 3: 
		printf ("请输入你要修改的生日:");
		scanf ("%s",a[j].birthday);
		break; 
		case 4: 
		printf ("请输入你要修改的移动电话:");
		scanf ("%s",a[j].mobile_phone);
		break; 
		case 5: 
		printf ("请输入你要修改的微信:");
		scanf ("%s",a[j].wx);
		case 6:
		printf ("请输入你要修改的QQ:");
		scanf("%s",a[j].qq);
		break; 
	}
}
void Show (Telinf a[MAX], int i)  //显示所有信息 
{
	int j;
	if(i == 0)
	{
		printf("通讯录内没有内容。\n");
	}
	else if(i != 0)
	{
		printf ("编号");
		printf ("\t姓名");
		printf ("\t年龄");
		printf ("\t性别");
		printf ("\t生日");
		printf ("\t移动电话");
		printf ("\t微信");
		printf ("\tQQ");
		for (j = 0; j < i; j ++)
		{
			printf ("\n");
			printf ("%s", a[j].number);
			printf ("\t%s",a[j].name);
			printf ("\t%s", a[j].age);
			printf ("\t%s", a[j].sex);
			printf ("\t%s", a[j].birthday);
			printf ("\t%s", a[j].mobile_phone);
			printf ("\t%s", a[j].wx);
			printf ("\t%s", a[j].qq);
		} 
		 printf("\n");	
	}
}
void Quit()
{
	printf("\n\t                         ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★\n\n");
	puts("\n");
	puts("\t                             ┃                                               ┃");
	puts("\t                             ┃                                               ┃");
	puts("\t                             ┃     感谢访问通信录管理系统!欢迎下次再来!      ┃");
	puts("\t                             ┃                                               ┃");
	puts("\t                             ┃                                               ┃");
	puts("\t                             ┃                  制作人:以为                   ┃");
	puts("\t                             ┃                          2022.3.9             ┃ ");
	puts("\n ");
}
void sort(Telinf a[MAX], int i) //排序 
{
	int choice;
	int j, z;
	Telinf temp;
	printf("请选择你要排序的方式:\n"); 
	printf("按照姓名排序请按1\n"); 
	printf("按照年龄排序请按2\n"); 
	scanf("%d", &choice);
	if(choice == 1)
	{
		for(j = 0; j < i; j ++)
		{
			for(z = j + 1; z < i; z ++)
			{
				if (strcmp(a[j].name ,a[z].name) > 0)
				{
					temp = a[j];
					a[j] = a[z];
					a[z] = temp; 
				}
				else if(strcmp(a[j].name ,a[z].name) == 0) 
				{
					if(a[j].number > a[z].number)
					{
						temp = a[j];
						a[j] = a[z];
						a[z] = temp; 
					}
				}
			}
		}
	}
	else if(choice == 2)
	{
		for(j = 0; j < i; j ++)
		{
			for(z = j + 1; z < i; z ++)
			{
				if (a[j].age > a[z].age)
				{
					temp = a[j];
					a[j] = a[z];
					a[z] = temp; 
				}
			}
		}
	}	
}
void fuzzy(Telinf a[MAX], int i)//模糊查找 
{
	char ch[100];
	int j;
	printf("请输入你想查找人的信息:");
	scanf ("%s",ch);
	for (j = 0; j < i; j ++)
	{
		if (strcmp(ch, a[j].name) == 0 || strcmp(ch, a[j].sex) == 0 || strcmp(ch, a[j].birthday) == 0 
		|| strcmp(ch, a[j].mobile_phone) == 0 || strcmp(ch, a[j].wx) == 0 || strcmp(ch, a[j].qq) == 0
		|| strcmp(ch, a[j].number) == 0 || strcmp(ch, a[j].age) == 0) 
		{
			printf ("姓名:%s", a[j].name);
			printf ("\t年龄:%s", a[j].age);
			printf ("\t性别:%s", a[j].sex);
			printf ("\t生日:%s", a[j].birthday);
			printf ("\t移动电话:%s", a[j].mobile_phone);
			printf ("\t微信:%s", a[j].wx);
			printf ("\tQQ:%s\n", a[j].qq);
		}
	 } 
}
void accountmain(account a[MAX], account *b)
{
	int choice;
	int extent = 0;
	char ch;
	int flag = 0;
	extent = accountinit (a);
	do{
		coveraccount();
		scanf ("%d", &choice);
		switch (choice)
		{	
			case 1 : 
				flag = enter(a, extent, b); 
				break;
			case 2 : 
				extent = registe(a, extent);
				strcpy(b -> accout, a[extent - 1].accout); 
				saveaccount (a, extent);	
				break;				
			case 3 : 
				accountupdate (a, extent); 
				saveaccount (a, extent);
				break;
			case 4 : 
				Quit (); 
				break;
	 	} 
	 	fflush(stdin);
	}while (ch == 'y'|| ch == 'Y');
 }
int enter(account a[MAX], int i, account *b)
{
	int flag = 0, j;
	do{
	printf("请输入账户:\n");
	scanf("%s", b -> accout);
	printf("请输入密码:\n");
	scanf("%s", b -> password);
	for(j = 0; j < i; j ++)
	{
		if(strcmp(b -> accout, a[j].accout) == 0 && strcmp(b -> password, a[j].password) == 0)
		{
			flag = 1;
			break; 
		}		
	}
	}while (flag == 0);
	return flag;
}
void coveraccount()
{
	printf("\n");
	printf("\t\t\t\t**************************************\n");
	printf("\t\t\t\t************通讯录管理系统************\n");
	printf("\t\t\t\t======================================\n");
	printf("\t\t\t\t*          1.登录                    *\n");
	printf("\t\t\t\t*          2.注册                    *\n");
	printf("\t\t\t\t*          3.修改密码                *\n");
	printf("\t\t\t\t*          4.退出                    *\n");
	printf("\t\t\t\t======================================\n");
	printf("\t\t\t\t**************************************\n");
	printf("\t\t\t\t          请选择(1-4):");
}
void accountupdate(account a[MAX], int i)
{
	account z;
	int flag = 0;
	char x[100];
	int j;
	int m; 
	printf ("请输入你要修改账户:\n");
	scanf ("%s", x);
	for (j = 0; j < i; j ++)
	{
		if (strcmp(x, a[j].accout) == 0)
		break;
	}
	if(j == i) 
		printf("请重新确定你要修改的账户\n");
	printf("请输入你要修改的密码:\n");
	scanf("%s",a[j].password); 
	printf("请再次输入你要修改的密码:\n");
	scanf("%s",z.password); 
	if(strcmp(z.password, a[j].password) != 0)
	{
		printf("密码输入不一致\n");
		flag = 1;
	} 
	if(flag == 1)
		scanf("%s",a[j].password);
}
int Init(Telinf a[MAX],account *b)  //初始化|导入 
{
	FILE *fp; 
    int i, count = 0;
	fp = fopen (b -> accout, "r");
    if (fp == NULL)
	{
        printf ("\t\t\t\t    目前还没有该文件,正在创建\n");
        printf ("\t\t\t\t             请继续\n"); 
    }
    for (i = 0; ; i ++)
    {
    	if (fread( &a[count], sizeof (Telinf), 1, fp) == 1)
    	count ++;
    	else if(fread ( &a[count], sizeof (Telinf), 1, fp) != 1) 
		break;
	}
	fclose (fp);
	return count; 
}
void Save (Telinf a[MAX], int i, account *b)  //保存到文件 
{
	FILE *fp;
	int k;
	fp = fopen (b -> accout, "w");
	for (k = 0; k < i; k ++)
	{
		fwrite (&a[k], sizeof (Telinf), 1, fp);
	} 
	 fclose (fp);
}
void saveaccount (account a[MAX], int i)  //保存到文件 
{
	FILE *fp;
	int k;
	fp = fopen ("account.txt", "w");
	for(k = 0; k < i; k ++)
	{
		fwrite (&a[k], sizeof (account), 1, fp);
	} 
	 fclose (fp);
}
int accountinit(account a[MAX])  //初始化|导入 
{
	FILE *fp; 
    int i, count = 0;
    fp = fopen ("account.txt", "r");
    if (fp == NULL)
	{
        printf ("\t\t\t\t    目前还没有该文件,正在创建\n");
        printf ("\t\t\t\t             请继续\n"); 
    }
    for (i = 0; ; i ++)
    {
    	if (fread ( &a[count], sizeof (account), 1, fp) == 1)
    	count ++;
    	else if (fread( &a[count], sizeof (account), 1, fp) != 1) 
		break;
	}
	fclose(fp);
	return count; 
}
int registe(account a[MAX], int i)
{
	account z;
	int j;
	int flag = 0;
	char yn;
	printf("请输入你要创建的账户名:\n");
	fflush (stdin);
	scanf("%s", a[i].accout);
	for(j = 0; j < i; j ++)
	{
		if(strcmp(a[i].accout, a[j].accout) == 0)
		{
			flag = 1;
			break; 
		}
	 } 
	if(flag == 1)
	{
	 	printf("账户重复,请重新输入。\n");
	 	scanf("%s", a[i].accout);
	}
	printf("请输入密码:\n");
	fflush(stdin);
	gets(a[i].password);
	printf("请再次输入密码:\n");
	fflush(stdin);
	gets(z.password);
	if(strcmp(z.password, a[i].password) != 0)
	{
		printf("密码输入不一致\n");
	}
	return i + 1;
}

[点击并拖拽以移动]
​

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值