数据结构课程设计——电话号码查询系统(C语言)

这篇具有很好参考价值的文章主要介绍了数据结构课程设计——电话号码查询系统(C语言)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、项目实现的主要功能

1、通过文件导入和手动输入两种方式录入个人的基本信息(姓名、电话、QQ、微信)

2、可通过输入姓名或者电话号码来查询录入的人的基本信息

3、也可通过该系统修改和删除信息

2、操作界面演示

1、菜单界面

数据结构课程设计——电话号码查询系统(C语言)

 2、读取文件(这里需要先创建一个txt文件)

数据结构课程设计——电话号码查询系统(C语言)

 3、手动添加信息

数据结构课程设计——电话号码查询系统(C语言)

 4、查询个人信息

数据结构课程设计——电话号码查询系统(C语言)

 5、修改信息

数据结构课程设计——电话号码查询系统(C语言)

 6、删除信息

数据结构课程设计——电话号码查询系统(C语言)

 

3、代码介绍

1、利用结构体定义结点

typedef struct
{
	char name[20];        //姓名
	char number[20];      //电话号码
	char wechat[20];      //微信号
	char QQ[20];          //QQ号
}information;        //初始化要录入的个人信息的所有内容
typedef struct node
{
	information data;
	struct node *next;
}Elem,*Link;

2、手动输入信息和文件读取信息

在文件读取中需要自己先创建一个txt文件,并根据自己创建的文件修改代码中的文件路径

int Init(Link elem[13],Link elem2[13],int t)
{
	Link j,k,L,m;
	int i,p,q,r,a,b,c,d,e;
	for(i=0;i<t;i++)
	{
		L=(Link)malloc(sizeof(Elem));     //定义一个结点
		L->next=NULL;
		printf("请输入第%d个人的姓名:",i+1);
		scanf("%s",&L->data.name);
		printf("请输入第%d个人的电话号码:",i+1);
		scanf("%s",&L->data.number);
		printf("请输入第%d个人的微信号:",i+1);
		scanf("%s",&L->data.wechat);
		printf("请输入第%d个人的QQ号:",i+1);
		scanf("%s",&L->data.QQ);

		p=strlen(L->data.name);                    //用名字存储
		q=L->data.name[p-1];
		r=q%13;    //将初始化录入的人的姓名的最后一个字的ASCII码值对13求余,得到的结果存入相应的位置
		if(elem[r]->next==NULL)
		{
			elem[r]->next=L;
			L->next=NULL;
		}
		else
		{
			for(j=elem[r];j->next!=NULL;j=j->next);
			j->next=L;
			L->next=NULL;

		}
		//将用名字存储的方式得到的结点存入相应的位置
		a=strlen(L->data.number);       //用电话号码存储
		d=L->data.number[a-1];
		e=L->data.number[a-2];        //d,e分别获取电话号码的最后一位和倒数第二位
		b=d+10*e;
		c=b%13;        //通过计算他们的ASCII码值对13求余的结果存到相应的位置
		m=(Link)malloc(sizeof(Elem));
		m->next=NULL;
		m=L;
		if(elem2[c]->next==NULL)
		{
			elem2[c]->next=m;
			m->next=NULL;
		}
		else
		{
			for(k=elem2[c];k->next!=NULL;k=k->next);
			k->next=m;
			m->next=NULL;
		}
	}
	//将结点存入相应的位置
	printf("------------------信息录入完成!-----------------\n");
	printf("\n");
	return OK;

}
int Init2(Link elem[13],Link elem2[13])        //文件读写初始化
{
	Link j,k,L,m;
	char st[20];
	FILE *fp;
	int i,p,q,r,a,b,c,d,e,t;
		if((fp=fopen("d:\\test.txt","r"))==NULL)
		{
			printf("打开失败!\n");
			getchar();
			exit(0);
		}
		for(i=1;i<=3;i++)
		{
			L=(Link)malloc(sizeof(Elem));
			L->next=NULL;
			fgets(st,20,fp);
			t=strlen(st);
			st[t-1]='\0';
			memcpy(L->data.name,st,20);
			fgets(st,20,fp);
			t=strlen(st);
			st[t-1]='\0';
			memcpy(L->data.number,st,20);
			fgets(st,20,fp);
			t=strlen(st);
			st[t-1]='\0';
			memcpy(L->data.wechat,st,20);
			fgets(st,20,fp);
			t=strlen(st);
			st[t-1]='\0';
			memcpy(L->data.QQ,st,20);
			p=strlen(L->data.name);                    //用名字存储
			q=L->data.name[p-1];
			r=q%13;
			//将初始化录入的人的姓名的最后一个字的ASCII码值对13求余,得到的结果存入相应的位置
			if(elem[r]->next==NULL)
			{
				elem[r]->next=L;
				L->next=NULL;
			}
			else
			{
				for(j=elem[r];j->next!=NULL;j=j->next);
				j->next=L;
				L->next=NULL;
			}
			//将用名字存储的方式得到的结点存入相应的位置
			a=strlen(L->data.number);       //用电话号码存储
			d=L->data.number[a-1];
			e=L->data.number[a-2];        //d,e分别获取电话号码的最后一位和倒数第二位
			b=d+10*e;
			c=b%13;        //通过计算他们的ASCII码值对13求余的结果存到相应的位置
			m=(Link)malloc(sizeof(Elem));
			m->next=NULL;
			m=L;
			if(elem2[c]->next==NULL)
			{
				elem2[c]->next=m;
				m->next=NULL;
			}
			else
			{
				for(k=elem2[c];k->next!=NULL;k=k->next);
				k->next=m;
				m->next=NULL;
			}
		}
	//将结点存入相应的位置
	return OK;
}

