需求
制作一个电子通讯录,通过该通讯录能存入好友ID号、姓名(英文)、手机号码、家庭住址、公司电话。
模块
 主界面:主要显示软件功能。
A) 添加好友信息。
B) 列表好友信息。(包含排序功能)
C) 搜索好友
D) 删除好友
 添加好友:
用户输入INSERT命令后,让用户输入好友信息。添加成功或失败都需要提示用户
 列表好友:
用户输入DISPLAY命令后,好友信息升序排列。
 搜索好友:
用户输入SEARCH命令后,让用户输入将要搜索好友姓名查询。如果未搜索到请友好提示。如果搜索到,显示出该好友信息。
 删除好友:
用户输入DELETE命令后,让用输入将要删除好友姓名删除,如果存在同名的

多个好友,则列表出,所有同名的好友信息,让用户通过输入ID号删除。提示用户删除成功。

LinkList.h

#ifndef __LINKLIST_H__
#define __LINKLIST_H__#define FALSE 0
#define TRUE  1typedef struct _linkdata
{int id;char name[20];char phone_tel[20];char address[100];char compony_tel[20];
}LinkData;typedef struct _node
{LinkData data;struct _node *next;
}Node;Node *Create_List();int Insert_Last(Node *h,LinkData data);int Find_Name(Node *h,char *name);int Delete_Data(Node* h,char *name);int Get_Len(Node * h);void Display(Node *h);void interface();void write_data(Node* h);void read_data(Node* h);#endif //__LINKLIST_H__

LinkList.c

#include "LinkList.h"
#include <stdio.h>
#include <stdlib.h>Node *Create_List()
{Node *head = (Node *)malloc(sizeof(Node) / sizeof(char));if(head == NULL)return NULL;head->next = NULL;return head;
}int Insert_Last(Node *h,LinkData data)
{if(h == NULL)return FALSE;Node *node = (Node *)malloc(sizeof(Node) / sizeof(char));if (node == NULL){return FALSE;}node->data = data;node->next = NULL;Node *tmp = h;while(tmp->next){if(tmp->next->data.id == node->data.id){printf("\t\t\tid已存在添加失败\n");return FALSE;}tmp = tmp->next;}tmp->next = node;printf("\t\t\t添加成功!\n");return TRUE;
}int Find_Name(Node *h,char *name)
{if(h == NULL || name == NULL)return FALSE;Node *tmp = h->next;int count = 0;while(tmp){if(strcmp(tmp->data.name,name) == 0){printf("\t\t\t查找成功!\n");printf("\t\t\tid = %d,name = %s,phone_tel = %s,address = %s,compony_tel = %s\n",tmp->data.id,tmp->data.name,tmp->data.phone_tel,tmp->data.address,tmp->data.compony_tel);count++;}tmp = tmp->next;}if(count == 0){printf("\t\t\t该好友不存在!\n");return FALSE;}
}int Delete_Data(Node* h,char *name)
{if(h == NULL)return FALSE;Node *tmp = h;int count = 0;while(tmp->next){if(strcmp(tmp->next->data.name,name) == 0){printf("\t\t\tid = %d,name = %s,phone_tel = %s,address = %s,compony_tel = %s\n",\tmp->next->data.id,tmp->next->data.name,tmp->next->data.phone_tel,tmp->next->data.address,tmp->next->data.compony_tel);count++;           }tmp = tmp->next;}if(count == 0){printf("\t\t\t该好友不存在!\n");return FALSE;}else if(count == 1){tmp = h;while(tmp->next){if(strcmp(tmp->next->data.name,name) == 0)break;tmp = tmp->next;}if(tmp->next == NULL)return FALSE;Node *p = tmp->next;tmp->next = p->next;free(p);printf("\t\t\t删除成功!\n");}else{int id;printf("\t\t\t该名字好友不只一个,请输入id号删除:");scanf("%d",&id);tmp = h;while(tmp->next){if(strcmp(tmp->next->data.name,name) == 0 && tmp->next->data.id == id)break;tmp = tmp->next;}if(tmp->next == NULL)return FALSE;Node *p = tmp->next;tmp->next = p->next;free(p);printf("\t\t\t删除成功!\n");}return TRUE;
}int Get_Len(Node * h)
{if (h == NULL)return 0;Node *tmp = h;int count = 0;while (tmp->next){count++;tmp = tmp->next;}return count;
}void Display(Node *h)
{if(h == NULL)return;int len = Get_Len(h);int i,j;Node *temp;for(i = 0;i < len - 1;i++ ){Node *start = h;Node *end = h->next;for(j = 0;j < len - i - 1;j++){if(start->next->data.id > end->next->data.id){temp = end->next->next;end->next->next = start->next;start->next = end->next;end->next = temp;start = end->next;}else{start = start->next;end = end->next; }}}Node *tmp = h->next; int count = 0;while(tmp){printf("\t\t\tid = %d,name = %s,phone_tel = %s,address = %s,compony_tel = %s\n",\tmp->data.id,tmp->data.name,tmp->data.phone_tel,tmp->data.address,tmp->data.compony_tel);count++;tmp = tmp->next;}if(count == 0){printf("\t\t\t通讯录好友为空!\n");}
}void write_data(Node* h)
{FILE *fp = fopen("people", "wb");if (fp == NULL){perror ("fopen");return;}int count = 0;Node *tmp = h->next;while(tmp){count++;tmp = tmp->next;}tmp = h->next;fwrite(&count,sizeof(int),1,fp);int i;for(i = 0;i < count;i++){int len = sizeof(tmp->data);fwrite(&len,sizeof(int),1,fp);fwrite(&(tmp->data),sizeof(LinkData),1,fp);tmp = tmp->next;}fclose(fp);
}void read_data(Node* h)
{FILE *fp = fopen("people", "r");if (fp == NULL){perror ("fopen");return;}int count;fread(&count,sizeof(int),1,fp);int i;LinkData tmp;for(i = 0;i < count;i++){int len;fread(&len,sizeof(int),1,fp);fread(&tmp,len,1,fp);Insert_Last(h,tmp);}fclose(fp);
}void interface()
{system("clear");printf("\t\t\t|***********************************************|\n");printf("\t\t\t|                                               |\n");printf("\t\t\t|                电 子 通 讯 录                 |\n");printf("\t\t\t|                                               |\n");printf("\t\t\t|***********************************************|\n");printf("\t\t\t|    1) 添加好友信息   ||    2) 列表好友信息    |\n");printf("\t\t\t|***********************************************|\n");printf("\t\t\t|    3) 搜索好友       ||    4) 删除好友        |\n");printf("\t\t\t|***********************************************|\n");printf("\t\t\t|                    5)退出                     |\n");printf("\t\t\t|***********************************************|\n\n");printf("\t\t\t请输入你的操作(1-5):");
}

