c語言小項(xiàng)目——通訊錄-創(chuàng)新互聯(lián)

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔

創(chuàng)新互聯(lián)主要從事成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)蘭溪,10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220

文章目錄

一、構(gòu)建框架

1.1 菜單

1.2 結(jié)構(gòu)體創(chuàng)建

1.3 結(jié)構(gòu)體數(shù)組創(chuàng)建及其初始化

二、功能實(shí)現(xiàn)

2.1 增加聯(lián)系人

2.2 刪除指定聯(lián)系人

2.3 查找指定聯(lián)系人

2.4 修改指定聯(lián)系人

2.5 顯示聯(lián)系人

2.6排序

三、效果展示及代碼


前言

本篇文章分享一下用c語言完成簡易的通訊錄的搭建,本次項(xiàng)目模塊分成test.c,contact.c,contact.h 分別用于項(xiàng)目的檢測,項(xiàng)目的實(shí)現(xiàn),項(xiàng)目的聲明.


一、構(gòu)建框架1.1 菜單
//打印菜單
void menu()
{
	printf("**********************************\n");
	printf("*****   1.增加      2.刪除   *****\n");
	printf("*****   3.查找      4.修改   *****\n");
	printf("*****   5.顯示      6.排序   *****\n");
	printf("******        0.退出         *****\n");
	printf("**********************************\n");
}
1.2 結(jié)構(gòu)體創(chuàng)建
struct date
{
	char name[my_name];//名字
	char sex[my_sex];//性別
	int age;//年齡
	char tele[my_tele];//電話號碼
	char add[my_add];//地址
};

1.3 結(jié)構(gòu)體創(chuàng)建及其初始化

