
利用结构体实现了简单的通讯录功能
//通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址
//提供方法:
//添加联系人信息
//删除指定联系人信息
//查找指定联系人信息
//修改指定联系人信息
//显示所有联系人信息
//清空所有联系人
//以名字排序所有联系人
#define _CRT_SECURE_NO_WARNINGS #include#include #include #include #include typedef struct Personinfo { char name[2048]; char num[2048]; char sex[2048]; char age[2048]; char home[2048]; }Personinfo; typedef struct Addressbook { Personinfo persons[1024]; int size; }Addressbook; Addressbook addressbook;//全局变量 void init(Addressbook* addressbook) {//初始化通讯录 addressbook->size = 0; } void Add(Addressbook* addressbook) { assert(addressbook != NULL); printf("添加联系人n"); Personinfo person = { 0 }; printf("请输入联系人的姓名、性别、年龄、电话、住址:n"); scanf("%s %s %s %s %s", person.name, person.sex, person.age, person.num, person.home); addressbook->persons[addressbook->size] = person;//把person结构体放到Addressbook中,数组为空的时候size为0,将新增元素放到下表为size的地方即可 addressbook->size++;//size++之后下次插入仍然是把新增元素放到下标为size的地方 printf("新增联系人成功n"); } void Del(Addressbook* addressbook) { printf("删除联系人n"); printf("请输入要删除的联系人的序号n"); int id = 0; scanf("%d", &id); if (id < 0 || id >= addressbook->size) { printf("输入有误n"); return; } if (id == addressbook->size - 1) { addressbook->size--; return; } Personinfo* lastperson = &addressbook->persons[addressbook->size - 1]; addressbook->persons[id] = *lastperson; addressbook->size--; printf("删除完成n"); } void Find(Addressbook* addressbook) { printf("查找联系人n"); int id; printf("请输入要查找的联系人序号n"); scanf("%d", &id); if (id < 0 || id >= addressbook->size) { printf("输入有误n"); return; } for (int i = 0; i < addressbook->size; i++) { if (i == id) { Personinfo* p = &addressbook->persons[i]; printf("(%d) %s %s %s %s %sn", i, p->name, p->sex, p->age, p->num, p->home); break; } } printf("查找完成n"); } void Update(Addressbook* addressbook) { printf("修改联系人n"); printf("请输入要修改的联系人序号:"); int id; scanf("%d", &id); if (id < 0 || id >= addressbook->size) { printf("您输入的id有误,修改失败"); return; } Personinfo* p = &addressbook->persons[id]; char name[2048] = { 0 }; char num[2048] = { 0 }; char sex[2048] = { 0 }; char age[2048] = { 0 }; char home[2048] = { 0 }; printf("输入*表示该选项不可修改n"); printf("请输入新的姓名、性别、年龄、电话、住址n"); scanf("%s %s %s %s %s", name, sex, age, num, home); if (strcmp(name, "*") != 0) { strcpy(p->name, name); } if (strcmp(sex, "*") != 0) { strcpy(p->sex, sex); } if (strcmp(age, "*") != 0) { strcpy(p->age, age); } if (strcmp(num, "*") != 0) { strcpy(p->num, num); } if (strcmp(home, "*") != 0) { strcpy(p->home, home); } printf("修改成功!n"); } void Show(Addressbook* addressbook) { printf("查看所有联系人n"); int i; for ( i = 0; i < addressbook->size; i++) { Personinfo* p = &addressbook->persons[i]; printf("(%d) %s %s %s %s %sn",i,p->name,p->sex,p->age,p->num,p->home); } printf("查看联系人完成,共有%d个联系人n", i); } void Clean(Addressbook* addressbook) { printf("清空所有联系人n"); addressbook->size = 0; printf("清空完成n"); } int cmp(const void* a, const void* b) {//按字典qsort return strcmp((char*)a, (char*)b); } void Sort(Addressbook* addressbook) { printf("以名字排序所有联系人n"); qsort(&addressbook->persons[0], addressbook->size, sizeof( addressbook->persons[0]),cmp ); printf("排序完成n"); } int Menu() { int choice; 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"); scanf("%d", &choice); return choice; } typedef void(*Func)(Addressbook*);// int main() { init(&addressbook);//初始化 Func func[] = { NULL, Add, Del, Find, Update, Show, Clean, Sort }; while (1) { int choice = Menu(); if (choice < 0 || choice >= sizeof(func) / sizeof(func[0])) { printf("输入错误"); break; } if (choice == 0) { printf("感谢使用"); break; } func[choice](&addressbook); Sleep(1000); system("cls"); } return 0; }
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)