c语言通讯录管理系统_通讯录管理系统(C语言)
#include<stdio.h>
#include<stdlib.h> //动态内存分配malloc的头文件
#include<conio.h>
#include<dos.h>
#include<string.h>
#define LEN sizeof(struct Link) //字节数为struct Link字节数的符号常量
struct Link //定义联系人信息结构体
{
char name[20]; //姓名
char unit[20]; //工作单位
char phone[15]; //电话号码
char mail[20]; //E-mail地址
}Link_s[100]; //可储存100个联系人信息
//声明程序中要用到的函数
void input(); //新建联系人信息
void enquiry(); //查询联系人信息
void alter(); //修改联系人信息
void del(); //删除联系人信息
void display(); //显示联系人信息
void menu(); //主菜单
void menu()//主菜单函数
{
system("cls");//调用system(“cls”)函数清空界面
printf("nnnnn");//控制主功能菜单显示位置
printf("tt|***************通讯录管理系统***************|n");
printf("tt| 1.新建联系人信息 |n");
printf("tt| 2.查询联系人信息 |n");
printf("tt| 3.修改联系人信息 |n");
printf("tt| 4.删除联系人信息 |n");
printf("tt| 5.显示联系人信息 |n");
printf("tt| 6.退出系统 |n");
printf("tt|********************************************|n");
printf("请选择功能(1~6):n");
}
int main()//主函数
{
int n;
menu();//调用主菜单
scanf("%d", &n);//用户选择功能
while(n)
{
switch (n)
{
case 1:input(); break;
case 2:enquiry(); break;
case 3:alter(); break;
case 4:del(); break;
case 5:display(); break;
case 6:exit(0);
}
printf("请选择功能(1~6):");
scanf("%d", &n);//用户选择功能
}
return 0;
}
void input() //新建联系人
{
int i, record = 0;//定义一个循环变量以及记录通讯录中联系人个数的变量
char ch[2];//字符数组用来记录用户的输入
FILE* fp;//定义指向文件的指针变量
if ((fp=fopen("data.txt", "a+")) == NULL)//调用fopen函数创建一个新的文本来保存联系人信息
{
printf("不能打开文件夹!n");
return;
}
while (feof(fp) == 0)//判断文件是否结束
{
if (fread(&Link_s[record], LEN, 1, fp) == 1)//使用fresd函数将文件中的记录逐条读取到结构体数组
record++;
}
fclose(fp);//关闭文件
if (record == 0)//判断当前通讯录是否为空
printf("没有联系人记录!n");
else
{
system("cls");//清屏
display();//显示联系人的所有信息
}
if ((fp = fopen("data.txt", "wb")) == NULL)//如果打开文件失败
{
printf("不能打开该文件!n");
return;
}
//将数据重写入磁盘
for (i = 0; i < record; i++)
fwrite(&Link_s[i], LEN, 1, fp);
printf("是否新建联系人(y/n)");//提示用户输入
scanf("%s", ch);
while (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)//判断用户是否需要新建
{
printf("姓名:");
scanf("%s", &Link_s[record].name);
//判断用户输入姓名在通讯录中是否存在
for (i = 0; i < record; i++)
if (strcmp(Link_s[i].name, Link_s[record].name) == 0)
{
printf("名称已经存在,请按任意键继续。");
getch();
fclose(fp);
return;
}
printf("工作单位:");
scanf("%s", &Link_s[record].unit);
printf("电话号码:");
scanf("%s", &Link_s[record].phone);
printf("E-mail:");
scanf("%s", &Link_s[record].mail);
if (fwrite(&Link_s[record], LEN, 1, fp) != 1)//将新建联系人信息保存到磁盘文件
{
printf("不能保存记录!");
getch(); //按任意键继续
}
else
{
printf("%s 信息保存成功!n", Link_s[record].name);
record++;
}
printf("是否继续新建联系人?(y/n):");
scanf("%s", ch);
}
fclose(fp);
printf("新建完成!n");
}
void enquiry() //查询联系人
{
menu();//调用主菜单
FILE* fp;
int i, n, record = 0;
char ch[2], name[20], phone[15];//定义数组接收用户的输入信息
//打开磁盘文件,并将磁盘文件中的通讯录逐条读取到内存结构体数组
if ((fp = fopen("data.txt", "rb")) == NULL)
{
printf("不能打开该文件n");
return;
}
while (feof(fp) == 0)//判断是否到达文件的尾部
if (fread(&Link_s[record], LEN, 1, fp) == 1)
record++;//record终值为通讯录条目
fclose(fp);
if (record == 0)
{
printf("没有联系人信息!n");
return;
}
printf("按姓名查找输入1,按手机号查找输入2:");
scanf("%d", &n);
if (n == 1)
{
printf("请输入姓名:");
scanf("%s", name);
}
if (n == 2)
{
printf("请输入电话号码:");
scanf("%s", phone);
}
//通过姓名或电话号查找通讯录指定信息,运用字符比较函数
for (i = 0; i < record; i++)
if ((strcmp(name, Link_s[i].name) == 0) || (strcmp(phone, Link_s[i].phone) == 0))
{
printf("找到联系人,是否显示?(y/n):");
scanf("%s", ch);
if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)
{
printf("姓名 工作单位 电话号码 E-mail tn ");
printf("%-s %-s %-s %-sn", Link_s[i].name, Link_s[i].unit, Link_s[i].phone, Link_s[i].mail);
}
break;
}
//判断循环结束是因为没有找到联系人还是因为找到了但是没有显示联系人信息
if (i == record)
printf("找不到联系人!n");
}
void alter() //修改联系人信息
{
menu();//调用主菜单
FILE* fp;
int i, j, record = 0;
char name[20];
if ((fp = fopen("data.txt", "r+")) == NULL)
{
printf("不能打开文件!n");
return;
}
while (feof(fp) == 0)
if (fread(&Link_s[record], LEN, 1, fp) == 1)
record++;
if (record == 0)
{
printf("没有联系人记录!n");
fclose(fp);
return;
}
display();
//修改联系人信息//
printf("请输入您要修改的联系人姓名:n");
scanf("%s", &name);
for (i = 0; i < record; i++)
{
if (strcmp(name, Link_s[i].name) == 0)
{
printf("找到联系人!你可以修改数据!n");
printf("姓名:");
scanf("%s", &Link_s[i].name);
printf("工作单位:");
scanf("%s", &Link_s[i].unit);
printf("电话号码:");
scanf("%s", &Link_s[i].phone);
printf("E-mail地址:");
scanf("%s", &Link_s[i].mail);
printf("修改成功!");
//打开磁盘,将修改后的联系人信息写入磁盘
if ((fp = fopen("data.txt", "wb")) == NULL)
{
printf("不能打开文件!n");
return;
}
for (j = 0; j < record; j++)
if (fwrite(&Link_s[j], LEN, 1, fp) != 1)
{
printf("无法保存!");
getch(); //按任意键继续
}
fclose(fp);
return;
}
}
printf("没有找到该联系人信息!n");//没有找到该条联系人信息
}
void del() //删除联系人信息
{
menu();//调用主菜单
FILE* fp;
int i, j, record = 0;
char ch[2];
char name[15];
if ((fp = fopen("data.txt", "r+")) == NULL)
{
printf("不能打开该文件!n");
return;
}
while (feof(fp) == 0)
if (fread(&Link_s[record], LEN, 1, fp) == 1)
record++;
fclose(fp);
if (record == 0)
{
printf("没有该联系人记录!n");
return;
}
display();
//删除联系人信息
printf("请输入要删除的联系人姓名:");
scanf("%s", &name);
for (i = 0; i < record; i++)
{
if (strcmp(name, Link_s[i].name) == 0)
{
printf("找到该联系人,要删除吗?(y/n)");
scanf("%s", ch);
if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)
for (j = i; j < record; j++)
Link_s[j] = Link_s[j + 1];
record--;
//将删除后的通讯录写入对应的磁盘文文件
if ((fp = fopen("data.txt", "wb")) == NULL)
{
printf("不能打开文件!n");
return;
}
for (j = 0; j < record; j++)
if (fwrite(&Link_s[j], LEN, 1, fp) != 1)
{
printf("无法保存!n");
getch(); //按任意键继续
}
fclose(fp);
printf("删除成功!n");
return;
}
}
printf("没有该联系人记录!n");
}
void display() //显示联系人信息
{
menu();//调用主菜单
FILE* fp;
int i, record = 0;
fp = fopen("data.txt", "rb");//以读写的方式打开文件
//读取通讯录记录
while (feof(fp) == 0)
{
if (fread(&Link_s[record], LEN, 1, fp) == 1)
record++;
}
fclose(fp);//关闭文件
printf("姓名 工作单位 电话号码 E-mail tn");
for (i = 0; i < record; i++)
printf("%-s %-s
%-s %-sn", Link_s[i].name, Link_s[i].unit, Link_s[i].phone, Link_s[i].mail);
}
运行截图
c语言通讯录管理系统_通讯录管理系统(C语言)相关推荐
- 机械优化黄金分割法c语言编程,黄金分割法_机械优化设计_C语言程序.doc
黄金分割法_机械优化设计_C语言程序黄金分割法_机械优化设计_C语言程序 黄金分割法的优化设计 实验报告 学院:机电工程 机制自动化11-03班 学号:541102010326 姓名:刘点点 1,黄金 ...
- r语言平均值显著性检验_最全的R语言统计检验方法_数据挖掘中R语言的运用
最全的R语言统计检验方法_数据挖掘中R语言的运用 统计检验是将抽样结果和抽样分布相对照而作出判断的工作.主要分5个步骤:建立假设 求抽样分布 选择显著性水平和否定域 计算检验统计量 判定 假设检验(h ...
- java供应链管理系统_供应链管理系统使用JAVA语言的优势
提起供应链金融大家都略知一二,这是一种新型的可以有效解决中小企业融资问题的互联网金融运行模式.但提起供应链管理系统知道的人可能就不及供应链金融高了,其实供应链管理系统可以理解为供应链金融的线上化,提供 ...
- 苹果怎么删除通讯录联系人_通讯录删除的号码怎么找回?苹果手机恢复方法
通讯录删除的号码怎么找回?手机的出现最早是为了方便人与人之间的联系,所以通讯可以说是一部手机最基本的功能.很多人会把朋友的号码保存在通讯录上,但是很多时候,我们可能会误操作把号码删掉.被删掉的号码怎么 ...
- java 家谱管理系统_家谱管理系统
[实例简介] 用JAVA写了一个简易的家谱管理系统,里面有所有的实现代码与过程 [实例截图] [核心代码] 家谱管理系统 ├── JM │ └── MyJob │ ├── Bookface.j ...
- java 设备管理系统_设备管理系统
压缩包 : b679ef31dc714eb51f600211e9.rar 列表 设备管理系统/EquipmentManage/.classpath 设备管理系统/EquipmentManage/.pr ...
- python语言基础实验_实验二Python语言基础函数包练习.doc
实验二Python语言基础函数包练习 实验 Python语言基础函数包练习:1208 学号: 实验目的 1.Python语言包,如math.NumPySciPy和Matplotlib等函数包的使用实验 ...
- java和c语言的区别_都说C语言不会过时,但你是否还需要掌握其他语言?
01为什么C语言不会过时 评价任何一门编程语言,都是招人骂的.永远是这样.就像是春寒料峭的季节, 街上穿棉袄和穿单衣的擦肩而过,双方一定是同时在心里出现了两个字:"傻B!"这个在心 ...
- java脚本语言是什么_什么是脚本语言
在维基百科上的通俗解释是,一般使用文本保存,不需要'编译'的语言的,直接由解释器的语言.脚本语言 也就是说脚本语言其实是为了方便的使用,运行简单的一门语言.就像js一样,在去掉BOM,DOM,还有No ...
最新文章
- Javascript笔记:(实践篇)从jQuery插件技术说起(上篇)
- 深度学习、机器学习与NLP的前世今生
- python 大量使用json 存储数据时,格式化输出的方式
- 使用rx-java的异步抽象
- 使用IntelliJ IDEA碰到的问题总结
- flask (三) 重定向
- mysql 备份数据
- 机器学习基础(三)——信息、信息熵与信息增益
- C#中对XML文件的一些基本操作[转载]
- SQLAlchemy介绍
- SpriteKit快速入门和新时代iOS游戏开发指南
- MSP430单片机学习视频
- 大学计算机应用基础第二版习题答案,《大学计算机应用基础》各章习题参考答案...
- 如何从巨潮资讯爬取股票公告
- 微软黑客马拉松@您,低代码风云再赛
- 前端系列第10集-实战篇
- 曹二众 / jeewms仓储管理系统本地部署踩坑记录
- 日常生活中使用的台式计算机,台式电脑鼠标不动应该怎么办
- syslog与rsyslog
- python屏幕找图_Python图片识别找坐标(appium通过识别图片点击坐标)
热门文章
- maven netty 配置_使用Springboot整合开发Netty(一个表白的小案例)
- 情人节海报psd分层模板|好的图层,任你选择
- 怪异的万圣节:图标素材,给对生活有仪式感的设计师!
- UI素材资源|Material风格的插图,有品位的素材
- 618活动海报还没想法?PSD页面设计参考能给你灵感
- qwtqplot用法
- Kafka和RocketMQ底层存储:零拷贝技术
- 【笔记】UL/DL(上行/下行)方向上每个符号IQ的时序关系(U平面和C平面)
- Tensorflow卷积神经网络
- jupyter notebook 快捷键设置字体大小_你可能并不知道这样定制炫酷的jupyter主题