鱼C论坛

 找回密码
 立即注册
查看: 440|回复: 2

[C\C++] C语言求助,自己写不全,希望看看大佬的

[复制链接]
发表于 2024-4-24 19:02:06 | 显示全部楼层 |阅读模式
10鱼币
(1)信息维护:要求:学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息。
(2)信息查询:要求:查询时可实现按姓名查询、按学号查询
(3)成绩统计:要求:A输入任意的一个课程名(如数学)和一个分数段(如60--70),统计出在此分数段的学生情况。
(4)排序:能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果(使用表格的形式显示排序后的输出结果)(使用多种方法排序者,加分)
二、课程设计应完成的工作
1、整个系统均用C语言(C++)实现;
2、利用指针、结构体、链表来实现学生成绩的数据结构设计;
3、系统具有输入、显示、查询(查询时可实现按姓名查询、按学号查询)、删除、排序、插入,保存、读取基本功能;
4、系统的各个功能模块都用函数的形式来实现;
5、学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息;文件要求至少有十条记录;
6、可以输入任意的一个课程名(如数学)和一个分数段(如60--70),统计出在此分数段的学生情况;
7、能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果;
8、可以将学生信息从文件中读取出来。
9、至少采用文本菜单界面(如果能采用图形菜单界面更好)
10、写出课程设计报告。

最佳答案

查看完整内容

基本的设计方案,使用C语言来构建一个学生信息和成绩管理系统。 该系统将涵盖列出的所有要求,包括信息维护、查询、成绩统计、排序和数据持久化。 系统设计 数据结构设计:学生结构 (Student): 包含姓名、学号、以及课程成绩(可以使用结构体中的数组或者动态分配的课程成绩)。 链表节点 (Node): 包含一个 Student 结构体和指向下一个 Node 的指针。 主要功能模块: [*]增加学生信息 (addStudent): 向链表中添 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-24 19:02:07 | 显示全部楼层
基本的设计方案,使用C语言来构建一个学生信息和成绩管理系统。

该系统将涵盖列出的所有要求,包括信息维护、查询、成绩统计、排序和数据持久化。

系统设计

数据结构设计:学生结构 (Student): 包含姓名、学号、以及课程成绩(可以使用结构体中的数组或者动态分配的课程成绩)。

链表节点 (Node): 包含一个 Student 结构体和指向下一个 Node 的指针。

主要功能模块:

  • 增加学生信息 (addStudent): 向链表中添加新的学生记录。
  • 删除学生信息 (deleteStudent): 从链表中删除指定的学生记录。
  • 修改学生信息 (editStudent): 修改链表中现有的学生记录。
  • 按姓名查询 (searchByName): 在链表中查找特定姓名的学生。
  • 按学号查询 (searchByNumber): 在链表中查找特定学号的学生。
  • 成绩统计 (gradeStatistics): 统计指定课程中特定分数段的学生数量。
  • 排序 (sortStudents): 对学生在指定课程的成绩进行升序或降序排序。
  • 保存到文件 (saveToFile): 将学生数据保存到文件。
  • 从文件读取 (loadFromFile): 从文件中读取学生数据。

文件格式:使用文本文件保存数据,每条记录一行,字段之间用逗号隔开。

用户界面:使用命令行菜单来允许用户选择要执行的操作。

这里给出一些核心函数的伪代码/示例,:

定义学生结构体:
typedef struct {
    char name[50];
    char number[20];
    int mathGrade;
    int englishGrade;
    // 更多课程可以添加在这里
} Student;

typedef struct Node {
    Student data;
    struct Node* next;
} Node;
添加学生信息:
void addStudent(Node** head, Student newStudent) {
    Node* newNode = (Node*) malloc(sizeof(Node));
    newNode->data = newStudent;
    newNode->next = *head;
    *head = newNode;
}
保存到文件:
void saveToFile(Node* head, const char* filename) {
    FILE* file = fopen(filename, "w");
    Node* current = head;
    while (current != NULL) {
        fprintf(file, "%s,%s,%d,%d\n", current->data.name, current->data.number, 
                current->data.mathGrade, current->data.englishGrade);
        current = current->next;
    }
    fclose(file);
}
从文件读取:
void loadFromFile(Node** head, const char* filename) {
    FILE* file = fopen(filename, "r");
    Student temp;
    while (fscanf(file, "%49[^,],%19[^,],%d,%d\n", temp.name, temp.number, &temp.mathGrade, &temp.englishGrade) == 4) {
        addStudent(head, temp);
    }
    fclose(file);
}
请鱼油去测试每个功能确保正确性。

