在C语言的学习过程中,经常会让我们自己编写一个小项目,其中,通讯录的编写就是其中的一个经典作业。下面我就献上自己编写的通讯录代码。

注:本程个人亲测有效,没有任何问题,可以实现以下的基本的功能。

1:添加个人信息;

2:查询个人信息,可供两种选择方法,一种按姓名查询,一种按电话号码查询;

3:删除个人信息;

4:修改个人信息;

5:实现信息排序;

6:输出全部信息;

7:采用文件形式对通讯录进行操作,包括  写入文件 和  读取文件  ,从而保证能对添加的联系人进行保存。即在下一次打开vim编辑器的时候,依旧能看到上次添加的联系人的相关信息。

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define FALSE 0
#define TRUE 1
#define MAXSIZE 20
typedef int Status;
typedef char Elemtype;
typedef struct Node
{Elemtype name[MAXSIZE];Elemtype number[MAXSIZE];Elemtype sex[MAXSIZE];struct Node *next;
}Node;
typedef Node *Linklist;Status Inserlist(Linklist *Lp);  //插入联系人
void  Initlist(Linklist *Lp);//对链表进行初始化
void mydisplay(Linklist *Lp); //显示通讯录
void Deletelist(); //删除联系人
Status Findlist(Linklist *Lp); //查找联系人
void Reviselist(); //修改联系人
Status Sortlist();//对通讯录进行排序
Status Length();//判断文件字符个数
void savelinkman();//保存链表中的结点到文件
void loadlinkman(Linklist Lp);//加载联系人int main()
{printf("*************************\n");Linklist Lp;Initlist(&Lp);loadlinkman(Lp);//调用加载联系人到链表的函数,确保显示联系人的时候,链表不为空int sel;Elemtype a[MAXSIZE],b[MAXSIZE];while(1){printf("\t\tmenu: \n");printf("\t\t1:添加联系人\n");printf("\t\t2:查找联系人\n");printf("\t\t3:删除联系人\n");printf("\t\t4:修改联系人\n");printf("\t\t5:显示联系人\n");printf("\t\t6:对通讯录进行排序\n");printf("\t\t7:保存并退出通讯录\n");printf("请输入要执行的功能所对应的序号,以回车键结束!\n");scanf("%d",&sel);getchar();switch(sel){case 1:Inserlist(&Lp);printf("*************************\n");//无实际意义,仅为输出界面美化break;case 2:Findlist(&Lp);printf("*************************\n");break;case 3:Deletelist(&Lp);printf("*************************\n");break;case 4:Reviselist(&Lp);printf("************************\n");break;case 5:mydisplay(&Lp);printf("*************************\n");break;case 6:Sortlist(&Lp);printf("**************************\n");break;case 7:printf("*************************\n");savelinkman(Lp);system("clear");printf("成功退出!\n联系人已保存!\n");return;default:break;   }}return 0;
}/***********初始化***********/
void  Initlist(Linklist *Lp)
{Node *p=(Node *)malloc(sizeof(Node));if (p==NULL){printf("申请失败");return;}else{*Lp=p;p->next==NULL;}
}/************添加联系人***********/
Status Inserlist(Linklist *Lp)//添加联系人
{Node *p=(Node *)malloc(sizeof (Node));if(p==NULL){printf("申请失败");return FALSE;}else{Elemtype a[MAXSIZE];Elemtype b[MAXSIZE];Elemtype c[MAXSIZE];printf("请输入要保存的联系人名字:\n");scanf("%s",a);printf("请输入要保存的联系人号码:\n");scanf("%s",b);printf("请输入要保持的联系人性别:\n");scanf("%s",c);Linklist L=*Lp;while(L!=NULL && L->next!=NULL){L=L->next;}strcpy(p->name,a);strcpy(p->number,b);strcpy(p->sex,c);L->next=p;p->next=NULL;}
}/***********显示通讯录*********/
void mydisplay(Linklist *Lp)//显示通讯录
{printf("姓名           号码          性别 \n");Linklist l=(*Lp)->next;while(l!=NULL){printf("%-15s%-15s%-15s\n",l->name,l->number,l->sex);l=l->next;}
}/************查找联系人***********/
Status Findlist(Linklist *Lp)//查找联系人
{printf("请输入查询方式:\n 1:按姓名查询\n 2:按电话号码查询\n");int c=0;int sel;Elemtype a[MAXSIZE];Elemtype b[MAXSIZE];while(1){scanf("%d",&sel);getchar();switch(sel){case 1 :printf("请输入要查询的联系人姓名:\n");scanf("%s",a);Linklist p=(*Lp)->next;while(p!=NULL){if(strcmp(p->name,a)==0){printf("姓名           号码          性别\n");printf("%-15s%-15s%-15s\n",p->name,p->number,p->sex);c=1;}p=p->next;}if(c==0){printf("该联系人不存在的哟!\n");}return;case 2 :printf("请输入要查询人的电话号码:\n");scanf("%s",b);Linklist q=(*Lp)->next;while(q!=NULL){if(strcmp(q->number,b)==0){printf("姓名           号码          性别\n");printf("%-15s%-15s%-15s\n",q->name,q->number,q->sex);c=1;}q=q->next;}if(c==0){    printf("该电话号码不存在的哟!\n");}return;default :printf("无此查询方式\n");return;}}
}/*************删除联系人**************/
void Deletelist(Linklist *Lp)//删除联系人
{if( (*Lp)->next==NULL ){printf("当前通讯录为空,无法执行!\n");}else{ int b=0;Elemtype a[MAXSIZE];printf("请输入要删除的联系人\n");scanf("%s",a);Linklist q;Linklist p=*Lp;while(p!=NULL && p->next!=NULL){if(strcmp(p->next->name,a)==0){q=p->next;p->next=p->next->next;free(q);b=1;}p=p->next;}if(b==0)//判断循环是否执行,没执行的话,说明该联系人不存在。printf("该联系人不存在的哟!\n");}
}/***********修改联系人***********/
void Reviselist(Linklist *Lp)//修改联系人
{Node *q=(Node *)malloc(sizeof (Node));if(q==NULL){printf("申请失败");}if((*Lp)->next==NULL){printf("当前通讯录为空,无法执行!\n");}else{int i=0;Elemtype a[MAXSIZE];Elemtype b[MAXSIZE];Elemtype c[MAXSIZE];Elemtype d[MAXSIZE];printf("请输入要修改的联系人姓名:\n");scanf("%s",a);Linklist h;Linklist p=*Lp;while(p!=NULL && p->next!=NULL){if(strcmp(p->next->name,a)==0){printf("请输入修改后的联系人姓名:\n");scanf("%s",b);printf("请输入修改后的联系人号码:\n");scanf("%s",c);printf("请输入修改后的联系人性别:\n");scanf("%s",d);strcpy(q->name,b);strcpy(q->number,c);strcpy(q->sex,d);h=p->next;q->next=p->next->next;p->next=q;free(h);i=1;}p=p->next;}if(i==0)printf("你要修改的联系人不存在的哟!\n");}
}/**********对联系人进行排序***********/
Status Sortlist(Linklist *Lp)//使用冒泡排序对通讯录进行排序
{if(*Lp==NULL){printf("当前通讯录为空!\n");return FALSE;}char name[20];Node tmp,*r,*p,*q;r=(*Lp)->next;while(r){p=r;q=r->next;while(q){if(( strcmp(p->name,q->name)>0 )){strcpy(tmp.name,q->name);strcpy(q->name,p->name);strcpy(p->name,tmp.name);strcpy(tmp.number,q->number);strcpy(q->number,p->number);strcpy(p->number,tmp.number);strcpy(tmp.sex,q->sex);strcpy(q->sex,p->sex);strcpy(p->sex,tmp.sex);}q=q->next;}r=r->next;}printf("姓名           号码          性别\n");Linklist l=(*Lp)->next;while(l!=NULL){printf(" %-15s%-15s%-15s\n",l->name,l->number,l->sex);l=l->next;}return TRUE;
}Status Length(FILE *f)  //文件字符个数
{int length;fseek(f,0,2);length = ftell(f);rewind(f);return length;
}void savelinkman(Linklist Lp)  //保存链表中的各节点到文件
{FILE *file=fopen("通讯录","w+");if(file==NULL){perror("fopen1");exit(1);}char name[MAXSIZE]={0};char number[MAXSIZE]={0};char sex[MAXSIZE]={0};Linklist temp = Lp;while(temp->next!=NULL){strcpy(name,temp->next->name);strcpy(number,temp->next->number);strcpy(sex,temp->next->sex);if(fwrite(name,sizeof(char),20,file)==EOF){perror("fwrite1");fclose(file);exit(2);}if(fwrite(number,sizeof(char),20,file)==EOF){perror("fwrite2");fclose(file);exit(3);}if(fwrite(sex,sizeof(char),20,file)==EOF){perror("fwrite3");fclose(file);exit(4);}memset(name,0,20);memset(number,0,20);memset(sex,0,20);temp=temp->next;}fclose(file);
}void loadlinkman(Linklist Lp)  //加载文件中的联系人到链表中
{FILE *file=fopen("通讯录","a+");if(file==NULL){perror("fopen2");fclose(file);exit(5);}char buffer1[MAXSIZE]={0};char buffer2[MAXSIZE]={0};char buffer3[MAXSIZE]={0};int len=Length(file);int i=0;while(i<(  len/(3*MAXSIZE) ) ){if(fread(buffer1,sizeof(char),20,file)==EOF){perror("fread1");fclose(file);exit(6);}if(fread(buffer2,sizeof(char),20,file)==EOF){perror("fread2");fclose(file);exit(7);}if(fread(buffer3,sizeof(char),20,file)==EOF){perror("fread3");fclose(file);exit(8);}Linklist p=(Linklist)malloc(sizeof(Node));if(p==NULL){return;}else {strcpy(p->name,buffer1);strcpy(p->number,buffer2);strcpy(p->sex,buffer3);memset(buffer1,0,20);memset(buffer2,0,20);memset(buffer3,0,20);Linklist temp=Lp;while(temp->next!=NULL){temp=temp->next;}temp->next=p;p->next=NULL;}i++;}
}

ps:都是本人一个一个码的,希望能够相关学习的小伙伴提供一些参考,而不是照抄照搬,代码的能力培养永远与自己敲代码的行数成正相关。

最后,希望走过路过的给个赞呗,哈哈(标准式吆喝!)

C语言程序设计之通讯录相关推荐

  1. c语言程序设计课程设计通讯录,《C语言程序设计》课程设计-通讯录系统(42页)-原创力文档...

    <C语言程序设计>课程设计 学 学 号:________ 姓 名:____ 指导教师:_________ 完成日期:2010.07.03 ______________学校______系__ ...

  2. c语言通讯录二分查找,C语言程序设计 通讯录程序.doc

    <C语言程序设计 通讯录程序.doc>由会员分享,可在线阅读,更多相关<C语言程序设计 通讯录程序.doc(28页珍藏版)>请在人人文库网上搜索. 1.目录:课 程 设 计 任 ...

  3. 【C语言进阶】C语言程序设计:动态通讯录(顺序表实现)

    目录 动态通讯录的实现 一.实验的目的和意义 二.实验内容描述 三.功能描述 四.数据结构 1.三大模块 2.结构设计 3.动态开辟 4.文件操作 5.主要函数 五.流程图及模块算法 1.Contac ...

  4. C语言程序设计:可存储的通讯录

    前言:本章没有使用链表! C语言从入门到精通(鹏哥带你C语言从入门到精通,谭浩强C语言教程C语言程序设计C语言修仙C语言考研计算机二级专升本C语言期末突软考二级C语言考研C语言C语言)_哔哩哔哩_bi ...

  5. c语言程序设计中北大学,《中北大学软件学院2013届C语言程序设计实训题目.doc...

    <中北大学软件学院2013届C语言程序设计实训题目 C语言程序课程设计题目 (孟龙)题目1:年历显示 功能要求: 输入一个年份,输出是在屏幕上显示该年的日历.假定输入的年份在1940-2040年 ...

  6. c语言高斯白序列x,C语言程序设计程设计指导书(晓庄).doc

    C语言程序设计程设计指导书(晓庄) C语言程序设计 课程设计任务书 南京晓庄学院数学与信息技术学院 2011-9-20 一.C语言程序设计课程设计的目的说明 1)复习巩固C语言的基础知识,进一步加深对 ...

  7. 浙大版《C语言程序设计(第3版)》题目集总表

    浙大版<C语言程序设计(第3版)>题目总集 更新中 浙大版<C语言程序设计(第3版)> 练习2-17 生成3的乘方表 练习2-18 求组合数 习题2-1 求整数均值 习题2-2 ...

  8. c语言程序设计韦良芬答案,论高职院校《C语言程序设计》的教学改革

    本文总结了作者多年来从事C语言教学的经验,对教育大众化背景下的C语言教学所遇到的问题进行了反思.在总结教学经验并针对高职教育特点的基础上,提出C语言程序设计课程教学改革的多项方案措施. 维普资讯 ht ...

  9. c语言程序设计移动字母,C语言程序设计实例大全(220个例子)

    C语言程序设计实例大全,C语言是世界上最流行.使用最广泛的高级程序设计语言之一,这里c语言 程序设计 实例 大全有220个例子供大家参考 c语言开发实例目录: 第一部分 基础篇 001 第一个C程序 ...

