通讯录管理系统(C语言)

/*
* 对通讯录进行插入、删除、排序、查找、单个显示功能
*/

#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>

int n;

typedef struct _Address_List
{
    char name[30];            //名字
    char work[30];            //职业
    char handset[20];        //手机号码
    char email[30];            //电子邮件
    char address[30];        //地址
    struct _Address_List *next;
}address_List;
#define LEN sizeof(address_List)

address_List *Release(address_List *head);

//创建一个通讯录
address_List *Create(void)
{
    address_List *head,*p1,*p2;
    char name[30];
    n = 0;
    p1 = (address_List *)malloc(LEN);
    p2 = p1;
    printf("请输入通讯录的内容!\n姓名输入为0时表示创建完毕!\n");
    printf("请输入姓名:");
    gets(name);
    if(strcmp(name,"0")!=0)
    {
        strcpy(p1->name,name);
        printf("请输入职业:");
        gets(p1->work);
        printf("请输入手机:");
        gets(p1->handset);
        printf("请输入电子邮件:");
        gets(p1->email);
        printf("请输入通讯地址:");
        gets(p1->address);
        head = NULL;
        while(1)
        {
            n = n+1;
            if(n == 1)
            {
                head = p1;
            }
            else
            {
                p2->next = p1;
            }
            p2 = p1;
            printf("请输入姓名:");
            gets(name);
            if(strcmp(name,"0") == 0)
            {
                break;
            }
            else
            {
                p1 = (address_List *)malloc(LEN);
                strcpy(p1->name,name);
                printf("请输入职业:");
                gets(p1->work);
                printf("请输入手机:");
                gets(p1->handset);
                printf("请输入电子邮件:");
                gets(p1->email);
                printf("请输入通讯地址:");
                gets(p1->address);
            }
        }
        p2->next = NULL;
        return head;
    }
    else
    {
        return 0;
    }
}

//打印整个通讯录
void print(address_List *head)
{
    address_List *p;
    if(head != NULL)
    {
        p = head;
        printf("本通讯录现在共有%d人;\n",n);
        printf("---姓名---------职业----------手机--------Email-------------通讯地址\n");
        printf("====================================================================\n");
        do
        {
            printf("=%s\t\t",p->name);
            printf("=%s\t\t",p->work);
            printf("=%s\t\t",p->handset);
            printf("=%s\t\t",p->email);
            printf("=%s\n",p->address);
            p = p->next;
        }while(p != NULL);
        printf("==================================================================\n");
    }
    else
    {
        printf("通讯录为空,无法输出!\n");
    }
}

//在通讯录插入
address_List *insert(address_List *head)
{
    address_List *p0,*p1,*p2;
    char name[20];
    p1 = head;
    printf("请输入增加的内容:\n");
    printf("请输入姓名:");
    gets(name);
    if(strcpy(name,"0") == 0)
    {
        printf("姓名不能为0,增加失败!\n");
        return head;
    }
    else
    {
        p0 = (address_List *)malloc(LEN);
        strcpy(p0->name,name);
        printf("请输入职业:");
        gets(p1->work);
        printf("请输入手机:");
        gets(p1->handset);
        printf("请输入电子邮件:");
        gets(p1->email);
        printf("请输入通讯地址:");
        gets(p1->address);
        n = n+1;
        if(head == NULL)
        {
            head = p0;
            p0->next = NULL;
            return head;
        }
        else
        {
            while(strcmp(p0->name,p1->name) > 0 && (p1->next != NULL))
            {
                p2 = p1;
                p1 = p1->next;
            }
            if(strcmp(p0->name,p1->name) <0 || strcmp(p0->name,p1->name) == 0)
            {
                if(head == p1)
                {
                    head = p0;
                }
                else
                {
                    p2->next = p0;
                }
                p0->next = p1;
            }
            else
            {
                p1->next = p0;
                p0->next = NULL;
            }
            return head;
        }
    }
}

//删除通讯录中某个人
address_List *delete_txl(address_List *head)
{
    address_List *p,*q;
    char name[30];
    if(head == NULL)
    {
        printf("通讯录为空,无法删除!\n");
        return head;
    }
    p = head;
    printf("请输入需要删除的人姓名:");
    gets(name);
    if(strcmp(head->name,name) == 0)
    {
        head = head->next;
        free(p);
        printf("删除操作成功!\n");
        return head;
    }
    else
    {
        q = head;
        p = head->next;
        while(p != NULL)
        {
            if(strcmp(p->name,name) == 0)
            {
                q->next = p->next;
                free(p);
                printf("删除操作成功!\n");
                return head;
            }
            p = p->next;
            q = q->next;
        }
    }
}

