该楼层疑似违规已被系统折叠隐藏此楼查看此楼
printf("---Youhavesuccessreaddatafromfile!!!---\n");
returnh;/*返回头指针*/
}
/*追加记录到文件*/
voidappend()
{
FILE*fp;/*定义指向文件的指针*/
STUDENT*info;/*新记录指针*/
ints1,i;
charinfile[10];/*保存文件名*/
printf("\npleasenewrecord\n");
info=(STUDENT*)malloc(sizeof(STUDENT));/*申请空间*/
if(!info)
{
printf("\noutofmemory");/*没有申请到,内存溢出本函数结束*/
return;
}
inputs("enterno:",info->no,11);/*调用inputs输入学号*/
inputs("entername:",info->name,15);/*调用inputs输入姓名*/
printf("pleaseinput%dscore\n",N);/*提示输入成绩*/
s1=0;
for(i=0;i
{
do{
printf("score%d:",i+1);
scanf("%d",&info->score[i]);/*输入成绩*/
if(info->score[i]>100||info->score[i]<0)printf("baddata,repeatinput\n");
}while(info->score[i]>100||info->score[i]<0);/*成绩数据验证*/
s1=s1+info->score[i];/*求总分*/
}
info->sum=s1;/*保存总分*/
info->average=(float)s1/N;/*求均分*/
info->order=0;/*名次初始值为0*/
info->next=NULL;/*将新记录后继指针赋值为空*/
printf("Enterinfilename,forexamplec:\\f1\\te.txt:\n");scanf("%s",infile);/*输入文件名*/
if((fp=fopen(infile,"ab"))==NULL)/*向二进制文件尾增加数据方式打开文件*/
{
printf("cannotopenfile\n");/*显示不能打开*/
exit(1);/*退出程序*/
}
printf("\n-----Appendingrecord!-----\n");
if(1!=fwrite(info,sizeof(STUDENT),1,fp))/*写文件操作*/
{
printf("-----filewriteerror!-----\n");
return;/*返回*/
}
printf("-----appendsucess!!----\n");
fclose(fp);/*关闭文件*/
}
/*文件拷贝*/
voidcopy()
{
charoutfile[10],infile[10];
FILE*sfp,*tfp;/*源和目标文件指针*/
STUDENT*p=NULL;/*移动指针*/
clrscr();/*清屏*/
printf("Enterinfilename,forexamplec:\\f1\\te.txt:\n");
scanf("%s",infile);/*输入源文件名*/
if((sfp=fopen(infile,"rb"))==NULL)/*二进制读方式打开源文件*/
{
printf("cannotopeninputfile\n");
exit(0);
}
printf("Enteroutfilename,forexamplec:\\f1\\te.txt:\n");/*提示输入目标文件名*/
scanf("%s",outfile);/*输入目标文件名*/
if((tfp=fopen(outfile,"wb"))==NULL)/*二进制写方式打开目标文件*/
{
printf("cannotopenoutputfile\n");
exit(0);
}
while(!feof(sfp))/*读文件直到文件尾*/
{
if(1!=fread(p,sizeof(STUDENT),1,sfp))
break;/*块读*/
fwrite(p,sizeof(STUDENT),1,tfp);/*块写*/
}
fclose(sfp);/*关闭源文件*/
fclose(tfp);/*关闭目标文件*/
printf("youhavesuccesscopyfile!!!\n");/*显示成功拷贝*/
}
/*排序*/
STUDENT*sort(STUDENT*h)
{
inti=0;/*保存名次*/
STUDENT*p,*q,*t,*h1;/*定义临时指针*/
h1=h->next;/*将原表的头指针所指的下一个结点作头指针*/
h->next=NULL;/*第一个结点为新表的头结点*/
while(h1!=NULL)/*当原表不为空时,进行排序*/
{
t=h1;/*取原表的头结点*/
h1=h1->next;/*原表头结点指针后移*/
p=h;/*设定移动指针p,从头指针开始*/
q=h;/*设定移动指针q做为p的前驱,初值为头指针*/
while(t->sumsum&&p!=NULL)/*作总分比较*/
{
q=p;/*待排序点值小,则新表指针后移*/
p=p->next;
}
if(p==q)/*p==q,说明待排序点值大,应排在首位*/
{
t->next=p;/*待排序点的后继为p*/
h=t;/*新头结点为待排序点*/