编写C语言成绩管理系统时遇到一个问题,输入函数在运行时自动循环,而且写入的内容无法存入文件。代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define LENGTH sizeof(struct Student)
#define FORM "%-11d%-5s%-5s%-5d%-12d%-12d%-12d%-12d%-12.2lf\n"
#define DATA st[i].id,st[i].name,st[i].gender,st[i].age,st[i].MathAna,st[i].LiAlg,st[i].Computer,st[i].English,st[i].GPA
struct Student{ //设置结构体变量,储存学生信息
int id; //学号
char name[10]; //姓名
char gender[10]; //性别
int age; //年龄
int MathAna; //数学分析成绩
int LiAlg; //高等代数成绩
int Computer; //程序设计成绩
int English; //大学英语成绩
double GPA; //平均学分绩GPA
};
struct Student st[100];
void menu(); //菜单
void input(); //输入学生信息
int main()
{
int n;
menu(); //调用菜单函数,显示菜单界面
scanf("%d",&n); //输入数字,进入不同功能
while(n)
{
switch(n){
case 1: input(); break;
default: break;
}
}
}
void menu() //该函数用于实现菜单界面
{
printf("\n\n\n\n");
printf("\t\t|***************学生信息管理系统***************|\n");
printf("\t\t|\t\t\t\t\t |\n");
printf("\t\t|\t\t 1.输入学生信息\t |\n");
printf("\t\t|\t\t 2.修改学生信息\t |\n");
printf("\t\t|\t\t 3.查询学生信息\t |\n");
printf("\t\t|\t\t 4.按GPA排序\t |\n");
printf("\t\t|\t\t 5.按性别统计\t |\n");
printf("\t\t|\t\t 6.按年龄统计\t |\n");
printf("\t\t|\t\t 7.显示挂科学生信息\t |\n");
printf("\t\t|\t\t 8.显示所有学生信息\t |\n");
printf("\t\t|\t\t 9.删除学生信息\t |\n");
printf("\t\t|\t\t 0.退出系统\t\t |\n");
printf("\t\t|\t\t\t\t\t |\n");
printf("\t\t|**********************************************|\n\n");
printf("请您选择操作(0-9):");
}
float GPA(int n) //该函数用于计算每门课的GPA
{
if(n>=90&&n<=100) return 4.0;
if(n>=86&&n<=89) return 3.7;
if(n>=83&&n<=85) return 3.3;
if(n>=80&&n<=82) return 3.0;
if(n>=76&&n<=79) return 2.7;
if(n>=73&&n<=75) return 2.3;
if(n>=70&&n<=72) return 2.0;
if(n>=66&&n<=69) return 1.7;
if(n>=63&&n<=65) return 1.3;
if(n>=60&&n<=62) return 1.0;
}
void input() //该函数用于输入学生信息
{
int i,m=0;
char ch;
FILE *fp;
if((fp=fopen("student information.txt","a+"))==NULL) //检查文件是否存在
{
printf("文件不存在!\n");
return;
}
while(!feof(fp)) //计算文件中的学生信息条数
{
if(fread(&st[m],LENGTH,1,fp)==1)
m++;
}
fclose(fp);
if(m==0) //若文件存在但没有信息,提示无记录
{
printf("文件中无记录\n");
}
if((fp=fopen("student information.txt","ab+"))==NULL)
{
printf("文件不存在!\n");
return;
}
printf("请输入学生信息: \n"); //判断是否输入学生信息
printf("学号:");
scanf("%d",&st[m].id);
for(i=0;i<m;i++) //检查要输入的学生信息是否已存在
if(st[i].id==st[m].id)
{
printf("该学生信息已录入,按任意键继续!");
getchar();
fclose(fp);
return;
}
printf("姓名:"); //输入学生信息
scanf("%s",st[m].name);
printf("性别:");
scanf("%s",st[m].gender);
printf("年龄:");
scanf("%d",&st[m].age);
printf("数学分析:");
scanf("%d",&st[m].MathAna);
printf("高等代数:");
scanf("%d",&st[m].LiAlg);
printf("程序设计:");
scanf("%d",&st[m].Computer);
printf("大学英语:");
scanf("%d",&st[m].English);
printf("GPA: ");
scanf("%.2lf",&st[m].GPA);
fprintf(fp,"%d,%s,%s,%d,%d,%d,%d,%d,%.2lf",st[m].id,st[m].name,st[m].gender,st[m].age,st[m].MathAna,st[m].LiAlg,st[m].Computer,st[m].English,st[m].GPA);
m++;
}