上代码
=================================================================test.h
#ifndef _TEST_H__ #define _TEST_H__ #include <stdio.h> #include <windows.h> #include <stdlib.h> #include <string.h> #pragma warning(disable:4996) enum Select {EXTI,ADD,DEL,SEEK,ALTER,SHOW,CLEAR,SORT}; //定义一个联系人结构体 typedef struct Contacts { char name[20];//姓名 char address[20];//地址 char sex[5];//性别 int age;//年龄 char phone[20];//电话 struct Contacts* next;//指向下一个结点 }Contacts,*pContacts; typedef struct Contacts_list { pContacts people; unsigned int size; unsigned int cap; }Contacts_list; //1. 添加联系人信息 void add_Contacts(Contacts_list *p); //2. 删除指定联系人信息 void delete_Contacts(Contacts_list *p); //3. 查找指定联系人信息 void seek_Contacts(Contacts_list *p); //4. 修改指定联系人信息 void alter_Contacts(Contacts_list *p); //5. 显示所有联系人信息 void show_all(Contacts_list *p); //6. 清空所有联系人 void clear_all(Contacts_list *p); //7. 以名字排序所有联系人 void sort_by_name(Contacts_list *p); //8.打印菜单 void menu(); void contact_init(Contacts_list *p); #endif
=================================================================test.c
#include "test.h" #pragma warning(disable:4996) //寻找函数 static int find(Contacts_list *p) { int i; char string[20]; printf("输入要查找人的姓名>"); scanf("%s", string); for (i = 0;i < p->size;i++) { if (0==strcmp(p->people[i].name,string)) { return i; } } return -1; } //交换内存函数 void meme_swap(char *p1, char *p2, unsigned int num) { char tmp; while (num--) { tmp = *p1; *p1 = *p2; *p2 = tmp; p1++; p2++; } } void menu() { printf(" 通讯录 \n"); printf(" 0.退出 1.添加 \n"); printf(" 2.删除 3.查找 \n"); printf(" 4.修改 5.显示 \n"); printf(" 6.清空 7.排序 \n"); } //1. 添加联系人信息 void add_Contacts(Contacts_list *p) { if (NULL == p->people) { if (p->cap == p->size) { p->people = (pContacts)malloc(sizeof(Contacts)); if (p->people == NULL) { printf("扩容成功\n"); // printf("%s\n",strerror(errno)); } } } else { if (p->cap == p->size) { pContacts tmp = (pContacts)realloc(p->people, (p->size + 1) * sizeof(Contacts)); if (tmp != NULL) { p->people = tmp; printf("扩容成功\n"); } else { // printf("%s\n", strerror(errno)); } } } printf("姓名>"); scanf("%s", p->people[p->size].name); printf("地址>"); scanf("%s", p->people[p->size].address); printf("性别>"); scanf("%s", p->people[p->size].sex); printf("年龄>"); scanf("%d", &(p->people[p->size].age)); printf("电话>"); scanf("%s", p->people[p->size].phone); if (p->cap == p->size) { p->size++; p->cap = p->size; } else { p->size++; } printf("添加成功\n"); } //2. 删除指定联系人信息 void delete_Contacts(Contacts_list *p) { int i; if (NULL == p->people) { printf("通讯录空\n"); } else { i = find(p); if (-1 == i) { printf("无此人\n"); } else { printf("要删除人的信息:\n"); printf("%-20s\t%-20s\t%-10s\t%-20s\t%-20s\n", "姓名", "地址", "年龄", "性别", "电话"); printf("%-20s\t%-20s\t%-10d\t%-20s\t%-20s\n", p->people[i].name, p->people[i].address, p->people[i].age, p->people[i].sex, p->people[i].phone); meme_swap((char *)(p->people+i),(char *)(p->people+p->size-1),sizeof(Contacts)); p->size--; } } } //3. 查找指定联系人信息 void seek_Contacts(Contacts_list *p) { int i; if (NULL == p->people) { printf("通讯录空\n"); } else { i = find(p); if (-1 == i) { printf("无此人\n"); } else { printf("查询结果:\n"); printf("%-20s\t%-20s\t%-10s\t%-20s\t%-20s\n", "姓名", "地址", "年龄", "性别", "电话"); printf("%-20s\t%-20s\t%-10d\t%-20s\t%-20s\n", p->people[i].name, p->people[i].address, p->people[i].age, p->people[i].sex, p->people[i].phone); } } } //4. 修改指定联系人信息 void alter_Contacts(Contacts_list *p) { char input[20] = { 0 }; int inp = 0; int i; if (NULL == p->people) { printf("通讯录空\n"); } else { i = find(p); if (-1 == i) { printf("无此人\n"); } else { do { printf("%-20s\t%-20s\t%-10s\t%-20s\t%-20s\n", "姓名", "地址", "年龄", "性别", "电话"); printf("%-20s\t%-20s\t%-10d\t%-20s\t%-20s\n", p->people[i].name, p->people[i].address, p->people[i].age, p->people[i].sex, p->people[i].phone); printf("修改选项\n"); printf("0.退出修改程序 1.姓名 2.地址\n"); printf("3.性别 4.年龄 5.电话\n"); scanf("%s", input); if (strlen(input) == 1 && input[0] <= '7'&&input[0] >= '0') { inp = input[0] - '0'; } else { inp = -1;//输入错误 } switch (inp) { case 1:printf("新名字>"); scanf("%s", p->people[i].name); break; case 2:printf("新地址>"); scanf("%s", p->people[i].address); break; case 3:printf("新性别>"); scanf("%s", p->people[i].sex); break; case 4:printf("新年龄>"); scanf("%d",&(p->people[i].age)); break; case 5:printf("新电话>"); scanf("%s", p->people[i].phone); break; case 0: break; default:printf("输入错误\n"); } } while (inp); } } } //5. 显示所有联系人信息 void show_all(Contacts_list *p) { int i; if (p->people==NULL||p->size==0) { printf("通讯录空\n"); } else { printf("%-20s\t%-20s\t%-10s\t%-20s\t%-20s\n","姓名","地址","年龄","性别","电话"); for (i = 0; i < p->size; i++) { printf("%-20s\t%-20s\t%-10d\t%-20s\t%-20s\n",p->people[i].name, p->people[i].address, p->people[i].age, p->people[i].sex, p->people[i].phone); } } } //6. 清空所有联系人 void clear_all(Contacts_list *p) { free(p->people); p->people = NULL; p->size = 0; p->cap = 0; printf("清空\n"); } //7. 以名字排序所有联系人 void sort_by_name(Contacts_list *p) { int i; int j; for(i=0;i< p->size-1;i++) for (j = 0; j < p->size-i-1; j++) { if (strcmp(p->people[j].name, p->people[j + 1].name) > 0) { meme_swap((char *)(p->people+j),(char *)(p->people+j+1),sizeof(Contacts)); } } } //初始化通讯录 void contact_init(Contacts_list *p) { p->people = NULL; p->size = 0; p->cap = 0; }
===============================================main.c
#include "test.h" int main() { char input[20] = {0}; int inp = 0; Contacts_list con; contact_init(&con);//初始化 do { menu(); printf("请输入>"); scanf("%s", input); if (strlen(input) == 1 && input[0] <= '7'&&input[0] >= '0') { inp = input[0] - '0'; } else { inp = -1;//输入错误 } switch (inp) { case ADD: add_Contacts(&con); break;//EXTI,ADD,DEL,SEEK,ALTER,SHOW,CLEAR,SORT case DEL: delete_Contacts(&con); break; case SEEK: seek_Contacts(&con); break; case ALTER: alter_Contacts(&con); break; case SHOW: show_all(&con); break; case CLEAR:clear_all(&con); break; case SORT:sort_by_name(&con); break; case EXTI:break; default:printf("输入错误\n"); } } while (inp); system("pause"); return 0; }
===========================================================