成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

C語言實(shí)現(xiàn)通訊錄

AaronYuan / 3133人閱讀

摘要:通訊錄程序存放聯(lián)系人信息信息名字年齡性別電話住址增加聯(lián)系人刪除聯(lián)系人查找聯(lián)系人修改聯(lián)系人排序源文件代碼如下創(chuàng)建一個(gè)枚舉類型,分別對(duì)應(yīng)菜單選項(xiàng)創(chuàng)建一個(gè)通訊錄初始化通訊錄最多可以放個(gè)聯(lián)系

通訊錄程序

1.存放聯(lián)系人信息
2.信息:名字+年齡+性別+電話+住址
3.增加聯(lián)系人
4.刪除聯(lián)系人
5.查找聯(lián)系人
6.修改聯(lián)系人
7.排序

test.c源文件代碼如下:

#define _CRT_SECURE_NO_WARNINGS 1#include "contact.h"void menu(){	printf("#####################################/n");	printf("#####  1. add       2. del      #####/n");	printf("#####  3. search    4. modify   #####/n");	printf("#####  5. show      6. sort     #####/n");	printf("#####  0. exit                  #####/n");	printf("#####################################/n");}//創(chuàng)建一個(gè)枚舉類型,分別對(duì)應(yīng)菜單選項(xiàng)enum Option{	EXIT,	ADD,	DEL,	SEARCH,	MODIFY,	SHOW,	SORT,};int main(){	int input = 0;	//創(chuàng)建一個(gè)通訊錄	struct Contact con;	//初始化通訊錄	InitContact(&con);	//最多可以放3個(gè)聯(lián)系人信息	//空間不夠再增容	do	{		menu();//進(jìn)入循環(huán),先打印菜單		printf("請(qǐng)選擇:>");		scanf("%d", &input);//用戶選擇操作		switch (input)		{		case ADD:			AddContact(&con);			break;		case DEL:			DelContact(&con);			break;		case SEARCH:			SearchContact(&con);			break;		case MODIFY:			ModifyContact(&con);			break;		case SHOW:			ShowContact(&con);			break;		case SORT:			SortContact(&con);			break;		case EXIT:			SaveContact(&con);			//銷毀通訊錄			DestroyContact(&con);			printf("退出/n");			break;		default:			printf("選擇錯(cuò)誤/n");			break;		}	} while (input);	return 0;}

contact.c源文件代碼如下:

