黑马程序员技术交流社区

标题: 通讯录,C的总结 [打印本页]

作者: 李旭飞    时间: 2015-7-7 21:24
标题: 通讯录,C的总结
/*
printf("**************************\n");
printf("****** 欢迎使用通讯录 ******\n");
printf("****** 1、添加联系人  ******\n");
printf("****** 2、删除联系人  ******\n");
printf("****** 3、修改联系人  ******\n");
printf("****** 4、查看所有联系人 ****\n");
printf("****** 5、搜索联系人  ******\n");
printf("****** 6、退出系统    ******\n");
printf("**************************\n\n");
*/

#include <stdio.h>
#include <string.h>
#define M 100
#define A 22
#define B 12
/**
*打印功能的函数
*/
void interface(){
    printf("**************************\n");
    printf("****** 欢迎使用通讯录 ******\n");
    printf("****** 1、添加联系人  ******\n");
    printf("****** 2、删除联系人  ******\n");
    printf("****** 3、修改联系人  ******\n");
    printf("****** 4、查看所有联系人 ****\n");
    printf("****** 5、搜索联系人  ******\n");
    printf("****** 6、退出系统    ******\n");
    printf("**************************\n\n");
}
//定义结构体说明联系人信息
typedef struct{
    char name[A];
    char tel[B];
}Person;
Person per[M];
//文件指针哦
FILE * fp=NULL;
int totel,num;
//遍历结构体数组哈
void con(){
    for(int i=0;i<totel;i++)
        printf("%d\t%s\t\t%s\t\n",i+1,per[i].name,per[i].tel);
}
/**
*为什么我文件注释在调用函数时不显示
*下面的是添加功能
*/
void doAdd(){
    char a[A],b[B];
    int x;
    printf("请输入联系人姓名..\n");
    getchar();
    fgets(a,A,stdin);
    if(a[strlen(a)-1]=='\n')
        a[strlen(a)-1]='\0';
    printf("请输入联系人电话号..\n");
    fgets(b,B,stdin);
    if(b[strlen(b)-1]=='\n')
        b[strlen(b)-1]='\0';
    printf("1.确认 2.取消\n");
    scanf("%d",&x);
    if(x==1){
        strcpy(per[totel].name,a);
        strcpy(per[totel].tel,b);
        fp=fopen("contact.date","wb+");
        totel++;
        fwrite(&totel,4,1,fp);
        fwrite(per,sizeof(Person)*totel,1,fp);
        fclose(fp);
        printf("添加成功!\n");
    }
}
/**
*这应该是删除吧
*/
void doDelete(){
    con();
    printf("选择要删除的联系人编号..\n");
    int x,y;
    scanf("%d",&x);
    if(x>0&&x<=totel){
        printf("要删除 %s 吗?1.确定 2.取消\n",per[x-1].name);
        scanf("%d",&y);
        if(y==1){
        for(int i=x;i<totel;i++)
            per[i-1]=per[i];
            totel--;
            fp=fopen("contact.date","wb+");
            fwrite(per,sizeof(Person)*totel,1,fp);
            fwrite(&totel,4,1,fp);
            fclose(fp);
        }
    }else{
        printf("已取消删除!\n");
    }
}
/**
*这是修改,不信你查词典
*/
void doRevise(){
    con();
    int x,y;
    char a[A],b[B];
    printf("请选择要修改的联系人编号..\n");
    scanf("%d",&x);
    if(x>0&&x<=totel){
        printf("请输入新的姓名..\n");
        scanf("%s",a);
        printf("请输入新的电话号..\n");
        scanf("%s",b);
        printf("要修改联系人%s吗? 1.确定 2.取消\n",per[x-1].name);
        scanf("%d",&y);
        if(y==1){
            strcpy(per[x-1].name,a);
            strcpy(per[x-1].tel,b);
            fp=fopen("contact.date","wb+");
            fwrite(per,sizeof(Person)*totel,1,fp);
            fwrite(&totel,4,1,fp);
            fclose(fp);
            printf("修改成功!\n");
        }
    }else{
        printf("已取消修改!\n");
    }
}
/**
*老夫掐指一算,这是查找功能啊
*/
void doSearch(){
    printf("请输入要查找的联系人姓名..\n");
    char a[A];
    scanf("%s",a);
    int i=0;
    for(;i<totel;i++){
        if(strcpy(per[i].name,a)==0){
            printf("查找信息如下..\n");
            printf("%d\t%s\t\t%s\t\n",i+1,per[i].name,per[i].tel);
            break;
        }
    }
    if(i==totel)
        printf("查无此人!\n");
}

int main(int argc, const char * argv[]) {
    //定义变量,结构体,文件指针
    interface();
    //将文件写入结构体
    fp=fopen("contact.date","r");
    if(fp!=NULL){
    fread(&totel,4,1,fp);
    fread(per,sizeof(Person)*totel,1,fp);
        rewind(fp);
        fclose(fp);
    }
    printf("请输入操作!\n");
    //用循环来执行用户操作
    while(1){
        //接受用户操作,并判断是否合法
        scanf("%d",&num);
        if(num<1||num>6){
            printf("操作错误!\n");
            continue;
        }
        switch(num){
            case 1:
                doAdd();
                break;
            case 2:
                doDelete();
                break;
            case 3:
                doRevise();
                break;
            case 4:
                con();
                break;
            case 5:
                doSearch();
                break;
            case 6:
                printf("系统已退出!\n");
                return 0;
        }
        interface();
    }


    return 0;
}



作者: 李旭飞    时间: 2015-7-7 21:29
居然考了33分,是在逗我吗?
作者: CQY    时间: 2015-7-7 21:39
哪个?难吗?
作者: 寂静的夜    时间: 2015-7-7 21:46
感觉  这个学会就差不多了   c的很多内容
作者: 沙睿    时间: 2015-7-7 22:10
还是多文件开发比较好!具有好的封装性




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2