利用所学数据文件知识,设计一综合实例:学生成绩管理系统。
该系统中的学生信息包括学号、姓名、8门课成绩(课程分别为:大学计算机、大学化学、大学物理、高等数学、外语、线性代数、C语言、马克思主义原理)。
该系统能够完成如下功能:
1.新建学生成绩数据文件,输入班级学生成绩保存到文件中。
2.统计:
(1)学生的总分及平均分;
(2)课程的平均分。
3.排序:按学号从高到低排序学生数据。
4.查找:输入一个学号或姓名,输出对应学生的学号、姓名、班级名次、各科成绩及平均成绩。
5.实现学生信息的维护功能,包括新增学生、学生删除(留级或退学)或修改学生信息。

部分源程序:
#include <stdio.h>
#include <unistd.h> /*声明access函数的头文件*/
#include <stdlib.h>
#include <string.h>
#define N 100 /*最多学生人数*/
#define M 8 /*课程门数*/
struct student
{
charno[10];
charname[20];
floatscore[M];
}stu[N];
int num=0; /*实际学生人数*/
void init(); /*系统初始化*/
void newfile(); /*创建数据文件*/
void read(); /*读取学生信息*/
void output(); /*输出学生信息*/
void preserve(); /*学生信息维护*/
void search(); /*查找*/
void sort(); /*排序*/
void save(); /*保存并退出系统*/
void init()
{
if(access("d:\\stu.dat",0))
/*判断学生成绩文件是否存在,函数原型包含在头文件“unistd.h”中*/
newfile(); /*文件不存则创建新数据文件*/
else
read(); /*若文件存在,则从文件中读取学生信息*/
}
void newfile()
{
inti,j;
FILE*fp;
if((fp=fopen("d:\\stu.dat","wb"))==NULL)
{
printf("文件创建失败!请重新运行程序。\n");
exit(0);
}
printf("请输入学生人数:");
scanf("%d",&num);
getchar(); /*吃掉回车符*/
for(i=0;i<num;i++)
{
printf("请输入第%d学生的学号:",i+1);
gets(stu[i].no);
printf("姓名:");
gets(stu[i].name);
for(j=0;j<M;j++)
{
printf("第%d成绩:",j+1);
scanf("%f",&stu[i].score[j]);
}
getchar();
}
for(i=0;i<num;i++)
fwrite(&stu[i],1,sizeof(structstudent),fp);
fclose(fp);
printf("你刚才输入的数据共有%d个学生成绩。详细数据为:\n",num);
output();
}
void read()
{
FILE*fp;
num=0;
fp=fopen("d:\\stu.dat","rb");
if(fp==NULL)
{
printf("文件打开失败!请重新运行程序。\n");
exit(0);
}
while(!feof(fp))
{
fread(&stu[num],1,sizeof(structstudent),fp);
num++;
}
fclose(fp);
printf("现在共有%d个学生成绩,初始数据为:\n",num--);
output();
}
void save()
{
int i;
FILE*fp;
if((fp=fopen("stu.dat","wb"))==NULL)
{
printf("文件创建失败!请重新运行程序。\n");
exit(0);
}
for(i=0;i<num;i++)
fwrite(&stu[i],1,sizeof(structstudent),fp);
fclose(fp);
}
int main( )
{
intchoice=1;
printf("欢迎使用本系统!!!\n");
input();
while(choice!=5)
{
printf(" ********************************\n");
printf(" * 主菜单 *\n");
printf(" * 1:学生信息维护 *\n");
printf(" * 2:学生成绩统计 *\n");
printf(" * 3:学生信息排序 *\n");
printf(" * 4:学生信息查找 *\n");
printf(" * 5:保存学生信息并退出 *\n");
printf(" ********************************\n");
printf(" 请选择:");
scanf("%d",&choice);
getchar();
switch(choice)
{
case 1:
preserve(); /*学生信息维护功能由读者自行设计编写*/
break;
case2:
statistics(); /*学生成绩统计功能由读者自行设计编写*/
break;
case3:
sort(); /*学生信息排序功能由读者自行设计编写*/
break;
case4:
search(); /*学生信息查找功能由读者自行设计编写*/
break;
case5:
save();
printf("谢谢使用本系统!\n");
break;
default:
printf("选择错误,请重新选择!\n");
}
}
return 0;
}

