student_system.c 文件下
#include <stdio.h>
#include <string.h>
#include "input_output.c" // 用文件包含连接各程序文件模块
#include "computing.c"
#include "update.c"
#include "search.c"
#define MaxSize 50
int Count = 0; // 全局变景,记录当前学生总数
typedef struct // 学生信息结构定义
{
int num; // 学号
char name[10]; // 姓名
int computer, english, math; // 3门课程成绩、计算机、英语、数学
double average; // 个人平均成绩
} student;
int main(void)
{
student students[MaxSize]; // 定义学生信息结构数组
new_student(students); // 输入学生信息结构数组
output_student(students); // 显示输入的学生信息结构数组
average(students); // 计算每一个学生的平均成绩
sort(students); // 按学生的平均成绩排序
output_student(students); // 显示排序后的结构数组
modify(students); // 修改指定输人的学生信息
output_student(students); // 显示修改后的结构数组
return 0;
}
input_output.c 文件下
#include <stdio.h>
#include "student_system.c"
// 输入输出程序文件 input_output.c
extern int Count; // 外部变量声明
// extern struct student students[MaxSize];
void new_student(struct student students[]) // 新建学生信息的函数
{
printf("Input Count:"); // 输入总人数
scanf("%d", &Count);
printf("Input the student's number, name and course scores\n"); // 输入学生的编号、姓名和课程分数
for (int i = 0; i < Count; i++)
{
printf("No.%d:", i + 1);
scanf("%d %9s %d %d %d", &students[i].num, &students[i].name, &students[i].computer, &students[i].english, &students[i].math);
}
}
void output_student(struct student students[]) // 输出学生信息的函数
{
printf("num\t name\t computer\t english\t math\t average\n"); // 学号、姓名、计算机成绩、英语成绩、数学成绩、平均分
for(int i = 0; i < Count; i++)
{
printf("%d\t%s\t%d\t%d\t%d\t%.2lf\n", students[i].num, students[i].name, students[i].computer, students[i].english, students[i].math, students[i].average);
}
}
在computing.c下
// 计算程序文件 computing.c
extern int Count; // 外部变量声明
// extern struct student students[MaxSize];
void average(struct student students[]) // 计算个人平均成绩的函数
{
int i;
for (i = 0; i < Count; i++)
{
students[i].average = (students[i].math, students[i].english, students[i].computer) / 3.0;
}
}
在computing.c下
#include <stdio.h>
#include "student_system.c"
// 修改排序程序文件 update.c
extern int Count; // 外部变量声明
// extern struct student students[MaxSize];
void modify(struct student *p) // 修改学生成绩的函数
{
int i;
int num, course, score; // 学号、科目、新的分数
printf("Input the number of the students to be updated:"); // 输入要更新的学生学号
scanf("%d", &num);
printf("Choice the course: 1.math 2.english 3.computer:"); // 选择课程:1、数学 2、英语 3、计算机
scanf("%d", &course);
printf("Input the new score:"); // 输入新分数
scanf("%d", &score);
for(i = 0; i < Count; i++, p++) // 按学号查找
{
if (p -> num == num)
break;
}
if (i < Count)
{
switch (course) // 找到,修改成绩
{
case 1:
p -> math = score;
break;
case 2:
p -> english = score;
break;
case 3:
p -> computer = score;
break;
}
}
else
{
printf("-1\n"); // 无此学号
}
}
void sort(struct student students[]) // 平均成绩排序的函数
{
int i, j, index;
struct student temp; // 用于数据的交换
// 结构数组排序,选择排序法
for( i = 0; i < Count - 1; i++)
{
index = i;
for(j = i + 1; j < Count; j++)
{
if(students[j].average > students[index].average) // 比较平均成绩
{
index = j;
}
}
temp = students[index]; // 交换数组元素
students[index] = students[i];
students[i] = temp;
}
}
在search.下
#include <stdio.h>
#include "student_system.c"
// 查询程序文件 search.c
extern int Count; // 外部变量声明
void search_student(struct student students[]) // 查询学生信息的函数
{
int i, num;
printf("input students num:");
scanf("%d",num);
for(i = 0; i < Count; i++) // 按学号查找
{
if (students[i].num == num)
break;
}
printf("%d\t%s\t%d\t%d\t%d\t%.2lf\n", students[i].num, students[i].name, students[i].computer, students[i].english, students[i].math, students[i].average);
}
问题展示:
求解决方案方法