然后询问 @FishC 更具体的代码实现
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-24 21:17:47 | 显示全部楼层
不二如是 发表于 2024-04-24 21:16
基本的设计方案,使用C语言来构建一个学生信息和成绩 ...


以下是一个使用C语言实现学生信息和成绩管理系统的示例代码。该代码实现了上述提到的主要功能模块,并提供了一个简单的命令行菜单来与用户交互。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
    char name[50];
    char number[20];
    int mathGrade;
    int englishGrade;
} Student;

typedef struct Node {
    Student data;
    struct Node* next;
} Node;

void addStudent(Node** head, Student newStudent) {
    Node* newNode = (Node*) malloc(sizeof(Node));
    newNode->data = newStudent;
    newNode->next = *head;
    *head = newNode;
}

void deleteStudent(Node** head, char* number) {
    Node* current = *head;
    Node* previous = NULL;
    
    while (current != NULL) {
        if (strcmp(current->data.number, number) == 0) {
            if (previous == NULL) {
                *head = current->next;
            } else {
                previous->next = current->next;
            }
            
            free(current);
            return;
        }
        
        previous = current;
        current = current->next;
    }
    
    printf("Student with number %s not found.\n", number);
}

void editStudent(Node* head, char* number, Student newStudent) {
    Node* current = head;
    
    while (current != NULL) {
        if (strcmp(current->data.number, number) == 0) {
            current->data = newStudent;
            return;
        }
        
        current = current->next;
    }
    
    printf("Student with number %s not found.\n", number);
}

void searchByName(Node* head, char* name) {
    Node* current = head;
    
    while (current != NULL) {
        if (strcmp(current->data.name, name) == 0) {
            printf("Name: %s\n", current->data.name);
            printf("Number: %s\n", current->data.number);
            printf("Math Grade: %d\n", current->data.mathGrade);
            printf("English Grade: %d\n", current->data.englishGrade);
            return;
        }
        
        current = current->next;
    }
    
    printf("Student with name %s not found.\n", name);
}

void searchByNumber(Node* head, char* number) {
    Node* current = head;
    
    while (current != NULL) {
        if (strcmp(current->data.number, number) == 0) {
            printf("Name: %s\n", current->data.name);
            printf("Number: %s\n", current->data.number);
            printf("Math Grade: %d\n", current->data.mathGrade);
            printf("English Grade: %d\n", current->data.englishGrade);
            return;
        }
        
        current = current->next;
    }
    
    printf("Student with number %s not found.\n", number);
}

int countStudentsInGradeRange(Node* head, int minGrade, int maxGrade) {
    int count = 0;
    Node* current = head;
    
    while (current != NULL) {
        if (current->data.mathGrade >= minGrade && current->data.mathGrade <= maxGrade) {
            count++;
        }
        
        current = current->next;
    }
    
    return count;
}

void sortStudents(Node* head, int sortBy) {
    int swapped;
    Node* current = head;
    Node* last = NULL;
    
    if (head == NULL) {
        return;
    }
    
    do {
        swapped = 0;
        current = head;
        
        while (current->next != last) {
            if (sortBy == 0 && strcmp(current->data.number, current->next->data.number) > 0) {
                Student temp = current->data;
                current->data = current->next->data;
                current->next->data = temp;
                swapped = 1;
            } else if (sortBy == 1 && current->data.mathGrade > current->next->data.mathGrade) {
                Student temp = current->data;
                current->data = current->next->data;
                current->next->data = temp;
                swapped = 1;
            } else if (sortBy == 2 && current->data.englishGrade > current->next->data.englishGrade) {
                Student temp = current->data;
                current->data = current->next->data;
                current->next->data = temp;
                swapped = 1;
            }
            
            current = current->next;
        }
        
        last = current;
    } while (swapped);
}

