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

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

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

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

通訊錄可以用來存儲1000個人的信息,每個人的信息包括:姓名、性別、年齡、電話、住址

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

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

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

下來進(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("請選擇>:");
		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("選擇錯誤\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[])                             //由于在修改,刪除,查詢的地方都需要查找通訊錄的元素,所以對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)備添加一個新成員!\n");
		 printf("請輸入姓名:");
		 scanf("%s",pcon->data[pcon->size].name);
		 printf("請輸入性別:");
		 scanf("%s",pcon->data[pcon->size].sex);
		 printf("請輸入年齡:");
		 scanf("%d",&(pcon->data[pcon->size].age));
		 printf("請輸入住址:");
		 scanf("%s",pcon->data[pcon->size].addr);
		 printf("請輸入聯(lián)系人電話:");
		 scanf("%s",pcon->data[pcon->size].tele);
		 printf("添加成功!\n");
		 (pcon->size)++;                                      //每添加一個人,通訊錄總?cè)藬?shù)得加1
	 }
	 else
	 {
		 printf("通訊錄已經(jīng)滿了!\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("請輸入要刪除人的姓名:\n");
		scanf("%s",name);
		ret=find(pcon,name);
		if(ret!=-1)
		{
			pcon->data[ret]=pcon->data[(pcon->size)-1];      
			pcon->size--;                                    //刪除的方法是將數(shù)組中最后一個成員移到要刪除的成員位置上
                        printf("刪除成功!\n");
		}
		else
		{
			printf("未找到要刪除的對象!\n");
		}
 
	}
 
}
void _search_contact(Pcon pcon)
{
	int ret=0;
	char name[NAME_MAX]={0};
	printf("請輸入要查找的人的姓名:\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("請輸入要修改的人的姓名:\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("請輸入要修改的項(xiàng):");  
        scanf("%d",&select);   
        switch(select)  
        {  
        case 1:
	    printf("請輸入新的名字:");
            scanf("%s",modify);  
            strcpy(pcon->data[ret].name,modify);  
            printf("修改成功!\n");  
            break;  
        case 2:
	    printf("請輸入新的性別:");
            scanf("%s",modify);  
            strcpy(pcon->data[ret].sex,modify);  
            printf("修改成功!\n");  
            break;  
        case 3: 
	    printf("請輸入新的電話號:");
            scanf("%s",modify);  
            strcpy(pcon->data[ret].tele,modify);  
            printf("修改成功!\n");  
            break;  
        case 4: 
	    printf("請輸入新的地址:");
            scanf("%s",modify);  
            strcpy(pcon->data[ret].addr,modify);  
            printf("修改成功!\n");  
            break;  
        case 5:  
            printf("請輸入新的年齡:");
            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語言編程內(nèi)存分配通訊錄靜態(tài)實(shí)現(xiàn)示例代碼教程的詳細(xì)內(nèi)容,更多關(guān)于C語言實(shí)現(xiàn)靜態(tài)通訊錄的資料請關(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ù)庫配置使用教程

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

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

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

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

    C++中的策略模式淺析

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評論

威宁| 长泰县| 高要市| 察哈| 筠连县| 潜江市| 长子县| 三穗县| 洛宁县| 平远县| 五寨县| 大洼县| 盐池县| 清徐县| 陕西省| 尼玛县| 石首市| 平南县| 汉阴县| 杂多县| 上蔡县| 扶余县| 锡林郭勒盟| 通化县| 宜宾县| 金秀| 新乡县| 白山市| 西宁市| 岳阳市| 内乡县| 富锦市| 仁怀市| 白河县| 新丰县| 深水埗区| 应城市| 大埔区| 吴旗县| 离岛区| 张家界市|