//略有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请见谅
温馨提示:答案为网友推荐,仅供参考