代码拉取完成,页面将自动刷新
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<assert.h>
#include<windows.h>
//描述一个联系人的情况
typedef struct PersonInfo {
char name[1024];
char phone[1024];
}PersonInfo;
//描述一个通讯录.
typedef struct AddressBook {
//最多保存1024个联系人
PersonInfo persons[1024];
//size表示当前保存了多少个联系人.
int size;
}AddressBook;
//设置全局变量,实现通讯录,addressBook贯穿程序始终
AddressBook addressBook;
void init(AddressBook* addressBook) {
//把通讯录的有效元素个数设为0.
addressBook->size = 0;
memset(addressBook->persons, 0, sizeof(addressBook->persons));
}
int menu() {
printf("+------------------------------------------+\n");
printf("| 欢迎使用通讯录! |\n");
printf("+------------------------------------------+\n");
printf("| 1.新增联系人! |\n");
printf("| 2.删除联系人! |\n");
printf("| 3.查看联系人! |\n");
printf("| 4.修改联系人! |\n");
printf("| 0.退出 |\n");
printf("+------------------------------------------+\n");
printf("请输入你的选项:");
int choice = 0;
scanf("%d", &choice);
return choice;
}
void insert(AddressBook* addressBook) {
printf("新增联系人!\n");
//最大保存1024个联系人,如果超过1024则新增失败
assert(addressBook != NULL);
if (addressBook->size >= 1024) {
printf("新增联系人失败!");
return;
}
PersonInfo person = { 0 };
printf("请输入新联系人的姓名:");
scanf("%s", person.name);
printf("请输入新联系人的电话:");
scanf("%s", person.phone);
//把person结构体放到AddressBook中
addressBook->persons[addressBook->size] = person;
addressBook->size++;
printf("新增联系人成功!");
}
void drop(AddressBook* addressBook) {
printf("删除联系人!\n");
//用户输入一个序号根据序号删除.
printf("请输入要删除联系人的序号:");
int id = 0;
scanf("%d", &id);
//判断输入是否正确
if (id < 0 || id >= addressBook->size) {
printf("输入序号有误,删除失败");
return;
}
if (id == addressBook->size - 1) {
addressBook->size--;
printf("删除成功!\n");
return;
}
PersonInfo* lastPerson = &addressBook->persons[addressBook->size - 1];
addressBook->persons[id] = *lastPerson;
addressBook->size--;
printf("删除成功!\n");
return;
}
void show(AddressBook* addressBook) {
printf("查看联系人!\n");
//遍历联系人
for (int i = 0; i < addressBook->size; i++) {
PersonInfo* p = &addressBook->persons[i];
printf("[%d] %s\t%s\n", i, p->name, p->phone);
}
printf("查看完毕!共有%d个联系人", addressBook->size);
}
void update(AddressBook* addressBook) {
printf("修改联系人!\n");
printf("请输入要修改的联系人序号:");
int id = 0;
scanf("%d", id);
if (id < 0 || id >= addressBook->size) {
printf("您输入的序号有误,修改失败!");
return;
}
PersonInfo* p = &addressBook->persons[id];
char name[1024] = { 0 };
char phone[1024] = { 0 };
printf("输入 * 表示该项不修改!");
printf("请输入您新的用户名(旧的名字为%s):",p->name);
scanf("%s", name);
if (strcmp(name,"*") != 0) {
strcpy(p->name,name);
}
printf("请输入新的电话号码(旧的电话为%s):",p->phone);
scanf("%s", phone);
if (strcmp(phone, "*") != 0) {
strcpy(p->phone,phone);
}
}
typedef void(*Func)(AddressBook*);
int main() {
//进行初始化
init(&addressBook);
Func funcs[] = {
NULL,//占位置,让insert和choice对上
insert,
drop,
show,
update
};
//和用户交互
while (1) {
int choice = menu();
if (choice < 0 || choice >= sizeof(funcs)/sizeof(funcs[0])) {
printf("您的输入有误!");
continue;
}
if (choice == 0) {
printf("goodbey!");
break;
}
funcs[choice](&addressBook);
system("pause");
system("cls");
}
return 0;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。