文件 | 函数名或其他成分 | 参数和返回值 | 功能 |
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;
}
[点击并拖拽以移动]