//显示通讯录中某个人
address_List *display(address_List *head)
{
    address_List *p1,*p2;
    char name[30];
    int m;
    if(head == NULL)
    {
        printf("通讯录为空,无法显示!\n");
        return head;
    }
    p1 = head;
    m = 0;
    printf("请输入要显示人的姓名:");
    gets(name);
    while(p1 != NULL)
    {
        while(strcmp(p1->name,name) != 0 && p1->next != NULL)
        {
            p2 = p1;
            p1 = p1->next;
        }
        if(strcmp(p1->name,name) == 0)
        {
            m++;
            printf("%s的通讯内容如下:\n",name);
            printf("---姓名---------职业----------手机--------Email-------------通讯地址\n");
            printf("====================================================================\n");
            printf("=%s=\t\t",p1->name);
            printf("=%s=\t\t",p1->work);
            printf("=%s=\t\t",p1->handset);
            printf("=%s=\t\t",p1->email);
            printf("=%s=\n",p1->address);
            printf("====================================================================\n");
        }
        p1 = p1->next;
    }
    if(m == 0)
    {
        printf("此人不在通讯录中!\n");
    }
    return head;
}

//对通讯录进行排序操作
address_List *Sort(address_List *head)
{
    address_List *p1,*p2;
    int i,j;
    typedef struct _Address_List1
    {
        char name[30];            //名字
        char work[30];            //职业
        char handset[20];        //手机号码
        char email[30];            //电子邮件
        char address[30];        //地址
    }address_List1;
    address_List1 Sort[200];
    address_List1 temp;
    if(head == NULL)
    {
        printf("通讯录为空,无法排序!\n");
        return head;
    }
    p1 = head;
    for(i = 0;i < n,p1 != NULL; i++)
    {
        strcpy(Sort[i].name,p1->name);
        strcpy(Sort[i].work,p1->work);
        strcpy(Sort[i].handset,p1->handset);
        strcpy(Sort[i].email,p1->email);
        strcpy(Sort[i].address,p1->address);
        p2 = p1;
        p1 = p1->next;
    }
    head = Release(head);
    for(j = 0; j < n-1; j++)
    {
        for(i = j+1; i < n; i++)
        {
            if(strcmp(Sort[i].name,Sort[j].name) < 0)
            {
                Sort[i] = temp;
                temp = Sort[j];
                Sort[j] = temp;
            }
        }
    }
    p1 = (address_List *)malloc(LEN);
    p2 = p1;
    strcpy(p1->name,Sort[0].name);
    strcpy(p1->work,Sort[0].work);
    strcpy(p1->handset,Sort[0].handset);
    strcpy(p1->email,Sort[0].email);
    strcpy(p1->address,Sort[0].address);

    head = p1;
    for(i = 1; i < n; i++)
    {
        p1 = (address_List *)malloc(LEN);
        strcpy(p1->name,Sort[i].name);
        strcpy(p1->work,Sort[i].work);
        strcpy(p1->handset,Sort[i].handset);
        strcpy(p1->email,Sort[i].email);
        strcpy(p1->address,Sort[i].address);

        p2->next = p1;
        p2 = p1;
    }
    p2->next = NULL;
    printf("按姓名排序后的结果是:\n");
    print(head);
    return head;
}

//查找通讯录中某个人
address_List *Search_name(address_List *head)
{
    address_List *p1,*p2;
    int m;
    char name[30];
    if(head == NULL)
    {
        printf("通讯录为空,无法查找!\n");
        return head;
    }
    p1 = head;
    printf("**************************\n");
    printf("****请输入要查找的姓名:**\n");
    printf("**************************\n");
    m = 0;
    gets(name);
    while(p1 != NULL)
    {
        while(strcmp(p1->name,name) != 0 && (p1->next != NULL))
        {
            p2 = p1;
            p1 = p1->next;
        }
        if(strcmp(p1->name,name) == 0)
        {
            m++;
            printf("你查找的内容是:\n");
            printf("++++++++++++++++++++++++++++++++\n");
            printf("++ %s\t%s\t%s\t%s\t%s  ++",p1->name,p1->work,p1->handset,p1->email,p1->address);
            printf("++++++++++++++++++++++++++++++++\n");
        }
        p1 = p1->next;
        if(m == 0)
        {
            printf("你查找的姓名不在通讯录中!\n");
        }
        break;
    }
    return head;
}