3、两种查询方式

int searchname(Link elem[13],char name[20])          //用名字查找
{
	int a,b,c;
	Link d;
	a=strlen(name);
	b=name[a-1];
	c=b%13;
	//采用和存储相同的方法查找名字
	if(strcmp(elem[c]->next->data.name,name)==0)   //判断指针指向的名字与输入的名字是否相同,相同则返回0
	{
		printf("------------------以下为查找的人的所有信息--------------------\n");
		printf("姓名:%s\n",elem[c]->next->data.name);
		printf("电话号码:%s\n",elem[c]->next->data.number);
		printf("微信:%s\n",elem[c]->next->data.wechat);
		printf("QQ:%s\n",elem[c]->next->data.QQ);
	}        //输出所有的个人信息
	else
	{
		for(d=elem[c];d->next!=NULL;d=d->next)     //如果第一个结点不是,则需要通过移动到下一个结点的方式直至找到对应的信息
		{
			if(strcmp(d->next->data.name,name)==0)
			{
				printf("------------------以下为查找的人的所有信息---------------------\n");
				printf("姓名:%s\n",d->next->data.name);
				printf("电话号码:%s\n",d->next->data.number);
				printf("微信:%s\n",d->next->data.wechat);
				printf("QQ:%s\n",d->next->data.QQ);
				break;
			}
		}

		if(d->next==NULL)
			printf("不存在要找的元素!\n");
		//如果遍历到最后仍然没有相同的,则说明不存在要查找的元素
	}
	return OK;
}
 //用电话号码查找
int searchnumber(Link elem2[13],char number[20])          
{
	int a,b,c;
	Link d;
	a=strlen(number);
	b=number[a-1]+10*number[a-2];
	c=b%13;        //采用和存储号码相同的方式查找信息
	if(strcmp(elem2[c]->next->data.number,number)==0)//判断指针指向的电话号码和输入的电话号码的值是否相同
	{
		printf("------------------以下为查找的人的所有信息--------------------\n");
		printf("姓名:%s\n",elem2[c]->next->data.name);
		printf("电话号码:%s\n",elem2[c]->next->data.number);
		printf("微信:%s\n",elem2[c]->next->data.wechat);
		printf("QQ:%s\n",elem2[c]->next->data.QQ);
	}
	else
	{
		for(d=elem2[c];d->next!=NULL;d=d->next)   //依次遍历存储结构中的每一个结点
		{
			if(d->next->data.number==number)
			{
				printf("以下为查找的人的所有信息\n");
				printf("姓名:%s\n",d->next->data.name);
				printf("电话号码:%s\n",d->next->data.number);
				printf("微信:%s\n",d->next->data.wechat);
				printf("QQ:%s\n",d->next->data.QQ);
				break;
			}
		}
		if(d->next==NULL)
			printf("不存在要找的元素\n");
		//表明查找失败,不存在相应的信息
	}
	return OK;
}

4、修改信息

