######今天写课设的时候突然遇到的问题,本来一切都正常,但是不知道为什么第3个功能就不能输入信息了,还显示什么堆损坏,之后用第3个功能输入信息后,就会直接退出程序,之后第一个功能也出问题了,还跳出来一个叫stdio.h的文件,找了好久找不到问题,求大佬解答!
我们这个学期学的数据结构,但是c++不是太了解,许多地方还是用c语音的方式写的。
这是代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_NAME 20
#define MAX_NUMBER 20
#define MAX_SEX 5
#define MAXSIZE 100
typedef struct Contact {
char name[MAX_NAME];
int age;
char phone[MAX_NUMBER];
char sex[MAX_SEX];
}Contact;//定义联系人数据
typedef struct Contacts {
Contact phonebook[MAXSIZE];//联系人数组
int length;//已记录的联系人数量
}Contacts;//定义通讯录
void Clean(void) {
getchar();
system("cls");
}
void InitContacts(Contacts*& C) {
C = (Contacts*)malloc(sizeof(Contacts));//给通讯录分配动态内存
C->length = 0;
};//初始化通讯录//初始化
void CreateContacts(Contacts*& C) {
InitContacts(C);
C = (Contacts*)malloc(sizeof(Contact));//给通讯录分配动态内存
printf("请输入第一个联系人以建立通讯录。\n");
printf("请输入第一个联系人的姓名:"); scanf_s("%s", C->phonebook[0].name, 20); getchar();
printf("请输入第一个联系人的年龄:"); scanf_s("%d", &C->phonebook[0].age); getchar();
printf("请输入第一个联系人的电话:"); scanf_s("%s", C->phonebook[0].phone, 12); getchar();
printf("请输入第一个联系人的性别:"); scanf_s("%s", C->phonebook[0].sex, 5); getchar();
C->length = 1;
printf("\n");
printf("你输入的第一个联系人信息为:\n");
printf("姓名:%s\n", C->phonebook[0].name);
printf("性别:%s\n", C->phonebook[0].sex);
printf("年龄:%d\n", C->phonebook[0].age);
printf("电话号码:%s\n", C->phonebook[0].phone);
printf("通讯录创建成功;\n");
}
void Findbyname(Contacts*& C) {
char name[MAX_NAME];
int i;
int m = 0;
printf("请输入联系人姓名:");
scanf_s("%s", name, 20);
getchar();
for (i = 0; i < C->length; i++) {
if (strcmp(name, C->phonebook[i].name) == 0) {
printf("该联系人的基本信息为:\n");
printf("姓名:%s\n", C->phonebook[i].name);
printf("性别:%s\n", C->phonebook[i].sex);
printf("年龄:%d\n", C->phonebook[i].age);
printf("电话号码:%s\n", C->phonebook[i].phone);
getchar();
m = 1;
break;
}
}
if (m == 0) {
printf("你要找的联系人不存在\n");
Clean();
}
}
void Findbyphone(Contacts*& C) {
char phone[MAX_NUMBER];
int i;
int m = 0;
printf("请输入联系人电话:");
scanf_s("%s", phone, 20);
getchar();
for (i = 0; i < C->length; i++) {
if (strcmp(phone, C->phonebook[i].phone) == 0) {
printf("该联系人的基本信息为:\n");
printf("姓名:%s\n", C->phonebook[i].name);
printf("性别:%s\n", C->phonebook[i].sex);
printf("年龄:%d\n", C->phonebook[i].age);
printf("电话号码:%s\n", C->phonebook[i].phone);
getchar();
m = 1;
break;
}
}
if (m == 0) {
printf("你要找的联系人不存在\n");
Clean();
}
}
void FindContact(Contacts*& C) {
system("cls");
int n;
printf("输入你想要的查询方法:\n");
printf("------------------------\n");
printf("------1.按名字查询-------\n");
printf("------2.按电话查询-------\n");
printf("------------------------\n");
scanf_s("%d", &n);
switch (n)
{
case 1:Findbyname(C); break;
case 2:Findbyphone(C); break;
}
}//查找联系人,两种不同方法,按名字和电话
int AddContact(Contacts*& C) {
int i;
int m = 0;
if (C->length == MAXSIZE)
printf("联系人已满,无法继续添加。");
else
{
printf("请输入该联系人的电话:"); scanf_s("%s", C->phonebook[C->length].phone, 12); getchar();
for (i = 0; i < C->length; i++) {//判断电话号码是否已经存在
if (strcmp(C->phonebook[C->length].phone, C->phonebook[i].phone) == 0) {
printf("该联系人已存在,请重新输入。");
C->phonebook[C->length].phone[MAX_NUMBER] = { '\0' };
getchar();
m = 1;
break;
}
}
if (m == 1) {
return 0;
}
else {
printf("请输入该联系人的姓名:"); scanf_s("%s", C->phonebook[C->length].name, 20); getchar();
printf("请输入该联系人的年龄:"); scanf_s("%d", &C->phonebook[C->length].age); getchar();
printf("请输入该联系人的性别:"); scanf_s("%s", C->phonebook[C->length].sex, 5); getchar();
printf("该联系人添加成功\n");
C->length++;
}
}
}//添加联系人
void Deletebyphone(Contacts*& C) {
int i, j;
int p = 0;
char phone[MAX_NUMBER] = { '\0' };
printf("请输入你要删除的联系人的电话号码:\n");
scanf_s("%s", phone, 12); getchar();
for (i = 0; i < C->length; i++) {
if (strcmp(phone, C->phonebook[i].phone) == 0) {
printf("该联系人的基本信息为:\n");
break;
}
else {
printf("未找到该联系人相关信息。\n");
getchar(); break;
}
}
}//删除联系人
void Display(Contacts*& C) {
int i;
printf("通讯录中共%d人\n", C->length);
printf("通讯录中的联系人为:\n");
for (i = 0; i < C->length; i++) {
printf("第%d位联系人的基本信息:\n", i + 1);
printf("姓名:%s\n", C->phonebook[i].name);
printf("性别:%s\n", C->phonebook[i].sex);
printf("年龄:%d\n", C->phonebook[i].age);
printf("电话号码:%s\n", C->phonebook[i].phone);
printf("\n");
}
getchar();
}
void Distroy(Contacts*& C) {
free(C);
exit(0);
}
void meun(Contacts*& C) {
while (true) {
int k = 0;
printf("---------------------------------\n");
printf("-----1.创建通讯录。---------------\n");
printf("-----2.查询联系人-----------------\n");
printf("-----3.添加联系人-----------------\n");
printf("-----4.删除联系人-----------------\n");
printf("-----5.展示通讯录所有信息----------\n");
printf("-----6.退出----------------------\n");
printf("---------------------------------\n");
scanf_s("%d", &k);
switch (k)
{
case 1:CreateContacts(C); Clean(); break;
case 2:FindContact(C); Clean(); break;
case 3:AddContact(C); Clean(); break;
case 4:Deletebyphone(C); Clean(); break;
case 5:Display(C); Clean(); break;
case 6:Distroy(C); break;
}
}
}
int main(void) {
Contacts* c;
meun(c);
return 0;
}
更新后的完整代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_NAME 20
#define MAX_NUMBER 20
#define MAX_SEX 5
#define MAXSIZE 100
typedef struct Contact {
char name[MAX_NAME];
int age;
char phone[MAX_NUMBER];
char sex[MAX_SEX];
}Contact;//定义联系人数据
typedef struct Contacts {
Contact phonebook[MAXSIZE];//联系人数组
int length;//已记录的联系人数量
}Contacts;//定义通讯录
void Clean(void) {
getchar();
system("cls");
}
void InitContacts(Contacts*& C) {
C = (Contacts*)malloc(sizeof(Contacts));//给通讯录分配动态内存
C->length = 0;
};//初始化通讯录//初始化
void CreateContacts(Contacts*& C) {
InitContacts(C);
C = (Contacts*)malloc(sizeof(Contact));//给通讯录分配动态内存
printf("请输入第一个联系人以建立通讯录。\n");
printf("请输入第一个联系人的姓名:"); scanf_s("%s", C->phonebook[0].name, 20); getchar();
printf("请输入第一个联系人的年龄:"); scanf_s("%d", &C->phonebook[0].age); getchar();
printf("请输入第一个联系人的电话:"); scanf_s("%s", C->phonebook[0].phone, 12); getchar();
printf("请输入第一个联系人的性别:"); scanf_s("%s", C->phonebook[0].sex, 5); getchar();
C->length = 1;
printf("\n");
printf("你输入的第一个联系人信息为:\n");
printf("姓名:%s\n", C->phonebook[0].name);
printf("性别:%s\n", C->phonebook[0].sex);
printf("年龄:%d\n", C->phonebook[0].age);
printf("电话号码:%s\n", C->phonebook[0].phone);
printf("通讯录创建成功;\n");
}
void Findbyname(Contacts*& C) {
char name[MAX_NAME];
int i;
int m = 0;
printf("请输入联系人姓名:");
scanf_s("%s", name, 20);
getchar();
for (i = 0; i < C->length; i++) {
if (strcmp(name, C->phonebook[i].name) == 0) {
printf("该联系人的基本信息为:\n");
printf("姓名:%s\n", C->phonebook[i].name);
printf("性别:%s\n", C->phonebook[i].sex);
printf("年龄:%d\n", C->phonebook[i].age);
printf("电话号码:%s\n", C->phonebook[i].phone);
getchar();
m = 1;
break;
}
}
if (m == 0) {
printf("你要找的联系人不存在\n");
Clean();
}
}
void Findbyphone(Contacts*& C) {
char phone[MAX_NUMBER];
int i;
int m = 0;
printf("请输入联系人电话:");
scanf_s("%s", phone, 20);
getchar();
for (i = 0; i < C->length; i++) {
if (strcmp(phone, C->phonebook[i].phone) == 0) {
printf("该联系人的基本信息为:\n");
printf("姓名:%s\n", C->phonebook[i].name);
printf("性别:%s\n", C->phonebook[i].sex);
printf("年龄:%d\n", C->phonebook[i].age);
printf("电话号码:%s\n", C->phonebook[i].phone);
getchar();
m = 1;
break;
}
}
if (m == 0) {
printf("你要找的联系人不存在\n");
Clean();
}
}
void FindContact(Contacts*& C) {
system("cls");
int n;
printf("输入你想要的查询方法:\n");
printf("------------------------\n");
printf("------1.按名字查询-------\n");
printf("------2.按电话查询-------\n");
printf("------------------------\n");
scanf_s("%d", &n);
switch (n)
{
case 1:Findbyname(C); break;
case 2:Findbyphone(C); break;
}
}//查找联系人,两种不同方法,按名字和电话
int AddContact(Contacts*& C) {
int i;
int m = 0;
if (C->length == MAXSIZE)
printf("联系人已满,无法继续添加。");
else
{
printf("请输入该联系人的电话:"); scanf_s("%s", C->phonebook[C->length].phone, 12); getchar();
for (i = 0; i < C->length; i++) {//判断电话号码是否已经存在
if (strcmp(C->phonebook[C->length].phone, C->phonebook[i].phone) == 0) {
printf("该联系人已存在,请重新输入。");
C->phonebook[C->length].phone[MAX_NUMBER - 1] = 0;
getchar();
m = 1;
break;
}
}
if (m == 1) {
AddContact(C);
}
else {
printf("请输入该联系人的姓名:"); scanf_s("%s", C->phonebook[C->length].name, 20); getchar();
printf("请输入该联系人的年龄:"); scanf_s("%d", &C->phonebook[C->length].age); getchar();
printf("请输入该联系人的性别:"); scanf_s("%s", C->phonebook[C->length].sex, 5); getchar();
printf("该联系人添加成功\n");
C->length++;
}
}
return 1;
}//添加联系人
void Deletebyphone(Contacts*& C) {
int i;
int p = 0;
char phone[MAX_NUMBER] = { '\0' };
printf("请输入你要删除的联系人的电话号码:\n");
scanf_s("%s", phone, 12); getchar();
for (i = 0; i < C->length; i++) {
if (strcmp(phone, C->phonebook[i].phone) == 0) {
printf("该联系人的基本信息为:\n");
break;
}
else {
printf("未找到该联系人相关信息。\n");
getchar(); break;
}
}
}//删除联系人
void Display(Contacts*& C) {
int i;
printf("通讯录中共%d人\n", C->length);
printf("通讯录中的联系人为:\n");
for (i = 0; i < C->length; i++) {
printf("第%d位联系人的基本信息:\n", i + 1);
printf("姓名:%s\n", C->phonebook[i].name);
printf("性别:%s\n", C->phonebook[i].sex);
printf("年龄:%d\n", C->phonebook[i].age);
printf("电话号码:%s\n", C->phonebook[i].phone);
printf("\n");
}
getchar();
}
void Distroy(Contacts*& C) {
free(C);
exit(0);
}
void meun(Contacts*& C) {
while (true) {
int k = 0;
printf("---------------------------------\n");
printf("-----1.创建通讯录。---------------\n");
printf("-----2.查询联系人-----------------\n");
printf("-----3.添加联系人-----------------\n");
printf("-----4.删除联系人-----------------\n");
printf("-----5.展示通讯录所有信息----------\n");
printf("-----6.退出----------------------\n");
printf("---------------------------------\n");
scanf_s("%d", &k);
switch (k)
{
case 1:CreateContacts(C); Clean(); break;
case 2:FindContact(C); Clean(); break;
case 3:AddContact(C); Clean(); break;
case 4:Deletebyphone(C); Clean(); break;
case 5:Display(C); Clean(); break;
case 6:Distroy(C); break;
}
}
}
int main(void) {
Contacts c;
c.length = 0;
Contacts* p = &c;
meun(p);
return 0;
}
C->phonebook[C->length].phone[MAX_NUMBER] = {'\0'};越界了啊。
main中C也没有分配空间,修改如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_NAME 20
#define MAX_NUMBER 20
#define MAX_SEX 5
#define MAXSIZE 100
typedef struct Contact {
char name[MAX_NAME];
int age;
char phone[MAX_NUMBER];
char sex[MAX_SEX];
}Contact;//定义联系人数据
typedef struct Contacts {
Contact phonebook[MAXSIZE];//联系人数组
int length;//已记录的联系人数量
}Contacts;//定义通讯录
void Clean(void) {
getchar();
system("cls");
}
void InitContacts(Contacts*& C) {
C = (Contacts*)malloc(sizeof(Contacts));//给通讯录分配动态内存
C->length = 0;
};//初始化通讯录//初始化
void CreateContacts(Contacts*& C) {
InitContacts(C);
C = (Contacts*)malloc(sizeof(Contact));//给通讯录分配动态内存
printf("请输入第一个联系人以建立通讯录。\n");
printf("请输入第一个联系人的姓名:"); scanf_s("%s", C->phonebook[0].name, 20); getchar();
printf("请输入第一个联系人的年龄:"); scanf_s("%d", &C->phonebook[0].age); getchar();
printf("请输入第一个联系人的电话:"); scanf_s("%s", C->phonebook[0].phone, 12); getchar();
printf("请输入第一个联系人的性别:"); scanf_s("%s", C->phonebook[0].sex, 5); getchar();
C->length = 1;
printf("\n");
printf("你输入的第一个联系人信息为:\n");
printf("姓名:%s\n", C->phonebook[0].name);
printf("性别:%s\n", C->phonebook[0].sex);
printf("年龄:%d\n", C->phonebook[0].age);
printf("电话号码:%s\n", C->phonebook[0].phone);
printf("通讯录创建成功;\n");
}
void Findbyname(Contacts*& C) {
char name[MAX_NAME];
int i;
int m = 0;
printf("请输入联系人姓名:");
scanf_s("%s", name, 20);
getchar();
for (i = 0; i < C->length; i++) {
if (strcmp(name, C->phonebook[i].name) == 0) {
printf("该联系人的基本信息为:\n");
printf("姓名:%s\n", C->phonebook[i].name);
printf("性别:%s\n", C->phonebook[i].sex);
printf("年龄:%d\n", C->phonebook[i].age);
printf("电话号码:%s\n", C->phonebook[i].phone);
getchar();
m = 1;
break;
}
}
if (m == 0) {
printf("你要找的联系人不存在\n");
Clean();
}
}
void Findbyphone(Contacts*& C) {
char phone[MAX_NUMBER];
int i;
int m = 0;
printf("请输入联系人电话:");
scanf_s("%s", phone, 20);
getchar();
for (i = 0; i < C->length; i++) {
if (strcmp(phone, C->phonebook[i].phone) == 0) {
printf("该联系人的基本信息为:\n");
printf("姓名:%s\n", C->phonebook[i].name);
printf("性别:%s\n", C->phonebook[i].sex);
printf("年龄:%d\n", C->phonebook[i].age);
printf("电话号码:%s\n", C->phonebook[i].phone);
getchar();
m = 1;
break;
}
}
if (m == 0) {
printf("你要找的联系人不存在\n");
Clean();
}
}
void FindContact(Contacts*& C) {
system("cls");
int n;
printf("输入你想要的查询方法:\n");
printf("------------------------\n");
printf("------1.按名字查询-------\n");
printf("------2.按电话查询-------\n");
printf("------------------------\n");
scanf_s("%d", &n);
switch (n)
{
case 1:Findbyname(C); break;
case 2:Findbyphone(C); break;
}
}//查找联系人,两种不同方法,按名字和电话
int AddContact(Contacts*& C) {
int i;
int m = 0;
if (C->length == MAXSIZE)
printf("联系人已满,无法继续添加。");
else
{
printf("请输入该联系人的电话:"); scanf_s("%s", C->phonebook[C->length].phone, 12); getchar();
for (i = 0; i < C->length; i++) {//判断电话号码是否已经存在
if (strcmp(C->phonebook[C->length].phone, C->phonebook[i].phone) == 0) {
printf("该联系人已存在,请重新输入。");
C->phonebook[C->length].phone[MAX_NUMBER-1] = 0;
getchar();
m = 1;
break;
}
}
if (m == 1) {
return 0;
}
else {
printf("请输入该联系人的姓名:"); scanf_s("%s", C->phonebook[C->length].name, 20); getchar();
printf("请输入该联系人的年龄:"); scanf_s("%d", &C->phonebook[C->length].age); getchar();
printf("请输入该联系人的性别:"); scanf_s("%s", C->phonebook[C->length].sex, 5); getchar();
printf("该联系人添加成功\n");
C->length++;
}
}
return 1;
}//添加联系人
void Deletebyphone(Contacts*& C) {
int i;
int p = 0;
char phone[MAX_NUMBER] = { '\0' };
printf("请输入你要删除的联系人的电话号码:\n");
scanf_s("%s", phone, 12); getchar();
for (i = 0; i < C->length; i++) {
if (strcmp(phone, C->phonebook[i].phone) == 0) {
printf("该联系人的基本信息为:\n");
break;
}
else {
printf("未找到该联系人相关信息。\n");
getchar(); break;
}
}
}//删除联系人
void Display(Contacts*& C) {
int i;
printf("通讯录中共%d人\n", C->length);
printf("通讯录中的联系人为:\n");
for (i = 0; i < C->length; i++) {
printf("第%d位联系人的基本信息:\n", i + 1);
printf("姓名:%s\n", C->phonebook[i].name);
printf("性别:%s\n", C->phonebook[i].sex);
printf("年龄:%d\n", C->phonebook[i].age);
printf("电话号码:%s\n", C->phonebook[i].phone);
printf("\n");
}
getchar();
}
void Distroy(Contacts*& C) {
free(C);
exit(0);
}
void meun(Contacts*& C) {
while (true) {
int k = 0;
printf("---------------------------------\n");
printf("-----1.创建通讯录。---------------\n");
printf("-----2.查询联系人-----------------\n");
printf("-----3.添加联系人-----------------\n");
printf("-----4.删除联系人-----------------\n");
printf("-----5.展示通讯录所有信息----------\n");
printf("-----6.退出----------------------\n");
printf("---------------------------------\n");
scanf_s("%d", &k);
switch (k)
{
case 1:CreateContacts(C); Clean(); break;
case 2:FindContact(C); Clean(); break;
case 3:AddContact(C); Clean(); break;
case 4:Deletebyphone(C); Clean(); break;
case 5:Display(C); Clean(); break;
case 6:Distroy(C); break;
}
}
}
int main(void) {
Contacts c;
c.length = 0;
Contacts *p = &c;
meun(p);
return 0;
}
下面加 -----------的地方是变化的
void InitContacts(Contacts*& C) {
C = (Contacts*)malloc(sizeof(Contacts));//给通讯录分配动态内存
memset(C, 0, sizeof(Contacts)); // 动态内存清零--------------
C->length = 0;
}
void CreateContacts(Contacts* &C) {
InitContacts(C);
// 下面这一行去掉,重复申请了--------
//C = (Contacts*)malloc(sizeof(Contact));//给通讯录分配动态内存
printf("请输入第一个联系人以建立通讯录。\n");
int AddContact(Contacts*& C) {
int i;
int m = 0;
if (C->length == MAXSIZE)
printf("联系人已满,无法继续添加。");
else
{
printf("请输入该联系人的电话:"); scanf_s("%s", C->phonebook[C->length].phone, 12); getchar();
for (i = 0; i < C->length; i++) {//判断电话号码是否已经存在
if (strcmp(C->phonebook[C->length].phone, C->phonebook[i].phone) == 0) {
printf("该联系人已存在,请重新输入。");
C->phonebook[C->length].phone[0] = { '\0' }; // 赋空 -------------------------------
getchar();
m = 1;
break;
}
}
如没有问题,望采纳
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_NAME 20
#define MAX_NUMBER 20
#define MAX_SEX 5
#define MAXSIZE 100
typedef struct Contact {
char name[MAX_NAME];
int age;
char phone[MAX_NUMBER];
char sex[MAX_SEX];
}Contact;//定义联系人数据
typedef struct Contacts {
Contact phonebook[MAXSIZE];//联系人数组
int length;//已记录的联系人数量
}Contacts;//定义通讯录
void Clean(void) {
getchar();
system("cls");
}
void InitContacts(Contacts*& C) {
C = (Contacts*)malloc(sizeof(Contacts));//给通讯录分配动态内存
C->length = 0;
};//初始化通讯录//初始化
void CreateContacts(Contacts*& C) {
InitContacts(C);
C = (Contacts*)malloc(sizeof(Contact));//给通讯录分配动态内存
printf("请输入第一个联系人以建立通讯录。\n");
printf("请输入第一个联系人的姓名:"); scanf_s("%s", C->phonebook[0].name, 20); getchar();
printf("请输入第一个联系人的年龄:"); scanf_s("%d", &C->phonebook[0].age); getchar();
printf("请输入第一个联系人的电话:"); scanf_s("%s", C->phonebook[0].phone, 12); getchar();
printf("请输入第一个联系人的性别:"); scanf_s("%s", C->phonebook[0].sex, 5); getchar();
C->length = 1;
printf("\n");
printf("你输入的第一个联系人信息为:\n");
printf("姓名:%s\n", C->phonebook[0].name);
printf("性别:%s\n", C->phonebook[0].sex);
printf("年龄:%d\n", C->phonebook[0].age);
printf("电话号码:%s\n", C->phonebook[0].phone);
printf("通讯录创建成功;\n");
}
void Findbyname(Contacts*& C) {
char name[MAX_NAME];
int i;
int m = 0;
printf("请输入联系人姓名:");
scanf_s("%s", name, 20);
getchar();
for (i = 0; i < C->length; i++) {
if (strcmp(name, C->phonebook[i].name) == 0) {
printf("该联系人的基本信息为:\n");
printf("姓名:%s\n", C->phonebook[i].name);
printf("性别:%s\n", C->phonebook[i].sex);
printf("年龄:%d\n", C->phonebook[i].age);
printf("电话号码:%s\n", C->phonebook[i].phone);
getchar();
m = 1;
break;
}
}
if (m == 0) {
printf("你要找的联系人不存在\n");
Clean();
}
}
void Findbyphone(Contacts*& C) {
char phone[MAX_NUMBER];
int i;
int m = 0;
printf("请输入联系人电话:");
scanf_s("%s", phone, 20);
getchar();
for (i = 0; i < C->length; i++) {
if (strcmp(phone, C->phonebook[i].phone) == 0) {
printf("该联系人的基本信息为:\n");
printf("姓名:%s\n", C->phonebook[i].name);
printf("性别:%s\n", C->phonebook[i].sex);
printf("年龄:%d\n", C->phonebook[i].age);
printf("电话号码:%s\n", C->phonebook[i].phone);
getchar();
m = 1;
break;
}
}
if (m == 0) {
printf("你要找的联系人不存在\n");
Clean();
}
}
void FindContact(Contacts*& C) {
system("cls");
int n;
printf("输入你想要的查询方法:\n");
printf("------------------------\n");
printf("------1.按名字查询-------\n");
printf("------2.按电话查询-------\n");
printf("------------------------\n");
scanf_s("%d", &n);
switch (n)
{
case 1:Findbyname(C); break;
case 2:Findbyphone(C); break;
}
}//查找联系人,两种不同方法,按名字和电话
int AddContact(Contacts*& C) {
int i;
int m = 0;
if (C->length == MAXSIZE)
printf("联系人已满,无法继续添加。");
else
{
printf("请输入该联系人的电话:"); scanf_s("%s", C->phonebook[C->length].phone, 12); getchar();
for (i = 0; i < C->length; i++) {//判断电话号码是否已经存在
if (strcmp(C->phonebook[C->length].phone, C->phonebook[i].phone) == 0) {
printf("该联系人已存在,请重新输入。");
C->phonebook[C->length].phone[MAX_NUMBER-1] = 0;
getchar();
m = 1;
break;
}
}
if (m == 1) {
return 0;
}
else {
printf("请输入该联系人的姓名:"); scanf_s("%s", C->phonebook[C->length].name, 20); getchar();
printf("请输入该联系人的年龄:"); scanf_s("%d", &C->phonebook[C->length].age); getchar();
printf("请输入该联系人的性别:"); scanf_s("%s", C->phonebook[C->length].sex, 5); getchar();
printf("该联系人添加成功\n");
C->length++;
}
}
return 1;
}//添加联系人
void Deletebyphone(Contacts*& C) {
int i;
int p = 0;
char phone[MAX_NUMBER] = { '\0' };
printf("请输入你要删除的联系人的电话号码:\n");
scanf_s("%s", phone, 12); getchar();
for (i = 0; i < C->length; i++) {
if (strcmp(phone, C->phonebook[i].phone) == 0) {
printf("该联系人的基本信息为:\n");
break;
}
else {
printf("未找到该联系人相关信息。\n");
getchar(); break;
}
}
}//删除联系人
void Display(Contacts*& C) {
int i;
printf("通讯录中共%d人\n", C->length);
printf("通讯录中的联系人为:\n");
for (i = 0; i < C->length; i++) {
printf("第%d位联系人的基本信息:\n", i + 1);
printf("姓名:%s\n", C->phonebook[i].name);
printf("性别:%s\n", C->phonebook[i].sex);
printf("年龄:%d\n", C->phonebook[i].age);
printf("电话号码:%s\n", C->phonebook[i].phone);
printf("\n");
}
getchar();
}
void Distroy(Contacts*& C) {
free(C);
exit(0);
}
void meun(Contacts*& C) {
while (true) {
int k = 0;
printf("---------------------------------\n");
printf("-----1.创建通讯录。---------------\n");
printf("-----2.查询联系人-----------------\n");
printf("-----3.添加联系人-----------------\n");
printf("-----4.删除联系人-----------------\n");
printf("-----5.展示通讯录所有信息----------\n");
printf("-----6.退出----------------------\n");
printf("---------------------------------\n");
scanf_s("%d", &k);
switch (k)
{
case 1:CreateContacts(C); Clean(); break;
case 2:FindContact(C); Clean(); break;
case 3:AddContact(C); Clean(); break;
case 4:Deletebyphone(C); Clean(); break;
case 5:Display(C); Clean(); break;
case 6:Distroy(C); break;
}
}
}
int main(void) {
Contacts c;
c.length = 0;
Contacts *p = &c;
meun(p);
return 0;
}