C语言实现的通讯录管理系统。

C语言实现的通讯录管理系统。
设计一个学生通信录,学生通迅录数据信息构成内容可自行设计(如:学号、姓名、电话号码、所在班级、寝室地址等),通信录数据类型定义为结构体类型。
主要实现功能包括:
(1)创建学生通讯录
(2)修改学生通讯录
(3)增删学生通讯录
(4)能够按多种方式进行查询(如:①按学号查询;②按所在班级查询)
源代码:

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#include<windows.h>
#include<time.h>

typedef struct people
{
	char name[10]; //姓名
	char IDnumber[20];//学号
	char phone[15];   // 手机号
	int classNum; //班级
	char roomID[10];   //寝室
	
}people;  //定义别名people

//函数模块定义
void UI_show();//进入界面 UI 实现
void NEW_in(); //新学生信息添加
void OLD_adjust();//修改学生信息
void OLD_delete(); //删除学生信息
void OLD_find();  //学生信息查找
void OLD_findByNum();//通过学号查找
void OLD_findByName();//通过姓名查找

//各种UI界面显示
void UI_show1();
void UI_show2();
void UI_show3();
void UI_show4();
void UI_show5();
void UI_show6();

//=======================================================================
//进入界面 UI 实现
void UI_show()
{
	int i;
	//--------------------------------------------------------------------
	printf("\n");
	for (i = 0; i < 75; i++)   //数字用来  控制 上方 = 数量 
	{
		printf("=");
	}
	printf("\n");
	for (i = 0; i < 30; i++)
	{
		printf(" ");
	}
	printf("欢迎进入通讯录管理系统");
	for (i = 0; i < 30; i++)
	{
		printf(" ");
	}
	printf("\n");
	for (i = 0; i < 75; i++)   
	{
		printf("=");
	}
	//实现上方欢迎界面
//--------------------------------------------------------------------
	printf("\n\n\n");
	for (i = 0; i < 33; i++)                          //以下实现  菜单界面功能选择
	{
		printf(" ");
	}
	printf("请选择以下功能:\n");
	for (i = 0; i < 33; i++)
	{
		printf(" ");
	}
	printf("1、添加学生通讯录\n");
	for (i = 0; i < 33; i++)
	{
		printf(" ");
	}
	printf("2、修改学生通讯录\n");
	for (i = 0; i < 33; i++)
	{
		printf(" ");
	}
	printf("3、删除学生通讯录\n");

	for (i = 0; i < 33; i++)
	{
		printf(" ");
	}
	printf("4、查找通讯录信息\n");
	for (i = 0; i < 33; i++)
	{
		printf(" ");
	}
	printf("5、退出系统");
	printf("\n\n");
	for (i = 0; i < 75; i++)   //数字  控制 上方 = 数量 
	{
		printf("=");
	}
	printf("\n\n");
	for (i = 0; i < 33; i++)
	{
		printf(" ");
	}
	printf("请选择:");
	//实现界面UI
}

//=======================================================================
//添加学生到通讯录
void NEW_in()
{
	FILE* fp = NULL; //定义文件指针   
	fp = fopen("output.txt", "a");//以追加的方式打开 文件
	if (fp == NULL)
	{
		printf("\n出现未知错误!按任意键退出.....\n");
		exit(0);
	}
	int classNum;  //班级
	char name[10]; //姓名
	char IDnumber[20];//学号
	char phone[15];   // 手机号
	char roomID[10];   //寝室
	
	char ch;  //键盘输入选择
	system("cls"); //清屏	
	UI_show1();  // 界面显示1;
	while (1)     //进入循环体,直到接收到信息 跳出循环
	{
		printf("请输入姓名:");
		scanf("%s", name);
		printf("请输入学号:");
		scanf("%s", IDnumber);
		printf("请输入联系电话:");
		scanf("%s", phone);
		printf("请输入寝室:");
		scanf("%s", roomID);
		printf("请输入班级:");
		scanf("%d", &classNum);
		
		//缓冲区保存到文件
		fprintf(fp, "%s  %s  %s  %s  %d  \n", name,  IDnumber, phone, roomID, classNum);

		do           // 接收字符 判断是否 继续录入用户信息
		{
			printf("是否继续录入?请选择(Y/N)");
			getchar();   //接收 回车键
			scanf("%c", &ch);

		} while ((ch != 'Y') && (ch != 'y') && (ch != 'n') && (ch != 'N'));

		if ((ch == 'n') || (ch == 'N'))
		{
			fclose(fp);  //如果用户 输入N 则保存 并退出程序
			break;
		}
	}
}