int change(char number1[20],char number2[20],Link elem2[13]) 
{        
	int a,b,c,f,g;
	Link e;
	a=strlen(number1);
	f=number1[a-1];
	g=number1[a-2];
	b=f+10*g;
	c=b%13;
	//修改信息之前要找到对应的要修改的信息的位置
	if(strcmp(elem2[c]->next->data.number,number1)==0)
	{
		memcpy(elem2[c]->next->data.number,number2,strlen(number2));
		printf("修改成功!\n");
	}
	else
	{
		for(e=elem2[c];e->next!=NULL;e=e->next)
		{
			if(strcmp(e->data.number,number1)==0)
			{
				memcpy(e->data.number,number2,strlen(number2));
				printf("修改成功!\n");
				break;
			}
		}
		//找到对应的电话号码并对其进行修改
		printf("不存在要修改的电话号码!\n");
	}
	printf("更改后的号码查询只能通过名字查找!\n");
	//表明查找失败不存在要修改的电话号码
	printf("\n");
	return OK;
}

5、删除信息

int numberdelete(char number[20],Link elem2[13])    
{
	int a,b,c,e,f;
	Link d,g;
	a=strlen(number);
	e=number[a-1];
	f=number[a-2];
	b=e+10*f;
	c=b%13;
	//要删除,也同样要先通过存储的方式查找到对应的电话号码
	for(d=elem2[c];d->next!=NULL;d=d->next)
	{
		if(strcmp(d->next->data.number,number)==0)
		{
			g=elem2[c]
			while(g->next!=d->next)
				g=g->next;

			if(g->next->next==NULL)
			{
				g->next=NULL;
				free(d->next);
				printf("删除成功!\n");
				break;
			}
			else
			{
				g->next=g->next->next;
				free(d->next);
				printf("删除成功!\n");
				break;
			}
			//查找到对应的号码对其进行删除
		}
	}
	printf("删除完的只能通过电话号码查找有效\n");
	printf("\n");
	return OK;
}

6、主函数文章来源地址https://www.toymoban.com/news/detail-511835.html

void main()     //主函数
{
	int j=0,selection,b,i,t;
	char z[4]="yes";
	Link elem[13],elem2[13];
	for(i=0;i<=12;i++)
	{
		elem[i]=(Link)malloc(sizeof(Elem));
		elem2[i]=(Link)malloc(sizeof(Elem));
		elem[i]->next=NULL;
		elem2[i]->next=NULL;
	}
	//定义两个数组用来存储姓名和电话
	char name[20],number[20],number1[20],number2[20],number3[20];
	while(j==0)
	{
		printf("----------------------------------------\n");
		printf("|           电话号码查询系统           |\n");
		printf("|--------------------------------------|\n");
		printf("|                                      |\n");
		printf("|             1.从文件导入信息         |\n");
		printf("|                                      |\n");
		printf("|             2.添加信息               |\n");
		printf("|                                      |\n");
		printf("|             3.查询                   |\n");
		printf("|                                      |\n");
		printf("|             4,修改信息               |\n");
		printf("|                                      |\n");
		printf("|             5.删除电话               |\n");
		printf("|                                      |\n");
		printf("|             6.退出系统               |\n");
		printf("|                                      |\n");
		printf("----------------------------------------\n");
		printf("请选择操作:");
		scanf("%d",&selection);
		switch(selection)
		{
			case 2:
			{
				printf("请输入要导入的人的个数:");
				scanf("%d",&t);
				Init(elem,elem2,t);
				//调用导入信息的函数
			}
			break;
		case 1:
			{
				Init2(elem,elem2);
				printf("--------------文件导入完成!---------------\n");
				printf("\n");
				//调用导入信息的函数
			}
			break;
		case 3:
			{
				printf("-----------------------------------\n");
				printf("   1.姓名查询         2.电话查询   \n");
				printf("-----------------------------------\n");
				//提供了两种方法查询信息
				printf("请选择查询方式:");
				scanf("%d",&b);
				if(b==1)
				{
					printf("请输入要查找的人的名字:");
					scanf("%s",name);
					printf("\n");
					searchname(elem,name);
					//调用查找姓名的函数
				}
				else
				{
					printf("请输入要查找的电话号码:");
					scanf("%s",number);
					searchnumber(elem2,number);
					//调用查找电话号码的函数
				}
			}
			break;

		case 4:
			{
				printf("请输入要修改的电话号码:");
				scanf("%s",number1);
				printf("请输入修改后的电话号码:");
				scanf("%s",number2);
				change(number1,number2,elem2);
				//调用修改电话号码的函数
			}
			break;

		case 5:
			{
				printf("请输入要删除的电话号码:");
				scanf("%s",number3);        //判断是否要执行删除操作
				printf("请确认是否删除(yes/no):");
				scanf("%s",z);        //判断字符数组中的元素与输入的是否一致
				if(strcmp(z,"yes")==0)
				{
					//执行删除操作
					numberdelete(number3,elem2);
				}
				else if(strcmp(z,"no")==0)
				{
					printf("已取消删除操作!\n");
				}
				else
				{
					printf("输入错误!\n");
				}
				//调用删除电话号码的函数
			}
			break;
		case 6:
			{
				j=1;
				printf("欢迎使用!\n");
				//令j等于1,让switch语句结束,也让整个程序结束
			}
			break;
		}
	}
}

