c语言实现通讯录

来源:互联网 发布:淘宝心级怎么算买家 编辑:程序博客网 时间:2024/04/30 10:47

头文件包含的内容:

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<malloc.h>#include<string.h>#include<stdlib.h>typedef struct LNode{char name[20];char sex;int age;char tel[20];char ad[40];struct LNode * next;}LNode, *LinkList;LinkList LinkInit();void Add(LinkList L,int n);void Delete(LinkList L);void Search(LinkList L);void Modify(LinkList L);void Show(LinkList L);void ClearAll(LinkList);   //清空所有联系人void QuickSort(LinkList Head,LinkList Tail);  //按照字符串排序


函数的实现部分:

#include"addressbook.h"LinkList LinkInit()        //初始化{LinkList L;    L = (LinkList)malloc(sizeof(LNode));    if(NULL==L)        printf("申请空间失败!\n");    L->next=NULL;return L;}void Add(LinkList L,int n)     //添加联系人{int i = 0;for(i = 0;i < n;i++){LinkList p;p = (LinkList)malloc(sizeof(LNode));printf("请输入第%d个联系人信息:\n",i+1);printf("name:");scanf("%s",&p->name);printf("tel:");scanf("%s",&p->tel);printf("address:");scanf("%s",&p->ad);printf("sex:");scanf("%s",&p->sex);printf("age:");scanf("%d",&p->age);p->next = L->next;L->next = p;}}void Show(LinkList L)        //显示所有联系人{if(L->next == NULL)printf("通讯录没有联系人!\n");else{LinkList p = L->next;while(p){printf("name:%s\t",p->name);printf("age:%d\t",p->age);printf("sex:%c\t",p->sex);printf("tel:%s\t",p->tel);printf("address:%s\t",p->ad);printf("\n");p = p->next;}}}void Delete(LinkList L)        //删除联系人{    LinkList p = L;char temp[20] = {0};printf("请输入要删除的联系人:\n");scanf("%s",&temp);while(p->next){if(strcmp(temp,p->next->name) == 0){LinkList q = p->next;p->next = q->next;free(q);printf("删除成功!\n");break;}p = p->next;}if(NULL == p->next)printf("找不到此联系人!\n");}void Search(LinkList L)        //查找联系人{LinkList p = L->next;char temp[20] = {0};printf("请输入要查找的联系人:\n");scanf("%s",&temp);while(p){if(strcmp(temp,p->name) == 0){printf("name:%s\t",p->name);printf("age:%d\t",p->age);printf("sex:%c\t",p->sex);printf("tel:%s\t",p->tel);printf("address:%s\t",p->ad);printf("\n");break;}p = p->next;}if(NULL == p)printf("找不到此联系人!\n");}void Modify(LinkList L)           //修改联系人{LinkList p = L->next;char temp[20] = {0};printf("请输入要修改的联系人:\n");scanf("%s",&temp);while(p){if(strcmp(temp,p->name) == 0){printf("name:%s\t",p->name);printf("age:%d\t",p->age);printf("sex:%c\t",p->sex);printf("tel:%s\t",p->tel);printf("address:%s\t",p->ad);printf("\n");printf("请重新输入信息!\n");printf("name:");scanf("%s",&p->name);printf("tel:");scanf("%s",&p->tel);printf("address:");scanf("%s",&p->ad);printf("sex:");scanf("%s",&p->sex);printf("age:");scanf("%d",&p->age);printf("修改成功!\n");break;}p = p->next;}if(NULL == p)printf("找不到此联系人!\n");}void ClearAll(LinkList L){LinkList p = L->next;LinkList q = L->next;while(p->next){q = q->next;free(p);p = q;}L->next = NULL;}void QuickSort(LinkList Head,LinkList Tail){if(Head->next!=Tail&&Head->next->next!=Tail){LinkList KeyP=Head->next;      //指向存key值内存单元的指针LinkList LP=Head;              //比key值小的游标指针,KeyP的左边LinkList RP=KeyP;              //比key值大的游标指针,KeyP的右边LinkList IncP=KeyP->next;      //遍历单链表的游标指针,每次移动一位while(IncP!=Tail){if(strcmp(IncP->name,KeyP->name)<0)LP=LP->next=IncP;elseRP=RP->next=IncP;IncP=IncP->next;}LP->next=KeyP;    //将小于Key值的子链表衔接RP->next=Tail;    //将大于Key值的子链表衔接//递归QuickSort(Head,KeyP); //比Key小的子链表排序QuickSort(KeyP,Tail); //比Key大的子链表排序//注Head和Tail是不参与排序的,只起表头和表尾标识作用,故原链表的Tail值为NULL}printf("排序成功!\n");}    



主函数部分:

#include"addressbook.h"void menu(){printf("***************通讯录***************\n");printf("        1.添加联系人信息\n");printf("        2.删除联系人信息\n");printf("        3.修改联系人信息\n");printf("        4.显示所有联系人信息\n");printf("        5.查找联系人信息\n");printf("        6.清空所有联系人信息\n");printf("        7.按名字排序所有联系人\n");printf("        0.退出通讯录\n");printf("************************************\n");}int main(){int n = 0;int num = 0;LinkList Link =LinkInit();do{menu();printf("请输入0到7\n");scanf("%d",&n);switch(n){case 1:{printf("请输入要添加联系人的个数:");                scanf("%d",&num);                Add(Link,num);}break;case 2:Delete(Link);break;case 3:Modify(Link);break;case 4:Show(Link);break;case 5:Search(Link);break;case 6:ClearAll(Link);break;case 7:QuickSort(Link,NULL);break;default:break;}}while(n);return 0;}


1 0