C语言通讯录管理系统(含完整代码)
课题3:通讯录管理系统
设计内容:
设计一个通讯录管理系统,以实现以下功能:信息添加、查询、修改、删除、排序等功能。
设计要求:
1) 每条信息至包含 :姓名、电话、工作单位等信息
2) 作为一个完整的系统,应具有友好的界面和较强的容错能力
预览:
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#define LEN sizeof(struct list)
#define DATA a[i].num,a[i].name,a[i].job,a[i].address
#define FORMAT "\t\t || %-12d %-12s %-19s %-20s ||\n"
void in();
void menu();
void search();
void del();
void show();
void modify();
void insert();
void order();
void total();
struct list
{int num; //号码char name[15]; //姓名char job[30]; //工作单位char address[30]; //地址
};
struct list a[50];void main()
{system("color 5e\n");menu();int n;scanf("%d", &n);while (n){switch (n){case 1:in(); break;case 2:search(); break;case 3:del(); break;case 4:modify(); break;case 5:insert(); break;case 6:order(); break;case 7:total(); break;case 8:show(); break;default:break;}getch();menu();//执行完后显示菜单 scanf("%d", &n);}}void menu()
{system("cls");printf("\n\n\n");printf("\t\t\t\t\t**************************************\n");printf("\t\t\t\t\t************通讯录管理系统************\n");printf("\t\t\t\t\t======================================\n");printf("\t\t\t\t\t* 1.录入联系人信息 *\n");printf("\t\t\t\t\t* 2.查找联系人信息 *\n");printf("\t\t\t\t\t* 3.删除联系人信息 *\n");printf("\t\t\t\t\t* 4.修改联系人信息 *\n");printf("\t\t\t\t\t* 5.插入联系人信息 *\n");printf("\t\t\t\t\t* 6.排序 *\n");printf("\t\t\t\t\t* 7.统计联系人总数 *\n");printf("\t\t\t\t\t* 8.显示所有联系人 *\n");printf("\t\t\t\t\t* 0.退出系统 *\n");printf("\t\t\t\t\t======================================\n");printf("\t\t\t\t\t**************************************\n");printf("\t\t\t\t\t 请选择(0-8):");
}void in()
{int i, m = 0;char ch[2];FILE* fp;if ((fp = fopen("data.txt", "a+")) == NULL){printf("\t\t 文件不存在! \n");return;}while (!feof(fp)){if (fread(&a[m], LEN, 1, fp) == 1)m++;}fclose(fp);if (m == 0){printf("\t\t 文件中没有记录!\n");}else{show();}if ((fp = fopen("data.txt", "a+")) == NULL){printf("\t\t 文件不存在!\n");return;}printf("\t\t 是否输入联系人信息(y/n):");scanf("%s", ch);while (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0){printf("\t\t 电话:");scanf("%d", &a[m].num);for (i = 0; i < m; i++){if (a[i].num == a[m].num){printf("\t\t 此用户已经存在了,按任意键继续!");getch();fclose(fp);return;}}printf("\t\t 姓名:");scanf("%s", &a[m].name);printf("\t\t 工作单位:");scanf("%s", &a[m].job);printf("\t\t 地址:");scanf("%s", &a[m].address);if (fwrite(&a[m], LEN, 1, fp) != 1){printf("\t\t 不能保存");getch();}else{printf("\t\t %s 已被保存!\n", a[m].name);m++;}printf("\t\t 继续?(y/n):");scanf("%s", ch);}fclose(fp);printf("\t\t 结束录入!\n");
}
void del()
{show();FILE* fp;int nmb, i, j, m = 0;int t = 1; //判断是否正常结束 char ch[2];if ((fp = fopen("data.txt", "r+")) == NULL){printf("\t\t \n文件不存在\n");return;}while (!feof(fp)){if (fread(&a[m], LEN, 1, fp) == 1)m++;}fclose(fp);if (m == 0){printf("\t\t \n文件没有记录!\n");return;}printf("\t\t 输入要删除的联系人的电话号码:");scanf("%d", &nmb);for (i = 0; i < m; i++)if (nmb == a[i].num){printf("\t\t 找到这条记录是否删除(y/n):");scanf("%s", &ch);if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0){for (j = i + 1; j < m; j++)a[j - 1] = a[j];m--;if ((fp = fopen("data.txt", "w+")) == NULL){printf("\t\t 文件不存在\n");return;}for (j = 0; j < m; j++){if (fwrite(&a[j], LEN, 1, fp) != 1){printf("\t\t 无法写入文件!删除失败!");getch();}}fclose(fp);printf("\t\t 删除成功");}else{fclose(fp);printf("\t\t 找到了记录选择不删除");}t = 0; //标志找到该联系人 break;}if (t)printf("\t\t 没有找到该联系人!\n");
}void modify()
{show();FILE* fp;int i = 0, j = 0, m = 0, nmb;if ((fp = fopen("data.txt", "r+")) == NULL){printf("\t\t 文件不存在\n");return;}while (!feof(fp))if (fread(&a[m], LEN, 1, fp) == 1)m++;if (m == 0){printf("\t\t 文件中没有记录");fclose(fp);return;}printf("\t\t 请输入要修改的联系人的电话号码:");scanf("%d", &nmb);for (i = 0; i < m; i++)if (nmb == a[i].num) //检索是否有要相应的联系人{printf("\t\t 找到该名联系人,将修改他的信息!\n");printf("\t\t 电话:");scanf("%d", &a[i].num);printf("\t\t 姓名:");scanf("%s", &a[i].name);printf("\t\t 工作单位:");scanf("%s", &a[i].job);printf("\t\t 住址:");scanf("%s", &a[i].address);printf("\t\t 修改成功!");if ((fp = fopen("data.txt", "w+")) == NULL){printf("\t\t 不能打开");return;}for (j = 0; j < m; j++) //写入新的信息if (fwrite(&a[j], LEN, 1, fp) != 1){printf("\t\t 不能打开");getch();}fclose(fp);break;}if (i == m)printf("\t\t 没有找到该名联系人");
}
void search()
{show();FILE* fp;int nmb, i, m = 0;if ((fp = fopen("data.txt", "r+")) == NULL){fclose(fp);printf("\n\t\t 文件不存在!\n");return;}while (!feof(fp)){if (fread(&a[m], LEN, 1, fp) == 1)m++;}if (m == 0){fclose(fp);printf("\n\t\t 文件没有记录!\n");return;}printf("\n\t\t 请输入联系人的电话号码!:");scanf("%d", &nmb);for (i = 0; i < m; i++)if (nmb == a[i].num){printf("\t\t 电话 姓名 工作单位 住址 \n");printf(FORMAT, DATA);break;}if (i == m)printf("\t\t 没有找到记录!\n");fclose(fp);
}
void show()
{FILE* fp;int i, m = 0;if ((fp = fopen("data.txt", "r+")) == NULL){printf("\n\t\t 文件不存在\n");return;}while (!feof(fp)){if (fread(&a[m], LEN, 1, fp) == 1)m++;}fclose(fp);printf("\t\t ---------------------------------------------------------------------------\n");printf("\t\t || 电话 姓名 工作单位 住址 ||\n");for (i = 0; i < m; i++){printf(FORMAT, DATA);}printf("\t\t ---------------------------------------------------------------------------\n");
}
void insert()
{show();FILE* fp;int i, j, k, m = 0, nmb;if ((fp = fopen("data.txt", "r+")) == NULL){printf("\t\t 文件不存在! \n");return;}while (!feof(fp))if (fread(&a[m], LEN, 1, fp) == 1)m++;if (m == 0){printf("\t\t 文件中没有记录!\n");fclose(fp);return;}printf("\t\t 请输入要插入哪个号码的位置之后:");scanf("%d", &nmb);for (i = 0; i < m; i++)if (nmb == a[i].num)break;if (m == i){printf("\t\t 没有找到改电话号码");fclose(fp);return;}for (j = m - 1; j > i; j--)a[j + 1] = a[j];printf("\t\t 请输入要插入的通讯录信息:\n");printf("\t\t 电话:");scanf("%d", &nmb);for (k = 0; k < m; k++)if (a[k].num == nmb){printf("\t\t 电话已经存在,请按任意键继续!");getch();fclose(fp);return;}a[i + 1].num = nmb;printf("\t\t 姓名:");scanf("%s", &a[i + 1].name);printf("\t\t 工作:");scanf("%s", &a[i + 1].job);printf("\t\t 地址:");scanf("%s", &a[i + 1].address);printf("\t\t 插入成功,请输入任意键返回主界面!");if ((fp = fopen("data.txt", "w+")) == NULL){printf("\t\t 不能打开!");return;}for (k = 0; k <= m; k++)if (fwrite(&a[k], LEN, 1, fp) != 1){printf("\t\t 不能保存!");getch();}fclose(fp);
}
void order()
{FILE* fp;struct list b;int i = 0, j = 0, m = 0;printf("\n");if ((fp = fopen("data.txt", "r+")) == NULL){printf("\t\t 文件不存在\n");return;}while (!feof(fp))if (fread(&a[m], LEN, 1, fp) == 1)m++;fclose(fp);if (m == 0){printf("\t\t 文件中没有记录\n");return;}for (i = 0; i < m - 1; i++)for (j = i + 1; j < m; j++)if (a[i].num < a[j].num){b = a[i]; a[i] = a[j]; a[j] = b;}if ((fp = fopen("data.txt", "w+")) == NULL){printf("\t\t 文件不存在!\n");return;}for (i = 0; i < m; i++)if (fwrite(&a[i], LEN, 1, fp) != 1){printf("\t\t 不能保存文件!\n");getch();}fclose(fp);show();printf("\t\t 保存成功\n");
}
void total()
{FILE* fp;int m = 0;if ((fp = fopen("data.txt", "r+")) == NULL){printf("\t\t 文件不存在!\n");return;}while (!feof(fp))if (fread(&a[m], LEN, 1, fp) == 1)m++;if (m == 0){printf("\n\t\t 没有联系人!\n");fclose(fp);return;}fclose(fp);show();printf("\t\t 您一共拥有 %d 位联系人", m);
}
C语言通讯录管理系统(含完整代码)相关推荐
- 基于B树的图书管理系统(C语言)(含完整代码)
目录: 一.实现的设计要求 1.基本要求 2.额外选做要求 二.项目文件管理 三.完整代码 1.实现的接口 2.头文件 BTreeBook.h 全部代码 3.源文件 BTreeBook.cpp 全部代 ...
- c语言车票管理系统(附完整代码和文档)
作业要求 1.能够录入班次信息,可不定时增加数据. 2.浏览信息,显示所有班次状态(如当前时间大于发车时间,显示"此班已发出"). 3.查询路线(1.班次号查询.2.终点站查询). ...
- C语言--学生管理系统--(完整代码)
本系统分成了三个文件,main.c student.c student.h 功能: 实现对班级成员的增加.删除.修改.遍历.根据成绩排序. 增加 会检查,现在班级已有的人数,班级是否已满(没有学号重复 ...
- 校运动会c语言程序编写,校运动会管理系统报告C语言(含完整代码)
<校运动会管理系统报告C语言(含完整代码)>由会员分享,可在线阅读,更多相关<校运动会管理系统报告C语言(含完整代码)(20页珍藏版)>请在人人文库网上搜索. 1.目 录陈一. ...
- 双向最大匹配算法(含完整代码实现,ui界面)正向最大匹配算法,逆向最大匹配算法
双向最大匹配算法(含完整代码实现,ui界面)正向最大匹配算法,逆向最大匹配算法 一.理论描述 中文分词(Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词 ...
- 模拟图书管理系统的完整代码
模拟图书管理系统的完整代码: def readBook():with open(r"books.txt","r") as f:jsondata=f.read() ...
- c语言程序2000行代码,C语言教务管理系统2000行代码
<C语言教务管理系统2000行代码>由会员分享,可在线阅读,更多相关<C语言教务管理系统2000行代码(56页珍藏版)>请在读根文库上搜索. 1.C语言教务管理系统一.程序结构 ...
- 软件工程c语言2000行代码,C语言教务管理系统(2000行代码)
<C语言教务管理系统(2000行代码)>由会员分享,可在线阅读,更多相关<C语言教务管理系统(2000行代码)(56页珍藏版)>请在人人文库网上搜索. 1.C语言教务管理系统一 ...
- 机器学习图像分割——模型评价总结(含完整代码)
机器学习&图像分割--模型评价总结(含完整代码) 模型评价的方法指标有很多,如:PR-curve,MAE,ROC,Precision,Recall,AUC,AP,mAP,DSI,VOE,RVD ...
最新文章
- 大数据技术之Hadoop3.1.2版本完全分布式部署搭建
- 读《scikiit-learn机器学习》黄永昌第五章
- 2020阿里云线上峰会预告 | 凌云时刻
- whisper客服源码_以太坊源码分析—Whisper
- 胡子决定编程语言运势[转载]
- 2020年拼多多校招面试题及答案-最全最新-持续更新中(2)
- java jdk安装失败_图文解答Java JDK9.0安装失败的原因,附带处理方法
- 嵌入式开发<串口调试工具>
- 如何使用WPS从正文开始页码为1,而不是从目录开始?
- DWD层 (业务数据 二)
- lqc_基于IP地址,端口的访问控制
- 7-2 公路村村通 迪杰斯特拉(dijkstra)算法
- shell脚本计时方法
- HTML5七夕情人节表白网页(流星雨3D旋转相册) HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 3D旋转相册 js烟花代码
- usee2008免费网络电视最新版下载
- LeetCode-整数反转【解决Integer的OverFlow】
- 压力管道级别如何划分
- redux的使用教程
- linux机器的CPU过热
- L1-051. 打折 C++