2024.1.22

        今天主要是写了一个项目——通讯录,然后做了一下学校的C语言的期末复习题,已经开始准备C的期末了。通讯录目前是我写过最长的代码,但其实实现不是最复杂的,是因为我为了让用户友好,所以说加了一些很多重复的代码(sleep和cls等),所以说很多冗杂的代码,但能够让用户的体验感很好,当看到这么长的代码跑起来,心里真的很爽!

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//int main()
//{
//	int arr[][5] = { 1,2,3,4,5,6,7,8,9,10 };
//	int i, j;
//	for (i = 0; i < 2; i++)
//	{
//		for (j = 0; j < 5; j++)
//		{
//			printf("%d ", arr[i][j]);
//		}
//		printf("\n");
//	}
//	return 0;
//}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<string.h>
#include<errno.h>#define MAX 100
#define NAME_MAX 20
#define SEX_MAX 10
#define ADD_MAX 50
#define TELE_MAX 13typedef struct peo
{char name[NAME_MAX];char sex[SEX_MAX];int age;char add[ADD_MAX];char tele[TELE_MAX];
}peo;typedef struct con
{peo data[MAX];int count;
}con;void menu(void)
{printf("\t\t\t\t\t\t  欢迎使用通讯录\n");printf("\t\t\t\t\t\t   1.增加联系人\n");printf("\t\t\t\t\t\t   2.删除联系人\n");printf("\t\t\t\t\t  	   3.查看联系人\n");printf("\t\t\t\t\t\t   4.排序联系人\n");printf("\t\t\t\t\t\t   5.查找联系人\n");printf("\t\t\t\t\t\t   6.从本地读取\n");printf("\t\t\t\t\t\t   7.保存到本地\n");printf("\n");printf("\t\t\t\t\t\t   0.退出通讯录\n");printf("\n");
}void int_contact(con* contact)
{contact->count = 0;memset(contact->data, 0, sizeof(contact->data));
}void add(con* contact)
{if (contact->count == MAX){printf("通讯录已满,请扩容\n");return;}else{printf("请输入名字\n");scanf("%s", contact->data[contact->count].name);printf("请输入性别\n");scanf("%s", contact->data[contact->count].sex);printf("请输入年龄\n");scanf("%d", &(contact->data[contact->count].age));printf("请输入地址\n");scanf("%s", contact->data[contact->count].add);printf("请输入电话\n");scanf("%s", contact->data[contact->count].tele);Sleep(300);printf("输入成功\n");Sleep(300);printf("按任意键继续-->\n");getch();system("cls");contact->count++;}
}void print_contact(con* contact)
{Sleep(300);printf("\t\t\t%-5s\t%-3s\t%-3s\t%-25s\t%-11s\n", "姓名", "性别", "年龄", "地址", "电话");Sleep(300);int i = 0;for (i = 0; i < contact->count; i++){printf("\t\t\t%-5s\t%-3s\t%-3d\t%-25s\t%-11s\n", contact->data[i].name,contact->data[i].sex,contact->data[i].age,contact->data[i].add,contact->data[i].tele);Sleep(100);}Sleep(300);printf("输出完毕,按任意键继续-->\n");getch();system("cls");
}//进行查找联系人的方式选择
int choice(void)
{system("cls");Sleep(500);int choice;
flag:printf("\t\t\t\t\t\t 请选择你想要查找的方式?\n");Sleep(200);printf("\t\t\t\t\t\t     1.按照姓名查找\n");Sleep(200);printf("\t\t\t\t\t\t     2.按照电话查找\n");Sleep(200);printf("请选择--->\n");scanf("%d", &choice);switch (choice){case 1:{return 1;}case 2:{return 2;}default:{system("cls");printf("选择错误,请重新选择!\n");Sleep(300);printf("按任意键继续-->\n");getch();system("cls");goto flag;break;}}
}int find_name(con* contact)
{if (contact->count == 0){system("cls");Sleep(300);printf("联系人为空,请先输入!\n");return -1;}system("cls");Sleep(300);printf("请输入要查找的名字-->\n");char name[20] = { 0 };scanf("%s", name);int i;for (i = 0; i < contact->count; i++){if (strcmp(name, contact->data[i].name) == 0){return i + 1;}}return 0;
}int find_tele(con* contact)
{if (contact->count == 0){system("cls");Sleep(300);printf("联系人为空,请先输入!\n");return -1;}system("cls");Sleep(300);printf("请输入要查找的电话号码-->\n");char telenum[20] = { 0 };scanf("%s", telenum);int i;for (i = 0; i < contact->count; i++){if (strcmp(telenum, contact->data[i].tele) == 0){return i + 1;}}return 0;
}int dele_choice(void)
{system("cls");Sleep(500);int choice;
flag:printf("\t\t\t\t\t\t 请选择你想要删除的方式?\n");Sleep(200);printf("\t\t\t\t\t\t     1.按照姓名删除\n");Sleep(200);printf("\t\t\t\t\t\t     2.按照电话删除\n");Sleep(200);printf("请选择--->\n");scanf("%d", &choice);switch (choice){case 1:{return 1;}case 2:{return 2;}default:{system("cls");printf("选择错误,请重新选择!\n");Sleep(300);printf("按任意键继续-->\n");getch();system("cls");goto flag;break;}}
}void dele_name(con* contact)
{if (contact->count == 0){system("cls");Sleep(300);printf("联系人为空,请先输入!\n");}else{int place = find_name(contact);if (place > 0){int i = place;for (i = place - 1; i < contact->count - 1; i++){contact->data[i] = contact->data[i + 1];}contact->count--;Sleep(300);}}
}void dele_tele(con* contact)
{if (contact->count == 0){system("cls");Sleep(300);printf("联系人为空,请先输入!\n");}else{int place = find_tele(contact);if (place > 0){int i = place;for (i = place - 1; i < contact->count - 1; i++){contact->data[i] = contact->data[i + 1];}contact->count--;Sleep(300);}}
}void file_save(con* contact)
{if (contact->count == 0){system("cls");Sleep(300);printf("联系人为空,请先输入!\n");}else{FILE* pf = fopen("通讯录.txt", "w");if (pf == NULL){printf("FILE:%s", strerror(errno));}else{int i = 0;fprintf(pf, "\t\t\t%-5s\t%-3s\t%-3s\t%-25s\t%-11s\n", "姓名", "性别", "年龄", "地址", "电话");for (i = 0; i < contact->count; i++){fprintf(pf, "\t\t\t%-5s\t%-3s\t%-3d\t%-25s\t%-11s\n", contact->data[i].name,contact->data[i].sex,contact->data[i].age,contact->data[i].add,contact->data[i].tele);}}fclose(pf);pf = NULL;}
}int main()
{int input = 0;con contact;int_contact(&contact);do{menu();Sleep(500);printf("请选择-->\n");scanf("%d", &input);switch (input){case 1:{system("cls");Sleep(500);add(&contact);break;}case 2:{int ret = dele_choice();if (ret == 1){dele_name(&contact);printf("删除成功,现在有的联系人:\n");print_contact(&contact);}else{dele_tele(&contact);printf("删除成功,现在有的联系人:\n");print_contact(&contact);}break;}case 3:{system("cls");print_contact(&contact);break;}case 4:{system("cls");printf("开发中\n");printf("按任意键继续-->\n");getch();system("cls");break;}case 5:{int ret = choice();if (ret == 1){int temp = find_name(&contact);if (temp == 0){printf("找不到,请检查是否输入错误?\n");Sleep(300);printf("按任意键继续-->\n");getch();system("cls");}else if (temp > 0){Sleep(300);printf("\n找到了,是第%d个联系人\n\n", temp);Sleep(300);printf("\t\t\t%-5s\t%-3s\t%-3s\t%-25s\t%-11s\n", "姓名", "性别", "年龄", "地址", "电话");printf("\t\t\t%-5s\t%-3s\t%-3d\t%-25s\t%-11s\n", contact.data[temp - 1].name,contact.data[temp - 1].sex,contact.data[temp - 1].age,contact.data[temp - 1].add,contact.data[temp - 1].tele);printf("按任意键继续-->\n");getch();system("cls");}else{Sleep(300);printf("按任意键继续-->\n");getch();system("cls");}}else{int mid = find_tele(&contact);if (mid == 0){printf("找不到,请检查是否输入错误?\n");Sleep(300);printf("按任意键继续-->\n");getch();system("cls");}else if (mid > 0){Sleep(300);printf("找到了,是第%d个联系人\n\n", mid);Sleep(300);printf("\t\t\t%-5s\t%-3s\t%-3s\t%-25s\t%-11s\n", "姓名", "性别", "年龄", "地址", "电话");printf("\t\t\t%-5s\t%-3s\t%-3d\t%-25s\t%-11s\n", contact.data[mid - 1].name,contact.data[mid - 1].sex,contact.data[mid - 1].age,contact.data[mid - 1].add,contact.data[mid - 1].tele);printf("按任意键继续-->\n");getch();system("cls");}else{Sleep(300);printf("按任意键继续-->\n");getch();system("cls");}}break;}case 6:{system("cls");printf("开发中\n");printf("按任意键继续-->\n");getch();system("cls");break;}case 7:{system("cls");printf("正在保存中\n");file_save(&contact);printf(".");Sleep(500);printf(".");Sleep(500);printf(".");Sleep(500);printf(".");Sleep(500);printf(".");Sleep(500);printf(".\n");Sleep(500);printf("save successfully\n");Sleep(500);printf("按任意键继续-->\n");getch();system("cls");break;}case 0:{system("cls");printf("程序退出\n");Sleep(500);printf("按任意键继续-->\n");getch();break;}default:{system("cls");printf("选择错误,请重新选择-->\n");Sleep(500);printf("按任意键继续-->\n");getch();Sleep(500);system("cls");}}} while (input);return 0;
}

        写代码的成就感,也许就像这样,明天继续努力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/616857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 8.0中新增的功能(九)

