使用C语言静态方式实现通讯录
1.头文件
#pragma once
#include <stdio.h>
#include<assert.h>
#include<stdlib.h>
#define MAX 100
#define MAX_NAME 20
#define MAX_SEX 10
#define MAX_TEL 10
#include<string.h>
typedef struct peoinfm
{
char name[MAX_NAME];
char sex[MAX_SEX];
int age;
char tel[MAX_TEL];
}peoinfm;
struct cont
{
peoinfm data[MAX];
int count;
};
//初始化通讯录
void intcontact(struct cont* p);
//添加通讯录成员
void addcontact(struct cont* p);
//展示通讯录
void showcontact(struct cont* p);
//查找通讯录
void seachcontact(struct cont* p);
//删除通讯录成员
void delcontact(struct cont* p);
//修改通讯录成员
void montifycontact(struct cont* p);
//排序通讯录成员名字
void advircontact(struct cont* p);
2.游戏文件
#define _CRT_SECURE_NO_WARNINGS
#include"contact.h"
void intcontact(struct cont* p)
{
assert(p);
p->count = 0;
memset(p, 0, sizeof(p->data));
}
void addcontact(struct cont* p)
{
assert(p);
if (p->count == MAX)
{
printf("信息已满,无法输入");
return;
}
printf("请输入名字\n");
scanf("%s", p->data[p->count].name);
printf("请输入年纪\n");
scanf("%d",&( p->data[p->count].age));
printf("请输入性别\n");
scanf("%s", p->data[p->count].sex);
printf("请输入电话号码\n");
scanf("%s", p->data[p->count].tel);
p->count++;
printf("增加成功\n");
}
void showcontact(struct cont* p)
{
assert(p);
int i = 0;
printf("% -20s\t % -10s\t % -5s\t % -20s\n", "名字", "性别", "年龄","电话号码");
for (i = 0; i < p->count; i++)
{
printf("%-20s\t %-10s\t %-5d\t %-20s\n", p->data[i].name,
p->data[i].sex,
p->data[i].age,
p->data[i].tel);
}
}
int findcontact(char* name1, struct cont* p)
{
int i = 0;
for (i = 0; i < p->count;i++)
{
if (strcmp(name1, p->data[i].name) == 0)
return i;
}
return -1;
}
void seachcontact(struct cont* p)
{
assert(p);
char name1[MAX_NAME];
printf("请输入要查找对象的名字\n");
scanf("%s", name1);
int ret = findcontact(name1, p);
if (ret == 0)
{
printf("找不到\n");
return;
}
printf("% -20s\t % -10s\t % -5s\t % -20s\n", "名字", "性别", "年龄", "电话");
printf("找到了,是:\n %s\t % -10s\t % -5d\t % -20s\n", p->data[ret].name,
p->data[ret].sex,
p->data[ret].age,
p->data[ret].tel);
}
void delcontact(struct cont* p)
{
assert(p);
char name1[MAX_NAME];
printf("请输入要删除对象的名字\n");
scanf("%s", name1);
int ret = findcontact(name1, p);
if (ret == 0)
{
printf("找不到\n");
return;
}
int i = 0;
for (i = ret; i < p->count - 1; i++)
{
p->data[i] = p->data[ i + 1];
}
p->count--;
printf("删除成功\n");
}
void montifycontact(struct cont* p)
{
assert(p);
char name1[MAX_NAME];
printf("请输入要修改对象的名字\n");
scanf("%s", name1);
int ret = findcontact(name1, p);
if (ret == 0)
{
printf("找不到\n");
return;
}
printf("请输入名字\n");
scanf("%s", p->data[ret].name);
printf("请输入年纪\n");
scanf("%d", &(p->data[ret].age));
printf("请输入性别\n");
scanf("%s", p->data[ret].sex);
printf("请输入电话号码\n");
scanf("%s", p->data[ret].tel);
printf("修改成功\n");
}
int my_cmp(const void* elm1, const void* elm2)
{
return strcmp(((peoinfm*)elm1)->name, ((peoinfm*)elm2)->name);
}
void advircontact(struct cont* p)
{
assert(p);
qsort(p->data, p->count, sizeof(p->data[0]), my_cmp);
printf("排序成功");
}
3.测试文件
#define _CRT_SECURE_NO_WARNINGS
#include"contact.h"
void menu()
{
printf("**********************************\n");
printf("******1.add 2.del ****\n");
printf("******3.serch 4.montify ****\n");
printf("******5.advir 6.show ****\n");
printf("******0.exit ****\n");
printf("**********************************\n");
}
int main()
{
int input = 0;
struct cont con;
intcontact(&con);
do
{
menu();
printf("请选择数字:");
scanf("%d", &input);
switch (input)
{
case 1:
addcontact(&con);
break;
case 2:
delcontact(&con);
break;
case 3:
seachcontact(&con);
break;
case 4:
montifycontact(&con);
break;
case 5:
advircontact(&con);
break;
case 6:
showcontact(&con);
break;
case 0:
printf("退出通讯录\n");
break;
default:
printf("输错了\n");
}
} while (input);
return 0;
}