求大神!!
学生管理系统的删除功能,如何实现。
我这函数怎么不能删除之前录入的学生数据呢
头文件和全局变量:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
struct student
{
char num[20];
char name[20];
char shuxue[20];
char yingyu[20];
char wuli[20];
char jisuanji[20];
};
FILE *fp;
struct student stu[10000],stu2[10];
char wenjianming[20];
int i,k,flag2=0,c=0,m=0,n=0,x=0;
int j=0;//学生个数!
int b=0;//追加学生个数!!
int s=0;//删除学生个数!!
int sum=0;//总的学生个数!!
int flag=0;
函数:
nt shanchu()
{
sum=n+m-s;
if(sum==0)
{
printf("您得先录入,再删除~!笨!~\n");
getchar();
return 0;
}
char xuehao[20];
printf("请输入你要打开的文件名");
scanf("%s",&wenjianming);
if((fp=fopen(wenjianming,"rb+"))==NULL)
{
puts("the file can't be opened");
c++;
return 1;
}
printf("请输入要删除的人的学号:");
scanf("%s",xuehao);
for(i=0;i<sum;i++)
{
if(strcmp(stu[i].num,xuehao)==0)
{
printf("%s %s %s %s %s %s\n",stu[i].num,stu[i].name,stu[i].shuxue,stu[i].yingyu,stu[i].wuli,stu[i].jisuanji);
for(k=i;k<sum-1;k++)
{
strcpy(stu[k].num,stu[k+1].num );
strcpy(stu[k].name ,stu[k+1].name );
strcpy(stu[k].shuxue ,stu[k+1].shuxue );
strcpy(stu[k].wuli,stu[k+1].wuli );
strcpy(stu[k].yingyu,stu[k+1].yingyu );
strcpy(stu[k].jisuanji,stu[k+1].jisuanji );
}
break;
}
}
fclose(fp);
s++;
printf("删除后的数据:\n");
for(i=0;i<sum-s;i++)
{
printf("%s %s %s %s %s %s\n",stu[i].num,stu[i].name,stu[i].shuxue,stu[i].yingyu,stu[i].wuli,stu[i].jisuanji);
fprintf(fp,"%s %s %s %s %s %s\n",stu[i].num,stu[i].name,stu[i].shuxue,stu[i].yingyu,stu[i].wuli,stu[i].jisuanji);
}
fclose(fp);
printf("删除成功!\n");
return 0;
你在fprintf之前已经关闭文件了,应该用写模式打开文件。
fp = fopen( wenjianming, "wb+" )追问这样就可以了?
追答最后一个for循环前面那个fclose(fp)什么意思。
还要他们说的
scanf("%s",wenjianming);
改了先试试看吧
那要怎么改呀,把&去掉就可以了?