實(shí)現(xiàn)一個通訊錄的功能:
創(chuàng)新互聯(lián)長期為近1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為崇義企業(yè)提供專業(yè)的做網(wǎng)站、網(wǎng)站設(shè)計(jì),崇義網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。分為三部分實(shí)現(xiàn):
contact.h里面的代碼如下:
#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#define max_name 20
#define max_sex 10
#define max_addr 30
#define max_tele 30
#define max 1000
#define Default 5
#include#include#include//創(chuàng)建結(jié)構(gòu)體,通訊錄
typedef struct teleInfo {
char name[max_name];
char sex[max_sex];
int age;
char tele[max_tele];
char addr[max_addr];
}teleInfo;
//創(chuàng)建1000個人的通訊錄
//typedef struct contact {
// teleInfo data[max];
// //當(dāng)前通訊錄的個數(shù)
// int sz;
//}contact;
//創(chuàng)建動態(tài)內(nèi)存的通訊錄
typedef struct contact {
teleInfo *data;
//當(dāng)前通訊錄的個數(shù)
int sz;
//大的內(nèi)存容量
int capacity;
}contact;
//初始化通訊錄
void initContact(contact *c);
//檢查內(nèi)存
void checkCapacity(contact* c);
//添加聯(lián)系人
void addContact(contact *c);
//刪除聯(lián)系人
void delContact(contact* c);
//更新聯(lián)系人信息
void updateContact(contact* c);
//查詢聯(lián)系人信息
void searchContact(contact* c);
//排序聯(lián)系人
void sortContact(contact* c);
//打印通訊錄
void printContact(contact* c);
//銷毀
void destoryContact(contact* c);
contact.c里面的代碼如下:
#include "contact.h"
//初始化通訊錄
void initContact(contact* c) {
c->data = (teleInfo*)malloc(Default * sizeof(teleInfo));
if (c->data == NULL) {
perror("initContact");
return;
}
c->sz = 0;
c->capacity = Default;
}
//檢查內(nèi)存
void checkCapacity(contact* c) {
if (c->sz == c->capacity) {
teleInfo* ptr = (teleInfo*)realloc(c->data, (c->capacity + Default)*sizeof(teleInfo));
if (ptr != NULL) {
c->data = ptr;
c->capacity += Default;
printf("增容成功\n");
}
else {
perror("checkCapacity");
printf("添加聯(lián)系人失敗\n");
return;
}
}
}
//添加聯(lián)系人
void addContact(contact* c) {
//判斷是否內(nèi)存足夠
checkCapacity(c);
//添加
printf("請輸入姓名:");
scanf("%s", c->data[c->sz].name);
printf("請輸入性別:");
scanf("%s", c->data[c->sz].sex);
printf("請輸入年齡:");
scanf("%d", &(c->data[c->sz].age));
printf("請輸入電話號碼:");
scanf("%s", c->data[c->sz].tele);
printf("請輸入地址:");
scanf("%s", c->data[c->sz].addr);
c->sz++;
printf("添加成功\n");
}
//查找
static int findbyName(contact* c,char name[]) {
int i = 0;
for (i = 0; i< c->sz; i++)
{
if (strcmp(c->data[i].name,name)==0) {
//找到了
return i;
}
}
return -1;
}
//刪除聯(lián)系人
void delContact(contact* c) {
char name[max_name] = {0};
printf("請輸入你要刪除的聯(lián)系人的姓名:");
scanf("%s", name);
//根據(jù)姓名查找到該聯(lián)系人
int ret=findbyName(c,name);
if (ret == -1) {
printf("找不到該聯(lián)系人\n");
return;
}
else {
//找到后刪除
int i = 0;
for (i = ret; i< c->sz - 1; i++) {
c->data[i] = c->data[i + 1];
}
c->sz--;
printf("刪除成功\n");
}
}
//更新聯(lián)系人信息
void updateContact(contact* c) {
char name[max_name] = {0};
printf("請輸入你要修改的聯(lián)系人的姓名:");
scanf("%s", name);
//根據(jù)姓名查找到該聯(lián)系人
int ret = findbyName(c, name);
if (ret == -1) {
printf("找不到該聯(lián)系人\n");
return;
}
else {
printf("請輸入姓名:");
scanf("%s", c->data[ret].name);
printf("請輸入年齡:");
scanf("%d", &(c->data[ret].age));
printf("請輸入性別:");
scanf("%s", c->data[ret].sex);
printf("請輸入電話號碼:");
scanf("%s", c->data[ret].tele);
printf("請輸入地址:");
scanf("%s", c->data[ret].addr);
printf("修改成功");
}
}
//查詢聯(lián)系人信息
void searchContact(contact* c) {
char name[max_name] = { 0 };
printf("請輸入你要查詢的聯(lián)系人的姓名:");
scanf("%s", name);
//根據(jù)姓名查找到該聯(lián)系人
int ret = findbyName(c, name);
if (ret == -1) {
printf("該聯(lián)系人不存在\n");
return;
}
else {
printf("%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t\n", "姓名", "年齡", "性別", "電話號碼", "地址");
printf("%-10s\t%-10d\t%-10s\t%-10s\t%-10s\t\n", c->data[ret].name, c->data[ret].age, c->data[ret].sex, c->data[ret].tele, c->data[ret].addr);
}
}
//排序聯(lián)系人(根據(jù)年齡來排序)
void sortContact(contact* c) {
}
//打印通訊錄
void printContact(contact* c) {
printf("%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t\n", "姓名", "年齡", "性別", "電話號碼", "地址");
int i = 0;
if (c->sz == 0) {
printf("通訊錄為空\n");
return;
}
else {
for (i = 0; i< c->sz; i++) {
printf("%-10s\t%-10d\t%-10s\t%-10s\t%-10s\t\n", c->data[i].name, c->data[i].age, c->data[i].sex, c->data[i].tele, c->data[i].addr);
}
}
}
//銷毀
void destoryContact(contact* c) {
free(c->data);
c->data = NULL;
c->sz = 0;
c->capacity = 0;
}
test.c里面的代碼如下:
#include "contact.h"
#include//實(shí)現(xiàn)通訊錄的添加,刪除,修改,查詢,排序,退出
void menu() {
printf("--------請選擇你要操作的功能:--------\n");
printf("----1.add--------2.del----------------\n");
printf("----3.update-----4.search-------------\n");
printf("----5.sort-------0.exit---------------\n");
printf("----------6.print----------------\n");
}
enum Option
{
EXIT,
ADD,
DEL,
UPDATE,
SEARCH,
SORT,
PRINT
};
int main() {
int input=0;
contact c;
//初始化通訊錄
initContact(&c);
do
{
menu();
printf("請選擇:》");
scanf("%d", &input);
switch (input)
{
case ADD:
addContact(&c);
break;
case DEL:
delContact(&c);
break;
case UPDATE:
updateContact(&c);
break;
case SEARCH:
searchContact(&c);
break;
case SORT:
sortContact(&c);
break;
case PRINT:
printContact(&c);
break;
case EXIT:
destoryContact(&c);
printf("退出成功\n");
break;
default:
printf("選擇失敗\n");
break;
}
} while (input);
return 0;
}
里面有排序的功能,還未實(shí)現(xiàn),不過可以根據(jù)你的要求來進(jìn)行排序,比如:年齡,排序有很多種方法,比如:冒泡排序.......
大家可以嘗試一下,有任何疑問,可以在評論區(qū)留言,看到后會解答。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