//創(chuàng)建結(jié)構(gòu)體數(shù)組,用來保存通訊錄信息
struct contact
{
	struct date contact[MAX];//保存struct date類型數(shù)據(jù)的結(jié)構(gòu)體數(shù)組
	int sz;//用來計(jì)算存入了多少個信息
};
//初始化結(jié)構(gòu)體數(shù)組
void InitContact(struct contact* pc)
{
	pc->sz = 0;
	memset((pc->contact), 0, MAX * sizeof(*pc->contact));//用memset函數(shù)將con中的數(shù)組的1000個值全部初始化為0
}
二、功能實(shí)現(xiàn) 2.1 增加聯(lián)系人
//增加
void AddContact(struct contact* pc)
{
	printf("請輸入名字:");
	scanf("%s", pc->contact[pc->sz].name);//用sz來充當(dāng)數(shù)組下標(biāo),避免在一個位置重復(fù)輸入
	printf("請輸入性別:");
	scanf("%s", pc->contact[pc->sz].sex);
	printf("請輸入年齡:");
	scanf("%d", &pc->contact[pc->sz].age);
	printf("請輸入電話號:");
	scanf("%s", pc->contact[pc->sz].tele);
	printf("請輸入地址:");
	scanf("%s", pc->contact[pc->sz].add);
	printf("輸入完成\n");
	pc->sz++;//每輸入一個sz就計(jì)數(shù)一次
}
2.2 刪除指定聯(lián)系人
//查詢函數(shù)
int FindContact(struct contact* pc, char name[])
{
	for (int i = 0; i< (pc->sz); i++)
	{
		if (0 == strcmp(pc->contact[i].name, name))
		{
			return i;//使用strcmp比較,相等即找到了,傳回下標(biāo)i
		}
	}
	return -1;//沒找到則傳回-1
}
//刪除
void DelContact(struct contact* pc)
{
	char name[20];
	printf("請輸入要刪除的名字:");
	scanf("%s", name);
	int ret=FindContact(pc,name);//利用查找函數(shù),查到傳回下標(biāo),沒有則傳回-1
	if (ret == -1)
	{
		printf("沒有所要刪除的名字\n");
	}
	else
	{
		for (int i = ret; i< (pc->sz)-1; i++)
		{
			pc->contact[i] = pc->contact[i + 1];//刪除的辦法是:
			//將所要刪除的那一組數(shù)據(jù)往后的數(shù)據(jù)整體向前挪移
		}
		pc->sz--;
	}
}
2.3 查找指定聯(lián)系人
//查詢函數(shù)
int FindContact(struct contact* pc, char name[])
{
	for (int i = 0; i< (pc->sz); i++)
	{
		if (0 == strcmp(pc->contact[i].name, name))
		{
			return i;//使用strcmp比較,相等即找到了,傳回下標(biāo)i
		}
	}
	return -1;//沒找到則傳回-1
}
//查找
void SearchConstact(struct contact* pc)
{
	char name[20];
	printf("請輸入要查找的名字:");
	scanf("%s", name);
	int ret = FindContact(pc, name);//利用查找函數(shù),查到傳回下標(biāo),沒有則傳回-1
	if (ret == -1)
	{
		printf("查無此人\n");
	}
	else//打印傳回下標(biāo)所對應(yīng)的數(shù)據(jù)
	{
		printf("%-10s\t%-6s\t%-5s\t%-12s\t%-20s\n", "姓名", "性別", "年齡", "號碼", "地址");
		printf("%-10s\t%-6s\t%-5d\t%-12s\t%-20s\n", pc->contact[ret].name,
			pc->contact[ret].sex,
			pc->contact[ret].age,
			pc->contact[ret].tele,
			pc->contact[ret].add);
	}
}
2.4 修改指定聯(lián)系人
//查詢函數(shù)
int FindContact(struct contact* pc, char name[])
{
	for (int i = 0; i< (pc->sz); i++)
	{
		if (0 == strcmp(pc->contact[i].name, name))
		{
			return i;//使用strcmp比較,相等即找到了,傳回下標(biāo)i
		}
	}
	return -1;//沒找到則傳回-1
}
//修改
void ModifyContact(struct contact* pc)
{
	char name[20];
	printf("請輸入要修改的名字:");
	scanf("%s", name);
	int ret = FindContact(pc, name);//利用查找函數(shù),查到傳回下標(biāo),沒有則傳回-1
	if (ret == -1)
	{
		printf("查無此人\n");
	}
	else//用傳回的下標(biāo)找到要修改的數(shù)據(jù),進(jìn)行修改
	{
		printf("請輸入修改后的名字:");
		scanf("%s", pc->contact[ret].name);
		printf("請輸入修改后的性別:");
		scanf("%s", pc->contact[ret].sex);
		printf("請輸入修改后的年齡:");
		scanf("%d", &pc->contact[ret].age);
		printf("請輸入修改后的電話號:");
		scanf("%s", pc->contact[ret].tele);
		printf("請輸入修改后地址:");
		scanf("%s", pc->contact[ret].add);
		printf("修改完成\n");
	}
}
2.5 顯示聯(lián)系人
//顯示
void ShowContact(struct contact* pc)
{
	printf("%-10s\t%-6s\t%-5s\t%-12s\t%-20s\n", "姓名", "性別", "年齡", "號碼", "地址");
	for (int i = 0; i< (pc->sz); i++)
	{
		printf("%-10s\t%-6s\t%-5d\t%-12s\t%-20s\n", pc->contact[i].name,
			pc->contact[i].sex,
			pc->contact[i].age,
			pc->contact[i].tele,
			pc->contact[i].add);
	}
}
2.6 排序(根據(jù)名字)
//排序
int sort(const void* e1, const void* e2)
{
	return strcmp(((struct date*)e1)->name, ((struct date*)e2)->name);//用strcmp函數(shù)比較相鄰的名字的大小
}
void SortContact(struct contact* pc)
{
	qsort(pc->contact, pc->sz, sizeof(struct date), sort);//用qsort函數(shù)進(jìn)行排序
}
三、效果展示 增加聯(lián)系人

