scanf 可以用int 来接收 ,接收值是正确接收的个数返回值
通讯录
test01
#include"contact.h"
void menu()
{
printf("******1.add 2.del********n");
printf("******3.search 4.show********n");
printf("******5.modify ***************n");
printf("******0.exit*******************n");
}
enum Menu {
EXIT,
ADD,
DEL,
SEARCH,
SHOW,
MODIFY,
};
int main()
{
struct contact p;
initfun(&p);// 初始化通讯录p;
int input = 0;
do
{
menu();
printf("input choosen");
scanf("%d", &input);
switch (input)
{
case ADD:
addfun(&p);
break;
case DEL:
delfun(&p);
break;
case SEARCH:
searchfun(&p);
break;
case SHOW:
showfun(&p);
break;
case MODIFY:
modifyfun(&p);
break;
case EXIT:
printf("****exit***n");
clearfun(&p);
break;
default;
printf("input errorn");
break;
}
} while (input);
system("pause");
return 0;
}
contact.c
#include"contact.h"
void initfun(struct contact* p)
{
p->sz = 0;
p->body = (struct person*)malloc(default * sizeof(struct person));
p->capacity = default;
}
void addfun(struct contact* p)
{
if (p->sz == p->capacity) //增容
{
struct person* ptr = (struct person*)realloc(p->body, (p->capacity + 2) * sizeof(struct person));
if (ptr != NULL)
{
p->body = ptr;
}
p->capacity += 2;
printf("increase capacity successfuln");
}
printf("input informationn");
printf("input namen");
scanf("%s", p->body[p->sz].name);
printf("input sexn");
scanf("%s", p->body[p->sz].sex);
printf("input agen");
scanf("%d", &(p->body[p->sz].age));
printf("input telen");
scanf("%s", p->body[p->sz].tele);
printf("input addressn");
scanf("%s", p->body[p->sz].addr);
p->sz++;
printf("input successfuln");
}
void showfun(struct contact* p)
{
printf("%15st%5st%8st%15st%30stn", "name", "age", "sex", "tele", "addr");
for (int i = 0; i < p->sz; i++)
{
printf("%15st%5dt%8st%15st%30st",
p->body[i].name,
p->body[i].age,
p->body[i].sex,
p->body[i].tele,
p->body[i].addr
);
printf("n");
}
}
int findbodybyname(char* name, struct contact* p)
{
int i = 0;
for (i = 0; i
{
int ret = strcmp(name, p->body[i].name);
if (ret == 0)
{
return i;
}
}
return -1;
}
void delfun(struct contact* p)
{
printf("input delete person namen");
char name[20] = { 0 };
scanf("%s", name);
int ret=findbodybyname(name,p);
if (ret == -1)
{
printf("no this personn");
}
else
{
int pos = 1;
for (pos = ret; pos < p->sz; pos++)
{
p->body[pos] = p->body[pos + 1];
}
printf("delete succseefuln");
}
}
void searchfun(struct contact* p)
{
printf("input person namen");
char name[20] = { 0 };
scanf("%s", name);
int ret = findbodybyname(name, p);
if (ret != -1)
{
printf("find this peoplen");
printf("%15st%5dt%8st%15st%30st",
p->body[ret].name,
p->body[ret].age,
p->body[ret].sex,
p->body[ret].tele,
p->body[ret].addr
);
printf("n");
}
else
{
printf("no this peoplen");
}
}
void modifyfun(struct contact* p)
{
printf("input person namen");
char name[20] = { 0 };
scanf("%s", name);
int ret = findbodybyname(name, p);
if (ret != -1)
{
printf("precious informationn");
printf("%15st%5dt%8st%15st%30sn",
p->body[ret].name,
p->body[ret].age,
p->body[ret].sex,
p->body[ret].tele,
p->body[ret].addr
);
printf("input new namen");
scanf("%s", p->body[ret].name);
printf("intpur new sexn");
scanf("%s", p->body[ret].sex);
printf("input new agen");
scanf("%d", &(p->body[ret].age));
printf("input new telen");
scanf("%s", p->body[ret].tele);
printf("input new addrn");
scanf("%s", p->body[ret].addr);
printf("input successfuln");
}
}
void clearfun(struct contact* p)
{
free(p->body);
p->body = NULL;
p->capacity = 0;
p->sz = 0;
}
contact.h
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#define name_max 20
#define sex_max 3
#define tele_max 30
#define addr_max 30
#define MAX 50
#define default 3
struct person {
char name[name_max];
char sex[sex_max];
char tele[tele_max];
char addr[addr_max];
int age;
};
//静态版本
//struct contact {
//
// struct person body[MAX];
// int sz;
//};
//动态版本
struct contact
{
struct person* body;
int sz;
int capacity;//通讯录当前最大容量
};
void initfun(struct contact* p); //初始化通讯录
void addfun(struct contact* p); //往通讯录中添加信息:
void showfun(struct contact* p); //显示通讯录的信息;
void delfun(struct contact* p);
void searchfun(struct contact* p);
void modifyfun(struct contact* p);
void clearfun(struct contact* p);
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)