虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > C/C++编程 > C语言通讯录管理系统完整版

C语言通讯录管理系统完整版
类别:C/C++编程   作者:码皇   来源:互联网   点击:

这篇文章主要为大家详细介绍了C语言通讯录管理系统的完整版本,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

C语言实现了通讯录的录入信息、保存信息、插入、删除、排序、查找、单个显示等功能。。

完整的代码如下:

    #include <stdio.h> #include <malloc.h> //得到指向大小为Size的内存区域的首字节的指针// #include <string.h> #include <stdlib.h> //标准库函数// #define NULL 0 #define LEN sizeof(struct address_list) //计算字节// int n;
    struct address_list {
    char name[30];
    //名字 char work[30];
    //职业 char handset[30];
    //手机 char email[30];
    //电子邮件 char address[30];
    //通讯地址 struct address_list *next;
    }
    ;
    struct address_list *shifang(struct address_list *head);
    // 释放内存函数声明 //创建函数,不带头结点的链表 struct address_list *creat(void) {
    struct address_list *head,*p1,*p2;
    char name[20];
    n=0;
    p1=(struct 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=(struct 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(struct address_list *head) {
    struct address_list *p;
    if(head!=NULL) {
    p=head;
    printf("本通讯录现在共有%d人:n",n);
    printf("---姓名-------职业--------手机-------Email-------通讯地址n");
    printf("==================================n");
    do {
    printf("== %s",p->name);
    printf(" ");
    printf("%s",p->work);
    printf(" ");
    printf("%s",p->handset);
    printf(" ");
    printf("%s",p->email);
    printf(" ");
    printf("%s",p->address);
    printf(" n");
    p=p->next;
    }
    while(p!=NULL);
    printf("==================================n");
    }
    else printf("通讯录为空,无法输出!n");
    }
    //增加函数 struct address_list *insert(struct address_list *head) {
    struct address_list *p0,*p1,*p2;
    char name[20];
    p1=head;
    printf("请输入增加的内容:n");
    printf("请输入姓名:");
    gets(name);
    if(strcmp(name,"0")==0) {
    printf("姓名不能为0,增加失败!n");
    return(head);
    }
    else {
    p0=(struct address_list *)malloc(LEN);
    strcpy(p0->name,name);
    printf("请输入职业:");
    gets(p0->work);
    printf("请输入手机:");
    gets(p0->handset);
    printf("请输入电子邮件:");
    gets(p0->email);
    printf("请输入通讯地址:");
    gets(p0->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;
    }
    }
    }
    struct address_list* delete_txl(struct address_list *head) {
    struct 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;
    }
    }
    }
    //显示函数 struct address_list *display(struct address_list *head) {
    struct 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",p1->name);
    printf(" ");
    printf("%s",p1->work);
    printf(" ");
    printf("%s",p1->handset);
    printf(" ");
    printf("%s",p1->email);
    printf(" ");
    printf("%s",p1->address);
    printf(" n");
    printf("==================================n");
    }
    p1=p1->next;
    }
    if(m==0) {
    printf("此人未在本通讯录中!n");
    }
    return(head);
    }
    //排序函数 struct address_list *paixu(struct address_list *head) {
    struct address_list *p1,*p2;
    int i,j;
    struct address_list1 {
    char name[30];
    char work[30];
    char handset[30];
    char email[30];
    char address[30];
    }
    ;
    struct address_list1 px[200];
    struct address_list1 temp;
    if(head==NULL) {
    printf("通讯录为空,无法排序!n");
    return(head);
    }
    p1=head;
    for(i=0;
    i<n,p1!=NULL;
    i++) {
    strcpy(px[i].name,p1->name);
    strcpy(px[i].work,p1->work);
    strcpy(px[i].handset,p1->handset);
    strcpy(px[i].email,p1->email);
    strcpy(px[i].address,p1->address);
    p2=p1;
    p1=p1->next;
    }
    head=shifang(head);
    for(j=0;
    j<n-1;
    j++) {
    for(i=j+1;
    i<n;
    i++) {
    if(strcmp(px[i].name,px[j].name)<0) {
    temp=px[i];
    px[i]=px[j];
    px[j]=temp;
    }
    }
    }
    p1=(struct address_list *)malloc(LEN);
    p2=p1;
    strcpy(p1->name,px[0].name);
    strcpy(p1->work,px[0].work);
    strcpy(p1->handset,px[0].handset);
    strcpy(p1->email,px[0].email);
    strcpy(p1->address,px[0].address);
    head=p1;
    for(i=1;
    i<n;
    i++) {
    p1=(struct address_list *)malloc(LEN);
    strcpy(p1->name,px[i].name);
    strcpy(p1->work,px[i].work);
    strcpy(p1->handset,px[i].handset);
    strcpy(p1->email,px[i].email);
    strcpy(p1->address,px[i].address);
    p2->next=p1;
    p2=p1;
    }
    p2->next=NULL;
    printf("按姓名排序后为:n");
    print(head);
    return(head);
    }
    //姓名查找函数 struct address_list *search(struct address_list *head) {
    struct 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 %s %s %s %sn",p1->name,p1->work,p1->handset,p1->email,p1->address);
    printf("+++++++++++++++++++++++++++++++++++n");
    }
    p1=p1->next;
    if(m==0) {
    printf("此人未在本通讯录中!n");
    }
    break;
    }
    return(head);
    }
    //释放内存函数 struct address_list *shifang(struct address_list *head) {
    struct address_list *p1;
    while(head!=NULL) {
    p1=head;
    head=head->next;
    free(p1);
    }
    return(head);
    }
    //文件写入函数 void save(struct address_list *head) {
    FILE *fp;
    struct address_list *p1;
    char tong[30];
    if(head==NULL) {
    printf("通讯录为空,无法存储!n");
    return;
    }
    printf("请输入保存后的文件名:");
    gets(tong);
    fp=fopen("(tong).txt","w");
    if(fp==NULL) {
    printf("cannot open filen");
    return;
    }
    p1=head;
    fprintf(fp,"姓名 职业 手机 Email 通讯地址n");
    for(;
    p1!=NULL;
    ) {
    fprintf(fp,"%s %s %s %s %sn",p1->name,p1->work,p1->handset,p1->email,p1->address);
    p1=p1->next;
    }
    printf("保存完毕!n");
    fclose(fp);
    }
    //文件读出函数 struct address_list *load(struct address_list *head) {
    FILE *fp;
    char tong[30];
    struct address_list *p1,*p2;
    printf("请输入要输出的文件名:");
    gets(tong);
    fp=fopen("(tong).txt","r");
    if(fp==NULL) {
    printf("此通讯录名不存在,无法输出!n");
    return(head);
    }
    else {
    head=shifang(head);
    }
    p1=(struct 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=(struct 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);
    }
    //综合操作函数 struct address_list *menu(struct 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(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;
    }
    //主函数 void main() {
    struct 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=creat();
    //创建 print(head);
    }
    else {
    head=shifang(head);
    head=creat();
    //重新创建 print(head);
    }
    }
    break;
    case '2': {
    head=paixu(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=shifang(head);
    break;
    default: printf("操作错误,此项不存在!n");
    break;
    }
    if(strcmp(num,"7")==0) break;
    }
    }

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

  • c语言实现的货物管理系统实例代码(增加删除 查找货物信息等功能)
  • C语言职工管理系统设计
  • C语言学生管理系统源码分享
  • C语言编写学生成绩管理系统
  • C语言实现图书管理系统
  • C语言实现简单学生管理系统
  • C语言利用结构体数组实现学生成绩管理系统
  • 学生成绩管理系统C语言代码实现
  • C语言职工信息管理系统源码
  • C语言学生成绩管理系统源代码
相关热词搜索: C语言通讯录管理系统 C语言通讯录管理 C语