#include "stdafx.h"
#include <string.h>
#include <stdlib.h>
void init();//初始化 读取磁盘信息到内存
bool menu();// 显示菜单和选择菜单
void add();//添加联系人
void show();//显示所有联系人
void save();//保存内存数据到磁盘文件
void remove();//删除一个联系人
void update(); //修改一个联系人
void find();
char* input(char *);
struct Person {//联系人数据结构
char name[100];
char tel[100];
};
char buf[100];
#define FILENAME "persons"//磁盘上未见名
Person persons[1000];//所有联系人结构数组
int n = 0;//联系人个数
int main()
{
//先去读取已经有的联系人
init();
while (true) {
if (!menu()) {
break;
}
}
return 0;
}
bool menu() {
printf("1、增加一个联系人\n");
printf("2、删除一个联系人\n");
printf("3、修改一个联系人\n");
printf("4、查找联系人\n");
printf("5、显示所有联系人\n");
printf("6、退出\n");
char ch[100];
printf("请输入功能代号:(1-6)");
scanf_s("%s", ch, 100);
switch (ch[0])
{
case '1':
add();
break;
case '2':
remove();
break;
case '3':
update();
break;
case '4':
find();
break;
case '5':
show();
break;
case '6':
return false;
break;
default:
printf("无效的号码!\n");
break;
}
return true;
}
void add () {
Person temp;
//得到姓名
char *buf = input("请输入联系人姓名");
strcpy_s(temp.name, buf);
//得到电话
buf = input("请输入联系人电话");
strcpy_s(temp.tel, buf);
//保存到内存
persons[n] = temp;
n++;
//保存到磁盘
save();
}
void save() {
FILE * fp = NULL;
fopen_s(&fp, FILENAME, "w");
fwrite(&n, sizeof(int), 1, fp);
for (int i = 0; i < n; i++) {
fwrite(&persons[i], sizeof(Person), 1, fp);
}
fclose(fp);
printf("磁盘更新!\n");
}
void show() {
if (n < 1) {
printf("对不起,真的还没有联系人呀!\n");
return;
}
printf("编号\t\t姓名\t\t电话\n");
for (int i = 0; i < n; i++) {
printf("%d\t\t%s\t\t%s\n", i + 1, persons[i].name, persons[i].tel);
}
}
void init() {
//读文件
FILE * fp = NULL;
fopen_s(&fp, FILENAME, "r");
if (fp != NULL) {
fread(&n, sizeof(int), 1, fp);
for (int i = 0; i < n; i++) {
fread(&persons[i], sizeof(Person), 1, fp);
}
}
else {
return;
}
fclose(fp);
}
void remove()
{
if (n > 0) //有人
{
show();//罗列所有人,给个编号
printf("请输入你要删除联系人的编号(1-%d):", n);
char buf[4];
scanf_s("%s", buf, 4);
int nn = atoi(buf);//把键盘上输入的字符串转换为整数
if (nn<1 || nn>n) //输入编号验证
{
printf("对不起,你现在不能删除,因为是一个无效的编号!\n");
}
else {
if (nn != n) //移动下面的联系人
{
for (int i = 0; i < n - nn; i++) {
persons[nn + i - 1] = persons[nn + i];
}
}
n--;//总人数减去一个
save();//同步到磁盘
printf("删除联系人成功!\n");
}
}
else {
printf("对不起,你现在不能删除,因为一个人也没有!\n");
}
}
void update()
{
if (n > 0) //有人
{
show();//罗列所有人,给个编号
printf("请输入你要修改联系人的编号(1-%d):", n);
scanf_s("%s", buf, 4);
int nn = atoi(buf);//把键盘上输入的字符串转换为整数
if (nn<1 || nn>n) //输入编号验证
{
printf("对不起,你现在不能修改,因为是一个无效的编号!\n");
}
else {
printf("请输入你要修改的项目(a-所有,n-姓名,p-电话)");
scanf_s("%s", buf, 100);
if (buf[0] == 'a' || buf[0] == 'A')
{
char*buf = input("请输入新的姓名");
strcpy_s(persons[nn - 1].name, buf);
buf = input("请输入新的电话");
strcpy_s(persons[nn - 1].tel, buf);
}
else if (buf[0] == 'n' || buf[0] == 'N')
{
char*buf = input("请输入新的姓名");
strcpy_s(persons[nn - 1].name, buf);
}
else if (buf[0] == 'p' || buf[0] == 'P')
{
char *buf = input("请输入新的电话");
strcpy_s(persons[nn - 1].tel, buf);
}
save();//同步到磁盘
printf("修改联系人成功!\n");
}
}
else {
printf("对不起,你现在不能删除,因为一个人也没有!\n");
}
}
void find()
{
printf("请输入你要寻找的关键字(姓名或者电话)");
char buf[100];
scanf_s("%s",buf,100);
int c = 0;
for (int i = 0; i < n; i++)
{
if (strcmp(persons[i].name, buf) == 0 || strcmp(persons[i].tel, buf) == 0)
{
printf("%s\t\t%s\n",persons[i].tel);
c++;
}
}
printf("一共找到了%d个人!\n",c);
}
char* input(char* msg)
{
printf("%s:", msg);
scanf_s("%s", buf, 100);
return buf;
}
C语言 通讯录(本地储存)
最新推荐文章于 2023-06-01 18:58:49 发布
