IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言——三种方式实现学生信息管理 -> 正文阅读

[C++知识库]C语言——三种方式实现学生信息管理

目录

方式一 静态实现

菜单打印函数?

初始化学生信息

增加学生信息?

删除学生信息?

查找学生信息?

修改学生信息?

显示学生信息?

对学生信息排序?

test.c?

contact.c?

contact.h?

方式二 动态实现?

菜单打印函数?

初始化函数?

?增加学生信息

删除信息函数?

查找个人信息?

修改信息函数?

展示信息函数?

信息排序函数?

释放动态开辟的内存?

方式三 文件操作实现?

信息保存函数?

初始化函数?

增加信息函数?

删除信息函数?

查找信息函数

修改信息函数?

展示信息函数?

信息排序函数?

释放动态开辟的内存?

test.c?

contact.c?

contact.h?

?

该程序可对100个学生信息实现增加,删除,查找,修改,展示,排序这六个功能??

信息管理系统

方式一 静态实现

菜单打印函数?

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");
}

初始化学生信息

struct People
{
	char name[20];
	int age;
	char sex[5];
	char tele[12];
	char addr[20];
};
struct Con
{
	struct People data[100];
	int count;
};

?先建立俩个结构体,一个用来存放每个用户的信息,另一个存放所有人的信息,对100个学生信息全部初始化为0

void Itni(struct Con* pc)
{
	pc->count = 0;
	memset(pc->data, 0, sizeof(struct People));
}

增加学生信息?

void Add(struct Con* pc)
{
	if (pc->count == 100)
	{
		printf("通讯录已满,无法添加\n");
		return;
	}
	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].tele);
	printf("请输入地址>:");
	scanf("%s", pc->data[pc->count].addr);
	pc->count++;
	printf("增加成功\n");
}

?先判断通讯录是否满了,若没满则增加

删除学生信息?

int Fine_by_name(char *name, struct Con* pc)
{
	int i = 0;
	for (i = 0; i < pc->count; i++)
	{
		if (strcmp(name, pc->data[i].name) == 0)
			return i;
	}
	return -1;
}
void  Del(struct Con* pc)
{
	if (pc->count == 0)
	{
		printf("通讯录为空,无法删除\n");
		return;
	}
	char arr[20];
	printf("请输入要删除人的姓名>:");
	scanf("%s", arr);
	int k=Fine_by_name(arr,pc);
	if (k != -1)
	{
		int i = k;
		for (i = k; i < pc->count - 1; i++)
		{
			pc->data[i] = pc->data[i + 1];
		}
		pc->count--;
		printf("删除成功\n");
	}
	else
		printf("不存在该用户\n");
}

?删除前要先判断通讯录是否为空,若不为空,则先找到该学生信息,然后把后面的数据向前挪一个就行

查找学生信息?

int Fine_by_name(char *name, struct Con* pc)
{
	int i = 0;
	for (i = 0; i < pc->count; i++)
	{
		if (strcmp(name, pc->data[i].name) == 0)
			return i;
	}
	return -1;
}
void Search(struct Con* pc)
{
	if (pc->count == 0)
	{
		printf("通讯录为空,无法查找\n");
		return;
	}
	char arr[20];
	printf("请输入要查找人的姓名>:");
	scanf("%s", arr);
	int k = Fine_by_name(arr, pc);
	if (k != -1)
	{
		printf("%20s\t%5s\t%5s\t%12s\t%30s\n", "名字", "年龄", "性别", "电话", "住址");
		printf("%20s\t%3d\t%5s\t%12s\t%30s\n", pc->data[k].name, pc->data[k].age, pc->data[k].sex, pc->data[k].tele, pc->data[k].addr);
	}
	else
		printf("不存在该用户\n");
}

?查找前也要判断通讯录是否为空,若不为空则通过姓名来进行查找,查找到该学生信息之后进行打印

修改学生信息?

