C++实现电话簿管理系统源码

需积分: 9 3 下载量 71 浏览量 更新于2024-09-17 1 收藏 98KB DOC 举报
"这是一个C++实现的电话簿管理系统,由Mark Miller编写,版本1.0。这个系统能够处理电话联系人的添加、删除、查找和显示等功能,并且支持数据的保存和加载。" 在这个电话管理C++源代码中,开发者使用了面向对象编程的概念,创建了一个`friend_node`结构体来存储联系人信息。每个`friend_node`包含三个成员:`last_name`(姓)、`first_name`(名)和`phone_num`(电话号码),以及一个指向下一个节点的指针`next`,形成了一个单链表的数据结构。全局变量`head_ptr`作为链表的头指针,`current_ptr`则用于跟踪在链表中的当前位置。 源代码中定义了一系列的函数,包括: 1. `handle_choice(int choice)`:根据用户输入的选项来调用相应的功能函数。 2. `add_record()`:添加新的联系人记录到链表中。 3. `insert_node(friend_node* new_rec_ptr)`:插入新节点,可能在链表的头部或尾部。 4. `position_insertion_point(char last_name[20])`:找到插入新记录的合适位置,根据姓氏进行查找。 5. `make_node_new_head(friend_node* new_rec_ptr)`:将新节点设为链表的新头。 6. `add_node_to_end(friend_node* new_rec_ptr)`:在链表尾部添加新节点。 7. `move_current_to_end()`:将当前指针移动到链表的末尾。 8. `display_list()`:显示整个联系人列表。 9. `delete_record()`:删除联系人记录。 10. `delete_head_of_list()`:删除链表的首节点。 11. `delete_end_of_list(friend_node* previous_ptr)`:删除链表的尾节点。 12. `delete_from_middle_of_list(friend_node* previous_ptr)`:从链表中间删除节点。 13. `verify_delete()`:在删除操作前进行确认。 14. `delete_node(friend_node* previous_ptr)`:实际执行删除操作。 15. `delete_list()`:清空整个链表。 16. `search_by_name()`:按姓名查找联系人。 17. `write_list_to_file()`:将链表数据写入文件,用于持久化存储。 18. `load_list_from_file()`:从文件加载链表数据,恢复之前保存的记录。 通过这些函数,程序实现了基本的电话簿管理功能,如添加、删除、查找和显示联系人,同时支持数据的文件操作,确保了数据在程序运行前后的一致性。这个C++程序是学习数据结构、链表操作和文件I/O的良好实例。
2018-12-25 上传
#define _CRT_SECURE_NO_WARNINGS 1 #ifndef __CONTACT_H_ #define __CONTACT_H_ #include<stdio.h> #include<stdlib.h> #include<string.h> #define PEO_MAX 30 #define STUID_MAX 10 #define NAME_MAX 20 #define SEX_MAX 10 #define TEL_MAX 15 typedef struct People { char id[STUID_MAX]; char name[NAME_MAX]; char sex[SEX_MAX]; char tel[TEL_MAX]; }*peo; typedef struct Contact { int count; struct People people[PEO_MAX]; }*pCon; void add_peo(pCon pcon); //添加联系人信息 void show_peo(pCon pcon); //显示指定联系人信息 void find_peo(pCon pcon); //查找联系人信息 void modify_peo(pCon pcon); //修改指定联系人信息 void clear_peo(pCon pcon); //清空联系人信息 void show_menu(); //菜单显示 #endif int search(pCon pcon, char *name) { int i = 0; for (i=0; i < pcon->count; i++) { if (strcmp(name, pcon->people[i].name) == 0) return i; } return -1; } void add_peo(pCon pcon) //添加联系人 { if (pcon->count == PEO_MAX) { printf("The contact has fullen."); return; } printf("please input studentID: "); scanf("%s",(pcon->people[pcon->count]).id); printf("please input name: "); scanf("%s", (pcon->people[pcon->count]).name); printf("please input sex : "); scanf("%s", (pcon->people[pcon->count]).sex); printf("please input tel: "); scanf("%s", (pcon->people[pcon->count]).tel); pcon->count++; } void show_peo(pCon pcon)//显示联系人 { int i = 0; for (; i < pcon->count; i++) { printf("studentID name sex tel \n"); printf("%s\t%s\t%s\t%s\n", pcon->people[i].id, pcon->people[i].name, pcon->people[i].sex, pcon->people[i].tel); } } void find_peo(pCon pcon) //查找联系人信息 { int i; char name[NAME_MAX]; printf("please input the people you want to find:"); scanf("%s", name); i = search(pcon, name); if (i == -1) printf("The people doesn't exsit.\n"); else printf("%s\t%s\t%s\t%s\n", pcon->people[i].id, pcon->people[i].name, pcon->people[i].sex, pcon->people[i].tel); } void modify_peo(pCon pcon) //修改指定联系人信息 { int i; char name[NAME_MAX]; printf("please input the people you want to modify:"); scanf("%s", name); i = search(pcon, name); if (i == -1) printf("The people doesn't exsit.\n"); else printf("please input studentID: "); scanf("%s", (pcon->people[i]).id); printf("please input name: "); scanf("%s", (pcon->people[i]).name); printf("please input sex : "); scanf("%s", (pcon->people[i]).sex); printf("please input tel: "); scanf("%s", (pcon->people[i]).tel); } void clear_peo(pCon pcon) //清空联系人 { pcon->count = 0; } void show_menu() //菜单显示 { printf("==========通讯录==========\n"); printf(" \n"); printf("*******[1]显示通讯录******\n"); printf("*******[2]查 询******\n"); printf("*******[3]修 改******\n"); printf("*******[4]结 束******\n"); } int main() { struct Contact my_contact; int input = 1; my_contact.count = 0; while (input) { show_menu(); printf("please input:"); scanf("%d", &input;); switch (input) { case 1: add_peo(&my;_contact); break; case 2: show_peo(&my;_contact); break; case 3: find_peo(&my;_contact); break; case 4: modify_peo(&my;_contact); break; case 5: clear_peo(&my;_contact); break; default: break; } } return 0; }