用C語言實現(xiàn)簡易通訊錄
C語言實現(xiàn)一個通訊錄,通訊錄可以用來存儲1000個人的信息,每個人的信息包括:
姓名、性別、年齡、電話、住址
**提供方法:
1. 添加聯(lián)系人信息
2. 刪除指定聯(lián)系人信息
3. 查找指定聯(lián)系人信息
4. 修改指定聯(lián)系人信息
5. 顯示所有聯(lián)系人信息
6. 清空所有聯(lián)系人
7. 以名字排序所有聯(lián)系人**
思路分析:
首先我們可以分三個模塊來解決這個問題,第一個模塊我們需要一個頭文件,這個頭文件里可以包含一些相應信息,當實現(xiàn)文件和測試文件包含自己定義的頭文件時便可以獲得一些相關的信息。所以頭文件里應該包括一個結構體,這個結構體里應包含姓名,性別,年齡,電話,住址。同時還可以定義一個結構體,這個結構體里包含通訊錄,同時通訊錄里人員的計數(shù)變量,將通訊錄的地址傳到別的地方便可以實現(xiàn)對它遍歷或者其他操作。
第二個模塊便是我們的測試函數(shù),測試函數(shù)便可以實現(xiàn)我們的菜單打印,同時由我們接收不同的值便可以實現(xiàn)不同的操作,就是相應的方法的實現(xiàn),這里很明顯可以通過一個switch語句來進行控制。
第三個模塊便是我們的方法實現(xiàn)的函數(shù),將模塊2里定義的類型為通訊錄的地址傳到各個方法里,這樣便可以實現(xiàn)對通訊錄的操作。
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//建立結構體,存放聯(lián)系人信息
{
char name[20];
char sex[10];
int age;
int tel[12];
char addr[50];
}LINKMAN;
typedef struct Statis //把通訊錄和人員統(tǒng)計放在結構體內
{
LINKMAN num[1000];
int count;
}Statis;
void inint_linkman(Statis *p);//初始化數(shù)組
void Add_linkman(Statis *p);// 添加聯(lián)系人信息
void Dele_linkman(Statis *p);//刪除指定聯(lián)系人信息
void Find_linkman(Statis *p);//查找指定聯(lián)系人信息
void Revise_linkman(Statis *p);//修改指定聯(lián)系人信息
void Display_linkman(Statis *p);//顯示所有聯(lián)系人信息
void Empty_linkman(Statis *p);//清空所有聯(lián)系人
void sort_linkman(Statis *p);//以名字排序所有聯(lián)系人
#endif
2.test.c(測試)
#include "linkman.h"
Statis sta;
void menu()//菜單
{
printf("***********************************\n");
printf("********1.添加聯(lián)系人信息***********\n");
printf("********2.刪除指定聯(lián)系人信息*******\n");
printf("********3.查找指定聯(lián)系人信息*******\n");
printf("********4.修改指定聯(lián)系人信息*******\n");
printf("********5.顯示所有聯(lián)系人信息*******\n");
printf("********6.清空所有聯(lián)系人***********\n");
printf("********7.以名字排序所有聯(lián)系人*****\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(實現(xiàn))
#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)//對于一個聯(lián)系人是否存在封裝一個函數(shù),在后面的修改、刪除、查找可以用到
{
int i = 0;
for (i = 0; i < (p->count); i++)
{
if (strcmp(p->num[i].name, pname) == 0)
return i;
}
return -1;
}
void menu1()//修改聯(lián)系人時所用到的菜單
{
printf("*********************\n");
printf("****1.姓名*2.性別****\n");
printf("****3.年齡*4.電話****\n");
printf("****5.地址*6.返回****\n");
printf("*********************\n");
}
void Add_linkman(Statis *p)//添加聯(lián)系人
{
printf("請輸入你要添加的聯(lián)系人姓名:\n");
scanf("%s", p->num[p->count].name);
printf("請輸入你要添加的聯(lián)系人性別:\n");
scanf("%s", p->num[p->count].sex);
printf("請輸入你要添加的聯(lián)系人年齡:\n");
scanf("%d", &(p->num[p->count].age));
printf("請輸入你要添加的聯(lián)系人電話:\n");
scanf("%s", p->num[p->count].tel);
printf("請輸入你要添加的聯(lián)系人地址:\n");
scanf("%s", p->num[p->count].addr);
if ((p->count) > 1000)
{
printf("聯(lián)系人上限\n");
}
else
{
printf("添加成功\n");
p->count++;
}
}
void Dele_linkman(Statis *p)//刪除聯(lián)系人
{
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("你是否要刪除該聯(lián)系人?\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("你要刪除的聯(lián)系人不存在\n");
}
}
void Find_linkman(Statis *p)//查找聯(lián)系人
{
char name[20] = { 0 };
int result = 0;
printf("請輸入要查找聯(lián)系人的姓名:\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("你要查找的聯(lián)系人不存在\n");
}
}
void Revise_linkman(Statis *p)//修改聯(lián)系人
{
char name[20] = {0};
int result = 0;
printf("請輸入你要修改聯(lián)系人的姓名:\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("你要修改的聯(lián)系人不存在\n");
}
}
void Display_linkman(Statis *p)//打印所有聯(lián)系人信息
{
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)//清空聯(lián)系人
{
p->count = 0;
}
void sort_linkman(Statis *p)//以名字排序所有聯(lián)系人(冒泡)
{
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;
}
}
}
程序運行結果部分示范:
到此為止,我們的簡易通訊錄就實現(xiàn)啦!??!
您可能感興趣的文章
- 04-02c語言函數(shù)調用后清空內存 c語言調用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對數(shù)怎么表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調用函數(shù)求fibo C語言調用函數(shù)求階乘


閱讀排行
本欄相關
- 04-02c語言函數(shù)調用后清空內存 c語言調用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調用函數(shù)求fibo C語言調用函數(shù)求
隨機閱讀
- 01-10C#中split用法實例總結
- 01-10delphi制作wav文件的方法
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 04-02jquery與jsp,用jquery
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-11ajax實現(xiàn)頁面的局部加載


