C语言通讯录管理系统(含完整代码)

本文介绍了一个通讯录管理系统的详细设计,包括信息添加、查询、修改、删除和排序等功能。系统采用C语言编写,具备友好的界面和良好的容错能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

课题3:通讯录管理系统
设计内容:
设计一个通讯录管理系统,以实现以下功能:信息添加、查询、修改、删除、排序等功能。
设计要求:
1) 每条信息至包含 :姓名、电话、工作单位等信息
2) 作为一个完整的系统,应具有友好的界面和较强的容错能力
预览:
主菜单
显示模块
代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h> 
#define LEN sizeof(struct list)
#define DATA a[i].num,a[i].name,a[i].job,a[i].address
#define FORMAT "\t\t  ||    %-12d %-12s %-19s %-20s ||\n"
void in();
void menu();
void search();
void del();
void show();
void modify();
void insert();
void order();
void total();
struct list
{
	int num;		//号码
	char name[15];	//姓名
	char job[30];	//工作单位
	char address[30];	//地址			
};
struct list a[50];

void main()
{
	system("color 5e\n");
	menu();
	int n;
	scanf("%d", &n);
	while (n)
	{
		switch (n)
		{
		case 1:in(); 		break;
		case 2:search(); 	break;
		case 3:del();		break;
		case 4:modify();	break;
		case 5:insert();	break;
		case 6:order();		break;
		case 7:total();		break;
		case 8:show();		break;
		default:break;
		}
		getch();
		menu();//执行完后显示菜单 
		scanf("%d", &n);
	}

}

void menu()	
{
	system("cls");
	printf("\n\n\n");
	printf("\t\t\t\t\t**************************************\n");
	printf("\t\t\t\t\t************通讯录管理系统************\n");
	printf("\t\t\t\t\t======================================\n");
	printf("\t\t\t\t\t*          1.录入联系人信息          *\n");
	printf("\t\t\t\t\t*          2.查找联系人信息          *\n");
	printf("\t\t\t\t\t*          3.删除联系人信息          *\n");
	printf("\t\t\t\t\t*          4.修改联系人信息          *\n");
	printf("\t\t\t\t\t*          5.插入联系人信息          *\n");
	printf("\t\t\t\t\t*          6.排序                    *\n");
	printf("\t\t\t\t\t*          7.统计联系人总数          *\n");
	printf("\t\t\t\t\t*          8.显示所有联系人          *\n");
	printf("\t\t\t\t\t*          0.退出系统                *\n");
	printf("\t\t\t\t\t======================================\n");
	printf("\t\t\t\t\t**************************************\n");
	printf("\t\t\t\t\t          请选择(0-8):");
}

void in()
{
	int i, m = 0;
	char ch[2];
	FILE* fp;
	if ((fp = fopen("data.txt", "a+")) == NULL)
	{
		printf("\t\t  文件不存在! \n");
		return;
	}
	while (!feof(fp))
	{
		if (fread(&a[m], LEN, 1, fp) == 1)
			m++;
	}
	fclose(fp);
	if (m == 0)
	{
		printf("\t\t  文件中没有记录!\n");

	}
	else
	{
		show();
	}
	if ((fp = fopen("data.txt", "a+")) == NULL)
	{
		printf("\t\t  文件不存在!\n");
		return;
	}
	printf("\t\t  是否输入联系人信息(y/n):");
	scanf("%s", ch);
	while (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)
	{
		printf("\t\t  电话:");
		scanf("%d", &a[m].num);
		for (i = 0; i < m; i++)
		{
			if (a[i].num == a[m].num)
			{
				printf("\t\t  此用户已经存在了,按任意键继续!");
				getch();
				fclose(fp);
				return;
			}
		}

		printf("\t\t  姓名:");
		scanf("%s", &a[m].name);
		printf("\t\t  工作单位:");
		scanf("%s", &a[m].job);
		printf("\t\t  地址:");
		scanf("%s", &a[m].address);
		if (fwrite(&a[m], LEN, 1, fp) != 1)
		{
			printf("\t\t  不能保存");
			getch();
		}
		else
		{
			printf("\t\t  %s 已被保存!\n", a[m].name);
			m++;
		}
		printf("\t\t  继续?(y/n):");
		scanf("%s", ch);
	}
	fclose(fp);
	printf("\t\t  结束录入!\n");
}
void del()
{
	show();
	FILE* fp;
	int nmb, i, j, m = 0;
	int t = 1;		//判断是否正常结束 
	char ch[2];
	if ((fp = fopen("data.txt", "r+")) == NULL)
	{
		printf("\t\t  \n文件不存在\n");
		return;
	}
	while (!feof(fp))
	{
		if (fread(&a[m], LEN, 1, fp) == 1)
			m++;
	}
	fclose(fp);
	if (m == 0)
	{
		printf("\t\t  \n文件没有记录!\n");
		return;
	}
	printf("\t\t  输入要删除的联系人的电话号码:");
	scanf("%d", &nmb);
	for (i = 0; i < m; i++)
		if (nmb == a[i].num)
		{
			printf("\t\t  找到这条记录是否删除(y/n):");
			scanf("%s", &ch);
			if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)
			{
				for (j = i + 1; j < m; j++)
					a[j - 1] = a[j];
				m--;
				if ((fp = fopen("data.txt", "w+")) == NULL)
				{
					printf("\t\t  文件不存在\n");
					return;
				}
				for (j = 0; j < m; j++)
				{
					if (fwrite(&a[j], LEN, 1, fp) != 1)
					{
						printf("\t\t  无法写入文件!删除失败!");
						getch();
					}
				}
				fclose(fp);
				printf("\t\t  删除成功");
			}
			else
			{
				fclose(fp);
				printf("\t\t  找到了记录选择不删除");
			}
			t = 0;	//标志找到该联系人 
			break;
		}
	if (t)
		printf("\t\t  没有找到该联系人!\n");
}

