您的位置:首页 > 编程语言 > C语言/C++

【C语言】通讯录

2016-03-13 17:48 260 查看

Contact.h

#define _CRT_SECURE_NO_WARNINGS 0

#ifndef __CONTACT_H__
#define __CONTACT_H__

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>

#define MAX_NAME 20
#define MAX_SRX 5
#define MAX_TELE 12
#define MAX_ADDR 30
#define MAX_PEO 1000
#define INIT_NUM 2
enum OP
{
EXIT,
ADD,
DEL,
SEARCH,
MODIFY,
SHOW,
CLEAR,
SORT
};

typedef struct Per
{
char name[MAX_NAME];
int age;
char sex[MAX_SRX];
char tele[MAX_TELE];
char addr[MAX_ADDR];
}Per;

typedef struct Contact
{
struct Per* contact;
int size;//实际个数
int capacity;//容量
}Contact, *Pcon;

void print_menu();
void init_contact(Pcon pcon);
void add_contact(Pcon pcon);
void del_contact(Pcon pcon);
void search_contact(Pcon pcon);
void modify_contact(Pcon pcon);
void clear_contat(Pcon pcon);
void sort_contact(Pcon pcon);
void show_contact(Contact con);

#endif //__CONTACT_H__

Contact.c

#include "contact.h"

void print_menu()
{
printf("******************************\n");
printf("*****  1.add      2.del ******\n");
printf("*****  3.search   4.modify ***\n");
printf("*****  5.show     6.clr ******\n");
printf("*****  7.sort     0.exit *****\n");
printf("******************************\n");
}

void check_capacity(Pcon pcon)
{
if (pcon->size == pcon->capacity)
{
pcon->contact = (Per *)realloc(pcon->contact, pcon->capacity += 2);
}
}

void _add(Pcon pcon, Per *p)
{
assert(pcon);
check_capacity(pcon);
pcon->contact[pcon->size] = *p;
pcon->size++;
}

void load_data(Pcon pcon)
{
Per per;
FILE *pFread = fopen("contact.dat","r");
if(pFread == NULL)
{
perror("open file contact.dat for read error");
exit(EXIT_FAILURE);
}
while(fread(&per, sizeof(Per), 1, pFread))
{
_add(pcon, &per);
}
}
void save_data(Pcon pcon)
{
int i = 0;
FILE *pFWrite = fopen("contact.dat","w");
if(pFWrite == NULL)
{
perror("open file contact.dat for write error");
exit(EXIT_FAILURE);
}
for(i = 0; i<pcon->size; i++)
{
fwrite(&(pcon->contact[i]), sizeof(Per), 1, pFWrite);
}
}
void init_contact(Pcon pcon)
{
pcon->size = 0;
pcon->contact = (Per *)malloc(sizeof(Per)*INIT_NUM);
memset(pcon->contact, 0, INIT_NUM * sizeof(Per));
pcon->capacity = INIT_NUM;
load_data(pcon);
}

void add_contact(Pcon pcon)
{
assert(pcon);
check_capacity(pcon);

printf("请输入名字:>");
scanf("%s",pcon->contact[pcon->size].name);
printf("请输入性别:>");
scanf("%s",pcon->contact[pcon->size].sex);
printf("请输入年龄:>");
scanf("%d",&(pcon->contact[pcon->size].age));
printf("请输入电话:>");
scanf("%s",pcon->contact[pcon->size].tele);
printf("请输入地址:>");
scanf("%s",pcon->contact[pcon->size].addr);
pcon->size++;
printf("插入成功\n");
}

static int find_entry(Pcon pcon, const char *name)
{
int i = 0;
for(i = 0; i<pcon->size; i++)
{
if(strcmp(pcon->contact[i].name,name) == 0)
{
return i;
}
}
return -1;
}
void del_contact(Pcon pcon)
{
char find_name[MAX_NAME];
int index = 0;
int start = 0;
if(pcon->size == 0)
{
printf("电话本已空,不能删除\n");
return;
}
printf("请输入删除人的名字:>");
scanf("%s",find_name);
index = find_entry(pcon, find_name);
if(index == -1)
{
printf("制定删除的人不存在\n");
return;
}
for(start = index; start <pcon->size-1;start++)
{
pcon->contact[start] = pcon->contact[start+1];
}
pcon->size--;
printf("删除成功\n");
}
void show_contact(Contact con)
{
int i = 0;
printf("%10s\t%5s\t%5s\t%5s\t%10s\n",
"name", "age","sex", "tele","addr");
for(i = 0;i<con.size;i++)
{
printf("%10s\t%5d\t%5s\t%5s\t%10s\n",
con.contact[i].name,
con.contact[i].age,
con.contact[i].sex,
con.contact[i].tele,
con.contact[i].addr);
}
}

void search_contact(Pcon pcon)
{
int index = 0;
char find_name[MAX_NAME];
printf("请输入查找人的姓名:>");
scanf("%s",find_name);
index = find_entry(pcon, find_name);
if(index == -1)
{
printf("制定删除的人不存在\n");
return;
}
printf("%10s\t%5s\t%5s\t%5s\t%10s\n",
"name", "age","sex", "tele","addr");
printf("%10s\t%5d\t%5s\t%5s\t%10s\n",
pcon->contact[index].name,
pcon->contact[index].age,
pcon->contact[index].sex,
pcon->contact[index].tele,
pcon->contact[index].addr);
}

static void Swap(Per* per1, Per* per2)
{
Per tmp;
tmp = *per1;
*per1 = *per2;
*per2 = tmp;
}

void modify_contact(Pcon pcon)
{
int index = 0;
char find_name[MAX_NAME];
printf("请输入要改的人的姓名:>");
scanf("%s",find_name);
index = find_entry(pcon, find_name);
if(index == -1)
{
printf("指定修改的人不存在\n");
return;
}
printf("请输入名字:>");
scanf("%s",pcon->contact[index].name);
printf("请输入性别:>");
scanf("%s",pcon->contact[index].sex);
printf("请输入年龄:>");
scanf("%d",&(pcon->contact[index].age));
printf("请输入电话:>");
scanf("%s",pcon->contact[index].tele);
printf("请输入地址:>");
scanf("%s",pcon->contact[index].addr);
printf("修改成功\n");
}
void clear_contat(Pcon pcon)
{
pcon->size = 0;
}
void sort_contact(Pcon pcon)
{
int i = 0;
int j = 0;
for(i = 0;i<pcon->size-1;i++)
{
for(j = 0; j<pcon->size-1-i; j++)
{
if(strcmp(pcon->contact[j].name,pcon->contact[j+1].name) > 0)
{
Swap(&(pcon->contact[j]), &(pcon->contact[j+1]));
}
}
}
printf("排序成功\n");
}

ContactTest.c

#include "contact.h"

void Test()
{
int input = 1;
struct Contact  my_con;
init_contact(&my_con);

while(input)
{
print_menu();
printf("请选择:>");
scanf("%d",&input);
switch(input)
{
case ADD:
add_contact(&my_con);
break;
case DEL:
del_contact(&my_con);
break;
case SEARCH:
search_contact(&my_con);
break;
case MODIFY:
modify_contact(&my_con);
break;
case SHOW:
show_contact(my_con);
break;
case CLEAR:
clear_contat(&my_con);
break;
case SORT:
sort_contact(&my_con);
break;
case EXIT:
save_data(&my_con);
break;
}
}
}
int main()
{
Test();
system("pause");
//getchar();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: