c语言:通讯录管理系统(文件版本)

这篇具有很好参考价值的文章主要介绍了c语言:通讯录管理系统(文件版本)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:本通讯录管理系统一共三个版本,除此文章以外还有如下俩个版本,大家可以根据需求自取:

基础增删查改功能版本:c语言:通讯录管理系统(增删查改)-CSDN博客

动态分配内存版本:c语言:通讯录管理系统(动态分配内存版)-CSDN博客

        本文是在基础的通讯录管理系统上进行改进(文末有完整代码,欢迎大家使用),如果对于基础的通讯录管理系统有什么不懂的地方,可以参考笔者的上一篇文章 

c语言:通讯录管理系统(文件版本),c语言及其进阶,c语言,开发语言,课程设计,c++,数据结构,经验分享

目录

一.非文件操作版本

头文件部分(Contact.h)

函数实现部分(Contact.cpp)

主函数部分(test.cpp)

二.文件的生成

选择何种方式写文件?

SaveContact

三.文件数据的读取

LoadContact

四.运行结果截图

五.完整代码 

头文件部分(Contact.h)

函数实现部分(Contact.cpp)

主函数部分(test.cpp)


        关于通讯录管理系统,笔者一共设计了3套,分别是最基础的版本动态管理内存版本文件操作版本,本文是在动态管理的通讯录管理系统上进行改进,如果对于普通的通讯录管理系统有什么不懂的地方,可以参考笔者的前俩篇文章,里面有详细的万字解读,大家也可以根据自己的需求提取完整代码: 

c语言:通讯录管理系统(增删查改)

c语言:通讯录管理系统(动态分配内存版)

一.非文件操作版本

这里我们给出不包含文件操作版本的代码,然后本文后续内容都是基于此进行改进

我们分为 3 个文件来设计:

  • Contact.h: 包含头文件的声明,对函数的声明,以及宏的申明
  • Contact.cpp: 通讯录管理系统中具体每一个函数的实现
  • test.cpp: 主函数,根据用户的选择进行调用相应的函数

 c语言:通讯录管理系统(文件版本),c语言及其进阶,c语言,开发语言,课程设计,c++,数据结构,经验分享

头文件部分(Contact.h)

#pragma once
#pragma once
#include<stdio.h>
#include<assert.h>
#include<string.h>
#include<stdlib.h>

#define Name_Max 20
#define Tel_Number 12
#define Sex_Max 5
#define Address_Max 30
#define Contact_Max 100
#define Contact_SZ 3

//联系人结构体
typedef struct PeopleInformation
{
	char name[Name_Max];
	char telnumber[Tel_Number];
	int age;
	char sex[Sex_Max];
	char address[Address_Max];
}PeoInfor;

//通讯录结构体
typedef struct Contact
{
	PeoInfor* data;//结构体数组存放联系人结构体
	int size;//记录当前通讯录中有多少个联系人
	int capacity;//记录当前存放的容量
}Contact;


//目录
void menu();

//初始化通讯录
void InitContact(Contact* cp);

//增加联系人
void AddContact(Contact* cp);

//删除联系人
void DelContact(Contact* cp);

//通过姓名进行查找联系人
int FindPeople(Contact* cp, char name[]);

//展示全部通讯录信息
void ShowContact(const Contact* cp);

//查询联系人
void SeachPeople(Contact* cp);

//修改联系人信息
void ModifyContact(Contact* cp);

//扩容
void CheckContact(Contact* cp);

//销毁通讯录
void DestoryContact(Contact* cp);

函数实现部分(Contact.cpp)

#define _CRT_SECURE_NO_WARNINGS 1
#include "Contact.h"

void menu()
{
	printf("\n");
	printf("-----------------------------\n");
	printf("---   1.添加联系人      -----\n");
	printf("---   2.删除联系人      -----\n");
	printf("---   3.查找联系人      -----\n");
	printf("---   4.修改联系人信息  -----\n");
	printf("---   5.显示全部信息    -----\n");
	printf("---   0.退出通讯录      -----\n");
	printf("-----------------------------\n");
}

//初始化通讯录
void InitContact(Contact* cp)
{
	//判断非空
	assert(cp);

	cp->size = 0;
	cp->capacity = Contact_SZ;
	cp->data =(PeoInfor*)calloc(cp->capacity, sizeof(PeoInfor));
	if (cp->data == NULL)
	{
		perror("InitContact->calloc");
		return;
	}
}

