#pragma once typedef struct Peo//每一个人的信息用一个结构来接收,包括姓名,性别,年龄,电话,地址 { char name[20]; char sex[4]; int age; char tell[12]; char address[20]; }Peo; typedef struct Contact//将通讯录和人员计数也声明在结构体里 { Peo Dhb[1000]; int count; }Contact; void add_stu(Contact *p);//相应函数 void del_stu(Contact *p); void find_stu(Contact *p); void modify_stu(Contact *p); void show_stu(Contact *p); void clear_stu(Contact *p); void sort_stu(Contact *p);
#include<stdio.h> #include"contact.h" #include<stdlib.h> Contact con;//类型为Contact变量,里面包含电话本和计数变量 void menu() { printf("menu:\n"); printf("**********1.添加联系人信息************\n"); printf("********2.删除指定联系人信息**********\n"); printf("********3.查找指定联系人信息**********\n"); printf("********4.修改指定联系人信息**********\n"); printf("********5.显示所有联系人信息**********\n"); printf("**********6.清空联系人信息************\n"); printf("******7.以名字排序所有联系人信********\n"); } void test()//测试函数 { int input = 1; menu(); while (input) { printf("请输入选项:"); scanf_s("%d", &input); switch (input)//方法选择功能的实现 { case 1: add_stu(&con); break; case 2: del_stu(&con); break; case 3: find_stu(&con); break; case 4: modify_stu(&con); break; case 5: show_stu(&con); break; case 6: clear_stu(&con); break; case 7: sort_stu(&con); break; case 0: exit(1); break; } } } int main() { test(); return 0; }
#include"contact.h" #include<string.h> int search(Contact *p,char *pname)//分装的函数利于删除,查找,修改方法的实现 { int ret; int i; for (i = 0; i < p->count; i++) { if(strcmp(p->Dhb[i].name, pname)==0) return i; } return -1; } void add_stu(Contact *p)//添加联系人 { printf("请输入姓名:"); scanf("%s", p->Dhb[p->count].name); printf("请输入性别:"); scanf("%s", p->Dhb[p->count].sex); printf("请输入年龄:"); scanf("%d", &p->Dhb[p->count].age); printf("请输入电话:"); scanf("%s", p->Dhb[p->count].tell); printf("请输入地址:"); scanf("%s", p->Dhb[p->count].address); p->count++; printf("联系人添加成功\n"); } void del_stu(Contact *p)//删除联系人 { int ret; int n; int i = 0; char name[20]; printf("请输入要删除人的姓名:"); scanf("%s",name); ret=search(p,name); if (ret !=-1) { printf("要删除的人存在\n"); printf("你是否确定删除该联系人?\n"); printf("确定输入1,不删除输入0\n"); scanf("%d",&n); if (n == 1) { for (i = 0; i < p->count; i++) { p->Dhb[i] = p->Dhb[i + 1];//使i后面的元素向前覆盖便可以删掉 } printf("删除成功\n"); } else { printf("删除失败\n"); } } } void find_stu(Contact *p)//查找联系人 { int ret; char name[20]; printf("请输入要查找人的姓名:"); scanf("%s", name); ret = search(p, name); if (ret !=-1) { printf("要查找的人存在\n"); printf("%s ", p->Dhb[ret].name); printf("%s ", p->Dhb[ret].sex); printf("%d ", p->Dhb[ret].age); printf("%s ", p->Dhb[ret].tell); printf("%s ", p->Dhb[ret].address); } } void modify_stu(Contact *p)//修改联系人 { int ret; char name[20]; printf("请输入要修改人的姓名:"); scanf("%s", name); ret = search(p, name); if (ret != -1) { printf("请把姓名修改成:"); scanf("%s", p->Dhb[ret].name); printf("请把性别修改成:"); scanf("%s", p->Dhb[ret].sex); printf("请把年龄修改成:"); scanf("%d", &p->Dhb[ret].age); printf("请把电话修改成:"); scanf("%s", p->Dhb[ret].tell); printf("请把地址修改成:"); scanf("%s", p->Dhb[ret].address); } else { printf("不存在此人\n"); } } void show_stu(Contact *p)//显示联系人信息 { int i = 0; printf("输出所有人的信息:"); for (i = 0; i <( p->count); i++) { printf("%s ",p->Dhb[i].name); printf("%s ", p->Dhb[i].sex); printf("%d ", p->Dhb[i].age); printf("%s ", p->Dhb[i].tell); printf("%s ", p->Dhb[i].address); } printf("\n"); } void clear_stu(Contact *p)//清空联系人 { p->count = 0;//是人员计数的变量置0就可以实现清空 } void sort_stu(Contact *p)//以名字排序所有联系人 { int i = 0; int j = 0; for (i = 0; i < p->count-1;i++)//冒泡法 for (j = 0; j < p->count - 1 - i;j++) { if (strcmp(p->Dhb[j].name, p->Dhb[j + 1].name)>0) { Peo tmp; tmp=p->Dhb[j]; p->Dhb[j] =p-> Dhb[j + 1]; p->Dhb[j + 1] = tmp; } } void show_stu( p); }