大学C语言课程设计(手机通讯录系统)

课程设计要求
在主函数中读入原始数据文件的内容,保存在对应的结构体数组中,然后显示菜单,利用菜单调用各个函数,分别完成如下功能:
1) 实现查询显示功能:①按姓名查询 ②按分组查询 ③显示当前通讯录全部信息。将满足查询条件的记录显示在屏幕上。
2) 实现添加功能:能录入新数据,当要录入了新数据的时候,首先判断该号码是否存在,如果不存在,则提示可进行数据录入并可依次输入姓名等信息。
3) 实现修改功能:选中某个人的姓名时,可以对此人的相应数据进行修改。
4) 实现删除功能:选中某个人的姓名时,可将此人的相应数据进行删除。
5) 实现排序功能:按姓名排序。将排序后的结果显示在屏幕上。

(我所用的编译软件是DEV-C++,- 编译器版本: TDM-GCC 4.9.2 64-bit Debug,运行代码若遇错误,把编译器换成这个版本即可)
—————————————————————————————————
话不多说直接上代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int num;//全局变量用来存放txt文件信息的行数 
//创建结构体存放信息
struct Info{
	char name[16];//姓名 
	char worktel[20];//工作电话 
	char hometel[20];//家庭电话 
	char mobeltel[20];//移动电话 
	char sex[10];//性别 
	char group[10]; //分组 
}a[20];//创建Info类型数组用来存储20条信息

//判断当前文件有几行数据
int  r_num(){
	int l=0;
	char c;
    FILE *fp=fopen("LN.txt", "r");
    while((c=fgetc(fp)) != EOF)
		if(c=='\n')
			l++;
    	l++;
    return(l);//l传参 
}

//读出txt内容保存到结构体中
void Read_txt(){
	FILE *fp; 
	int i,count;
	count = r_num();
	fp = fopen("LN.txt","r");
	for(i=0;i<count;i++){
		fscanf(fp,"%s%s%s%s%s%s",&a[i].name,&a[i].worktel,&a[i].hometel,&a[i].mobeltel,&a[i].sex,&a[i].group);
	}
	fclose(fp);
}

//插入信息
void Insert_Info1(int i){ 
	printf("姓名:");
	scanf("%s",a[i].name);
	printf("工作电话:");
	scanf("%s",a[i].worktel);
	printf("家庭电话:");
	scanf("%s",a[i].hometel);
	printf("移动电话:");
	scanf("%s",a[i].mobeltel);
	printf("性别:");
	scanf("%s",a[i].sex);
	printf("分组:");
	scanf("%s",a[i].group);
	num=num+1;
}
//新增联系人信息
void Insert_Info(int num){
	int i,count,flag=0;
	char name[20]; 
	printf("请输入要新增的姓名:");
	gets(name);
	for(i=1;i<20;i++){
		if(strcmp(name,a[i].name)==0){
			printf("联系人已存在!\n");
			flag=1;
			break;
		}
	}
	if(flag!=1){ 
		Insert_Info1(num);
	}
} 
//删除联系人 
void Delete_Info(){
	char name[20];
	printf("输入要删除的姓名:");
	gets(name);
	int i,flag=0;
	for(i=1;i<20;i++){
		if(strcmp(name,a[i].name)==0){
			for(;i<20;i++){
				strcpy(a[i].name,a[i+1].name);
				strcpy(a[i].worktel,a[i+1].worktel);
				strcpy(a[i].hometel,a[i+1].hometel);
				strcpy(a[i].mobeltel,a[i+1].mobeltel);
				strcpy(a[i].sex,a[i+1].sex);
				strcpy(a[i].group,a[i+1].group);
			}
			flag=1;
			printf("删除成功!\n");
		}
	}
	if(flag!=1){
		printf("没找到!\n");
	}
} 
//修改功能函数 
void Update_Info(int num){
	char name[20];
	printf("输入要修改的姓名:");
	gets(name);
	int i,flag=0;
	for(i=0;i<num;i++){
		if(strcmp(name,a[i].name)==0){
			printf("请输入新的信息:\n");
			printf("姓名:");
			scanf("%s",a[i].name);
			printf("工作电话:");
			scanf("%s",a[i].worktel);
			printf("家庭电话:");
			scanf("%s",a[i].hometel);
			printf("移动电话:");
			scanf("%s",a[i].mobeltel);
			printf("性别:");
			scanf("%s",a[i].sex);
			printf("分组:");
			scanf("%s",a[i].group);
			printf("修改成功!\n");
			flag=1;
			break;
		}
	}
	if(flag!=1){
		printf("没找到!\n");
	}
	
} 
//输出信息
void Input_Info(int i){
	printf("%s\t",a[i].name);
	printf("%s\t",a[i].worktel);
	printf("%s\t",a[i].hometel);  
	printf("%s\t",a[i].mobeltel);
	printf("%s\t",a[i].sex);
	printf("%s\t",a[i].group);
	printf("\n");
} 