void CheckContact(Contact* cp)
{
	if (cp->size == cp->capacity)
	{
		PeoInfor* ptr = (PeoInfor*)realloc(cp->data, (cp->capacity + 2) * sizeof(PeoInfor));
		if (ptr != NULL)
		{
			cp->data = ptr;
			cp->capacity += 2;
			printf("增容成功\n");
		}
		else
		{
			perror("AddContact->realloc");
			return;
		}
	}
}

//增加联系人
void AddContact(Contact* cp)
{
	//判断非空
	assert(cp);

	//判断满后扩容
	CheckContact(cp);

	printf("请输入要添加的联系人的姓名:\n");
	scanf("%s", cp->data[cp->size].name);

	printf("请输入要添加的联系人的电话号:\n");
	scanf("%s", cp->data[cp->size].telnumber);

	printf("请输入要添加的联系人的年龄:\n");
	scanf("%d", &(cp->data[cp->size].age));

	printf("请输入要添加的联系人的性别:\n");
	scanf("%s", cp->data[cp->size].sex);

	printf("请输入要添加的联系人的住址:\n");
	scanf("%s", cp->data[cp->size].address);

	cp->size++;
	printf("添加成功\n");
}

//通过姓名进行查找联系人
int FindPeople(Contact* cp, char name[])
{
	assert(cp);
	for (int i = 0; i < cp->size; i++)
	{
		if (strcmp(cp->data[i].name, name) == 0)
		{
			return i;
		}
	}
	return -1;
}

//删除联系人
void DelContact(Contact* cp)
{
	assert(cp);
	char name[Name_Max];
	if (cp->size == 0)
	{
		printf("通讯录为空,无需删除\n");
		return;
	}
	printf("请输入选择删除的联系人的姓名:\n");
	scanf("%s", name);
	int ret = FindPeople(cp, name);
	if (ret == -1)
	{
		printf("要删除的联系人不存在\n");
		return;
	}
	for (int i = ret; i < cp->size - 1; i++)
	{
		cp->data[i] = cp->data[i + 1];
	}
	cp->size--;
	printf("删除成功\n");
}

//查询联系人
void SeachPeople(Contact* cp)
{
	assert(cp);
	char name[Name_Max];
	if (cp->size == 0)
	{
		printf("通讯录为空\n");
		return;
	}
	printf("请输入选择查找的联系人的姓名:\n");
	scanf("%s", name);
	int ret = FindPeople(cp, name);
	if (ret == -1)
	{
		printf("要查找的联系人不存在\n");
		return;
	}

	//名字  年龄  性别    电话    地址
	//xxx   xxx    xxx    xxx     xxx
	printf("%-10s%-5s%-5s%-12s%-30s\n", "名字", "年龄", "性别", "电话", "地址");
	//打印个人的信息
	printf("%-10s%-5d%-5s%-12s%-30s\n", cp->data[ret].name, cp->data[ret].age, cp->data[ret].sex, cp->data[ret].telnumber, cp->data[ret].address);
}

//展示全部通讯录信息
void ShowContact(const Contact* cp)
{
	assert(cp);
	if (cp->size == 0)
	{
		printf("通讯录为空\n");
		return;
	}
	//名字  年龄  性别    电话    地址
	//xxx   xxx    xxx    xxx     xxx
	printf("%-10s%-5s%-5s%-12s%-30s\n", "名字", "年龄", "性别", "电话", "地址");
	for (int i = 0; i < cp->size; i++)
	{
		//打印每个人的信息
		printf("%-10s%-5d%-5s%-12s%-30s\n", cp->data[i].name, cp->data[i].age, cp->data[i].sex, cp->data[i].telnumber, cp->data[i].address);
	}
}

//修改联系人信息
void ModifyContact(Contact* cp)
{
	assert(cp);
	char name[Name_Max];
	if (cp->size == 0)
	{
		printf("通讯录为空\n");
		return;
	}
	printf("请输入选择修改的联系人的姓名:\n");
	scanf("%s", name);
	int ret = FindPeople(cp, name);
	if (ret == -1)
	{
		printf("要修改的联系人信息不存在\n");
		return;
	}

	printf("请输入要修改的联系人的姓名:\n");
	scanf("%s", cp->data[ret].name);

	printf("请输入要修改的联系人的电话号:\n");
	scanf("%s", cp->data[ret].telnumber);

	printf("请输入要修改的联系人的年龄:\n");
	scanf("%d", &(cp->data[ret].age));

	printf("请输入要修改的联系人的性别:\n");
	scanf("%s", cp->data[ret].sex);

	printf("请输入要修改的联系人的住址:\n");
	scanf("%s", cp->data[ret].address);

	printf("修改成功\n");
}