#define _CRT_SECURE_NO_WARNINGS 1#include "contact.h"//檢測(cè)通訊錄容量void CheckCapacity(struct Contact* pc){	//斷言	assert(pc);	if (pc->sz == pc->capacity)//如果有效聯(lián)系人等于最大容納量	{		//增加容量		struct PeoInfo* ptr = realloc(pc->data, (pc->capacity + 2) * sizeof(struct PeoInfo));		if (ptr != NULL)//如果不為空,表示增容成功		{			pc->data = ptr;			pc->capacity += 2;			printf("增容成功/n");		}		else		{			perror("AddContact::realloc");			return;		}	}}//加載有效聯(lián)系人信息void LoadContact(struct Contact* pc){	assert(pc);	struct PeoInfo tmp = { 0 };//臨時(shí)空間	FILE* pfRead = fopen("contact.txt", "rb");//打開文件,讀取數(shù)據(jù)	if (NULL == pfRead)	{		perror("open file for reading");		return;	}	//加載數(shù)據(jù)	//每次讀取一個(gè)聯(lián)系人信息,直到frea返回值小于1,表示讀取完畢,循環(huán)結(jié)束	while (fread(&tmp, sizeof(struct PeoInfo), 1, pfRead))	{		CheckCapacity(pc);		pc->data[pc->sz] = tmp;		pc->sz++;	}	//關(guān)閉文件	fclose(pfRead);	pfRead = NULL;//置空,防止變成野指針}//初始化通訊錄void InitContact(struct Contact* pc){	assert(pc);	pc->sz = 0;	pc->capacity = DEFAULT;	pc->data = (struct PeoInfo*)malloc(DEFAULT * sizeof(struct PeoInfo));//動(dòng)態(tài)申請(qǐng)空間	if (pc->data == NULL)	{		perror("InitContact::malloc");		return;	}		LoadContact(pc);//加載通訊錄的信息}//增加聯(lián)系人void AddContact(struct Contact* pc){	assert(pc);	CheckCapacity(pc);//檢查容量是否為滿,是則進(jìn)行增容	//輸入增加指定聯(lián)系人的信息	printf("請(qǐng)輸入名字:>");	scanf("%s", pc->data[pc->sz].name);	printf("請(qǐng)輸入年齡:>");	scanf("%d", &(pc->data[pc->sz].age));	printf("請(qǐng)輸入性別:>");	scanf("%s", pc->data[pc->sz].sex);	printf("請(qǐng)輸入電話:>");	scanf("%s", pc->data[pc->sz].tele);	printf("請(qǐng)輸入地址:>");	scanf("%s", pc->data[pc->sz].addr);	printf("添加成功/n");	pc->sz++;//有效聯(lián)系人加1}//銷毀通訊錄void DestroyContact(struct Contact* pc){	assert(pc);	free(pc->data);//釋放申請(qǐng)的動(dòng)態(tài)內(nèi)存空間	pc->data = NULL;//置為空指針	pc->capacity = 0;//容量置0	pc->sz = 0;//有效聯(lián)系人置0}//顯示通訊錄信息void ShowContact(const struct Contact* pc){	assert(pc);	int i = 0;	printf("%20s/t%5s/t%10s/t%12s/t%50s/n/n", "name", "age", "sex", "tele", "addr");	for (i = 0; i < pc->sz; i++)	{		//打印每一個(gè)數(shù)據(jù)		printf("%20s/t%5d/t%10s/t%12s/t%50s/n", 			pc->data[i].name, 			pc->data[i].age, 			pc->data[i].sex, 			pc->data[i].tele, 			pc->data[i].addr);	}}//查找指定聯(lián)系人int FindContactByName(const struct Contact* pc, const char* name){	assert(pc && name);	int i = 0;	for (i = 0; i < pc->sz; i++)	{		if (strcmp(pc->data[i].name, name) == 0)		{			return i;		}	}	//找不到	return -1;}//刪除指定聯(lián)系人void DelContact(struct Contact* pc){	assert(pc);	if (pc->sz == 0)	{		printf("通訊錄為空,無法刪除/n");		return;	}	char name[NAME_MAX] = { 0 };	printf("請(qǐng)輸入要?jiǎng)h除聯(lián)系人的名字:>");	scanf("%s", name);	//查找到刪除的人	int pos = FindContactByName(pc, name);	if (pos == -1)		printf("指定聯(lián)系人不存在/n");	else	{		//刪除		int i = 0;		for (i = pos; i < pc->sz-1; i++)		{			pc->data[i] = pc->data[i + 1];		}		pc->sz--;		printf("成功刪除/n");	}	}//查找指定聯(lián)系人void SearchContact(const struct Contact* pc){	assert(pc);	char name[NAME_MAX] = { 0 };	if (pc->sz == 0)	{		printf("通訊錄為空,無法查找/n");		return;	}	printf("請(qǐng)輸入要查找的聯(lián)系人名字:>");	scanf("%s", name);	int pos = FindContactByName(pc, name);	if (-1 == pos)		printf("查無此人/n");	else	{		printf("%15s/t%5s/t%8s/t%15s/t%30s/n/n", "name", "age", "sex", "tele", "addr");		printf("%15s/t%5d/t%8s/t%15s/t%30s/n",			pc->data[pos].name,			pc->data[pos].age,			pc->data[pos].sex,			pc->data[pos].tele,			pc->data[pos].addr);	}}//修改指定聯(lián)系人void ModifyContact(struct Contact* pc){	assert(pc);	char name[NAME_MAX] = { 0 };	if (pc->sz == 0)	{		printf("通訊錄為空,無法修改/n");		return;	}	printf("請(qǐng)輸入要修改的聯(lián)系人名字:>");	scanf("%s", name);	int pos = FindContactByName(pc, name);	if (-1 == pos)		printf("要修改的人不存在/n");	else	{		printf("請(qǐng)輸入新的名字:>");		scanf("%s", pc->data[pos].name);		printf("請(qǐng)輸入新的年齡:>");		scanf("%d", &(pc->data[pos].age));		printf("請(qǐng)輸入新的性別:>");		scanf("%s", pc->data[pos].sex);		printf("請(qǐng)輸入新的電話:>");		scanf("%s", pc->data[pos].tele);		printf("請(qǐng)輸入新的地址:>");		scanf("%s", pc->data[pos].addr);	}}//按照名字排序->升序int cmp_by_name(const void* e1, const void* e2){	return strcmp((((struct PeoInfo*)e1)->name), (((struct PeoInfo*)e2)->name));}//按照年齡排序->升序int cmp_by_age(const void* e1, const void* e2){	return ((struct PeoInfo*)e1)->age - ((struct PeoInfo*)e2)->age;}//排序通訊錄void SortContact(struct Contact* pc){	assert(pc);	int input = 0;	if (pc->sz == 0)	{		printf("通訊錄為空,無法排序/n");		return;	}	printf("按名字排序請(qǐng)輸入1,年齡排序請(qǐng)輸入2:>");	scanf("%d", &input);	if (1 == input)	{		//名字排序		qsort(pc->data, pc->sz, sizeof(struct PeoInfo), cmp_by_name);	}	else	{		//年齡排序		qsort(pc->data, pc->sz, sizeof(struct PeoInfo), cmp_by_age);	}}//保存通訊錄void SaveContact(struct Contact* pc){	assert(pc);	int i = 0;	FILE* pfWrite = fopen("contact.txt", "wb");把當(dāng)前程序的有效聯(lián)系人寫入文件	if (NULL == pfWrite)//判斷是否為空指針	{		perror("open file for writting");		return;	}	//寫數(shù)據(jù)	for (i = 0; i < pc->sz; i++)	{		fwrite(pc->data+i, sizeof(struct PeoInfo), 1, pfWrite);//進(jìn)行寫入	}	fclose(pfWrite);//關(guān)閉文件	pfWrite = NULL;//置為空指針}

