学生成绩管理系统
studentinit.dat
001 jianyang computer 1 66 65 58
002 richard software 1 99 98 95
003 bachman computer 1 80 60 55
004 monika software 1 90 90 90
005 Jason computer 1 99 99 99
006 huaqiang computer 2 60 50 40
007 koyozi network 2 60 75 88
008 kaguna network 2 70 70 77
009 tim software 2 90 90 98
010 trump network 2 99 99 95
student.h
#define N 10
struct student{
char num [15];
char name[15];
char major[10];//compoter software network
int classno;//1~2
int score[3];
};
typedef struct student STU;
main.c
#include <stdio.h>
#include"student.h"
#include<string.h>
#include<stdlib.h>
FILE *fp=NULL;
int main()
{
fp=fopen("studentInit.dat","r+");
if(fp==NULL){
printf("cannot open file");
fclose(fp);
return 0;
}
printf("请输入功能编号,运行相应功能\n1.从文件中读入10个学生信息\n2.从文件中随机读取第n个(0<n<=9)学生的信息\n");
printf("3.输入班级与成绩要求进行查找\n4.所有学生每门课的最高分和分数最高的学生的姓名\n");
printf("5.所有学生按平均成绩从低到高进行简单选择排序\n6.对某个班级所有学生按平均成绩由高到低进行起泡排序");
printf("7.对某个专业的学生按某门课程成绩由低到高进行直接插入排序\n8.存储更新后的学生信息\n");
STU x[N];
for(int i=0;i<N;i++){
while(!feof(fp)){
fscanf(fp,"%s %s %s %d %d %d %d",x[i].num,x[i].name,x[i].major,&x[i].classno,
&x[i].score[0],&x[i].score[1],&x[i].score[2]);
}//数据已扫描到结构体数组x[N]
}
printf("%d\n",x[1].score[0]);
/*printf("%s %s %s %d %d %d %d",x[2].num,x[2].name,x[2].major,x[2].classno,
x[2].score[0],x[2].score[1],x[2].score[2]);*/
//Output(x+2);
return (0);
}
void Input(STU *p,int n){
fclose(fp);
fp=fopen("studentInit.dat","w");
for(int i=0;i<n;i++){
printf("输入第%d个学生的信息",(i+1));
scanf("%s %s %s %d %d %d %d",(p+i)->num,(p+i)->name,(p+i)->major,&p[i].classno,
(p+i)->score[0],(p+i)->score[1],(p+i)->score[2]);
}
for(int i=0;i<N;i++){
fputs((p+i)->num,fp);
fputc(' ',fp);
fputs((p+i)->name,fp);
fputc(' ',fp);
fputs((p+i)->major,fp);
fputc(' ',fp);
putw(p[i].classno,fp);
fputc(' ',fp);
putw((p+i)->score[0],fp);
fputc(' ',fp);
putw((p+i)->score[1],fp);
fputc(' ',fp);
putw((p+i)->score[2],fp);
fputc('\n',fp);
}
};
void formout(char *c,int length){
for(int i=0;i<length;i++){
if(c[i]!='\0'){
printf("%c",c[i]);
}
else{
printf(" ");
}
}
};
void Output(STU *p){
formout(p->num,15);
formout(p->name,15);
formout(p->major,10);
printf(" %d",p->classno);
printf(" %d %d %d",p->score[0],p->score[1],p->score[2]);
};
STU Fetch(int studentIndex){
puts("按学号(1)还是按姓名(2)查找");
};
void Search(STU *p,int classNO,char s,int scoreSum);
int Max(STU *p, int scoreIndex);
打个断点调试一下
主函数里修改见注释,供参考:
int main()
{
fp = fopen("studentInit.dat", "r+");
if (fp == NULL) {
printf("cannot open file");
//fclose(fp); 这行多余,如果文件打开不成功,不需要关闭文件 修改
return 0;
}
printf("请输入功能编号,运行相应功能\n1.从文件中读入10个学生信息\n2.从文件中随机读取第n个(0<n<=9)学生的信息\n");
printf("3.输入班级与成绩要求进行查找\n4.所有学生每门课的最高分和分数最高的学生的姓名\n");
printf("5.所有学生按平均成绩从低到高进行简单选择排序\n6.对某个班级所有学生按平均成绩由高到低进行起泡排序");
printf("7.对某个专业的学生按某门课程成绩由低到高进行直接插入排序\n8.存储更新后的学生信息\n");
STU x[N];
int i = 0; //修改
//for (int i = 0; i < N; i++) { 修改
while (!feof(fp)) {
fscanf(fp, "%s %s %s %d %d %d %d", x[i].num, x[i].name, x[i].major, &x[i].classno,
&x[i].score[0], &x[i].score[1], &x[i].score[2]);
i++;
}//数据已扫描到结构体数组x[N]
//} 修改
printf("%d\n", x[1].score[0]);
/*printf("%s %s %s %d %d %d %d",x[2].num,x[2].name,x[2].major,x[2].classno,
x[2].score[0],x[2].score[1],x[2].score[2]);*/
//Output(x+2);
return (0);
}