求助,我写的学生成绩管理程序缺一段文件存储和读取功能,不知怎么写文件函数
程序代码:
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<conio.h> #define N 20 int new_id=0; struct student { long id; char name[20]; float csheji; float gaoshu; float yingyu; float daishu; int mingci; float average; }; struct student stu[20]; void input(); void display(); void add(); void modify(); void del(); void find(); void average(); void sort(); void tongji(); void tongji()//分数段统计 { int i;float sum=0.00,float a1,a2,a3,a4; char m; do { for (i=0;i<new_id;i++) { sum+=stu[i].csheji; a1=sum/(i+1); } sum=0.00; for (i=0;i<new_id;i++) { sum+=stu[i].gaoshu; a2=sum/(i+1) ; } sum=0; for (i=0;i<new_id;i++) { sum+=stu[i].yingyu; a3=sum/(i+1); } sum=0; for (i=0;i<new_id;i++) { sum+=stu[i].daishu; a4=sum/(i+1); } int k,q=0,w=0,e=0,r=0,t=0; for(k=0;k<new_id;k++) { if(stu[k].csheji>=90) q++; else if(stu[k].csheji>=80) w++; else if(stu[k].csheji>=70) e++; else if (stu[k].csheji>=60) r++; else t++; } printf("C程序设计 100-90 %d人,89-80 %d人,79-70 %d人,69-60 %d人,60以下 %d人 平均分%.2f\n",q,w,e,r,t,a1); for(k=0,q=0,w=0,e=0,t=0,r=0;k<new_id;k++) { if(stu[k].gaoshu>=90) q++; else if(stu[k].gaoshu>=80) w++; else if(stu[k].gaoshu>=70) e++; else if (stu[k].gaoshu>=60) r++; else t++; } printf(" 高等数学 100-90 %d人,89-80 %d人,79-70 %d人,69-60 %d人,60以下 %d人 平均分%.2f\n",q,w,e,r,t,a2); for(k=0,q=0,w=0,e=0,r=0,t=0;k<new_id;k++) { if(stu[k].yingyu>=90) q++; else if(stu[k].yingyu>=80) w++; else if(stu[k].yingyu>=70) e++; else if (stu[k].yingyu>=60) r++; else t++; } printf(" 英语 100-90 %d人,89-80 %d人,79-70 %d人,69-60 %d人,60以下 %d人 平均分%.2f\n",q,w,e,r,t,a3); for(k=0,q=0,w=0,e=0,r=0,t=0;k<new_id;k++) { if(stu[k].daishu>=90) q++; else if(stu[k].daishu>=80) w++; else if(stu[k].daishu>=70) e++; else if (stu[k].daishu>=60) r++; else t++; } printf(" 线性代数 100-90 %d人,89-80 %d人,79-70 %d人,69-60 %d人,60以下 %d人 平均分%.2f\n",q,w,e,r,t,a4); scanf("%c",&m); } while(!m); } void input() { int i=0; char ch; do { printf("\t\t\t\t\n输入第%d个学员的信息\n",i+1); printf("\n输入学生学号:"); scanf("%d",&stu[i].id); printf("\n输入学员姓名:"); scanf("%s",&stu[i].name); printf("\n输入c程序设计成绩:"); {scanf("%f",&stu[i].csheji);} if(stu[i].csheji<0||stu[i].csheji>100) { printf("\n输入错误,请重新输入\n"); continue; } printf("\n输入高数成绩:"); scanf("%f",&stu[i].gaoshu); if(stu[i].gaoshu<0||stu[i].gaoshu>100) { printf("\n输入错误,请重新输入\n"); continue; } printf("\n输入英语成绩:"); scanf("%f",&stu[i].yingyu); if(stu[i].yingyu<0||stu[i].yingyu>100) { printf("\n输入错误,请重新输入\n"); continue; } printf("\n输入线性代数成绩:"); scanf("%f",&stu[i].daishu); if(stu[i].daishu<0||stu[i].daishu>100) { printf("\n输入错误,请重新输入\n"); continue; } printf("\n\n"); i++; new_id=i; printf("是否继续输入?(Y/N)"); printf("\n\n"); ch=getch(); } while(ch!='n'&&ch!='N'); } void display()//显示 { int i; char k; average(); sort(); do { printf("\t\t\t班级学员信息列表\n"); printf("学号 姓名 c程序设计 高数 英语 线性代数 平均值 名次\n"); for(i=0;i<new_id&&stu[i].name[0];i++) printf("%d %s %.2f %.2f %.2f %.2f %.2f %d\n",stu[i].id,stu[i].name,stu[i].csheji,stu[i].gaoshu,stu[i].yingyu,stu[i].daishu,stu[i].average,stu[i].mingci); printf("\n\n"); scanf("%c",&k); } while(!k); } void add()//添加 { char ch; do { printf("\n\t\t输入新插入学员信息\n"); printf("\n输入学生号:"); scanf("%d",&stu[new_id].id); printf("\n输入学员姓名:"); scanf("%s",&stu[new_id].name); printf("\n输入c语言成绩:"); scanf("%f",&stu[new_id].csheji); if(stu[new_id].csheji<0||stu[new_id].csheji>100) { printf("\n输入错误,请重新输入\n"); continue; } printf("\n输入高数成绩:"); scanf("%f",&stu[new_id].gaoshu); if(stu[new_id].gaoshu<0||stu[new_id].gaoshu>100) { printf("\n输入错误,请重新输入\n"); continue; } printf("\n输入英语成绩:"); scanf("%f",&stu[new_id].yingyu); if(stu[new_id].yingyu<0||stu[new_id].yingyu>100) { printf("\n输入错误,请重新输入\n"); continue; } printf("\n输入线性代数成绩:"); scanf("%f",&stu[new_id].daishu); if(stu[new_id].daishu<0||stu[new_id].daishu>100) { printf("\n输入错误,请重新输入\n"); continue; } printf("\n\n"); new_id=new_id+1; average(); sort(); printf("是否继续输入?(Y/N)"); printf("\n\n"); ch=getch(); } while(ch!='n'&&ch!='N'); } void modify()//修改 { int i; char str[20]; printf("输入要修改的学生姓名:"); scanf("%s",str); for(i=0;i<N;i++) if(!strcmp(stu[i].name,str)) { printf("\n 输入新插入学员的信息\n"); printf("\n 输入学生学号:"); scanf("%d",&stu[i].id); printf("\n 输入c语言成绩:"); scanf("%f",&stu[i].csheji); if(stu[i].csheji<0||stu[i].csheji>100) { printf("\n输入错误,请重新输入\n"); continue; } printf("\n 输入高数成绩:"); scanf("%f",&stu[i].gaoshu); if(stu[i].gaoshu<0||stu[i].gaoshu>100) { printf("\n输入错误,请重新输入\n"); continue;} printf("\n 输入英语成绩:"); scanf("%f",&stu[i].yingyu); if(stu[i].yingyu<0||stu[i].yingyu>100) { printf("\n输入错误,请重新输入\n"); continue; } printf("\n 输入线性代数成绩:"); scanf("%f",&stu[i].daishu); if(stu[i].daishu<0||stu[i].daishu>100) { printf("\n输入错误,请重新输入\n"); continue; } printf("\n\n"); sort(); break; } } void del()//删除 { int iid,i; printf("输入要删除学员的学号:"); scanf("%d",&iid); for(i=0;i<new_id;i++) { if(stu[i].id==iid) { if(i==new_id) new_id-=1; else { stu[i]=stu[new_id-1]; new_id-=1; } sort(); break; } } } void find()//查询 { int i; char str[20],k; do { printf("输入要查询的学生姓名:"); scanf("%s",str); for(i=0;i<N;i++) if(!strcmp(stu[i].name,str)) { average(); sort(); printf("学号 姓名 c程序设计 高数 英语 线性代数 平均值 名次\n"); printf("%d %s %.1f %.1f %.1f %.1f %.1f %d\n",stu[i].id,stu[i].name,stu[i].csheji,stu[i].gaoshu,stu[i].yingyu,stu[i].daishu,stu[i].average,stu[i].mingci); } k=getch(); } while(!k); } void sort()//排名 { struct student t; int i,j; float k; average(); for(i=0;i<N-1;i++) { k=1; for(j=1;j<N-i;j++) if(stu[j-1].average<stu[j].average) { t=stu[j]; stu[j]=stu[j-1]; stu[j-1]=t; } for(j=0;j<N;j++) { stu[j].mingci=k; ++k; } } } void average()//平均分 { int i; float t; for(i=0;i<N;i++) { t=stu[i].csheji+stu[i].gaoshu+stu[i].yingyu+stu[i].daishu; stu[i].average=t/4; } } void main() { int k,t=1; first: printf("\n 欢迎使用学生成绩管理系统 \n\n\n"); do { printf(" 1.录入学生成绩 \n"); printf(" 2.显示学生成绩 \n"); printf(" 3.添加学生成绩 \n"); printf(" 4.修改学生成绩 \n"); printf(" 5.删除学生成绩 \n"); printf(" 6.查询学生成绩 \n"); printf(" 7.成绩分数段 \n"); printf(" 8.退出 \n"); printf(" 请选择:\n\n"); printf(" 制作者:孟丹青 \n"); scanf("%d",&k); if(k>8||k<1) printf("输入有误,请重新输入^_^\n\n"); switch(k) { case 1:system("cls");input();system("cls");break; case 2:system("cls");display();break; case 3:system("cls");add();system("cls");break; case 4:system("cls");modify();system("cls");break; case 5:system("cls");del();system("cls");break; case 6:system("cls");find();break; case 7:system("cls");tongji();break; case 8:system("exit");exit(0); } }while(t); }