修改成绩函数 void modify_grade() { char id[20]; printf("请输入要修改成绩的学生学号:"); scanf("%s", id); for (int i = 0; i < student_count; i++) { if (strcmp(id, students[i].id) == 0) { // 找到目标学生 printf("原成绩:%d,请输入新成绩:", students[i].grade); scanf("%d", &students[i].grade); printf("修改成功\n"); return; } } printf("找不到该学生,请重新输入\n"); }用了什么语句 解释代码
时间: 2024-04-26 20:25:35 浏览: 91
这是一个名为 modify_grade 的函数,它的作用是修改指定学生的成绩。函数中用到了以下语句:
- char id[20];:定义了一个字符数组 id,用于存储用户输入的学生学号。
- printf("请输入要修改成绩的学生学号:");:向用户输出提示信息,要求用户输入目标学生的学号。
- scanf("%s", id);:使用 scanf 函数读取用户输入的学号,并存储到 id 数组中。
- for (int i = 0; i < student_count; i++) { ... }:使用 for 循环遍历学生数组,查找与输入的学号相对应的学生。
- if (strcmp(id, students[i].id) == 0) { ... }:使用 strcmp 函数比较输入的学号和当前遍历到的学生的学号是否相等,如果相等则说明找到了目标学生。
- printf("原成绩:%d,请输入新成绩:", students[i].grade);:输出目标学生的原成绩,并提示用户输入新成绩。
- scanf("%d", &students[i].grade);:使用 scanf 函数读取用户输入的新成绩,并将其存储到目标学生的成绩属性中。
- printf("修改成功\n");:输出提示信息,说明修改操作成功。
- return;:退出函数,结束修改操作。
- printf("找不到该学生,请重新输入\n");:如果循环结束后仍然没有找到目标学生,则输出提示信息,告知用户输入的学号有误。
相关问题
可以帮我用c语言编写一个学生成绩管理系统吗?具体要求如下:用链表的形式保存学生信息和成绩信息。添加:增加一个或几个学生记录 删除:删除已录入的学生记录。 修改:根据输入的学号修改某一学生记录。 查询:根据输入的学号寻找某一学生记录。 排序:按平均成绩由高到低排序并输出名次表。 显示:输出所有需要补考的学生记录
好的,我可以帮您编写这个学生成绩管理系统。以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20 // 最大名字长度
#define MAX_ID_LEN 10 // 最大学号长度
#define MAX_GRADE_LEN 5 // 最大成绩长度
// 定义学生结构体
typedef struct student {
char name[MAX_NAME_LEN];
char id[MAX_ID_LEN];
float grade;
int is_makeup; // 是否需要补考,0表示不需要,1表示需要
struct student *next;
} student_t;
// 函数声明
student_t *create_student(char *name, char *id, float grade);
void add_student(student_t **head, student_t *new_student);
void delete_student(student_t **head, char *id);
void modify_student(student_t *head, char *id);
student_t *search_student(student_t *head, char *id);
void sort_students(student_t *head);
void show_makeup_students(student_t *head);
void show_all_students(student_t *head);
int main()
{
student_t *head = NULL;
// 添加学生
student_t *s1 = create_student("Tom", "10001", 80);
student_t *s2 = create_student("Jerry", "10002", 90);
student_t *s3 = create_student("Lucy", "10003", 85);
add_student(&head, s1);
add_student(&head, s2);
add_student(&head, s3);
// 删除学生
delete_student(&head, "10002");
// 修改学生
modify_student(head, "10001");
// 查询学生
student_t *s4 = search_student(head, "10003");
if (s4 != NULL) {
printf("Name: %s, ID: %s, Grade: %.2f\n", s4->name, s4->id, s4->grade);
}
// 排序
sort_students(head);
// 显示需要补考的学生
show_makeup_students(head);
// 显示所有学生
show_all_students(head);
return 0;
}
// 创建一个新学生
student_t *create_student(char *name, char *id, float grade)
{
student_t *new_student = (student_t *)malloc(sizeof(student_t));
strcpy(new_student->name, name);
strcpy(new_student->id, id);
new_student->grade = grade;
new_student->is_makeup = (grade < 60) ? 1 : 0;
new_student->next = NULL;
return new_student;
}
// 添加一个新学生
void add_student(student_t **head, student_t *new_student)
{
if (*head == NULL) {
*head = new_student;
} else {
student_t *current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = new_student;
}
}
// 删除一个学生
void delete_student(student_t **head, char *id)
{
student_t *current = *head;
student_t *previous = NULL;
while (current != NULL && strcmp(current->id, id) != 0) {
previous = current;
current = current->next;
}
if (current == NULL) {
printf("Student not found!\n");
return;
}
if (previous == NULL) {
*head = current->next;
} else {
previous->next = current->next;
}
free(current);
}
// 修改一个学生
void modify_student(student_t *head, char *id)
{
student_t *current = head;
while (current != NULL && strcmp(current->id, id) != 0) {
current = current->next;
}
if (current == NULL) {
printf("Student not found!\n");
return;
}
printf("Please input the new name: ");
scanf("%s", current->name);
printf("Please input the new grade: ");
scanf("%f", ¤t->grade);
current->is_makeup = (current->grade < 60) ? 1 : 0;
}
// 查询一个学生
student_t *search_student(student_t *head, char *id)
{
student_t *current = head;
while (current != NULL && strcmp(current->id, id) != 0) {
current = current->next;
}
if (current == NULL) {
printf("Student not found!\n");
return NULL;
} else {
return current;
}
}
// 按平均成绩由高到低排序
void sort_students(student_t *head)
{
student_t *current = head;
while (current != NULL) {
student_t *inner_current = current->next;
while (inner_current != NULL) {
if (current->grade < inner_current->grade) {
char temp_name[MAX_NAME_LEN];
char temp_id[MAX_ID_LEN];
float temp_grade = current->grade;
int temp_is_makeup = current->is_makeup;
strcpy(temp_name, current->name);
strcpy(temp_id, current->id);
current->grade = inner_current->grade;
current->is_makeup = inner_current->is_makeup;
strcpy(current->name, inner_current->name);
strcpy(current->id, inner_current->id);
inner_current->grade = temp_grade;
inner_current->is_makeup = temp_is_makeup;
strcpy(inner_current->name, temp_name);
strcpy(inner_current->id, temp_id);
}
inner_current = inner_current->next;
}
current = current->next;
}
}
// 显示需要补考的学生
void show_makeup_students(student_t *head)
{
student_t *current = head;
while (current != NULL) {
if (current->is_makeup) {
printf("Name: %s, ID: %s, Grade: %.2f\n", current->name, current->id, current->grade);
}
current = current->next;
}
}
// 显示所有学生
void show_all_students(student_t *head)
{
student_t *current = head;
while (current != NULL) {
printf("Name: %s, ID: %s, Grade: %.2f\n", current->name, current->id, current->grade);
current = current->next;
}
}
```
以上是一个简单的学生成绩管理系统,实现了添加、删除、修改、查询、排序和显示需要补考的学生等功能。您可以根据自己的实际需求进行修改和扩展。
c语言题目8:班级成绩管理系统 对一个有N个学生的班级,每个学生有M门课程。该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。功能要求: (1)本系统采用-一个结构体数组,每个数据的结构应当包括:学号、姓名、M门课程名称。 (2)本系统显示这样的菜单: 请选择系统功能项: a、成绩录入 b、成绩显示 C、成绩保存 d、成绩排序 e、成绩修改(要 求先输入密码) f、成绩统计 1)显示每门课程成绩最高的学生的基本信息 2)显示每门课程的平均成绩 3)显示超过某门课程平均成绩的学生人数 g、退出系统 (3)执行一个具体的功能之后,程序将重新显示菜单。 (4)将学生成绩保存到文件中。
这是一个比较典型的C语言程序设计题目,需要考虑数据结构设计、文件读写和菜单实现等方面。下面是一个简单的程序框架,供参考:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100
#define MAX_COURSES 10
#define MAX_NAME_LEN 20
#define MAX_ID_LEN 10
#define MAX_PASSWD_LEN 10
// 学生结构体
typedef struct student {
char id[MAX_ID_LEN]; // 学号
char name[MAX_NAME_LEN]; // 姓名
float grades[MAX_COURSES]; // 成绩数组
} student_t;
// 成绩统计结构体
typedef struct stats {
float max_grades[MAX_COURSES]; // 每门课程的最高成绩
float avg_grades[MAX_COURSES]; // 每门课程的平均成绩
int count_above_avg[MAX_COURSES]; // 超过平均成绩的学生数
} stats_t;
// 全局变量
student_t students[MAX_STUDENTS]; // 学生数组
int num_students = 0; // 学生数目
char passwd[MAX_PASSWD_LEN]; // 修改密码
stats_t stats; // 成绩统计信息
// 函数声明
void input_grades();
void display_grades();
void save_grades();
void sort_grades();
void modify_grades();
void show_stats();
int main() {
// 初始化成绩统计信息
memset(&stats, 0, sizeof(stats_t));
// 主循环
while (1) {
// 显示菜单
printf("请选择系统功能项:\n");
printf("a、成绩录入\nb、成绩显示\nC、成绩保存\nd、成绩排序\ne、成绩修改(要求先输入密码)\nf、成绩统计\n");
printf("g、退出系统\n");
// 读取用户输入
char choice;
scanf("%c", &choice);
getchar(); // 消耗回车符
// 根据用户选择执行对应的操作
switch (choice) {
case 'a':
input_grades();
break;
case 'b':
display_grades();
break;
case 'C':
save_grades();
break;
case 'd':
sort_grades();
break;
case 'e':
modify_grades();
break;
case 'f':
show_stats();
break;
case 'g':
printf("Goodbye!\n");
return 0;
default:
printf("Invalid choice!\n");
break;
}
}
}
// 录入成绩
void input_grades() {
printf("请输入学生数目:");
scanf("%d", &num_students);
// 逐个录入学生信息
for (int i = 0; i < num_students; i++) {
printf("请输入第%d个学生的学号:", i+1);
scanf("%s", students[i].id);
printf("请输入第%d个学生的姓名:", i+1);
scanf("%s", students[i].name);
for (int j = 0; j < MAX_COURSES; j++) {
printf("请输入第%d个学生的第%d门课程成绩:", i+1, j+1);
scanf("%f", &students[i].grades[j]);
// 更新成绩统计信息
if (students[i].grades[j] > stats.max_grades[j]) {
stats.max_grades[j] = students[i].grades[j];
}
stats.avg_grades[j] += students[i].grades[j];
}
}
// 计算平均成绩
for (int j = 0; j < MAX_COURSES; j++) {
stats.avg_grades[j] /= num_students;
}
}
// 显示成绩
void display_grades() {
printf("学号\t姓名\t");
for (int j = 0; j < MAX_COURSES; j++) {
printf("课程%d\t", j+1);
}
printf("\n");
for (int i = 0; i < num_students; i++) {
printf("%s\t%s\t", students[i].id, students[i].name);
for (int j = 0; j < MAX_COURSES; j++) {
printf("%.2f\t", students[i].grades[j]);
}
printf("\n");
}
}
// 保存成绩到文件
void save_grades() {
FILE *fp = fopen("grades.dat", "wb");
if (fp == NULL) {
printf("Cannot open file!\n");
return;
}
fwrite(students, sizeof(student_t), num_students, fp);
fclose(fp);
printf("Save grades to file successfully!\n");
}
// 从文件读取成绩
void load_grades() {
FILE *fp = fopen("grades.dat", "rb");
if (fp == NULL) {
printf("Cannot open file!\n");
return;
}
num_students = fread(students, sizeof(student_t), MAX_STUDENTS, fp);
fclose(fp);
printf("Load grades from file successfully!\n");
}
// 按成绩排序
void sort_grades() {
// TODO: 实现排序算法
printf("Sort grades successfully!\n");
}
// 修改成绩
void modify_grades() {
printf("请输入修改密码:");
scanf("%s", passwd);
if (strcmp(passwd, "123456") != 0) {
printf("密码错误,不能修改成绩!\n");
return;
}
printf("请输入要修改成绩的学生的学号:");
char id[MAX_ID_LEN];
scanf("%s", id);
int found = 0;
for (int i = 0; i < num_students; i++) {
if (strcmp(students[i].id, id) == 0) {
printf("请输入新的成绩:");
scanf("%f", &students[i].grades[0]); // 假设只修改第一门课程的成绩
found = 1;
break;
}
}
if (!found) {
printf("找不到该学生的成绩!\n");
}
}
// 显示成绩统计信息
void show_stats() {
printf("每门课程成绩最高的学生信息:\n");
for (int j = 0; j < MAX_COURSES; j++) {
float max_grade = 0;
int max_student_index = -1;
for (int i = 0; i < num_students; i++) {
if (students[i].grades[j] > max_grade) {
max_grade = students[i].grades[j];
max_student_index = i;
}
}
if (max_student_index >= 0) {
printf("课程%d: %s\t%s\t%.2f\n", j+1, students[max_student_index].id, students[max_student_index].name, max_grade);
}
}
printf("每门课程平均成绩:");
for (int j = 0; j < MAX_COURSES; j++) {
printf("课程%d: %.2f\t", j+1, stats.avg_grades[j]);
}
printf("\n");
printf("超过平均成绩的学生数:");
for (int j = 0; j < MAX_COURSES; j++) {
int count = 0;
for (int i = 0; i < num_students; i++) {
if (students[i].grades[j] > stats.avg_grades[j]) {
count++;
}
}
stats.count_above_avg[j] = count;
printf("课程%d: %d\t", j+1, count);
}
printf("\n");
}
```
需要注意的一些细节:
1. 学生数目和课程数目都是预先定义好的宏,可以根据实际情况进行调整。
2. 录入成绩时需要逐门课程输入,成绩统计信息也需要在录入时同时更新。
3. 保存成绩到文件时使用二进制文件格式,读取时使用相同的方式进行读取。
4. 成绩排序和成绩修改需要根据具体需求进行实现,本例中只提供了框架。
5. 成绩统计信息包括每门课程的最高成绩、平均成绩和超过平均成绩的学生数,需要在每次录入或修改成绩时更新。
阅读全文