C语言通讯录系统
来源:互联网 发布:七武士知乎 编辑:程序博客网 时间:2024/05/22 13:52
实现一个通讯录:
通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
提供方法:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
7. 保存所有联系人
8. 打印所有联系人信息
以下是具体代码:
person_info.h
#pragma once#include <stddef.h>#define NAME_SIZE 200 //姓名#define PHONE_SIZE 200 //电话号码#define ADDR_SIZE 200 //住址//联系人typedef struct PersonInfo{ char name[NAME_SIZE]; char phone[PHONE_SIZE]; char addr[ADDR_SIZE];}PersonInfo;
addr_book.h
#pragma once#include "person_info.h"#define FILE_PATH "./data.txt"enum{ DISPLAY = 1, ADD = 2, ERASE = 3, FIND = 4, MODIFY = 5, DESTROY = 6, EXIT = 0};typedef struct AddrBook{ PersonInfo* data; size_t size; //联系人个数 size_t capacity; //容量}AddrBook;void AddrBookInit(AddrBook* addr_book); //初始化通讯录void AddrBookDisplay(AddrBook* addr_book); //打印通讯录所有信息void AddrBookAdd(AddrBook* addr_book); //在通讯录中增加条目void AddrBookErase(AddrBook* addr_book); //删除通讯录中指定条目void AddrBookFind(AddrBook* addr_book); //查找指定条目void AddrBookModify(AddrBook* addr_book); //修改指定条目void AddrBookDestroy(AddrBook* addr_book); //销毁通讯录void AddrBookSave(AddrBook* addr_book); //保存通讯录void AddrBookLoad(AddrBook* addr_book); //加载回内存
addr_book.c
#include "addr_book.h"#include <stdio.h>#include <stdlib.h>#include <string.h>//初始化通讯录void AddrBookInit(AddrBook* addr_book){ if (addr_book == NULL) //判空 { printf("addr_book is null\n"); return; } addr_book->size = 0; addr_book->capacity = 1; addr_book->data = (PersonInfo*)malloc(sizeof(PersonInfo)*addr_book->capacity);}//打印通讯录所有信息void AddrBookDisplay(AddrBook* addr_book){ if (addr_book == NULL) //判空 { printf("addr_book is null\n"); return; } printf("|----------------|------------------|-----------------|\n"); printf("| 姓 名 | 电 话 | 地 址 |\n"); printf("|----------------|------------------|-----------------|\n"); size_t i = 0; for (; i < addr_book->size; ++i) { printf("| %s | %s | %s |\n", addr_book->data[i].name, addr_book->data[i].phone, addr_book->data[i].addr); printf("|----------------|------------------|-----------------|\n"); }}void AddrBookRelloc(AddrBook* addr_book){ if (addr_book == NULL) //判空 { printf("addr_book is null\n"); return; } addr_book->capacity = addr_book->capacity * 2 + 1; PersonInfo* new_data = (PersonInfo*)malloc(sizeof(PersonInfo)*addr_book->capacity); size_t i = 0; for (; i < addr_book->size; ++i) { new_data[i] = addr_book->data[i]; //将原来空间的内容拷贝到新的空间中 } free(addr_book->data); //释放原来空间 addr_book->data = new_data;}//在通讯录中增加条目void AddrBookAdd(AddrBook* addr_book){ if (addr_book == NULL) //判空 { printf("addr_book is null\n"); return; } if (addr_book->size >= addr_book->capacity) //若容量不够需扩容 { AddrBookRelloc(addr_book); } size_t cur = addr_book->size; ++addr_book->size; printf("开始插入数据:\n"); //插入新数据 printf("请输入姓名:"); scanf("%s", addr_book->data[cur].name); printf("请输入电话号码:"); scanf("%s", addr_book->data[cur].phone); printf("请输入地址:"); scanf("%s", addr_book->data[cur].addr); printf("插入成功!\n"); return;}//保存通讯录void AddrBookSave(AddrBook* addr_book) //判空{ if (addr_book == NULL) { printf("addr_book is null\n"); return; } FILE* fp = fopen(FILE_PATH, "w"); //以文本方式保存 if (fp == NULL) { printf("打开文件失败!%s\n", FILE_PATH); return; } fprintf(fp, "|----------------|-------------------|-----------------|\n"); size_t i = 0; for (; i < addr_book->size; ++i) { fprintf(fp, "| %s | %s | %s |\n", addr_book->data[i].name, addr_book->data[i].phone, addr_book->data[i].addr); fprintf(fp, "|----------------|-------------------|-----------------|\n"); } fclose(fp);}//加载回内存void AddrBookLoad(AddrBook* addr_book){ if (addr_book == NULL) //判空 { printf("addr_book is null\n"); return; } FILE* fp = fopen(FILE_PATH, "r"); if (fp == NULL) { printf("打开文件失败!%s\n", FILE_PATH); return; } while (!feof(fp)) { if (addr_book->size >= addr_book->capacity) { AddrBookRelloc(addr_book); } size_t cur = addr_book->size; fscanf(fp, "%s%s%s\n", addr_book->data[cur].name, addr_book->data[cur].phone, addr_book->data[cur].addr); ++addr_book->size; } fclose(fp);}//删除通讯录中指定条目void AddrBookErase(AddrBook* addr_book) { if (addr_book == NULL) //判空 { printf("addr_book is null\n"); return; } char to_delete[200] = { 0 }; printf("请输入要删除的联系人名字:"); //根据联系人姓名删除 scanf("%s", &to_delete); size_t i = 0; for (; i < addr_book->size; ++i) { if (strcmp(addr_book->data[i].name, to_delete) == 0) { free(addr_book->data); addr_book->size--; printf("删除成功!\n"); return; } } if (i == addr_book->size) { printf("无此人,删除失败!\n"); return; }}//查找指定条目void AddrBookFind(AddrBook* addr_book){ if (addr_book == NULL) //判空 { printf("addr_book is null\n"); return; } char name[200] = { 0 }; printf("请输入要查找的联系人名字:"); //通过姓名查找 scanf("%s", &name); size_t i = 0; for (; i < addr_book->size; ++i) { if (strcmp(addr_book->data[i].name, name) == 0) { printf("找到了!\n"); printf("此人信息为:\n 姓名:%s ,电话:%s ,地址:%s\n", addr_book->data[i].name, addr_book->data[i].phone, addr_book->data[i].addr); return; } } if (i == addr_book->size) { printf("无此人!\n"); return; }}//修改指定条目void AddrBookModify(AddrBook* addr_book){ if (addr_book == NULL) { printf("addr_book is null\n"); return; } char name[200] = { 0 }; printf("请输入要修改的联系人名字:"); scanf("%s", &name); size_t i = 0; for (; i < addr_book->size; ++i) { if (strcmp(addr_book->data[i].name, name) == 0) { printf("这是第%lu个联系人:\n", i + 1); //先判断是第几个联系人 printf("此人信息为:\n 姓名:%s ,电话:%s ,地址:%s\n", addr_book->data[i].name, addr_book->data[i].phone, addr_book->data[i].addr); } } size_t num = 0; printf("请输入需要修改的联系人编号:"); //通过联系人编号修改 scanf("%lu", &num); char name2[200]; char phone[200]; char addr[200]; printf("请输入新的姓名:"); scanf("%s", name2); strcpy(addr_book->data[num - 1].name, name2); printf("请输入新的电话号码:"); scanf("%s", phone); strcpy(addr_book->data[num - 1].phone, phone); printf("请输入新的地址:"); scanf("%s", addr); strcpy(addr_book->data[num - 1].addr, addr); printf("修改成功!\n"); return;}//销毁通讯录void AddrBookDestroy(AddrBook* addr_book){ if (addr_book == NULL) //判空 { printf("addr_book is null\n"); return; } else { addr_book->size = 0; addr_book->capacity = 0; free(addr_book->data); printf("已成功销毁!\n"); }}
Test.c
#include "addr_book.h"#include <windows.h>#include <stdio.h>void Menu(){ AddrBook addr_book; AddrBookInit(&addr_book); AddrBookLoad(&addr_book); while (1) { printf("****************************************\n"); printf("*************1.显示所有条目*************\n"); printf("*************2.新增条目*****************\n"); printf("*************3.删除条目*****************\n"); printf("*************4.查找条目*****************\n"); printf("*************5.修改条目*****************\n"); printf("*************6.销毁通讯录***************\n"); printf("*************0.退出通讯录***************\n"); int choice = 0; printf("请选择:"); scanf("%d", &choice); switch (choice) { case DISPLAY: AddrBookDisplay(&addr_book); break; case ADD: AddrBookAdd(&addr_book); AddrBookSave(&addr_book); break; case ERASE: AddrBookErase(&addr_book); break; case FIND: AddrBookFind(&addr_book); break; case MODIFY: AddrBookModify(&addr_book); break; case DESTROY: AddrBookDestroy(&addr_book); break; case EXIT: printf("成功退出!\n"); return 0; break; default: printf("非法输入,请重新输入!\n"); break; } }}int main(){ Menu(); system("pause"); return 0;}
效果展示:
1.显示条目
2.新增条目
3.删除条目
4.查找条目
5.修改条目
6.销毁通讯录
7.退出通讯录
8.非法输入
9.文本
此为简易版通讯录,如有错误欢迎大家指正!
阅读全文
0 0
- C语言通讯录系统
- C语言通讯录管理系统
- C语言通讯录管理系统
- c语言通讯录管理系统
- c语言实现通讯录系统
- C语言通讯录管理系统
- C语言:通讯录管理系统
- C语言通讯录管理系统【没看】
- c语言实现的通讯录系统
- 通讯录系统 (C语言 控制台应用程序)
- 应用:C语言通讯录---退出系统
- 通讯录管理系统C语言课程设计
- C语言 电子通讯录管理系统
- C语言实现通讯录管理系统
- 通讯录源码--C语言
- C语言通讯录编写
- 通讯录C语言代码
- 通讯录 C语言
- linux下编译安装与卸载 tar.gz文件
- 第一个项目遇到的问题2
- 线性空间的一些直观感悟
- 百度ueditor编辑器将图片上传到非项目根路径(保存在磁盘上)或独立服务器解决方案
- 这个冬天,F-One和合作伙伴抱了个团
- C语言通讯录系统
- javaweb简单快速的密码加密
- Scala学习笔记
- 无人驾驶时代催生乘客经济市场
- 新词话 | 智能服务
- 导师制收获
- runonuithread封装
- 如何从光盘安装CentOS 7图形界面(Gnome GUI)
- 地球人如何监管人工智能带来的风险?