今天写了个通讯录,给大家看一下
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <string.h> extern meau();//目录函数就没写出来了,大家可以自己写一下 typedef struct T//定义一个结构体 { char name[10]; char sex[4]; int age; char tetl[13]; char add[20]; }T; int count = 0;//全局变量,用来记录电话个数 void add(T *p)//添加目录 { int falg = 0; do { printf("请输入姓名:\n");//这里需要注意的是结构体指针的运用,根据scanf函数的特性 scanf("%s", (*(p + count)).name);//输入字符串的时候不用取地址,输入整形的时候需要取地址 printf("请输入性别:\n"); scanf("%s", (*(p + count)).sex); printf("请输入年龄:\n"); scanf("%d", &((*(p + count)).age)); printf("请输入电话号码:\n"); scanf("%s", (*(p + count)).tetl); printf("请输入用户地址:\n"); scanf("%s", (*(p + count)).add); count++; printf("输入完成!按0退出,按任意键继续输入!\n"); scanf("%d", &falg); } while (falg); } void dele(T*p) //删除通讯录的函数 { int i = 0; int flag = 0; char goal[10] = {0}; do { printf("请输入要删除的用户名:\n"); scanf("%s", goal); for (i = 0; i < count; i++) { if (!strcmp(goal, (*(p + i)).name)) { while (i <= count)//这里是个讲数组第i个元素以后的元素向前挪动,达到删除i元素的目的得一个/ //算法 { *(p + i) = *(p + i + 1); i++; } count--; flag = 0; } else flag = 1; } if (flag) { printf("输入用户不存在,按任意键重新输入,按0意键退出:\n"); scanf("%d", &flag); } } while (flag); } void find(T*p)//查找函数 { int i = 0; int flag = 0; char goal[10] = { 0 }; do { printf("请输入要查找的用户名:\n"); scanf("%s", goal); for (i = 0; i < count; i++) { if (!strcmp(goal, (*(p + i)).name)) { printf("姓名:%s\n", (*(p + i)).name); printf("性别:%s\n", (*(p + i)).sex); printf("年龄:%d\n", (*(p + i)).age); printf("电话号码:%s\n", (*(p + i)).tetl); printf("家庭地址:%s\n", (*(p + i)).add); flag = 0; } else flag = 1; } if (flag) { printf("输入用户不存在,选择0退出,按任意键继续查找\n"); scanf("%d", &flag); } } while (flag); } void revise(T*p)//修改函数 { int i = 0; int flag = 0; char goal[10] = { 0 }; do { printf("请输入要查找的用户名:\n"); scanf("%s", goal); for (i = 0; i < count; i++) { if (!(strcmp(goal, (*(p + i)).name))) { printf("请选择你要修改的内容:\n1.姓名\n2.性别\n3.年龄\n4.电话号码\n5.家庭住址\n"); scanf("%d", &flag); switch (flag) { case 1: { printf("请输入新的姓名:\n"); scanf("%s", (*(p + i)).name); break; } case 2: { printf("请输入新的性别:\n"); scanf("%s", (*(p + i)).sex); break; } case 3: { printf("请输入新的年龄:\n"); scanf("%d", &((*(p + i)).age)); break; } case 4: { printf("请输入新的电话号码:\n"); scanf("%s", (*(p + i)).tetl); break; } case 5: { printf("请输入新的用户地址:\n"); scanf("%s", (*(p + i)).add); break; } default: { printf("指令有误,请重新输入!\n"); break; } } flag = 0; } else flag = 1; } if (flag) { printf("输入用户不存在,选择任意键继续,按0键退出:\n"); scanf("%d", &flag); } } while (flag); } void display(T*p)//打印所有电话簿的函数 { int i = 0; if (count) { for (i = 0; i < count; i++) { printf("姓名:%s\n", (*(p + i)).name); printf("性别:%s\n", (*(p + i)).sex); printf("年龄:%d\n", (*(p + i)).age); printf("电话号码:%s\n", (*(p + i)).tetl); printf("家庭地址:%s\n", (*(p + i)).add); } } else { printf("电话簿内无内容!\n"); } } void empty(T*p)//清空函数,这里我没有将数组内容清空,而是将count改为0,使电话薄刷新 { count = 0; } void dobble(T*p)//冒泡排序对姓名排序 { int i = 0; int j = 0; for (i = 0; i < count; i++) { for (j = 0; j < count - i - 1; j++) { if (strcmp((*(p + j)).name, (*(p + j+1)).name) > 0) { *(p + count) = *(p + j); *(p + j) = *(p + j + 1); *(p + j + 1) = *(p + count); } } } } int main() { T tel[1000]; T*p = tel; int key = 0; do { meau(); printf("请选择:\n"); scanf("%d", &key); switch (key) { case 1: { add(p); break; } case 2: { dele(p); break; } case 3: { find(p); break; } case 4: { revise(p); break; } case 5: { display(p); break; } case 6: { empty(p); break; } case 7: { dobble(p); break; } case 0: { return 0; } default: { printf("输入错误,请重新输入!\n"); break; } } } while (key); system("pause"); return 0; }
如有不足之处,希望指正
时间: 2024-10-07 19:04:32