//=========================================================================
//修改学生通讯录信息
void OLD_adjust()		   
	//    先将硬盘文件中数据 保存到 内存缓冲区中,找到要修改的用户信息,修改后 重新写入文档
{
	system("cls");        //清屏
	people peopleI[100];//建立结构体 数组
	int number = 0, sign = 0, i = 1, a, test;
	char name[10], ch;
	int classNum;  //班级
	char IDnumber[20];//学号
	char phone[15];   // 手机号
	char roomID[10];   //寝室
	FILE* fp = NULL;  //文件指针
	UI_show2();       //UI调用
	fp = fopen("output.txt", "r+");     //以读写的方式打开文件
	if (fp == NULL)                                                      // 错误检测
	{
		printf("文件打开失败!请先添加用户信息!\n");
		return;
	
	}

	printf("请输入要修改的学生姓名:");
	scanf("%s", name);
	while (!feof(fp))  //从文件中读取
	{
		fscanf(fp, "%s %s %s %s %d", peopleI[i].name,  peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID, &peopleI[i].classNum);
		i++;     //记录行的个数
	}
	
	printf("\n");
	i--;
	test = i;  //保存 数据的行数
	for ( ; i >= 0; i--)
	{
		a = strcmp(name, peopleI[i].name);  //比较 输入的用户名  和文件中的用户名
		if (a == 0)
		{
			sign = 1;  //判断 赋值1  代表找到 该数据
			printf("姓名%s,学号%s,联系电话%s,寝室%s,班级%d\n", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID,peopleI[i].classNum);
			do   // 友情提示 选择
			{
				printf("你确定要修改该用户的信息吗?(Y/N):");
				getchar();
				scanf("%c", &ch);

			} while ((ch != 'Y') && (ch != 'y') && (ch != 'n') && (ch != 'N'));
			if ((ch == 'y') || (ch == 'Y'))  //如果 选y则 录入信息
			{
				printf("请输入姓名:");
		        scanf("%s", name);
		printf("请输入学号:");
		scanf("%s", IDnumber);
		printf("请输入联系电话:");
		scanf("%s", phone);
		printf("请输入寝室:");
		scanf("%s", roomID);
		printf("请输入班级:");
		scanf("%d", &classNum);
				printf("修改成功!");
				fclose(fp);  //关闭文件
				fp = fopen("output.txt", "w");
				for (i = 1; i < test; i++) //将内存中 修改过的信息 重新写入文件
				{
					fscanf(fp, "%s %s %s %s %d", peopleI[i].name,  peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID, &peopleI[i].classNum);
		}
				fclose(fp);
				break; //跳出 for循环
			}
			else  //假如不修改信息  再次写入文件
			{
				
				fclose(fp);
				break;
			}
		}
	}
	if (sign == 0)
	{
		printf("没找到该用户!\n请按任意键继续....");
		getchar();
	}
}

//===============================================================================
//删除住户信息的功能
void OLD_delete()
{
	//  先将硬盘文件中数据 保存到 内存缓冲区中,找到要删除的用户信息,删除后 重新写入文档
	system("cls");  //清屏
	people peopleI[10000];//建立结构体 数组
	int number = 0, len = 0, sign = 0, i = 1, a, test, j;
	char name[10], ch;
	FILE* fp = NULL;  //文件指针
	UI_show3();
	fp = fopen("output.txt", "r");

	if (fp == NULL)
	{
		printf("未找到文件!");
		return;    //返回 main函数
	}
	printf("请输入要删除的住户姓名:");
	scanf("%s", name);
	while (!feof(fp))  //从文件中读取,文件中数据转移到内存数组中区
	{					//!feof(fp)只要文件不到末尾 就一直读下去
		fscanf(fp, "%s %s %s %s %d", peopleI[i].name,  peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID, &peopleI[i].classNum);
		i++;
	}
	///------------------------------------	
	fclose(fp);  //保存文件 

	printf("\n");
	i--;
	test = i;  //保存 行数
	for (; i >= 0; i--)
	{
		a = strcmp(name, peopleI[i].name);  //比较 输入的用户名  和文件中的用户名
		if (a == 0)   //找到相应位置   
		{
			sign = 1;  // 标志 是否找到 数据
				printf("姓名%s,学号%s,联系电话%s,寝室%s,班级%d\n", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID,peopleI[i].classNum);
		//显示出要修改的信息
			do
			{
				printf("你确定要删除该用户的信息吗?(Y/N):");
				getchar();
				scanf("%c", &ch);

			} while ((ch != 'Y') && (ch != 'y') && (ch != 'n') && (ch != 'N'));
			if ((ch == 'y') || (ch == 'Y'))  //假如 确定
			{
				printf("删除成功!");
				fp = fopen("output.txt", "w");  //以写的方式打开,源文件被清除
				for (j = 1; j < test; j++)  //重新写入文件  
				{
					if (j == i) // 不写入 第i个数据
					{
						//操作为空 
					}
					else //否则  写入文件
						fscanf(fp, "%s %s %s %s %d", peopleI[i].name,  peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID, &peopleI[i].classNum);
		}
				fclose(fp);  //关闭  保存缓冲区 文件
			}
			else    //假如不修改信息  再次写入文件
			{
				fp = fopen("output.txt", "w");  //以写的方式打开,源文件被清除
				for (i = 1; i < test; i++) //将内存中 修改过的信息 重新写入文件
				{
					fscanf(fp, "%s %s %s %s %d", peopleI[i].name,  peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID, &peopleI[i].classNum);
			}
				fclose(fp);
			}
		}
	}
	if (sign == 0)   //判断为未找到用户
	{
		printf("没找到该用户!\n请按回车键返回菜单选项.....");
		getchar();
	}
}

