動態通訊錄包括了動態申請內存,
**插入聯繫人;
刪除聯繫人;
查找聯繫人;
排序聯繫人;
清空聯繫人;
修改聯繫人;
顯示所有聯繫人;**
下面來看代碼
首先,我們要做好我們的準備工作
**
adress.h
**
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>
#include <malloc.h>
#define MAX 3
#define NAME_LENGTH 20
#define SEX_LENGTH 5
#define AGE_LENGTH 3
#define TELE_LENGTH 20
#define ADDR_LENGTH 30
typedef struct user{
char name[NAME_LENGTH];
char sex[SEX_LENGTH];
char age[AGE_LENGTH];
char tele[TELE_LENGTH];
char addr[ADDR_LENGTH];
}user;
typedef struct contacts{
user *person;
int user_count;
int capacity;
}contacts;
enum op
{
EXIT,
ADD,
ERASE,
CLEAR,
FID,
MODIFY,
SHOW,
SORT
};
int add_contacts(contacts *men);
int erase_contacts(contacts *men);
int clear_contacts(contacts *men);
int find_contacts(contacts *men);
int remove_contacts(contacts *men);
void sort_contacts(contacts *men);
void check(contacts *men);
void menu();
下面我們來看下一些輔助工作
#include "adress.h"
void menu()//打印服務菜單!!
{
printf("===========服務菜單===========\n");
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");
}
void init_contacts(contacts *men)//初始化我們的通訊錄
{
men->capacity = MAX;
men->user_count = 0;
men->person = (user *)malloc(sizeof(user)*MAX);
}
int _find(contacts *men)//輔助查找函數,成功返回查找的位置,失敗返回-1
{
int i = 0;
char name[NAME_LENGTH];
printf("請輸入名字:");
scanf("%s",name);
for(i = 0;i < men->user_count;i++)
{
if(strcmp(men->person[i].name,name) == 0)
{
return i;
}
}
return -1;
}
插入聯繫人函數
int add_contacts(contacts *men)
{
if(men == NULL)
{
return -1;
}
if(men->user_count == men->capacity)
{
user *tmp = (user *)realloc(men->person,(men->capacity +3)*sizeof(user));
if(tmp == NULL)
{
printf("內存不足\n");
return -1;
}
else
{
men->person = tmp;
(men->capacity)+= 3;
return 1;
}
}
else
{
printf("請輸入名字:");
scanf("%s",men->person[men->user_count].name);
printf("請輸入性別:");
scanf("%s",men->person[men->user_count].sex);
printf("請輸入年齡:");
scanf("%s",men->person[men->user_count].age);
printf("請輸入電話:");
scanf("%s",men->person[men->user_count].tele);
printf("請輸入地址:");
scanf("%s",men->person[men->user_count].addr);
printf("添加成功!\n");
men->user_count++;
return 1;
}
}
刪除聯繫人函數
int erase_contacts(contacts *men)
{
if( men == NULL )
{
return -1;
}
int i = 0;
int ret = _find(men);
if(ret == -1)
{
return -1;
}
for(i = ret;i < men->user_count-1;i++)
{
men->person[i] = men->person[i+1];
}
printf("刪除成功!\n");
men->user_count--;
return 1;
}
顯示聯繫人函數
void show_contacts(contacts *men)
{
int i = 0;
printf("%10s\t%4s\t%3s\t%13s\t%10s\n","姓名","性別","年齡","電話","地址");
for(;i< men->user_count;i++)
{
printf("%10s\t%4s\t%3s\t%13s\t%10s\n",men->person[i].name,men->person[i].sex,
men->person[i].age,men->person[i].tele,men->person[i].addr);
}
printf("\n");
}
清空通訊錄
int clear_contacts(contacts *men)
{
if(men == NULL)
{
return -1;
}
men->user_count = 0;
printf("清空成功!\n");
return 1;
}
查詢聯繫人
int find_contacts(contacts *men)
{
if(men == NULL)
{
return -1;
}
int ret = _find(men);
if(ret == -1)
{
printf("找不到該聯繫人\n");
return -1;
}
printf("該聯繫人的信息爲:\n");
printf("姓名:%-5s\n",men->person[ret].name);
printf("性別:%-5s\n",men->person[ret].sex);
printf("年齡:%-5s\n",men->person[ret].age);
printf("電話:%-5s\n",men->person[ret].tele);
printf("地址:%-5s\n",men->person[ret].addr);
return 1;
}
修改聯繫人
int remove_contacts(contacts *men)
{
if(men == NULL)
{
return -1;
}
int ret = _find(men);
if(ret == -1)
{
printf("該用戶不存在\n");
return -1;
}
printf("請重新輸入該聯繫人信息\n");
printf("請輸入名字:");
scanf("%s",men->person[ret].name);
printf("請輸入性別:");
scanf("%s",men->person[ret].sex);
printf("請輸入年齡:");
scanf("%s",men->person[ret].age);
printf("請輸入電話:");
scanf("%s",men->person[ret].tele);
printf("請輸入地址:");
scanf("%s",men->person[ret].addr);
printf("修改成功!\n");
return 1;
}
排序聯繫人
void sort_contacts(contacts *men)
{
if(men == NULL)
{
return;
}
int i = 0;
int j = 0;
for(i = 0;i < men->user_count-1;i++)
{
for(j = 0;j < men->user_count-1;j++)
{
if((strcmp(men->person[j].name,men->person[j+1].name)) > 0)
{
user tmp = men->person[j];
men->person[j] = men->person[j+1];
men->person[j+1] = tmp;
}
}
}
printf("排序完成!\n");
}
主函數
int main()
{
int input = 1;
contacts user;
init_contacts(&user);
// contacts user = {0};
// user.capacity = MAX;
// user.user_count = 0;
// user.person = (user *)malloc(sizeof(user)*MAX);
if(user.person == NULL)
{
printf("內存不足\n");
return;
}
else
{
menu();
while(input)
{
printf("請輸入數字編號\n");
scanf("%d",&input);
switch(input)
{
case ADD:
add_contacts(&user);
menu();
break;
case ERASE:
erase_contacts(&user);
menu();
break;
case CLEAR:
clear_contacts(&user);
menu();
break;
case FID:
find_contacts(&user);
menu();
break;
case MODIFY:
remove_contacts(&user);
menu();
break;
case SHOW:
show_contacts(&user);
menu();
break;
case SORT:
sort_contacts(&user);
show_contacts(&user);
menu();
break;
case EXIT:
printf("謝謝使用,再見!\n");
break;
dafault:
printf("輸入錯誤,請重新輸入\n");
break;
}
}
}
free(user.person);
user.person = NULL;
return 0;
}
下面是實現的結果演示