1:学生成绩管理系统设计 学生成绩信息包括:学号,姓名,语文成绩、数学成绩、英语成绩。 主要功能: 1、 学生信息录入; 2、 学生信息浏览; 3、 信息查询(a 按学号查 b 按最高分查(查询每门课的最高分的同学信息)) 4、 信息排序(a 按总分排序(从高到低)b 按姓名排序 ) 5、 信息删除(给定学号,删除该学生信息) 6、 信息修改(给定学号,修改该学生信息) 7、 保存信息(把当前的结构体数组内容保存 8、 读取信息(从文件student.txt中把结构体数组的内容读到结构体数组中)
时间: 2023-11-27 09:51:36 浏览: 98
这个学生成绩管理系统可以使用C语言来设计,可以按照以下步骤来完成:
1. 定义结构体类型来存储学生信息,包括学号、姓名、语文成绩、数学成绩、英语成绩和总分。
```c
typedef struct {
int id; // 学号
char name[20]; // 姓名
int chinese; // 语文成绩
int math; // 数学成绩
int english; // 英语成绩
int total; // 总分
} Student;
```
2. 定义一个数组来存储多个学生信息,并定义一个计数器变量来记录当前存储的学生数量。
```c
#define MAX_STUDENTS 100 // 最大学生数
Student students[MAX_STUDENTS]; // 学生数组
int num_students = 0; // 学生数量计数器
```
3. 实现学生信息录入功能,通过scanf函数从控制台读取学生信息,并将其存储到学生数组中。
```c
void add_student() {
if (num_students >= MAX_STUDENTS) { // 数组已满
printf("学生数量已达到上限,无法添加新学生!\n");
return;
}
printf("请输入学生信息(学号 姓名 语文成绩 数学成绩 英语成绩):\n");
Student s;
scanf("%d %s %d %d %d", &s.id, s.name, &s.chinese, &s.math, &s.english);
s.total = s.chinese + s.math + s.english; // 计算总分
students[num_students++] = s; // 添加到数组中
printf("添加成功!\n");
}
```
4. 实现学生信息浏览功能,遍历学生数组并逐个打印学生信息。
```c
void show_students() {
if (num_students == 0) { // 数组为空
printf("暂时没有学生信息!\n");
return;
}
printf("学号\t姓名\t语文\t数学\t英语\t总分\n");
for (int i = 0; i < num_students; ++i) {
Student s = students[i];
printf("%d\t%s\t%d\t%d\t%d\t%d\n", s.id, s.name, s.chinese, s.math, s.english, s.total);
}
}
```
5. 实现信息查询功能,根据用户选择的查询条件进行查询,并打印符合条件的学生信息。
```c
void search_students() {
int choice;
printf("请选择查询方式:\n");
printf("1. 按学号查\n");
printf("2. 按最高分查\n");
scanf("%d", &choice);
if (choice == 1) { // 按学号查
int id;
printf("请输入要查询的学号:\n");
scanf("%d", &id);
for (int i = 0; i < num_students; ++i) {
Student s = students[i];
if (s.id == id) { // 找到了
printf("学号\t姓名\t语文\t数学\t英语\t总分\n");
printf("%d\t%s\t%d\t%d\t%d\t%d\n", s.id, s.name, s.chinese, s.math, s.english, s.total);
return;
}
}
printf("找不到该学生!\n");
} else if (choice == 2) { // 按最高分查
int max_chinese = 0, max_math = 0, max_english = 0;
for (int i = 0; i < num_students; ++i) {
Student s = students[i];
if (s.chinese > max_chinese) {
max_chinese = s.chinese;
}
if (s.math > max_math) {
max_math = s.math;
}
if (s.english > max_english) {
max_english = s.english;
}
}
printf("语文最高分为%d的学生有:\n", max_chinese);
for (int i = 0; i < num_students; ++i) {
Student s = students[i];
if (s.chinese == max_chinese) {
printf("%d\t%s\t%d\t%d\t%d\t%d\n", s.id, s.name, s.chinese, s.math, s.english, s.total);
}
}
printf("数学最高分为%d的学生有:\n", max_math);
for (int i = 0; i < num_students; ++i) {
Student s = students[i];
if (s.math == max_math) {
printf("%d\t%s\t%d\t%d\t%d\t%d\n", s.id, s.name, s.chinese, s.math, s.english, s.total);
}
}
printf("英语最高分为%d的学生有:\n", max_english);
for (int i = 0; i < num_students; ++i) {
Student s = students[i];
if (s.english == max_english) {
printf("%d\t%s\t%d\t%d\t%d\t%d\n", s.id, s.name, s.chinese, s.math, s.english, s.total);
}
}
} else {
printf("输入无效!\n");
}
}
```
6. 实现信息排序功能,根据用户选择的排序方式进行排序,并打印排序后的学生信息。
```c
void sort_students() {
int choice;
printf("请选择排序方式:\n");
printf("1. 按总分排序(从高到低)\n");
printf("2. 按姓名排序\n");
scanf("%d", &choice);
if (choice == 1) { // 按总分排序
for (int i = 0; i < num_students - 1; ++i) {
for (int j = 0; j < num_students - i - 1; ++j) {
if (students[j].total < students[j + 1].total) { // 交换
Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
printf("按总分排序后的学生信息如下:\n");
show_students();
} else if (choice == 2) { // 按姓名排序
for (int i = 0; i < num_students - 1; ++i) {
for (int j = 0; j < num_students - i - 1; ++j) {
if (strcmp(students[j].name, students[j + 1].name) > 0) { // 交换
Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
printf("按姓名排序后的学生信息如下:\n");
show_students();
} else {
printf("输入无效!\n");
}
}
```
7. 实现信息删除功能,根据用户输入的学号删除对应的学生信息。
```c
void delete_student() {
int id;
printf("请输入要删除的学生的学号:\n");
scanf("%d", &id);
for (int i = 0; i < num_students; ++i) {
if (students[i].id == id) { // 找到了
for (int j = i; j < num_students - 1; ++j) { // 删除
students[j] = students[j + 1];
}
num_students--;
printf("删除成功!\n");
return;
}
}
printf("找不到该学生!\n");
}
```
8. 实现信息修改功能,根据用户输入的学号修改对应的学生信息。
```c
void modify_student() {
int id;
printf("请输入要修改的学生的学号:\n");
scanf("%d", &id);
for (int i = 0; i < num_students; ++i) {
if (students[i].id == id) { // 找到了
printf("请输入新的学生信息(姓名 语文成绩 数学成绩 英语成绩):\n");
scanf("%s %d %d %d", students[i].name, &students[i].chinese, &students[i].math, &students[i].english);
students[i].total = students[i].chinese + students[i].math + students[i].english; // 重新计算总分
printf("修改成功!\n");
return;
}
}
printf("找不到该学生!\n");
}
```
9. 实现信息保存功能,将当前的学生数组内容保存到文件中。
```c
void save_students() {
FILE* fp = fopen("student.txt", "w");
if (fp == NULL) { // 打开文件失败
printf("打开文件失败!\n");
return;
}
for (int i = 0; i < num_students; ++i) {
fprintf(fp, "%d %s %d %d %d\n", students[i].id, students[i].name, students[i].chinese, students[i].math, students[i].english);
}
fclose(fp);
printf("保存成功!\n");
}
```
10. 实现信息读取功能,从文件中读取学生信息,并存储到学生数组中。
```c
void load_students() {
FILE* fp = fopen("student.txt", "r");
if (fp == NULL) { // 打开文件失败
printf("打开文件失败!\n");
return;
}
num_students = 0;
while (!feof(fp)) { // 读取文件内容
Student s;
fscanf(fp, "%d %s %d %d %d\n", &s.id, s.name, &s.chinese, &s.math, &s.english);
s.total = s.chinese + s.math + s.english;
students[num_students++] = s;
}
fclose(fp);
printf("读取成功!\n");
}
```
11. 编写主函数,根据用户输入的选项执行相应的功能。
```c
int main() {
int choice;
while (1) {
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("0. 退出程序\n");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student();
break;
case 2:
show_students();
break;
case 3:
search_students();
break;
case 4:
sort_students();
break;
case 5:
delete_student();
break;
case 6:
modify_student();
break;
case 7:
save_students();
break;
case 8:
load_students();
break;
case 0:
printf("谢谢使用!\n");
return 0;
default:
printf("输入无效,请重新输入!\n");
break;
}
}
}
```
以上是一个简单的学生成绩管理系统的设计,你可以根据自己的需求进行修改和完善。
阅读全文