#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
//#define _CRT_SECURE_NO_WARNINGS
struct person
{
char num[20]; //手机号
char name[20]; //姓名
char email[20]; //邮箱
char address[50]; //地址
};
int menu()//菜单
{
int choice;
//显示页面
system("cls");
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----------------------------------------------------------\n");
printf("\t\t\t\t| 2-删除联系人 |\n");
printf("\t\t\t\t----------------------------------------------------------\n");
printf("\t\t\t\t| 3-修改联系人 |\n");
printf("\t\t\t\t----------------------------------------------------------\n");
printf("\t\t\t\t| 4-按名字查询联系人 |\n");
printf("\t\t\t\t----------------------------------------------------------\n");
printf("\t\t\t\t| 5-按号码查询联系人 |\n");
printf("\t\t\t\t----------------------------------------------------------\n");
printf("\t\t\t\t| 6-按姓名显示 |\n");
printf("\t\t\t\t----------------------------------------------------------\n");
printf("\t\t\t\t| 7-按号码显示 |\n");
printf("\t\t\t\t----------------------------------------------------------\n");
printf("\t\t\t\t| 8-显示全部联系人 |\n");
printf("\t\t\t\t---------------------------------------------------------\n");
printf("\t\t\t\t| 9-保存文件 |\n");
printf("\t\t\t\t----------------------------------------------------------\n");
printf("\t\t\t\t| 0-退出程序 |\n");
printf("\t\t\t\t----------------------------------------------------------\n");
printf("\t\t\t\t请选择功能:");
scanf_s("%d", &choice);
while (choice > 9 || choice < 0)//判断是否输入正确
{
printf("请重新选择:");
scanf_s("%d", &choice);
}
return choice;
}
int add_person(struct person arr[], int n) //添加联系人函数
{
system("cls"); //清屏
printf("请输入联系人姓名:");
scanf_s("%s", arr[n].name,sizeof(arr[n].name));//输入个人信息
printf("请输入联系人手机号:");
scanf_s("%s", arr[n].num,sizeof(arr[n].num));
printf("请输入联系人邮箱:");
scanf_s("%s", arr[n].email,sizeof(arr[n].email));
printf("请输入联系人地址:");
scanf_s("%s", arr[n].address,sizeof(arr[n].address));
printf("添加成功!\n");
system("pause"); //暂停界面
return n + 1;
}
void print_person(struct person arr[], int n)//从首地址开始打印n个人的信息
{
int i;
printf("%-15s%-15s%-15s%-15s\n", "姓名","手机号", "邮箱", "地址");
for (i = 0; i < n; i++)
{
printf("%-15s", arr[i].name);
printf("%-15s", arr[i].num);
printf("%-15s", arr[i].email);
printf("%-15s", arr[i].address);
printf("\n");
}
}
int delete_person(struct person arr[], int n)//删除联系人函数
{
int i, j;
char temp[20];
char judge[10];
system("cls");//清屏
printf("请输入要删除的联系人:");
scanf_s("%s", temp,sizeof(temp));
for (i = 0; i < n; i++)//搜索该联系人
{
if (!strcmp(temp, arr[i].name))
break;//找到后下标i后跳出
}
if (i == n)
{
printf("没有该联系人!");
system("pause");
return n;
}
print_person(&arr[i], 1);//打印该联系人的信息
printf("是否删除'Y'or'N':");
scanf_s("%s",judge,sizeof(judge));//输入确认命令
if (strcmp(judge, "y") == 0 || strcmp(judge,"Y")==0)//判断是否执行删除操作
{
for (j = i; j < n; j++)//i元素后元素整体前移,作抽象删除
{
arr[j] = arr[j + 1];
}
printf("删除成功!\n");
system("pause");//暂停界面
return (n - 1);//返回联系人个数n-1
}
else
{
printf("已取消删除\n");
system("pause");
return n;
}
}
void modify_person(struct person arr[], int n)//修改联系人信息函数
{
int i;
char temp[20];
char judge[10];
struct person arr0; //临时储存
system("cls");
printf("请输入要修改的联系人:");
scanf_s("%s", temp,sizeof(temp));//输入要修改联系人的名字
for (i = 0; i < n; i++)//搜索该联系人并得到下标i
{
if (strcmp(temp, arr[i].name) == 0)
break;
}
if (i == n)
{
printf("无该联系人!");
system("pause");
return;
}
print_person(&arr[i], 1);//输出该联系人信息
printf("请重新输入联系人手机号:\n");
scanf_s("%s", arr0.num,sizeof(arr[n].num));
printf("请重新输入联系人地址:\n");
scanf_s("%s", arr0.address,sizeof(arr[n].address));
printf("请重新输入联系人手机号:\n");
scanf_s("%s", arr0.email, sizeof(arr[n].email));
printf("是否确认修改Y/N?:\n ");
scanf_s("%s", judge,sizeof(judge));//输入口令判断是否执行修改操作
if (strcmp(judge, "y") == 0 || strcmp(judge, "Y") == 0)
{
strcpy_s(arr0.name, arr[i].name);
arr[i] = arr0;
printf("修改成功!\n");
system("pause");
return;
}
else
{
printf("已取消修改!");
system("pause");
return;
}
}
void search_person_name(struct person arr[], int n)//搜索函数
{
int i;
char temp[20];
system("cls");
printf("请输入要查询的联系人:");
scanf_s("%s", temp,sizeof(temp));
for (i = 0; i < n; i++)
{
if (strcmp(arr[i].name, temp) == 0)
{
break;
}
}
if (i == n)
{
printf("未查找到该联系人!\n");
system("pause");
return;
}
print_person(&arr[i], 1);
system("pause");
return;
}
void search_person_num(struct person arr[], int n)
{
int i;
char temp[20];
system("cls");
printf("请输入要查询的电话号码:");
scanf_s("%s", temp);
for (i = 0; i < n; i++)
{
if (strcmp(arr[i].num,temp) == 0)
break;
}
if (i == n)
{
printf("未查找到该联系人!\n");
system("pause");
return;
}
print_person(&arr[i], 1);
system("pause");
}
void sort_person_name(struct person arr[], int n)//按名字字母排序函数
{
int i, j;
struct person temp;
system("cls");
for (i = 0; i < n; i++)//选择排序
{
for (j = i + 1; j < n; j++)
{
if (strcmp(arr[i].name, arr[j].name) > 0)//小在前
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
return;
}
void sort_person_num(struct person arr[], int n)//按电话号码排序
{
int i, j;
struct person temp;
system("cls");
for (i = 0; i < n; i++)//选择排序
{
for (j = i + 1; j < n; j++)
{
if (strcmp(arr[i].num, arr[j].num) > 0)//小在前
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
return;
}
void save_file(struct person arr[], int n)//保存文件函数
{
int i;
FILE* fp=NULL;//用来接收地址
fopen_s(&fp,"dly.dat", "w+");
if (fp == NULL)//文件为空
{
return;
}
for (i = 0; i < n; i++)//依次写入到文件
{
fwrite(&arr[i], sizeof(struct person), 1, fp);
}
fclose(fp);//关文件
}
int read_file(struct person arr[])//读取文件
{
int i = 0;
FILE *fp=NULL;
fopen_s(&fp,"dly.dat", "r+");//打开文件得地址
if (fp == NULL)
{
return 0;
}
while (fread(&arr[i++], sizeof(struct person), 1, fp));//依次读取文件
fclose(fp);//关闭文件
if (i >= 1)
{
return i - 1;//返回联系人个数
}
return 0;
}
int main()
{
system("color 1E");
SetConsoleTitle("鲤鱼的通讯录");//修改控制台窗口名称
int choice;
int num = 0; //记录结构体数组长度
struct person per[100]; //定义结构体数组
for (int i = 0; i < 100; i++)//初始化数组,否则在vs中乱码
{
memset(per[i].address, '\0',sizeof(per[i].address));
memset(per[i].email, '\0', sizeof(per[i].email));
memset(per[i].name, '\0', sizeof(per[i].name));
memset(per[i].num, '\0', sizeof(per[i].num));
}
num = read_file(per);//初始化通讯录联系人个数
do
{
choice = menu();
switch (choice)
{
case 1:
num = add_person(per, num); //添加 num=n
break;
case 2:
num=delete_person(per, num); //删除
break;
case 3:
modify_person(per, num); //修改
break;
case 4:
search_person_name(per, num); //按名字查找
break;
case 5:
search_person_num(per, num); //按号码查找
break;
case 6:
sort_person_name(per, num); //对名字排序
print_person(per, num);
system("pause");
break;
case 7:
sort_person_num(per, num); //对号码排序
print_person(per, num);
system("pause");
break;
case 8:
system("cls");
print_person(per, num);//全部显示
system("pause");
break;
case 9:
system("cls");
save_file(per, num);//保存文件
printf("保存成功!");
system("pause");
break;
case 0:
printf("\t谢谢使用!\n");
exit(0);//退出程序
}
} while (choice != 0);
return 0;
}
C语言实现的通讯录
最新推荐文章于 2024-07-21 22:48:06 发布