最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言編程內(nèi)存分配通訊錄靜態(tài)實(shí)現(xiàn)示例代碼教程

 更新時(shí)間:2021年10月22日 10:36:56   作者:lc_29503203  
這篇文章主要為大家介紹了C語(yǔ)言編程實(shí)現(xiàn)靜態(tài)的通訊錄示例代碼教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

實(shí)現(xiàn)一個(gè)通訊錄:

通訊錄可以用來(lái)存儲(chǔ)1000個(gè)人的信息,每個(gè)人的信息包括:姓名、性別、年齡、電話(huà)、住址

提供方法:
1. 添加聯(lián)系人信息
2. 刪除指定聯(lián)系人信息
3. 查找指定聯(lián)系人信息
4. 修改指定聯(lián)系人信息
5. 顯示所有聯(lián)系人信息
6. 清空所有聯(lián)系人
7. 以名字排序所有聯(lián)系人

首先我們采用順序表的方式來(lái)實(shí)現(xiàn)一個(gè)通訊錄,順序表就是一種靜態(tài)的模式。但是呢,靜態(tài)的方式存在著一些明顯的弊端,比如說(shuō):(1)信息少了存在空間浪費(fèi)現(xiàn)象,信息多了存在空間不足的現(xiàn)象;(2)無(wú)法對(duì)信息進(jìn)行保存,沒(méi)有實(shí)用性.所以呢,后期會(huì)提供動(dòng)態(tài)方式和文件的方式。    

為了結(jié)構(gòu)清晰我使用了三個(gè)文件來(lái)進(jìn)行封裝,Contact.h封裝結(jié)構(gòu)體以及函數(shù)的聲明,test.c封裝主函數(shù),Contact.c用來(lái)封裝函數(shù)的算法。

下來(lái)進(jìn)行代碼實(shí)現(xiàn):

Contact.h

#define _CRT_SECURE_NO_WARNINGS 1
#ifndef __CONTACT_H__             //防止重定義
#define __CONTACT_H__
#include <stdio.h>
#include <string.h>
#include<stdlib.h> 
enum OP
{
	EXIT,
	ADD,
	DEL,
	SEARCH,
	MODIFY,
	DISPLAY,
	SORT,
	CLEAR
};
#define NAME_MAX 20
#define SEX_MAX 5
#define TELE_MAX 12
#define ADDR_MAX 25
#define MAX 1000
typedef struct PerInfo
{
	char name[NAME_MAX];
	int age;
	char sex[SEX_MAX];
	char tele[TELE_MAX];
	char addr[ADDR_MAX];
}PeoInfo; 
typedef struct Contact
{
	PeoInfo data[MAX];
	int size;
}Contact,*Pcon;
void init_contact(Pcon pcon);
void _add_contact(Pcon pcon);
void _display_contact(Pcon pcon);
void _del_contact(Pcon pcon);
void _search_contact(Pcon pcon);
void _modify_contact(Pcon pcon);
void _sort_contact(Pcon pcon);
void _clear_contact(Pcon pcon); 
#endif 

Test.c

#include "Contact.h"
void menu()
{
	printf("***** 1.add     2.del    ****\n");
	printf("***** 3.modify  4.search ****\n");
	printf("***** 5.display 6.sort   ****\n");
	printf("***** 7.clear   0.exit   ****\n");
}
int main()
{
	Contact con;
	int input = 1;
	init_contact(&con);
	while(input)
	{
		menu();
		printf("請(qǐng)選擇>:");
		scanf("%d",&input);
		switch(input)
		{
		case ADD:
			_add_contact(&con);
			break;
		case DEL:
			_del_contact(&con);
			break;
		case SEARCH:
			_search_contact(&con);
			break;
		case MODIFY:
			_modify_contact(&con);
			break;
		case DISPLAY:
			_display_contact(&con);
			break;
		case SORT:
			_sort_contact(&con);
			break;
		case CLEAR:
			_clear_contact(&con);
			break;
		case EXIT:
			break;
		default:
			printf("選擇錯(cuò)誤\n");
			break;
		}
	}
	return 0;
}

Contact.c

#include"Contact.h"
void init_contact(Pcon pcon)                                     //進(jìn)行初始化
{   
	memset(pcon->data, 0, MAX*sizeof(PeoInfo));
	pcon->size = 0;
}
static int find(Pcon pcon,char arr[])                             //由于在修改,刪除,查詢(xún)的地方都需要查找通訊錄的元素,所以對(duì)find進(jìn)行封裝
{
	int i=0;
	for(i=0;i<pcon->size;i++)
	{
	    if(strcmp(pcon->data[i].name,arr)==0)
			return i;
	}
	return -1;
}
 void _add_contact(Pcon pcon)
 {
	 if(pcon->size<MAX)
	 {
		 printf("準(zhǔn)備添加一個(gè)新成員!\n");
		 printf("請(qǐng)輸入姓名:");
		 scanf("%s",pcon->data[pcon->size].name);
		 printf("請(qǐng)輸入性別:");
		 scanf("%s",pcon->data[pcon->size].sex);
		 printf("請(qǐng)輸入年齡:");
		 scanf("%d",&(pcon->data[pcon->size].age));
		 printf("請(qǐng)輸入住址:");
		 scanf("%s",pcon->data[pcon->size].addr);
		 printf("請(qǐng)輸入聯(lián)系人電話(huà):");
		 scanf("%s",pcon->data[pcon->size].tele);
		 printf("添加成功!\n");
		 (pcon->size)++;                                      //每添加一個(gè)人,通訊錄總?cè)藬?shù)得加1
	 }
	 else
	 {
		 printf("通訊錄已經(jīng)滿(mǎn)了!\n");
	 }
 } 
