C语言实验题,文件方面知识没学好,望大神帮忙:

学生成绩管理系统是一个非常实用的程序,如果能够把用户输入的数据存盘,下次运行时读出,就更有用了。
某班有最多不超过30人(具体人数由键盘输入)参加期末考试,考试科目为数学(MT)、英语(EN)和物理(PH)。,即编程实现如下菜单驱动的学生成绩管理系统:
(1)录入每个学生的学号、姓名和各科考试成绩;
(2)计算每门课程的总分和平均分;
(3)计算每个学生的总分和平均分;
(4)按每个学生的总分由高到低排出名次表;
(5)按每个学生的总分由低到高排出名次表;
(6)按学号由小到大排出成绩表;
(7)按姓名的字典顺序排出成绩表;
(8)按学号查询学生排名及其考试成绩;
(9)按姓名查询学生排名及其考试成绩;
(10)按优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)5个类别,对每门课程分别统计每个类别的人数以及所占的百分比;
(11)输出每个学生的学号、姓名、各科考试成绩,以及每门课程的总分和平均分;
(12)将每个学生的记录信息写入文件;
(13)从文件中读出每个学生的记录信息并显示。

第1个回答  2014-06-08
太晚了,只帮你把程序架起来了,你自己先往里填代码吧,关于文件的库函数调用也很简单的,
fopen(),fwrite();fread(),fclose(),FILE *文件指针等 ,你要是在linux下边更方便 ,man 这几个函数名就能看到原型,要不你下载一个C库函数大全的PDF,找到文件操作那一节,找到这几个函数原型,其中要注意的几项提醒你一下,在打开文件的时候,有几个参数的选项,像打开标志和打开模式等等,其实我要是完全帮你做了,一点意义都没有。

#include<stdio.h>

enum MENU_ACT{ INPUT=1,TOTAL_LES,AVR_LES,TOTAL_STU,AVR_STU,SORT_H,SORT_L,SORT_ID,SORT_N,SEARCH_ID,SEARCH_NAME,TONGJI,SAVE,READFILE };

struct students
{
int id;
char name[16];
float mt;
float en;
float ph;
} ;

void do_input();
void do_total_lession();
void do_avrage_lession();
void do_total_students();
void do_avrage_students();
void do_sort_high_to_low();
void do_sort_low_to_high();
void do_sort_student_id();
void do_sort_student_name();
void do_search_by_id();
void do_search_by_name();
void do_statistics();
void do_save();
void do_read_from_file();

void do_input()
{

}

void do_total_lession()
{

}

void do_avrage_lession()
{

}

void do_total_students()
{

}

void do_avrage_students()
{

}

void do_sort_high_to_low()
{

}

void do_sort_low_to_high()
{

}

void do_sort_student_id()
{

}

void do_sort_student_name()
{

}

void do_search_by_id()
{

}

void do_search_by_name()
{

}

void do_statistics()
{

}

void do_save()
{

}

void do_read_from_file()
{

}

int main(void)
{
int cmd;

while(1)
{
putchar('\n');
printf("*****************************************************\n");
printf("* 录入:1, 计算每门课程总分:2 计算每门课程平均分:3\n");
printf("* 计算每个学生的总分:4, 计算每个学生的平均分:5 \n");
printf("* 按每个学生的总分由高到低排出名次:6\n");
printf("* 按每个学生的总分由低到高排出名次:7\n");
printf("* 按学号由小到大排出成绩表:8\n");
printf("* 按姓名的字典顺序排出成绩表:9\n");
printf("* 按学号查询学生排名及其考试成绩:10\n");
printf("* 按姓名查询学生排名及其考试成绩:11\n");
printf("* 按优秀(90-100),良好(80-89),中等(70-79),及格(60-69),不及格(0-59)\n");
printf("* 5个类别,对每门课程分别统计每个类别的人数和百分比 : 12\n");
printf("* 输出每个学生的学号、姓名、各科考试成绩、\n* 以及每门课程的总分和平均分 : 13\n");
printf("* 将每个学生的记录信息写入文件 : 14\n");
printf("* 从文件中读出每个学生的记录信息并显示 : 15 \n");
printf("* 退出系统:0 \n");
printf("*****************************************************\n\n");
printf("请参照上面的提示办入指令码并按回车键:\n");
scanf("%d",&cmd);
switch (cmd)
{
case INPUT : do_input();break;
case TOTAL_LES : do_total_lession();break;
case AVR_LES : do_avrage_lession();break;
case TOTAL_STU : do_total_students();break;
case AVR_STU : do_avrage_students();break;
case SORT_H : do_sort_high_to_low();break;
case SORT_L : do_sort_low_to_high();break;
case SORT_ID : do_sort_student_id();break;
case SORT_N : do_sort_student_name();break;
case SEARCH_ID : do_search_by_id();break;
case SEARCH_NAME : do_search_by_name();break;
case TONGJI : do_statistics();break;
case SAVE : do_save();break;
case READFILE : do_read_from_file();break;
case 0 : goto END;
default : break;
}
}

END:

return 0;
}本回答被提问者采纳
相似回答