鱼C论坛

 找回密码
 立即注册
查看: 1143|回复: 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): 向链表中添 ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

系统设计

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

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

主要功能模块:

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

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

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

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

定义学生结构体:

  1. typedef struct {
  2.     char name[50];
  3.     char number[20];
  4.     int mathGrade;
  5.     int englishGrade;
  6.     // 更多课程可以添加在这里
  7. } Student;

  8. typedef struct Node {
  9.     Student data;
  10.     struct Node* next;
  11. } Node;
复制代码

添加学生信息:

  1. void addStudent(Node** head, Student newStudent) {
  2.     Node* newNode = (Node*) malloc(sizeof(Node));
  3.     newNode->data = newStudent;
  4.     newNode->next = *head;
  5.     *head = newNode;
  6. }
复制代码

保存到文件:

  1. void saveToFile(Node* head, const char* filename) {
  2.     FILE* file = fopen(filename, "w");
  3.     Node* current = head;
  4.     while (current != NULL) {
  5.         fprintf(file, "%s,%s,%d,%d\n", current->data.name, current->data.number,
  6.                 current->data.mathGrade, current->data.englishGrade);
  7.         current = current->next;
  8.     }
  9.     fclose(file);
  10. }
复制代码

从文件读取:

  1. void loadFromFile(Node** head, const char* filename) {
  2.     FILE* file = fopen(filename, "r");
  3.     Student temp;
  4.     while (fscanf(file, "%49[^,],%19[^,],%d,%d\n", temp.name, temp.number, &temp.mathGrade, &temp.englishGrade) == 4) {
  5.         addStudent(head, temp);
  6.     }
  7.     fclose(file);
  8. }
复制代码

请鱼油去测试每个功能确保正确性。

