头文件
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stddef.h>
#include<stdlib.h>
#define Max_name 20
#define Max_sex 10
#define Max_tele 12
#define Max_addr 30
#define inc 2
#define Max 3
struct str{
char name[Max_name];
int age;
char sex[Max_sex];
char tele[Max_tele];
char addr[Max_addr];
}s[Max]; //创建空通讯录
struct str1 {
struct str* s;//存放信息
int sz; // 记录位置
int a;//储存最大值
}s1;
enum stu {
exit_,
add,
del,
modify,
query,
print
};
void menu() ;
void dest(struct str1* p);
void inituser(struct str1 *p);
void adduser(struct str1* p);
void prints1(struct str1* p);
void deluser(struct str1* p);
void modifyuser(struct str1* p);
void queryuser(struct str1* p);
函数实现文件
#include"head.h"
void menu()
{
printf("----------------------------------\n");
printf("| 1.add 2.del |\n");
printf("| 3.modify 4.query |\n");
printf("| 5.print 0.exit_ |\n");
printf("----------------------------------\n");
}
void inituser(struct str1 *p)
{
p->s=(struct str1*)malloc(sizeof(struct str1)*Max);
if (p->s == NULL)
{
perror(inituser);
return;
}
p->sz = 0;
p->a = Max;
}
void dest(struct str1* p)
{
free(p->s);
p->s = NULL;
p->a = 0;
p->sz = 0;
}
void adduser(struct str1* p)
{
if (p->sz==p->a)
{
struct str1* ptr = realloc(p->s, sizeof(struct str1*)*inc);
if (ptr != NULL)
{
ptr = p->s;
p->a += inc;
return;
}
else
{
perror(adduser);
return;
}
}
printf("请输入姓名:");
scanf("%s", p->s[p->sz].name);
printf("请输入年龄:");
scanf("%d", &(p->s[p->sz].age));
printf("请输入性别:");
scanf("%s", p->s[p->sz].sex);
printf("请输入电话:");
scanf("%s", p->s[p->sz].tele);
printf("请输入地址:");
scanf("%s", p->s[p->sz].addr);
printf("添加成功\n");
p->sz++;
}
void deluser(struct str1* p)
{
int i = 0;
if (p->s == 0)
{
printf("通讯录已全部删除");
return;
}
printf("请输入删除的序号:\n");
scanf("%d", &i);
for (;i< p->sz; i++)
{
memmove(&(p->s[i - 1].name), &(p->s[i].name), sizeof(struct str));
}
p->sz--;
printf("删除成功\n");
}
void modifyuser(struct str1* p)
{
int i = 0;
int j = 0;
printf("请输入要修改的序号\n");
scanf("%d", &i);
if (i>p->sz)
{
printf("用户不存在\n");
return;
}
printf("本条信息为:\n");
printf("%-20s\t%-5s\t%-5s\t%-12s\t%-20s\n", "姓名", "年龄", "性别", "电话", "地址");
printf("%-20s\t%-5d\t%-5s\t%-12s\t%-20s\n", p->s[i-1].name, p->s[i - 1].age, p->s[i - 1].sex, p->s[i - 1].tele, p->s[i - 1].addr);
printf("请输入需要修改的属性\n 1.姓名 2.年龄 3.性别 4.电话 5.地址 0.退出:\n");
scanf("%d", &j);
enum stu {
exit,
name,
age,
sex,
tele,
addr
};
switch (j)
{
case exit:
break;
case name:
printf("请输入修改之后的名字:\n");
scanf("%s", p->s[i - 1].name);
break;
case age:
printf("请输入修改之后的年龄:\n");
scanf("%d", &(p->s[i - 1].age));
break;
case sex:
printf("请输入修改之后的性别:\n");
scanf("%s", p->s[i - 1].sex);
break;
case tele:
printf("请输入修改之后的电话:\n");
scanf("%s", p->s[i - 1].tele);
break;
case addr:
printf("请输入修改之后的地址:\n");
scanf("%s", p->s[i - 1].addr);
break;
default:
break;
}
printf("修改完成\n");
}
void queryuser(struct str1* p)
{
int i = 0;
int j = 0;
printf("请输入查询方式:\n");
printf("请输入需要查询的属性\n 1.姓名 2.序号 0.退出:\n");
scanf("%d", &i);
enum stu {
exit,
name,
num
};
switch (i)
{
case exit:
break;
case name:
printf("请输入查询的名字\n");
char name[Max_name];
scanf("%s", name);
for (j = 0; j < p->sz; j++)
{
if (strcmp(name, p->s[j].name) == 0)
{
printf("查找结果为:\n");
printf("姓名%-20s\t年龄%-5d\t性别%-5s\t%电话-12s\t地址%-20s\n", p->s[j].name, p->s[j].age, p->s[j].sex, p->s[j].tele, p->s[j].addr);
}
}
break;
/*
case age:
break;
case sex: //这几种就不写了,把上面的name改成相应的属性就行了;
break;
case tele:
break;
case addr:
break;
*/
case num:
printf("请输入查询序号\n");
int j = 0;
scanf("%d", &j);
printf("查询结果为:\n");
printf("姓名%-20s\t年龄%-5d\t性别%-5s\t电话%-12s\t地址%-20s\n", p->s[j-1].name, p->s[j-1].age, p->s[j - 1].sex, p->s[j - 1].tele, p->s[j - 1].addr);
default:
break;
}
}
void prints1(struct str1* p)
{
int i = 0;
printf("%-20s\t%-5s\t%-5s\t%-12s\t%-20s\n","姓名","年龄", "性别","电话","地址");
for (i = 0; i < p->sz; i++)
{
printf("%-20s\t%-5d\t%-5s\t%-12s\t%-20s\n", p->s[i].name, p->s[i].age, p->s[i].sex, p->s[i].tele, p->s[i].addr);
}
}
测试文件
#include"head.h"
int sz = 0;//通讯录当前共有的元素
int main()
{
int i = 0;
inituser(&s1);//初始化通讯录
do
{
menu();
printf("请输入选项\n");
scanf("%d", &i);
switch(i)
{
case add:
adduser(&s1);
break;
case del:
deluser(&s1);
break;
case modify:
modifyuser(&s1);
break;
case query:
queryuser(&s1);
break;
case print:
prints1(&s1);
break;
case exit_:
dest(&s1);
break;
default:
break;
}
} while (i);
return 0;
}
比较简陋的通讯录,仓促完成,仅供参考。