void modify()
{
	show();
	FILE* fp;
	int i = 0, j = 0, m = 0, nmb;
	if ((fp = fopen("data.txt", "r+")) == NULL)
	{
		printf("\t\t  文件不存在\n");
		return;
	}
	while (!feof(fp))
		if (fread(&a[m], LEN, 1, fp) == 1)
			m++;
	if (m == 0)
	{
		printf("\t\t  文件中没有记录");
		fclose(fp);
		return;
	}
	printf("\t\t  请输入要修改的联系人的电话号码:");
	scanf("%d", &nmb);
	for (i = 0; i < m; i++)
		if (nmb == a[i].num)	//检索是否有要相应的联系人
		{
			printf("\t\t  找到该名联系人,将修改他的信息!\n");
			printf("\t\t  电话:");
			scanf("%d", &a[i].num);
			printf("\t\t  姓名:");
			scanf("%s", &a[i].name);
			printf("\t\t  工作单位:");
			scanf("%s", &a[i].job);
			printf("\t\t  住址:");
			scanf("%s", &a[i].address);
			printf("\t\t  修改成功!");

			if ((fp = fopen("data.txt", "w+")) == NULL)
			{
				printf("\t\t  不能打开");
				return;
			}
			for (j = 0; j < m; j++)		//写入新的信息
				if (fwrite(&a[j], LEN, 1, fp) != 1)
				{
					printf("\t\t  不能打开");
					getch();
				}
			fclose(fp);
			break;
		}
	if (i == m)
		printf("\t\t  没有找到该名联系人");
}
void search()
{
	show();
	FILE* fp;
	int nmb, i, m = 0;
	if ((fp = fopen("data.txt", "r+")) == NULL)
	{
		fclose(fp);
		printf("\n\t\t  文件不存在!\n");
		return;
	}
	while (!feof(fp))
	{
		if (fread(&a[m], LEN, 1, fp) == 1)
			m++;
	}
	if (m == 0)
	{
		fclose(fp);
		printf("\n\t\t  文件没有记录!\n");
		return;
	}
	printf("\n\t\t  请输入联系人的电话号码!:");
	scanf("%d", &nmb);
	for (i = 0; i < m; i++)
		if (nmb == a[i].num)
		{
			printf("\t\t        电话         姓名         工作单位            住址                   \n");
			printf(FORMAT, DATA);
			break;
		}
	if (i == m)
		printf("\t\t  没有找到记录!\n");
	fclose(fp);
}
void show()
{
	FILE* fp;
	int i, m = 0;
	if ((fp = fopen("data.txt", "r+")) == NULL)
	{
		printf("\n\t\t  文件不存在\n");
		return;
	}
	while (!feof(fp))
	{
		if (fread(&a[m], LEN, 1, fp) == 1)
			m++;
	}
	fclose(fp);
	printf("\t\t  ---------------------------------------------------------------------------\n");
	printf("\t\t  ||    电话         姓名         工作单位            住址                 ||\n");
	for (i = 0; i < m; i++)
	{
		printf(FORMAT, DATA);
	}
	printf("\t\t  ---------------------------------------------------------------------------\n");
}
void insert()
{
	show();
	FILE* fp;
	int i, j, k, m = 0, nmb;
	if ((fp = fopen("data.txt", "r+")) == NULL)
	{
		printf("\t\t  文件不存在! \n");
		return;
	}
	while (!feof(fp))
		if (fread(&a[m], LEN, 1, fp) == 1)
			m++;
	if (m == 0)
	{
		printf("\t\t  文件中没有记录!\n");
		fclose(fp);
		return;
	}
	printf("\t\t  请输入要插入哪个号码的位置之后:");
	scanf("%d", &nmb);
	for (i = 0; i < m; i++)
		if (nmb == a[i].num)
			break;
	if (m == i)
	{
		printf("\t\t  没有找到改电话号码");
		fclose(fp);
		return;
	}
	for (j = m - 1; j > i; j--)
		a[j + 1] = a[j];
	printf("\t\t  请输入要插入的通讯录信息:\n");
	printf("\t\t  电话:");
	scanf("%d", &nmb);
	for (k = 0; k < m; k++)
		if (a[k].num == nmb)
		{
			printf("\t\t  电话已经存在,请按任意键继续!");
			getch();
			fclose(fp);
			return;
		}
	a[i + 1].num = nmb;
	printf("\t\t  姓名:");
	scanf("%s", &a[i + 1].name);
	printf("\t\t  工作:");
	scanf("%s", &a[i + 1].job);
	printf("\t\t  地址:");
	scanf("%s", &a[i + 1].address);
	printf("\t\t  插入成功,请输入任意键返回主界面!");
	if ((fp = fopen("data.txt", "w+")) == NULL)
	{
		printf("\t\t  不能打开!");
		return;
	}
	for (k = 0; k <= m; k++)
		if (fwrite(&a[k], LEN, 1, fp) != 1)
		{
			printf("\t\t  不能保存!");
			getch();
		}
	fclose(fp);
}
void order()
{
	FILE* fp;
	struct list b;
	int i = 0, j = 0, m = 0;
	printf("\n");
	if ((fp = fopen("data.txt", "r+")) == NULL)
	{
		printf("\t\t  文件不存在\n");
		return;
	}
	while (!feof(fp))
		if (fread(&a[m], LEN, 1, fp) == 1)
			m++;
	fclose(fp);
	if (m == 0)
	{
		printf("\t\t  文件中没有记录\n");
		return;
	}
	for (i = 0; i < m - 1; i++)
		for (j = i + 1; j < m; j++)
			if (a[i].num < a[j].num)
			{
				b = a[i]; a[i] = a[j]; a[j] = b;
			}
	if ((fp = fopen("data.txt", "w+")) == NULL)
	{
		printf("\t\t  文件不存在!\n");
		return;
	}
	for (i = 0; i < m; i++)
		if (fwrite(&a[i], LEN, 1, fp) != 1)
		{
			printf("\t\t  不能保存文件!\n");
			getch();
		}
	fclose(fp);
	show();
	printf("\t\t  保存成功\n");
}
void total()
{
	FILE* fp;
	int m = 0;
	if ((fp = fopen("data.txt", "r+")) == NULL)
	{
		printf("\t\t  文件不存在!\n");
		return;
	}
	while (!feof(fp))
		if (fread(&a[m], LEN, 1, fp) == 1)
			m++;
	if (m == 0)
	{
		printf("\n\t\t  没有联系人!\n");
		fclose(fp);
		return;
	}
	fclose(fp);
	show();
	printf("\t\t  您一共拥有 %d 位联系人", m);
}