然后询问 @FishC 更具体的代码实现
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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


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

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. typedef struct {
  5.     char name[50];
  6.     char number[20];
  7.     int mathGrade;
  8.     int englishGrade;
  9. } Student;

  10. typedef struct Node {
  11.     Student data;
  12.     struct Node* next;
  13. } Node;

  14. void addStudent(Node** head, Student newStudent) {
  15.     Node* newNode = (Node*) malloc(sizeof(Node));
  16.     newNode->data = newStudent;
  17.     newNode->next = *head;
  18.     *head = newNode;
  19. }

  20. void deleteStudent(Node** head, char* number) {
  21.     Node* current = *head;
  22.     Node* previous = NULL;
  23.    
  24.     while (current != NULL) {
  25.         if (strcmp(current->data.number, number) == 0) {
  26.             if (previous == NULL) {
  27.                 *head = current->next;
  28.             } else {
  29.                 previous->next = current->next;
  30.             }
  31.             
  32.             free(current);
  33.             return;
  34.         }
  35.         
  36.         previous = current;
  37.         current = current->next;
  38.     }
  39.    
  40.     printf("Student with number %s not found.\n", number);
  41. }

  42. void editStudent(Node* head, char* number, Student newStudent) {
  43.     Node* current = head;
  44.    
  45.     while (current != NULL) {
  46.         if (strcmp(current->data.number, number) == 0) {
  47.             current->data = newStudent;
  48.             return;
  49.         }
  50.         
  51.         current = current->next;
  52.     }
  53.    
  54.     printf("Student with number %s not found.\n", number);
  55. }

  56. void searchByName(Node* head, char* name) {
  57.     Node* current = head;
  58.    
  59.     while (current != NULL) {
  60.         if (strcmp(current->data.name, name) == 0) {
  61.             printf("Name: %s\n", current->data.name);
  62.             printf("Number: %s\n", current->data.number);
  63.             printf("Math Grade: %d\n", current->data.mathGrade);
  64.             printf("English Grade: %d\n", current->data.englishGrade);
  65.             return;
  66.         }
  67.         
  68.         current = current->next;
  69.     }
  70.    
  71.     printf("Student with name %s not found.\n", name);
  72. }

  73. void searchByNumber(Node* head, char* number) {
  74.     Node* current = head;
  75.    
  76.     while (current != NULL) {
  77.         if (strcmp(current->data.number, number) == 0) {
  78.             printf("Name: %s\n", current->data.name);
  79.             printf("Number: %s\n", current->data.number);
  80.             printf("Math Grade: %d\n", current->data.mathGrade);
  81.             printf("English Grade: %d\n", current->data.englishGrade);
  82.             return;
  83.         }
  84.         
  85.         current = current->next;
  86.     }
  87.    
  88.     printf("Student with number %s not found.\n", number);
  89. }

  90. int countStudentsInGradeRange(Node* head, int minGrade, int maxGrade) {
  91.     int count = 0;
  92.     Node* current = head;
  93.    
  94.     while (current != NULL) {
  95.         if (current->data.mathGrade >= minGrade && current->data.mathGrade <= maxGrade) {
  96.             count++;
  97.         }
  98.         
  99.         current = current->next;
  100.     }
  101.    
  102.     return count;
  103. }

  104. void sortStudents(Node* head, int sortBy) {
  105.     int swapped;
  106.     Node* current = head;
  107.     Node* last = NULL;
  108.    
  109.     if (head == NULL) {
  110.         return;
  111.     }
  112.    
  113.     do {
  114.         swapped = 0;
  115.         current = head;
  116.         
  117.         while (current->next != last) {
  118.             if (sortBy == 0 && strcmp(current->data.number, current->next->data.number) > 0) {
  119.                 Student temp = current->data;
  120.                 current->data = current->next->data;
  121.                 current->next->data = temp;
  122.                 swapped = 1;
  123.             } else if (sortBy == 1 && current->data.mathGrade > current->next->data.mathGrade) {
  124.                 Student temp = current->data;
  125.                 current->data = current->next->data;
  126.                 current->next->data = temp;
  127.                 swapped = 1;
  128.             } else if (sortBy == 2 && current->data.englishGrade > current->next->data.englishGrade) {
  129.                 Student temp = current->data;
  130.                 current->data = current->next->data;
  131.                 current->next->data = temp;
  132.                 swapped = 1;
  133.             }
  134.             
  135.             current = current->next;
  136.         }
  137.         
  138.         last = current;
  139.     } while (swapped);
  140. }

  141. void saveToFile(Node* head, const char* filename) {
  142.     FILE* file = fopen(filename, "w");
  143.     Node* current = head;
  144.    
  145.     while (current != NULL) {
  146.         fprintf(file, "%s,%s,%d,%d\n", current->data.name, current->data.number,
  147.                 current->data.mathGrade, current->data.englishGrade);
  148.         current = current->next;
  149.     }
  150.    
  151.     fclose(file);
  152. }

  153. void loadFromFile(Node** head, const char* filename) {
  154.     FILE* file = fopen(filename, "r");
  155.    
  156.     if (file) {
  157.         char line[100];
  158.         while (fgets(line, sizeof(line), file)) {
  159.             Student temp;
  160.             sscanf(line, "%[^,],%[^,],%d,%d", temp.name, temp.number,
  161.                    &temp.mathGrade, &temp.englishGrade);
  162.             addStudent(head, temp);
  163.         }
  164.         
  165.         fclose(file);
  166.     } else {
  167.         printf("Failed to open file.\n");
  168.     }
  169. }

  170. void printMenu() {
  171.     printf("\n-- Student Information and Grade Management System --\n");
  172.     printf("\nPlease select an option:\n");
  173.     printf("1. Add student\n");
  174.     printf("2. Delete student\n");
  175.     printf("3. Edit student\n");
  176.     printf("4. Search by name\n");
  177.     printf("5. Search by number\n");
  178.     printf("6. Grade statistics\n");
  179.     printf("7. Sort students\n");
  180.     printf("8. Save to file\n");
  181.     printf("9. Load from file\n");
  182.     printf("0. Exit\n");
  183.     printf("\nEnter your choice: ");
  184. }

  185. int main() {
  186.     Node* head = NULL;
  187.     int choice;
  188.    
  189.     do {
  190.         printMenu();
  191.         scanf("%d", &choice);
  192.         
  193.         switch (choice) {
  194.             case 1: {
  195.                 Student newStudent;
  196.                 printf("Enter name: ");
  197.                 scanf("%s", newStudent.name);
  198.                 printf("Enter number: ");
  199.                 scanf("%s", newStudent.number);
  200.                 printf("Enter math grade: ");
  201.                 scanf("%d", &newStudent.mathGrade);
  202.                 printf("Enter english grade: ");
  203.                 scanf("%d", &newStudent.englishGrade);
  204.                 addStudent(&head, newStudent);
  205.                 break;
  206.             }
  207.             case 2: {
  208.                 char number[20];
  209.                 printf("Enter student number to delete: ");
  210.                 scanf("%s", number);
  211.                 deleteStudent(&head, number);
  212.                 break;
  213.             }
  214.             case 3: {
  215.                 char number[20];
  216.                 Student newStudent;
  217.                 printf("Enter student number to edit: ");
  218.                 scanf("%s", number);
  219.                 printf("Enter new name: ");
  220.                 scanf("%s", newStudent.name);
  221.                 printf("Enter new number: ");
  222.                 scanf("%s", newStudent.number);
  223.                 printf("Enter new math grade: ");
  224.                 scanf("%d", &newStudent.mathGrade);
  225.                 printf("Enter new english grade: ");
  226.                 scanf("%d", &newStudent.englishGrade);
  227.                 editStudent(head, number, newStudent);
  228.                 break;
  229.             }
  230.             case 4: {
  231.                 char name[50];
  232.                 printf("Enter name to search: ");
  233.                 scanf("%s", name);
  234.                 searchByName(head, name);
  235.                 break;
  236.             }
  237.             case 5: {
  238.                 char number[20];
  239.                 printf("Enter number to search: ");
  240.                 scanf("%s", number);
  241.                 searchByNumber(head, number);
  242.                 break;
  243.             }
  244.             case 6: {
  245.                 int minGrade, maxGrade;
  246.                 printf("Enter minimum grade: ");
  247.                 scanf("%d", &minGrade);
  248.                 printf("Enter maximum grade: ");
  249.                 scanf("%d", &maxGrade);
  250.                 int count = countStudentsInGradeRange(head, minGrade, maxGrade);
  251.                 printf("Number of students in grade range: %d\n", count);
  252.                 break;
  253.             }
  254.             case 7: {
  255.                 int sortBy;
  256.                 printf("Sort by:\n");
  257.                 printf("0. Number\n");
  258.                 printf("1. Math grade\n");
  259.                 printf("2. English grade\n");
  260.                 printf("Enter your choice: ");
  261.                 scanf("%d", &sortBy);
  262.                 sortStudents(head, sortBy);
  263.                 printf("Students sorted.\n");
  264.                 break;
  265.             }
  266.             case 8: {
  267.                 char filename[50];
  268.                 printf("Enter filename to save: ");
  269.                 scanf("%s", filename);
  270.                 saveToFile(head, filename);
  271.                 printf("Data saved to file.\n");
  272.                 break;
  273.             }
  274.             case 9: {
  275.                 char filename[50];
  276.                 printf("Enter filename to load: ");
  277.                 scanf("%s", filename);
  278.                 loadFromFile(&head, filename);
  279.                 printf("Data loaded from file.\n");
  280.                 break;
  281.             }
  282.             case 0:
  283.                 printf("Exiting...\n");
  284.                 break;
  285.             default:
  286.                 printf("Invalid choice. Please try again.\n");
  287.                 break;
  288.         }
  289.         
  290.         printf("\n");
  291.     } while (choice != 0);
  292.    
  293.     return 0;
  294. }
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-3 14:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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