contact.h頭文件代碼如下:

#pragma once#include #include #include #include #define DEFAULT 3#define NAME_MAX 20#define SEX_MAX 10#define TELE_MAX 12#define ADDR_MAX 50#define MAX 1000//描述聯(lián)系人的信息struct PeoInfo{	char name[NAME_MAX];	int age;	char sex[SEX_MAX];	char tele[TELE_MAX];	char addr[ADDR_MAX];};//通訊錄-動(dòng)態(tài)增長(zhǎng)版本struct Contact{	struct PeoInfo* data;	int sz;//通訊錄中當(dāng)前有效元素個(gè)數(shù)	int capacity;//通訊錄的當(dāng)前最大容量};//增容void CheckCapacity(struct Contact* pc);//初始化通訊錄void InitContact(struct Contact* pc);//銷毀通訊錄void DestroyContact(struct Contact* pc);//增加聯(lián)系人void AddContact(struct Contact* pc);//顯示通訊錄void ShowContact(const struct Contact* pc);//刪除指定聯(lián)系人void DelContact(struct Contact           
               
                                           
                       
                 

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/121283.html

相關(guān)文章

  • C語言進(jìn)階】C語言實(shí)現(xiàn)訊錄(簡(jiǎn)易版)

    摘要:前言我們需要用語言模擬一個(gè)通訊錄可以用來存儲(chǔ)個(gè)人的信息每個(gè)人的信息包括姓名電話性別住址年齡功能包括新增聯(lián)系人查找聯(lián)系人刪除聯(lián)系人修改聯(lián)系人查看所有聯(lián)系人以名字排序所有聯(lián)系人注此版本不包含其他內(nèi)容,后續(xù)會(huì)出更加全面的升級(jí)版本通訊錄語言簡(jiǎn)易版 前言: 我們需要用C語言模擬一個(gè)通訊錄可以用來存...

    wums 評(píng)論0 收藏0
  • C語言進(jìn)階】C語言實(shí)現(xiàn)訊錄 升級(jí)版 { 含動(dòng)態(tài)擴(kuò)容/銷毀/信息保存功能 }(強(qiáng)烈建議收藏食用)

    摘要:之前的通訊錄在程序退出后內(nèi)部的數(shù)據(jù)就會(huì)消失,再次打開程序后只能重新輸入數(shù)據(jù),為此我們?cè)黾恿艘粋€(gè)保存功能來保存信息。 前言: 由于之前實(shí)現(xiàn)的通訊錄在存儲(chǔ)方面只能支持靜態(tài)的1000人的存儲(chǔ)量,但是如果聯(lián)系人較少,則會(huì)造成較大的內(nèi)存浪費(fèi)。而當(dāng)聯(lián)系人一旦超過1000時(shí),就不能再繼續(xù)存儲(chǔ)信息了。因...

    gxyz 評(píng)論0 收藏0
  • 訊錄小程序(C語言

    摘要:通訊錄主要由個(gè)功能增加聯(lián)系人刪除聯(lián)系人修改聯(lián)系人查找聯(lián)系人按名稱子排序。輸入,退出通訊錄。代碼實(shí)現(xiàn)打印菜單創(chuàng)建一個(gè)通訊錄初始化通訊錄請(qǐng)選擇退出通訊錄。 通訊錄小程...

    zorpan 評(píng)論0 收藏0
  • 動(dòng)態(tài)文件版訊錄C語言中的文件的讀寫操作

    摘要:那么我們首先來改造儲(chǔ)存空間也就是通訊錄結(jié)構(gòu)體靜態(tài)版本人信息存放在數(shù)組中統(tǒng)計(jì)存放的人數(shù)動(dòng)態(tài)版本統(tǒng)計(jì)存放的人數(shù)有效容量我們將原本的結(jié)構(gòu)體數(shù)組改為一個(gè)結(jié)構(gòu)體指針,以此來維護(hù)用以儲(chǔ)存?zhèn)€人信息的空間。 上一期我們編寫了一個(gè)C語言版本的簡(jiǎn)易通訊錄,但是我們的之前的通訊錄是沒有記憶功能的,也就是說,一旦關(guān)...

    h9911 評(píng)論0 收藏0
  • ??C語言訊錄管理系統(tǒng)(簡(jiǎn)易版)??

    ??C語言通訊錄管理系統(tǒng)(簡(jiǎn)易版)?? ?一、通訊錄?二、菜單實(shí)現(xiàn)和用戶交互?三、主函數(shù)????1.enum選項(xiàng)????2.switch判斷 ?四、定義聯(lián)系人和通訊錄????1.定義聯(lián)系人結(jié)構(gòu)體????2.定義通訊錄結(jié)構(gòu)體????3.定義結(jié)構(gòu)體變量 ?五、通訊錄初始化?六、新增聯(lián)系人?七、查找聯(lián)系人?八、刪除聯(lián)系人?九、修改聯(lián)系人?十、查看所有聯(lián)系人?十一、清空所有聯(lián)系人?十二、以名字排序所有...

    justCoding 評(píng)論0 收藏0
  • C語言----實(shí)現(xiàn)動(dòng)態(tài)訊錄

    摘要:文章目錄前言前言一建立文件二編寫函數(shù)三調(diào)試運(yùn)行四成果展示五代碼匯總總結(jié)前言通訊錄是我們?nèi)粘J謾C(jī)中常見的功能之一,綜合語言中結(jié)構(gòu)體,循環(huán),條件語句,動(dòng)態(tài)內(nèi)存分配等等知識(shí)點(diǎn),我們對(duì)手機(jī)通訊錄進(jìn)行一個(gè)簡(jiǎn)單的實(shí)現(xiàn),下面我們開始講解準(zhǔn)備工作利用語 文章目錄 前言一、建立文件二、編寫函數(shù)三、調(diào)試運(yùn)...

    whlong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<