二楼的意思是你打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"); } } }