以上是所有代码。
实现的功能就是把文件中的数据,
然后传递在程序里,
然后对文件数据进行增删查改的功能,
怎样实现呢,
每个子函数应该如何修改呢?
引自免费微信小程序:皆我百晓生
为了实现所需功能,你需要对现有代码进行一些修改和补充。下面是详细的修改步骤和代码示例。
首先,修复代码格式和错误,确保编译器可以正确解析。以下是修正后的代码,包括结构体定义、函数声明和主函数部分:
#include <stdio.h>
#include <string.h>
#include <windows.h>
#define MAX_CONTACTS 100
typedef struct stu {
char name[20];
char sex[20];
int dianhua;
float year;
char leibie[20];
} Stu;
typedef struct txl {
Stu sz[MAX_CONTACTS];
int size;
} Txl;
void caidan(Txl *qw);
void xinjian(Txl *qw);
void xianshi(const Txl *qw);
void chazhao(const Txl *qw, const char *target_name);
void shanchu(Txl *qw, const char *target_name);
void xiugai(Txl *qw, const char *target_name);
void tianjia(Txl *qw);
void duanqiao(Stu sz[], FILE *fp);
void shuchu(Stu sz[], FILE *fp);
int main() {
Txl qw;
qw.size = 0;
FILE *fp_in = fopen("jieke_design.txt", "r");
if (fp_in == NULL) {
printf("无法打开文件\n");
return -1;
}
duanqiao(qw.sz, fp_in);
fclose(fp_in);
FILE *fp_out = fopen("data.txt", "w");
if (fp_out == NULL) {
printf("无法打开文件\n");
return -1;
}
while (true) { // 添加死循环使其持续出现菜单
caidan(&qw);
int n;
scanf("%d", &n);
switch (n) {
case 1:
xinjian(&qw);
printf("建立成功。\n");
system("pause");
system("cls");
break;
case 2:
xianshi(&qw);
system("pause");
system("cls");
break;
case 3:
char target_name[20];
printf("请输入你要查找的人的姓名:");
scanf("%s", target_name);
chazhao(&qw, target_name);
system("pause");
system("cls");
break;
case 4:
char delete_name[20];
printf("请输入你要删除联系人的姓名:");
scanf("%s", delete_name);
shanchu(&qw, delete_name);
system("pause");
system("cls");
break;
case 5:
char modify_name[20];
printf("请输入你要修改的人的姓名:");
scanf("%s", modify_name);
xiugai(&qw, modify_name);
system("pause");
system("cls");
break;
case 6:
tianjia(&qw);
system("pause");
system("cls");
break;
case 7:
shuchu(qw.sz, fp_out);
fclose(fp_out);
exit(0);
break;
default:
printf("无效选项,请重新选择。\n");
break;
}
}
return 0;
}
接下来,修复xiugai()
函数中的逻辑错误。在找到目标联系人时,需要更新其信息而不是替换整个结构体:
void xiugai(Txl *qw, const char *target_name) {
int i;
for (i = 0; i < qw->size; i++) {
if (strcmp(qw->sz[i].name, target_name) == 0) {
printf("请输入你要修改的人的信息:\n");
xinjian(qw);
break;
}
}
if (i >= qw->size) {
printf("未找到相应的联系人。\n");
}
}
最后,为chazhao()
函数添加一个参数const char *target_name
,以便在查找过程中使用:
void chazhao(const Txl *qw, const char *target_name) {
int i;
printf("请输入你要查找的人的姓名:");
scanf("%s", target_name);
for (i = 0; i < qw->size; i++) {
if (strcmp(qw->sz[i].name, target_name) == 0) {
xianshi(qw);
break;
}
}
if (i >= qw->size) {
printf("未查找到相应联系人。\n");
}
}
现在,这个程序已经实现了基本的联系人管理功能,包括新建、显示、查找、删除和修改联系人。注意,由于C语言不支持异常处理,因此在文件操作时,你可能需要添加更多的错误检查来防止意外情况。同时,为了提高代码可读性,建议将输入和输出函数分开,例如分别为用户输入和从文件中读取输入提供单独的函数。