求各位帮忙看看下面的程序,在修改模块中当我将已保存的数据进行修改时无法保存到磁盘文件当中,显示的数据还是原来的数据,应该怎么解决。谢谢!
//预处理模块和结构体
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<dos.h>
#include<string.h>
#define LEN sizeof(struct staff)
#define FORMAT "%-13d%-13s%-13s%-13d%-13d%-13s%-13s%-13.1f%-13s\n"
#define DATA sta[i].num,sta[i].name,sta[i].sex,sta[i].year,sta[i].month,sta[i].xel,sta[i].duty,sta[i].wage,sta[i].phone
//定义职工信息结构体
struct staff
{
long int num;
char name[10];
char sex[5];
int year;
int month;
char xel[10];
char duty[10];
float wage;
char phone[20];
};
struct staff sta[50];
//函数声明与简介
void input();
void show();
void order();
void del();
void modify();
void menu();
void search();
//主函数
int main()
{
int n;
menu();
scanf("%d", &n);
while (n)
{
switch (n)
{
case 0:exit(0);
case 1:input(); break;
case 2:search(); break;
case 3:del(); break;
case 4:modify(); break;
case 5:order(); break;
case 6:show(); break;
default:printf("输入有误,请重新输入:"); break;
}
_getch();
menu();
scanf("%d", &n);
}
return 0;
}
//自定义函数实现菜单功能
void menu()
{
system("cls");
printf("\t\t|------------职工信息管理系统-----------|\n");
printf("\t\t| |\n");
printf("\t\t|\t 0.退出系统\t\t\t|\n");
printf("\t\t|\t 1.输入记录\t\t\t|\n");
printf("\t\t|\t 2.查找记录\t\t\t|\n");
printf("\t\t|\t 3.删除记录\t\t\t|\n");
printf("\t\t|\t 4.修改记录\t\t\t|\n");
printf("\t\t|\t 5.记录排序\t\t\t|\n");
printf("\t\t|\t 6.显示记录\t\t\t|\n");
printf("\t\t|---------------------------------------|\n");
printf("\t\t 请输入您的操作(0-6):\n");
}
//录入职工信息
void input()
{
int i, m = 0;
char ch[2];
FILE* fp;
if ((fp = fopen("staData.txt", "a+")) == NULL)
{
printf("打开文件失败\n");
return;
}
while (!feof(fp))
{
if (fread(&sta[m], LEN, 1, fp) == 1)
m++;
}
fclose(fp);
if (m == 0)
printf("没有数据!\n");
else
{
system("cls");
show();
}
if ((fp = fopen("staData.txt", "wb")) == NULL)
{
printf("打开文件失败\n");
return;
}
for (i = 0; i < m; i++)
{
fwrite(&sta[i], LEN, 1, fp);
}
printf("请确定(y/n):");
scanf("%s", ch);
while (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)
{
printf("工号:");
scanf("%d", &sta[m].num);
for (i = 0; i < m; i++)
if (sta[i].num == sta[m].num)
{
printf("此工号以存在!");
_getch();
fclose(fp);
return;
}
printf("姓名:");
scanf("%s", sta[m].name);
printf("性别:");
scanf("%s", sta[m].sex);
printf("出生年:");
scanf("%d", &sta[m].year);
printf("出生月:");
scanf("%d", &sta[m].month);
printf("学历:");
scanf("%s", sta[m].xel);
printf("职称:");
scanf("%s", sta[m].duty);
printf("工资:");
scanf("%f", &sta[m].wage);
printf("电话:");
scanf("%s", sta[m].phone);
if (fwrite(&sta[m], LEN, 1, fp) != 1)
{
printf("保存失败!");
_getch();
}
else
{
printf("%s 已保存!\n",sta[m].name);
m++;
}
printf("是否继续?(y / n) :");
scanf("%s", ch);
}
fclose(fp);
printf("操作成功!\n");
}
/************自定义查找函数*************/
void search()
{
FILE *fp;
int snum;
int i, m = 0;
char ch[2];
if ((fp = fopen("staData.txt", "rb")) == NULL)
{
printf("打开文件失败\n");
return;
}
while (!feof(fp))
if (fread(&sta[m], LEN, 1, fp) ==1)
m++;
fclose(fp);
if (m == 0)
{
printf("文件无记录!\n");
return;
}
printf("请输入需要查找的职工工号:");
scanf("%d", &snum);
for (i = 0; i < m; i++)
if (snum == sta[i].num)
{
printf("职工信息已找到,确认显示?(y/n):");
scanf("%s", ch);
if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0);
{
printf("工号 姓名 性别 出生年 出生月 学历 职称 工资 电话\t\n");
printf(FORMAT,DATA);
break;
}
}
if (i == m)
printf("查找失败!\n");
}
/***********自定义修改函数***********/
void modify()
{
FILE* fp;
int i, j, m = 0, snum;
if ((fp = fopen("staData.txt", "r+")) == NULL)
{
printf("打开文件失败\n");
return;
}
while (!feof(fp))
if (fread(&sta[m], LEN, 1, fp) == 1)
m++;
if (m == 0)
{
printf("文件无记录!\n");
fclose(fp);
return;
}
show();
printf("请输入你要修改的职工的工号:\n");
printf("工号是:");
scanf("%d", &snum);
for (i = 0; i < m; i++)
{
if (snum == sta[i].num)
{
printf("职工数据已找到,请修改!\n");
printf("姓名:");
scanf("%s", sta[m].name);
printf("性别:");
scanf("%s", sta[m].sex);
printf("出生年:");
scanf("%d", &sta[m].year);
printf("出生月:");
scanf("%d", &sta[m].month);
printf("学历:");
scanf("%s", sta[m].xel);
printf("职称:");
scanf("%s", sta[m].duty);
printf("工资:");
scanf("%f", &sta[m].wage);
printf("电话:");
scanf("%s", sta[m].phone);
printf("操作成功!\n");
if ((fp = fopen("staData.txt", "wb")) == NULL)
{
printf("打开文件失败\n");
return;
}
for (j = 0; j < m; j++)
if (fwrite(&sta[j], LEN, 1, fp) != 0)
{
printf("保存失败!");
_getch();
}
fclose(fp);
return;
}
}
printf("没有找到匹配信息!\n");
}
/************自定义删除函数*************/
void del()
{
FILE* fp;
int snum, i, j, m = 0;
char ch[2];
if ((fp = fopen("staData.txt ","r+")) == NULL)
{
printf("打开文件失败、n"); return;
}
while (!feof(fp))
if (fread(&sta[m], LEN, 1, fp) == 1)
m++;
fclose(fp);
if (m == 0)
{
printf("文件无记录!\n");
return;
}
show();
printf("请输入要删除的职工信息:");
scanf("%d", &snum);
for (i = 0; i < m; i++)
{
if (snum == sta[i].num)
{
printf("数据已找到,是否确认删除?(y/n):");
scanf("%s", ch);
if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)
{
for (j = i; j < m; j++)
sta[j] =sta[j + 1];
m--;
if ((fp = fopen("staData.txt", "wb")) == NULL)
{
printf("打开文件失败\n");
return;
}
for (j = 0; j < m; j++)
if (fwrite(&sta[j], LEN, 1, fp) != 1)
{
printf("对不起,保存失败!\n");
_getch();
}
fclose(fp);
printf("删除成功!\n");
show();
return;
}
else
{
printf("取消删除!\n");
return;
}
}
}
printf("没有找到要删除的信息!\n");
}
/***********自定义排序函数(工资)***********/
void order()
{
FILE* fp;
struct staff t;
int i = 0, j = 0, m = 0;
if ((fp = fopen("staData.txt", "r+")) == NULL)
{
printf("打开文件夹失败!\n");
return;
}
while (!feof(fp))
if (fread(&sta[m], LEN, 1, fp) == 1)
m++;
fclose(fp);
if (m == 0)
{
printf("无记录!\n");
return;
}
if ((fp = fopen("staData.txt","wb")) == NULL)
{
printf("打开文件夹失败\n");
return;
}
for (i = 0; i < m - 1; i++)
for (j = i + 1;j < m; j++)
if (sta[i].wage < sta[j].wage)
{
t = sta[i]; sta[i] = sta[j];
sta[j] = t;
}
if ((fp = fopen("staData.txt", "wb")) == NULL)
{
printf("打开文件夹失败\n");
return;
}
for (i = 0; i < m; i++)
if (fwrite(&sta[i], LEN, 1, fp) != 1)
{
printf(" 保存失败!\n");
_getch();
}
fclose(fp);
printf("操作成功\n");
show();
}
/***********自定义显示模板***********/
void show()
{
FILE* fp;
int i, m = 0;
fp = fopen("staData.txt", "rb");
while (!feof(fp))
{
if (fread(&sta[m], LEN, 1, fp) == 1)
m++;
}fclose(fp);
printf("工号 姓名 性别 出生年 出生月 学历 职称 工资 电话\t\n");
for (i = 0; i < m; i++)
{
printf(FORMAT,DATA);
}
}
有没有觉得你在用户进行修改之后少了一步逻辑,就是用户输入完,你把保存数据报错到结构体数组里了,但是你并未把这个数组再保存到文件当中,虽然你写了是否保存失败的判断,但是本质上你少了从结构体到文件的保存那一步