¥···每天进步一点点,每天快乐一点点!坚持每天写点东西,感觉很好,既复习基础知识,又可以收获成就感,何乐而不为呢?···¥
1. 用到的知识点:
常量、变量是使用
全局变量
分支语句
函数
宏
循环语句、scanf和printf、数据、结构体、文件、指针*
2. 经典问题
数组元素的删除(用一个变量来记录数组长度 --- 学习链表后面可以用链表代替 )
3. 功能分析以及实现步骤
功能:增删改查 退出
思路:
1.初始化方法,用于初始化数据
1) 尝试性的读取文件;
2) 如果成功,说明文件存在,则读取文件内容;
3) 不成功,说明文件不存在
创建文件
写入联系人数量
2.添加联系人
1) 提示用户输入的姓名与电话号码
2) 接收用户输入的内容
3) 保存到联系人数组
4) 写入到文件
3.删除联系人
1) 让用户输入要删除的数据的编号
2) 判断编号是否合法
3) 提示用户再次确认
4) 开始删除数组元素
5) 删除文件内容
4.修改联系人
1) 提示要修改的联系人编号
. 2) 判断编号是否合法
3) 让用户输入新的姓名,电话
4) 让用户再次确认
5) 开始修改用户信息
6) 更新到文件中
5.查看联系人
1) 先判断联系人是否为空
. 2) 如果不为空,遍历数组,显示所有联系人
5.搜索联系人
1) 提示用户输入要查找的人的姓名
. 2) 遍历数组查找是否有这个人
3) 找到了显示号码4) 没找到提示用户没有该联系人
6.退出
4. 界面框架搭建(重点)
引入头文件
进行必要的宏定义
定义文件名称变量,联系人数组,联系人结构体
定义函数,并进行函数声明
编写循环控制语句
显示操作界面
根据编号执行不同的函数
代码:
/**
* 时间:2015/11/09
* 作者:一夜孤舟
* 内容:C语言项目实战-通讯录
* 总结:
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 宏定义,字母最好是用大写
#define N 100 //定义通讯录容量
#define NAMELEN 22 //用户名字
#define NUMLEN 12 //号码长度11为, 加上结束符\0
// **************定义部分**************
// 定义联系人的结构体 -- 使用分好;
typedef struct Per{
// 联系人
char name[NAMELEN];
// 电话号码
char telNum[NUMLEN];
}Person;
// Person A -> struct a
// 存储所有联系人,联系人的数组
Person contacts[N];
// 定义联系人个数
int totalContactCount = 0;
// 接收用户的编号
int fno;
// **********************************
// **********函数声明部分**************
int validateInput(int num, int min, int max);
void init();
// 各操作的实现
void doAdd();
void doDelete();
void doAmend();
void doList();
void doSearchByName();
int main()
{
/*
1. 引入头文件
2. 进行必要的宏定义
3. 定义文件名称变量,联系人数组,联系人结构体
4. 定义函数,并进行函数声明
5. 编写循环控制语句
6. 显示操作界面
7. 根据编号执行不同的函数
*/
while (1) // 进行无限循环
{
printf("\n");
// 软件的界面显示出来
printf("*************************\n");
printf("**** 欢迎使用通讯录 *******\n");
printf("***** 1.添加联系人 *******\n");
printf("***** 2.删除联系人 *******\n");
printf("***** 3.修改联系人 *******\n");
printf("***** 4.查看联系人 *******\n");
printf("***** 5.搜索联系人 *******\n");
printf("***** 6.退出系统 *******\n");
printf("*************************\n");
printf("\n");
// 提示用户输入一个编号
printf("请选择1-6之间的功能编号:\n");
scanf("%d", &fno);
// 验证用户输入的编号
//if (validateInput(fno, 1, 6)
//{
// return 0;
//}
validateInput(fno, 1, 6);
switch (fno)
{
case 1:
//执行添加
doAdd();
break;
case 2:
//执行删除
doDelete();
break;
case 3:
//执行修改
doAmend();
break;
case 4:
//执行显示所有联系人
doList();
break;
case 5:
//执行查找
doSearchByName();
break;
case 6:
//执行退出
printf("系统正在退出..\n");
printf("系统已经退出!\n");
return 0;
break;
default:
break;
}
}
system("pause");
return 0;
}
/**
* 验证输入是否合法
*
* @param num 带验证的数
* @param min 最小值
* @param max 最大值
* @return 1 非法 0 合法
* return 0是正常退出, return 1是异常退出
*/
int validateInput(int num, int min, int max)
{
if (num < min || num > max)
{
printf("非法的输入! \n");
return 1;
}
return 0;
}
/*
* 增加联系人
*/
void doAdd()
{
printf("你选择的是添加联系人,请按提示操作 \n");
}
/*
* 删除联系人
*/
void doDelete()
{
printf("你选择的是删除联系人,请按提示操作 \n");
}
/*
* 修改联系人
*/
void doAmend()
{
printf("你选择的是修改联系人,请按提示操作 \n");
}
/*
* 显示联系人
*/
void doList()
{
printf("你选择的是显示联系人,联系人数据如下 \n");
}
/*
* 搜索联系人
*/
void doSearchByName()
{
printf("你选择的是搜索联系人,请按提示操作 \n");
}