#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string>
#include <windows.h>
typedef struct PersonInfo {
//描述一个联系人
char name[1024];
char phone[1024];
}PersonInfo;
typedef struct AddressBook {
PersonInfo persons[1024];
int people_num;
//联系人个数
}AddressBook;
//描述一个通讯录,包含多个联系人
AddressBook addressbook;
//描述一个全局变量
int menu() {
printf("--------------------------------<欢迎使用通讯录>---------------------------------\n\n");
printf("+-------------------------------[1.新增联系人]----------------------------------+\n");
printf("|-------------------------------[2.查看联系人]----------------------------------|\n");
printf("|-------------------------------[3.修改联系人信息]------------------------------|\n");
printf("|-------------------------------[4.删除联系人]----------------------------------|\n");
printf("|-------------------------------[0.退出]----------------------------------------|\n");
printf("+-------------------------------请输入您的选项:---------------------------------+\n");
int choice = 0;
scanf("%d", &choice);
return choice;
}
void init(AddressBook* addressbook) {
//初始化
addressbook->people_num = 0;
//有0个联系人
}
void Add(AddressBook* addressbook) {
//添加联系人
printf("新增联系人~\n");
assert(addressbook != NULL);
if (addressbook->people_num >= 1024) {
printf("添加失败!\n");
}
PersonInfo person = { 0 };
printf("请输入联系人姓名:\n");
scanf("%s", person.name);
printf("请输入新联系人电话号码:\n");
scanf("%s", person.phone);
//把person结构体放到电话本
addressbook->persons[addressbook->people_num] = person;
addressbook->people_num++;
printf("新增成功!\n");
}
void show(AddressBook* addressbook) {
//展示联系人
printf("展示联系人~\n");
assert(addressbook != NULL);
for (int i = 0; i < addressbook->people_num; i++) {
//使用指针变量表示元素
PersonInfo* p = &addressbook->persons[i];
printf("[%d]\t%s\t%s\n", i, p->name, p->phone);
}
printf("共有%d个联系人~\n", addressbook->people_num);
}
void modifi(AddressBook* addressbook) {
//修改联系人
printf("修改联系人~\n");
assert(addressbook != NULL);
int id;
for (int i = 0; i < addressbook->people_num; i++) {
//使用指针变量表示元素
PersonInfo* p = &addressbook->persons[i];
printf("[%d]\t%s\t%s\n", i, p->name, p->phone);
}
printf("共有%d个联系人~\n", addressbook->people_num);
printf("请输入要修改的联系人序号:\n");
scanf("%d", &id);
if (id<0 || id>addressbook->people_num) {
printf("您输入的序号有误!修改失败!!");
}
PersonInfo* p = &addressbook->persons[id];
printf("请输入新的联系人姓名(旧名字为:%s):\n", p->name);
scanf("%s", &p->name);
printf("请输入新的联系人号码(旧的电话号为:%s):\n", p->phone);
scanf("%s", &p->phone);
printf("修改成功!!\n");
}
void Delet(AddressBook* addressbook) {
//删除联系人
printf("删除联系人~\n");
assert(addressbook != NULL);
int id = 0;
for (int i = 0; i < addressbook->people_num; i++) {
//使用指针变量表示元素
PersonInfo* p = &addressbook->persons[i];
printf("[%d]\t%s\t%s\n", i, p->name, p->phone);
}
printf("共有%d个联系人~\n", addressbook->people_num);
printf("请输入要删除的联系人的序号:\n");
PersonInfo* p = &addressbook->persons[id];
scanf("%d", &id);
if (id<0 || id>addressbook->people_num) {
printf("您的输入有误,删除失败!!\n");
}
for (int i = 0; i < addressbook->people_num; i++) {
if (id == i) {
for (int j = i; j < addressbook->people_num; j++) {
addressbook->persons[j] = addressbook->persons[j + 1];
addressbook->people_num--;
}
}
}
printf("删除成功!!\n");
}
int main() {
//1.进行初始化
init(&addressbook);
//2.打印菜单
while (1) {
int choice = menu();
if (choice > 4 || choice < 0) {
printf("您的输入有误!!请重新输入:\n");
continue;
}
if (choice == 0) {
//退出
printf("Good bye!!\n");
break;
}
else if (choice == 1) {
//新增联系人
Add(&addressbook);
}
else if (choice == 2) {
//查看联系人
show(&addressbook);
system("pause");
}
else if (choice == 3) {
//修改联系人信息
modifi(&addressbook);
}
else if (choice == 4) {
//删除联系人
Delet(&addressbook);
}
Sleep(600);
system("cls");
}
system("pause");
return 0;
}
程序简单易懂,都有注释很好理解,小哥哥们点赞!!!