| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
- #include<stdio.h>
 
 - #include<string.h>
 
 - #include<stdlib.h>
 
 - //数据结构定义
 
 - #define MAX_STU_NUM 30//最大学生人数
 
 - #define MAX_SUB_NUM 6//最大科目数
 
 - #define MAX 100
 
 - char *subject_name[MAX_SUB_NUM];//储存课程的名称
 
 - typedef struct {
 
 -     int num;//学号
 
 -     char name[MAX];//姓名
 
 -     int score[MAX_SUB_NUM];//成绩
 
 -     int sum;//各科成绩总分
 
 -     int des_score_rank;//降序按总分排序的名次
 
 -     int aec_score_rank;//升序按总分排序的名次
 
 -     int aec_num_rank;//升序按学号排序的名次
 
 -     int name_rank;//按名字字典顺序排序的名次
 
 - } STUDENT;
 
 - typedef struct {
 
 -     int A;//优秀
 
 -     int B;//良好
 
 -     int C;//中等
 
 -     int D;//及格
 
 -     int F;//不及格
 
 -     double Arate;
 
 -     double Brate;
 
 -     double Crate;
 
 -     double Drate;
 
 -     double Frate;
 
 - } EvaluateCourse[MAX_SUB_NUM];
 
  
- //函数原型
 
 - void InputRecord(STUDENT stu[], int *num, int *subnum);//录入学生的学号、姓名和各科考试成绩
 
 - void CalculateCourse(STUDENT stu[], int num, int subnum, int course_sum[], double course_average[]);//计算每门课程的总分和平均分
 
 - void CalculateStudent(STUDENT stu[], int num, int subnum, double stu_course_ave[]);//计算每个学生的总分和平均分
 
 - void DesSortScore(STUDENT stu[], int num, int subnum);//按每个学生的总分由高到低排出名次表
 
 - void AscSortScore(STUDENT stu[], int num, int subnum);//按每个学生的总分由低到高排出名次表
 
 - void AesSortNum(STUDENT stu[], int num, int subnum);//按学号由小到大排出成绩表
 
 - void SortName(STUDENT stu[], int num, int subnum);//按姓名的字典顺序排出成绩表
 
 - void NumSearch(STUDENT stu[], int num, int subnum);//按学号查询学生排名及其考试成绩
 
 - void NameSearch(STUDENT stu[], int num, int subnum);//按姓名查询学生排名及其考试成绩
 
 - void JudgeScore(STUDENT stu[], int num,
 
 -                 int subnum);//按优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)5个类别,对每门课程分别统计每个类别的人数以及所占的百分比
 
 - void OutputStuInfo(STUDENT stu[], int num, int subnum, int course_sum[],
 
 -                    double course_average[]);//输出每个学生的学号、姓名、各科考试成绩,以及每门课程的总分和平均分
 
 - void WriteToFile(STUDENT stu[], int num, int subnum,int course_sum[],double course_average[]);//将每个学生的记录信息写入文件
 
 - void ReadFromFile(STUDENT stu[], int *num, int *subnum);//从文件中读出每个学生的记录信息并显示
 
 - int main() {
 
 -     int cmd;
 
 -     int num, subnum;
 
 -     int course_sum[MAX_SUB_NUM]={-1};
 
 -     double course_average[MAX_SUB_NUM]={-1};
 
 -     double stu_course_ave[MAX_STU_NUM]={-1};
 
 -     STUDENT stu[MAX_STU_NUM];
 
 -     FILE *fp;
 
 -     do {
 
 -         printf("1.Input record\n"
 
 -                "2.Calculate total and average score of every course\n"
 
 -                "3.Calculate total and average score of every student\n"
 
 -                "4.Sort in descending order by total score of every student\n"
 
 -                "5.Sort in ascending order by total score of every student\n"
 
 -                "6.Sort in ascending order by number\n"
 
 -                "7.Sort in dictionary order by name\n"
 
 -                "8.Search by number\n"
 
 -                "9.Search by name\n"
 
 -                "10.Statistic analysis for every course\n"
 
 -                "11.List record\n"
 
 -                "12.Write to a file\n"
 
 -                "13.Read from a file\n"
 
 -                "0.Exit\n"
 
 -                "Please enter your choice:");
 
 -         scanf("%d", &cmd);
 
 -         switch (cmd) {
 
 -             case 0:
 
 -                 printf("退出系统成功!\n");
 
 -                 break;
 
 -             case 1:
 
 -                 InputRecord(stu, &num, &subnum);
 
 -                 break;
 
 -             case 2:
 
 -                 CalculateCourse(stu, num, subnum, course_sum, course_average);
 
 -                 break;
 
 -             case 3:
 
 -                 CalculateStudent(stu, num, subnum, stu_course_ave);
 
 -                 break;
 
 -             case 4:
 
 -                 DesSortScore(stu, num, subnum);
 
 -                 break;
 
 -             case 5:
 
 -                 AscSortScore(stu, num, subnum);
 
 -                 break;
 
 -             case 6:
 
 -                 AesSortNum(stu, num, subnum);
 
 -                 break;
 
 -             case 7:
 
 -                 SortName(stu, num, subnum);
 
 -                 break;
 
 -             case 8:
 
 -                 NumSearch(stu, num, subnum);
 
 -                 break;
 
 -             case 9:
 
 -                 NameSearch(stu, num, subnum);
 
 -                 break;
 
 -             case 10:
 
 -                 JudgeScore(stu, num, subnum);
 
 -                 break;
 
 -             case 11:
 
 -                 OutputStuInfo(stu, num, subnum, course_sum, course_average);
 
 -                 break;
 
 -             case 12:
 
 -                 WriteToFile(stu, num, subnum,course_sum,course_average);
 
 -                 break;
 
 -             case 13:
 
 -                 ReadFromFile(stu, &num, &subnum);
 
 -                 break;
 
 -             default:
 
 -                 printf("输入的数字不正确,请重新输入!\n");
 
  
-         }
 
 -     } while (cmd != 0);
 
 -     return 0;
 
 - }
 
 - void WriteToFile(STUDENT stu[], int num, int subnum,int course_sum[],double course_average[]) {
 
 -     int i,j;
 
 -     FILE *fp;
 
 -     fp = fopen("output.txt", "w");
 
 -     if (!fp) {
 
 -         printf("打开文件失败!\n");
 
 -         exit(-1);
 
 -     }
 
 -     printf("向文件中写入学生信息成功!\n");
 
 -     fprintf(fp,"%-10s%-10s","学号","姓名");
 
 -     for(i=0;i<subnum;i++)
 
 -     {
 
 -         fprintf(fp,"%-10s",subject_name[i]);
 
 -     }
 
 -     fprintf(fp,"\n");
 
 -     for (i = 0; i < num; i++) {
 
 -         fprintf(fp,"%-10d", stu[i].num);
 
 -         fprintf(fp,"%-10s", stu[i].name);
 
 -         for (j = 0; j < subnum; j++) {
 
 -             fprintf(fp,"%-10d",  stu[i].score[j]);
 
 -         }
 
 -         fprintf(fp,"\n");
 
 -     }
 
 -     if(course_sum[0]==-1)
 
 -     {
 
 -         fprintf(fp,"还没有计算课程总分及均分!\n");
 
 -         return;
 
 -     }
 
 -     else {
 
 -         fprintf(fp,"每门课程的总分和均分为:\n");
 
 -         fprintf(fp,"%-10s%-10s%-10s\n","学科","总分","均分");
 
 -         for (i = 0; i < subnum; i++) {
 
 -             fprintf(fp,"%-9s%-9d%-10.1lf\n", subject_name[i], course_sum[i],course_average[i]);
 
 -         }
 
 -     }
 
 -     fclose(fp);
 
 - }
 
  
