五学生,每人3门成绩,键盘输入学生号,姓名,三门成绩,算平均分,将原始数据和平均分保存磁盘study.txt

代码是什么??急用,谢谢啊!
用C写

//略有bug请见谅
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int i = 0;
struct student_info
{
int Num;
char Name[32];
int score[3];
int ave;
}stu[5],s;//当数组不够时候 出现溢出错误

void AddStuInfo();
void ShowStuInfo();
void SortStuInfo();
void DeleteStuInfo();

void main()//教师菜单
{
FILE *fp;
fp = fopen("student_info.txt","w");
start: printf("Please chose you want:\n");
printf("------------------------------------------------------------Teacher List\n");
printf("A-添加学生信息.\n");
printf("B-查看学生信息.\n");
printf("C-排序学生信息.(noFunction)\n");
printf("D-删除学生信息.(noFunction)\n");
printf("q-退出系统.\n");
char ch;
while(1)
{ ch = getchar();
if(ch>96&&ch<123)
{
switch(ch)
{
case 'a':AddStuInfo();

break;
case 'b':ShowStuInfo();
break;
case 'c':SortStuInfo();
break;
case 'd':DeleteStuInfo();
break;
case 'q':goto end;
default:

break;

}
printf("Input Invalid\n");
goto start;
}
}
end:printf("Exit teacher system!\n\n");
}
void AddStuInfo()//添加信息
{

printf("\ninput score of student :\n");
printf("-------------------------------------------\n");
printf("NO. NAME SCORE1 SCORE2 SCORE3\n");
printf("-------------------------------------------\n");

scanf("%d %s %d %d %d %d",&s.Num,s.Name,&s.score[0],&s.score[1],&s.score[2]);
s.ave = (s.score[0]+s.score[1]+s.score[2])/3;

//从文件读数据 得 i大小
FILE *fp;

if((fp = fopen("student_info.txt","r")) == NULL){printf("can't open file");exit(0);}
for(i = 0 ;fread(&stu[i],sizeof(struct student_info),1,fp)!=0;i++)
{
printf("\n%4d %-8s %4d %4d %4d %4d\n",stu[i].Num,stu[i].Name,
stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave);
}

fclose(fp);
int n = i;
fp = fopen("student_info.txt","w");
for(int i = 0;i<n;i++)
{fwrite(&stu[i],sizeof(struct student_info),1,fp);}
// fseek( fp, 0, SEEK_END);

if(fwrite(&s,sizeof(struct student_info),1,fp) != 1)
{
printf("file write error!");
exit (0);
}
fclose(fp);

}

void ShowStuInfo()//显示所有人信息
{
FILE *fp1;

fp1 = fopen("student_info.txt","r");
printf("\ninput score of student :\n");
printf("-------------------------------------------\n");
printf("NO. NAME SCORE1 SCORE2 SCORE3 AVE\n");
printf("-------------------------------------------\n");
for(i = 0 ;fread(&stu[i],sizeof(struct student_info),1,fp1)!=0;i++)
{
if(stu[i].Num!=0)
printf("\n%4d %-8s %4d %4d %4d %4d\n",stu[i].Num,stu[i].Name,
stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave);//类型不匹配的错误 }

}
fclose(fp1);
}

void SortStuInfo()//排序按学号No.
{
FILE *fp1;
fp1 = fopen("student_info.txt","r");
for(i = 0 ;fread(&stu[i],sizeof(struct student_info),1,fp1)!=0;i++);
int n_count= i;
int count = i;

student_info temp;
for(i = 0;i<n_count; i++)
{
for(int j = i+1;j<n_count;j ++)
{
if(stu[i].Num>stu[j].Num)
{
temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}
}
}

FILE *fp;//重写FILE 常用函数
fp = fopen("student_info.txt","w");
for(i = 0;i<count;i++)
{fwrite(&stu[i],sizeof(struct student_info),1,fp);}
fclose(fp);
printf("Sort Succeed!");

}

void DeleteStuInfo()//删除
{
int Del;
int count;

printf("the Num you want to Delete:");
scanf("%d",&Del);
FILE *fp1;
fp1 = fopen("student_info.txt","r");
{for(i = 0 ;fread(&stu[i],sizeof(struct student_info),1,fp1)!=0;i++)
{
if(stu[i].Num == Del)//找到需要删除的ID
{
stu[i].Num = 0;
}
}

}

fclose(fp1);
//将新Data写入文件,rewrite file;
FILE *fp;
fp = fopen("student_info.txt","w");
count =i ;
for(i = 0;i<count;i++)
{fwrite(&stu[i],sizeof(struct student_info),1,fp);}
fclose(fp);
}
//略有bug请见谅
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-17
#include<stdio.h>
#include<conio.h>
typedef struct
{
int Num;
char Name[32];
float Score[3];
float Average;
}STD_T;
void AddStuInfo();
void main()
{
char ch;
do
{
AddStuInfo();
printf("录入下一个学生成绩?(y/n) ");
ch = getch();
}
while(ch == 'y');
}

void AddStuInfo()
{
static int AddNum = 1;
STD_T std;
FILE *fp;
printf("\n=============录入学生%d的成绩========================\n",AddNum);
printf("输入学生%d的学号:",AddNum);
scanf("%d",&std.Num);
printf("输入学生%d的姓名:",AddNum);
scanf("%s",&std.Name);
printf("依次输入学生%d的三门课成绩(用空格间隔):",AddNum);
scanf("%f%f%f",&std.Score[0],&std.Score[1],&std.Score[2]);
printf("学生%d的平均分:%.2f",AddNum,std.Average =( std.Score[0]+std.Score[1]+std.Score[2] ) / 3);
printf("=====================================================\n");
fp = fopen("std.txt","a");
fprintf(fp,"==========学生%d成绩=========\n",AddNum);
fprintf(fp,"学号:%d\n",std.Num);
fprintf(fp,"姓名:%s\n",std.Name);
fprintf(fp,"第一门成绩:%.2f\n",std.Score[0]);
fprintf(fp,"第二门成绩:%.2f\n",std.Score[1]);
fprintf(fp,"第三门成绩:%.2f\n",std.Score[2]);
fprintf(fp,"平均分:%.2f\n",std.Average);
fclose(fp);
AddNum++;
}
相似回答