通讯录--第二版番外篇

//使用动态内存实现通讯录
</pre><pre name="code" class="cpp">#define _CRT_SECURE_NO_WARNINGS 1

#ifndef  __ADDRESSBOOK_H__           //使用条件编译,防止重复引入头文件

#define  __ADDRESSBOOK_H__
#define  NAME_MAX 20
#define  SEX_MAX 6
#define  TELE_MAX 20
#define  ADDR_MAX 40
#define INIT_SIZE 2
#define ADD_SIZE 10

typedef enum choice
{
	EXIT,
	ADD,
	DELETE,
	CHANGE,
	FIND,
	INIT,
	OUTPUT,
	SORT
}choice;

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct stu                    //定义一个学生信息的结构体类型
{
	char name[NAME_MAX];
	char sex[SEX_MAX];
	int age;
	char tele[TELE_MAX];
	char address[ADDR_MAX];

}stu;

typedef struct                                               //创建一个顺序表
{
	stu *data;
	int i;
	int size;
}sequence;

void Add(sequence *book);
void delete(sequence *book, char *names);
void change(sequence *book, char *names);
void output(sequence const *book);
void init(sequence *book);
void sort(sequence *book);
void find(sequence *book, char *names);

#endif
#include"addressbook.h"

int find_place(sequence *book, char *names)
{
	int n = 0;
	while (n < book->i)
	{
		if (strcmp(book->data[n].name, names) == 0)
			break;
		n++;
	}
	if (n != book->i)
		return n;                       //如果找到则返回这个位置
	return -1;                           //没找到返回-1
}

void find(sequence *book, char *names)
{
	int ret = find_place(book, names);
	if (ret == -1)
		printf("查询无果\n");
	else
		printf("名字:%s 性别: %s 年龄: %d 电话: %s 地址: %s\n",
		book->data[ret].name,
		book->data[ret].sex,
		book->data[ret].age,
		book->data[ret].tele,
		book->data[ret].address);
}

void Add(sequence *book)
{
	if (book->size==0)
	{
		book->data = (stu *)malloc(INIT_SIZE*sizeof(stu));
		if (book->data == NULL)
			exit(1);
		book->size = INIT_SIZE;
	}
	if (book->i == (book->size - 1))
	{
		book->data = (stu *)realloc(book->data,(book->size=+ADD_SIZE)*sizeof(stu));
		if (book->data == NULL)
			exit(1);
	}
		printf("请输入名字:");
		scanf("%s", book->data[book->i].name);
		printf("请输入性别:");
		scanf("%s", book->data[book->i].sex);
		printf("请输入年龄:");
		scanf("%d", &book->data[book->i].age);
		printf("请输入电话:");
		scanf("%s", book->data[book->i].tele);
		printf("请输入地址:");
		scanf("%s", book->data[book->i].address);
		++book->i;
		printf("添加成功\n");
}

void delete(sequence *book, char *names)
{
	if (book->i <= 0)
	{
		printf("通讯录已空\n");
	}
	else
	{
		int n = 0;
		n = find_place(book, names);                       //根据名字查找
		if (n< 0)
		{
			printf("没有此人\n");
		}
		else
		{
			book->data[n] = book->data[book->i - 1];//如果找到,则将最后一条记录放到这个位置
			book->i--;                     //删除一个,则记录位置的book->i也要减一
			printf("删除成功\n");
		}
	}
}

void change(sequence *book, char *names)
{
	int ret = 0;
	ret = find_place(book, names);              //先找到这个人的位置
	if (ret == -1)
	{
		printf("没有此人\n");
	}
	else
	{
		printf("请输入名字:");
		scanf("%s", book->data[ret].name);
		printf("请输入性别:");
		scanf("%s", book->data[ret].sex);
		printf("请输入年龄:");
		scanf("%d", &book->data[ret].age);
		printf("请输入电话:");
		scanf("%s", book->data[ret].tele);
		printf("请输入地址:");
		scanf("%s", book->data[ret].address);
		printf("修改成功\n");
	}
}

