当前位置:实例文章 » 其他实例» [文章]c语言小项目——通讯录中阶(动态内存版)

c语言小项目——通讯录中阶(动态内存版)

发布人:shili8 发布时间:2025-01-08 15:04 阅读次数:0

**通讯录小项目——中阶版**

在前面的通讯录小项目中,我们实现了一个简单的通讯录程序,支持添加、删除、修改和查询联系人信息。然而,这个版本使用的是静态内存来存储联系人的信息,而不是动态内存。这意味着我们需要手动分配和释放内存来存储每个联系人的信息。

在这个中阶版的通讯录小项目中,我们将使用动态内存来存储联系人的信息。这样做可以更好地管理内存,避免内存泄漏等问题。

**程序结构**

我们的通讯录小项目将包含以下几个部分:

1. **通讯录类(ContactBook)**:负责管理整个通讯录的功能。
2. **联系人类(Contact)**:负责管理一个联系人的信息。
3. **菜单类(Menu)**:负责显示和处理用户的选择。

**通讯录类(ContactBook)**

c#include <stdio.h>
#include <stdlib.h>

// 联系人结构体typedef struct {
 char name[50];
 int age;
 char phone[20];
} Contact;

// 通讯录类typedef struct {
 Contact* contacts; // 联系人的数组 int size; // 当前联系人数量 int capacity; // 最大容量} ContactBook;

// 初始化通讯录ContactBook* init_contact_book(int capacity) {
 ContactBook* contact_book = (ContactBook*)malloc(sizeof(ContactBook));
 contact_book->contacts = (Contact*)malloc(capacity * sizeof(Contact));
 contact_book->size =0;
 contact_book->capacity = capacity;
 return contact_book;
}

// 添加联系人void add_contact(ContactBook* contact_book, Contact contact) {
 if (contact_book->size < contact_book->capacity) {
 contact_book->contacts[contact_book->size] = contact;
 contact_book->size++;
 } else {
 printf("通讯录已满!
");
 }
}

// 删除联系人void delete_contact(ContactBook* contact_book, int index) {
 if (index >=0 && index < contact_book->size) {
 for (int i = index; i < contact_book->size -1; i++) {
 contact_book->contacts[i] = contact_book->contacts[i +1];
 }
 contact_book->size--;
 } else {
 printf("联系人不存在!
");
 }
}

// 修改联系人void modify_contact(ContactBook* contact_book, int index, Contact new_contact) {
 if (index >=0 && index < contact_book->size) {
 contact_book->contacts[index] = new_contact;
 } else {
 printf("联系人不存在!
");
 }
}

// 查询联系人void query_contact(ContactBook* contact_book, int index) {
 if (index >=0 && index < contact_book->size) {
 Contact contact = contact_book->contacts[index];
 printf("姓名:%s
", contact.name);
 printf("年龄:%d
", contact.age);
 printf("电话:%s
", contact.phone);
 } else {
 printf("联系人不存在!
");
 }
}

//释放通讯录内存void free_contact_book(ContactBook* contact_book) {
 free(contact_book->contacts);
 free(contact_book);
}


**菜单类(Menu)**

c#include <stdio.h>

// 显示菜单选项void show_menu() {
 printf("1. 添加联系人
");
 printf("2. 删除联系人
");
 printf("3. 修改联系人
");
 printf("4. 查询联系人
");
 printf("5.退出
");
}

// 处理用户选择int handle_choice(int choice) {
 switch (choice) {
 case1:
 return1;
 case2:
 return2;
 case3:
 return3;
 case4:
 return4;
 case5:
 return0;
 default:
 printf("请输入正确的选项!
");
 return -1;
 }
}


**联系人类(Contact)**

c#include <stdio.h>

// 联系人结构体typedef struct {
 char name[50];
 int age;
 char phone[20];
} Contact;

// 初始化联系人void init_contact(Contact* contact) {
 printf("请输入姓名:");
 scanf("%s", contact->name);
 printf("请输入年龄:");
 scanf("%d", &contact->age);
 printf("请输入电话:");
 scanf("%s", contact->phone);
}


**main函数**

c#include <stdio.h>
#include <stdlib.h>

int main() {
 int choice;
 ContactBook* contact_book = init_contact_book(10);

 while (1) {
 show_menu();
 printf("请输入选项:");
 scanf("%d", &choice);
 choice = handle_choice(choice);

 if (choice ==0) {
 break;
 } else if (choice ==1) {
 Contact contact;
 init_contact(&contact);
 add_contact(contact_book, contact);
 } else if (choice ==2) {
 int index;
 printf("请输入要删除的联系人索引:");
 scanf("%d", &index);
 delete_contact(contact_book, index);
 } else if (choice ==3) {
 int index;
 printf("请输入要修改的联系人索引:");
 scanf("%d", &index);
 Contact contact;
 init_contact(&contact);
 modify_contact(contact_book, index, contact);
 } else if (choice ==4) {
 int index;
 printf("请输入要查询的联系人索引:");
 scanf("%d", &index);
 query_contact(contact_book, index);
 }
 }

 free_contact_book(contact_book);

 return0;
}


这个中阶版的通讯录小项目使用了动态内存来存储联系人的信息,更加高效地管理内存。同时,增加了菜单类和联系人类,使得程序结构更加清晰和易于维护。

**注意**

* 这个程序使用了动态内存分配和释放,需要手动释放内存来避免内存泄漏。
* 在添加、删除、修改和查询联系人的时候,都需要输入正确的索引号。
* 如果输入的选项不正确,会提示错误信息并继续运行。

相关标签:c语言开发语言
其他信息

其他资源

Top