-c项目
来源:互联网 发布:软件测试很难吗 编辑:程序博客网 时间:2024/05/22 12:44
//
// main.c
#include <stdio.h>
#include <string.h>//光头鹏提示您,您在修改联系人信息的时候需要调用系统的strcpy函数,所以要引入该文件
//函数的声明
void initBook();//初始化通讯录
void writeBook();//向文件中写入数据
void showTitle();//显示这个界面的标题
void addPerson();//添加联系人
void deletePerson();//删除联系人
void updatePerson();//修改联系人
void selectPerson();//查询联系人
void searchPerson();//搜索联系人
//宏的定义
#define NAME_LEN 21 //用来表示的是存储名字的数组的长度
#define MN_LEN 12 //用来表示的是存储电话号码的数组的长度
//定义一个结构体存储联系人的姓名和电话号码
typedef struct {
char name[NAME_LEN];//用来存储姓名
char mobileNumber[MN_LEN];//用来存储电话号码
}Person;
//定义一个数组存多个人的信息
Person pers[1000];
//全局变量的声明和初始化
int perCount=0;//人的个数(联系人的编号)
char *filePath="book.txt";//存储数据的文件
int main(int argc, const char * argv[]) {
int flag=1;
//定义一个变量用来接收用户输入的功能编号
int functionNumber=-1;
//初始化的通讯录的数据
initBook();//初始化
while (flag) {
showTitle();//显示界面
printf("请输入1-6的数字选择对应的功能\n");
scanf("%d",&functionNumber);
if (functionNumber<1||functionNumber>6) {
printf("您输入的内容不合法,请重新输入\n");
}else{
switch (functionNumber) {
case 1:
//添加联系人
addPerson();
break;
case 2:
//删除联系人
deletePerson();
break;
case 3:
//修改联系人
updatePerson();
break;
case 4:
//查询联系人
printf("您选择的是查询联系人功能\n");
selectPerson();
break;
case 5:
//搜索联系人
searchPerson();
break;
case 6:
//退出程序
flag=0;//表示的是退出程序,循环条件为0,假,跳出循环
printf("程序正在退出中......\n");
printf("程序退出成功\n");
break;
default:
break;
}
}
}
return 0;
}
void initBook(){//初始化通讯录
//引入文件头
//定义文件指针
//打开文件--读取
FILE *fp=fopen(filePath, "rb");
//判断是否打开成功
if (fp!=NULL) {
printf("数据初始化成功\n");
//打开成功了
//先读取文件中的编号信息
fread(&perCount, sizeof(int), 1, fp);
//然后根据编号信息读取人的数据,存到数组中
for (int i=0; i<perCount; i++) {
fread(&pers[i], sizeof(Person), 1, fp);
}
}else{
//打开失败
//文件不存在,不存在则创建文件,并且把编号为0存到文件中
fp=fopen(filePath, "w");
fwrite(&perCount, sizeof(int), 1, fp);
printf("通讯录文件创建成功\n");
}
//关闭文件
fclose(fp);
}
//把数据写入到文件中
void writeBook(){//向文件中写入数据
//定义文件指针,并打开文件
FILE *fp=fopen(filePath, "w");
if (fp!=NULL) {
//先把编号写入到文件中
fwrite(&perCount, sizeof(int), 1, fp);
//再根据编号遍历循环数组,把数组中的每个人的信息依次的写入到文件中
for (int i=0; i<perCount; i++) {
fwrite(&pers[i], sizeof(Person), 1, fp);
}
}
fclose(fp);
}
//显示界面的函数的实现
void showTitle(){//显示这个界面的标题
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");
}
void addPerson(){//添加联系人
printf("您选择是:添加联系人功能,请您按提示操作\n");
//#define NAME_LEN 21 //用来表示的是存储名字的数组的长度
//#define MN_LEN 12 //用来表示的是存储电话号码的数组的长度
//第一个用来存储姓名
//char name[NAME_LEN];
//第二个用来存储电话号码
//char phoneNumber[MN_LEN];
printf("请输入联系人的姓名:*姓名不能有空格*\n");
scanf("%s",pers[perCount].name);//接收用户输入的姓名
printf("请输入联系人的电话号码:*电话号码不能有空格*\n");
scanf("%s",pers[perCount].mobileNumber);//接收用户输入的电话号码
perCount++;
writeBook();//写入数据
//1
//把联系人的信息写入到文件中
//此处用函数的方式进行写入数据,为啥?因为 增删改查的功能都可能会用到操作文件.
//修改编号的值,(编号的值默认为0,编号可以作为下标来使用,添加完毕后,编号要++)
printf("操作成功\n");
}
void deletePerson(){//删除联系人
printf("您选择是:删除联系人功能,请您按提示操作\n");
//显示所有的联系人
printf("联系人信息如下\n");
selectPerson();
int perNum;//这个变量是用来存储用户输入的联系人的编号的
printf("请输入联系人的编号\n");
scanf("%d",&perNum);
if (perNum<0||perNum>perCount) {
printf("编号不存在\n");
return;
}
//定义一个变量用来接收用户输入的 确认与否 1----0
int isOk=0;
//编号存在
printf("请确认是否删除该联系人的信息:1--确认,0--取消\n");
scanf("%d",&isOk);
if (isOk==1) {//isOK=1才执行if中的代码
//确认删除联系人
//现在如果是5个人, 用户输入的是3
for (int i=perNum; i<perCount; i++) {
pers[i-1]=pers[i];//下标为4用下标为的替换
}
perCount--;//编号减1
writeBook();//重新写入文件中
selectPerson();//删除后可以再次的查询一下联系人
printf("操作成功了\n");
}
}
void updatePerson(){//修改联系人
printf("您选择的功能是:修改联系人,请按提示操作\n");
printf("所有联系人的信息如下:\n");
selectPerson();//查询所有的联系人信息
int perNum;
printf("请输入要修改的联系人的编号\n");
scanf("%d",&perNum);
if (perNum<0||perNum>perCount) {
printf("您输入的编号有误\n");
return;
}
char name[NAME_LEN];//定义一个字符数组存用户输入的姓名
char phoneNum[MN_LEN];//定义一个字符数组存用户输入的电话号码
printf("请输入联系人的姓名\n");
scanf("%s",name);
printf("请输入联系人的电话号码\n");
scanf("%s",phoneNum);
int isOk=0;
printf("请确认是否修改该联系人的信息:1--确认,0--取消\n");
scanf("%d",&isOk);
if (isOk==1) {
//用户确认删除
//这个函数在string.h中,所以,在最上面要引入头文件
strcpy(pers[perNum-1].name,name);//修改姓名
strcpy(pers[perNum-1].mobileNumber,phoneNum);//修改电话号码
//写入文件
writeBook();//重新写入文件
printf("操作成功\n");
selectPerson();//循环联系人=====更新
}
}
void selectPerson(){//查询联系人
// printf("您选择是:查询联系人功能\n");
if (perCount<=0) {
printf("通讯录中没有联系人\n");
}else{
printf("编号\t姓名\t\t电话号码\t\n");
for (int i=0; i<perCount; i++) {
printf("%d\t%s\t\t%s\t\n",i+1,pers[i].name,pers[i].mobileNumber);
}
}
void searchPerson(){//搜索联系人
printf("您选择的功能是:搜索联系人,请按提示操作\n");
char name[NAME_LEN];//接收用户输入的姓名
printf("请输入搜索联系人的姓名:\n");
scanf("%s",name);//接收用户输入的姓名
//循环遍历联系人的数组
int i=0;
for (i=0; i<perCount; i++) {
//用户输入的姓名和数组中的姓名对比---两个字符数组的对比--比较--
if (strcmp(pers[i].name, name)==0) {
printf("您要查找的%s的电话号码为:%s\n",pers[i].name,pers[i].mobileNumber);
break;//只要到了一个人就跳出
}
}
if (i==perCount) {
printf("没有这个联系人\n");
}
}
- -c项目
- 【C项目】注释转换项目
- C 项目中的extern "C" {}
- C项目的分解
- C 开源项目
- C项目经验总结
- C语言项目
- leapMotion项目创建(C#)
- c ++ 项目移植步骤
- 第一个c项目
- objective-c 项目分析
- C#-新建控制台项目
- C开源项目
- C 项目 makefile 模板
- c语言练手项目
- C语言项目感想
- C语言项目感想
- C语言项目感受
- 驱动开发(4)内核中的内存分配和错误码
- Javascript静态变量与实例变量
- javase中的集合
- 基础 并查集
- 图形效果、图形合成、人脸识别
- -c项目
- 原子操作
- 蜻蜓FM如何诈骗投资人和广告主源代码剖析
- 【DirectX 9.0c入门教程】之一 开发环境搭建:安装vs2008 sp1和DirectX SDK
- Linux_NetworkManager_RHEL7
- HDU 5514 Frogs (2015沈阳F题&&容斥+剪枝)
- 第9周项目2 对称矩阵压缩存储的实现与应用
- Dom4j介绍与接口说明
- 第十周项目2二叉树的链式存储及基本运算