C語言實現一個通訊錄,通訊錄可以用來存儲1000個人的信息,每個人的信息包括:
姓名、性別、年齡、電話、住址
**提供方法:
1. 添加聯系人信息
2. 刪除指定聯系人信息
3. 查找指定聯系人信息
4. 修改指定聯系人信息
5. 顯示所有聯系人信息
6. 清空所有聯系人
7. 以名字排序所有聯系人**
思路分析:
首先我們可以分三個模塊來解決這個問題,第一個模塊我們需要一個頭文件,這個頭文件里可以包含一些相應信息,當實現文件和測試文件包含自己定義的頭文件時便可以獲得一些相關的信息。所以頭文件里應該包括一個結構體,這個結構體里應包含姓名,性別,年齡,電話,住址。同時還可以定義一個結構體,這個結構體里包含通訊錄,同時通訊錄里人員的計數變量,將通訊錄的地址傳到別的地方便可以實現對它遍歷或者其他操作。
第二個模塊便是我們的測試函數,測試函數便可以實現我們的菜單打印,同時由我們接收不同的值便可以實現不同的操作,就是相應的方法的實現,這里很明顯可以通過一個switch語句來進行控制。
第三個模塊便是我們的方法實現的函數,將模塊2里定義的類型為通訊錄的地址傳到各個方法里,這樣便可以實現對通訊錄的操作。
1.linkman.h(頭文件)
#ifndef __LINKMAN_H__#define __LINKMAN_H__#include<stdio.h>#include<windows.h>#include<string.h>#pragma warning (disable:4996)typedef struct LINKMAN//建立結構體,存放聯系人信息{ char name[20]; char sex[10]; int age; int tel[12]; char addr[50];}LINKMAN;typedef struct Statis //把通訊錄和人員統計放在結構體內{ LINKMAN num[1000]; int count;}Statis;void inint_linkman(Statis *p);//初始化數組void Add_linkman(Statis *p);// 添加聯系人信息void Dele_linkman(Statis *p);//刪除指定聯系人信息void Find_linkman(Statis *p);//查找指定聯系人信息void Revise_linkman(Statis *p);//修改指定聯系人信息void Display_linkman(Statis *p);//顯示所有聯系人信息void Empty_linkman(Statis *p);//清空所有聯系人 void sort_linkman(Statis *p);//以名字排序所有聯系人#endif
2.test.c(測試)
#include "linkman.h"Statis sta;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");}void test(){ int i = 0; do { menu(); printf("請輸入你要進行的選項:"); scanf("%d", &i); switch (i) { case 1: Add_linkman(&sta); break; case 2: Dele_linkman(&sta); break; case 3: Find_linkman(&sta); break; case 4: Revise_linkman(&sta); break; case 5: Display_linkman(&sta); break; case 6: Empty_linkman(&sta); break; case 7: sort_linkman(&sta); break; case 0: exit(1); break; default: printf("輸入錯誤/n"); break; } } while (i);}int main(){ inint_linkman(&sta); test(); system("pause"); return 0;}
3.game.c(實現)
#include "linkman.h"void inint_linkman(Statis *p){ int count = sizeof(p->num); p->count = 0; memset(p->num, 0,count);}int Find(Statis *p, char *pname)//對于一個聯系人是否存在封裝一個函數,在后面的修改、刪除、查找可以用到{ int i = 0; for (i = 0; i < (p->count); i++) { if (strcmp(p->num[i].name, pname) == 0) return i; } return -1;}void menu1()//修改聯系人時所用到的菜單{ printf("*********************/n"); printf("****1.姓名*2.性別****/n"); printf("****3.年齡*4.電話****/n"); printf("****5.地址*6.返回****/n"); printf("*********************/n");}void Add_linkman(Statis *p)//添加聯系人{ printf("請輸入你要添加的聯系人姓名:/n"); scanf("%s", p->num[p->count].name); printf("請輸入你要添加的聯系人性別:/n"); scanf("%s", p->num[p->count].sex); printf("請輸入你要添加的聯系人年齡:/n"); scanf("%d", &(p->num[p->count].age)); printf("請輸入你要添加的聯系人電話:/n"); scanf("%s", p->num[p->count].tel); printf("請輸入你要添加的聯系人地址:/n"); scanf("%s", p->num[p->count].addr); if ((p->count) > 1000) { printf("聯系人上限/n"); } else { printf("添加成功/n"); p->count++; }}void Dele_linkman(Statis *p)//刪除聯系人{ char name[20] = { 0 }; int result = 0; int n = 0; int i = 0; printf("請輸入要刪除人的姓名:/n"); scanf("%s", name); result = Find(p, name); if (result != -1) { printf("你是否要刪除該聯系人?/n"); printf("刪除請按1,不刪除請按0/n"); scanf("%d", &n); if (n == 1) { for (i = 0; i < (p->count)-1; i++) { p->num[i] = p->num[i + 1]; } p->count --; printf("刪除成功/n"); } else { printf("刪除失敗/n"); } } else { printf("你要刪除的聯系人不存在/n"); }}void Find_linkman(Statis *p)//查找聯系人{ char name[20] = { 0 }; int result = 0; printf("請輸入要查找聯系人的姓名:/n"); scanf("%s", name); result = Find(p, name); if (result != -1) { printf("姓名:%s/n", p->num[result].name); printf("性別:%s/n", p->num[result].sex); printf("年齡:%d/n", p->num[result].age); printf("電話:%s/n", p->num[result].tel); printf("地址:%s/n", p->num[result].addr); } else { printf("你要查找的聯系人不存在/n"); }}void Revise_linkman(Statis *p)//修改聯系人{ char name[20] = {0}; int result = 0; printf("請輸入你要修改聯系人的姓名:/n"); scanf("%s", name); result = Find(p, name); if (result != -1) { printf("姓名:%s/n", p->num[result].name); printf("性別:%s/n", p->num[result].sex); printf("年齡:%d/n", p->num[result].age); printf("電話:%s/n", p->num[result].tel); printf("地址:%s/n", p->num[result].addr); int i = 0; do { menu1(); printf("輸入你要修改的選項:/n"); scanf("%d", &i); switch (i) { case 1: printf("請把姓名修改成:"); scanf("%s", p->num[result].name); break; case 2: printf("請把性別修改成:"); scanf("%s", p->num[result].sex); break; case 3: printf("請把年齡修改成:"); scanf("%d", &(p->num[result].age)); break; case 4: printf("請把電話修改成:"); scanf("%s", p->num[result].tel); break; case 5: printf("請把地址修改成:"); scanf("%s", p->num[result].addr); break; case 0: break; default: printf("輸入錯誤"); break; } } while (i); } else { printf("你要修改的聯系人不存在/n"); }}void Display_linkman(Statis *p)//打印所有聯系人信息{ int i = 0; printf("輸出所有人的信息:/n"); printf("%10s%7s%6s%8s%10s/n","名字","性別","年齡","電話","住址"); for (i = 0; i <(p->count); i++) { printf("%11s", p->num[i].name); printf("%5s", p->num[i].sex); printf("%5d", p->num[i].age); printf("%10s", p->num[i].tel); printf("%12s", p->num[i].addr); printf("/n"); }}void Empty_linkman(Statis *p)//清空聯系人{ p->count = 0;}void sort_linkman(Statis *p)//以名字排序所有聯系人(冒泡){ int i = 0; int j = 0; for (i = 0; i < p->count - 1; i++) for (j = 0; j < p->count - 1 - i; j++) { if (strcmp(p->num[j].name, p->num[j + 1].name)>0) { LINKMAN tmp; tmp = p->num[j]; p->num[j] = p->num[j + 1]; p->num[j + 1] = tmp; } }}
程序運行結果部分示范:
到此為止,我們的簡易通訊錄就實現啦?。?!
新聞熱點
疑難解答