FROM_UNIXTIME()、UNIX_TIMESTAMP()和CONVERT_TZ()的64位支持 根据MySQL 8.0.28版本的更新&#xff0c;FROM_UNIXTIME()、UNIX_TIMESTAMP() 和 CONVERT_TZ() 函数现在在支持64位的平台上处理64位值。这包括64位版本的Linux、MacOS和Windows。在兼容的平台上&#xff0c;UNIX_T…

Java并发Condition 详解

1.引言 在Java并发编程中&#xff0c;线程间的协作是一个核心话题。为了实现线程间的协作&#xff0c;Java提供了多种机制&#xff0c;其中等待/通知机制是最常见的一种。在早期版本中&#xff0c;我们通过Object类提供的wait、notify和notifyAll方法来实现这种机制。然而&…

前端规范扩展

前端编程规范是基于原有vue2基础上那套《编码风格及标准》上&#xff0c;应用于vue3、typescript、vite2基础上延伸出来的扩展补充&#xff0c;持续完善 一、编码规范 ESLint 代码检测工具 Pretter 代码格式化工具配合双校验代码 Git 规范 - 编码工具 vscode 同步参考文档中…

kylin集群使用nginx反向代理

前文已经提到&#xff0c;我安装了kylin集群。 kylin3集群问题和思考&#xff08;单机转集群&#xff09;-CSDN博客文章浏览阅读151次&#xff0c;点赞3次&#xff0c;收藏6次。由于是同一个集群的&#xff0c;元数据没有变化&#xff0c;所以&#xff0c;直接将原本的kylin使用…