int Fine_by_name(char *name, struct Con* pc)
{
	int i = 0;
	for (i = 0; i < pc->count; i++)
	{
		if (strcmp(name, pc->data[i].name) == 0)
			return i;
	}
	return -1;
}
void Modify(struct Con* pc)
{
	if (pc->count == 0)
	{
		printf("通讯录为空,无法修改\n");
		return;
	}
	char arr[20];
	printf("请输入要修改人的姓名>:");
	scanf("%s", arr);
	int k = Fine_by_name(arr, pc);
	if (k != -1)
	{
		printf("请输入姓名>:");
		scanf("%s", pc->data[k].name);
		printf("请输入年龄>:");
		scanf("%d", &(pc->data[k].age));
		printf("请输入性别>:");
		scanf("%s", pc->data[k].sex);
		printf("请输入电话>:");
		scanf("%s", pc->data[k].tele);
		printf("请输入地址>:");
		scanf("%s", pc->data[k].addr);
	}
	else
		printf("不存在该用户\n");
}

?先判断是否为空,若为空则退出,不为空则通过名字找到该学生,找到之后进行修改

显示学生信息?

void Show(struct Con* pc)
{
	int i = 0;
	printf("%20s\t%5s\t%5s\t%12s\t%30s\n", "名字", "年龄", "性别", "电话", "住址");
	for (i = 0; i < pc->count; i++)
	{
		printf("%20s\t%3d\t%5s\t%12s\t%30s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);
	}
}

?直接对学生信息进行打印

对学生信息排序?

char cmp(void* e1, void* e2)
{
	return *((char*)e1) - *((char*)e2);
}
void Sort(struct Con* pc)
{
	qsort(pc->data, pc->count, sizeof(struct People), cmp);
	printf("排序成功\n");
}

?用快排,对学生姓名进行排序

test.c?

#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");
}
int main()
{

	int input;
	struct Con infor;
	Itni(&infor);
	do
	{
		menu();
		printf("请选择>:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			Add(&infor);
			break;
		case 2:
			Del(&infor);
			break;
		case 3:
			Search(&infor);
			break;
		case 4:
			Modify(&infor);
			break;
		case 5:
			Show(&infor);
			break;
		case 6:
			Sort(&infor);
			break;
		case 0:
			printf("退出\n");
			break;
		}
	} while (input);
	return 0;
}

contact.c?

#include"contact.h"
void Itni(struct Con* pc)
{
	pc->count = 0;
	memset(pc->data, 0, sizeof(struct People));
}
void Add(struct Con* pc)
{
	if (pc->count == 100)
	{
		printf("通讯录已满,无法添加\n");
		return;
	}
	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].tele);
	printf("请输入地址>:");
	scanf("%s", pc->data[pc->count].addr);
	pc->count++;
	printf("增加成功\n");
}
void Show(struct Con* pc)
{
	int i = 0;
	printf("%20s\t%5s\t%5s\t%12s\t%30s\n", "名字", "年龄", "性别", "电话", "住址");
	for (i = 0; i < pc->count; i++)
	{
		printf("%20s\t%3d\t%5s\t%12s\t%30s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);
	}
}
int Fine_by_name(char *name, struct Con* pc)
{
	int i = 0;
	for (i = 0; i < pc->count; i++)
	{
		if (strcmp(name, pc->data[i].name) == 0)
			return i;
	}
	return -1;
}
void  Del(struct Con* pc)
{
	if (pc->count == 0)
	{
		printf("通讯录为空,无法删除\n");
		return;
	}
	char arr[20];
	printf("请输入要删除人的姓名>:");
	scanf("%s", arr);
	int k=Fine_by_name(arr,pc);
	if (k != -1)
	{
		int i = k;
		for (i = k; i < pc->count - 1; i++)
		{
			pc->data[i] = pc->data[i + 1];
		}
		pc->count--;
		printf("删除成功\n");
	}
	else
		printf("不存在该用户\n");
}
void Search(struct Con* pc)
{
	if (pc->count == 0)
	{
		printf("通讯录为空,无法查找\n");
		return;
	}
	char arr[20];
	printf("请输入要查找人的姓名>:");
	scanf("%s", arr);
	int k = Fine_by_name(arr, pc);
	if (k != -1)
	{
		printf("%20s\t%5s\t%5s\t%12s\t%30s\n", "名字", "年龄", "性别", "电话", "住址");
		printf("%20s\t%3d\t%5s\t%12s\t%30s\n", pc->data[k].name, pc->data[k].age, pc->data[k].sex, pc->data[k].tele, pc->data[k].addr);
	}
	else
		printf("不存在该用户\n");
}
void Modify(struct Con* pc)
{
	if (pc->count == 0)
	{
		printf("通讯录为空,无法修改\n");
		return;
	}
	char arr[20];
	printf("请输入要修改人的姓名>:");
	scanf("%s", arr);
	int k = Fine_by_name(arr, pc);
	if (k != -1)
	{
		printf("请输入姓名>:");
		scanf("%s", pc->data[k].name);
		printf("请输入年龄>:");
		scanf("%d", &(pc->data[k].age));
		printf("请输入性别>:");
		scanf("%s", pc->data[k].sex);
		printf("请输入电话>:");
		scanf("%s", pc->data[k].tele);
		printf("请输入地址>:");
		scanf("%s", pc->data[k].addr);
	}
	else
		printf("不存在该用户\n");
}
char cmp(void* e1, void* e2)
{
	return *((char*)e1) - *((char*)e2);
}
void Sort(struct Con* pc)
{
	qsort(pc->data, pc->count, sizeof(struct People), cmp);
	printf("排序成功\n");
}

contact.h?

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct People
{
	char name[20];
	int age;
	char sex[5];
	char tele[12];
	char addr[20];
};
struct Con
{
	struct People data[100];
	int count;
};
void Itni(struct Con* pc);
void Add(struct Con* pc);
void Show(struct Con* pc);
void  Del(struct Con* pc);
void Search(struct Con* pc);
void Modify(struct Con* pc);
void Sort(struct Con* pc);

方式二 动态实现?

一开始开辟3个人的容量,当容量满时,若还要增加信息,则每次增加2位容量?

菜单打印函数?

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");
}

