c语言通讯录打电话,C语言实现简易通讯录 | 术与道的分享
#include
#include
#include
#include
#include
#pragma warning (disable:4996)
enum Contact //枚举变量
{
Quit, //默认为0,下面依次递增+1
Add, //1
Delect, //2
Select, //3
Alter, //4
Show, //5
Empty, //6
Sort //7
};
//打印菜单
void menu()
{
printf("#########################################################\n");
printf("############## C语言实现简易通讯录 #############\n");
printf("############## 1.添加联系人 #############\n");
printf("############## 2.删除联系人 #############\n");
printf("############## 3.查找联系人 #############\n");
printf("############## 4.修改联系人 #############\n");
printf("############## 5.显示所有联系人 #############\n");
printf("############## 6.清空联系人 #############\n");
printf("############## 7.按联系人名字排序 #############\n");
printf("############## 0.退出 #############");
}
//定义一个结构体
typedef struct Peo
{
char name[10];
char sex[5];
char Old[10];
char Phone_num[20];
char adrress[30];
}people;
people Peo[1000]; //定义一个可以存储1000用户的结构图数组
//添加联系人
int Add_Peo(people Peo[], int n)
{
int i = 0;
char select = 0;
char Rem[20];
while (select != 'N') //判断是否继续添加联系人
{
printf("姓名:");
scanf("%s", &Peo[n + i].name);
printf("性别:");
scanf("%s", &Peo[n + i].sex);
printf("年龄:");
scanf("%s", &Peo[n + i].Old);
printf("电话:");
scanf("%s", &Peo[n + i].Phone_num);
printf("地址:");
scanf("%s", &Peo[n + i].adrress);
gets(Rem); //读取字符串
printf("\n是否继续添加?(Y/N):");
scanf("%c", &select);
i++;
}
return (n + i);
}
//删除联系人
int Del_Peo(people Peo[], int n)
{
int i = 0;
int j = 0;
char Name[15];
printf("请输入你要删除联系人的姓名:");
scanf("%s", Name);
while ((strcmp(Peo[i].name, Name) != 0) && (i < n))
{ //判断输入的与结构体数组中存在的是否匹配,此处为不匹配,且未到达联系人上限
i++;
}
if (i == n) //结构体的出口,说明到达联系人上限
{
printf("没有此联系人!\n\n");
return n;
}
for (j = i; j < n - 1; j++) //找到匹配的联系人,删除后,将删除处之后的数据前移一位
{
strcpy(Peo[j].name, Peo[j + 1].name);
strcpy(Peo[j].sex, Peo[j + 1].sex);
strcpy(Peo[j].Old, Peo[j + 1].Old);
strcpy(Peo[j].Phone_num, Peo[j + 1].Phone_num);
strcpy(Peo[j].adrress, Peo[j + 1].adrress);
}
printf("删除成功!\n");
return (n - 1);
}
//查找联系人
void Sel_Peo(people Peo[], int n)
{
char Name[15];
int i = 0;
printf("请输入要查看联系人的姓名:");
scanf("%s", Name);
while ((strcmp(Peo[i].name, Name) != 0) && (i < n))
{
i++;
}
if (i == n)
{
printf("查找的联系人不存在!\n\n");
}
else
{
printf("姓名:%s\n", Peo[i].name);
printf("性别:%s\n", Peo[i].sex);
printf("年龄:%s\n", Peo[i].Old);
printf("电话:%s\n", Peo[i].Phone_num);
printf("地址:%s\n", Peo[i].adrress);
}
printf("\n");
}
//修改联系人信息
void Alter_Peo(people Peo[], int n)
{
int i = 0;
char Name[15];
printf("请输入你要修改的联系人姓名:");
scanf("%s", Name);
while ((strcmp(Peo[i].name, Name) != 0) && (i < n))
{
i++;
}
if (i == n)
{
printf("未查到此联系人!\n\n");
}
else
{
printf("姓名:");
scanf("%s", &Peo[i].name);
printf("性别:");
scanf("%s", &Peo[i].sex);
printf("年龄:");
scanf("%s", &Peo[i].Old);
printf("电话:");
scanf("%s", &Peo[i].Phone_num);
printf("地址:");
scanf("%s", &Peo[i].adrress);
}
}
//显示所有联系人信息
void Show_Peo(people Peo[], int n)
{
int i = 0;
printf(" 姓名 性别 年龄 电话 地址\n");
for (i = 0; i < n; i++)
{
printf("%7s%6s%8s%14s%15s\n", Peo[i].name, Peo[i].sex, Peo[i].Old, Peo[i].Phone_num, Peo[i].adrress);
}
printf("\n");
}
//清空联系人信息
void Empty_Peo(people Peo[], int n)
{
int i = 0;
for (i = 0; i < n; i++)
{
*Peo[i].name = '\0';
*Peo[i].sex = '\0';
*Peo[i].Old = '\0';
*Peo[i].Phone_num = '\0';
*Peo[i].adrress = '\0';
}
printf("\n");
}
//按联系人名字排序
void Sort_Peo(people Peo[], int n)
{
int i = 0;
int j = 0;
struct Peo tmp;
for (i = 0; i < n - 1; i++)
{
for (j = i; j < n; j++)
{
if ((strcmp(Peo[i].name, Peo[j].name)) > 0)
{
tmp = Peo[i];
Peo[i] = Peo[j];
Peo[j] = tmp;
}
}
}
}
int main()
{
int input = 1;
int ret = 0;
while (input)
{
menu();
printf("\n请选择-->");
scanf("%d", &input);
switch (input)
{
case Add:
ret = Add_Peo(Peo, ret);
break;
case Delect:
ret = Del_Peo(Peo, ret);
break;
case Select:
Sel_Peo(Peo, ret);
break;
case Alter:
Alter_Peo(Peo, ret);
break;
case Show:
Show_Peo(Peo, ret);
break;
case Empty:
Empty_Peo(Peo, ret);
break;
case Sort:
Sort_Peo(Peo, ret);
break;
case Quit:
exit(0);
break;
default:
break;
}
}
system("pause");
return 0;
}
相关文章:

