C語言編程內(nèi)存分配通訊錄靜態(tài)實現(xiàn)示例代碼教程
實現(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)示例代碼教程的詳細(xì)內(nèi)容,更多關(guān)于C語言實現(xiàn)靜態(tài)通訊錄的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用pybind11封裝C++結(jié)構(gòu)體作為參數(shù)的函數(shù)實現(xiàn)步驟
這篇文章主要介紹了用pybind11封裝C++結(jié)構(gòu)體作為參數(shù)的函數(shù)實現(xiàn)步驟,本文分步驟通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02