void output(sequence const *book)
{
	if (book->i <= 0)
	{
		printf("通讯录为空\n");
	}
	else
	{
		int n = 0;
		printf("%5s %5s %5s %11s %11s\n", "名字", "性别", "年龄", "电话", "地址");
		while (n < book->i)
		{
			printf("%5s %5s %5d %11s %11s\n",
				book->data[n].name,
				book->data[n].sex,
				book->data[n].age,
				book->data[n].tele,
				book->data[n].address);
			n++;
		}

	}
}

void init(sequence *book)
{
	book->i = 0;            //只要将记录位置的book->i置0
	printf("初始化成功\n");
}

void sort(sequence *book)
{
	if (book->i >1)                  //当通讯录中有1个以上记录再进行排序
	{
		int i = 0;
		int j = 0;
		int flag = 0;
		for (i = 0; i < book->i - 1; i++)
		{
			flag = 1;
			for (j = 0; j < book->i - i - 1; j++)
			{
				if (strcmp(book->data[j].name, book->data[j + 1].name) > 0)  //根据名字进行排序
				{
					stu tmp = book->data[j];
					book->data[j] = book->data[j + 1];
					book->data[j + 1] = tmp;
					flag = 0;
				}        //if 结束
			}
			if (flag)     //如果已经有序,则flag为真
				break;
		}
	}
	printf("排序成功\n");
}
#include"addressbook.h"

void meau()
{
	printf("*******************************\n");
	printf("*0.exit              1.Add    *\n");
	printf("*2.deletel           3.change *\n");
	printf("*4.find              5.init   *\n");
	printf("*6.output            7.sort   *\n\n");
}
void execute(sequence *book)
{
	char name[20];
	while (1)
	{
		int n = 0;
		meau();
		printf("请选择:");
		scanf("%d", &n);
		switch (n)
		{
		case EXIT:
			free(book->data);
			exit(1);
			break;
		case ADD:
			Add(book);
			break;
		case DELETE:
			printf("请输入姓名:");
			scanf("%s", name);
			delete(book, name);
			break;
		case CHANGE:
			printf("请输入姓名:");
			scanf("%s", name);
			change(book, name);
			break;
		case FIND:
			printf("请输入姓名:");
			scanf("%s", name);
			find(book, name);
			break;
		case INIT:
			init(book);
			break;
		case OUTPUT:
			output(book);
			break;
		case SORT:
			sort(book);
			break;
		default:
			printf("选择无效\n");
			break;
		}
	}

}

int main()
{
	sequence book;
	book.i = 0;
	book.size = 0;
	book.data = NULL;
	execute(&book);
	system("pause");
	return 0;
}

//后续还有第三版

时间: 2024-11-10 08:02:43

通讯录--第二版番外篇的相关文章

编程珠玑番外篇

1.Plan 9 的八卦 在 Windows 下喜欢用 FTP 的同学抱怨 Linux 下面没有如 LeapFTP 那样的方便的工具. 在苹果下面用惯了 Cyberduck 的同学可能也会抱怨 Linux 下面使用 FTP 和 SFTP 是一件麻烦的事情. 其实一点都不麻烦, 因为在 LINUX 系统上压根就不需要用 FTP. 为什么呢? 因为一行简单的配置之后, 你就可以像使用本机文件一样使用远程的任何文件. 无论是想编辑, 查看还是删除重命名, 都和本机文件一样的用. 这么神奇的功能到底如何

[uboot] (番外篇)uboot 驱动模型(转)重要

[uboot] uboot流程系列:[project X] tiny210(s5pv210)上电启动流程(BL0-BL2)[project X] tiny210(s5pv210)从存储设备加载代码到DDR[uboot] (第一章)uboot流程——概述[uboot] (第二章)uboot流程——uboot-spl编译流程[uboot] (第三章)uboot流程——uboot-spl代码流程[uboot] (第四章)uboot流程——uboot编译流程[uboot] (第五章)uboot流程——u

【喵&quot;的Android之路】【番外篇】有关于null的一些知识点

