程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C結構體實現一個通訊錄

C結構體實現一個通訊錄

編輯:關於C語言

C結構體實現一個通訊錄


題目:實現一個通訊錄,通訊錄可以用來存儲1000個人的信息,每個人的信息包括:姓名,性別,年齡,電話,住址。 提供方法:1.添加聯系人信息 2.刪除指定聯系人的信息 3.查找指定聯系人的信息 4.修改指定聯系人的信息 5.顯示所有聯系人信息 6.清空所有聯系人 7.以名字排序所有聯系人 思路分析:1. 首先我們可以分三個模塊來解決這個問題,第一個模塊我們需要一個頭文件,這個頭文件裡可以包含一些相應信息,當實現文件和測試文件包含自己定義的頭文件時便可以獲得一些相關的信息。所以頭文件裡應該包括一個結構體,這個結構體裡應包含姓名,性別,年齡,電話,住址。同時還可以定義一個結構體,這個結構體裡包含通訊錄,同時通訊錄裡人員的計數變量,將通訊錄的地址傳到別的地方便可以實現對它遍歷或者其他操作。 2.第二個模塊便是我們的測試函數,測試函數便可以實現我們的菜單打印,同時由我們接收不同的值便可以實現不同的操作,就是相應的方法的實現,這裡很明顯可以通過一個switch語句來進行控制。 3.第三個模塊便是我們的方法實現的函數,將模塊2裡定義的類型為通訊錄的地址傳到各個方法裡,這樣便可以實現對通訊錄的操作。 代碼實現: 模塊1:
#pragma once
typedef struct Peo//每一個人的信息用一個結構來接收,包括姓名,性別,年齡,電話,地址
{
char name[20];
char sex[4];
int age;
char tell[12];
char address[20];
}Peo;
typedef struct Contact//將通訊錄和人員計數也聲明在結構體裡
{
Peo Dhb[1000];
int count;
}Contact;
void add_stu(Contact *p);//相應函數
void del_stu(Contact *p);
void find_stu(Contact *p);
void modify_stu(Contact *p);
void show_stu(Contact *p); 
void clear_stu(Contact *p);
void sort_stu(Contact *p);

 

模塊2:(測試功能)
#include<stdio.h>
#include"contact.h"
#include<stdlib.h>
Contact con;//類型為Contact變量,裡面包含電話本和計數變量
void menu()
{
printf("menu:\n");
printf("**********1.添加聯系人信息************\n");
printf("********2.刪除指定聯系人信息**********\n");
printf("********3.查找指定聯系人信息**********\n");
printf("********4.修改指定聯系人信息**********\n");
printf("********5.顯示所有聯系人信息**********\n");
printf("**********6.清空聯系人信息************\n");
printf("******7.以名字排序所有聯系人信********\n");
}
void test()//測試函數
{
int input = 1;
menu();
while (input)
{
printf("請輸入選項:");
scanf_s("%d", &input);
switch (input)//方法選擇功能的實現
{
case 1:
add_stu(&con);
break;

case 2:
del_stu(&con);
break;
case 3:
find_stu(&con);
break;
case 4:
modify_stu(&con);
break;
case 5:
show_stu(&con);
break;
case 6:
clear_stu(&con);
break;
case 7:
sort_stu(&con);
break;
case 0:
exit(1);
break;
}
}
}
int main()
{
test();
     return 0;
}

 

模塊3:(方法的具體實現)
#include"contact.h"
#include<string.h>
int search(Contact *p,char *pname)//分裝的函數利於刪除,查找,修改方法的實現
{
int ret;
int i;
for (i = 0; i < p->count; i++)
{
if(strcmp(p->Dhb[i].name, pname)==0)
return i;

}
return -1;
}
void add_stu(Contact *p)//添加聯系人
{
printf("請輸入姓名:");
scanf("%s", p->Dhb[p->count].name);
printf("請輸入性別:");
scanf("%s", p->Dhb[p->count].sex);
printf("請輸入年齡:");
scanf("%d", &p->Dhb[p->count].age);
printf("請輸入電話:");
scanf("%s", p->Dhb[p->count].tell);
printf("請輸入地址:");
scanf("%s", p->Dhb[p->count].address);
p->count++;
printf("聯系人添加成功\n");
}
void del_stu(Contact *p)//刪除聯系人
{
int ret;
int n;
int i = 0;
char name[20];
printf("請輸入要刪除人的姓名:");
scanf("%s",name);
ret=search(p,name);
if (ret !=-1)
{
printf("要刪除的人存在\n");
printf("你是否確定刪除該聯系人?\n");
printf("確定輸入1,不刪除輸入0\n");
scanf("%d",&n);
if (n == 1)
{
for (i = 0; i < p->count; i++)
{
p->Dhb[i] = p->Dhb[i + 1];//使i後面的元素向前覆蓋便可以刪掉
}
printf("刪除成功\n");
}
else
{
printf("刪除失敗\n");
}

}
}
void find_stu(Contact *p)//查找聯系人
{
int ret;
char name[20];
printf("請輸入要查找人的姓名:");
scanf("%s", name);
ret = search(p, name);
if (ret !=-1)
{
printf("要查找的人存在\n");
printf("%s  ", p->Dhb[ret].name);
printf("%s  ", p->Dhb[ret].sex);
printf("%d  ", p->Dhb[ret].age);
printf("%s  ", p->Dhb[ret].tell);
printf("%s  ", p->Dhb[ret].address);
}

}
void modify_stu(Contact *p)//修改聯系人
{
int ret;
char name[20];
printf("請輸入要修改人的姓名:");
scanf("%s", name);
ret = search(p, name);
if (ret != -1)
{
printf("請把姓名修改成:");
scanf("%s", p->Dhb[ret].name);
printf("請把性別修改成:");
scanf("%s", p->Dhb[ret].sex);
printf("請把年齡修改成:");
scanf("%d", &p->Dhb[ret].age);
printf("請把電話修改成:");
scanf("%s", p->Dhb[ret].tell);
printf("請把地址修改成:");
scanf("%s", p->Dhb[ret].address);
}
else
{
printf("不存在此人\n");
}
}
void show_stu(Contact *p)//顯示聯系人信息
{
int i = 0;
printf("輸出所有人的信息:");
for (i = 0; i <( p->count); i++)
{
printf("%s  ",p->Dhb[i].name);
printf("%s  ", p->Dhb[i].sex);
printf("%d  ", p->Dhb[i].age);
printf("%s  ", p->Dhb[i].tell);
printf("%s  ", p->Dhb[i].address);
}
printf("\n");
}
void clear_stu(Contact *p)//清空聯系人
{
p->count = 0;//是人員計數的變量置0就可以實現清空
}
void sort_stu(Contact *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->Dhb[j].name, p->Dhb[j + 1].name)>0)
{
Peo tmp;
tmp=p->Dhb[j];
p->Dhb[j] =p-> Dhb[j + 1];
p->Dhb[j + 1] = tmp;
}
}
void show_stu( p);
}

 

總結:此題只是利用了相關結構體的知識,主要難處就是三個模塊各自的分工不好想到,其他地方便只是基本方法的實現。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved