C 語言通訊錄(結構體)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>

#define NameMax 100
#define TeleMax 12
#define AddressMax 200
#define DEFAULT 10

typedef struct info {
	char name[NameMax];
	char tele[TeleMax];
	char addr[AddressMax];
}info;

typedef struct Contact {
	info* data;                  // 結構體數組,存放通訊錄中人的信息
	int size;					   // 當前有效元素個數
	int capacity;                // 當前空間大小
}Contact,*pContact;

void InitContact(pContact pc) {                // 初始化
	system("cls");
	pc->size = 0;
	pc->data = (info*)malloc(sizeof(info) * DEFAULT);
	pc->capacity = DEFAULT;
}

int CheckCapacity(pContact pc) {             // 檢查空間是否夠用,若不夠用再申請
	if (pc->size == pc->capacity) {
		pc->data = (info*)realloc(pc->data,sizeof(info)*( pc->capacity + 10));
		if (pc->data == NULL) {
			return 0;
		}
		pc->capacity += 10;
	}
	return 1;
}

void AddContact(pContact pc) {             // 添加信息
	system("cls");
	info AddInfo;
	int judge = 1;
	printf("輸入1繼續輸入,輸入0結束輸入\n");
	while (1) {
		if (CheckCapacity(pc) == 0) {
			printf("通訊錄已滿!添加失敗\n");
			return;
		}
		printf("請輸入姓名:\n");
		scanf("%s", AddInfo.name);
		printf("請輸入電話:\n");
		scanf("%s", AddInfo.tele);
		printf("請輸入地址:\n");
		scanf("%s", AddInfo.addr);
		pc->data[pc->size] = AddInfo;
		pc->size++;
		scanf("%d", &judge);
		if (judge == 0) {
			break;
		}
	}
	
	
		
}

int FindContact(pContact pc,char* name) {
	for (int i = 0; i < pc->size; ++i) {
		if (strcmp(pc->data[i].name, name) == 0) {
			return i;
		}
	}
	return -1;
}

void DelContact(pContact pc) {
	system("cls");
	char name[NameMax];
	printf("請輸入要刪除的人的姓名:\n");
	scanf("%s", name);
	int pos = FindContact(pc, name);
	if (pos == -1) {
		printf("此人不存在!刪除失敗!\n");
		return;
	}
	for (int i = pos; i < pc->size-1; ++i) {
		pc->data[i] = pc->data[i + 1];
	}
	pc->size--;
	printf("刪除成功!\n");
}

void SearchContact(pContact pc) {
	system("cls");
	char name[NameMax];
	printf("請輸入要查找的人!\n");
	scanf("%s", name);
	int pos = FindContact(pc, name);
	if (pos == -1) {
		printf("此人不存在,查找失敗!");
		return;
	}
	printf("+=================================================+\n");
	printf("|     姓名:%s                                                                \n", pc->data[pos].name);
	printf("|     電話:%s                                                                \n", pc->data[pos].tele);
	printf("|     地址:%s                                                                \n", pc->data[pos].addr);
	printf("+=================================================+\n");
	system("pause");
}

void ModifyContact(pContact pc) {
	system("cls");
	char name[NameMax];
	printf("請輸入要修改的人的姓名:\n");
	scanf("%s", name);
	int pos = FindContact(pc, name);
	if (pos == -1) {
		printf("此人不存在,修改失敗!\n");
		return;
	}
	printf("請輸入姓名:\n");
	scanf("%s",pc->data[pos].name);
	printf("請輸入電話:\n");
	scanf("%s", pc->data[pos].tele);
	printf("請輸入地址:\n");
	scanf("%s", pc->data[pos].addr);
	printf("修改成功!\n");
	
}

void ShowContact(pContact pc) {
	system("cls");
	for (int i = 0; i < pc->size; ++i) {
		printf("+======================第%d個人========================== +\n",i+1);
		printf("|     姓名:%s                                                                               \n", pc->data[i].name);
		printf("|     電話:%s                                                                               \n", pc->data[i].tele);
		printf("|     地址:%s                                                                               \n", pc->data[i].addr);
		printf("+========================================================= +\n");
	}
	system("pause");
}

void menu() {
	printf("\n\n\n\n\n\n\t\t\t\t\n");
	printf("\t\t\t\t\t========================\n");
	printf("\t\t\t\t\t\t1.增加信息                      \n");
	printf("\t\t\t\t\t\t2.刪除信息                      \n");
	printf("\t\t\t\t\t\t3.修改信息                      \n");
	printf("\t\t\t\t\t\t4.查找信息                      \n");
	printf("\t\t\t\t\t\t5.顯示信息                      \n");
	printf("\t\t\t\t\t\t0.退出程序                      \n");
	printf("\t\t\t\t\t========================\n");
}

void fun() {
	Contact pc;
	InitContact(&pc);
	while (1) {
		system("cls");
		menu();
		int choice;
		scanf("%d",&choice);
		switch (choice) {
			case 1:AddContact(&pc); break;
			case 2:DelContact(&pc); break;
			case 3:ModifyContact(&pc); break;
			case 4:SearchContact(&pc); break;
			case 5:ShowContact(&pc); break;
			case 0:return;
		}
	}
}

int main() {
	system("title  通訊錄");
	fun();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章