欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

為了結(jié)構(gòu)清晰我使用了三個文件來進行封裝,Contact.h封裝結(jié)構(gòu)體以及函數(shù)的聲明,test.c封裝主函數(shù),Contact.c用來封裝函數(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)                                     //進行初始化
{   
	memset(pcon->data, 0, MAX*sizeof(PeoInfo));
	pcon->size = 0;
}
static int find(Pcon pcon,char arr[])                             //由于在修改,刪除,查詢的地方都需要查找通訊錄的元素,所以對find進行封裝
{
	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("請輸入要修改的項:");  
        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)實現(xiàn)示例代碼教程的詳細內(nèi)容,更多關(guān)于C語言實現(xiàn)靜態(tài)通訊錄的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C語言實現(xiàn)用戶態(tài)線程庫案例

    C語言實現(xiàn)用戶態(tài)線程庫案例

    下面小編就為大家?guī)硪黄狢語言實現(xiàn)用戶態(tài)線程庫案例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • VC實現(xiàn)圖片拖拽及動畫的實例

    VC實現(xiàn)圖片拖拽及動畫的實例

    這篇文章介紹了VC實現(xiàn)圖片拖拽及動畫的實例,有需要的朋友可以參考一下
    2013-08-08
  • C++版本簡易Flappy bird

    C++版本簡易Flappy bird

    這篇文章主要介紹了C++版本簡易Flappy bird的相關(guān)資料,需要的朋友可以參考下
    2015-03-03
  • 使用pybind11封裝C++結(jié)構(gòu)體作為參數(shù)的函數(shù)實現(xiàn)步驟

    使用pybind11封裝C++結(jié)構(gòu)體作為參數(shù)的函數(shù)實現(xiàn)步驟

    這篇文章主要介紹了用pybind11封裝C++結(jié)構(gòu)體作為參數(shù)的函數(shù)實現(xiàn)步驟,本文分步驟通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • C語言設(shè)計前中后隊列實例代碼

    C語言設(shè)計前中后隊列實例代碼

    隊列最主要的作用就是用來管理數(shù)據(jù)流的,防止數(shù)據(jù)因為傳輸頻率過快得不到及時處理而丟失,下面這篇文章主要給大家介紹了關(guān)于C語言設(shè)計前中后隊列的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • C語言中常見的幾種流程控制語句

    C語言中常見的幾種流程控制語句

    這篇文章主要給大家介紹了關(guān)于C語言中常見的幾種流程控制語句,分別包括goto語句、if語句、switch語句、while循環(huán)、do...while循環(huán)、for循環(huán)以及break和continue等,需要的朋友可以參考下
    2021-08-08
  • TensorFlow源代碼構(gòu)建流程記錄解析

    TensorFlow源代碼構(gòu)建流程記錄解析

    這篇文章主要為大家介紹了TensorFlow源代碼構(gòu)建流程記錄解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 詳解CLion配置openMP的方法

    詳解CLion配置openMP的方法

    這篇文章主要介紹了CLion配置openMP的方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • 一盤王者的時間用C語言實現(xiàn)三子棋

    一盤王者的時間用C語言實現(xiàn)三子棋

    相信我們都玩過三子棋,規(guī)則很簡單,但想用c語言做出這個游戲,事實上也是比較簡單的,下面通過c語言進行對五子棋的分析
    2022-02-02
  • C++設(shè)計模式之備忘錄模式

    C++設(shè)計模式之備忘錄模式

    這篇文章主要介紹了C++設(shè)計模式之備忘錄模式,本文講解了什么是備忘錄模式、備忘錄模式的UML類圖、備忘錄模式的使用場合等內(nèi)容,需要的朋友可以參考下
    2014-10-10

最新評論