C语言 通讯录(本地储存)

来源:互联网 发布:越南工业知乎 编辑:程序博客网 时间:2024/05/17 02:34
#include "stdafx.h"#include <string.h>#include <stdlib.h>void init();//初始化 读取磁盘信息到内存bool menu();// 显示菜单和选择菜单void add();//添加联系人void show();//显示所有联系人void save();//保存内存数据到磁盘文件void remove();//删除一个联系人void update(); //修改一个联系人void find();char* input(char *);struct Person {//联系人数据结构    char name[100];    char tel[100]; };char buf[100];#define FILENAME "persons"//磁盘上未见名Person persons[1000];//所有联系人结构数组int n = 0;//联系人个数int main(){    //先去读取已经有的联系人    init();    while (true) {        if (!menu()) {            break;        }    }    return 0;}bool menu() {    printf("1、增加一个联系人\n");    printf("2、删除一个联系人\n");    printf("3、修改一个联系人\n");    printf("4、查找联系人\n");    printf("5、显示所有联系人\n");    printf("6、退出\n");    char ch[100];    printf("请输入功能代号:(1-6)");    scanf_s("%s", ch, 100);    switch (ch[0])    {    case '1':        add();        break;    case '2':        remove();        break;    case '3':        update();        break;    case '4':        find();        break;    case '5':        show();        break;    case '6':        return false;        break;    default:        printf("无效的号码!\n");        break;    }    return true;}void add () {    Person temp;    //得到姓名    char *buf = input("请输入联系人姓名");    strcpy_s(temp.name, buf);    //得到电话    buf = input("请输入联系人电话");    strcpy_s(temp.tel, buf);    //保存到内存    persons[n] = temp;    n++;    //保存到磁盘    save();}void save() {    FILE * fp = NULL;    fopen_s(&fp, FILENAME, "w");    fwrite(&n, sizeof(int), 1, fp);    for (int i = 0; i < n; i++) {        fwrite(&persons[i], sizeof(Person), 1, fp);    }    fclose(fp);    printf("磁盘更新!\n");}void show() {    if (n < 1) {        printf("对不起,真的还没有联系人呀!\n");        return;    }    printf("编号\t\t姓名\t\t电话\n");    for (int i = 0; i < n; i++) {        printf("%d\t\t%s\t\t%s\n", i + 1, persons[i].name, persons[i].tel);    }}void init() {    //读文件    FILE * fp = NULL;    fopen_s(&fp, FILENAME, "r");    if (fp != NULL) {        fread(&n, sizeof(int), 1, fp);        for (int i = 0; i < n; i++) {            fread(&persons[i], sizeof(Person), 1, fp);        }    }    else {        return;    }    fclose(fp);}void remove(){    if (n > 0) //有人    {        show();//罗列所有人,给个编号        printf("请输入你要删除联系人的编号(1-%d):", n);        char buf[4];        scanf_s("%s", buf, 4);        int nn = atoi(buf);//把键盘上输入的字符串转换为整数        if (nn<1 || nn>n) //输入编号验证        {            printf("对不起,你现在不能删除,因为是一个无效的编号!\n");        }        else {            if (nn != n) //移动下面的联系人            {                for (int i = 0; i < n - nn; i++) {                    persons[nn + i - 1] = persons[nn + i];                }            }            n--;//总人数减去一个             save();//同步到磁盘            printf("删除联系人成功!\n");        }    }    else {        printf("对不起,你现在不能删除,因为一个人也没有!\n");    }}void update(){    if (n > 0) //有人    {        show();//罗列所有人,给个编号        printf("请输入你要修改联系人的编号(1-%d):", n);        scanf_s("%s", buf, 4);        int nn = atoi(buf);//把键盘上输入的字符串转换为整数        if (nn<1 || nn>n) //输入编号验证        {            printf("对不起,你现在不能修改,因为是一个无效的编号!\n");        }        else {            printf("请输入你要修改的项目(a-所有,n-姓名,p-电话)");            scanf_s("%s", buf, 100);            if (buf[0] == 'a' || buf[0] == 'A')            {                char*buf =  input("请输入新的姓名");                   strcpy_s(persons[nn - 1].name, buf);                buf = input("请输入新的电话");                strcpy_s(persons[nn - 1].tel, buf);            }            else if (buf[0] == 'n' || buf[0] == 'N')            {                char*buf = input("请输入新的姓名");                strcpy_s(persons[nn - 1].name, buf);            }            else if (buf[0] == 'p' || buf[0] == 'P')            {                char *buf = input("请输入新的电话");                strcpy_s(persons[nn - 1].tel, buf);            }            save();//同步到磁盘            printf("修改联系人成功!\n");        }    }    else {        printf("对不起,你现在不能删除,因为一个人也没有!\n");    }}void find(){    printf("请输入你要寻找的关键字(姓名或者电话)");    char buf[100];    scanf_s("%s",buf,100);    int c = 0;    for (int  i = 0; i < n; i++)    {        if (strcmp(persons[i].name, buf) == 0 || strcmp(persons[i].tel, buf) == 0)        {            printf("%s\t\t%s\n",persons[i].tel);            c++;        }    }    printf("一共找到了%d个人!\n",c);}char* input(char* msg){    printf("%s:", msg);    scanf_s("%s", buf, 100);    return buf;}
原创粉丝点击