通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址
提供方法:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
7. 以名字排序所有联系人
使用柔性数组可以实现动态;
#ifndef _LINKMAN_H_
#define _LINKMAN_H_
#include<stdio.h>
#include<Windows.h>
#include<string.h>
#pragma warning(disable:4996)
typedef struct Linkman
{
char name[20];
char sex[10];
int age;
char tel[20];
char addr[30];
}Linkman;
typedef struct Statis
{
int count;
Linkman f_arr[0];
}Statis;
void add_linkman(Statis *p, int num);
void del_linkman(Statis *p);
void find_linkman(Statis *p);
void revise_linkman(Statis *p);
void display_linkman(Statis *p);
void clear_linkman(Statis *p);
void sort_linkman(Statis *p);
int search(Statis *p, char *name);
void menu_r();
#endif
#include"linkman.h"
Statis *sta;
void menu()
{
printf("##############################################\n");
printf("######### 1. 添加联系人信息 #########\n");
printf("######### 2. 删除联系人信息 #########\n");
printf("######### 3. 查找联系人信息 #########\n");
printf("######### 4. 修改联系人信息 #########\n");
printf("######### 5. 显示所有联系人信息 #########\n");
printf("######### 6. 清空所有联系人信息 #########\n");
printf("######### 7. 按名字排序所有人信息 #########\n");
printf("######### 0.退出程序 #########\n");
printf("##############################################\n");
printf("请输入想要执行的操作:\n");
}
void SaveFile(Statis *p)
{
FILE* p_file = fopen("addressbook.txt", "a+");
char s[] = "姓名 性别 年龄 电话 地址";
if(p_file != NULL)
{
fprintf(p_file, "%s\n", &s);
for(int i=0; i<p->size; i++)
{
fprintf( p_file, "%-9s ", &p->f_arr[i].name);
fprintf( p_file, "%-9s ", &p->f_arr[i].sex);
fprintf( p_file, "%-9d ", p->f_arr[i].age);
fprintf( p_file, "%-9s ", &p->f_arr[i].tel);
fprintf( p_file, "%-9s \n", &p->f_arr[i].addr);
}
}
fclose(p_file);
p_file = NULL;
}
int main()
{
int num = 0;
printf("请输入要创建的联系人个数:\n");
scanf("%d", &num);
sta = (Statis *)malloc(sizeof(Statis)+num*sizeof(Linkman));
if (sta == NULL){
exit(EXIT_FAILURE);
}
sta->count = num;
int select = 0;
do{
menu();
scanf("%d", &select);
switch (select)
{
case 1:
add_linkman(sta, num);
break;
case 2:
del_linkman(sta);
break;
case 3:
find_linkman(sta);
break;
case 4:
revise_linkman(sta);
break;
case 5:
display_linkman(sta);
break;
case 6:
clear_linkman(sta);
break;
case 7:
sort_linkman(sta);
break;
case 0:
printf("再见!\n");
SaveFile(sta);
exit(1);
default:
printf("输入错误,请重新输入!\n");
break;
}
} while (1);
free(sta);
sta = NULL;
system("pause");
return 0;
}
#include"linkman.h"
void menu_r()
{
printf("#############################################\n");
printf("###### 1.姓名 2.性别 ######\n");
printf("###### 3.年龄 4.电话 ######\n");
printf("###### 5.地址 0.退出 ######\n");
printf("#############################################\n");
printf("请输入需要修改的选项:\n");
}
int search(Statis *p, char *name)
{
int i = 0;
for (i = 0; i < (p->count); i++)
{
if (strcmp(p->f_arr[i].name, name) == 0)
{
return i;
}
}
return -1;
}
void add_linkman(Statis *p, int num)
{
if ((p->count)-num == num)
{
printf("达到添加上限!\n");
}
else
{
printf("请输入需要添加的联系人姓名:\n");
scanf("%s", p->f_arr[p->count].name);
printf("请输入需要添加的联系人性别:\n");
scanf("%s", p->f_arr[p->count].sex);
printf("请输入需要添加的联系人年龄:\n");
scanf("%d", &p->f_arr[p->count].age);
printf("请输入需要添加的联系人电话:\n");
scanf("%s", p->f_arr[p->count].tel);
printf("请输入需要添加的联系人地址:\n");
scanf("%s", p->f_arr[p->count].addr);
printf("添加成功!\n");
p->count++;
}
}
void del_linkman(Statis *p)
{
char name[20] = { 0 };
int result;
int i;
printf("请输入需要删除的联系人姓名:\n");
scanf("%s", name);
result = search(p, name);
if (result != -1)
{
printf("您确定要删除此联系人?\n");
printf("删除请输入1,不删除请输入0!\n");
scanf("%d", &i);
if (i == 1)
{
for (i = 0; i < (p->count) - 1; i++)
{
p->f_arr[i] = p->f_arr[i + 1];
}
p->count--;
printf("删除成功!\n");
}
else
{
printf("删除失败!\n");
}
}
else
{
printf("您输入的联系人不存在!\n");
}
}
void find_linkman(Statis *p)
{
char name[20] = { 0 };
int result = 0;
printf("请输入需要查找的联系人姓名:\n");
scanf("%s", name);
result = search(p, name);
if (result != -1)
{
printf("姓名:%s\n", p->f_arr[result].name);
printf("性别:%s\n", p->f_arr[result].sex);
printf("年龄:%d\n", p->f_arr[result].age);
printf("电话:%s\n", p->f_arr[result].tel);
printf("地址:%s\n", p->f_arr[result].addr);
}
else
{
printf("您输入的联系人不存在!\n");
}
}
void revise_linkman(Statis *p)
{
char name[20] = { 0 };
int result = 0;
int i = 0;
printf("请输入需要修改的联系人姓名:\n");
scanf("%s", name);
result = search(p, name);
if (result != -1)
{
printf("姓名:%s\n", p->f_arr[result].name);
printf("性别:%s\n", p->f_arr[result].sex);
printf("年龄:%d\n", p->f_arr[result].age);
printf("电话:%s\n", p->f_arr[result].tel);
printf("地址:%s\n", p->f_arr[result].addr);
do{
menu_r();
scanf("%d", &i);
switch (i)
{
case 1:
printf("请输入您想改的名字:\n");
scanf("%s", p->f_arr[result].name);
break;
case 2:
printf("请输入您想改的性别:\n");
scanf("%s", p->f_arr[result].sex);
break;
case 3:
printf("请输入您想改的年龄:\n");
scanf("%d", &(p->f_arr[result].age));
break;
case 4:
printf("请输入您想改的电话:\n");
scanf("%s", p->f_arr[result].tel);
break;
case 5:
printf("请输入您想改的地址:\n");
scanf("%s", p->f_arr[result].addr);
break;
case 0:
break;
default:
printf("输入错误,请重新输入!\n");
}
} while (i);
}
else
{
printf("您输入的联系人不存在!\n");
}
}
void display_linkman(Statis *p)
{
int i = 0;
printf("显示所有联系人信息\n");
printf("%10s%7s%7s%9s%11s\n", "姓名", "性别", "年龄", "电话", "地址");
for (i = 0; i < (p->count); i++)
{
printf("%10s", p->f_arr[i].name);
printf("%5s", p->f_arr[i].sex);
printf("%8d", p->f_arr[i].age);
printf("%14s", p->f_arr[i].tel);
printf("%9s", p->f_arr[i].addr);
printf("\n");
}
}
void clear_linkman(Statis *p)
{
int i = 0;
printf("确定清空所有联系人?\n");
printf("清空请输入1,不清空请输入0!\n");
scanf("%d", &i);
if (i == 1)
{
p->count = 0;
}
}
void sort_linkman(Statis *p)
{
int i = 0;
int j = 0;
for (i = 0; i < (p->count) - 1; i++)
{
for (j = 0; j < (p->count) - i - 1; j++)
{
if (strcmp(p->f_arr[j].name, p->f_arr[j + 1].name)>0)
{
Linkman tmp = p->f_arr[j];
p->f_arr[j] = p->f_arr[j + 1];
p->f_arr[j + 1] = tmp;
}
}
}
}