C语言课程设计任务书(4) 一、题目:通讯录管理 二、目的与要求 1. 目的: (1)基本掌握面向过程程序设计的基本思路和方法; (2)达到熟练掌握C语言的基本知识和技能; (3)能够利用所学的基本知识和技能,解决简单的程序设计问题 2. 要求 基本要求: 1.         要求利用C语言面向过程的编程思想来完成系统的设计; 2.       突出C语言的函数特征,以多个函数实现每一个子功能; 3.         画出功能模块图; 4.         具有清晰的程序流程图和数据结构的详细定义; 5.       熟练掌握C语言对文件的各种操作。 创新要求: 在基本要求达到后,可进行创新设计,如系统用户功能控制,对管理员级和一般级别的用户系统功能操作不同 三、信息描述 有关该系统基本信息的描述,如:姓名、电话、城市和邮编等。 四、功能描述 1.       名单基本信息(姓名,城市,电话,邮编等)的录入,并存放在文件当中。 2.       基本信息的查询与修改。 3.       记录的添加和删除。 4.       对同一类型记录的查找:如查找同一城市的记录或同一省份的记录。 五、解决方案 1.       分析程序的功能要求,划分程序功能模块。 2.       画出系统流程图。 3.       代码的编写。定义数据结构和各个功能子函数。 4.       程序的功能调试。 5.       完成系统总结报告以及使用说明书 六、进度安排 此次课程设计时间为一周或两周,分四个阶段完成: 1.       分析设计阶段。指导教师应积极引导学生自主学习和钻研问题,明确设计要求,找出实现方法,按照需求分析、总体设计、详细设计这几个步骤进行。 2.       编码调试阶段:根据设计分析方案编写C代码,然后调试该代码,实现课题要求的功能。 3.       总结报告阶段:总结设计工作,写出课程设计说明书,要求学生写出需求分析、总体设计、详细设计、编码、测试的步骤和内容。 4.       考核阶段。 七、撰写课程设计报告或课程设计总结 课程设计报告要求: 总结报告包括需求分析、总体设计、详细设计、编码(详细写出编程步骤)、测试的步骤和内容、课程设计总结、参考资料等,不符合以上要求者,则本次设计以不及格记。 八、参考资料  《C语言程序设计教程》   网上相关资料(....略)
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值