[喵"的Android之路][番外篇]有关于null的一些知识点 1.首先,到底什么是null? null是Java中的一个关键字,用于表示一个空对象引用,但其本身并不是任何类型也不是属于任何对象.因此,下面的做法是错误的: int a = null; 但: Object obj = null; 是可以的,因为null表示Object类型的一个空对象引用,符合其用意. [注1]引用类型使用null声明对象变量后,无法使用该变量访问对象的成员.例如上述obj对象如果使用obj.toString()

【转载】数学之美番外篇:平凡而又神奇的贝叶斯方法

数学之美番外篇:平凡而又神奇的贝叶斯方法 BY 刘未鹏 – SEPTEMBER 21, 2008POSTED IN: 数学, 机器学习与人工智能, 计算机科学 概率论只不过是把常识用数学公式表达了出来. ——拉普拉斯 记得读本科的时候,最喜欢到城里的计算机书店里面去闲逛,一逛就是好几个小时:有一次,在书店看到一本书,名叫贝叶斯方法.当时数学系的课程还没有学到概率统计.我心想,一个方法能够专门写出一本书来,肯定很牛逼.后来,我发现当初的那个朴素归纳推理成立了——这果然是个牛逼的方法. ——题记 目

[反汇编练习-番外篇] Delphi专攻

[反汇编练习-番外篇] Delphi专攻 鉴于OD在Delphi反汇编这一块的薄弱,狠狠研究了下当前的手段. 大家常用的反编译除了OD(ollydebug).IDA,还有Delphi用的Dede,C#用的NetReflector,还有几个跟踪易语言的.其实反汇编的利器还有很多,在吾爱云盘中收录了: AS3.Sorcerer.v2.72.CracKed.By.REPT.7z 28-Mar-2014 10:59 5M C32Asm.rar 28-Dec-2013 14:52 1M DJ.Java.D

SSAS &amp; Excel BI Tips番外篇之一:What-If分析

这个系列用于记录工作中利用SSAS和Excel进行数据分析的经验技巧,正片放在了天善(SSAS & Excel BI Tips),番外篇现在打算以博客的形式来分享些小技巧,小到不足以作为独立的课程来讲解,但又是很多BA, BU不熟悉却很有用的技能,献给需要的朋友. 此篇说的是Excel的What-If假设分析,SSAS的What-If Writeback打算放在正片讲解. 下图所示是一个简单的等额本金贷款月供计算,第一行是总贷款额30万,第二行是已还款月数默认置为0,第三行是总还款月数20年24

(apache+tomcat集群+memcached番外篇)单台tomcat的session信息的2种持久化方式

为什么要实现搭建tomcat集群环境呢?主要因为单个tomcat无论从吞吐量和并发数上,会达到一定的极限.如果访问量超过单个tomcat的承受能力的话,tomcat一般要么拒绝提供服务,要么直接宕掉.所以,必须要依靠tomcat集群技术.举个最简单的例子,拿"送快件"比喻,如果一个人,5分钟送一件,一小时之内,送10个,一个人完全能胜任这项工作.假设现在到了双十一,要求1小时,送100个, 那怎么办?只能安排更多的人加入"送快件"这项工作中来.这其实和集群一个道理.

可视化(番外篇)

本篇主要介绍如何在SWT下构建一个应用,如何安装SWT Designer并破解已进行SWT的可视化编程,Display以及Shell为何物.有何用,SWT中的常用组件.面板容器以及事件模型等. 1.可视化环境搭建(SWT Designer): (1).首先下载SWT Designer插件包SWT Designer 6.9.5 for Eclipse.rar: (2).将解压好的插件包extplugins\swt\eclipse下的features和plugins导入Myeclipse的dropi

《Mycat学习笔记》 番外篇一.客户端使用latin1字符集,后端MySQL为UTF8字符集,MyCat日志分析。

其实这个番外篇比较无聊——即客户端为lantin字符集,后面MySQL为U8字符集,MyCat在中间到底会起什么作用. 再说下本次验证的环境: Mac OS 10.11.2 MySQL 5.6 MyCat 1.5 OK,开始我们的验证工作. 1) 由于数据库与操作系统已被默认设置为U8编码,计划通过修改Mysql  “character_set_client” 参数调整客户端字符集配置进行验证. 关于MYSQL字符集较全面的介绍,请参考 <mysql_query("set names gb