二楼的意思是你打fp=fopen("D:people.txt","w");怎么不按照read里的写法
if((fp=fopen("D:people.txt","r"))!=NULL);判断文件句柄是否打开了。
if((fp=fopen("D:people.txt","r"))!=NULL);判断文件句柄是否打开了。

我们都在路上。。。。。
程序代码:#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 10
struct people
{
char name[20];
int year;
int month;
int in;
int out;
}peo[SIZE];
int n=0 ;//n表示输入的成员个数
void sort() //升序排序
{
int i, j;
struct people temp;
for(i=1; i<n; i++)
{
temp = peo[i];
j = i - 1;
while(j>=0 && (strcmp(peo[j].name ,temp.name)>0 || strcmp(peo[j].name ,temp.name)==0 && (peo[j].year>temp.year || peo[j].year==temp.year && peo[j].month>temp.month)))
{
peo[j+1] = peo[j];
j--;
}
peo[j+1] = temp;
}
}
int save()
{
sort();
FILE *fp;
int i;
fp=fopen("D:\\people.txt","w"); //错误:要么不要路径直接写文件名(最后文件和代码源文件在一个目录中);要么改为"D:\\people.txt"(\转义字符)
{
fprintf(fp,"%d\n",n);
for(i=0;i<n;i++)
{
fprintf(fp,"%-20s%4d.%-4d%9d%9d\n",peo[i].name,peo[i].year,peo[i].month,peo[i].in,peo[i].out);
}
}
fclose(fp);
return 0;
}
int read()
{
FILE *fp;
int i;
if(!(fp=fopen("D:\\people.txt","r")))//同上
{
return -1;
}
else
{
fscanf(fp,"%d\n",&n);
for(i=0;i<n;i++)
{
fscanf(fp,"%s%d.%d%d%d\n",peo[i].name,&peo[i].year,&peo[i].month,&peo[i].in,&peo[i].out);
printf("%-20s%4d.%-4d%9d%9d\n",peo[i].name,peo[i].year,peo[i].month,peo[i].in, peo[i].out);
}
}
fclose(fp);
return 0;
}
int add_people()
{
read();
char name[20];
char ch;
printf("\n[录入新成员信息]\n");
while(tolower(ch) != 'y')
{
printf("\n请输入姓名:");
scanf("\n%s",name);
strcpy(peo[n].name,name);
printf("\n请输入年份:");
scanf("%d",&peo[n].year);
printf("\n请输入月份:");
scanf("%d",&peo[n].month);
printf("\n请输入收入:");
scanf("%d",&peo[n].in);
printf("\n请输入支出:");
scanf("%d",&peo[n].out);
n++;
printf("\n是否结束输入(Y/N):\n");
getchar(); //吃掉回车
scanf("%c", &ch);
}
save();
read();
return 0;
}
int dele_people()
{
char name[20];
int postion[SIZE+1];
postion[0] = 0; //postion[0]存储元素个数
int i,j = 1 ,year, month, k1=n, flag=1;
read();
printf("\n请输入要删除成员姓名:\n");
scanf("%s", name);
for(i=0; i<n; i++)
{
if(strcmp(peo[i].name, name) == 0)
{
printf("该成员信息:\n");
printf("%-20s%4d.%-4d%9d%9d\n",peo[i].name,peo[i].year,peo[i].month,peo[i].in, peo[i].out);
postion[j++] = i; //记录符合条件成员记录在peo[]中位置
postion[0]++;
flag = 0;
}
}
if(i == n && flag == 1)
printf("\r没有找到符合条件成员!\n");
k1 = postion[1]; //第一个符合姓名条件的成员在peo[]中位置
if(postion[0]>1) //符合姓名条件的成员大于1时,就要通过时间来确定删除那个
{
printf("请选择要删除该成员那个时间的记录(例如:1988.8):\n");
scanf("%d.%d" ,&year, &month);
for(int k=1; k<=postion[0]; k++)
{
k1 = postion[k];
if(peo[k1].year == year && peo[k1].month == month)
{
printf("符合条件的成员信息为:\n");
printf("%-20s%4d.%-4d%9d%9d\n",peo[k1].name,peo[k1].year,peo[k1].month,peo[k1].in, peo[k1].out);
break;
}
else
{
printf("没有相应的成员符合条件!\n");
}
}
}
while(k1<n) //删除该成员特定时间某条记录
{
peo[k1] = peo[k1+1];
k1++;
}
n--;
printf("删除成功!\n");
save();
read();
return 0;
}
int change_people()
{
char name[20];
int postion[SIZE+1];
postion[0] = 0; //postion[0]存储元素个数
int i,j = 1 ,year, month, k1, flag=1;
read();
printf("\n请输入要修改成员姓名:\n");
scanf("%s" ,name);
for(i=0; i<n; i++)
{
if(strcmp(peo[i].name, name) == 0)
{
printf("该成员信息:\n");
printf("%-20s%4d.%-4d%9d%9d\n",name,peo[i].year,peo[i].month,peo[i].in, peo[i].out);
postion[j++] = i; //记录符合条件成员记录在peo[]中位置
postion[0]++;
flag=0; //flag值改变表示存在符合条件的成员
}
}
if(i == n && flag == 1)
printf("\r没有找到符合条件成员!\n");
k1 = postion[1]; //第一个符合姓名条件的成员在peo[]中位置
if(postion[0]>1) //符合姓名条件的成员大于1时,就要通过时间来确定删除那个
{
printf("请选择要删除该成员那个时间的记录(例如:1998.8):\n");
scanf("%d.%d", &year, &month);
for(int k=1; k<=postion[0]; k++)
{
k1 = postion[k];
if(peo[k1].year == year && peo[k1].month == month)
{
printf("符合条件的成员信息为:\n");
printf("%-20s%4d.%-4d%9d%9d\n",peo[k1].name,peo[k1].year,peo[k1].month,peo[k1].in, peo[k1].out);
break;
}
else
{
printf("没有相应的成员符合条件!\n");
}
}
}
//修改信息
printf("\n请输入修改后数据:\n");
printf("\n年份:");
scanf("%d",&peo[k1].year);
printf("\n月份:");
scanf("%d",&peo[k1].month);
printf("\n收入:");
scanf("%d",&peo[k1].in);
printf("\n支出:");
scanf("%d",&peo[k1].out);
save();
read();
return 0;
}
int search_people()
{
char name[20];
int i;
read();
printf("\n请输入要查找成员姓名:\n");
scanf("%s", name);
printf("\n%s的所有收支信息:\n\n",name);
printf("姓名 时间 收入 支出 总计\n");
for(i=0; i<n; i++)
{
if(strcmp(peo[i].name, name) == 0)
{
printf("%-20s%4d.%-4d%9d%9d%9d\n",peo[i].name,peo[i].year,peo[i].month,peo[i].in,peo[i].out,peo[i].in-peo[i].out);
}
}
return 0;
}
int go()
{
printf("\n\n《谢谢使用家庭管理系统》\n\n");
printf("\n\n 潘黄岷\n\n");
exit(0);
return 0;
}
void printmenu()
{
printf("\n 选择菜单\n");
printf("````````````````````````````````````````````````\n\n");
printf("1.添加成员收支信息\n");
printf("2.删除成员收支信息\n");
printf("3.修改成员收支信息\n");
printf("4.查询成员收支信息\n");
printf("5.退出界面\n\n");
printf("````````````````````````````````````````````````\n\n");
}
void main()
{
int choise;
while(1)
{
printf("\n");
printmenu();
printf("请输入你的选择\n");
scanf("%d", &choise);
switch(choise)
{
case 1:
printf("添加操作状态!\n");
add_people();
break;
case 2:
printf("删除操作状态!\n");
dele_people();
break;
case 3:
printf("修改操作状态!\n");
change_people();
break;
case 4:
printf("查询操作状态!\n");
search_people();
break;
case 5:
printf("退出\n");
go();
break;
default:
printf("输入错误!\n");
}
}
}