//销毁通讯录
void DestoryContact(Contact* cp)
{
	free(cp->data);
	cp->data = NULL;
	cp->size = 0;
	cp->capacity = 0;
}

主函数部分(test.cpp)

#define _CRT_SECURE_NO_WARNINGS 1
#include "Contact.h"

//枚举,增加程序的可读性
enum options
{
	EXIT,
	ADD,
	DEL,
	SEACH,
	MODIFY,
	SHOW
};

int main()
{
	int input = 0;
	//创建通讯录
	Contact con;
	//初始化通讯录
	InitContact(&con);

	do
	{
		menu();
		printf("请输入你的选择: ");
		scanf("%d", &input);

		switch (input)
		{
			//增加联系人信息
		case ADD:
			AddContact(&con);
			break;
			//删除联系人信息
		case DEL:
			DelContact(&con);
			break;
			//查找某个联系人的信息
		case SEACH:
			SeachPeople(&con);
			break;
			//修改某个联系人的信息
		case MODIFY:
			ModifyContact(&con);
			break;
			//展示通讯录内的每一个联系人的信息
		case SHOW:
			ShowContact(&con);
			break;
			//退出通讯录管理系统
		case EXIT:
			DestoryContact(&con);
			printf("通讯录已退出\n");
			break;
			//预防非法输入
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (input);

	return 0;
}

二.文件的生成

        想要把通讯录里的数据保存在文件中,首先就得生成一个文件,但生成文件的思路应该注意,以下笔者给大家提供俩个思路:

  1. 写入一个数据就生成文件,如果文件已生成,那就写入文件
  2. 在用户使用完通讯录后一次性将所有数据写入

        大家可以思考,哪种思路更高效,很显然,频繁的打开,写入,关闭文件是不利于我们执行程序的,因此,我们选择第二条思路,当然第一条思路也是可行的,在某些特定的需求下,可能第一条思路还要更优秀一点,但是作为一般讲,我们还是希望程序运行所需的时间和空间越简单越好 

        因此,本文采取第二种生成文件的思路:在用户使用完通讯录后一次性将所有数据写入,也就是说,我们需要在用户使用完通讯录程序以后,选择退出通讯录的时候进行生成文件,并且将通讯录中的数据导入

因此,我们封装一个函数,来生成通讯录文件

//读取文件信息到通讯录
void LoadContact(Contact* cp);

选择何种方式写文件?

        我们的通讯录管理系统中,有字符串,有整形,还可能有浮点型,短整形,结构体类型等等复杂的数据类型,因此单一的某中写入方式必然是不在我们考虑范围内的,针对我们的需求,我们需要选择一个 “万金油” 的写入方式————二进制写入

        不管是整形,浮点型,字符串,我们使用二进制去读取写入都是通用的,因此后文中对通讯录文件的读取也是使用的二进制读取

SaveContact

我们可以这样设计:

        首先,我们先打开文件,如果打开失败,那就报错提醒,如果正确打开了,那我们就进行写入文件,使用一个循环,一共有多少个联系人信息,我们就写入多少次,每次写入一个联系人的信息,写入完成后关闭文件,并且把指针置为空,避免造成野指针的问题

//生成文件,保存通讯录中的数据
void SaveContact(Contact* cp)
{
	//打开文件
	FILE* pf = fopen("contact.txt", "wb");
	if (pf == NULL)
	{
		perror("SaveContact");
		return;
	}

	//写文件
	for (int i = 0; i < cp->size; i++)
	{
		fwrite(cp->data + i, sizeof(PeoInfor), 1, pf);
	}

	//关闭文件
	fclose(pf);
	pf = NULL;
}

三.文件数据的读取

        光有文件的生成是不够的,假如文件内部已经存了许多联系人的信息了,当我们打开通讯录管理系统的时候,这些数据也应该已经被读取了才合理

        因此,我们将文件数据的读取放在通讯录的初始化部分

我们封装一个函数来帮助我们实现这部分功能:

//读取文件信息到通讯录
void LoadContact(Contact* cp);

        当我们打开通讯录管理系统后,首先进行初步的初始化通讯录,然后我们将文件中的数据读取到里面

//初始化通讯录
void InitContact(Contact* cp)
{
	//判断非空
	assert(cp);

	//初步初始化
	cp->size = 0;
	cp->capacity = Contact_SZ;
	cp->data = (PeoInfor*)calloc(cp->capacity, sizeof(PeoInfor));
	if (cp->data == NULL)
	{
		perror("InitContact->calloc");
		return;
	}

	//读取文件信息到通讯录
	LoadContact(cp);
}

LoadContact

为了对应我们前面用二进制写入文件,这里我们就应该使用二进制读取文件

	//打开文件
	FILE* pf = fopen("contact.txt", "rb");
	if (pf == NULL)
	{
		perror("LoadContact");
		return;
	}

        我们构建一个结构体数组的临时变量我们先将数据从文件读出来一个,然后再判断通讯录是否已经满了,如果满了,那就先扩容,然后再把临时变量中的数据放入通讯录中,如果没有满,那就直接放入通讯录 

//读取文件信息到通讯录
void LoadContact(Contact* cp)
{
	//打开文件
	FILE* pf = fopen("contact.txt", "rb");
	if (pf == NULL)
	{
		perror("LoadContact");
		return;
	}

	//读取文件
	PeoInfor temp = { 0 };
	while (fread(&temp, sizeof(PeoInfor), 1, pf))
	{
		CheckContact(cp);
		cp->data[cp->size] = temp;
		cp->size++;
	}
}

其中判断扩容函数如下:

//检查扩容
void CheckContact(Contact* cp)
{
	if (cp->size == cp->capacity)
	{
		PeoInfor* ptr = (PeoInfor*)realloc(cp->data, (cp->capacity + 2) * sizeof(PeoInfor));
		if (ptr != NULL)
		{
			cp->data = ptr;
			cp->capacity += 2;
			printf("增容成功\n");
		}
		else
		{
			perror("AddContact->realloc");
			return;
		}
	}
}

四.运行结果截图

我们先输入4个人的信息,然后退出程序

c语言:通讯录管理系统(文件版本),c语言及其进阶,c语言,开发语言,课程设计,c++,数据结构,经验分享

        观察文件,因为我们使用的是二进制保存,而记事本使用的是 UTF-8 的格式,故而这里无法直观看到信息,信息相当于被加密了,但是可以确定的是我们确实是将数据保存下来了

c语言:通讯录管理系统(文件版本),c语言及其进阶,c语言,开发语言,课程设计,c++,数据结构,经验分享

然后我们重新再打开一遍程序,可以看见,数据一开始就增容成功读取到了

c语言:通讯录管理系统(文件版本),c语言及其进阶,c语言,开发语言,课程设计,c++,数据结构,经验分享

后续再进行增删查改等操作也是没有影响的

c语言:通讯录管理系统(文件版本),c语言及其进阶,c语言,开发语言,课程设计,c++,数据结构,经验分享


五.完整代码 

头文件部分(Contact.h)

#pragma once
#include<stdio.h>
#include<assert.h>
#include<string.h>
#include<stdlib.h>

#define Name_Max 20
#define Tel_Number 12
#define Sex_Max 5
#define Address_Max 30
#define Contact_Max 100
#define Contact_SZ 3

//联系人结构体
typedef struct PeopleInformation
{
	char name[Name_Max];
	char telnumber[Tel_Number];
	int age;
	char sex[Sex_Max];
	char address[Address_Max];
}PeoInfor;

//通讯录结构体
typedef struct Contact
{
	PeoInfor* data;//结构体数组存放联系人结构体
	int size;//记录当前通讯录中有多少个联系人
	int capacity;//记录当前存放的容量
}Contact;


//目录
void menu();

//初始化通讯录
void InitContact(Contact* cp);

//增加联系人
void AddContact(Contact* cp);

//删除联系人
void DelContact(Contact* cp);

//通过姓名进行查找联系人
int FindPeople(Contact* cp, char name[]);

//展示全部通讯录信息
void ShowContact(const Contact* cp);

//查询联系人
void SeachPeople(Contact* cp);

//修改联系人信息
void ModifyContact(Contact* cp);

//jia扩容
void CheckContact(Contact* cp);

//销毁通讯录
void DestoryContact(Contact* cp);

//生成文件,保存通讯录中的数据
void SaveContact(Contact* cp);

//读取文件信息到通讯录
void LoadContact(Contact* cp);

函数实现部分(Contact.cpp)

#define _CRT_SECURE_NO_WARNINGS 1
#include "Contact.h"

void menu()
{
	printf("\n");
	printf("-----------------------------\n");
	printf("---   1.添加联系人      -----\n");
	printf("---   2.删除联系人      -----\n");
	printf("---   3.查找联系人      -----\n");
	printf("---   4.修改联系人信息  -----\n");
	printf("---   5.显示全部信息    -----\n");
	printf("---   0.退出通讯录      -----\n");
	printf("-----------------------------\n");
}


//读取文件信息到通讯录
void LoadContact(Contact* cp)
{
	//打开文件
	FILE* pf = fopen("contact.txt", "rb");
	if (pf == NULL)
	{
		perror("LoadContact");
		return;
	}

	//读取文件
	PeoInfor temp = { 0 };
	while (fread(&temp, sizeof(PeoInfor), 1, pf))
	{
		CheckContact(cp);
		cp->data[cp->size] = temp;
		cp->size++;
	}
}

//初始化通讯录
void InitContact(Contact* cp)
{
	//判断非空
	assert(cp);

	//初步初始化
	cp->size = 0;
	cp->capacity = Contact_SZ;
	cp->data = (PeoInfor*)calloc(cp->capacity, sizeof(PeoInfor));
	if (cp->data == NULL)
	{
		perror("InitContact->calloc");
		return;
	}

	//读取文件信息到通讯录
	LoadContact(cp);
}


//检查扩容
void CheckContact(Contact* cp)
{
	if (cp->size == cp->capacity)
	{
		PeoInfor* ptr = (PeoInfor*)realloc(cp->data, (cp->capacity + 2) * sizeof(PeoInfor));
		if (ptr != NULL)
		{
			cp->data = ptr;
			cp->capacity += 2;
			printf("增容成功\n");
		}
		else
		{
			perror("AddContact->realloc");
			return;
		}
	}
}

//增加联系人
void AddContact(Contact* cp)
{
	//判断非空
	assert(cp);

	//判断满后扩容
	CheckContact(cp);

	printf("请输入要添加的联系人的姓名:\n");
	scanf("%s", cp->data[cp->size].name);

	printf("请输入要添加的联系人的电话号:\n");
	scanf("%s", cp->data[cp->size].telnumber);

	printf("请输入要添加的联系人的年龄:\n");
	scanf("%d", &(cp->data[cp->size].age));

	printf("请输入要添加的联系人的性别:\n");
	scanf("%s", cp->data[cp->size].sex);

	printf("请输入要添加的联系人的住址:\n");
	scanf("%s", cp->data[cp->size].address);

	cp->size++;
	printf("添加成功\n");
}

//通过姓名进行查找联系人
int FindPeople(Contact* cp, char name[])
{
	assert(cp);
	for (int i = 0; i < cp->size; i++)
	{
		if (strcmp(cp->data[i].name, name) == 0)
		{
			return i;
		}
	}
	return -1;
}

//删除联系人
void DelContact(Contact* cp)
{
	assert(cp);
	char name[Name_Max];
	if (cp->size == 0)
	{
		printf("通讯录为空,无需删除\n");
		return;
	}
	printf("请输入选择删除的联系人的姓名:\n");
	scanf("%s", name);
	int ret = FindPeople(cp, name);
	if (ret == -1)
	{
		printf("要删除的联系人不存在\n");
		return;
	}
	for (int i = ret; i < cp->size - 1; i++)
	{
		cp->data[i] = cp->data[i + 1];
	}
	cp->size--;
	printf("删除成功\n");
}

//查询联系人
void SeachPeople(Contact* cp)
{
	assert(cp);
	char name[Name_Max];
	if (cp->size == 0)
	{
		printf("通讯录为空\n");
		return;
	}
	printf("请输入选择查找的联系人的姓名:\n");
	scanf("%s", name);
	int ret = FindPeople(cp, name);
	if (ret == -1)
	{
		printf("要查找的联系人不存在\n");
		return;
	}

	//名字  年龄  性别    电话    地址
	//xxx   xxx    xxx    xxx     xxx
	printf("%-10s%-5s%-5s%-12s%-30s\n", "名字", "年龄", "性别", "电话", "地址");
	//打印个人的信息
	printf("%-10s%-5d%-5s%-12s%-30s\n", cp->data[ret].name, cp->data[ret].age, cp->data[ret].sex, cp->data[ret].telnumber, cp->data[ret].address);
}

//展示全部通讯录信息
void ShowContact(const Contact* cp)
{
	assert(cp);
	if (cp->size == 0)
	{
		printf("通讯录为空\n");
		return;
	}
	//名字  年龄  性别    电话    地址
	//xxx   xxx    xxx    xxx     xxx
	printf("%-10s%-5s%-5s%-12s%-30s\n", "名字", "年龄", "性别", "电话", "地址");
	for (int i = 0; i < cp->size; i++)
	{
		//打印每个人的信息
		printf("%-10s%-5d%-5s%-12s%-30s\n", cp->data[i].name, cp->data[i].age, cp->data[i].sex, cp->data[i].telnumber, cp->data[i].address);
	}
}

//修改联系人信息
void ModifyContact(Contact* cp)
{
	assert(cp);
	char name[Name_Max];
	if (cp->size == 0)
	{
		printf("通讯录为空\n");
		return;
	}
	printf("请输入选择修改的联系人的姓名:\n");
	scanf("%s", name);
	int ret = FindPeople(cp, name);
	if (ret == -1)
	{
		printf("要修改的联系人信息不存在\n");
		return;
	}

	printf("请输入要修改的联系人的姓名:\n");
	scanf("%s", cp->data[ret].name);

	printf("请输入要修改的联系人的电话号:\n");
	scanf("%s", cp->data[ret].telnumber);

	printf("请输入要修改的联系人的年龄:\n");
	scanf("%d", &(cp->data[ret].age));

	printf("请输入要修改的联系人的性别:\n");
	scanf("%s", cp->data[ret].sex);

	printf("请输入要修改的联系人的住址:\n");
	scanf("%s", cp->data[ret].address);

	printf("修改成功\n");
}

//销毁通讯录
void DestoryContact(Contact* cp)
{
	free(cp->data);
	cp->data = NULL;
	cp->size = 0;
	cp->capacity = 0;
}


//生成文件,保存通讯录中的数据
void SaveContact(Contact* cp)
{
	//打开文件
	FILE* pf = fopen("contact.txt", "wb");
	if (pf == NULL)
	{
		perror("SaveContact");
		return;
	}

	//写文件
	for (int i = 0; i < cp->size; i++)
	{
		fwrite(cp->data + i, sizeof(PeoInfor), 1, pf);
	}

	//关闭文件
	fclose(pf);
	pf = NULL;
}

主函数部分(test.cpp)

#define _CRT_SECURE_NO_WARNINGS 1
#include "Contact.h"

//枚举,增加程序的可读性
enum options
{
	EXIT,
	ADD,
	DEL,
	SEACH,
	MODIFY,
	SHOW
};

int main()
{
	int input = 0;
	//创建通讯录
	Contact con;
	//初始化通讯录
	InitContact(&con);

	do
	{
		menu();
		printf("请输入你的选择: ");
		scanf("%d", &input);

		switch (input)
		{
			//增加联系人信息
		case ADD:
			AddContact(&con);
			break;
			//删除联系人信息
		case DEL:
			DelContact(&con);
			break;
			//查找某个联系人的信息
		case SEACH:
			SeachPeople(&con);
			break;
			//修改某个联系人的信息
		case MODIFY:
			ModifyContact(&con);
			break;
			//展示通讯录内的每一个联系人的信息
		case SHOW:
			ShowContact(&con);
			break;
			//退出通讯录管理系统
		case EXIT:
			SaveContact(&con);
			DestoryContact(&con);
			printf("通讯录已退出\n");
			break;
			//预防非法输入
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (input);

	return 0;
}



本次分享就到此为止了,感谢您的支持,如有错误,欢迎积极指正文章来源地址https://www.toymoban.com/news/detail-734011.html

到了这里,关于c语言:通讯录管理系统(文件版本)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言课程设计_通讯录管理系统

    以本班同学的具体数据为背景,设计一个本班同学通讯录。 1)  通讯录编辑(添加、删除)。 2)  按不同的项进行查找。 3)  对已存在的通讯录按不同的项排序。 4)  将通讯录写入文件 5)从文件读入通讯录 备注:通讯录至少应该有以下数据项: 姓名,地址,电话,邮编,

    2024年02月06日
    浏览(52)
  • 【C语言】通讯录管理系统(附图解、源码)

    目录 一.前言 二.准备工作 三.ContactTest.c测试区 1.菜单 2.选择功能 四.Contact.h头文件引用区 1.通讯录成员结构体函数的创建 2.实现功能函数的创建 五.ContactRealize.c功能实现区 1.初始化成员信息 2.查找目标成员位置 3.增加联系人 4.删除指定联系人 5.查找指定联系人 6.修改指定联系

    2024年02月03日
    浏览(47)
  • c语言:通讯录管理系统(增删查改)

      前言: 本通讯录管理系统一共三个版本,除此文章以外还有如下俩个版本,大家可以根据需求自取: 动态分配内测版 :c语言:通讯录管理系统(动态分配内存版)-CSDN博客 文件版本 :c语言:通讯录管理系统(文件版本)-CSDN博客 目录 一.大体的框架 主函数初步设计 联系

    2024年02月08日
    浏览(48)
  • c语言:通讯录管理系统(动态分配内存版)

    前言: 本通讯录管理系统一共三个版本,除此文章以外还有如下俩个版本,大家可以根据需求自取: 基础增删查改功能版本 :c语言:通讯录管理系统(增删查改)_luming.02的博客-CSDN博客 文件保存版本 :c语言:通讯录管理系统(文件版本)-CSDN博客         本文是在基

    2024年02月08日
    浏览(60)
  • Python学生通讯录管理系统案例(文件版)

    目录 1.打印输出学生通讯录管理系统的菜单 2.接收用户从键盘输入的选择序号 3.根据输入的选择序号,判断并执行不同的功能 注意:本例中,要想保存所以学生的通讯信息,需要用到字典。 1.打印输出学生通讯录管理系统的菜单 首先我们先定义一个showMenu()函数,实现打印输

    2024年02月08日
    浏览(48)
  • C语言用链表实现通讯录管理系统

    目录 总体思路 具体代码 编译通过 总体代码 一、创建一个结构体保存通讯录信息。 二、构建链表,并存于文件中。 三、实现链表结点的增加、删除、查询、输出。 一、创建一个结构体,保存信息。 二、用尾插法创建一个链表,并让用户选择是否输入数据。 三、将链表数据

    2024年02月02日
    浏览(52)
  • C语言课程设计|通讯录管理系统(含完整代码)

    目录 菜单功能 录入联系人信息功能 查看系统中全部信息功能 查看单个信息功能 删除全部信息功能 删除单个信息功能 修改信息功能 完整代码 在长达一个多月的学习过程中,终于将C语言学完,因此专门写一个C语言课程设计来检验这一个多月的学习成果,由于写的比较急,

    2024年02月01日
    浏览(46)
  • 精通C语言:打造高效便捷的通讯录管理系统

    ✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C语言项目 贝蒂的主页:Betty‘s blog 在我们大致学习完C语言之后,我们就可以利用目前所学的知识去做一些有意思的项目,而今天贝蒂就带大家完成一个通讯录的简易实现, 本章你可能需要

    2024年02月19日
    浏览(49)
  • 【C语言】通讯录管理系统(保姆级教程+内含源码)

    目录 C系列文章目录 前言 一,模块化编程 二,系统框架构建 1.成员信息的创建 2.菜单实现 3.系统功能声明 三、系统功能实现 1.初始化通讯录 2.增加联系人 3.显示所有联系人 4.根据姓名查找位置 5.删除指定联系人 6.查找指定联系人 7.修改指定联系人 8.清空所有联系人 9.按照名

    2024年02月08日
    浏览(42)
  • 使用C语言实现通讯录管理系统1.0版本(持续更新)

    本篇文章会教大家用C语言实现一个通讯录系统,此程序将会持续更新优化。觉得博主写的不错的朋友可以关注点赞收藏一波,支持一下博主,感谢大家! 此通讯录系统可以存储1000个联系人的:姓名,性别,年龄,电话号码,家庭地址。 主要实现的系统功能有:添加联系人,

    2024年02月03日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包