刪除指定聯(lián)系人

查找指定聯(lián)系人

修改指定聯(lián)系人

顯示聯(lián)系人

排序(根據(jù)名字)

下面是本次項(xiàng)目的所有代碼

test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"

int main()
{
	menu();
	int input;
	struct contact con;
	InitContact(&con);
	do
	{
		printf("請選擇:");
		scanf("%d", &input);
		switch(input)
		{
		  case 1:
			  AddContact(&con);
			  break;
		  case 2:
			  DelContact(&con);
			  break;
		  case 3:
			  SearchConstact(&con);
			  break;
		  case 4:
			  ModifyContact(&con);
			  break;
		  case 5:
			  ShowContact(&con);
			  break;
		  case 6:
			  SortContact(&con);
			  break;
		  case 0:
			  printf("退出通訊錄");
			  break;
		  default:
			  printf("選擇錯誤,請重新選擇");
			  break;
		}
	} while (input);
	return 0;
}
constact.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
//打印菜單
void menu()
{
	printf("**********************************\n");
	printf("*****   1.增加      2.刪除   *****\n");
	printf("*****   3.查找      4.修改   *****\n");
	printf("*****   5.顯示      6.排序   *****\n");
	printf("******        0.退出         *****\n");
	printf("**********************************\n");
}

//初始化結(jié)構(gòu)體數(shù)組
void InitContact(struct contact* pc)
{
	pc->sz = 0;
	memset((pc->contact), 0, MAX * sizeof(*pc->contact));//用memset函數(shù)將con中的數(shù)組的1000個值全部初始化為0
}
//增加
void AddContact(struct contact* pc)
{
	printf("請輸入名字:");
	scanf("%s", pc->contact[pc->sz].name);//用sz來充當(dāng)數(shù)組下標(biāo),避免在一個位置重復(fù)輸入
	printf("請輸入性別:");
	scanf("%s", pc->contact[pc->sz].sex);
	printf("請輸入年齡:");
	scanf("%d", &pc->contact[pc->sz].age);
	printf("請輸入電話號:");
	scanf("%s", pc->contact[pc->sz].tele);
	printf("請輸入地址:");
	scanf("%s", pc->contact[pc->sz].add);
	printf("輸入完成\n");
	pc->sz++;//每輸入一個sz就計(jì)數(shù)一次
}
//查詢函數(shù)
int FindContact(struct contact* pc, char name[])
{
	for (int i = 0; i< (pc->sz); i++)
	{
		if (0 == strcmp(pc->contact[i].name, name))
		{
			return i;//使用strcmp比較,相等即找到了,傳回下標(biāo)i
		}
	}
	return -1;//沒找到則傳回-1
}
//刪除
void DelContact(struct contact* pc)
{
	char name[20];
	printf("請輸入要刪除的名字:");
	scanf("%s", name);
	int ret=FindContact(pc,name);//利用查找函數(shù),查到傳回下標(biāo),沒有則傳回-1
	if (ret == -1)
	{
		printf("沒有所要刪除的名字\n");
	}
	else
	{
		for (int i = ret; i< (pc->sz)-1; i++)
		{
			pc->contact[i] = pc->contact[i + 1];//刪除的辦法是:
			//將所要刪除的那一組數(shù)據(jù)往后的數(shù)據(jù)整體向前挪移
		}
		pc->sz--;
	}
}
//查找
void SearchConstact(struct contact* pc)
{
	char name[20];
	printf("請輸入要查找的名字:");
	scanf("%s", name);
	int ret = FindContact(pc, name);//利用查找函數(shù),查到傳回下標(biāo),沒有則傳回-1
	if (ret == -1)
	{
		printf("查無此人\n");
	}
	else//打印傳回下標(biāo)所對應(yīng)的數(shù)據(jù)
	{
		printf("%-10s\t%-6s\t%-5s\t%-12s\t%-20s\n", "姓名", "性別", "年齡", "號碼", "地址");
		printf("%-10s\t%-6s\t%-5d\t%-12s\t%-20s\n", pc->contact[ret].name,
			pc->contact[ret].sex,
			pc->contact[ret].age,
			pc->contact[ret].tele,
			pc->contact[ret].add);
	}
}
//修改
void ModifyContact(struct contact* pc)
{
	char name[20];
	printf("請輸入要修改的名字:");
	scanf("%s", name);
	int ret = FindContact(pc, name);//利用查找函數(shù),查到傳回下標(biāo),沒有則傳回-1
	if (ret == -1)
	{
		printf("查無此人\n");
	}
	else//用傳回的下標(biāo)找到要修改的數(shù)據(jù),進(jìn)行修改
	{
		printf("請輸入修改后的名字:");
		scanf("%s", pc->contact[ret].name);
		printf("請輸入修改后的性別:");
		scanf("%s", pc->contact[ret].sex);
		printf("請輸入修改后的年齡:");
		scanf("%d", &pc->contact[ret].age);
		printf("請輸入修改后的電話號:");
		scanf("%s", pc->contact[ret].tele);
		printf("請輸入修改后地址:");
		scanf("%s", pc->contact[ret].add);
		printf("修改完成\n");
	}
}
//顯示
void ShowContact(struct contact* pc)
{
	printf("%-10s\t%-6s\t%-5s\t%-12s\t%-20s\n", "姓名", "性別", "年齡", "號碼", "地址");
	for (int i = 0; i< (pc->sz); i++)
	{
		printf("%-10s\t%-6s\t%-5d\t%-12s\t%-20s\n", pc->contact[i].name,
			pc->contact[i].sex,
			pc->contact[i].age,
			pc->contact[i].tele,
			pc->contact[i].add);
	}
}
//排序
int sort(const void* e1, const void* e2)
{
	return strcmp(((struct date*)e1)->name, ((struct date*)e2)->name);//用strcmp函數(shù)比較相鄰的名字的大小
}
void SortContact(struct contact* pc)
{
	qsort(pc->contact, pc->sz, sizeof(struct date), sort);//用qsort函數(shù)進(jìn)行排序
}
constact.h
#pragma once