Excel向数据库插入数据和数据库向Excel导出数据
为了熟悉java里工作簿的相关知识点,所以找了“Excel向数据库插入数据和数据库向Excel导出数据”的功能来实现。 注意事项:1,mysql数据库; 2,需要导入的jar包有 jxl.jar,mysql-connector-java-5.1.22-bin.ja…

9.12学习内容
操作系统基础 操作系统是协调、控制、管理计算机硬件资源与软件资源的控制程序 为什么要用操作系统? 1.操作系统可以把复杂的操作简化给用户使用或者应用程序 2.可以让应用程序对计算机硬件竞争变的有序 一套完整的计算机分为:操作系统、应用程序、计算机…

xcode 8 重新支持插件
苹果出了Xcode8之后,就加了签名让之前的自定义插件无法继续的安装使用。想要重新使用插件的话只要用自己的签名覆盖苹果的签名即可。 1.创建自签名证书 钥匙串-》钥匙串访问-》证书助理-》创建证书... 名称:XcodeSigner(可以随便命名,后面要使…

pda找不到服务器,PDA连不上服务器常见问题分析.doc
PDA连不上服务器常见问题分析.docPDA连不上服务器常见问题分析请查看PDA的网络通不通,可以先检查WIFI/3G是否连接上网络,如果连接不上,点击PingToots工具,用"ping 服务器地址" 比如 ping 192.168.1.1 看和服务器网络通不…

android 运动管理,使用 MotionLayout 管理运动和微件动画
创建 MotionScene:在之前的 MotionLayout 示例中,app:layoutDescription 属性引用一个 MotionScene。MotionScene 是一个 XML 资源文件,其中包含相应布局的所有运动描述。为了将布局信息与运动描述分开,每个 MotionLayout 都引用一…

ios Carthage
使用CocoaPods来管理第三方框架很多人都知道,相对来说Carthage比较陌生,Carthage也是来管理第三方框架的,既然已经有了Cocoapods为什么还要有Carthage呢?使用Carthage有什么好处呢: 首先,CocoaPods默认会自…

计算机c1 c语言答题,全国计算机级考试二级C语言上机答题技巧.doc
全国计算机等级考试二级C语言上机答题技巧1.上机改错的试题中通常包含两个(或三个)错误需要修改。 2.试题中用"******found******/"来提示在下一行(或下面第二行)有错。 3.错误的性质基本分语法错和逻辑错两种,也…

springboot +element-axios跨域请求
1、初始化element项目 1.1:vue init webpage 项目名称 1.2:npm i element-ui -S 1.3:在main.js添加 import ElementUI from element-uiimport element-ui/lib/theme-chalk/index.cssVue.use(ElementUI) 2、添加axios跨域请求 在main…

Nginx 主要应用场景
一、反向代理 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。 server { listen 80; …

ios .a和.framework
创建Aggregate来合并模拟器和真机通用的framework 然后在Build Phases下New Run Script Phase创建合并脚本: # Constants SF_TARGET_NAME${PROJECT_NAME} #自定义的用来存放最后合并的framework UNIVERSAL_OUTPUTFOLDER${BUILD_DIR}/${CONFIGURATION}-universal #IP…

android上下文关系,Android Context上下文的理解 Hua
8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?Context概念在安卓对象中,Context是经常使用的元素…但应该也是错误使用率最高的。你在加载资源、启动一个新的Activity、获取系统服务、获取内部文件(…

打开云服务器连不上网,云服务器怎么连接网络连接不上
traceroute(路由跟踪)通常,ping程序用于确定基本连接是否通,traceroute实用程序可用于确定目标打开终端,输入traceroute,点击回车即可可以检测主机和目标主机之间进行交互所经过的网关数量,由接受的数据包来得出结果。…

Pandas缺失数据
数据丢失(缺失)在现实生活中总是一个问题。 机器学习和数据挖掘等领域由于数据缺失导致的数据质量差,在模型预测的准确性上面临着严重的问题。 在这些领域,缺失值处理是使模型更加准确和有效的重点。 何时以及为什么数据丢失? 想象一下有一个…

android servlet 登陆,Android Studio+Servlet+MySql实现登录注册
一、Android 项目当中设置明文传输1、设置明文传输的xml2、引入上述创建的xmlandroid:networkSecurityConfig"xml/network_security_config"二、在MyEclipse当中创建Web项目1、创建项目引入MySQL的驱动包2、创建实体类Userpackage entity;public class User {private…

tomcat在服务器上改了8080的端口之后所带来的问题
因为与IIS的端口冲突,有人会在服务器上改tomcat的端口。但是tomcat在服务器上将端口8080改了之后,可能会导致所不熟的项目在访问时只能访问前面的域名,用户是使用时显示的域名看不到后面的后缀,比如aaa.com/aa,用户不论…

修改git的远程仓库命令
1. 修改命令 git remte origin set-url URL 2.先删后加 git remote rm origin git remote add origin gitgithub.com:Liutos/foobar.git 3. 直接修改config文件

c# 网站在服务器上第一次请求都需要耗时很久,最.net面试题目.doc
经典.net面试这些是C#ASP.NET数据库面试题,全部从网上收集而来,经整理而发表,希望给大家带来帮助,有错误的地方还请各位高手指出,在下倾听指教。1. 简述private、protected、public、internal 修饰符的访问权限。答. p…
动态语言的灵活性是把双刃剑 -- 以Python语言为例
本文有些零碎,总题来说,包括两个问题: (1)可变对象(最常见的是list dict)被意外修改的问题, (2)对参数(parameter)的检查问题。 这两个…

android 绘画,Android绘图基础
绘图三要素一支画笔 Paint。一张画布 Canvas。一个 Bitmap 或者一个 View 来承载这个图形。Paint常用属性setAntiAlias() 设置画笔锯齿效果。setColor() 设置画笔颜色。setTextSize() 设置字体尺寸。setStrokeWidth() 设置空心边框的宽度。setStyle() 设置画笔的风格。Canvas常…

源码0306-手势解锁
现搭建页面 // VCView.h // 06-手势解锁#import <UIKit/UIKit.h>interface VCView : UIViewend// VCView.m // 06-手势解锁#import "VCView.h"implementation VCView - (void)drawRect:(CGRect)rect {// 绘图图像UIImage *image [UIImage imageNamed:&quo…

about ajax,About 4nf.org - Arvind Gupta | Ajaxify | The Ajax Plugin
Hi Tony,That page shows various example calls and example websites, that use this plugin.Also, 4nf.org serves as an example, that is a fairly complex WordPress site.By default “previewoff” is true, so that swaps of the content div(s) are performed on cli…

numpy.random.seed()
numpy.random.seed():用于指定随机数生成时使用算法的开始值,如果没有指定每次生成的值都不一样 如果不指定seed的值,那么每次随机生成的数字都不一样: In [17]: import numpy as npIn [18]: i 0In [19]: while i < 5:...: …

ios .framework动态库重签名
真机上运行.framework时,如果报 dylddyld_fatal_error:dyld: Library not loaded: rpath/XX.framework/XXReferenced from: /var/containers/Bundle/Application/DF33E1CB-0A69-4303-A22A-686E643DE922/iDoctors.app/iDoctors Reason: no suitable image found. Did…

canvars 画花
index.html<!DOCTYPE html><html><head> <title>旋转的花</title> <meta charset "utf-8"> <!--width - 可视区域的宽度,值可为数字或关键词device-width --> <!--height - viewport的高度--&…

android google 下拉刷新 csdn,android SwipeRefreshLayout google官方下拉刷新控件
下拉刷新功能之前一直使用的是XlistView很方便我前面的博客有介绍SwipeRefreshLayout是google官方推出的下拉刷新控件使用方法也比较简单今天就来使用下SwipeRefreshLayout 以后再需要时可以参考.首先在布局里面加入SwipeRefreshLayout 布局:Activity文件中的代码mSwipeRefresh…

服务器操作系统安全更新,服务器操作系统安全更新
服务器操作系统安全更新 内容精选换一换使用弹性云服务器或者外部镜像文件创建私有镜像时,必须确保操作系统中已安装UVP VMTools,使新发放的云服务器支持KVM虚拟化,同时也可以提升云服务器的网络性能。如果不安装UVP VMTools,云服…

流程控制if、while、for
if判断 if判断想执行第一个条件,if后的判断必须是True 1 什么是if判断 判断一个条件如果成立则做...不成立则做....2 为何要有if判断 让计算机能够像人一样具有判断的能力3 如何用if判断 语法1: if 条件1:code1code2code3...... 语法2:if-else if 条件:code…

抄写例题作业1
截图 1.例9.1 (1)代码实现 1 #include<stdio.h>2 int main()3 {4 struct stu5 {6 long int num;7 char name[20];8 char sex[3];9 char addr[20]; 10 }a{1010,"董诗原","男",&qu…

android button imagebutton 区别,Android 开发入门篇
Button 与 ImageButton本节学习Android基本控件按钮控件,Button和ImageButton用法基本类似,所以本节重点讲解Button控件。在布局中添加Button控件:android:id"id/btn"android:text"普通按钮"android:layout_width"w…

iOS autolayout 约束冲突添加symbol breakpoint
UIViewAlertForUnsatisfiableConstraints