初始化函数?

struct People
{
	char name[20];
	int age;
	char sex[5];
	char tele[12];
	char addr[20];
};
struct Con
{
	struct People *data;
	int count;
	int capacity;
};

?静态实现时,初始化之前我们给第二个结构体里面,创建了100个数组,用来存个人信息,但动态开辟就不需要这么做了,我们在初始化的时候在开辟空间,所以Con结构体内部需要进行修改,设置一个指针指向个人信息

void Itni(struct Con* pc)
{
	pc->count = 0;
	pc->data=(struct People*)malloc(sizeof(struct People)*3);
	if (pc->data == NULL)
	{
		printf("%s", perror);
	}
	pc->capacity = 3;
}

先用动态开辟3个人信息的空间,然后容量设置为3,因为此时只是开辟了空间,并没有存放个人信息,所以count是0,conut是用来统计存放人数的

?增加学生信息

void Check(struct Con* pc)
{
	if (pc->capacity == pc->count)
	{
		struct Con* str = (struct Con*)realloc(pc->data, sizeof(struct People) * (pc->capacity + 2));
			if (str == NULL)
			{
				printf("%s", strerror(errno));
			}
			else
			{
				pc->data = str;
			}
			pc->capacity += 3;
			printf("增容成功\n");
	}
}
void Add(struct Con* pc)
{
	Check(pc);
	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].tele);
	printf("请输入地址>:");
	scanf("%s", pc->data[pc->count].addr);
	pc->count++;
	printf("增加成功\n");
}

?增加之前,我们应先判断count是否小于capacity,也就是判断当前容量满没满,若容量满了,我们开辟2个人的空间。然后输入信息

删除信息函数?

void  Del(struct Con* pc)
{
	if (pc->count == 0)
	{
		printf("通讯录为空,无法删除\n");
		return;
	}
	char arr[20];
	printf("请输入要删除人的姓名>:");
	scanf("%s", arr);
	int k=Fine_by_name(arr,pc);
	if (k != -1)
	{
		int i = k;
		for (i = k; i < pc->count - 1; i++)
		{
			pc->data[i] = pc->data[i + 1];
		}
		pc->count--;
		printf("删除成功\n");
	}
	else
		printf("不存在该用户\n");
}

查找个人信息?