最新文章

  1. html字符实体和实体名称 lt;
  2. P4512 【模板】多项式除法
  3. HTTPSession对象知识总结
  4. Poj2480欧拉函数
  5. 图片服务 - thumbor用法
  6. 数组(数组名)与指针辨异
  7. ajax data传值
  8. Atitit snownlp nlp 常见功能 目录 1.1. 主要功能: 1 1.2. 官网信息: 2 1.3. # 自动摘要 vs 关键词提取 2 1.4. Tf idf算法 2 1.5. p
  9. (predicted == labels).sum().item()作用
  10. Flink-Table 配置(十一)
  11. linux 删除swp文件,linux E325: 注意 发现交换文件 *.swp 解决方法
  12. 参考文献起止页码怎么写_怎么看论文的起止页码
  13. 解决vue中img或元素背景图片无法显示或路径错误问题
  14. 河北北方学院专接本计算机,接本院校介绍——河北北方学院
  15. 【FFT夯实基础系列】手写笔记合集|傅里叶级数、傅里叶变换
  16. #Sora#peewee管理数据库——笔记
  17. 服务器故障内存位置怎么确定,服务器内存故障定位方法
  18. 雾毒占用系统资源 代理***窃取帐号
  19. android midi 格式开发总结(1)
  20. 教你怎样选择伺服电机控制方式

热门文章

  1. 给一些想要学习Java同学的一些建议
  2. Java EE 是什么?
  3. 【C语言】求一个数有多少位
  4. Vue 实现拖拽模块(二)自定义拖拽组件位置
  5. 为什么交叉熵可以用来当损失?与MMD的区别?
  6. 日志异常检测-机器学习
  7. 使用Python操作Excel图表之 为最后一个数据点添加数据标签
  8. idea连接oracle可插拔数据库报ORA-12505
  9. 更简单的非递归遍历二叉树
  10. 计算机专业如何自己增加项目经验?