关闭

【黑马程序员】C语言—通讯录系统的实现

标签: c语言函数循环文件通讯录
688人阅读 评论(0) 收藏 举报
分类:


------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


c语言通讯录系统实现:

需求分析:

利用文件读,写的方法 

实现增加通讯录联系人信息

实现删除通讯录联系人信息

实现查找通讯录联系人信息

实现修改通讯录联系人信息

实现查看现有通讯录联系人信息


代码实现:

<span style="font-size:14px;">//
//  main.c
//  C语言通讯录实现
//
//  Created by Brisinga on 15/10/14.
//  Copyright © 2015年 yan. All rights reserved.
//

#include <stdio.h>
#include<string.h>
#define LEN 10
#define NAMELEN 22
#define TELLEN 12

//*************结构体变量定义****************
//定义联系人的个数
int contactCount = 0;
//定义结构体
typedef struct{

    //定义联系人姓名
    char name[NAMELEN];
    //定义联系人电话
    char tel[TELLEN];

}Person;

//初始化联系人数组
Person contact[LEN];
//定义文件名
char *path = "a.data";

//接收用户输入的编号
int no;
//**************函数声明********************

//初始化声明
void init();
//校验声明
int isValid(int n,int min,int max);
//添加联系人
void addContact();
//删除联系人
void deleteContact();
//修改联系人
void updateContact();
//查看所有联系人
void doList();
//搜索联系人
void searchContact();
//退出系统
void quit();
//联系人写入文件
void writeFile();
//***************************************


int main(int argc, const char * argv[]) {
    
 
    //通讯录初始化
    init();
    printf("通讯录初始化成功!\n");
    
    
    
    while (1) {
        
        //定义界面
    printf("**********************************\n");
    printf("***********欢迎使用通讯录***********\n");
    printf("***********1.添加联系人*************\n");
    printf("***********2.删除联系人*************\n");
    printf("***********3.修改联系人*************\n");
    printf("***********4.查看所有联系人**********\n");
    printf("***********5.搜索联系人*************\n");
    printf("***********6.退出系统***************\n");
    printf("**********************************\n");
        
        
        //提示用户输入编号
        printf("请输入要进行操作的编号:\n");
        scanf("%d",&no);
        //判断输入是否合法
        isValid(no, 1, 6);
        //判断用户的操作
        switch (no) {
            case 1:
                //添加联系人
                addContact();
                break;
            case 2:
                //删除联系人
                deleteContact();
                break;
            case 3:
                //更新联系人
                updateContact();
                break;
            case 4:
                //查看联系人
                doList();
                break;
            case 5:
                //搜索联系人
                searchContact();
                break;
            case 6:
                //退出
                quit();
                return 0;
                
            default:
                break;
        }
        
    }
    return 0;
}

//通讯录初始化
void init(){

    //定义文件指针
    FILE *fp = fopen(path, "r");
    //判断通讯录是否存在
    if (fp!=NULL) {
    //如果存在
    //1.读取联系人个数
        fread(&contactCount, sizeof(contactCount), 1, fp);
    //2.读取每一个联系人nts
        for (int i=0; i<contactCount; i++) {
            fread(&contact[i], sizeof(Person), 1, fp);
        }
        
    }else{
    
    //如果不存在
    //创建通讯录
        fp = fopen(path, "wb");
    //写入当前联系人的个数
        fwrite(&contactCount, sizeof(contactCount), 1, fp);

    }
    fclose(fp);

}

//校验输入是否合法
int isValid(int n,int min,int max){
    
    //如果输入的编号大于min小于max,则返回0
    if (n>=min&&n<=max) {
        return 0;
    }
    
    //否则返回1
    printf("输入非法!\n");
    return 1;

}

//添加联系人
void addContact(){
    
    //提示用户输入要添加联系人的姓名
    printf("请输入要添加的联系人姓名:*注意姓名之间不能有空格\n");
    //接收联系人姓名
    scanf("%s",contact[contactCount].name);
    //提示用户输入要添加联系任的电话
    printf("请输入要添加联系人的电话: *注意电话号码之间不能有空格\n");
    //接收联系人电话
    scanf("%s",contact[contactCount].tel);
    //询问是否确定添加
    printf("确定要添加么?1.确定  0.取消\n");
    scanf("%d",&no);
    if (no) {
        contactCount++;
        //写入文件
        writeFile();
        printf("添加成功!\n");
    }


}

