1、项目实现的主要功能

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

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

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

2、操作界面演示

1、菜单界面

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

3、手动添加信息

4、查询个人信息

5、修改信息

6、删除信息

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、主函数

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语言)相关推荐

  1. 《程序设计综合设计》课程设计--电话号码查询系统

    2.问题描述 1.设每个记录有下列数据项:电话号码.用户名.地址: 2.从键盘输入各记录,分别以电话号码和用户名为关键字建立哈希表: 3.查找并显示给定电话号码的记录: 4.查找并显示给定用户名的记录 ...

  2. java编程电话号码查询_java课程设计电话号码查询系统(15页)-原创力文档

    山东建筑大学 Java 课程设计报告 设计题目 电话号码查询系统 学生姓名黄瑜 学号 2010121187 专业班级信计101 指导教师 王文 1 1 1.设计目的 1.通过JAVA 课程设计,使大家 ...

  3. 数据结构课程设计——地铁查询系统 JAVA

    项目源码:地铁查询系统 1.地铁查询系统功能介绍 系统的主要功能包括线路查询,站点信息查询,线路查询,保存和读取信息.具体说明如下: 线路查询:查询某条线路的票价,首班时间,末班时间,所有途径站点. ...

  4. 数据结构课程设计 ——考试报名系统

    数据结构课程设计 --考试报名系统 一.项目功能要求 完成对考生信息的建立,查找,插入,修改,删除等功能.其中考生信息包括准考证号,姓名,性别,年龄和报考类别等信息.项目在设计时应首先确定系统的数据结 ...

  5. python通讯录管理系统设计_数据结构课程设计-通讯录管理系统(C语言版)

    ##数据结构课程设计-通讯录管理系统 一,前言 自从上次C语言课设写完后,这次数据结构课设就写的游刃有余了,很快啊,不足三天就写完了它(年轻人不讲武德),如果你认真看过我之前写的C语言课程设计-球队管 ...

  6. 数据结构课程设计——机票售卖系统(C++)

    引言 这学期最后的数据结构课程设计需要我们完成一个简单的小程序,我选择了一个机票售卖系统,实现了一些基本的功能:因为时间给的比较短,又赶在复习周补课,所以并没有什么突出的地方,我就在这里聊聊我的代码实 ...

  7. 数据结构课程设计 校园导游系统 c++

    元旦前后利用几天时间完成了数据结构课程设计,学期初计划搞一个*精美* 些的课程设计,最后还是一拖再拖,到最后只来得及实现些基本功能. 团队协作完成,所以代码风格不尽相同. 另外才疏学浅,若有错误恳请不 ...

  8. C语言数据结构课程设计-校园导游系统

    倾心原创,转载请备注原文地址,谢谢. 主要内容: 用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号.名称.简介等信息,图中的边表示景点间的道路,存放路径长度等信息.要求能够 ...

  9. C语言课程设计——图书馆查询系统

    为了方便图书查询,我们编写了这个图书馆查询系统,通过将图书的信息输入进这个系统,我们便可以直到图书的相关情况.图书管理员存入图书信息,使用者可以通过选项实现查询图书借阅信息,借取图书,归还图书,查看图 ...

  10. c语言课程设计商品销售系统,c语言课程设计商品销售管理系统.pdf

    C语言课程设计商 品销售管理系统 1 2020 年 4 月 19 日 文档仅供参考 商品销售管理系统 目录 一. 需求分析 2 二.概要设计 2 三.详细设计 4 四.调试分析 14 五.用户手册 1 ...

最新文章

  1. 利用Proceesson在线绘制流程图实例演练!流程图的要点和注意事项说明
  2. Java--Servlet,@ServletSecurity,role,username,password
  3. C语言中用函数实现录入信息模块,C语言程序设计用函数实现模块化程序设计(73页)-原创力文档...
  4. html如何将多个复选框组织成一组_[Selenium]18.如何处理一组元素
  5. asp.net php 哪个好,ASP.NET、JSP和PHP究竟哪个好
  6. 省选+NOI 第四部分 图论
  7. 1.10 编程基础之简单排序 06 整数奇偶排序 python
  8. 微软对 Windows 10 Mobile 的支持将于12月10日结束
  9. Qt总结之九:QMap中嵌套QList
  10. JAVA bean与XML互转的利器---XStream
  11. #565. 「LibreOJ Round #10」mathematican 的二进制(期望 + 分治NTT)
  12. 【LeetCode】【字符串】题号:*434. 字符串中的单词数
  13. DEV-C++官方下载地址
  14. android模拟win98中文版,Win98模拟器
  15. python爬取设置了权限的qq空间_日常用Python来监控女神QQ空间!就算他把我屏蔽,也阻止不了我!-qq空间怎么设置访问权限...
  16. 5. 强化学习之——策略优化
  17. openid php steam,Steam OpenID签名验证
  18. ORB-SLAM2跑TUM RGBD数据集时灰屏卡住
  19. 【随心所记】矩阵A的行列式不等于0,是A可逆的充要条件吗?答:是这样的
  20. ubuntu忘记mysql密码,怎么办

热门文章

  1. 手机计算机里面的符号代表什么意思,计算器上的符号各代表什么意思?
  2. HTML5堆木头游戏
  3. JVM 参数学习--实际参数设置
  4. 挺进商用车自动驾驶,德赛西威与MAXIEYE联合发布“九逵计划”
  5. 原生JS实现记忆翻牌小游戏
  6. Git子模块使用-管理多个git项目
  7. linux 源码 调试,Linux基础-源代码编译和调试.ppt
  8. 不改变图片尺寸,将图片内存调大
  9. 台湾成功大学起诉苹果Siri专利侵权 库克哥凌乱了
  10. 医院新手入门(一)--医保知识