//释放整个通讯录
address_List *Release(address_List *head)
{
    address_List *p;
    while(head != NULL)
    {
        p = head;
        head = head->next;
        free(p);
    }
    return head;
}

//保存(以文件的形式保存)
void save(address_List *head)
{
    FILE *fp;
    address_List *p;
    char Filename[30];        //保存后的文件名
    if(head ==NULL)
    {
        printf("待保存的通讯录为空,无法保存!\n");
        return ;
    }
    printf("请输入保存后的文件名:");
    gets(Filename);

    fp = fopen("Filename.txt","w");
    if(fp == NULL)
    {
        printf("无法打开文件!\n");
        return ;
    }

    p = head;
    fprintf(fp,"姓名\t职业\t手机\tEmail\t地址\n");
    for(;p != NULL;)
    {
        fprintf(fp,"姓名\t职业\t手机\tEmail\t地址",p->name,p->work,p->handset,p->email,p->address);
        p = p->next;
    }
    printf("保存完毕!\n");
    fclose(fp);
}

//文件读出函数
address_List *Load(address_List *head)
{
    FILE *fp;
    char Filename[30];
    address_List *p1,*p2;
    printf("请输入要输出的文件名:");
    gets(Filename);
    fp = fopen("Filename.txt","r");
    if(fp == NULL)
    {
        printf("此通讯录不存在,无法输出!\n");
        return head;
    }
    else
    {
        head = Release(head);
    }
    p1 = (address_List *)malloc(LEN);
    fscanf(fp,"%s%s%s%s%s",p1->name,p1->work,p1->handset,p1->email,p1->address);
    if(feof(fp) != 0)
    {
        printf("文件为空,无法打开!\n");
        return head;
    }
    else
    {
        rewind(fp);
        p2 = p1;
        head = p1;
        n = 0;
        while(feof(fp) == 0)
        {
            fscanf(fp,"%s%s%s%s%s",p1->name,p1->work,p1->handset,p1->email,p1->address);
            if(feof(fp) != 0)
            {
                break;
            }
            p2->next = p1;
            p2 = p1;
            p1 = (address_List *)malloc(LEN);
            n = n+1;
        }
        p2->next = NULL;
        p1 = head;
        head = head->next;
        n = n-1;
        free(p1);
        print(head);
        printf("打开完毕!\n");
        return head;
    }
    fclose(fp);
}

//菜单选择函数
address_List *menu(address_List *head)
{
    char num[10];
    while(1)
    {
        printf("*******************************\n");
        printf("*****1. 姓名查找     **********\n");
        printf("*****2. 单个显示     **********\n");
        printf("*****3. 增加         **********\n");
        printf("*****4. 退出         **********\n");
        printf("*******************************\n");
        printf("请输入你选择的操作:");
        gets(num);
        switch(*num)
        {
        case ‘1‘:
            {
                head = Search_name(head);
                print(head);
            }
            break;
        case ‘2‘:
            {
                head = display(head);
            }
            break;
        case ‘3‘:
            {
                head = insert(head);
                print(head);
            }
            break;
        case ‘4‘:
            return head;
        default:
            printf("操作有误,此项不存在!\n");
            break;
        }
        if(strcmp(num,"6") == 0)
        {
            break;
        }
    }
    return head;
}

//主函数
int main(void)
{
    address_List *head = NULL;
    char num[10];
    printf("*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");
    printf("*=*=*=*=*=*=*=            程序说明        *=*=*=*=*=*=*\n");
    printf("*=*=*=*=*=*=*=    请及时保存创建完毕的通讯录内容        *=*=*=*=*=*=*\n");
    printf("*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");
    while(1)
    {
        printf("*******************************\n");
        printf("******    1. 创建通讯录   *******\n");
        printf("******    2. 按名字排序    *******\n");
        printf("******    3. 综合操作    *******\n");
        printf("******    4. 保存        *******\n");
        printf("******    5. 打开        *******\n");
        printf("******    6. 删除        *******\n");
        printf("******    7. 退出        *******\n");
        printf("*******************************\n");
        printf("请输入你选择的操作:");
        gets(num);
        switch(*num)
        {
        case ‘1‘:
            {
                if(head == NULL)
                {
                    head = Create();
                    print(head);
                }
                else
                {
                    head = Release(head);
                    head = Create();
                    print(head);
                }
            }
            break;
        case ‘2‘:
            {
                head = Sort(head);
            }
            break;
        case ‘3‘:
            {
                head = menu(head);
            }
            break;
        case ‘4‘:
            {
                save(head);
                print(head);
            }
            break;
        case ‘5‘:
            {
                head = Load(head);
            }
            break;
        case ‘6‘:
            {
                head = delete_txl(head);
                print(head);
            }
            break;
        case ‘7‘:
            {
                head = Release(head);
            }
            break;
        default:
            {
                printf("操作有误,此项不存在!\n");
            }
            break;
        }
        if(strcmp(num,"7") == 0)
        {
            break;
        }
    }
    return 0;
}
时间: 2024-11-05 14:03:02

