现有个学生系统程序!已经可以运行!但要求多文件编程!希望高手帮我拆开!谢谢!

NYNYC 2009-01-04 01:21:04
#include <stdio.h>
#include <stdlib.h>
#define SIZE 5
struct student/*结构体*/
{char name[10];
int num,xuefen;
int score[3];
float ave;
}stud[SIZE],work;
void main()

{void sortA(void);/*按平均分升序排列并存档*/
void sortB(void);/*按平均分降序排列并存档*/
void sortC(void);/*按学号升序排列并存档*/
void sortD(void);/*按学号降序排列并存档*/
void save(void);/*存档*/
int i,xuefen;
float sum[SIZE];
FILE *fp1;
for(i=0;i <SIZE;i++)
{scanf("%d %s %d %d %d",&stud[i].num,stud[i].name,&stud[i].score[0],&stud[i].score[1],&stud[i].score[2]);
sum[i]=stud[i].score[0]+stud[i].score[1]+stud[i].score[2];
stud[i].ave=sum[i]/3;
if(stud[i].score[0]>=60) stud[i].xuefen+=1;
if(stud[i].score[1]>=60) stud[i].xuefen+=1;
if(stud[i].score[2]>=60) stud[i].xuefen+=1;
}
save();
printf("please me number 0-3! 0:up by ave! 1:down by ave! 2up by NO! down NO!");
scanf("%d",&i);
switch(i)
{ case0:sortA();break;
case1:sortB();break;
case2:sortC();break;
case3:sortD();break;
}
fp1=fopen("scort.txt","rb");
printf("\n NO name score1 score2 score3 ave xuefen\n");
printf("-----------------------------------------------------------\n");
for(i=0;i <SIZE;i++)
{fread(&stud[i],sizeof(struct student),1,fp1);
printf("%3d %-10s %7d %7d %7d %8.2f %d\n",stud[i].num,stud[i].name,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].ave,stud[i].xuefen);

}

fclose(fp1);
}

=================================/*以下是SOVE SORTA B C D的定义*/================

void save(void)
{FILE *fp;
int i;
if((fp=fopen("student.txt","wb"))==NULL)
{printf("The file can't open\n");
return;
}
for(i=0;i <SIZE;i++)
if(fwrite(&stud[i],sizeof(struct student),1,fp)!=1)
{printf("file write error\n");
return;
}
fclose(fp);
}

void sortA(void)
{FILE *fp1,*fp2;
int i,j;
if((fp1=fopen("student.txt","rb"))==NULL)
{printf("the file cant open\n\n");
exit(0);
}
if((fp2=fopen("score.txt","wb"))==NULL)
{printf("the file cant open\n");
exit(0);
}
for(i=0;i <SIZE;i++)
if(fread(&stud[i],sizeof(struct student),1,fp1)!=1)
{printf("file read error\n");
exit(0);
}
for(i=0;i <SIZE;i++)
{for(j=i+1;j <SIZE;j++)
if(stud[i].ave <stud[j].ave)
{work=stud[i];
stud[i]=stud[j];
stud[j]=work;
}
fwrite(&stud[i],sizeof(struct student),1,fp2);
}
fclose(fp1);
fclose(fp2);
}
void sortB(void)
{FILE *fp1,*fp2;
int i,j;
if((fp1=fopen("student.txt","rb"))==NULL)
{printf("the file can't open\n");
exit(0);
}
if((fp2=fopen("scort.txt","wb"))==NULL)
{printf("the file can't open\n");
exit(0);
}
for(i=0;i <SIZE;i++)
if(fread(&stud[i],sizeof(struct student),1,fp1)!=1)
{printf("file read error\n");
exit(0);
}
for(i=0;i <SIZE;i++)
{for(j=i+1;j <SIZE;j++)
if(stud[i].ave>stud[i].ave)
{work=stud[i];
stud[i]=stud[j];
stud[j]=work;
}
fwrite(&stud[i],sizeof(struct student),1,fp2);
}
fclose(fp1);
fclose(fp2);

}
void sortC(void)
{FILE *fp1,*fp2;
int i,j;
if((fp1=fopen("student.txt","rb"))==NULL)
{printf("the file can't open\n");
exit(0);
}
if((fp2=fopen("scort.txt","wb"))==NULL)
{printf("the file can't open\n");
exit(0);
}
for(i=0;i <SIZE;i++)
if(fread(&stud[i],sizeof(struct student),1,fp1)!=1)
{printf("the file is error\n");
exit(0);
}
for(i=0;i <SIZE;i++)
{for(j=i+1;j <SIZE;j++)
if(stud[i].num <stud[j].num)
{work=stud[i];
stud[i]=stud[j];
stud[j]=work;
}
fwrite(&stud[i],sizeof(struct student),1,fp2);
}
fclose(fp1);
fclose(fp2);
}
void sortD(void)
{FILE *fp1,*fp2;
int i,j;
if((fp1=fopen("student.txt","rb"))==NULL)
{printf("the file can't open\n");
exit(0);
}
if((fp2=fopen("scort.txt","wb"))==NULL)
{printf("the file can't open\n");
exit(0);
}
for(i=0;i <SIZE;i++)
if(fread(&stud[i],sizeof(struct student),1,fp1)!=1)
{printf("the file read error\n");
exit(0);
}
for(i=0;i>SIZE;i++)
{for(j=i+1;j <SIZE;j++)
if(stud[i].num>stud[j].num)
{work=stud[i];
stud[i]=stud[j];
stud[j]=work;
}
fwrite(&stud[i],sizeof(struct student),1,fp2);
}
fclose(fp1);
fclose(fp2);
}
...全文
137 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
NYNYC 2009-02-15
  • 打赏
  • 举报
回复
已经OK了 谢谢各位!还不懂的加819112208.。
liuwg9999 2009-01-06
  • 打赏
  • 举报
回复
路过
NYNYC 2009-01-06
  • 打赏
  • 举报
回复
gaoshou 高手顶下啊!好急!!
NYNYC 2009-01-04
  • 打赏
  • 举报
回复
不是我奢侈 是老师要求啊!
高手帮我下拉!
谢谢!
submarine2007 2009-01-04
  • 打赏
  • 举报
回复
void sortA(void);/*按平均分升序排列并存档*/ // 忽悠

而且, 这样写4个sort不是很合理,如果有更多的需要排序的, 是不是就需要更多的函数呢?

每个文件放一个函数。。。这太奢侈了。。。
wh102035 2009-01-04
  • 打赏
  • 举报
回复
还有哪个排序,要一样写一个吗,写成一个函数就行了嘛,或者用个map,按谁排序就用做key..升降在循环的时候一下就控制了..

看的头大
wh102035 2009-01-04
  • 打赏
  • 举报
回复
囧,,,你的多文件编程是不是按平均分升序一个文件,按平均分降序一个文件,反正就是按你上面排序方式都生成一个文件
waizqfor 2009-01-04
  • 打赏
  • 举报
回复
既然自己有了思路了 就去解决吧 提醒一下就是接口问题要处理好 要不程序会出现连接错误(文件与文件之间) 做完出错了 再一起研究
colonet 2009-01-04
  • 打赏
  • 举报
回复
楼主很牛的啊,我是初学者。给你顶下
NYNYC 2009-01-04
  • 打赏
  • 举报
回复
就是每个文件放一个函数。。最后建立个工程文件做出个EXE程序。。
就这样!麻烦高手具体点告诉我!我比较苯

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