void _display_contact(Pcon pcon)
{
   int i=0;
   printf("%s\t%s\t%s\t%s\t%s\n","name","sex","age","tele","addr");
   for(i=0;i<pcon->size;i++)
   {
	   printf("%s\t%s\t%d\t%s\t%s\n",pcon->data[i].name,
		  pcon->data[i].sex,pcon->data[i].age,pcon->data[i].tele,pcon->data[i].addr);
   }
}
void _del_contact(Pcon pcon)
{
	int ret=0;
	char name[NAME_MAX]={0};
	if(pcon->size==0)
	{
		printf("當(dāng)前通訊錄為空!\n");
		return;
	}
	else
	{
		printf("請(qǐng)輸入要?jiǎng)h除人的姓名:\n");
		scanf("%s",name);
		ret=find(pcon,name);
		if(ret!=-1)
		{
			pcon->data[ret]=pcon->data[(pcon->size)-1];      
			pcon->size--;                                    //刪除的方法是將數(shù)組中最后一個(gè)成員移到要?jiǎng)h除的成員位置上
                        printf("刪除成功!\n");
		}
		else
		{
			printf("未找到要?jiǎng)h除的對(duì)象!\n");
		}
 
	}
 
}
void _search_contact(Pcon pcon)
{
	int ret=0;
	char name[NAME_MAX]={0};
	printf("請(qǐng)輸入要查找的人的姓名:\n");
	scanf("%s",name);
	ret=find(pcon,name);
	if(ret!=-1)
	{
	   printf("%s\t%s\t%d\t%s\t%s\t",pcon->data[ret].name,
	   pcon->data[ret].sex,pcon->data[ret].age,pcon->data[ret].tele,
	   pcon->data[ret].addr);
	}
	else
		printf("未找到所要查找的人!\n");
}
void _modify_contact(Pcon pcon)  
{  
    int select=0;  
    int ret=0;  
    char modify[20]={0};  
    int year=0;  
    char name[NAME_MAX]={0};  
    printf("請(qǐng)輸入要修改的人的姓名:\n");  
    scanf("%s",name);  
    ret=find(pcon,name);  
    if(ret!=-1)  
    {  
	printf("1.name\n 2.sex\n 3.age\n 4.tele\n 5addr\n"); 
        printf("請(qǐng)輸入要修改的項(xiàng):");  
        scanf("%d",&select);   
        switch(select)  
        {  
        case 1:
	    printf("請(qǐng)輸入新的名字:");
            scanf("%s",modify);  
            strcpy(pcon->data[ret].name,modify);  
            printf("修改成功!\n");  
            break;  
        case 2:
	    printf("請(qǐng)輸入新的性別:");
            scanf("%s",modify);  
            strcpy(pcon->data[ret].sex,modify);  
            printf("修改成功!\n");  
            break;  
        case 3: 
	    printf("請(qǐng)輸入新的電話(huà)號(hào):");
            scanf("%s",modify);  
            strcpy(pcon->data[ret].tele,modify);  
            printf("修改成功!\n");  
            break;  
        case 4: 
	    printf("請(qǐng)輸入新的地址:");
            scanf("%s",modify);  
            strcpy(pcon->data[ret].addr,modify);  
            printf("修改成功!\n");  
            break;  
        case 5:  
            printf("請(qǐng)輸入新的年齡:");
            scanf("%s",year);  
            pcon->data[ret].age=year;  
            printf("修改成功!\n");  
            break;  
        default:  
            printf("修改失敗!\n");  
            break;  
        }     
    }  
    else  
    {  
        printf("未找到所要修改的人!\n");  
    }  
}  
void _sort_contact(Pcon pcon)
{
	PeoInfo tmp={0};
	int i=0;
	int j=0;
	int flag=0;        //表示有序
	for(i=1;i<(pcon->size)-1;i++)
	{
		flag=0;
		for(j=1;j<(pcon->size)-i-1;j++)
		{
			if(strcmp((pcon->data[j].name),(pcon->data[j+1].name))>0)
 
                          tmp=pcon->data[j];
			  pcon->data[j]=pcon->data[j+1];
			  pcon->data[j+1]=tmp;
			  flag=1;
		}
		if(flag==0)
			break;
	}
 
}
void _clear_contact(Pcon pcon)
{
	pcon->size=0;
	printf("通訊錄已清空!\n");
}

以上就是C語(yǔ)言編程內(nèi)存分配通訊錄靜態(tài)實(shí)現(xiàn)示例代碼教程的詳細(xì)內(nèi)容,更多關(guān)于C語(yǔ)言實(shí)現(xiàn)靜態(tài)通訊錄的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++實(shí)現(xiàn)俄羅斯方塊小游戲

    C++實(shí)現(xiàn)俄羅斯方塊小游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)俄羅斯方塊小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C++?sqlite3數(shù)據(jù)庫(kù)配置使用教程

    C++?sqlite3數(shù)據(jù)庫(kù)配置使用教程

    SQLite 是一種嵌入式的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它是一個(gè)開(kāi)源項(xiàng)目,已經(jīng)被廣泛應(yīng)用于各種應(yīng)用程序和操作系統(tǒng)中,這篇文章主要介紹了C++?sqlite3數(shù)據(jù)庫(kù)配置使用,需要的朋友可以參考下
    2023-08-08
  • C語(yǔ)言中的結(jié)構(gòu)體的入門(mén)學(xué)習(xí)教程

    C語(yǔ)言中的結(jié)構(gòu)體的入門(mén)學(xué)習(xí)教程

    這篇文章主要介紹了C語(yǔ)言中的結(jié)構(gòu)體的入門(mén)學(xué)習(xí)教程,以struct語(yǔ)句定義的結(jié)構(gòu)體是C語(yǔ)言編程中的重要基礎(chǔ),需要的朋友可以參考下
    2015-12-12
  • C++中的策略模式淺析

    C++中的策略模式淺析

    策略模式屬于C++設(shè)計(jì)模式中行為模式之一,該模式定義了一系列算法,并將每個(gè)算法封裝起來(lái),使它們可以相互替換。本文將通過(guò)示例詳細(xì)講解這一模式,需要的可以參考一下
    2023-02-02
  • C++實(shí)現(xiàn)從輸入中讀取字符串

    C++實(shí)現(xiàn)從輸入中讀取字符串

    這篇文章主要介紹了C++實(shí)現(xiàn)從輸入中讀取字符串的實(shí)現(xiàn)思路和具體代碼,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下
    2016-05-05
  • C語(yǔ)言讀取data.json文件并存入MySQL數(shù)據(jù)庫(kù)小案例(推薦)

    C語(yǔ)言讀取data.json文件并存入MySQL數(shù)據(jù)庫(kù)小案例(推薦)

    本文介紹如何使用C語(yǔ)言結(jié)合cJSON庫(kù)讀取JSON文件,并將數(shù)據(jù)存儲(chǔ)到MySQL數(shù)據(jù)庫(kù)中,示例代碼包括創(chuàng)建MySQL表的SQL語(yǔ)句和C語(yǔ)言代碼,以及如何編譯和運(yùn)行程序,確保已安裝必要的庫(kù)以支持程序運(yùn)行
    2024-10-10
  • C++使用alsa庫(kù)實(shí)現(xiàn)播放聲音文件

    C++使用alsa庫(kù)實(shí)現(xiàn)播放聲音文件

    這篇文章主要為大家詳細(xì)介紹了Linux系統(tǒng)上C++如何使用alsa庫(kù)播放聲音文件,文中示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • c++使用Easyx圖形庫(kù)實(shí)現(xiàn)飛機(jī)大戰(zhàn)

    c++使用Easyx圖形庫(kù)實(shí)現(xiàn)飛機(jī)大戰(zhàn)

    本文詳細(xì)講解了c++使用Easyx圖形庫(kù)實(shí)現(xiàn)飛機(jī)大戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • 教你Visual?Studio?2022如何新建一個(gè)C語(yǔ)言工程(圖文詳解)

    教你Visual?Studio?2022如何新建一個(gè)C語(yǔ)言工程(圖文詳解)

    這篇文章主要介紹了Visual?Studio?2022如何新建一個(gè)C語(yǔ)言工程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • QT中QDockWidget控件的使用小結(jié)

    QT中QDockWidget控件的使用小結(jié)

    QDockWidget類(lèi)提供了一個(gè)小部件,可以??吭赒MainWindow中,也可以作為桌面上的頂級(jí)窗口浮動(dòng),本文主要介紹了QT中QDockWidget控件的使用小結(jié),感興趣的可以了解一下
    2024-01-01

最新評(píng)論

祁东县| 新营市| 淮北市| 航空| 卢湾区| 岗巴县| 夹江县| 汶川县| 咸阳市| 称多县| 任丘市| 南木林县| 额济纳旗| 轮台县| 宁海县| 龙海市| 绥芬河市| 都安| 老河口市| 秦安县| 白城市| 陇西县| 仁寿县| 绥滨县| 藁城市| 清丰县| 即墨市| 沙河市| 舟山市| 绥中县| 明溪县| 平安县| 集安市| 卫辉市| 柘荣县| 巴青县| 大理市| 饶河县| 苗栗县| 乐清市| 宝坻区|