📄 abook.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 + -