#include#include//strcmp,memset所需要引用的頭文件

#define MAX 1000 //自定義數(shù)字取代固定數(shù)字,方便調(diào)整
#define my_name 20 //同上
#define my_sex 6 //同上
#define my_tele 12 //同上
#define my_add 20 //同上
//打印菜單
void menu();
//創(chuàng)建結(jié)構(gòu)體
struct date
{
	char name[my_name];//名字
	char sex[my_sex];//性別
	int age;//年齡
	char tele[my_tele];//電話號碼
	char add[my_add];//地址
};
//創(chuàng)建結(jié)構(gòu)體數(shù)組,用來保存通訊錄信息
struct contact
{
	struct date contact[MAX];//保存struct date類型數(shù)據(jù)的結(jié)構(gòu)體數(shù)組
	int sz;//用來計(jì)算存入了多少個信息
};
//初始化結(jié)構(gòu)體數(shù)組
void InitContact(struct contact* pc);
//增加
void AddContact(struct contact* pc);
//刪除
void DelContact(struct contact* pc);
//查找
void SearchConstact(struct contact* pc);
//修改
void ModifyContact(struct contact* pc);
//顯示
void ShowContact(struct contact* pc);
//排序(按照名字排)
void SortContact(struct contact* pc);


總結(jié)

以上就是本篇文章的全部內(nèi)容,希望鐵子們看了能夠有所收貨,有什么錯誤或者值得改進(jìn)的地方,希望大佬可以指出

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

文章標(biāo)題:c語言小項(xiàng)目——通訊錄-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://muchs.cn/article20/pojjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、手機(jī)網(wǎng)站建設(shè)、域名注冊、標(biāo)簽優(yōu)化用戶體驗(yàn)、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)