利用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è)人的信息包括:
姓名、性別、年齡、電話、住址
程序如下:
#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("輸入電話:\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電話\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("輸入修改的電話:\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電話\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)文章
C++ OpenCV實(shí)戰(zhàn)之手勢(shì)識(shí)別
這篇文章主要介紹了如何利用C++?OpenCV實(shí)現(xiàn)手勢(shì)識(shí)別,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)OpenCV有一定幫助,感興趣的小伙伴可以了解一下2022-04-04C語(yǔ)言版學(xué)生成績(jī)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言版學(xué)生成績(jī)管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01C語(yǔ)言棧順序結(jié)構(gòu)實(shí)現(xiàn)代碼
一個(gè)能夠自動(dòng)擴(kuò)容的順序結(jié)構(gòu)的棧 ArrStack 實(shí)例 (GCC編譯),有需要的朋友可以參考一下2013-10-10C++共享智能指針shared_ptr的實(shí)現(xiàn)
在C++中沒(méi)有垃圾回收機(jī)制,必須自己釋放分配的內(nèi)存,否則就會(huì)造成內(nèi)存泄露,解決這個(gè)問(wèn)題最有效的方法是使用智能指針,本文主要介紹了C++共享智能指針shared_ptr的實(shí)現(xiàn),感興趣的可以了解一下2023-12-12C++時(shí)間戳轉(zhuǎn)換成日期時(shí)間的步驟和示例代碼
這篇文章主要介紹了C++時(shí)間戳轉(zhuǎn)換成日期時(shí)間的步驟和示例代碼,需要的朋友可以參考下2016-12-12OpenCV數(shù)字圖像處理基于C++之圖像形態(tài)學(xué)處理詳解
OpenCV是一款由Intel公司俄羅斯團(tuán)隊(duì)發(fā)起并參與和維護(hù)的一個(gè)計(jì)算機(jī)視覺(jué)處理開(kāi)源軟件庫(kù),支持與計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)相關(guān)的眾多算法,下面這篇文章主要給大家介紹了關(guān)于OpenCV數(shù)字圖像處理基于C++之圖像形態(tài)學(xué)處理的相關(guān)資料,需要的朋友可以參考下2022-12-12數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)- 解析最少換車(chē)次數(shù)的問(wèn)題詳解
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)- 解析最少換車(chē)次數(shù)的問(wèn)題詳解2013-05-05MinGW-w64 C/C++編譯器下載和安裝的方法步驟(入門(mén)教程)
如果電腦沒(méi)有安裝MinGW-w64 C/C++編譯器,就無(wú)法運(yùn)行g(shù)cc命令,本文主要介紹了MinGW-w64 C/C++編譯器下載和安裝的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02