- void ReadFromFile(STUDENT stu[], int *num, int *subnum) {
 
 -     FILE *fp;
 
 -     fp = fopen("data.txt", "r");
 
 -     if (!fp) {
 
 -         printf("打开文件失败!\n");
 
 -         exit(-1);
 
 -     }
 
 -     printf("从文件中读取学生信息成功!\n");
 
 -     int i, j;
 
 -     fscanf(fp, "%d%d", num, subnum);
 
 -     for (i = 0; i < *subnum; i++) {
 
 -         subject_name[i] = (char *) malloc(MAX * sizeof(char));
 
 -         fscanf(fp, "%s", subject_name[i]);
 
 -     }
 
 -     for (i = 0; i < *num; i++) {
 
 -         stu[i].des_score_rank = stu[i].aec_score_rank = stu[i].aec_num_rank = stu[i].name_rank = 0;//初始化排名
 
 -         fscanf(fp, "%d", &stu[i].num);
 
 -         fscanf(fp, "%s", stu[i].name);
 
 -         for (j = 0; j < *subnum; j++) {
 
 -             fscanf(fp, "%d", &stu[i].score[j]);
 
 -         }
 
 -     }
 
 -     printf("从文件中读取的学生信息如下:\n");
 
 -     printf("%-10s%-10s","学号","姓名");
 
 -     for(i=0;i<*subnum;i++)
 
 -     {
 
 -         printf("%-10s",subject_name[i]);
 
 -     }
 
 -     putchar('\n');
 
 -     for (i = 0; i < *num; i++) {
 
 -         printf("%-10d", stu[i].num);
 
 -         printf("%-10s", stu[i].name);
 
 -         for (j = 0; j < *subnum; j++) {
 
 -             printf("%-10d",  stu[i].score[j]);
 
 -         }
 
 -         putchar('\n');
 
 -     }
 
 -     fclose(fp);
 
 - }
 
  复制代码 |   
 
 
 
 |