//========================================================================================
//查询通讯录信息;
void OLD_find(){
	system("cls");
	int temp;
	UI_show5();	
	printf("1.按学号查询通讯录信息\t2.按姓名查询通讯录信息\n");
	printf("请选择……");
	scanf("%d",&temp);
	switch(temp){
	case 1:
		system("cls");
		OLD_findByNum();
		break;
	case 2:
		system("cls");
		OLD_findByName();		
		break;
	default:printf("\n\t\t\t输入错误! 按回车键返回重新选择");
	}
	_getch();
	system("cls");
}

//===================================================================================
//按照学号查询通讯录信息
void OLD_findByNum()		  
	//    先将硬盘文件中数据 保存到 内存缓冲区中,找到要用户信息,修改后 重新写入文档
{
	system("cls");        //清屏
	people peopleI[100];//建立结构体 数组
	int number = 0, sign = 0, i = 1,  test;
	int p;
	char IDnumber[20];
	FILE* fp = NULL;  //文件指针
	void UI_show5();       //UI调用
	fp = fopen("output.txt", "r");     //以读写的方式打开文件
	if (fp == NULL)                                                      // 错误检测
	{
		printf("文件打开失败!请先添加用户信息!\n");
		return;
		//	exit(0);
	}
	printf("请输入要查询的学号:");
	scanf("%s",IDnumber);
	while (!feof(fp))  //从文件中读取
	{
		fscanf(fp, "%s %s %s %s %d", peopleI[i].name,  peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID, &peopleI[i].classNum);
		i++;     //记录行的个数
	}
	printf("\n");
	i--;
	test = i;  //保存 数据的行数
	for (; i >= 0; i--)
	{
		  //比较 输入的学号  和文件中的学号
		p=strcmp(IDnumber,peopleI[i].IDnumber);
		if (p==0)
		{
			sign = 1;  //判断 赋值1  代表找到 该数据
			printf("姓名%s,学号%s,联系电话%s,寝室%s,班级%d\n", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID,peopleI[i].classNum);
			printf("\n");	
			fclose(fp);  //关闭文件
			}
			else  //假如meiyou信息  再次写入文件
			{			
				fclose(fp);
			}
		}
	if (sign == 0)
	{
		printf("没找到该学生信息!\n请按任意键继续....");
		getchar();
	}
}

//===================================================================================
//按照姓名查询通讯录信息
void OLD_findByName()		  
	//    先将硬盘文件中数据 保存到 内存缓冲区中,找到要用户信息,修改后 重新写入文档
{
	system("cls");        //清屏
	people peopleI[100];//建立结构体 数组
	int number = 0, sign = 0, i = 1,  test;
	int p;
	char name[10];
	FILE* fp = NULL;  //文件指针
	void UI_show6();       //UI调用
	fp = fopen("output.txt", "r");     //以读写的方式打开文件
	if (fp == NULL)                                                      // 错误检测
	{
		printf("文件打开失败!请先添加用户信息!\n");
		return;
		//	exit(0);
	}
	printf("请输入要查询的姓名:");
	scanf("%s",name);
	while (!feof(fp))  //从文件中读取
	{
		fscanf(fp, "%s %s %s %s %d", peopleI[i].name,  peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID, &peopleI[i].classNum);
		i++;     //记录行的个数
	}
	printf("\n");
	i--;
	test = i;  //保存 数据的行数
	for (; i >= 0; i--)
	{
		  //比较 输入的姓名  和文件中的姓名
		p=strcmp(name,peopleI[i].name);
		if (p==0)
		{
			sign = 1;  //判断 赋值1  代表找到 该数据
			printf("姓名%s,学号%s,联系电话%s,寝室%s,班级%d\n", peopleI[i].name, peopleI[i].IDnumber, peopleI[i].phone, peopleI[i].roomID,peopleI[i].classNum);
			printf("\n");	
			fclose(fp);  //关闭文件
			}
			else  //假如meiyou信息  再次写入文件
			{			
				fclose(fp);
			}
		}
	if (sign == 0)
	{
		printf("没找到该学生信息!\n请按任意键继续....");
		getchar();
	}
}
//===================================================================================
//判断文件是否为空
int NEW_oj()
{
	FILE* fp;

	fp = fopen("output.txt", " r");
	if (fp == NULL)
	{
		fp = fopen("output.txt", " w");
	}

	if (fgetc(fp) == EOF)
	{
		fclose(fp);
		return 0;
	}
	else
	{
		return 1;
		fclose(fp);
	}
}

