C语言通讯录的实现

学习一门语言,就是学习它的表达逻辑和方式。

当接到一个问题时,你需要首先要明白这个问题要干什么;问题的解决方式有哪几种;那种方式最适合

当这些问题你都了然于胸了,那么,就开始用代码来表达吧!

静态通讯录

第一部分:头文件

#ifndef _CONTACT_H_
#define _CONTACT_H_
#include<stdio.h>
#include<windows.h>
#include<string.h>
#include<assert.h>
#pragma warning(disable:4996)
#define MAX 1000
typedef struct stu
{
	char name[20];
	char sex[10];
	int age;
	char tele[12];
	char addr[20];
} adlist;
typedef struct 
{
	adlist data[1000];//联系人的信息
	 int size;//实际存储个数
}contact, *pcontact;


void init_contact(pcontact pt);
void show_contact(pcontact pt);
void add_contact(pcontact pt);
void del_contact(pcontact pt);
int find_contact(pcontact pt);
void change_contact(pcontact pt);
void rank_contact(pcontact pt);
void write_file(pcontact pt);
void read_file(pcontact pt);
#endif//_CONTACT_H_

第二部分:函数定义


#include"contact.h"
void init_contact(pcontact pt)//初始化通讯录
{
	pt->size = 0;
}
void show_contact(pcontact pt)
{
	if (NULL == pt)
	{
		printf("通讯录为空!");
		return;
	}
	if (0==pt->size )
	{
		printf("通讯录为空!");
	}
	for (int i = 0; i < pt->size; i++)
	{
		    printf("Name:%s\n", pt->data[i].name);
			printf("Sex:%s\n", pt->data[i].sex);
			printf("Age:%d\n", pt->data[i].age);
			printf("Tel:%s\n", pt->data[i].tele);
			printf("Addr:%s\n",pt->data[i].addr);
	}
	printf("\n");
}
void add_contact(pcontact pt)//添加联系人
{
	int count = 0;
	int num = 0;
	if (MAX == pt->size)
	{
		printf("通讯录已满!");
	}
	if (0 == pt->size)
	{
		printf("请输入姓名:");
		scanf("%s", pt->data[pt->size].name);
	}
	else
	{
		while (0==num)
		{
			printf("请输入姓名:");
			scanf("%s", pt->data[pt->size].name);
			for (int i = 0; i < pt->size-1; i++)
			{
				if (0 == strcmp(pt->data[i].name, pt->data[pt->size].name))
				{
					num=1;
					break;
				}
			}
			if (1 == num)
			{
				num = 0;
			}
			else
			{
				num = 1;
			}
		}
	}
	printf("请输入性别:");
	scanf("%s", pt->data[pt->size].sex);
	printf("请输入年龄:");
	scanf("%d", &(pt->data[pt->size].age));
	printf("请输入联系人号码:");
	scanf("%s", pt->data[pt->size].tele);
	printf("请输入联系人地址:");
	scanf("%s", pt->data[pt->size].addr);
	pt->size++;
	printf("添加成功!size=%d\n", pt->size);
}
int find_contact(pcontact pt)
{
	if (0 == pt->size)
	{
		printf("通讯录为空!\n");	
		return 0;
	}
	char name[20];
	printf("请输入联系人的姓名:");
	scanf("%s", name);
	int i = 0;
	for (; i < pt->size; i++)
	{
		if (0 == strcmp(pt->data[i].name, name))
		{
			printf("Name:%s\n", pt->data[i].name);
			printf("Sex:%s\n", pt->data[i].sex);
			printf("Age:%d\n", pt->data[i].age);
			printf("Tel:%s\n", pt->data[i].tele);
			printf("Addr:%s\n", pt->data[i].addr);
			return i;
		}
	}
	if (i == pt->size)
	{
		printf("通讯录无该联系人!\n");
		return -1;
	}
	return 0;
}
void del_contact(pcontact pt)
{
	if (0 == pt->size)
	{
		printf("通讯录为空!\n");
		return;
	}
	char name[20];
	printf("请输入联系人的姓名:");
	scanf("%s", name);
	int i = 0;
	for (; i < pt->size; i++)
	{
		if (0 == strcmp(pt->data[i].name, name))
		{
			for (int j = i; j < pt->size; j++)
			{
				pt->data[j] = pt->data[j + 1];
			}
			pt->size--;
			printf("联系人已删除!size=%d\n", pt->size);
		}
		else
		{
			printf("通讯录无该联系人!\n");
		}
	}
}
void change_contact(pcontact pt)
{
	if (0 == pt->size)
	{
		printf("通讯录为空!\n");
		return;
	}
	int ret = find_contact(pt);
	if (ret != -1)
	{
		printf("请输入姓名:");
		scanf("%s", pt->data[ret].name);
		printf("请输入性别:");
		scanf("%s", pt->data[ret].sex);
		printf("请输入年龄:");
		scanf("%d", &(pt->data[ret].age));
		printf("请输入联系人号码:");
		scanf("%s", pt->data[ret].tele);
		printf("请输入联系人地址:");
		scanf("%s", pt->data[ret].addr);
	}
	
}
void rank_contact(pcontact pt)
{
	if (0 == pt->size)
	{
		printf("通讯录为空!\n");
		return;
	}
	for (int i = 0; i < pt->size - 1; i++)
	{
		for (int j = 0; j < pt->size - i - 1; j++)
		{
			if (strcmp(pt->data[j].name, pt->data[j + 1].name)>0)
			{
				char temp = *(pt->data[j+1].name);
				*(pt->data[j + 1].name) = *(pt->data[j].name);
				*(pt->data[j].name) = temp;
			}
		}
	}
	for (int i = 0; i < pt->size; i++)
	{
		printf("Name:%s\n", pt->data[i].name);
		printf("Sex:%s\n", pt->data[i].sex);
		printf("Age:%d\n", pt->data[i].age);
		printf("Tel:%s\n", pt->data[i].tele);
		printf("Addr:%s\n", pt->data[i].addr);
	}
	printf("\n");
}
void write_file(pcontact pt)
{
	if (0 == pt->size)
	{
		printf("通讯录为空!\n");
		return;
	}
	FILE *file = fopen("log.txt", "w+");
	if (NULL != file)
	{
		int i = 0;
		for (; i < pt->size; i++)
		{
			fprintf(file,"%s %s %d %s %s\n",
pt->data[i].name,pt->data[i].sex, pt->data[i].age, pt->data[i].tele,pt->data[i].addr);
		}
		printf("写入文件完毕:)\n");
		fclose(file);
	}
}
void read_file(pcontact pt)
{
	if (0 == pt->size)
	{
		printf("通讯录为空!\n");
		return;
	}
	FILE *file = fopen("contact.txt", "w+");
	if (NULL != file)
	{
		int i = 0;
		for (; i < pt->size; i++)
		{
			fscanf(file,"%s %s %d %s %s\n",
pt->data[i].name,pt->data[i].sex, &pt->data[i].age, pt->data[i].tele,pt->data[i].addr);
			
			printf("%s %s %d %s %s\n",\
pt->data[i].name, pt->data[i].sex, pt->data[i].age,pt->data[i].tele, pt->data[i].addr);
		}
		fclose(file);
	}
}