//按姓名查询
void Search_Name(){
	int i,count,flag=0;
	count=r_num(); 
	char name[16];
	printf("请输入要查询的名字:");
	gets(name);//接收输入的名字存放到name数组中 
	for(i=1;i<count;i++){
		if(strcmp(name,a[i].name)==0){
			Input_Info(i);
			flag=1;
		}
	}
	if(flag!=1){
		printf("没找到!\n");
	}
} 
//按分组查询
void Search_Group(){
	int i,count,flag=0;
	count=r_num(); 
	char group[16];
	printf("请输入要查询的分组:");
	gets(group);//接收输入的分组名存放到group数组中 
	for(i=1;i<count;i++){
		if(strcmp(group,a[i].group)==0){
			Input_Info(i);
			flag=1;
		}
	}
	if(flag!=1){
		printf("没找到!\n");
	}
	
}
//显示全部全部内容 
void Show_ALL(int num){
	int i;
	for(i=0;i<num;i++){
		printf("%8s %11s %11s %11s %4s %5s\n",a[i].name,a[i].worktel,a[i].hometel,a[i].mobeltel,a[i].sex,a[i].group);
	}
	printf("______________________________________\n");
	printf("\n");
	printf("当前共有%d条记录!\n",num-1);
	printf("\n");
}
//将结构体数组中的内容存放到txt文件中
void Write_txt(int num){
	int i;
	FILE *fp;
	if((fp=fopen("LN.txt","wt"))==NULL){
		printf("cannot open file\n");
		return;
	}
	for(i=0;i<num;i++){
		fprintf(fp,"%s %s %s %s %s %s\n",&a[i].name,&a[i].worktel,&a[i].hometel,&a[i].mobeltel,&a[i].sex,&a[i].group);
	}
	fclose(fp);
}
 
//按照姓名排序(冒泡法)
void name_sort(int n)
{
	int i,j;
	struct Info temp;
	for(i=0;i<n;i++)
	{
		for(j=1;j<n-1-i;j++)
		{
			if(strcmp(a[j].name,a[j+1].name)>0)
			{
				temp =a[j+1];
				a[j+1]=a[j];
				a[j]=temp;
 
			}
		}
	}
}

//程序主界面 
void menu(void){

	int com;
	printf("\n");
	printf("--------------菜单----------------\n");
	printf("                                  \n");
	printf("        1.新增联系人              \n");
	printf("        2.删除联系人              \n");
	printf("        3.修改联系人信息          \n");
	printf("        4.按姓名查询              \n");
	printf("        5.按分组查询              \n");
	printf("        6.显示全部信息            \n");
	printf("        7.按姓名排序              \n");
	printf("        8.清除屏幕信息            \n");
	printf("        9.保存当前操作到txt文件   \n");
	printf("        10.退出                    \n");
	printf("\n");
	printf("----------------------------------\n");
}

//主函数 
int main(){
	Read_txt();
	menu();
	int com;
	num=r_num();
	while(printf("请输入功能代码:")&&(scanf("%d",&com))&&(com!=11)){
		fflush(stdin);
		switch(com){
			case 1:
				Insert_Info(num);
				break;
			case 2:
				Delete_Info();
				num=num-1;
				break;
			case 3:
				Update_Info(num);
				break;
			case 4:
				Search_Name();
				break;
			case 5:
				Search_Group();
				break;
			case 6:
				Show_ALL(num);
				break;
			case 7:
				name_sort(num);
				break;
			case 8:
				system("cls");
				menu(); 
				break;
			case 9:
				Write_txt(num);
				break;
			case 10: 
				printf("感谢使用!再见!!!");
				exit(0);
		}
	}
}
  • 8
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
好的,以下是一个简单的C语言程序设计通讯录管理系统: 1. 存储通讯录信息 定义一个结构体存储通讯录信息,包括姓名、电话、邮箱等信息,使用数组存储多个通讯录信息。 ``` #define MAX_CONTACTS 100 // 最多存储100个通讯录信息 struct contact { char name[50]; char phone[20]; char email[50]; }; struct contact contacts[MAX_CONTACTS]; // 存储通讯录信息的数组 int num_contacts = 0; // 当前存储的通讯录信息数量 ``` 2. 添加通讯录信息 定义一个函数用于添加通讯录信息,将输入的信息存储到数组中。 ``` void add_contact() { if (num_contacts >= MAX_CONTACTS) { printf("通讯录已满,无法添加新的联系人。\n"); return; } struct contact new_contact; printf("请输入联系人姓名:"); scanf("%s", new_contact.name); printf("请输入联系人电话:"); scanf("%s", new_contact.phone); printf("请输入联系人邮箱:"); scanf("%s", new_contact.email); contacts[num_contacts++] = new_contact; printf("联系人信息添加成功!\n"); } ``` 3. 查找通讯录信息 定义一个函数用于查找通讯录信息,可以按照姓名、电话、邮箱等方式查找通讯录信息。 ``` void search_contact() { char keyword[50]; printf("请输入要查找的关键字:"); scanf("%s", keyword); int found = 0; for (int i = 0; i < num_contacts; i++) { struct contact c = contacts[i]; if (strstr(c.name, keyword) || strstr(c.phone, keyword) || strstr(c.email, keyword)) { printf("联系人姓名:%s\n", c.name); printf("联系人电话:%s\n", c.phone); printf("联系人邮箱:%s\n", c.email); found = 1; } } if (!found) { printf("未找到匹配的联系人信息。\n"); } } ``` 4. 显示所有通讯录信息 定义一个函数用于显示所有存储的通讯录信息。 ``` void display_contacts() { if (num_contacts == 0) { printf("通讯录为空,无法显示联系人信息。\n"); return; } for (int i = 0; i < num_contacts; i++) { struct contact c = contacts[i]; printf("联系人姓名:%s\n", c.name); printf("联系人电话:%s\n", c.phone); printf("联系人邮箱:%s\n", c.email); printf("\n"); } } ``` 以上是一个简单的C语言程序设计通讯录管理系统,包括存储、添加、查找、显示通讯录信息等功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值