C语言编写一个电话本

来源:互联网 发布:360卸载找不到软件 编辑:程序博客网 时间:2024/06/01 07:25
#include "stdafx.h"#include<string.h>#include<stdlib.h>void init();//初始化,读取磁盘信息void save();//保存内存数据到磁盘文件//strtok 分解字符串为一组字符串bool menu();//功能void add();//添加联系人void show();//显示全部联系人void remove();//删除一个联系人void xiugai();//修改联系人void chazhao();//查找某一个联系人struct Person //联系人数据结构{    char name[100];    char tel[100];};#define FILENAME "persons"  //磁盘上的文件名Person persons[1000];//所有联系人结构数组int n = 0;//已有联系人的数量int main(){    //先读取已经有的联系人    init();    while (true)    {        if (!menu())         {            break;        }    }    return 0;}bool menu() {    printf("\t\t欢迎使用\n");    printf("\t1.增加一个联系人\n");    printf("\t2.删除一个联系人\n");    printf("\t3.修改一个联系人\n");    printf("\t4.查找联系人\n");    printf("\t5.显示全部联系人\n");    printf("\t6.退出\n");    printf("输入你要做的功能代码1-6\n");    char ch[100];    scanf_s("%s", ch, 100);    switch (ch[0])    {    case '1':        add();        break;    case '2':        remove();        break;    case '3':        xiugai();        break;    case '4':        chazhao();        break;    case '5':        show();        break;    case '6':        printf("退出\n");        return false;        break;    default:        printf("无效功能!给我从新选择!\n");        break;    }    return true;}void add() {    Person  temp;    printf("增加一个联系人\n");    //得到姓名    printf("输入姓名:");    char buf[100];    scanf_s("%s", buf, 100);    strcpy_s(temp.name, buf);//拷贝    //验证    //得到电话    printf("输入电话:");    scanf_s("%s", buf, 100);    strcpy_s(temp.tel, buf);    //保存到内存    persons[n] = temp;    n++;    //保存到磁盘    save();    printf("添加成功\n");}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("磁盘更新成功");}//显示联系人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 >= 1)     {        show();//罗列所有的人        printf("输入要删除的联系人的编号(1-%d):", n);        char buf[4];        scanf_s("%s", buf, 4);        int nn = atoi(buf);//转换成int         if (nn < 1 || nn>n) {            printf("没有联系人,你删啥玩意");        }        else        {            if (nn != n) //移动下面的联系人            {                for (int i = 0; i < n - nn; i++)                {                    persons[nn + i - 1] = persons[nn + i];                    //strcpy_s(persons[nn + i - 1].name, persons[nn + i].name);                    //strcpy_s(persons[nn + i - 1].tel, persons[nn + i].tel);                }            }            n--;//删除后人数减少1            save();//同步到磁盘        }    }    else    {        printf("没有联系人,你删啥玩意\n");    }}void xiugai() {    show();//罗列所有的人    Person  temp;    printf("输入要修改的联系人的编号(1-%d):", n);    char buf[4];    scanf_s("%s", buf, 4);    int nn = atoi(buf);//转换成int     printf("输入姓名:");    char bufd[100];    scanf_s("%s", bufd, 100);    strcpy_s(temp.name, bufd);//拷贝    printf("输入电话:");    scanf_s("%s", bufd, 100);    strcpy_s(temp.tel, bufd);    persons[nn-1] = temp;    save();}void chazhao() {    printf("1.姓名查找,2.电话查找\n");    char cha[80];    scanf_s("%s", cha, 80);    char buf[100];    if (cha[0] == '1')     {        printf("输入姓名:");        scanf_s("%s", buf, 100);        for (int i = 0; i < n; i++)        {            if (strcmp(persons[i].name, buf) == 0)            {                printf("编号:%d\t\t姓名:%s\t\t电话:%s\n", i + 1, persons[i].name, persons[i].tel);            }        }    }    else if (cha[0] == '2')    {        printf("输入电话:");        scanf_s("%s", buf, 100);        for (int i = 0; i < n; i++)        {            if (strcmp(persons[i].tel, buf) == 0)            {                printf("编号:%d\t\t姓名:%s\t\t电话:%s\n", i + 1, persons[i].name, persons[i].tel);            }        }    }    else    {        printf("输入有误,重新选择。\n");    }}