void Search(struct Con* pc)
{
	if (pc->count == 0)
	{
		printf("通讯录为空,无法查找\n");
		return;
	}
	char arr[20];
	printf("请输入要查找人的姓名>:");
	scanf("%s", arr);
	int k = Fine_by_name(arr, pc);
	if (k != -1)
	{
		printf("%20s\t%5s\t%5s\t%12s\t%30s\n", "名字", "年龄", "性别", "电话", "住址");
		printf("%20s\t%3d\t%5s\t%12s\t%30s\n", pc->data[k].name, pc->data[k].age, pc->data[k].sex, pc->data[k].tele, pc->data[k].addr);
	}
	else
		printf("不存在该用户\n");
}

修改信息函数?

void Modify(struct Con* pc)
{
	if (pc->count == 0)
	{
		printf("通讯录为空,无法修改\n");
		return;
	}
	char arr[20];
	printf("请输入要修改人的姓名>:");
	scanf("%s", arr);
	int k = Fine_by_name(arr, pc);
	if (k != -1)
	{
		printf("请输入姓名>:");
		scanf("%s", pc->data[k].name);
		printf("请输入年龄>:");
		scanf("%d", &(pc->data[k].age));
		printf("请输入性别>:");
		scanf("%s", pc->data[k].sex);
		printf("请输入电话>:");
		scanf("%s", pc->data[k].tele);
		printf("请输入地址>:");
		scanf("%s", pc->data[k].addr);
	}
	else
		printf("不存在该用户\n");
}

展示信息函数?

void Show(struct Con* pc)
{
	int i = 0;
	printf("%20s\t%5s\t%5s\t%12s\t%30s\n", "名字", "年龄", "性别", "电话", "住址");
	for (i = 0; i < pc->count; i++)
	{
		printf("%20s\t%3d\t%5s\t%12s\t%30s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);
	}
}

信息排序函数?

char cmp(void* e1, void* e2)
{
	return *((char*)e1) - *((char*)e2);
}
void Sort(struct Con* pc)
{
	qsort(pc->data, pc->count, sizeof(struct People), cmp);
	printf("排序成功\n");
}

释放动态开辟的内存?

void Destory(struct Con* pc)
{
	free(pc->data);
	pc->data= NULL;
}

方式三 文件操作实现?

?实现数据的保存和程序再次运行的时候对上一次数据的读取

信息保存函数?

void Save(struct Con* pc)
{
	FILE* Pfwrite = fopen("contact.txt", "wb");
	if (Pfwrite == NULL)
	{
		return 1;
	}
	int i = 0;
	for (i = 0; i < pc->count; i++)
	{
		fwrite(pc->data+i, sizeof(struct People), 1,  Pfwrite);
	}
	fclose(Pfwrite);
	printf("保存成功\n");
}

初始化函数?

void Loadcontact(struct Con* pc)
{
	FILE* Pfread =fopen ("contact.txt", "rb");
	if (Pfread == NULL)
	{
		return 1;
	}
	struct People tmp = { 0 };
		while (fread(&tmp, sizeof(struct People),1, Pfread) == 1)
		{
			Check(pc);
			pc->data[pc->count] = tmp;
			pc->count++;
		}
		fclose(Pfread);
		Pfread = NULL;
}
void Itni(struct Con* pc)
{
	pc->count = 0;
	pc->data=(struct People*)malloc(sizeof(struct People)*3);
	if (pc->data == NULL)
	{
		printf("%s", strerror(errno));
	}
	pc->capacity = 3;
	Loadcontact(pc);
}

这里初始化的时候要打开文件,读取上一次的数据?

增加信息函数?

void Add(struct Con* pc)
{
	Check(pc);
	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].tele);
	printf("请输入地址>:");
	scanf("%s", pc->data[pc->count].addr);
	pc->count++;
	printf("增加成功\n");
}

删除信息函数?

void  Del(struct Con* pc)
{
	if (pc->count == 0)
	{
		printf("通讯录为空,无法删除\n");
		return;
	}
	char arr[20];
	printf("请输入要删除人的姓名>:");
	scanf("%s", arr);
	int k=Fine_by_name(arr,pc);
	if (k != -1)
	{
		int i = k;
		for (i = k; i < pc->count - 1; i++)
		{
			pc->data[i] = pc->data[i + 1];
		}
		pc->count--;
		printf("删除成功\n");
	}
	else
		printf("不存在该用户\n");
}

查找信息函数

