#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();
}
C 語言通訊錄(結構體)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.