用c语言设计一个简单的学生成绩管理系统。设有学生成绩文件student.txt,每位学生成绩信息包含学号(num)、姓名(name)、性别(sex)、出生日期(birthday,包括年、月、日,分别表示为year,month,day)、3门功课的成绩(高数、C语言、大学物理)、总分和平均分。设计程序,要求从文件student.txt中读出学生成绩表,之后参对成绩表进行如下操作: (1)建立学生成绩信息结构数组(从student.txt读入数据) (2)显示。即输出出所有成绩。 (3)添加。可添加一条或多条记录。 (4)排序。分为两个方面,按学号递增排序和按总分递减排序。 (5)查找。分为三方面:按学号查找、按姓名查找和按分数查找。 (6)计算。计算各门课的平均分数。 (7)保存。退出程序前将结果保存到studeng.txt。 2)要求 (1)设计一个简单的界面 (2)每一个功能设为一个模块
时间: 2023-12-14 11:36:05 浏览: 176
以下是一个简单的学生成绩管理系统的C语言实现,包括了所有要求的功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NUM 100 // 最大学生数
// 学生信息结构体
typedef struct {
char num[20]; // 学号
char name[20]; // 姓名
char sex[10]; // 性别
int year; // 出生年份
int month; // 出生月份
int day; // 出生日期
int math; // 高数成绩
int c; // C语言成绩
int phys; // 大学物理成绩
int total; // 总分
float avg; // 平均分
} Student;
// 学生数组
Student students[MAX_NUM];
int num_of_students = 0; // 学生数
// 读取学生信息文件
void read_student_file() {
FILE *fp;
fp = fopen("student.txt", "r");
if (fp == NULL) {
printf("无法打开文件!\n");
return;
}
while (!feof(fp)) {
fscanf(fp, "%s%s%s%d%d%d%d%d%d%d", students[num_of_students].num, students[num_of_students].name, students[num_of_students].sex, &students[num_of_students].year, &students[num_of_students].month, &students[num_of_students].day, &students[num_of_students].math, &students[num_of_students].c, &students[num_of_students].phys);
students[num_of_students].total = students[num_of_students].math + students[num_of_students].c + students[num_of_students].phys;
students[num_of_students].avg = students[num_of_students].total / 3.0;
num_of_students++;
}
fclose(fp);
printf("读取学生信息成功!\n");
}
// 显示所有学生信息
void show_all_students() {
printf("学号\t姓名\t性别\t出生日期\t高数\tC语言\t大学物理\t总分\t平均分\n");
for (int i = 0; i < num_of_students; i++) {
printf("%s\t%s\t%s\t%d-%d-%d\t%d\t%d\t%d\t%d\t%.2f\n", students[i].num, students[i].name, students[i].sex, students[i].year, students[i].month, students[i].day, students[i].math, students[i].c, students[i].phys, students[i].total, students[i].avg);
}
}
// 添加学生信息
void add_student() {
int n;
printf("请输入要添加的学生数:");
scanf("%d", &n);
if (num_of_students + n > MAX_NUM) {
printf("学生数已达到最大值!\n");
return;
}
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的信息(学号 姓名 性别 出生年月日 高数成绩 C语言成绩 大学物理成绩):", i + 1);
scanf("%s%s%s%d%d%d%d%d%d", students[num_of_students].num, students[num_of_students].name, students[num_of_students].sex, &students[num_of_students].year, &students[num_of_students].month, &students[num_of_students].day, &students[num_of_students].math, &students[num_of_students].c, &students[num_of_students].phys);
students[num_of_students].total = students[num_of_students].math + students[num_of_students].c + students[num_of_students].phys;
students[num_of_students].avg = students[num_of_students].total / 3.0;
num_of_students++;
}
printf("添加学生信息成功!\n");
}
// 按学号递增排序
void sort_by_num() {
for (int i = 0; i < num_of_students - 1; i++) {
for (int j = i + 1; j < num_of_students; j++) {
if (strcmp(students[i].num, students[j].num) > 0) {
Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
printf("按学号递增排序成功!\n");
}
// 按总分递减排序
void sort_by_total() {
for (int i = 0; i < num_of_students - 1; i++) {
for (int j = i + 1; j < num_of_students; j++) {
if (students[i].total < students[j].total) {
Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
printf("按总分递减排序成功!\n");
}
// 按学号查找
void search_by_num() {
char num[20];
printf("请输入要查找的学生学号:");
scanf("%s", num);
for (int i = 0; i < num_of_students; i++) {
if (strcmp(students[i].num, num) == 0) {
printf("学号\t姓名\t性别\t出生日期\t高数\tC语言\t大学物理\t总分\t平均分\n");
printf("%s\t%s\t%s\t%d-%d-%d\t%d\t%d\t%d\t%d\t%.2f\n", students[i].num, students[i].name, students[i].sex, students[i].year, students[i].month, students[i].day, students[i].math, students[i].c, students[i].phys, students[i].total, students[i].avg);
return;
}
}
printf("没有找到该学生!\n");
}
// 按姓名查找
void search_by_name() {
char name[20];
printf("请输入要查找的学生姓名:");
scanf("%s", name);
for (int i = 0; i < num_of_students; i++) {
if (strcmp(students[i].name, name) == 0) {
printf("学号\t姓名\t性别\t出生日期\t高数\tC语言\t大学物理\t总分\t平均分\n");
printf("%s\t%s\t%s\t%d-%d-%d\t%d\t%d\t%d\t%d\t%.2f\n", students[i].num, students[i].name, students[i].sex, students[i].year, students[i].month, students[i].day, students[i].math, students[i].c, students[i].phys, students[i].total, students[i].avg);
return;
}
}
printf("没有找到该学生!\n");
}
// 按分数查找
void search_by_score() {
int score;
printf("请输入要查找的分数:");
scanf("%d", &score);
int found = 0;
for (int i = 0; i < num_of_students; i++) {
if (students[i].total == score) {
printf("学号\t姓名\t性别\t出生日期\t高数\tC语言\t大学物理\t总分\t平均分\n");
printf("%s\t%s\t%s\t%d-%d-%d\t%d\t%d\t%d\t%d\t%.2f\n", students[i].num, students[i].name, students[i].sex, students[i].year, students[i].month, students[i].day, students[i].math, students[i].c, students[i].phys, students[i].total, students[i].avg);
found = 1;
}
}
if (!found) {
printf("没有找到该分数的学生!\n");
}
}
// 计算各门课平均分
void calculate_avg() {
float math_sum = 0, c_sum = 0, phys_sum = 0;
for (int i = 0; i < num_of_students; i++) {
math_sum += students[i].math;
c_sum += students[i].c;
phys_sum += students[i].phys;
}
float math_avg = math_sum / num_of_students;
float c_avg = c_sum / num_of_students;
float phys_avg = phys_sum / num_of_students;
printf("高数平均分:%.2f\n", math_avg);
printf("C语言平均分:%.2f\n", c_avg);
printf("大学物理平均分:%.2f\n", phys_avg);
}
// 保存学生信息到文件
void save_student_file() {
FILE *fp;
fp = fopen("student.txt", "w");
if (fp == NULL) {
printf("无法打开文件!\n");
return;
}
for (int i = 0; i < num_of_students; i++) {
fprintf(fp, "%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n", students[i].num, students[i].name, students[i].sex, students[i].year, students[i].month, students[i].day, students[i].math, students[i].c, students[i].phys);
}
fclose(fp);
printf("保存学生信息成功!\n");
}
// 显示菜单
void show_menu() {
printf("\n");
printf("***********************************\n");
printf(" 菜单 \n");
printf("***********************************\n");
printf("1. 显示所有学生信息\n");
printf("2. 添加学生信息\n");
printf("3. 按学号递增排序\n");
printf("4. 按总分递减排序\n");
printf("5. 按学号查找\n");
printf("6. 按姓名查找\n");
printf("7. 按分数查找\n");
printf("8. 计算各门课平均分\n");
printf("9. 保存学生信息到文件\n");
printf("0. 退出程序\n");
printf("***********************************\n");
}
int main() {
read_student_file();
while (1) {
show_menu();
int choice;
printf("请输入操作编号:");
scanf("%d", &choice);
switch (choice) {
case 1:
show_all_students();
break;
case 2:
add_student();
break;
case 3:
sort_by_num();
break;
case 4:
sort_by_total();
break;
case 5:
search_by_num();
break;
case 6:
search_by_name();
break;
case 7:
search_by_score();
break;
case 8:
calculate_avg();
break;
case 9:
save_student_file();
break;
case 0:
printf("程序已退出!\n");
return 0;
default:
printf("输入有误,请重新输入!\n");
break;
}
}
return 0;
}
```
阅读全文