c語言實現通訊錄
阿新 • • 發佈:2019-02-14
標頭檔案包含的內容:
#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; else RP=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; }