c语言通讯录感想,C语言通讯录实例分享
本文实例为大家分享了C语言通讯录实例的具体代码,供大家参考,具体内容如下
main.c文件:
//
// main.c
// c语言通讯录
//
// Created by stevenchang on 9/6/15.
// Copyright (c) 2015 cz. All rights reserved.
//
/**
1.添加联系人
2.删除联系人
3.更新联系人
4.显示所有联系人
5.查找联系人
6.退出系统
*/
#include
int main(int argc, const char * argv[]) {
//程序的初始化
initContacts();
while(1) {
int flag = 0;
printf("*************C语言通讯录*************\n");
printf("************1.添加用户***************\n");
printf("************2.删除用户***************\n");
printf("************3.更新用户***************\n");
printf("************4.查找用户***************\n");
printf("************5.显示所有用户************\n");
printf("************6.退出系统***************\n");
printf("************************************\n");
printf("请输入1-6的功能编号 :\n");
scanf("%d",&flag);
//判断编号是否合法
validateNum(flag, 1, 6);
switch (flag) {
case 1:
addContact(); //添加用户
break;
case 2:
deleteContact(); //删除用户
break;
case 3:
updateContact(); //更新用户
break;
case 4:
searchContact(); //查找用户
break;
case 5:
listContact(); //显示所有用户
break;
case 6:
printf("系统正在退出!\n");
printf("成功退出系统!\n");
return 0;
break;
default:
break;
}
}
return 0;
}
MyFile.c文件:
//
// MyFile.c
// c语言通讯录
//
// Created by stevenchang on 9/6/15.
// Copyright (c) 2015 cz. All rights reserved.
//
#include "MyFile.h"
//**************函数的实现**********************//
/**
* 添加联系人
*/
void addContact() {
int flag = 0;
printf("您选择的是添加联系人,请按操作进行!\n");
printf("请输入用户姓名(*注意联系人姓名中间不能有空格):\n");
scanf("%s",contacts[totalContactsCount].name);
printf("请输入电话(*注意联系人电话中间不能有空格): \n");
scanf("%s",contacts[totalContactsCount].tel);
printf("是否确认添加!1:是 0:否\n");
scanf("%d",&flag);
if (flag) {
//联系人个数加1
totalContactsCount++;
//将联系人信息保存到文件中
writeFile();
}
printf("已经放弃添加!\n");
return ;
}
/**
* 删除联系人
*/
void deleteContact() {
int no;
printf("您选择的是删除联系人,请按操作进行!\n");
printf("请输入要删除的编号:\n");
scanf("%d",&no);
//判断输入的编号是否合法
if (!validateNum(no, 1, totalContactsCount)) {
printf("您输入的编号不合法!\n");
return ;
}
//合法
//如果删除的是最后一个元素
if (no == totalContactsCount) {
totalContactsCount--;
} else {
//如果删除的不是最后一个元素
for (int i = no; i < totalContactsCount; i++) {
contacts[no-1] = contacts[no]; //元素的移动和覆盖
}
totalContactsCount--;
}
//同步文件
writeFile();
}
/**
* 更新联系人
*/
void updateContact() {
int no;
char newName[NAMELENGTH];
char newTel[TELLENGTH];
printf("您选择的是更新联系人,请按操作进行!\n");
printf("请输入要修改的联系人编号:\n");
scanf("%d",&no);
//判断编号是否合法
if (!validateNum(no, 1, totalContactsCount)) {
return ;
}
//合法
printf("请重新输入用户名:\n");
scanf("%s",newName);
printf("请重新输入电话号码\n");
scanf("%s",newTel);
strcpy(contacts[no-1].name, newName);
strcpy(contacts[no-1].tel, newTel);
//写入文件
writeFile();
}
/**
* 显示所有联系人
*/
void listContact() {
printf("您选择的是显示所有联系人,联系人如下!\n");
if (totalContactsCount > 0) {
printf("序号\t姓名\t电话\n");
for (int i = 0 ; i < totalContactsCount; i++) {
printf("%d\t%s\t%s\n",i+1,contacts[i].name, contacts[i].tel);
}
} else {
printf("联系人为空,请添加联系人!\n");
return ;
}
}
/**
* 查找联系人
*/
void searchContact() {
printf("您选择的是查找联系人,请按操作进行!\n");
char searchName[NAMELENGTH];
printf("请输入要查找的联系人姓名:\n");
scanf("%s",searchName);
for (int i = 0 ; i < totalContactsCount; i++) {
if (strcmp(searchName, contacts[i].name)==0) { //说明相同
printf("联系人姓名为:%s,电话号码为:%s\n",contacts[i].name,contacts[i].tel);
return ;
}
if (i == totalContactsCount-1) {
printf("此联系人不存在!\n");
}
}
}
/**
* 通讯录的初始化
*/
void initContacts() {
printf("通讯录正在初始化!\n");
FILE *fp = fopen(filePath, "r");
if (fp!=NULL) { //读取文件成功
//读取联系人的个数
fread(&totalContactsCount, sizeof(totalContactsCount), 1, fp);
//读取每个联系人
for (int i = 0; i < totalContactsCount; i++) {
//读取联系人数据,到联系人数组中
fread(&contacts[i], sizeof(Person), 1, fp);
}
} else {
//读取文件失败
//创建文件
fp = fopen(filePath, "wb");
//写入联系人的个数
fwrite(&totalContactsCount, sizeof(totalContactsCount), 1, fp);
printf("通讯录文件创建成功!\n");
}
//关闭文件指针
fclose(fp);
printf("通讯录初始化成功!\n");
}
/**
* 判断功能编号是否合法 1:合法 0:非法
*/
int validateNum(int num, int min, int max) {
if (num < min || num > max) {
printf("输入的功能编号不正确,请重新输入!\n");
return 0;
}
return 1;
}
/**
*将联系人写入文件
*/
void writeFile() {
//以二进制文件打开文件
FILE *fp = fopen(filePath, "wb");
if (fp != NULL) {
//写入联系人个数
fwrite(&totalContactsCount, sizeof(totalContactsCount), 1, fp);
//写入每个联系人个数
for (int i = 0; i < totalContactsCount; i++) {
fwrite(&contacts[i], sizeof(Person), 1, fp);
}
}
fclose(fp);
printf("文件更新成功\n");
}
MyFile.h文件:
//
// MyFile.h
// c语言通讯录
//
// Created by stevenchang on 9/6/15.
// Copyright (c) 2015 cz. All rights reserved.
//
#ifndef __c_______MyFile__
#define __c_______MyFile__
#include
#include
#define N 100 //宏定义一个通讯录的容量
#define NAMELENGTH 22 //宏定义一个名字的长度
#define TELLENGTH 12 //宏定义一个电话号码的长度
//********************函数的声明*********************//
void addContact(); //添加联系人
void deleteContact(); //删除联系人
void updateContact(); //更新联系人
void listContact(); //显示所有联系人
void searchContact(); //查找联系人
void initContacts(); //通讯录的初始化
int validateNum(int num, int min, int max); //判断功能编号是否合法 1:合法 0:非法
void writeFile(); //将联系人写入文件
typedef struct Person { //定义一个结构体
char name[NAMELENGTH]; //定义姓名数组
char tel[TELLENGTH]; //定义结构体数组
} Person;
//定义文件路径
char *filePath = "telData.data";
int totalContactsCount = 0;
Person contacts[N]; //定义Person结构体数组
#endif /* defined(__c_______MyFile__) */
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
c语言通讯录感想,C语言通讯录实例分享相关推荐
- c语言运算符感想,C语言运算符学习笔记
运算符不仅具有不同的优先级,还有不同的结合性.在表达式中,各运算量参与运算的先后顺序不仅要遵守运算符优先级别的规定,还要受运算符结合性的制约,以便确定是自左向右进行运算还是自右向左进行运算. C语言的 ...
- 个人通讯管理程序C语言,个人通讯录管理系统C语言源程序(优秀版)[1]
个人通讯录管理系统C语言源程序(优秀版)[1] 更新时间:2017/2/22 1:03:00 浏览量:613 手机版 C语言个人通讯录系统源程序: #include /*头文件*/ #includ ...
- 【C语言进阶】C语言程序设计:动态通讯录(顺序表实现)
目录 动态通讯录的实现 一.实验的目的和意义 二.实验内容描述 三.功能描述 四.数据结构 1.三大模块 2.结构设计 3.动态开辟 4.文件操作 5.主要函数 五.流程图及模块算法 1.Contac ...
- 【C语言进阶】C语言实现通讯录
目录 一.引言 二.如何实现通讯录 1.通讯录要求 2.创建主菜单 3.初步设置主函数 4.创建通讯录 5.初始化通讯录 6.case 1(增加联系人) 7.case 5(显示通讯录中的信息) 8.c ...
- 通讯录管理系统 C语言课程设计实验报告
通讯录管理系统C语言课程设计 一.实验目的 1.巩固和加深学生对C语言课程的基本知识的理解和掌握 2.掌握C语言编程和程序调试的基本技能 3.利用C语言进行基本的软件设计 4.掌握书写程序设计说明文档 ...
- c语言程序设计课程设计通讯录,《C语言程序设计》课程设计-通讯录系统(42页)-原创力文档...
<C语言程序设计>课程设计 学 学 号:________ 姓 名:____ 指导教师:_________ 完成日期:2010.07.03 ______________学校______系__ ...
- C语言——史上最全通讯录讲解(附源码)
C语言--史上最全通讯录讲解(附源码) 一.开始界面的打印 二.对六大板块进行定义操作 三.对联系人进行初始化 四.对通讯录进行初始化 4.1动态版本 4.2静态版本 五.通讯录六大功能的具体实现 5 ...
- 手机通讯录管理系统——c语言
@手机通讯录管理系统--c语言 急需!!!!!!!!能有大佬帮看看吗,想搞个清屏,但是老是弄不对,头昏眼花了,有的加了清屏,下面的内容就无法出现,只是闪现一会,有知道的吗,可以直接帮我改改代码吗,在此 ...
- 个人通讯录管理系统C语言版(含源代码和报告)
个人通讯录管理系统 1.前言 本人2019级学生,某天闲来无事偶然翻着自己的文件夹,发现自己在大一上学期期末做的C语言课程设计(这是大学的第一个课程设计),时间已悄然过去了一年多了.打开文件看着源代码 ...
- C语言实现简单的电子通讯录2
这两天学完系统调用和标准IO,之前的通讯录可以进行一些改进,将数据保存到文件中(图我这里就不发了). 原理:每次启动程序时先从预设文件中以只读的形式读取保存的通讯录信息,然后将读取到的信息导入到结构体 ...
最新文章
- 5月22日云栖精选夜读:PHP学习路线图
- 共享寒冬中的常青树,2 次获得阿里投资的衣二三“欲隐藏”的数据真相 | 深度案例...
- Java读取多层级xml文件
- 在.NET Core中使用MongoDB明细教程(1):驱动基础及文档插入
- 2021-02-03-延长一天时间的有效方法
- python观察内存和修改内存
- HTTP请求和数据安全
- genymotion 前端调试
- 第一次使用SSE指令集
- python教程初级有什么用_学Python编程有什么用?Python基础教程!
- pe系统怎么加服务器raid驱动,在PE中添加sata-raid驱动的方法:u盘启动盘制作
- QT资源库中图片的调用
- 车牌拍照系统上传服务器,车牌识别系统实现过程及摄像机要求
- centos安装net-speeder
- 两团队在《自然》上发布重要抗癌研究成果,消化系统肿瘤或有望治愈...
- 镭速快答:网页端无法连接镭速,提示未启动怎么办?
- 3ds max 软件主菜单中添加新的菜单
- 聊聊什么是探索式测试
- 双显卡只用独显好吗_双显卡如何切换到独立显卡?双显卡只用独显的方法
- 机电工程毕业论文题目【484个】
热门文章
- tcp服务器测试网页版,tcp测试服务器
- 基于3DMM的三维人脸重建技术总结
- AE动画导出json工具:bodymovin
- html浮窗音乐播放器插件,墨涩网 - WordPress浮窗音乐播放器Floating Window Music Player V3.2.6——墨涩网...
- 银河麒麟linux找不到网卡,银河麒麟(Ubuntu)无法上网问题的解决方法
- 创建AD9361的vivado工程并导入SDK(ZYNQ平台)
- 使用pdfbox将多个pdf合成一个pdf
- 怎么在Linux上抓包分析
- CAPL如何组装自定义报文
- 熵权法计算权重原理python实现