第三部分:主函数


//容量为1000的静态通讯录

#include"contact.h"
void menu()
{
	printf("***            通讯录           ***\n");
	printf("***1.添加联系人       2.删除联系人***\n");
	printf("***3.显示联系人       4.排序联系人***\n");
	printf("***5.查找联系人       6.修改联系人***\n");
	printf("***7.清空联系人       8.写入到文件***\n");
	printf("***9.加载联系人      10.退出********\n");
}
int main()
{
	contact pt;
   init_contact(&pt);
   while (1)
   {
	   menu();
	   int choice;
	   printf("please choose:");
	   scanf("%d", &choice);
	   switch (choice)
	   {
	   case 1:
		   add_contact(&pt);//添加联系人
		   break;
	   case 2:
		   del_contact(&pt);//删除联系人
		   break;
	   case 3:
		  show_contact(&pt);//加载联系人
		  break;
	   case 4:
		   rank_contact(&pt);//按姓名排序联系人
		   break;
	   case 5:
		   find_contact(&pt);//查找联系人
		   break;
	   case 6:
		   change_contact(&pt);//修改联系人信息
		   break;
	   case 7:
		   init_contact(&pt);//清空
		   break;
	   case 8:
		   write_file(&pt);//写入文件
		   break;
	   case 9:
		   read_file(&pt);//加载文件
		   break;
	   case 10:
		   exit(0);//退出
		   break;
	   default:
		   break;
	   }
   }
	system("pause");
	return 0;
}

动态通讯录和静态差别不大,基本函数的实现逻辑相同,在此就不赘述了。对于有问题的小伙伴,可以写评论,看到我一定第一时间回复的呦。

标题基于SpringBoot的马术俱乐部管理系统设计与实现AI更换标题第1章引言介绍马术俱乐部管理系统的研究背景、意义、国内外研究现状、论文方法及创新点。1.1研究背景与意义阐述马术俱乐部管理系统对提升俱乐部管理效率的重要性。1.2国内外研究现状分析国内外马术俱乐部管理系统的发展现状及存在的问题。1.3研究方法以及创新点概述本文采用的研究方法,包括SpringBoot框架的应用,以及系统的创新点。第2章相关理论总结和评述与马术俱乐部管理系统相关的现有理论。2.1SpringBoot框架理论介绍SpringBoot框架的基本原理、特点及其在Web开发中的应用。2.2数据库设计理论阐述数据库设计的基本原则、方法以及在管理系统中的应用。2.3马术俱乐部管理理论概述马术俱乐部管理的基本理论,包括会员管理、课程安排等。第3章系统设计详细描述马术俱乐部管理系统的设计方案,包括架构设计、功能模块设计等。3.1系统架构设计给出系统的整体架构,包括前端、后端和数据库的交互方式。3.2功能模块设计详细介绍系统的各个功能模块,如会员管理、课程管理、预约管理等。3.3数据库设计阐述数据库的设计方案,包括表结构、字段设计以及数据关系。第4章系统实现介绍马术俱乐部管理系统的实现过程,包括开发环境、编码实现等。4.1开发环境搭建介绍系统开发所需的环境,包括操作系统、开发工具等。4.2编码实现详细介绍系统各个功能模块的编码实现过程。4.3系统测试与调试阐述系统的测试方法、测试用例以及调试过程。第5章系统应用与分析呈现马术俱乐部管理系统的应用效果,并进行性能分析。5.1系统应用情况介绍系统在马术俱乐部中的实际应用情况。5.2系统性能分析从响应时间、并发处理能力等方面对系统性能进行分析。5.3用户反馈与改进收集用户反馈,提出系统改进建议。第6章结论与展望总结马术俱乐部管理系统的设计与实现成果,并展望未来的研究
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值