void Search(struct Con* pc)
{
	if (pc->count == 0)
	{
		printf("通讯录为空,无法查找\n");
		return;
	}
	char arr[20];
	printf("请输入要查找人的姓名>:");
	scanf("%s", arr);
	int k = Fine_by_name(arr, pc);
	if (k != -1)
	{
		printf("%20s\t%5s\t%5s\t%12s\t%30s\n", "名字", "年龄", "性别", "电话", "住址");
		printf("%20s\t%3d\t%5s\t%12s\t%30s\n", pc->data[k].name, pc->data[k].age, pc->data[k].sex, pc->data[k].tele, pc->data[k].addr);
	}
	else
		printf("不存在该用户\n");
}

修改信息函数?

void Modify(struct Con* pc)
{
	if (pc->count == 0)
	{
		printf("通讯录为空,无法修改\n");
		return;
	}
	char arr[20];
	printf("请输入要修改人的姓名>:");
	scanf("%s", arr);
	int k = Fine_by_name(arr, pc);
	if (k != -1)
	{
		printf("请输入姓名>:");
		scanf("%s", pc->data[k].name);
		printf("请输入年龄>:");
		scanf("%d", &(pc->data[k].age));
		printf("请输入性别>:");
		scanf("%s", pc->data[k].sex);
		printf("请输入电话>:");
		scanf("%s", pc->data[k].tele);
		printf("请输入地址>:");
		scanf("%s", pc->data[k].addr);
	}
	else
		printf("不存在该用户\n");
}

展示信息函数?

void Show(struct Con* pc)
{
	int i = 0;
	printf("%20s\t%5s\t%5s\t%12s\t%30s\n", "名字", "年龄", "性别", "电话", "住址");
	for (i = 0; i < pc->count; i++)
	{
		printf("%20s\t%3d\t%5s\t%12s\t%30s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);
	}
}

信息排序函数?

char cmp(void* e1, void* e2)
{
	return *((char*)e1) - *((char*)e2);
}
void Sort(struct Con* pc)
{
	qsort(pc->data, pc->count, sizeof(struct People), cmp);
	printf("排序成功\n");
}

释放动态开辟的内存?

void Destory(struct Con* pc)
{
	free(pc->data);
	pc->data= NULL;
}

test.c?

#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");
}
int main()
{

	int input;
	struct Con infor;
	Itni(&infor);
	do
	{
		menu();
		printf("请选择>:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			Add(&infor);
			break;
		case 2:
			Del(&infor);
			break;
		case 3:
			Search(&infor);
			break;
		case 4:
			Modify(&infor);
			break;
		case 5:
			Show(&infor);
			break;
		case 6:
			Sort(&infor);
			break;
		case 0:
			Save(&infor);
			Destory(&infor);
			printf("退出\n");
			break;
		}
	} while (input);
	return 0;
}

contact.c?

#include"contact.h"
void Check(struct Con* pc)
{
	if (pc->capacity == pc->count)
	{
		struct Con* str = (struct Con*)realloc(pc->data, sizeof(struct People) * (pc->capacity + 2));
		if (str == NULL)
		{
			printf("%s", strerror(errno));
		}
		else
		{
			pc->data = str;
			pc->capacity = pc->capacity +2;
			printf("增容成功\n");
		}
	}
}
void Loadcontact(struct Con* pc)
{
	FILE* Pfread =fopen ("contact.txt", "rb");
	if (Pfread == NULL)
	{
		return 1;
	}
	struct People tmp = { 0 };
		while (fread(&tmp, sizeof(struct People),1, Pfread) == 1)
		{
			Check(pc);
			pc->data[pc->count] = tmp;
			pc->count++;
		}
		fclose(Pfread);
		Pfread = NULL;
}
void Itni(struct Con* pc)
{
	pc->count = 0;
	pc->data=(struct People*)malloc(sizeof(struct People)*3);
	if (pc->data == NULL)
	{
		printf("%s", strerror(errno));
	}
	pc->capacity = 3;
	Loadcontact(pc);
}

