C语言的练习—通讯录,该通讯录主要实现最大存储1000个人信息,对通讯录中的个人信息能够进行增、删、查、改等基本功能,通过用c语言编写,能够极大程度上锻炼编程能力。程序主要使用数组的知识,创建1000大小的静态数组,在极端情况下,通讯录中元素较少,对空间的使用率较低,使得空间浪费。该程序能够再次进行改进,可以通过动态开辟数组,减少空间的浪费,也可以通过链表来实现。
——下面程序主要是利用静态数组的方式,该程序有待改进。
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX 1000 #define MAX_NAME 10 #define MAX_SEX 3 #define MAX_TELEPHONE 20 #define MAX_ADR 20 typedef struct people //people信息 { char name[MAX_NAME]; char sex[MAX_SEX]; int age; char tele[MAX_TELEPHONE]; char adr[MAX_ADR]; }people; typedef struct txl //通讯录的存储 { people elem[MAX]; int count; }pdh, *por; void init(por L) //初始化通讯录 { L->count = 0; } //主菜单 void menu() { printf("\t\t************************************\n"); printf("\t\t***** 1.添加联系人信息 *****\n"); printf("\t\t***** 2.删除指定联系人信息 *****\n"); printf("\t\t***** 3.查找指定联系人信息 *****\n"); printf("\t\t***** 4.修改指定联系人信息 *****\n"); printf("\t\t***** 5.显示所有联系人信息 *****\n"); printf("\t\t***** 6.清空所有联系人信息 *****\n"); printf("\t\t***** 7.以名字排序所有联系人 *****\n"); printf("\t\t***** 0.退出通讯录 *****\n"); printf("\t\t************************************\n"); printf("\n\t请选择:"); } //添加联系人 void _add(por L) { if (L->count >= MAX) { printf("电话本已满,无法添加!"); return; } printf(">>请输入所要添加的联系人信息!\n"); printf("\n 姓名:"); fflush(stdin); gets(L->elem[L->count].name); printf("\n 性别:"); fflush(stdin); gets(L->elem[L->count].sex); printf("\n 年龄:"); scanf("%d", &L->elem[L->count].age); printf("\n 电话:"); fflush(stdin); gets(L->elem[L->count].tele); printf("\n 住址:"); fflush(stdin); gets(L->elem[L->count].adr); L->count++; printf("添加完成!\n"); } //查找联系人 static int search(por L, const char * dos) { int i = 0; for (i = 0; i < L->count; i++) { if (strcmp(dos, L->elem[i].name) == 0) { return i; } } return -1; } //删除指定联系人信息 void _delete(por L) { char arr[MAX_NAME]; int i = 0; int ret = 0; printf("请输入所要删除联系人的姓名:\n"); fflush(stdin); gets(arr); ret = search(L, arr); if (ret == -1) { printf("通讯录中没有此联系人!\n"); return; } else { for (i = ret; i < L->count - 1; i++) { L->elem[i] = L->elem[i + 1]; } L->count--; printf("删除成功!\n"); } } //查找指定的联系人信息 void _find(por L) { char ptr[MAX_NAME]; int ret = 0; printf("请输入所要查找的联系人姓名:\n"); fflush(stdin); gets(ptr); ret = search(L, ptr); if (ret == -1) { printf("查找失败,无此联系人!\n"); return; } else { printf("查找成功!\n"); printf(" 姓名 性别 年龄 电话 地址 \n"); printf("%s %s %d %s %s \n", L->elem[ret].name, L->elem[ret].sex, L->elem[ret].age, L->elem[ret].tele, L->elem[ret].adr); } } //修改指定联系人信息 void _alter(por L) { char ptr[MAX_NAME]; int ret = 0; int ter = 0; char a = 0; printf("请输入所要修改的联系人的姓名:\n"); fflush(stdin); gets(ptr); ret = search(L, ptr); if (ret == -1) { printf("通讯录中无此联系人!\n"); return; } else { printf("1.修改姓名\n"); printf("2.修改性别\n"); printf("3.修改年龄\n"); printf("4.修改电话\n"); printf("5.修改住址\n"); printf("\n请选择修改项:"); scanf("%d", &ter); switch (ter) { case 1: printf("修改姓名为:"); scanf("%s", L->elem[ret].name); break; case 2: printf("修改性别为:"); scanf("%s", L->elem[ret].sex); break; case 3: printf("修改年龄为:"); scanf("%d", L->elem[ret].age); break; case 4: printf("修改电话为:"); scanf("%s", L->elem[ret].tele); break; case 5: printf("修改地址为:"); scanf("%s", L->elem[ret].adr); break; default: break; } printf("修改成功!\n"); printf("继续输入?Y/N"); if ((a = getchar()) == ‘Y‘) { _alter(L); } else if ((a = getchar()) == ‘N‘) { return; } } } //显示所有联系人 void _show(por L) { int i = 0; if (L->count == 0) { printf("通讯录中还没有联系人!\n"); return; } else { for (i = 0; i < L->count; i++) { printf("\n 姓名 性别 年龄 电话 地址 \n"); printf(" %s %s %d %s %s\n", L->elem[i].name, L->elem[i].sex, L->elem[i].age, L->elem[i].tele, L->elem[i].adr); } } } //删除所有联系人 void _delete_all(por L) { L->count = 0; printf("清除成功!\n"); } //以姓名对通讯录进行冒泡排序 void _sort(por L) { int i = 0; int j = 0; for (i = 0; i < L->count - 1; i++) { for (j = 0; j < L->count - i - 1; j++) { if (strcmp(L->elem[j].name, L->elem[j + 1].name) > 0) { people temp = L->elem[j]; L->elem[j] = L->elem[j + 1]; L->elem[j + 1] = temp; } } } } int main() { pdh L; int num = 1; init(&L); while (num) { menu(); scanf("%d", &num); switch (num) { case 0: exit(EXIT_SUCCESS); break; case 1: _add(&L); break; case 2: _delete(&L); break; case 3: _find(&L); break; case 4: _alter(&L); break; case 5: _show(&L); break; case 6: _delete_all(&L); break; case 7: _sort(&L); break; default: break; } } system("pause"); return 0; }
时间: 2024-10-10 00:13:18