⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abook.cpp

📁 一个通讯录的小程序
💻 CPP
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ABook.h"
#include "Talk.h"

////////////////////////////////////////////////////////////////////////////////
// 通讯录处理函数
////////////////////////////////////////////////////////////////////////////////

// 创建通讯录
void ABookCreate(ABOOK *p, int size, const char *filename) {
	if (size <= 0) size = 100;
	p->a = (PERSON*) malloc(sizeof(PERSON) * size);
	p->size = size;
	p->len = 0;
	strcpy(p->filename, filename);
	ABookLoad(p);
}

// 销毁通讯录
void ABookDestroy(ABOOK *p) {
	ABookSave(p);
	p->size = p->len = 0;
	free(p->a);
	p->a = NULL;
}

// 通讯录满
bool ABookIsFull(const ABOOK *p) {
	return p->len >= p->size;
}

// 通讯录空
bool ABookIsEmpty(const ABOOK *p) {
	return !p->len;
}

// 添加
void ABookAppend(ABOOK *p, const PERSON *x) {
	if (ABookIsFull(p)) {
		printf("通讯录满, 无法添加信息!\a\n");
	}
	else {
		p->a[p->len ++] = *x;
		PersonOutput(x, true);
		printf("\n添加成功!\n");
	}
}

// 删除
void ABookRemove(ABOOK *p, int i) {
	if (ABookIsEmpty(p)) printf("通讯录空, 无法删除信息!\a\n");
	else if (i < 0 || i >= p->len) printf("参数无效, 删除失败!\n\a");
	else {
		PersonOutput(&p->a[i], true);
		p->a[i] = p->a[-- p->len];
		printf("\n删除成功!\n");
	}
}

// 按指定栏目cn进行查找
int ABookFind(const ABOOK *p, const PERSON *x, int cn) {
	int k = -1;
	if (cn < 1 || cn > maxCn) {
		printf("栏目参数错误!\a\n");
	}
	else {
		k = 0;
		while (k < p->len && PersonCmp(&p->a[k], x, cn)) k ++;
		if (k >= p->len) k = -1;
	}
	return k;
}

// 按指定栏目cn进行排序
void ABookSort(ABOOK *p, int cn) {
	int i, j;
	if (cn < 1 || cn > maxCn) {
		printf("栏目参数错误!\a\n");
	}
	else {
		bool loop = true;
		for (i = p->len - 1; loop && i > 0; i --) {
			for (j = 0; j < i; j ++) {
				if (PersonCmp(&p->a[j], &p->a[j + 1], cn) > 0) {
					PersonSwap(&p->a[j], &p->a[j + 1]);
				}
			}
		}
	}
}

// 修改
void ABookSet(ABOOK *p, int i, const PERSON *x) {
	if (i >= 0 && i < p->len) {
		p->a[i] = *x;
	}
	else {
		printf("位置参数错误!\a\n");
	}
}

// 读取
void ABookGet(const ABOOK *p, int i, PERSON *x) {
	if (i >= 0 && i < p->len) {
		*x = p->a[i];
	}
	else {
		printf("位置参数错误!\a\n");
	}
}

// 输出通讯录
void ABookOutput(const ABOOK *p) {
	int k;
	if (ABookIsEmpty(p)) {
		printf("通讯录空!\n");
	}
	else {
		PersonOutput(NULL, true);
		for (k = 0; k < p->len; k ++) {
			PersonOutput(&p->a[k], false);
		}
	}
}

// 保存通讯录
void ABookSave(ABOOK *p) {
	FILE *fp;
	int sn = GetPersonSn();
	fp = fopen(p->filename, "wb");
	if (!fp) {
		printf("无法打开通讯录!\n\a");
	}
	else {
		printf("正在保存通讯录...");
		fwrite(&sn, sizeof(sn), 1, fp);
		fwrite(&p->len, sizeof(p->len), 1, fp);
		fwrite(p->a, sizeof(PERSON), p->len, fp);
		fclose(fp);
		printf("完成!\n");
	}
}

// 加载通讯录
void ABookLoad(ABOOK *p) {
	FILE *fp;
	int sn;
	fp = fopen(p->filename, "rb");
	if (!fp) {
		printf("无法打开通讯录!\n\a");
	}
	else {
		printf("正在加载通讯录...");
		fread(&sn, sizeof(sn), 1, fp);
		fread(&p->len, sizeof(p->len), 1, fp);
		fread(p->a, sizeof(PERSON), p->len, fp);
		fclose(fp);
		SetPersonSn(sn);
		printf("完成!\n");
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -