利用C語(yǔ)言結(jié)構(gòu)體實(shí)現(xiàn)通訊錄
本文實(shí)例為大家分享了C語(yǔ)言結(jié)構(gòu)體實(shí)現(xiàn)通訊錄的具體代碼,供大家參考,具體內(nèi)容如下
用來(lái)存儲(chǔ)1000個(gè)人的信息的通訊錄,每個(gè)人的信息包括:
姓名、性別、年齡、電話(huà)、住址
程序如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct People
{
char name[20];
char sex[5];
int age;
char tel[15];
char addr[50];
}; //定義人的信息結(jié)構(gòu)體(包含各種信息)
struct Contact
{
struct People person[1000]; //定義通訊錄結(jié)構(gòu)體
int n; //(包含人的信息的結(jié)構(gòu)體和用戶(hù)個(gè)數(shù)n)
};
typedef struct Contact * p;
void menu();
int add(p q); //p是一個(gè)結(jié)構(gòu)體指針類(lèi)型,q是一個(gè)指向struct Contact的一個(gè)指針
int delete(p q); //例如:typedef int * int 即 int *p ==> int p
int find(p q);
int modify(p q);
int show(p q);
int clear(p q); //函數(shù)的聲明
void menu() //目錄格式
{
printf("====================歡迎來(lái)到蘇嵌154通訊錄==================\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("====================歡迎來(lái)到蘇嵌154通訊錄==================\n");
}
int add(p q) //添加聯(lián)系人
{
if((*q).n >= 1000)
{
printf("contact is full!\n");
return -1;
}
else
{
printf("輸入姓名:\n");
scanf("%s",(*q).person[(*q).n].name);
printf("輸入性別:\n");
scanf("%s",(*q).person[(*q).n].sex);
printf("輸入年齡:\n");
scanf("%d",&(*q).person[(*q).n].age);
printf("輸入電話(huà):\n");
scanf("%s",(*q).person[(*q).n].tel);
printf("輸入地址:\n");
scanf("%s",(*q).person[(*q).n].addr);
((*q).n)++;
}
return 0;
}
int delete(p q) //刪除聯(lián)系人
{
int ret = find(q); //調(diào)用查找函數(shù)并保存其值
if(ret != -1)
{
int i = 0;
i = ret; //這里要用另一個(gè)變量來(lái)保存輸入的姓名
for(i = 0;i < (*q).n-1;i++)
{
(*q).person[i] = (*q).person[i+1]; //用后一個(gè)覆蓋前邊的,如果要?jiǎng)h除的是最后一個(gè)不進(jìn)行此步驟
}
(*q).n --; //直接減去最后一個(gè)即count--
}
return 0;
}
int find(p q) //查找聯(lián)系人
{
int i = 0;
char ret[20]; //用另一個(gè)數(shù)組來(lái)保存姓名
printf("輸入姓名:\n");
scanf("%s",ret);
while(i <= (*q).n)
{
if(strcmp(ret,(*q).person[i].name)== 0) //比較輸入的姓名和通訊錄中已有的姓名
{
printf("姓名\t性別\t年齡\t電話(huà)\t地址\4t\n"); //制表符來(lái)制作表頭
printf("%s\t",(*q).person[i].name);
printf("%s\t",(*q).person[i].sex);
printf("%d\t",(*q).person[i].age);
printf("%s\t",(*q).person[i].tel);
printf("%s\4t\n",(*q).person[i].addr);
return i;
}
i++;
}
printf("你丫的我班沒(méi)這個(gè)人\n");
return -1;
}
int modify(p q) //修改函數(shù),首先找到如要修改的姓名,然后重新輸入
{
int ret = find(q);
if(ret != -1)
{
printf("輸入修改的姓名:\n");
scanf("%s",(*q).person[ret].name);
printf("輸入修改的性別:\n");
scanf("%s",(*q).person[ret].sex);
printf("輸入修改的年齡:\n");
scanf("%d",&((*q).person[ret].age));
printf("輸入修改的電話(huà):\n");
scanf("%s",(*q).person[ret].tel);
printf("輸入修改的地址:\n");
scanf("%s",(*q).person[ret].addr);
}
else
{
printf("你丫的我班沒(méi)這個(gè)人\n");
}
return 0;
}
int show(p q) //顯示全部聯(lián)系人
{
int i = 0;
printf("姓名\t性別\t年齡\t電話(huà)\t地址\4t\n");
for(i = 0;i < (*q).n;i++)
{
printf("%s\t",(*q).person[i].name);
printf("%s\t",(*q).person[i].sex);
printf("%d\t",(*q).person[i].age);
printf("%s\t",(*q).person[i].tel);
printf("%s\4t\n",(*q).person[i].addr);
}
printf("\n");
return 0;
}
int clear(p q) //清除所有人,直接讓成員個(gè)數(shù)變?yōu)?
{
(*q).n = 0 ;
return 0;
}
int main()
{
int n=1;
struct Contact people; //調(diào)用通訊錄結(jié)構(gòu)體
people.n = 0; //初始化n
while(n)
{
menu();
printf("請(qǐng)選擇你的騷操作:\n");
scanf("%d",&n);
switch(n) //switch case語(yǔ)句分支選擇不同函數(shù)實(shí)現(xiàn)不同作用
{
case 1:
{
add(&people);
break;
}
case 2:
{
delete(&people);
break;
}
case 3:
{
find(&people);
break;
}
case 4:
{
modify(&people);
break;
}
case 5:
{
show(&people);
break;
}
case 6:
{
clear(&people);
break;
}
default:
{
return 0;
break;
}
}
}
return 0;
}
這樣就實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的通訊錄。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C語(yǔ)言入門(mén)篇--初識(shí)結(jié)構(gòu)體
- C語(yǔ)言自定義類(lèi)型詳解(結(jié)構(gòu)體、枚舉、聯(lián)合體和位段)
- c語(yǔ)言結(jié)構(gòu)體字節(jié)對(duì)齊的實(shí)現(xiàn)方法
- C語(yǔ)言中結(jié)構(gòu)體與內(nèi)存對(duì)齊實(shí)例解析
- C語(yǔ)言結(jié)構(gòu)體計(jì)算內(nèi)存占用問(wèn)題解析
- C語(yǔ)言結(jié)構(gòu)體指針案例解析
- C語(yǔ)言中結(jié)構(gòu)體和共用體實(shí)例教程
- C語(yǔ)言結(jié)構(gòu)體簡(jiǎn)單入門(mén)講解
- C語(yǔ)言結(jié)構(gòu)體的具體使用方法
相關(guān)文章
對(duì)for循環(huán)中表達(dá)式和循環(huán)體的執(zhí)行順序詳解
今天小編就為大家分享一篇對(duì)for循環(huán)中表達(dá)式和循環(huán)體的執(zhí)行順序詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
c++與python實(shí)現(xiàn)二分查找的原理及實(shí)現(xiàn)
本文介紹了c++與python實(shí)現(xiàn)二分查找的原理及實(shí)現(xiàn),二分查找指首先將數(shù)組中間值和目標(biāo)值進(jìn)行比較,如果相等則返回;如果不相等,則選擇中間值左邊的一半或者右邊的一半進(jìn)行比較;不斷重復(fù)直到檢索完畢,下文相關(guān)資料需要的朋友可以參考一下2022-03-03
C語(yǔ)言順序表實(shí)現(xiàn)代碼排錯(cuò)
這篇文章主要介紹了C語(yǔ)言順序表實(shí)現(xiàn)方法,大家參考使用吧2013-12-12
C語(yǔ)言中QString與QByteArray互相轉(zhuǎn)換的方法
本文主要介紹了C語(yǔ)言中QString與QByteArray互相轉(zhuǎn)換的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05

