学分管理程序:设计一个学生的学分管理程序,学生人数自定,假设每位学生必须完成基础课50学分、专业课50学分、选修课24学分、人文类课程8学分和实验性课程20学分才能够毕业。因此在管理学分时,要考虑每个学分所属于的课程类别。
该程序应该具有下列功能:
1)由键盘读入学生信息并写盘;增
2)给定学号,显示该位学生的学分完成情况;查
3)给定某位学生的学号,修改该学生的学分情况;改
4)显示所有学生的学分完成情况;
5)统计已达到毕业要求的学生名单(自选)
【要求】:
1)学分信息应该包括学号、姓名、课程类别和学分等
2)考虑设计一个菜单,其中列出程序提供的功能,用户可以自由地选择其中的某项操作。
【提示】:
1)设计一个结构体类型和存储结构,用来保存学分信息;
2)将所有学生的学分信息存储在一个文件中,并根据用户的选择实现文件的读写操作。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct students
{
int num;//学号
char name[20];//姓名
int classes[5];//a[1]基础课,a[2]专业课,a[3]选修课,a[4]人文类课程,a[5]实验性课程
int trought;//是否通过,如果通过则为1,未通过为0
}a[100000];
int Scanf()//录入学生信息并存盘
{
FILE *f;//文件指针
if((f=fopen("d:\\数据文件夹\\学分管理系统.txt","w"))==NULL)//文件指针链接文件
{
printf(">-文件无法正常打开,程序终止-<\n");
exit(0);
}
printf(">-输入 0 信息录入终止-<\n");//提示信息
int x=1,i=0,j,t;
while(x!=0)//通过while循环输入学生信息,当输入学号为0时退出循环
{
printf("请输入学生的学号:");
scanf("%d",&x);
if(x==0)break;
a[i].num=x;
getchar();
printf("请输入学生的姓名:");
gets(a[i].name);
printf("请输入该名同学的5门课成绩:");
for(j=0;j<5;j++)
scanf("%d",&a[i].classes[j]);
if((a[i].classes[0]>=50)&&(a[i].classes[1]>=50)&&(a[i].classes[2]>=24)&&(a[i].classes[3]>=8)&&(a[i].classes[4]>=20))a[i].trought=1;
else a[i].trought=0;//假如符合毕业条件,trought记为1,不符合记为0
fwrite(&a[i],sizeof(struct students),1,f);//写盘,将a结构体数组中的信息存进文件中,每写一个学生信息存一次
i++;
}
fclose(f);//关闭文件
return 0;
}
int Find()//给定学号,查找某名同学的信息
{
FILE *f;//文件指针
if((f=fopen("d:\\数据文件夹\\学分管理系统.txt","r"))==NULL)//文件指针链接文件
{
printf("文件无法正常打开,程序终止\n");
exit(0);
}
int x,i,find=0,j;
printf("请输入查找学生的学号:"); //将要查找的学号存入x中
scanf("%d",&x);
for(i=0;!feof(f);i++)
{
fread(&a[i],sizeof(struct students),1,f);//每次读入一个同学的信息
if(x==a[i].num)//判断是否当前学号与需要查找的学号是否一致,如果一致,输出该同学的信息
{
printf("学号:%d\n",a[i].num);
printf("姓名:%s\n",a[i].name);
printf(">-基础课:%d--专业课:%d--选修课:%d--人文类课程:%d--实验性课程:%d-<\n",a[i].classes[0],a[i].classes[1],a[i].classes[2],a[i].classes[3],a[i].classes[4]);
find=1;
fclose(f);
return 0;
}
if(a[i].num==0){fclose(f);break;}//查找的学生信息为0时退出查找比对
}
if(find==0)printf(">-未查找到该学生信息-<\n"); //提示没有找到该同学的信息
fclose(f);//关闭文件
return 0;
}
int Modify()//给定学号,查找某名同学的信息,并做出修改
{
FILE *f,*p;//文件指针 ,f为读入文件指针,p为存入文件指针
if((f=fopen("d:\\数据文件夹\\学分管理系统.txt","r"))==NULL)//f文件指针链接文件
{
printf("文件无法正常打开,程序终止\n");
exit(0);
}
int x,i,j,find=0;
printf("请输入查找学生的学号:"); //将要查找的学号存入x中
scanf("%d",&x);
for(i=0;!feof(f);i++)
{
fread(&a[i],sizeof(struct students),1,f);//每次读入一个同学的信息
if(x==a[i].num)//判断是否当前学号与需要查找的学号是否一致,如果一致,输出改同学的信息
{
printf("请输入修改后的学生信息:\n");//提示信息
printf("请输入学生的学号:");//接收修改后的学生信息
scanf("%d",&x);
if(x==0)break;
a[i].num=x;
getchar();
printf("请输入学生的姓名:");
gets(a[i].name);
printf("请输入该名同学的5门课成绩:");
for(j=0;j<5;j++)
scanf("%d",&a[i].classes[j]);
if((a[i].classes[0]>=50)&&(a[i].classes[1]>=50)&&(a[i].classes[2]>=24)&&(a[i].classes[3]>=8)&&(a[i].classes[4]>=20))a[i].trought=1;
else a[i].trought=0;
find=1;//记录是否找到该学生的信息
}
if(a[i].num==0){fclose(f);break;}//查找的学生信息为0时退出查找比对
}
j=i-1;
fclose(f);
if((p=fopen("d:\\数据文件夹\\学分管理系统.txt","w"))==NULL)//p文件指针链接文件
{
printf(">-文件无法正常打开,程序终止-<\n");
exit(0);
}
for(i=0;!feof(p);i++)//通过循环将所有同学信息通过a结构体数组存入文件中
{
fwrite(&a[i],sizeof(struct students),1,p);
if(a[i].num==0){fclose(f);break;}//学生信息为0时退出查找比对
}
fclose(p);
if(find==0)printf(">-未查找到该学生信息-<"); //提示没有找到该同学的信息
return 0;
}
int According()//显示所有学生的学分完成情况
{
FILE *f;//文件指针
int i;
if((f=fopen("d:\\数据文件夹\\学分管理系统.txt","r"))==NULL)//文件指针链接文件
{
printf(">-文件无法正常打开,程序终止-<\n");
exit(0);
}
for(i=0;!feof(f);i++)
{
fread(&a[i],sizeof(struct students),1,f);//每次读入一个同学的信息
if(a[i].num==0){fclose(f);break;}
printf("学号:%d\t",a[i].num);
printf("姓名:%s\t",a[i].name);
printf(">-基础课:%d--专业课:%d--选修课:%d--人文类课程: %d--实验性课程: %d-<\n",a[i].classes[0],a[i].classes[1],a[i].classes[2],a[i].classes[3],a[i].classes[4]);
}
fclose(f);//关闭文件
return 0;
}
int View()//查看毕业名单
{
FILE *f;//文件指针
if((f=fopen("d:\\数据文件夹\\学分管理系统.txt","r"))==NULL)//文件指针链接文件
{
printf("文件无法正常打开,程序终止\n");
exit(0);
}
int i,j=0;
printf("达到毕业要求的学生名单为:\n");//提示信息
for(i=0;!feof(f);i++)
{
fread(&a[i],sizeof(struct students),1,f);//每次读入一个同学的信息
if(a[i].trought==1)//判断是否符合毕业要求
{
printf("%s ",a[i].name);
j++;
if(j==3){
printf("\n");
j=0;
}
}
}
printf("\n");
fclose(f);//关闭文件
return 0;
}
int main()
{
int x=-1;
printf(" ----------------------------------------\n");
printf(" | >菜单< |\n");
printf(" | 0.退出程序 |\n");
printf(" | 1.输入一个学生的成绩 |\n");
printf(" | 2.查找一名学生的学分完成状况 |\n");
printf(" | 3.修改一名学生的学分完成情况 |\n");
printf(" | 4.显示所有学生的学分完成情况 |\n");
printf(" | 5.查看达到毕业要求的学生名单 |\n");
printf(" ----------------------------------------\n");
while(x!=0)
{
printf("请输入您要使用的功能序号:");
scanf("%d",&x);
if(x==1)Scanf(); //输入
if(x==2)Find();//查找
if(x==3)Modify();//修改
if(x==4)According();//显示所有学生完成情况
if(x==5)View();//查看毕业名单
if(x==0)printf(">-程序终止,感谢您的使用!!!-<\n");
}
return 0;
}
Scanf函数运行结果
Find函数运行结果
Modify函数运行结果
According函数运行结果
View函数运行结果
代码纯属原创,不喜勿喷!!!