A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李旭飞 中级黑马   /  2015-7-7 21:24  /  821 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
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;
}


4 个回复

倒序浏览
居然考了33分,是在逗我吗?
回复 使用道具 举报
哪个?难吗?
回复 使用道具 举报
感觉  这个学会就差不多了   c的很多内容
回复 使用道具 举报
还是多文件开发比较好!具有好的封装性
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马