******************* 实现通讯录编写 *******************
来源:互联网 发布:elasticsearch5 java 编辑:程序博客网 时间:2024/06/06 03:47
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
实现通讯录编写
//虽然是参考着打下来的,但对于我来说真的是太不容易了.....
//但是我想说:....今天我很努力!!
// 2015.3.24 am 03:28
#include <stdio.h>
//导入头文件
#include <string.h>
//定义宏(联系人数组的长度,姓名长度,电话号码长度)
#define NAME_LEN 22
#define TELNUM_LEN 16
#define LEN 100
//定义结构体
typedef struct{
//定义联系人姓名
char name[NAME_LEN];
char telNum[TELNUM_LEN];
}Person;//给结构体起一个别名
//定义联系人数组
Person contacts[LEN];
//定义变量保存联系人个数
int totalContactCount =0;
//定义变量保存文件的名称
char *filePath ="telbook.data";
//定义函数并且声明
void doAdd();
void doDelete();
void doUpdate();
void doList();
void doSearchByName();
void init();
void writeToFile();
int main(int argc,const char * argv[]) {
//定义变量记录编号
int num = 0;
//调用初始化方法
init();
//退出标志
int flag = 1;
while(flag){
//编写控制程序
printf("\n\n**************************\n");
printf("****** 欢迎使用通讯录 ******\n");
printf("****** 1、添加联系人 ******\n");
printf("****** 2、删除联系人 ******\n");
printf("****** 3、修改联系人 ******\n");
printf("****** 4、查看所有联系人 ****\n");
printf("****** 5、搜索联系人 ******\n");
printf("****** 6、退出系统 ******\n");
printf("**************************\n\n");
printf("请输入1-6之间的序号,选择要执行的功能\n");
//接收用户输入的编号
scanf("%d",&num);
//判断编号是否合法
if(num<0 || num >6){
printf("输入错误!\n");
}else{
//根据用户输入的编号,执行不同的功能
switch (num) {
case 1:
doAdd();
break;
case 2:
doDelete();
break;
case 3:
doUpdate();
break;
case 4:
doList();
break;
case 5:
doSearchByName();
break;
case 6:
printf("正在退出系统...\n");
printf("系统已经退出\n");
flag =0;
break;
default:
break;
}
}
}
return 0;
}
void init(){
printf("系统正在初始化...\n");
//定义文件指针,并且打开文件
FILE *fp = fopen(filePath,"r");
//如果能够打开这个文件(说明这个文件已经存在了)
if(fp != NULL){
//把文件中存放联系人数量读取出来
fread(&totalContactCount,sizeof(totalContactCount), 1, fp);
//根据联系人得数量,把联系人信息全部读取出来,放到联系人数组中
for(int i =0;i < totalContactCount;i++){
//一次读取每个联系人得信息
//contacts[0]
fread(&contacts[i],sizeof(Person), 1, fp);
}
}else{
//如果文件打开失败了
//创建文件
fp = fopen(filePath,"w");
//写入联系人数量
fwrite(&totalContactCount,sizeof(totalContactCount), 1, fp);
printf("通讯录数据文件创建成功啦!\n");
}
//关闭文件指针
fclose(fp);
fp =NULL;
printf("系统初始化完成!\n");
}
/*
把数组的内容重新写入到文件中
1)打开文件,w
2)判断是否打开成功
3)先把联系人的数量写入到文件中
4)把每个联系人的数据,都写入到文件中
5)关闭文件
*/
void writeToFile(){
//打开文件
FILE *fp = fopen(filePath,"w");
//判断是否打开成功
if(fp != NULL){
//先把联系人得数量写入到文件中
fwrite(&totalContactCount,sizeof(totalContactCount), 1, fp);
//把每个联系人得数据,都写到文件中
for(int i =0;i < totalContactCount;i++){
//每次写入一个人得数据
fwrite(&contacts[i],sizeof(Person), 1, fp);
}
printf("数据更新完成!\n");
}
fclose(fp);
fp =NULL;
}
/*
查询所有的联系人
思路:
1)先判断 totalContactCount == 0
如果等于0 表示没有联系人,提示:通讯录空无一人
不等于0 打印所有的联系人
2)循环
3)遍历输出所有的联系人信息
*/
void doList(){
printf("您正在执行的是查询所有的联系人的操作:\n");
//先判断totalContacCount == 0
if(totalContactCount == 0){
printf("您的通讯录还很寂寞\n");
}else{
printf("编号\t\t姓名\t\t\t电话\t\t\n");
//不等于0打印所有的联系人
for(int i =0;i<totalContactCount;i++){
//遍历输出所有的联系人信息
printf("%d\t\t%s\t\t\t%s\t\t\n",i+1,
contacts[i].name,contacts[i].telNum);
}
}
}
/*
添加联系人
1) 提示用户输入联系人信息
2)接收联系人信息
3)提示输入电话号码信息
4)接收电话号码
5)让用户再次确认添加联系人 1确认 0 取消
6)保存联系人信息到联系人数组中
7)让联系人的个数+1
8) 把最新的数组,重新保存到文件中
*/
void doAdd(){
printf("您正在执行的是添加联系人得操作:\n");
//提示用户输入联系人信息
printf("请输入联系人姓名: [*联系人姓名中间不能有空格]\n");
//接收联系人信息
//定义字符数组
char name[NAME_LEN];
char telNum[TELNUM_LEN];
scanf("%s",name);
//提示输入电话号码信息
printf("请输入联系人电话号码: *联系人号码中间不能有空格]\n");
//接收电话号码
scanf("%s",telNum);
//让用户再次确认添加联系人 1确认 0 取消
int nn;
printf("请确定要添加这个联系人吗? 0.取消 1.确认\n");
scanf("%d",&nn);
if(nn){
//保存联系人信息到联系人数组中
strcpy(contacts[totalContactCount].name, name);
strcpy(contacts[totalContactCount].telNum, telNum);
//联系人得个数+1
totalContactCount++;
//把最新的数组,重新保存到文件中
writeToFile();
}
}
/*
删除联系人
1)提示用户输入一个要删除的联系人的编号
2)判断编号是否合法
3)再判断 要删除的元素 是否是数组的最后一个元素
如果是最后一个元素,总人数-1
如果不是最后一个元素,也就是中间的元素
移动元素
i = 编号 i< 总 i++
a[编号-1] = a[编号]
总人数-1
4)同步写入到文件中
*/
void doDelete(){
printf("您正在执行的时删除联系人得操作:\n");
//提示用户输入一个要删除的联系人的编号
printf("请输入一个要删除的联系人的编号:\n");
int nn;
//接收
scanf("%d",&nn);
//判断是否合法
if(nn<1 || nn>totalContactCount){
return;
}
int queren=0;
printf("联系人删除后,无法恢复,请确认是否要删除: 0.取消 1.确认\n");
scanf("%d",&queren);
if(queren){
//再判断要删除的元素是否是数组的最后一个元素
if(nn == totalContactCount){
//如果是最后一个元素,总人数-1
totalContactCount--;
}else{
//如果不是最后一个元素,也就事中间的元素
//移动元素
//i = 编号 i < 总 i++
for(int i = nn;i<totalContactCount;i++){
//nn是编号,编号比下标大1
// a[i-1] = a[i]
contacts[i-1]=contacts[i];
}
//总人数-1
totalContactCount--;
}
writeToFile();
}
}
/*
修改联系人
1) 提示用户输入一个联系人的编号
2) 判断编号是否合法
3)让用户输入新的联系人姓名和电话
4) 接收用户的输入
5)让用户再次确认删除
6)把原来的姓名和电话进行更新
7)同步保存到文件中
*/
void doUpdate(){
printf("您正在执行的是修改联系人得操作:\n");
//显示所有的联系人
doList();
//提示用户输入一个要删除的联系人得编号
printf("请输入一个要修改的联系人得编号:\n");
int nn;
scanf("%d",&nn);
//判断输入是否合法
if(nn<1 || nn>totalContactCount){
//如果编号不合法,则return返回
return;
}
char name[NAME_LEN];
char telNum[TELNUM_LEN];
//让用户输入新的联系人姓名和电话
printf("请输入联系人姓名: [*联系人姓名中间不能有空格]\n");
//接收用户输入
scanf("%s",name);
//提示输入
printf("请输入联系人电话号码: [*联系人号码中间不能有空格]\n");
//接收用户输入
scanf("%s",telNum);
//让用户再次确认删除
int queren = 0;
printf("修改联系人信息后,数据无法恢复,请确认修改:0.取消 1.确认\n");
scanf("%d",&queren);
if(queren){
//把原来的姓名和电话进行跟新
strcpy(contacts[nn-1].name, name);
strcpy(contacts[nn-1].telNum, telNum);
writeToFile();
}
}
/*
搜索联系人
1) 提示用户输入一个联系人的姓名
2)接收这个姓名
3)循环,遍历数组
//进行字符串的比较
//strcmp(contacts[i].name,name) == 0
//如果查找到了,输出这个联系人的电话号码
//如果没有查找到,提示:没有查找到
*/
void doSearchByName(){
printf("您正在执行的是搜索联系人得操作:\n");
char name[NAME_LEN];
//提示用户输入一个联系人得姓名
printf("请输入联系人得姓名: [*联系人姓名中间不能有空格]\n");
//接收这个姓名
scanf("%s",name);
//循环,遍历
int i;
for(i = 0;i<totalContactCount;i++){
//进行字符串的比较
if(strcmp(contacts[i].name,name)==0){
//如果查找到了,输出这个联系人得电话号码
printf("您要找的联系人: %s的电话是: %s \n",contacts[i].name,contacts[i].telNum);
//查到了以后,停止
break;
}
}
//如果没有找到,提示:没有查找到
if(i == totalContactCount){
printf("对不起,没有查找到 %s 这个人!\n",name);
}
}
- ******************* 实现通讯录编写 *******************
- 编写通讯录,实现以下四种功能
- 编写一个可容纳1000人的通讯录(【结构体】静态通讯录的实现)
- C编写的通讯录
- C语言通讯录编写
- C#编写的通讯录
- 小菜编写通讯录
- OC编写中级通讯录
- sqlite3 编写简易通讯录
- 实现通讯录
- 实现通讯录
- 实现通讯录
- 完成 简易通讯录 的编写
- 用C语言编写通讯录
- 用C++编写的通讯录
- C语言编写简易通讯录
- iOS开发:通讯录之通讯录列表实现
- C++实现通讯录管理程序
- 存储引擎 事务 索引 存储过程
- WEB分页原理
- Social Media Network Model
- 用自定义.9图设置为android button的背景
- 听说
- ******************* 实现通讯录编写 *******************
- pid到task_struct的对应
- 案例代码
- oracle中:=与=:以及=的区别
- C语言学习——前言
- Python解析命令行参数模块getopt
- 理解Java对象序列化
- yum的使用详解
- iOS开发--大众点评API请求签名生成代码示例