main.c

#include "LinkList.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{Node *head = Create_List();if(head == NULL){printf("创建失败\n");return -1;}read_data(head);while(1){interface();int choice = 0;int num;char ch;scanf("%d",&choice);if(choice == 1)//添加联系人{LinkData data;int id;char *name = (char *)malloc(sizeof(char)*20);char *phone_tel = (char *)malloc(sizeof(char)*20);char *address = (char *)malloc(sizeof(char)*20);char *compony_tel = (char *)malloc(sizeof(char)*20);while(1){printf("\t\t\t联系人id:");scanf("%d",&id);printf("\t\t\t联系人姓名:");scanf("%s",name);printf("\t\t\t手机号码:");scanf("%s",phone_tel);printf("\t\t\t地址:");scanf("%s",address);printf("\t\t\t公司电话:");scanf("%s",compony_tel);data.id = id;strcpy(data.name,name);strcpy(data.phone_tel,phone_tel);strcpy(data.address,address);strcpy(data.compony_tel,compony_tel);Insert_Last(head,data);printf("\t\t\t继续添加输入1,返回主界面输入2:");scanf("%d",&num);if(num == 2)break;elsecontinue;}}else if(choice == 2)//显示好友{Display(head);printf("\t\t\t返回主界面输入2:");scanf("%d",&num);if(num == 2)continue;}else if(choice == 3)//查找好友{while(1){char *name = (char *)malloc(sizeof(char)*20);printf("\t\t\t请输入要查找的姓名:");scanf("%s",name);Find_Name(head,name);printf("\t\t\t继续查找输入1,返回主界面输入2:");scanf("%d",&num);if(num == 2)break;elsecontinue;}      }else if(choice == 4)//删除好友{while(1){char *name = (char *)malloc(sizeof(char)*20);printf("\t\t\t请输入要删除的姓名:");scanf("%s",name);Delete_Data(head,name);printf("\t\t\t继续删除输入1,返回主界面输入2:");scanf("%d",&num);if(num == 2)break;elsecontinue;}      }else if(choice == 5){write_data(head);break;}else{printf("\t\t\t输入错误,请输入1-5的数字\n");printf("\t\t\t输入回车返回主界面\n");scanf("%c",&ch);scanf("%c",&ch);}}return 0;
}