//删除联系人
void deleteContact(){
    
    //显示联系人
    doList();
    int flag;
    //提示用户输入要删除联系人的编号
    printf("请输入要删除联系人的编号:\n");
    //接收用户输入的编号
    scanf("%d",&no);
    //判断编号是否合法
    if(!isValid(no, 1, contactCount)){
    //编号合法
        printf("确定要删除么?删除后将无法恢复!1.确定 0.取消\n");
        scanf("%d",&flag);
        if (flag) {
            //如果要删除的联系人在末尾
        if (no==contactCount) {
            //则contactCount-1
            contactCount--;
        }else{
    
    //如果要删除的联系人不在末尾
    //移动数组元素
            for (int i=no-1; i<contactCount-1; i++) {
                contact[i]=contact[i+1];
            }
            
        }
    //contactCount--
            contactCount--;
    //写文件
        writeFile();
        }
    
    }else
    //编号不合法,则退出
        printf("编号不合法!\n");
        return ;

}

//修改联系人
void updateContact(){
    
    //显示联系人
    doList();
    //提示用户输入要修改联系人的编号
    printf("请输入要修改的联系人的编号:\n");
    //接收用户输入的编号
    scanf("%d",&no);
    //判断编号是否合法
    int flag;
    if (!isValid(no, 1, contactCount)) {
        //提示用户输入新的的联系人的姓名
            printf("请输入新的姓名:*注意:姓名之间不能有空格\n");
          //接收用户输入的姓名
            scanf("%s",contact[no-1].name);
          //提示用户输入新的电话号码
            printf("请输入新的电话号码:*注意:电话号码之间不能有空格\n");
          //接收用户输入的电话号码
            scanf("%s",contact[no-1].tel);
        
          //询问用户确定修改么?
        printf("确定要修改么?1.确定 0.取消\n");
        scanf("%d",&flag);
        if (flag) {
          
          //写文件
            writeFile();
            printf("联系人修改成功!\n");
        }else{
    
            printf("编号不合法!!\n");
            return ;
        
        }
    
    }
   

}

//查看所有联系人
void doList(){
    
    printf("显示所有联系人:\n");
    printf("编号\t姓名\t电话\n");
    for (int i=0; i<contactCount; i++) {
        printf("%d\t%s\t%s\n",i+1,contact[i].name,contact[i].tel);
    }

}

//搜索联系人
void searchContact(){
    
    int flag = 1;
    //接收用户输入的姓名
    char searchName[NAMELEN];
    //接收用户输入的电话
    char searchTel[TELLEN];
    //询问用户搜索方式
    printf("请输入查找的方式: 1.按姓名查找 2.按电话号码查找\n");
    //接收用户的搜索方式
    scanf("%d",&no);
    if (no==1) {
        //请用户输入要查找的姓名
        printf("请输入要查找到姓名:\n");
        scanf("%s",searchName);
        for (int i=0; i<contactCount; i++) {
            if (!strcmp(searchName,contact[i].name)) {
                printf("您查找的联系人为:\n");
                printf("%d\t%s\t%s\n",i+1,contact[i].name,contact[i].tel);
                return ;
            }else{
            
                flag = 0;
            }
        }
        
    }else if(no==2){
    
            //请用户输入要查找的电话号码
        printf("请输入要查找的电话号码:\n");
        scanf("%s",searchTel);
        for (int i=0; i<contactCount; i++) {
            if (!strcmp(searchTel,contact[i].tel)) {
                printf("您查找的联系人为:\n");
                printf("%d\t%s\t%s\n",i+1,contact[i].name,contact[i].tel);
                return ;
            }else{
                
                flag = 0;
            }
        }
        

    }else{
        printf("非法输入!\n");
        return ;
    }
    if (!flag) {
        printf("很抱歉!小伙伴不在通讯录中!\n");
    }
    
    
   
}

//退出系统
void quit(){
    
    printf("系统正在退出...\n");
    printf("系统已经退出!\n");
    

}

//联系人写入文件
void writeFile(){

    //定义文件指针
    FILE *fp = fopen(path, "wb");
    if (fp!=NULL) {
        //写入联系人个数
        fwrite(&contactCount, sizeof(contactCount), 1, fp);
        //写入每个联系人
        for (int i=0; i<contactCount; i++) {
            
            fwrite(&contact[i], sizeof(Person),1, fp);
        }
        
    }
    fclose(fp);

}</span>


1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5825次
    • 积分:260
    • 等级:
    • 排名:千里之外
    • 原创:21篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档