void saveToFile(Node* head, const char* filename) {
    FILE* file = fopen(filename, "w");
    Node* current = head;
    
    while (current != NULL) {
        fprintf(file, "%s,%s,%d,%d\n", current->data.name, current->data.number,
                current->data.mathGrade, current->data.englishGrade);
        current = current->next;
    }
    
    fclose(file);
}

void loadFromFile(Node** head, const char* filename) {
    FILE* file = fopen(filename, "r");
    
    if (file) {
        char line[100];
        while (fgets(line, sizeof(line), file)) {
            Student temp;
            sscanf(line, "%[^,],%[^,],%d,%d", temp.name, temp.number,
                   &temp.mathGrade, &temp.englishGrade);
            addStudent(head, temp);
        }
        
        fclose(file);
    } else {
        printf("Failed to open file.\n");
    }
}

void printMenu() {
    printf("\n-- Student Information and Grade Management System --\n");
    printf("\nPlease select an option:\n");
    printf("1. Add student\n");
    printf("2. Delete student\n");
    printf("3. Edit student\n");
    printf("4. Search by name\n");
    printf("5. Search by number\n");
    printf("6. Grade statistics\n");
    printf("7. Sort students\n");
    printf("8. Save to file\n");
    printf("9. Load from file\n");
    printf("0. Exit\n");
    printf("\nEnter your choice: ");
}

int main() {
    Node* head = NULL;
    int choice;
    
    do {
        printMenu();
        scanf("%d", &choice);
        
        switch (choice) {
            case 1: {
                Student newStudent;
                printf("Enter name: ");
                scanf("%s", newStudent.name);
                printf("Enter number: ");
                scanf("%s", newStudent.number);
                printf("Enter math grade: ");
                scanf("%d", &newStudent.mathGrade);
                printf("Enter english grade: ");
                scanf("%d", &newStudent.englishGrade);
                addStudent(&head, newStudent);
                break;
            }
            case 2: {
                char number[20];
                printf("Enter student number to delete: ");
                scanf("%s", number);
                deleteStudent(&head, number);
                break;
            }
            case 3: {
                char number[20];
                Student newStudent;
                printf("Enter student number to edit: ");
                scanf("%s", number);
                printf("Enter new name: ");
                scanf("%s", newStudent.name);
                printf("Enter new number: ");
                scanf("%s", newStudent.number);
                printf("Enter new math grade: ");
                scanf("%d", &newStudent.mathGrade);
                printf("Enter new english grade: ");
                scanf("%d", &newStudent.englishGrade);
                editStudent(head, number, newStudent);
                break;
            }
            case 4: {
                char name[50];
                printf("Enter name to search: ");
                scanf("%s", name);
                searchByName(head, name);
                break;
            }
            case 5: {
                char number[20];
                printf("Enter number to search: ");
                scanf("%s", number);
                searchByNumber(head, number);
                break;
            }
            case 6: {
                int minGrade, maxGrade;
                printf("Enter minimum grade: ");
                scanf("%d", &minGrade);
                printf("Enter maximum grade: ");
                scanf("%d", &maxGrade);
                int count = countStudentsInGradeRange(head, minGrade, maxGrade);
                printf("Number of students in grade range: %d\n", count);
                break;
            }
            case 7: {
                int sortBy;
                printf("Sort by:\n");
                printf("0. Number\n");
                printf("1. Math grade\n");
                printf("2. English grade\n");
                printf("Enter your choice: ");
                scanf("%d", &sortBy);
                sortStudents(head, sortBy);
                printf("Students sorted.\n");
                break;
            }
            case 8: {
                char filename[50];
                printf("Enter filename to save: ");
                scanf("%s", filename);
                saveToFile(head, filename);
                printf("Data saved to file.\n");
                break;
            }
            case 9: {
                char filename[50];
                printf("Enter filename to load: ");
                scanf("%s", filename);
                loadFromFile(&head, filename);
                printf("Data loaded from file.\n");
                break;
            }
            case 0:
                printf("Exiting...\n");
                break;
            default:
                printf("Invalid choice. Please try again.\n");
                break;
        }
        
        printf("\n");
    } while (choice != 0);
    
    return 0;
}

请注意,这只是一个简单的示例代码,可能还有一些边界情况没有处理。在实际开发中,您可能需要进一步完善和改进代码。同时,还可以根据自己的需求添加其他功能。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 17:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表