项目一——电子通讯录相关推荐

  1. 基于JAVA的电子通讯录+源码+毕业设计+课程设计

    源码地址:JAVA+SQL+电子通讯录+源码+毕业设计 随着信息时代的到来,人们越来越注重通讯方式的快捷性和高效性.在这样的背景下,电子通讯录应运而生,成为人们生活中不可或缺的工具.在这篇文章中,我们 ...

  2. C语言实现简单的电子通讯录2

    这两天学完系统调用和标准IO,之前的通讯录可以进行一些改进,将数据保存到文件中(图我这里就不发了). 原理:每次启动程序时先从预设文件中以只读的形式读取保存的通讯录信息,然后将读取到的信息导入到结构体 ...

  3. 基于SpringBoot+Redis的JAVA+SQL电子通讯录系统

    基于SpringBoot+Redis的JAVA+SQL电子通讯录系统 1.包含源程序,数据库脚本.代码和数据库脚本都有详细注释. 2.课题设计仅供参考学习使用,可以在此基础上进行扩展完善 代码已经上传 ...

  4. uniapp小程序项目中实现通讯录功能

    最近小程序项目需求有通讯录这样的需求 简单效果图是这样的 首先,我们需要调后台接口获取姓名还有其他信息,将获取回来的中文名字转换为拼音,这里做的是转为姓名首字母大写的简写格式(比如:"安其拉 ...

  5. JAVA电子通讯录项目报告_基于jsp的通讯录-JavaEE实现通讯录 - java项目源码

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的通讯录, 该项目可用各类java课程设计大作业中, 通讯录的系统架构分为前后台两部分, 最终实现在线上进行通讯录各 ...

  6. IT软件行业用契约锁实现“代理-销售-投标-项目-合作”电子签

    IT软件行业产品销售渠道多.销售订单体量大,从产品研发.销售到项目实施,伴随着大量的协议.合同.单据需要与员工.客户或者经销商签署.引入电子签章,化解纸质合同签署带来的效率.成本.安全等问题,成为软件 ...

  7. 从零开发一个非常有意思的 Python 项目:电子考勤系统

    今天给大家分享一个比较有意思的Python应用,用 Python 写了一个电子考勤系统,源码已在文章全部给出,记得点赞收藏哦- 文章目录 项目简介 技术交流 答题要求 附加功能 导入模块 加载数据 登 ...

  8. 出口电子烟需要做那些常规的检测认证项目,电子烟的认证标准是什么?

    电子烟的健康问题,会造成包括释放有害物质,尼古丁成瘾等危.害.电子烟号称无危害.可代替香烟从而达成戒烟,在年轻一代中收到追捧.中国目前为电子烟最大的生产国和出口国,供应全球90%以上的需求. 那么电子 ...

  9. 个人小项目——飞聊通讯录V1.0小结

    设计一个简单的通讯录,实现管理员对通讯录的管理,包括添加一条通讯记录,根据id修改对应的记录信息,根据id删除一条记录,根据id显示一条记录的详细信息.每个页面都要有命令提示信息. 具体要求 1. 系 ...

  10. 电商项目之电子账户的收单模式

    文章目录 1 问题背景 2 前言 3 什么是电子账户支付方式 4 什么是收单模式 5 电子账户有哪些收单模式 5.1 Direct Pay模式 5.2 Auth Capture模式 5.3 ESCOW ...

最新文章

  1. Hibernate配置(2)
  2. UI基础篇-iOS中简单图片浏览器的实现
  3. 显示android缓存文件,android – 使用ACTION_VIEW在缓存目录中打开文件
  4. Leetcode - 169. Majority Element (多数投票问题)
  5. PostMessage发送字符串和结构体
  6. mysql资质_MySQL语句与Java代码实现按需过滤企业员工的资质证书
  7. oracle dg物理和逻辑,Oracle DG介绍(物理无实例)
  8. mysql分组失效_请教MySql中使用表子查询时,试着先排序后分组,出现排序失效的原因?...
  9. dw怎么修改html框架的宽度,Dreamweaver (dw)cs6中div标签宽度和高度设置方法
  10. Ubuntu中让SSH自动重连
  11. linux 添加deepin ppa,Deepin 添加PPA源问题
  12. ETL PostgreSQL in Oracle ODI 12c
  13. Android Studio 编译输出中文乱码的解决办法
  14. linux台式机双屏幕怎么连接,台式机Linux/Unix多系统安装详细教程
  15. BZOJ 3991 set维护dfs序
  16. java 拍照后加上日期水印_有什么软件能批量给照片添加拍照日期的水印?
  17. 怎么在搜索计算机学报的论文,计算机学报方面论文题目 计算机学报论文标题如何定...
  18. 香农公式说明了什么_香农公式理解
  19. 计算机某浏览器设置主页地址,如何查看电脑中的浏览器主页是被什么软件修改的...
  20. BFM-总线功能模型

热门文章

  1. gitLab私服-转帖记录
  2. 【selenium】126官网邮箱登录
  3. python对大小写敏感吗_python中对于大小写是否敏感
  4. 如何利用任意波形发生器创建你想要的波形并输出
  5. Child returned status 1问题解决
  6. LIFT:Learned Invariant Feature Transform
  7. js实现中文简繁切换效果
  8. C 龟兔赛跑题目:T分钟后乌龟和兔子谁跑得快?
  9. vue echarts柱状统计图,多组数据对比
  10. java中gc是什么_java什么是gc