c语言实现简单通讯录(仅代码)
C语言实现简单通讯录(仅代码)
头文件部分
#pragma once
//头文件区域
#include<stdio.h>
#include<Windows.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>//定义声明
#define MAX 100
//人的信息
typedef struct PeoInfo
{char name[20];int age;char sex[10];char tel[12];char addr[30];
}PeoInfo;
//通讯录
//typedef struct Contact
//{// PeoInfo data[MAX];
// int count;
// }Contact;//动态版本
typedef struct Contact
{PeoInfo* data;int count;int capacity;
}Contact;//函数区域
void menu();
void InitContact(Contact *pc);
void addContact(Contact *pc);
void showContact(const Contact *pc);
void deleteContact(Contact* pc);
void searchContact(const Contact* pc);
void modifyContact(Contact* pc);
void sortContact(Contact* pc);
void DestoryContact(Contact* pc);
void SaveContact(Contact* pc);
void LoadContact(Contact* pc);
函数接口实现
#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
void menu()
{printf("*****************************************\n");printf("***** 1.add 2.del *****\n");printf("***** 3.search 4.modify *****\n");printf("***** 5.show 6.sort *****\n");printf("***** 0.exit *****\n");printf("*****************************************\n");printf("请输入需要的操作:>");}
//初始化通讯录
// 静态版本
//void InitContact(Contact *pc)
//{// for (int i = 0; i < MAX; i++)
// {// memset(pc->data, 0,sizeof(pc->data));
// }
// pc->count = 0;
//}//动态版本
void InitContact(Contact* pc)
{assert(pc);pc->count = 0;pc->data = (PeoInfo*)calloc(3,sizeof(PeoInfo));if (pc->data==NULL){printf("%s", strerror(errno));}LoadContact(pc);pc->capacity = 3;
}//添加联系人
//静态版本
//void addContact(Contact* pc)
//{// system("cls");
// assert(pc);
// if (pc->count == MAX)
// {// printf("通讯录已满\n");
// return ;
// }
// char option = 'Y';
//
// while (option == 'Y')
// {//
// system("cls");
// printf("请输入信息\n");
// printf("请输入名字>");
// scanf("%s", pc->data[pc->count].name);
// printf("请输入年龄>");
// scanf("%d", &pc->data[pc->count].age);
// printf("请输入性别>");
// scanf("%s", pc->data[pc->count].sex);
// printf("请输入电话>");
// scanf("%s", pc->data[pc->count].tel);
// printf("请输入地址>");
// scanf("%s", pc->data[pc->count].addr);
// printf("是否确定添加 Y/N\n");
// getchar();//清除printf函数范围值
// char opt = getchar();
// if (opt == 'Y')
// {// pc->count++;
// printf("保存成功\n");
// }
// else
// {// memset(&pc->data[pc->count], 0, sizeof(pc->data[pc->count]));
// printf("取消成功\n");
// }
// printf("是否继续添加 Y/N\n");
// getchar();
// option = getchar();
// }
// system("cls");
// printf("成功退出 按任意键回到主页面...\n");
// getchar();
// getchar();
//}
//动态版本
void checksum(Contact* pc)
{if (pc->count == pc->capacity){PeoInfo* ptr = (PeoInfo*)realloc(pc->data, (pc->capacity + 2) * sizeof(PeoInfo));if (ptr == NULL){printf("%s", strerror(errno));return;}else{pc->data = ptr;pc->capacity += 2;printf("增容成功\n");printf("按任意键继续...\n");getchar();getchar();}}
}void LoadContact(Contact* pc)
{FILE* pf = fopen("contact.txt", "rb");if (pf == NULL){perror("fopen");return;}PeoInfo tmp = { 0 };while (fread(&tmp, sizeof(PeoInfo), 1, pf) == 1){checksum(pc);pc->data[pc->count] = tmp;pc->count++;}fclose(pf);pf = NULL;
}void addContact(Contact* pc)
{system("cls");assert(pc);//增容//函数版本/*if (pc->count ==pc->capacity){PeoInfo *ptr=(PeoInfo *)realloc(pc->data, (pc->capacity + 2) * sizeof(PeoInfo));if (ptr == NULL){printf("%s", strerror(errno));return;}else{pc->data = ptr;pc->capacity += 2;}}*/char option = 'Y';while (option == 'Y'){checksum(pc);system("cls");printf("请输入信息\n");printf("请输入名字>");scanf("%s", pc->data[pc->count].name);printf("请输入年龄>");scanf("%d", &pc->data[pc->count].age);printf("请输入性别>");scanf("%s", pc->data[pc->count].sex);printf("请输入电话>");scanf("%s", pc->data[pc->count].tel);printf("请输入地址>");scanf("%s", pc->data[pc->count].addr);printf("是否确定添加 Y/N\n");getchar();//清除printf函数范围值char opt = getchar();if (opt == 'Y'){pc->count++;printf("保存成功\n");}else{memset(&pc->data[pc->count], 0, sizeof(pc->data[pc->count]));printf("取消成功\n");}printf("是否继续添加 Y/N\n");getchar();option = getchar();}system("cls");printf("成功退出 按任意键回到主页面...\n");getchar();getchar();
}//显示联系人
void showContact(const Contact* pc)
{assert(pc);system("cls");printf("所有联系人\n");int i = 0;printf("显示全部\n");printf("%-s\t%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "序号", "名字", "年龄", "性别", "电话", "地址");for (i = 0; i < pc->count; i++){printf("%-d\t%-20s\t%-5d\t%-5s\t%-12s\t%-30s\n", i+1,pc->data[i].name, pc->data[i].age,pc->data[i].sex,pc->data[i].tel,pc->data[i].addr);}printf("输入任意键退出...\n");getchar();getchar();
}//查询函数(内部函数)
static int FindName(Contact* pc, char name[])
{assert(pc);int i = 0;for (i = 0; i < pc->count; i++){if (0 == strcmp(pc->data[i].name, name)){return i;}}return -1;
}//删除联系人
void deleteContact(Contact* pc)
{system("cls");assert(pc);if (pc->count == 0){printf("通讯录为空,没有可删除对象\n");printf("按任意键退出...\n");getchar();getchar();}char name[20];printf("请输入要删除的名字>:");scanf("%s", name);int pos = FindName( pc,name);if (pos == -1){system("cls");printf("你删除的姓名不存在\n按任意键退出...");getchar();getchar();return ;}for (int i = pos; i < pc->count-1; i++){pc->data[i] = pc->data[i + 1];}memset(&pc->data[pc->count - 1], 0, sizeof(pc->data[pc->count - 1]));pc->count--;printf("删除成功\n按任意键退出...");getchar();getchar();
}//查询联系人
void searchContact(const Contact* pc)
{system("cls");assert(pc);char name[20];printf("请输入需要查找的名字:>");scanf("%s", name);int pos = FindName(pc, name);if (pos == -1){printf("找不到该对象\n");printf("按任意键退出\n");getchar();getchar();return;}else{printf("%-s\t%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "序号", "名字", "年龄", "性别", "电话", "地址");printf("%-d\t%-20s\t%-5d\t%-5s\t%-12s\t%-30s\n", pos + 1,pc->data[pos].name,pc->data[pos].age,pc->data[pos].sex,pc->data[pos].tel,pc->data[pos].addr);}printf("按任意键退出\n");getchar();getchar();
}//修改联系人
void modifyContact(Contact* pc)
{system("cls");assert(pc);char name[20];printf("请输入需要修改的名字:>");scanf("%s", name);int pos = FindName(pc, name);if (pos == -1){printf("要修改的人不存在\n按任意键退出...\n");getchar();getchar();return;}printf("请输入信息\n");printf("请输入名字>");scanf("%s", pc->data[pos].name);printf("请输入年龄>");scanf("%d", &pc->data[pos].age);printf("请输入性别>");scanf("%s", pc->data[pos].sex);printf("请输入电话>");scanf("%s", pc->data[pos].tel);printf("请输入地址>");scanf("%s", pc->data[pos].addr);printf("修改成功\n按任意键退出...\n");getchar();getchar();
}//联系人按名字排序//排序函数
int my_sort(const void* e1,const void* e2)
{return strcmp(((PeoInfo*)e1)->name, ((PeoInfo*)e2)->name);
}
void sortContact(Contact* pc)
{system("cls");assert(pc);qsort(pc->data, pc->count, sizeof(pc->data[0]),my_sort);printf("排序成功\n按任意键退出...\n");getchar();getchar();
}
void SaveContact(Contact* pc)
{assert(pc);FILE* pf = fopen("contact.txt", "wb");if (pf == NULL){perror("fopen");return ;}for (int i = 0; i < pc->count; i++){fwrite(&pc->data[i], sizeof(PeoInfo), 1, pf);}fclose(pf);pf = NULL;
}
void DestoryContact(Contact* pc)
{assert(pc);free(pc->data);pc->data = NULL;
}
主体
#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
int main()
{int input = 0;Contact con;//初始化函数InitContact(&con);do {system("cls");menu();scanf("%d", &input);switch (input){case 1:addContact(&con);break;case 2:deleteContact(&con);break;case 3:searchContact(&con);break;case 4:modifyContact(&con);break;case 5:showContact(&con);break;case 6:sortContact(&con);break;case 0:SaveContact(&con);DestoryContact(&con);break;default:system("cls");printf("选择错误,重新选择\n");break;}} while (input);system("cls");puts("成功退出");return 0;
}
c语言实现简单通讯录(仅代码)相关推荐
- C语言实现简单通讯录
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.分析问题 二.函数具体功能的实现 1.结构体的创建 2.对结构体进行初始化 3.增加联系人 4.find_by_n ...
- 数据结构(C语言版)——简单选择排序(代码版)
一.代码 #include <stdio.h> #include <stdlib.h>#define MAXSIZE 20 #define ERROR 0 #define OK ...
- C语言实现简单的五子棋代码
#define _CRT_SECURE_NO_WARNINGS // VS2013添加这个宏,关闭C4996报错 #include <stdio.h>#define N 16 // 定义棋 ...
- 用c语言实现简单的关机代码
//简易的关机代码,下面介绍两种方法,一种方法用goto 语句,一种方法用while循环 #include<stdio.h> #include<windows.h> #incl ...
- C语言——简易版通讯录完整代码
目录 一.Contact.h 二.Contact.c 三.test.c 一.Contact.h #pragma once #include <stdio.h> #include <s ...
- 用C语言编写简单的通讯录(大一课程作业)
用C语言编写简单的通讯录(大一课程作业) 该系统概述: 因本人只学习了C语言的基础部分,所以编写该系统时只使用了一个C文件.存储通讯录信息以txt文件方式保存. 系统设计: 显示主菜单主函数:int ...
- android运用 sqlite 实现简单的通讯录_大一新生作品:利用 C 语言实现quot;通讯录管理系统quot;,直言太简单...
说明: 本系统基于C语言实现班级通讯录管理系统,为大一时学习C语言刚入门所做的课程设计.功能包括增.删.查.改等,非常适合初学者练手.通讯录包括的个人信息有姓名.学号.性别.籍贯.政治面貌.手机号.Q ...
- c语言3级菜单_大一新生作品:利用 C 语言实现quot;通讯录管理系统quot;,直言太简单...
说明: 本系统基于C语言实现班级通讯录管理系统,为大一时学习C语言刚入门所做的课程设计.功能包括增.删.查.改等,非常适合初学者练手.通讯录包括的个人信息有姓名.学号.性别.籍贯.政治面貌.手机号.Q ...
- <C语言>简单表白代码小❤❤
这是一个简单的表白代码,运用了c语言的编译工具,因为很早之前百度来的,也不记得出处在哪里,注明:转载 #include <windows.h> //win头文件 #include<s ...
最新文章
- 在IDE中刷LeetCode,编码调试一体化,刷题效率直线up!
- java编程石头剪刀布图片_石头、剪刀、布!10分钟带你打开深度学习大门,代码已开源...
- 单独像对相对定向元素解析
- Java多线程为什么使用while循环来调用wait方法
- 诺基亚java闪退_回顾诺基亚N9:诺基亚手机颜值巅峰,却在发布7天后被“放弃”...
- 【下载】快速通过Python笔试?学大家一样先把LeetCode答案私藏了
- c++回调函数详解及实现(lambda)
- 3.9 使用标尺工具拉直倾斜的图片 [Ps教程]
- Webgl(ThreeJS)空间测量\测距功能(附工程文件)
- 自己不行就认为别人也不可能
- python:比较运算符(等于,小于,大于,不等于,大于等于,小于等于)的简单用法
- 企查查api接口批量操作实战
- mysql 双冒号,SQL中的双冒号(::)符号
- 从孙子兵法理解围棋大龙攻杀的要诀: 攻守双方口诀
- 图形学-二维图形的裁剪1.Cohen 2.Liang
- CF1005A Tanya and Stairways
- 如何在 Windows 中备份与恢复树莓派 SD 卡
- python不改变图片尺寸压缩到指定大小 1
- Python Mongodb 查询以及批量写、批量查
- java FUNCTION传入返回值模式简单记录