C编程实践:简单的通讯录
分享一个之前学C语言时练习写的一个简单的通讯录程序。程序功能:
1、添加联系人信息(姓名、电话号码、城市、公司)。
2、保存联系人信息至本地文件。
3、打印输出联系人列表。
4、删除某个联系人信息或删除所有联系人信息。
程序运行结果:
代码如下,需要的朋友自己保存。
/*----------------------------------------------------------------------------------------Program Explain:简单的通讯录。可保存联系人的名字、电话号码、城市、公司至磁盘文件中。
Create Date:2016.2.4 by ZhengN----------------------------------------------------------------------------------------*/#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MaxCnt 100
#define CntFull -1// 菜单命令宏定义
#define CMD_Add 1
#define CMD_Save 2
#define CMD_List 3
#define CMD_Delete 4
#define CMD_Clear 5
#define CMD_Exit6// 定义联系人基本信息结构体
typedef struct Message
{char name[32];//姓名char PhoneNum[32]; //电话号码char city[32]; //城市char company[32];//公司
}Message;Message LinkmanMes[MaxCnt];//可保存MaxCnt个联系人// 函数声明
void Init(void);
void AddLinkman(void);
int FindCapacity(void);
void SaveToFile(void);
void PrintfList(void);
int MenuSelect(void);
void Delete(void);/*********************************************************************************
* Function Name :main主函数
* Parameter :NULL
* Return Value :0
* Function Explain :
* Create Date :2016.2.4 by ZhengN
**********************************************************************************/
int main(void)
{int cmd;int num;Init();while(1){cmd = MenuSelect();switch(cmd){case CMD_Add:AddLinkman();break;case CMD_Save:SaveToFile();break;case CMD_List:PrintfList();break;case CMD_Delete:Delete();break;case CMD_Clear:system("cls");break;case CMD_Exit:exit(0);break;}}return 0;
}/*********************************************************************************
* Function Name :通讯录初始化,初始化所有联系人信息为空
* Parameter :NULL
* Return Value :0
* Function Explain :
* Create Date :2016.2.4 by ZhengN
**********************************************************************************/
void Init(void)
{for(int i; i<MaxCnt; i++){LinkmanMes[i].name[0] = '\0';}
}/*********************************************************************************
* Function Name :添加联系人
* Parameter :NULL
* Return Value :0
* Function Explain :
* Create Date :2016.2.4 by ZhengN
**********************************************************************************/
void AddLinkman(void)
{int slot;slot = FindCapacity();printf("Linkman num=%d\n",slot+1);if(slot==CntFull){printf("\nList full\n");return;}printf("Input name:");gets(LinkmanMes[slot].name);printf("Input PhoneNum:");gets(LinkmanMes[slot].PhoneNum);printf("Input city:");gets(LinkmanMes[slot].city);printf("Input company:");gets(LinkmanMes[slot].company);printf("\n\n");
}/*********************************************************************************
* Function Name :FindCapacity,查找可保存联系人的容量,最大容量为MaxCnt
* Parameter :NULL
* Return Value :CntFull:已经没有余量了 slot:第slot+1个联系人
* Function Explain :
* Create Date :2016.2.4 by ZhengN
**********************************************************************************/
int FindCapacity(void)
{int slot;for(slot=0; LinkmanMes[slot].name[0]&&slot<MaxCnt; slot++);if(slot==MaxCnt){return CntFull;//已经达到了最大容量,没有余量了}return slot;
}/*********************************************************************************
* Function Name :SaveToFile,保存所有联系人信息至本地文件Contact.txt
* Parameter :NULL
* Return Value :0
* Function Explain :
* Create Date :2016.2.4 by ZhengN
**********************************************************************************/
void SaveToFile(void)
{FILE *fp;char num[100];if((fp=fopen("Contact.txt","wb"))==NULL){printf("Cannot open the file.\n");exit(0); /* 正常跳出程序 */}for(int i=0; i<MaxCnt; i++){if(*LinkmanMes[i].name){sprintf(num,"Num.%.2d",i+1);fwrite(num, 6, 1, fp);fwrite("\r\n", 2, 1, fp);fwrite(LinkmanMes[i].name, strlen(LinkmanMes[i].name), 1, fp);fwrite("\r\n", 2, 1, fp);fwrite(LinkmanMes[i].PhoneNum, strlen(LinkmanMes[i].PhoneNum), 1, fp);fwrite("\r\n", 2, 1, fp);fwrite(LinkmanMes[i].city, strlen(LinkmanMes[i].city), 1, fp);fwrite("\r\n", 2, 1, fp);fwrite(LinkmanMes[i].company, strlen(LinkmanMes[i].company), 1, fp);fwrite("\r\n", 2, 1, fp);}}fclose(fp);
}/*********************************************************************************
* Function Name :PrintfList,打印联系人列表
* Parameter :NULL
* Return Value :0
* Function Explain :
* Create Date :2016.2.4 by ZhengN
**********************************************************************************/
void PrintfList(void)
{int i;for(i=0; i<MaxCnt; i++){if(LinkmanMes[i].name[0]){printf("Num.%d\n",i+1);printf("%s\n",LinkmanMes[i].name);printf("%s\n",LinkmanMes[i].PhoneNum);printf("%s\n",LinkmanMes[i].city);printf("%s\n",LinkmanMes[i].company);printf("\n");}}
}/*********************************************************************************
* Function Name :Delete,删除联系人
* Parameter :NULL
* Return Value :0
* Function Explain :
* Create Date :2016.2.4 by ZhengN
**********************************************************************************/
void Delete(void)
{int i;char str[80];int num;printf("Input the linkman num(1-100)to delete a linkman or input 0 to delete all linkman:");gets(str);num = atoi(str);/* 删除第num个联系人 */if( (num>0)&&(num<MaxCnt) ){LinkmanMes[num-1].name[0] = '\0';}/* 删除所有联系人 */else if(num==0){for(i=0; i<MaxCnt; i++){LinkmanMes[i].name[0] = '\0';}}printf("\n\n");
}/*********************************************************************************
* Function Name :MenuSelect,菜单
* Parameter :NULL
* Return Value :c:菜单命令
* Function Explain :
* Create Date :2016.2.4 by ZhengN
**********************************************************************************/
int MenuSelect(void)
{char str[80];int c;printf("1. Add linkman\n");printf("2. Save linkman to file\n");printf("3. Printf all linkman\n");printf("4. Delete linkman\n");printf("5. Clear screen\n");printf("6. Exit\n");do{printf("\nEnter your choice: ");gets(str);c = atoi(str);} while(c<0 || c>6);return c;
}
-END-
﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
免责声明:本文转自网络,版权归原作者所有,如涉及作品版权问题,请及时与我们联系,谢谢!
往期好文合集
做硬件,到底有没有前途?<<戳这里
测试你C语言水平的十道题,挑战一下?<<戳这里
基本电子元器件识别法<<戳这里
最 后
若觉得文章不错,转发分享,也是我们继续更新的动力。
5T资源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,PCB、FPGA、DSP、labview、单片机、等等!
在公众号内回复「更多资源」,即可免费获取,期待你的关注~
长按识别图中二维码关注
C编程实践:简单的通讯录相关推荐
- python编程实践-简单淘宝秒杀程序
python+selenium实现淘宝商品秒杀(新手上路,轻点喷.2020.7.23) 抢购鞋子,发现那些人下手太快,于是有了自己写一个抢购代码的想法,经过几个小时的折腾,算是拼凑出一个简单的抢购程序 ...
- 作业2:简答题、编程实践(简单计算器)、思考题
文章目录 作业2:简答题.编程实践(简单计算器).思考题 1.简答题 2. 编程实践,小游戏 简单计算器 3.思考题 作业2:简答题.编程实践(简单计算器).思考题 1.简答题 解释 游戏对象(Gam ...
- Storm之——流组件简单串行编程实践
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/78447229 Storm是一个分布式是实时计算系统,它设计了一种对流和计算的抽象, ...
- [Java 并发] Java并发编程实践 思维导图 - 第一章 简单介绍
阅读<Java并发编程实践>一书后整理的思维导图.
- 《深入理解大数据:大数据处理与编程实践》一一3.3 HDFS文件存储组织与读写...
本节书摘来自华章计算机<深入理解大数据:大数据处理与编程实践>一书中的第3章,第3.3节,作者 主 编:黄宜华(南京大学)副主编:苗凯翔(英特尔公司),更多章节内容可以访问云栖社区&quo ...
- Java并发编程实战_一线大厂架构师整理:java并发编程实践教程
并发编程是Java语言的重要特性之一, 在Java平台上提供了许多基本的并发功能来辅助开发多线程应用程序.然而,这些相对底层的并发功能与上层应用程序的并发语义之间并不存在一种简单而直观的映射关系.因此 ...
- java并发编程实践_Java并发编程实践如何正确使用Unsafe
一.前言 Java 并发编程实践中的话: 编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各 ...
- auto.js停止所有线程_Java线程与并发编程实践:深入理解volatile和final变量
同步有两种属性:互斥性和可见性.synchronized关键字与两者都有关系.Java同时也提供了一种更弱的.仅仅包含可见性的同步形式,并且只以volatile关键字关联. 假设你自己设计了一个停止线 ...
- 《Java线程与并发编程实践》—— 2.3 谨防活跃性问题
本节书摘来异步社区<Java线程与并发编程实践>一书中的第2章,第2.3节,作者: [美]Jeff Friesen,更多章节内容可以访问云栖社区"异步社区"公众号查看. ...
最新文章
- 视频 网站 页面开关灯实现方法
- char *a 和char a[] 的区别(指针和数组的区别)
- SAP 金属行业实施项目的GAP之Metall Balance
- java内存模型与volatile变量与Atomic的compareAndSet
- BIND9配置文件详解模板
- 链表节点的删除(删除重复无序节点)
- mysql当数据改变时_当数据库里面的价格变化时,发送信息到企业微信中
- 简单的函数(也叫方法)
- matlab intergral,matlab學習:人臉識別之HOG(Histograms of Oriented Gradients)
- Why Spring Boot
- 中国有机玻璃市场竞争策略与投资前景建议报告2022-2028年
- 集群环境下,你不得不注意的ASP.NET Core Data Protection 机制
- 百万个小油馕跨越3000公里来支援!西安加油!
- 循环神经网络_漫谈循环神经网络:LSTM、GRU
- SpringBoot实现前后端数据交互、json数据交互、Controller接收参数的几种常用方式...
- python画围棋棋盘_Python语言程序设计之二--用turtle库画围棋棋盘和正、余弦函数图形...
- 自动控制原理之控制系统的数学模型(类比神经网络学习数学模型)
- 三进制计算机可以实现吗,制造三进制计算机的一种方法技术
- 局域网怎么查看单位摄像头_简单易用,夜里看的更清楚,360新品水滴摄像头夜视版实测...
- C#实现数独解题及随机出题的思路及源码分享
热门文章
- SAP CRM WebClient UI表格编辑模式的调试明细
- SAP UI5 new sap.ui.commons.Button trigger component load
- Jerry开发的SAP note工具
- 如何在SAP云平台ABAP编程环境里创建自己的Z表
- Cloud for Customer的工作中心(work center)加载源代码
- Cloud for Customer的事件处理队列
- WordPress的Kyma plugin HTML发送的connect请求是怎么投递到PHP的
- ABAP Text table implementation
- IBASE category 01 component hierarchy
- 将github pages搭建的网页添加到百度搜索资源平台