C語言使用結(jié)構(gòu)體實(shí)現(xiàn)簡單通訊錄
C語言用結(jié)構(gòu)體實(shí)現(xiàn)一個(gè)通訊錄,通訊錄可以用來存儲(chǔ)1000個(gè)人的信息,每個(gè)人的信息包括:
姓名、性別、年齡、電話、住址
提供方法:
1. 添加聯(lián)系人信息
2. 刪除指定聯(lián)系人信息
3. 查找指定聯(lián)系人信息
4. 修改指定聯(lián)系人信息
5. 顯示所有聯(lián)系人信息
6. 清空所有聯(lián)系人
代碼實(shí)現(xiàn):
頭文件:
#ifndef __HEAD_H__ ////防止頭文件被多次調(diào)用
#define __HEAD_H__
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define PEOPLE_MAX 1000
#define NAME_LENTH 20
#define SEX_LENTH 5
#define AGE_LENTH 10
#define TEL_LENTH 15
#define ADDR_LENTH 50 //宏定義各個(gè)數(shù)據(jù)所需的大小,后續(xù)引用直接可以使用名稱,或需修改時(shí)只用修改這里就可以了
struct People
{
char name[NAME_LENTH];
char sex[SEX_LENTH];
int age;
char tel[TEL_LENTH ];
char addr[ADDR_LENTH];
}; //定義人的信息結(jié)構(gòu)體(包含各種信息)
struct Contact
{
struct People person[PEOPLE_MAX];
int user_count;
}; //定義通訊錄結(jié)構(gòu)體(包含人的信息的結(jié)構(gòu)體和用戶個(gè)數(shù))
typedef struct Contact * pContact;
int add_contact(pContact pcon); //pContact是一個(gè)結(jié)構(gòu)體指針類型,pcon是一個(gè)指向struct Contact的一個(gè)指針
int dele_contact(pContact pcon); //例如:typedef int * int 即 int *p ==> int p
int find_contact(pContact pcon);
int modify_contact(pContact pcon);
int show_contact(pContact pcon);
int clear_contact(pContact pcon);
void menu(); //函數(shù)的聲明
#endif
各種函數(shù)實(shí)現(xiàn):
#include"head.h"
int add_contact(pContact pcon)
{
if(pcon->user_count >= PEOPLE_MAX)
{
printf("contact is full!\n");
return -1;
}
else
{
printf("input name,please!\n");
scanf("%s",pcon->person[pcon->user_count].name);
printf("input sex,please!\n");
scanf("%s",pcon->person[pcon->user_count].sex);
printf("input age,please!\n");
scanf("%d",&pcon->person[pcon->user_count].age); //這里用%d輸出int
printf("input tel,please!\n");
scanf("%s",pcon->person[pcon->user_count].tel);
printf("input addr,please!\n");
scanf("%s",pcon->person[pcon->user_count].addr);
(pcon->user_count)++;
}
return 0;
} //添加信息的實(shí)現(xiàn)
int dele_contact(pContact pcon)
{
int ret = find_contact(pcon); //調(diào)用查找函數(shù)并保存其值
if(ret != -1)
{
int i = 0;
i = ret; //這里要用另一個(gè)變量來保存輸入的姓名
for(i = 0;i < pcon->user_count-1;i++)
{
pcon->person[i] = pcon->person[i+1]; //用后一個(gè)覆蓋前邊的,如果要?jiǎng)h除的是最后一個(gè)不進(jìn)行此步驟
}
pcon->user_count --; //直接減去最后一個(gè)即count--
}
return 0;
}
int find_contact(pContact pcon)
{
int i = 0;
char ret[NAME_LENTH]; //用另一個(gè)數(shù)組來保存name
printf("input name,please!\n");
scanf("%s",ret);
while(i <= pcon->user_count)
{
if(strcmp(ret,pcon->person[i].name)== 0) //比較輸入的姓名和通訊錄中已有的姓名
{
printf("name\tsex\tage\ttel\taddr\t\n");
printf("%s\t",pcon->person[i].name);
printf("%s\t",pcon->person[i].sex);
printf("%d\t",pcon->person[i].age);
printf("%s\t",pcon->person[i].tel);
printf("%s\t\n",pcon->person[i].addr);
return i;
}
i++;
}
printf("sorry,the name you find is not exist!\n");
return -1;
}
int modify_contact(pContact pcon) //修改函數(shù),首先找到如要修改的姓名,然后重新輸入
{
int ret = find_contact(pcon);
if(ret != -1)
{
printf("input name,please!\n");
scanf("%s",pcon->person[ret].name);
printf("input sex,please!\n");
scanf("%s",pcon->person[ret].sex);
printf("input age,please!\n");
scanf("%d",&(pcon->person[ret].age));
printf("input tel,please!\n");
scanf("%s",pcon->person[ret].tel);
printf("input addr,please!\n");
scanf("%s",pcon->person[ret].addr);
}
else
{
printf("sorry,the name you find is not exist!\n");
}
return 0;
}
int show_contact(pContact pcon)
{
int i = 0;
printf("name\tsex\tage\ttel\t\taddr\t\n"); //制表符來制作表頭
for(i = 0;i < pcon->user_count;i++)
{
printf("%s\t",pcon->person[i].name);
printf("%s\t",pcon->person[i].sex);
printf("%d\t",pcon->person[i].age);
printf("%s\t",pcon->person[i].tel);
printf("%s\t\n",pcon->person[i].addr);
}
printf("\n");
return 0;
}
int clear_contact(pContact pcon)
{
pcon->user_count = 0 ;
return 0;
} //清除所有人,直接讓成員個(gè)數(shù)變?yōu)?即可
void menu()
{
printf("-------contact---------\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(" 0.謝謝使用 \n");
printf("-------contact---------\n");
}
主函數(shù):
#include"head.h"
int main()
{
int n=1;
struct Contact people; //調(diào)用通訊錄結(jié)構(gòu)體
people.user_count = 0; //初始化user_count
while(n)
{
menu();
printf("please input\n");
scanf("%d",&n);
switch(n)
{
case 1:
{
add_contact(&people);
break;
}
case 2:
{
dele_contact(&people);
break;
}
case 3:
{
find_contact(&people);
break;
}
case 4:
{
modify_contact(&people);
break;
}
case 5:
{
show_contact(&people);
break;
}
case 6:
{
clear_contact(&people);
break;
}
default:
{
return 0;
break;
} //switch case語句分支選擇不同函數(shù)實(shí)現(xiàn)不同作用
}
}
return 0;
}
結(jié)果實(shí)現(xiàn):







以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++實(shí)現(xiàn)在文本中找出某個(gè)單詞的位置信息
本文給大家分享的是使用C++實(shí)現(xiàn)在文本中找出某個(gè)單詞的位置信息,就是給出此單詞所在的行和列,有需要的小伙伴可以參考下。2016-02-02
C++實(shí)現(xiàn)棧與分析棧的知識(shí)點(diǎn)
這篇文章主要介紹了C++實(shí)現(xiàn)棧與分析棧的知識(shí)點(diǎn),棧(stack)是計(jì)算機(jī)中常用的一種線性數(shù)據(jù)結(jié)構(gòu),經(jīng)常有資料使用“操作受限”來形容棧,因?yàn)樗膲喝霔:蛷棾鰲2僮髦荒茉跅m斶M(jìn)行,下文更多相關(guān)資料,需要的小伙伴可以參考一下2022-03-03
Qt使用隨機(jī)驗(yàn)證碼的實(shí)現(xiàn)示例
有時(shí)候在登錄界面需要驗(yàn)證碼功能,這樣能夠防止被惡意程序攻擊,本文主要介紹了Qt使用隨機(jī)驗(yàn)證碼的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
C++實(shí)現(xiàn)LeetCode(164.求最大間距)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(164.求最大間距),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
C++實(shí)現(xiàn)LeetCode(35.搜索插入位置)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(35.搜索插入位置),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
C語言數(shù)據(jù)結(jié)構(gòu)之堆排序詳解
堆是計(jì)算機(jī)科學(xué)中一類特殊的數(shù)據(jù)結(jié)構(gòu)的統(tǒng)稱,通常是一個(gè)可以被看做一棵完全二叉樹的數(shù)組對(duì)象。而堆排序是利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法。本文將通過圖片詳細(xì)介紹堆排序,需要的可以參考一下2022-03-03
c++中拷貝構(gòu)造函數(shù)的參數(shù)類型必須是引用
如果拷貝構(gòu)造函數(shù)中的參數(shù)不是一個(gè)引用,即形如CClass(const CClass c_class),那么就相當(dāng)于采用了傳值的方式(pass-by-value),而傳值的方式會(huì)調(diào)用該類的拷貝構(gòu)造函數(shù),從而造成無窮遞歸地調(diào)用拷貝構(gòu)造函數(shù)。因此拷貝構(gòu)造函數(shù)的參數(shù)必須是一個(gè)引用2013-07-07