基础篇_开发命令行程序(输入输出,类型、变量、运算符,条件语句,循环语句,方法,package与jar)

文章目录 一. 输入输出1. System.out2. System.in3. Scanner4. 变量名5. 关键字 二. 类型、变量、运算符1. 字符与字符串字符值与字符串值转义字符文本块 2. 类型何为类型数字类型字符类型 3. 变量与运算符变量运算符 4. 练习 - 房贷计算器Math.pow()数字格式化查阅 Javadoc 三…

什么是云服务器CVM?

腾讯云服务器CVM提供安全可靠的弹性计算服务&#xff0c;腾讯云明星级云服务器&#xff0c;弹性计算实时扩展或缩减计算资源&#xff0c;支持包年包月、按量计费和竞价实例计费模式&#xff0c;CVM提供多种CPU、内存、硬盘和带宽可以灵活调整的实例规格&#xff0c;提供9个9的数…

MySQL 图书管理系统

1.需求分析 1.1项目需求分析简介 1.1.1信息需求分析 (1) 图书信息&#xff1a;包括书籍编号&#xff0c;书籍名称&#xff0c;出版社&#xff0c;作者&#xff0c;库存量&#xff0c;出版日期&#xff0c;价格&#xff0c;库存&#xff0c;剩余量&#xff0c;类别等&#xf…

rhel 9 mysql 无法远程访问(linux)

1.防火墙开启3306端口 firewall-cmd --add-port3306/tcp2.防火墙生效 firewall-cmd --runtime-to-permanent3.其他命令(停止和启动防火墙) systemctl stop firewalld systemctl start firewalld4.检查防火墙状态 firewall-cmd --check-config5.查看防火墙开启端口 firewal…

Android Retrofit使用详情

一、 Retrofit是什么 Retrofit是Android用来接口请求的网络框架&#xff0c;内部是基于OkHttp实现的&#xff0c;retrofit负责接口请求的封装&#xff0c;retrofit可以直接将接口数据解析为Bean类、List集合等&#xff0c;直接简化了中间繁琐的数据解析过程 二、 Retrofit的简单…