void Add(struct Con* pc)
{
	Check(pc);
	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].tele);
	printf("请输入地址>:");
	scanf("%s", pc->data[pc->count].addr);
	pc->count++;
	printf("增加成功\n");
}
void Destory(struct Con* pc)
{
	free(pc->data);
	pc->data= NULL;
}
void Show(struct Con* pc)
{
	if (pc->count == 0)
	{
		printf("通讯录位空\n");
		return;
	}
	else
	{
		int i = 0;
		printf("%20s\t%5s\t%5s\t%12s\t%30s\n", "名字", "年龄", "性别", "电话", "住址");
		for (i = 0; i < pc->count; i++)
		{
			printf("%20s\t%3d\t%5s\t%12s\t%30s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);
		}
	}
}
int Fine_by_name(char *name, struct Con* pc)
{
	int i = 0;
	for (i = 0; i < pc->count; i++)
	{
		if (strcmp(name, pc->data[i].name) == 0)
			return i;
	}
	return -1;
}
void  Del(struct Con* pc)
{
	if (pc->count == 0)
	{
		printf("通讯录为空,无法删除\n");
		return;
	}
	char arr[20];
	printf("请输入要删除人的姓名>:");
	scanf("%s", arr);
	int k=Fine_by_name(arr,pc);
	if (k != -1)
	{
		int i = k;
		for (i = k; i < pc->count - 1; i++)
		{
			pc->data[i] = pc->data[i + 1];
		}
		pc->count--;
		printf("删除成功\n");
	}
	else
		printf("不存在该用户\n");
}
void Search(struct Con* pc)
{
	if (pc->count == 0)
	{
		printf("通讯录为空,无法查找\n");
		return;
	}
	char arr[20];
	printf("请输入要查找人的姓名>:");
	scanf("%s", arr);
	int k = Fine_by_name(arr, pc);
	if (k != -1)
	{
		printf("%20s\t%5s\t%5s\t%12s\t%30s\n", "名字", "年龄", "性别", "电话", "住址");
		printf("%20s\t%3d\t%5s\t%12s\t%30s\n", pc->data[k].name, pc->data[k].age, pc->data[k].sex, pc->data[k].tele, pc->data[k].addr);
	}
	else
		printf("不存在该用户\n");
}
void Modify(struct Con* pc)
{
	if (pc->count == 0)
	{
		printf("通讯录为空,无法修改\n");
		return;
	}
	char arr[20];
	printf("请输入要修改人的姓名>:");
	scanf("%s", arr);
	int k = Fine_by_name(arr, pc);
	if (k != -1)
	{
		printf("请输入姓名>:");
		scanf("%s", pc->data[k].name);
		printf("请输入年龄>:");
		scanf("%d", &(pc->data[k].age));
		printf("请输入性别>:");
		scanf("%s", pc->data[k].sex);
		printf("请输入电话>:");
		scanf("%s", pc->data[k].tele);
		printf("请输入地址>:");
		scanf("%s", pc->data[k].addr);
	}
	else
		printf("不存在该用户\n");
}
char cmp(void* e1, void* e2)
{
	return *((char*)e1) - *((char*)e2);
}
void Sort(struct Con* pc)
{
	qsort(pc->data, pc->count, sizeof(struct People), cmp);
	printf("排序成功\n");
}
void Save(struct Con* pc)
{
	FILE* Pfwrite = fopen("contact.txt", "wb");
	if (Pfwrite == NULL)
	{
		return 1;
	}
	int i = 0;
	for (i = 0; i < pc->count; i++)
	{
		fwrite(pc->data+i, sizeof(struct People), 1,  Pfwrite);
	}
	fclose(Pfwrite);
	printf("保存成功\n");
}

contact.h?

#include<stdio.h>
#include<string.h>
#include<errno.h>
#include<stdlib.h>
struct People
{
	char name[20];
	int age;
	char sex[5];
	char tele[12];
	char addr[20];
};
struct Con
{
	struct People *data;
	int count;
	int capacity;
};
void Itni(struct Con* pc);
void Add(struct Con* pc);
void Show(struct Con* pc);
void  Del(struct Con* pc);
void Search(struct Con* pc);
void Modify(struct Con* pc);
void Sort(struct Con* pc);
void Destory(struct Con* pc);
void Save(struct Con* pc);

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 18:34:21  更:2022-07-20 18:34:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/14 2:55:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码