-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");

    }

}

 

 

0 0
原创粉丝点击