必须掌握的100+个Linux命令大全【持续更新中】

别有一番风趣的alias … note:: 寒蝉凄切&#xff0c;对长亭晚&#xff0c;骤雨初歇。 柳永《雨霖铃》 Linux alias命令用于设置指令的别名&#xff0c;可以将比较长的命令进行简化。 默认情况下会输出当前的设置&#xff1a; $ alias lls -lah lals -lAh llls -lh lsls --…

C++学习笔记——多态与静态联编和动态联编

目录 一、多态 二、静态联编&#xff08;Static Binding&#xff09;和动态联编&#xff08;Dynamic Binding&#xff09; 2.1静态联编 2.2动态联编 一、多态 是C中面向对象编程的一个核心概念&#xff0c;它允许派生类对象替代其基类对象&#xff0c;从而实现代码重用和扩…

ARM CCA机密计算架构软件栈(下)

三、Realm管理 本节描述软件组件中引入的软件组件如何在Realm的创建和执行期间进行交互。 3.1 资源管理 领域资源管理的基本原则是主机保持控制。这意味着主机决定使用哪个物理内存来支持给定的领域中间物理地址(IPA),或者存储RMM使用的Realm元数据的给定片段。 主机始终…

Pandas实战100例 | 案例 7: 数据分组与聚合 - 使用 `groupby` 进行分析

案例 7: 数据分组与聚合 - 使用 groupby 进行分析 知识点讲解 数据分组和聚合是数据分析中的强大工具&#xff0c;它们使我们能够按照某个或某些特定的列将数据分组&#xff0c;并对每个分组应用聚合函数&#xff0c;以便进行分析。 示例代码 基本分组与聚合 # 按照某列分…

基于昇腾910B搭建多节点K8s集群

自从 2013 年 Docker 诞生以来&#xff0c;容器一跃成为 IT 界最热门的话题。而 Kubernetes 趁着容器的东风&#xff0c;击败众多竞争对手&#xff0c;成为了“容器编排”领域的King。可以说&#xff0c;现在 Kubernetes 已经没有了实际意义上的竞争对手&#xff0c;它的地位就…

代码随想录算法训练营第17天 | 110.平衡二叉树 + 257. 二叉树的所有路径 + 404.左叶子之和

今日内容 110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和 110.平衡二叉树 - Easy 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1…

springboot注解@PropertySource作用

简介 PropertySource 是 Spring 框架中的一个注解&#xff0c;用于指定一个或多个属性文件&#xff08;通常是.properties文件&#xff09;这些文件包含了应用程序需要的配置信息。当你在 Spring 的配置类中使用此注解时&#xff0c;Spring 容器会加载这些属性文件&#xff0c…

01.坦克大战项目-Java绘图坐标体系

01.坦克大战项目- Java绘图 01. Java绘图坐标体系 1. 坐标体系介绍 ​ 下图说明了java坐标系。坐标原点位于左上角&#xff0c;以像素为单位。在Java坐标系中&#xff0c;第一个是x坐标系&#xff0c;表示当前位置为水平方向&#xff0c;距离坐标原点x个像素&#xff1b;第二…

揭露欧拉骗局4.“Σ1/n²=π²/6”里的猫腻

自然数平方倒数求和Σ1/n是一个并不复杂的问题&#xff0c;但它困扰了欧洲大陆整整90年&#xff0c;在欧系数学里它被称为“巴塞尔级数”。 解决巴塞尔级数让欧拉一战成名&#xff0c;然而欧拉采用的方法对数学这门学问是严重的侮辱。数学是工具学科&#xff0c;数学的宗旨是化…

Asp .Net Core 系列: 集成 Consul 实现 服务注册与健康检查

文章目录 什么是 Consul?安装和运行 ConsulAsp .Net Core 如何集成 Consul 实现服务注册和健康检查Consul.AspNetCore 中的 AddConsul 和 AddConsulServiceRegistration 方法 究竟做了什么&#xff1f;AddConsul 方法AddConsulServiceRegistration 方法 配置 Consul 检查服务封…

【椒盐玉兔】GPTs Store 商店的TOP100 自定义GPT使用报告

详细的图文报告有100张图&#xff0c;因为太长就放网盘链接 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;ub2n 解压密码&#xff1a;heehel 更多作品&#xff1a;长期更新国内外&#xff0c;中英文AI人工智能作品 整理获取 通过算法&#xff0c;筛选出了目前访…