通讯录管理系统(C语言)的相关文章

iOS学习之Object-C语言简单的通讯录管理系统

用这几天学的OC的知识,写了一个实现简单功能的通讯录管理系统,在这里分享给大家: 通讯录管理系统 *  需求: 1.定义联系人类Contact.实例变量:姓名(拼音,首字母大写).性别.电话号码.住址.分组名称.年龄.方法:自定义初始化方法(姓名.电话号码).显示联系人信息   2.定义AddressBook类,定义字典,分组管理所有联系人.分组名为26个大写的英文字母.   3.可以添加联系人对象,如果姓名或电话号码为空,添加失败.添加联系人到匹配的分组.   4.获取某个分组名称下所有联系人

数据结构课程设计之通讯录管理系统

数据结构的第二个课程设计,在c语言课程设计的基础上加以改进,(加强版),保存一下代码,对文件的处理,还是有一点一问题,还有待改进 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h>/*屏幕操作函数库*/ struct node { int num; //编号 char name[10];//姓名 char addr[20];//地址 char telenu

人事管理系统 c语言版

int menu(){ printf("请按提示输入完成操作!\n"); printf("1.查询员工信息\n"); printf("2.统计员工数量\n"); printf("3.录入员工信息\n"); printf("4.删除员工信息\n"); printf("5.按id排序所有员工\n"); printf("6.打印所有员工信息\n"); printf(&quo

单位员工通讯录管理系统(线性表的应用)

[问题描述] 为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话.手机号.及电子邮箱.其功能包括通讯录链表的建立.员工通讯信息的查询.修改.插入与删除.以及整个通讯录表的输出. [实现提示] 可以采用单链表的存储结构,如可定义如下的存储结构: typedef struct {  /*员工通讯信息的结构类型定义*/ char num[5];       /*员工编号*/ char name[10];      /*员工姓名*/ char phone[15];     /*办公

C#结合数据库开发完整通讯录管理系统

通讯录管理系统,数据库关系模式为:账户(账户名,登录密码,头像),联系人(ID,姓名,电话,QQ,Email).主要功能包括:注册,登录,注销账号,修改账户名以及密码,更换头像,以及对联系人的增删改查. 工具:vs2015,sql server2014 数据库关系表: Account:                                                                           Contact:                     VS中

班级通讯录管理系统

#include <iostream>#include <fstream>#include <string.h>using namespace std; struct student{ char s_no[20]; char s_name[20]; char s_sex[10]; char s_year[10]; char s_month[10]; char s_day[10]; char s_tel[20]; char s_qq[20]; student() { me

课程设计——通讯录管理系统

整理了一下文件,找到了去年做课程设计的报告,保存一下代码,有一个说法:过了6个月再去看自己写的代码,假设认为写的不好,就说明有了一点进步:这样说明应该还是有那么一点点进步~ #include <stdio.h> #include <stdlib.h> #include <string.h> #include<conio.h>/*屏幕操作函数库*/ #define header1 "|***********************通讯录*******

eml 企业通讯录管理系统 v5.0 SQL 注入

0x00前言 开始从小的漏洞开始练习,搬运项目地址: https://github.com/imsebao/Code-Audit 0x01 EML 企业客户关系管理系统,是基于 Linux 开放性内核和 Apache 基础上 Php+Mysql 的智能 B/S 交互式服务系统. eml 企业通讯录管理系统 v5.0 登录页面 username 参数 过滤不严导致 sql 注 入. WWW/action/action.user.php 文件 第 23 行 //验证登录 if($do=="login

图书馆管理系统(C语言实现)

源代码在这里 1   图书馆管理系统(C语言实现). 2  功能相对简单, 增删改查而已. 3  详细的介绍都在链接里了.