使用c语言,设计一个简单的学生成绩管理系统。设有学生成绩文件student.txt,每位学生成绩信息包含学号(num)、姓名(name)、性别(sex)、出生日期(birthday,包括年、月、日,分别表示为year,month,day)、3门功课的成绩(高数、C语言、大学物理)、总分和平均分。设计程序,要求从文件student.txt中读出学生成绩表,之后参对成绩表进行如下操作: 查找。分为三方面:按学号查找、按姓名查找和按分数查找。
时间: 2023-07-10 08:19:56 浏览: 274
好的,以下是一个简单的学生成绩管理系统的设计,可以满足你的要求:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100 // 最多支持100个学生
typedef struct {
char num[10]; // 学号
char name[20]; // 姓名
char sex[5]; // 性别
int year, month, day; // 出生日期
int math, c_lang, physics; // 三门功课成绩
int total; // 总分
double average; // 平均分
} student;
student students[MAX_STUDENTS]; // 学生数组
int num_students = 0; // 学生数量
// 读取学生信息
void read_students() {
FILE *fp = fopen("student.txt", "r");
if (!fp) {
printf("打开文件失败!\n");
exit(1);
}
while (!feof(fp)) {
fscanf(fp, "%s %s %s %d-%d-%d %d %d %d\n",
students[num_students].num,
students[num_students].name,
students[num_students].sex,
&students[num_students].year,
&students[num_students].month,
&students[num_students].day,
&students[num_students].math,
&students[num_students].c_lang,
&students[num_students].physics);
students[num_students].total = students[num_students].math + students[num_students].c_lang + students[num_students].physics;
students[num_students].average = (double)students[num_students].total / 3.0;
num_students++;
}
fclose(fp);
}
// 按学号查找
void search_by_num(char *num) {
int i, found = 0;
for (i = 0; i < num_students; i++) {
if (strcmp(students[i].num, num) == 0) {
found = 1;
printf("学号:%s,姓名:%s,性别:%s,出生日期:%d-%d-%d,高数:%d,C语言:%d,大学物理:%d,总分:%d,平均分:%.2lf\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_lang, students[i].physics,
students[i].total, students[i].average);
}
}
if (!found) {
printf("未找到该学生!\n");
}
}
// 按姓名查找
void search_by_name(char *name) {
int i, found = 0;
for (i = 0; i < num_students; i++) {
if (strcmp(students[i].name, name) == 0) {
found = 1;
printf("学号:%s,姓名:%s,性别:%s,出生日期:%d-%d-%d,高数:%d,C语言:%d,大学物理:%d,总分:%d,平均分:%.2lf\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_lang, students[i].physics,
students[i].total, students[i].average);
}
}
if (!found) {
printf("未找到该学生!\n");
}
}
// 按分数查找
void search_by_score(int score) {
int i, found = 0;
for (i = 0; i < num_students; i++) {
if (students[i].total == score) {
found = 1;
printf("学号:%s,姓名:%s,性别:%s,出生日期:%d-%d-%d,高数:%d,C语言:%d,大学物理:%d,总分:%d,平均分:%.2lf\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_lang, students[i].physics,
students[i].total, students[i].average);
}
}
if (!found) {
printf("未找到该分数对应的学生!\n");
}
}
int main() {
read_students(); // 读取学生信息
// 交互式查询
int choice, score;
char query[20];
while (1) {
printf("请输入查询类型:\n");
printf("1. 按学号查询\n");
printf("2. 按姓名查询\n");
printf("3. 按分数查询\n");
printf("4. 退出程序\n");
scanf("%d", &choice);
if (choice == 4) {
break;
}
switch (choice) {
case 1:
printf("请输入学号:");
scanf("%s", query);
search_by_num(query);
break;
case 2:
printf("请输入姓名:");
scanf("%s", query);
search_by_name(query);
break;
case 3:
printf("请输入分数:");
scanf("%d", &score);
search_by_score(score);
break;
default:
printf("无效的输入!\n");
}
}
return 0;
}
```
以上代码会从文件student.txt中读取学生信息,之后提供交互式查询功能,支持按学号、姓名、分数三种方式查询学生信息。注意,这里只提供了最基本的功能,实际应用中可能需要更多的功能和优化。
阅读全文
相关推荐