//===================================================================================
//      各种UI界面显示
void UI_show1()
{
	int i;
	for (i = 0; i < 75; i++)   //数字  控制 上方 = 数量 
	{
		printf("=");
	}
	printf("\n");
	for (i = 0; i < 15; i++)
	{
		printf(" ");
	}
	printf("你正在添加通讯录学生信息,请根据提示输入信息。\n");
	for (i = 0; i < 75; i++)   //数字  控制 上方 = 数量 
	{
		printf("=");
	}
	printf("\n");

}
void UI_show2()
{
	int i;
	for (i = 0; i < 75; i++)   //数字  控制 上方 = 数量 
	{
		printf("=");
	}
	printf("\n");
	for (i = 0; i < 15; i++)
	{
		printf(" ");
	}
	printf("你正在修改通讯录学生信息,请根据提示输入信息。\n");
	for (i = 0; i < 75; i++)   //数字  控制 上方 = 数量 
	{
		printf("=");
	}
	printf("\n");

}
void UI_show3()
{
	int i;
	for (i = 0; i < 75; i++)   //数字  控制 上方 = 数量 
	{
		printf("=");
	}
	printf("\n");
	for (i = 0; i < 15; i++)
	{
		printf(" ");
	}
	printf("你正在删除通讯录学生信息,请根据提示输入信息。\n");
	for (i = 0; i < 75; i++)   //数字  控制 上方 = 数量 
	{
		printf("=");
	}
	printf("\n");
}
void UI_show4()
{
	int i;
	for (i = 0; i < 75; i++)   //数字  控制 上方 = 数量 
	{
		printf("=");
	}
	printf("\n");
	for (i = 0; i < 15; i++)
	{
		printf(" ");
	}
	printf("你正在使用通讯录查询功能,请根据提示输入信息。\n");
	for (i = 0; i < 75; i++)   //数字  控制 上方 = 数量 
	{
		printf("=");
	}
	printf("\n");

}
void UI_show5()
{
	int i;
	for (i = 0; i < 75; i++)   //数字  控制 上方 = 数量 
	{
		printf("=");
	}
	printf("\n");
	for (i = 0; i < 15; i++)
	{
		printf(" ");
	}
	printf("你正在使用按学号查找功能。\n");
	for (i = 0; i < 75; i++)   //数字  控制 上方 = 数量 
	{
		printf("=");
	}
	printf("\n");
}
void UI_show6()
{
	int i;
	for (i = 0; i < 75; i++)   //数字  控制 上方 = 数量 
	{
		printf("=");
	}
	printf("\n");
	for (i = 0; i < 15; i++)
	{
		printf(" ");
	}
	printf("你正在使用按姓名查找功能。\n");
	for (i = 0; i < 75; i++)   //数字  控制 上方 = 数量 
	{
		printf("=");
	}
	printf("\n");
}

int main()
{	
	int pan, p;	
	while (1)
	{
		p = NEW_oj();//判断用户文件是否为空
		if (p == 0)
		{
			printf("\n\n查询文件中未存在学生信息,请先进行信息录入!!!");
			printf("\n请按回车键,进入信息添加系统.....");
			getchar();
			NEW_in();
		}
		system("cls");  //清屏
		UI_show();    //调用 界面UI 显示
		scanf("%d", &pan);
		switch (pan)
		{
		case 1:NEW_in(); break;//通讯录学生信息添加
		case 2:OLD_adjust(); break;//通讯录学生信息修改
		case 3:OLD_delete(); break;//通讯录学生信息删除
		case 4:OLD_find(); break;//查询通讯录学生信息
		case 5:exit(0);  break;//退出系统
		default:printf("\n\t\t\t输入错误! 按回车键返回重新选择");//按键错误反馈
		}
		_getch();
		system("cls");//清屏
	}
	system("pause");
	return 0;
}



  • 10
    点赞
  • 107
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值