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)示例代碼教程的詳細內(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)步驟,本文分步驟通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02