到了这里,关于数据结构课程设计——电话号码查询系统(C语言)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 电话号码的组合

    电话号码的组合 力扣 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:digits = \\\"23\\\" 输出:[\\\"ad\\\",\\\"ae\\\",\\\"af\\\",\\\"bd\\\",\\\"be\\\",\\\"bf\\\",\\\"cd\\\",\\\"ce\\\",\\\"cf\\\"] 示例 2: 输

    2024年02月13日
    浏览(11)
  • 17. 电话号码的字母组合

    给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 示例 2: 示例 3: 提示: 0 = digits.length = 4 digits[i] 是范围 [\\\'2\\\', \\\'9\\\'] 的一个数字。 解答

    2024年02月15日
    浏览(14)
  • 电话号码的字母组合-算法

    按电话上数字与字母的对应关系,如2={a,b,c},3={d,e,f}等,给定一串数字如267,则求出abc,mno,qprs的所有组合,如amq,amp...cor,cos等 遍历都可以用回溯的方式尝试解决,每次遍历结束后,将上一层元素删除,满足长度,则加入到结果中      

    2024年01月22日
    浏览(16)
  • 正则表达式 - 电话号码

            正则表达式是描述一组字符串特征的模式,用来匹配特定的字符串。         写一个正则表达式匹配电话号码,并且括号、连字符或点号都是可选的。假定合规数据只包含以下15种匹配模式之一: xxxxxxx             8277019 xxx.xxxx            827.7019 xxx-xxxx      

    2023年04月23日
    浏览(10)
  • android 实现拨打电话号码。

    在拨打电话号码之前,预设一个B号码,正常使用电话时,本来输入的是A号码。实际拨打的是B号码。但是接听页面显示的是A号码。是不是比较绕,在android9之前,各厂商的实现不了,android7以下可以实现。但是现在很多机型最低都是11以上了。 兴趣使然,研究了几天,终于出

    2024年02月14日
    浏览(13)
  • 17. 电话号码的字母组合(回溯)

    从第一个数字开始遍历其对应的字母,将其加入StringBuffer中,继续深度优先搜索,当访问到最后一个数字的时候,将StringBuffer存储到ans中,然后回溯到下一个对应字母。 拓展: StringBuffer中的删除对应字符的方法是 deleteCharAt()

    2024年01月15日
    浏览(10)
  • 判断电话号码是否重复-excel

    有时候重复的数据不需要或者很烦人,就需要采取措施,希望以下的方法能帮到你。 方法一: 1)针对第一个单元格输入等号,以及公式countif(查找记录数的范围,需要查找的单元格) 2)输入enter之后,然后鼠标变为黑色的加号后,往下拉自动填充,如下图所示。 方法二:先

    2024年02月03日
    浏览(9)
  • Leetcode17电话号码的组合

    思路:用字典的形式保存号码的映射,实际组合是前一个数字串的组合加上后面一个数字的所有可能组合

    2024年02月10日
    浏览(14)
  • leetcode 17 电话号码字母组合

    给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:digits = “23” 输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”] 示

    2024年01月18日
    浏览(14)
  • leetcode:电话号码的字母组合(详解)

    给定一个仅包含数字  2-9  的字符串,返回所有它能表示的字母组合。答案可以按  任意顺序  返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 示例 2: 示例 3: 提示: 0 = digits.length = 4 digits[i]  是范围  [\\\'2\\\', \\\'9\\\']  的一个数字。  

    2024年02月11日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包