编写一个学生成绩管理系统的菜单,分类本科生和研究生,都能实现学生的数据输入,修改,删除,查询,计算学生成绩。

时间: 2024-05-31 10:10:10 浏览: 54
好的,下面是一个简单的学生成绩管理系统的菜单: ************************** 学生成绩管理系统菜单 ************************** 1. 本科生管理 2. 研究生管理 3. 退出 请选择菜单编号: 如果选择1,则进入本科生管理子菜单: ************************** 本科生管理子菜单 ************************** 1. 添加本科生 2. 修改本科生信息 3. 删除本科生信息 4. 查询本科生信息 5. 计算本科生成绩 6. 返回上级菜单 请选择菜单编号: 如果选择2,则进入研究生管理子菜单: ************************** 研究生管理子菜单 ************************** 1. 添加研究生 2. 修改研究生信息 3. 删除研究生信息 4. 查询研究生信息 5. 计算研究生成绩 6. 返回上级菜单 请选择菜单编号: 如果选择3,则退出程序。
相关问题

用c语言编写一个学生成绩管理系统的菜单,分类本科生和研究生,都能实现学生的数据输入,修改,删除,查询,计算学生成绩,成绩排名,统计等级人数,保存数据。,。

好的,以下是一个简单的学生成绩管理系统的菜单: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_STUDENTS 100 // 最大学生数 // 学生结构体 typedef struct { char name[20]; // 姓名 int id; // 学号 float grade; // 成绩 } Student; // 学生数组 Student students[MAX_STUDENTS]; int num_students = 0; // 当前学生数 // 函数声明 void add_student(); void modify_student(); void delete_student(); void search_student(); void calculate_grade(); void rank_students(); void count_grades(); void save_data(); void load_data(); void show_menu(); int main() { // 加载数据 load_data(); // 显示菜单 show_menu(); // 保存数据 save_data(); return 0; } // 添加学生 void add_student() { if (num_students >= MAX_STUDENTS) { printf("学生数已达到上限,无法添加新学生。\n"); return; } printf("请输入学生姓名:"); scanf("%s", students[num_students].name); printf("请输入学生学号:"); scanf("%d", &students[num_students].id); printf("请输入学生成绩:"); scanf("%f", &students[num_students].grade); printf("添加成功!\n"); num_students++; } // 修改学生 void modify_student() { int id; int found = 0; printf("请输入要修改的学生学号:"); scanf("%d", &id); for (int i = 0; i < num_students; i++) { if (students[i].id == id) { printf("请输入修改后的学生姓名(原姓名:%s):", students[i].name); scanf("%s", students[i].name); printf("请输入修改后的学生成绩(原成绩:%f):", students[i].grade); scanf("%f", &students[i].grade); printf("修改成功!\n"); found = 1; break; } } if (!found) { printf("未找到该学生!\n"); } } // 删除学生 void delete_student() { int id; int found = 0; printf("请输入要删除的学生学号:"); 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"); found = 1; break; } } if (!found) { printf("未找到该学生!\n"); } } // 查找学生 void search_student() { int id; int found = 0; printf("请输入要查询的学生学号:"); scanf("%d", &id); for (int i = 0; i < num_students; i++) { if (students[i].id == id) { printf("姓名:%s,学号:%d,成绩:%f\n", students[i].name, students[i].id, students[i].grade); found = 1; break; } } if (!found) { printf("未找到该学生!\n"); } } // 计算学生成绩 void calculate_grade() { float sum = 0; for (int i = 0; i < num_students; i++) { sum += students[i].grade; } printf("总成绩:%f,平均成绩:%f\n", sum, sum / num_students); } // 成绩排名 void rank_students() { // 复制学生数组 Student tmp_students[MAX_STUDENTS]; memcpy(tmp_students, students, sizeof(students)); // 冒泡排序 for (int i = 0; i < num_students - 1; i++) { for (int j = 0; j < num_students - i - 1; j++) { if (tmp_students[j].grade < tmp_students[j + 1].grade) { Student tmp = tmp_students[j]; tmp_students[j] = tmp_students[j + 1]; tmp_students[j + 1] = tmp; } } } // 输出排名 printf("成绩排名:\n"); for (int i = 0; i < num_students; i++) { printf("%d. %s(%d),成绩:%f\n", i + 1, tmp_students[i].name, tmp_students[i].id, tmp_students[i].grade); } } // 统计等级人数 void count_grades() { int A = 0, B = 0, C = 0, D = 0, F = 0; for (int i = 0; i < num_students; i++) { if (students[i].grade >= 90) { A++; } else if (students[i].grade >= 80) { B++; } else if (students[i].grade >= 70) { C++; } else if (students[i].grade >= 60) { D++; } else { F++; } } printf("等级统计:\n"); printf("A:%d,B:%d,C:%d,D:%d,F:%d\n", A, B, C, D, F); } // 保存数据 void save_data() { FILE *fp = fopen("data.txt", "w"); if (fp == NULL) { printf("无法保存数据!\n"); return; } fprintf(fp, "%d\n", num_students); for (int i = 0; i < num_students; i++) { fprintf(fp, "%s %d %f\n", students[i].name, students[i].id, students[i].grade); } fclose(fp); } // 加载数据 void load_data() { FILE *fp = fopen("data.txt", "r"); if (fp == NULL) { printf("无法加载数据!\n"); return; } fscanf(fp, "%d", &num_students); for (int i = 0; i < num_students; i++) { fscanf(fp, "%s %d %f", students[i].name, &students[i].id, &students[i].grade); } fclose(fp); } // 显示菜单 void show_menu() { int choice; do { printf("\n"); printf("请选择操作:\n"); printf("1. 添加学生\n"); printf("2. 修改学生\n"); printf("3. 删除学生\n"); printf("4. 查找学生\n"); printf("5. 计算学生成绩\n"); printf("6. 成绩排名\n"); printf("7. 统计等级人数\n"); printf("0. 退出程序\n"); printf("请输入操作编号:"); scanf("%d", &choice); switch (choice) { case 1: add_student(); break; case 2: modify_student(); break; case 3: delete_student(); break; case 4: search_student(); break; case 5: calculate_grade(); break; case 6: rank_students(); break; case 7: count_grades(); break; case 0: printf("再见!\n"); break; default: printf("无效的操作编号,请重新输入。\n"); break; } } while (choice != 0); } ``` 以上代码实现了一个简单的学生成绩管理系统,包括学生数据输入、修改、删除、查询、计算学生成绩、成绩排名、统计等级人数、保存数据等功能。注意,这只是一个简单的示例,实际应用中可能需要更复杂的功能和更完善的错误处理。

用C语言编写一个学生成绩管理系统,要求是使用链表作为结构,实现插入,删除,修改和查询功能

好的,我了解了你的要求。以下是用C语言实现学生成绩管理系统的代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> // 定义学生结构体 typedef struct student { char name[20]; int id; float score; struct student *next; } Student; // 新建学生节点 Student *new_student(char *name, int id, float score) { Student *stu = (Student*)malloc(sizeof(Student)); strcpy(stu->name, name); stu->id = id; stu->score = score; stu->next = NULL; return stu; } // 插入学生节点 void insert_student(Student **head, Student *node) { if (*head == NULL) { *head = node; return; } Student *cur = *head; while (cur->next) { cur = cur->next; } cur->next = node; } // 删除学生节点 void delete_student(Student **head, int id) { if (*head == NULL) { return; } if ((*head)->id == id) { Student *tmp = *head; *head = (*head)->next; free(tmp); return; } Student *cur = *head; while (cur->next) { if (cur->next->id == id) { Student *tmp = cur->next; cur->next = tmp->next; free(tmp); return; } cur = cur->next; } } // 修改学生节点 void modify_student(Student **head, int id, float score) { if (*head == NULL) { return; } Student *cur = *head; while (cur) { if (cur->id == id) { cur->score = score; return; } cur = cur->next; } } // 查询学生节点 void search_student(Student *head, int id) { if (head == NULL) { return; } Student *cur = head; while (cur) { if (cur->id == id) { printf("学生姓名:%s,学号:%d,成绩:%.2f\n", cur->name, cur->id, cur->score); return; } cur = cur->next; } } int main() { Student *head = NULL; // 插入学生 insert_student(&head, new_student("张三", 1001, 80)); insert_student(&head, new_student("李四", 1002, 90)); insert_student(&head, new_student("王五", 1003, 85)); // 删除学生 delete_student(&head, 1002); // 修改学生 modify_student(&head, 1001, 85); // 查询学生 search_student(head, 1003); return 0; } ``` 以上就是使用链表实现学生成绩管理系统的代码。注意,这里的代码只是一个简单的演示,实际应用中还需要完善其他功能,如输入输出、排序等。

相关推荐

最新推荐

recommend-type

学生成绩管理系统(数据结构)实验报告.docx

《学生成绩管理系统》是一个基于C语言开发的实践项目,主要目标是实现对学生成绩的高效管理和分析。本系统采用数据结构的概念,包括数组、链表等数据结构,以实现对学生成绩数据的存储、操作和检索。以下是该系统的...
recommend-type

学生成绩管理系统实验报告.doc

【学生成绩管理系统】是一个基于C++编程的实训项目,旨在让学习者深入理解面向对象程序设计的概念和技术。系统的主要功能包括添加、查询、显示、编辑、删除学生记录,统计成绩,保存和读取数据,以及按成绩进行排序...
recommend-type

java实现学生成绩录入系统

java实现学生成绩录入系统 Java实现学生成绩录入系统是...Java实现学生成绩录入系统是一个功能强大且实用的应用程序,能够满足学校和教育机构对学生成绩管理的需求。该系统的架构清晰、代码简洁易懂,易于维护和扩展。
recommend-type

python学生信息管理系统实现代码

本文将详细介绍如何使用Python实现一个简单的学生信息管理系统。这个系统能够完成学生信息的创建、查看、查询、删除和修改等基本功能。通过阅读和理解以下内容,你可以了解到如何利用Python的文件操作、JSON序列化...
recommend-type

python+mysql实现学生信息查询系统

【Python+MySQL实现学生信息查询系统】是一种常见的数据管理应用,它允许用户通过Python程序与MySQL数据库交互,以便查询和管理学生信息。在这个系统中,Python作为后端编程语言,负责处理用户输入、执行SQL查询以及...
recommend-type

C++多态实现机制详解:虚函数与早期绑定

C++多态性实现机制是面向对象编程的重要特性,它允许在运行时根据对象的实际类型动态地调用相应的方法。本文主要关注于虚函数的使用,这是实现多态的关键技术之一。虚函数在基类中声明并被标记为virtual,当派生类重写该函数时,基类的指针或引用可以正确地调用派生类的版本。 在例1-1中,尽管定义了fish类,但基类animal中的breathe()方法并未被声明为虚函数。因此,当我们创建一个fish对象fh,并将其地址赋值给animal类型的指针pAn时,编译器在编译阶段就已经确定了函数的调用地址,这就是早期绑定。这意味着pAn指向的是animal类型的对象,所以调用的是animal类的breathe()函数,而不是fish类的版本,输出结果自然为"animalbreathe"。 要实现多态性,需要在基类中将至少一个成员函数声明为虚函数。这样,即使通过基类指针调用,也能根据实际对象的类型动态调用相应的重载版本。在C++中,使用关键字virtual来声明虚函数,如`virtual void breathe();`。如果在派生类中重写了这个函数,例如在fish类中定义`virtual void breathe() { cout << "fishbubble" << endl; }`,那么即使使用animal类型的指针,也能调用到fish类的breathe()方法。 内存模型的角度来看,当一个派生类对象被赋值给基类指针时,基类指针只存储了派生类对象的基类部分的地址。因此,即使进行类型转换,也只是访问基类的公共成员,而不会访问派生类特有的私有或保护成员。这就解释了为什么即使指针指向的是fish对象,调用的还是animal的breathe()函数。 总结来说,C++多态性是通过虚函数和早期/晚期绑定来实现的。理解这两个概念对于编写可扩展和灵活的代码至关重要。在设计程序时,合理使用多态能够提高代码的复用性和可维护性,使得程序结构更加模块化。通过虚函数,可以在不改变接口的情况下,让基类指针动态调用不同类型的子类对象上的同名方法,从而展现C++强大的继承和封装特性。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

Parallelization Techniques for Matlab Autocorrelation Function: Enhancing Efficiency in Big Data Analysis

# 1. Introduction to Matlab Autocorrelation Function The autocorrelation function is a vital analytical tool in time-domain signal processing, capable of measuring the similarity of a signal with itself at varying time lags. In Matlab, the autocorrelation function can be calculated using the `xcorr
recommend-type

matlab处理nc文件,nc文件是1979-2020年的全球降雨数据,获取一个省份区域内的日降雨量,代码怎么写

在MATLAB中处理`.nc`(NetCDF)文件通常需要使用`netcdf`函数库,它是一个用于读写多种科学数据格式的工具。对于全球降雨数据,你可以按照以下步骤编写代码: 1. 安装必要的库(如果还没有安装): ```matlab % 如果你尚未安装 netcdf 包,可以安装如下: if ~exist('netcdf', 'dir') disp('Installing the NetCDF toolbox...') addpath(genpath(fullfile(matlabroot,'toolbox','nco'))); end ``` 2. 加载nc文件并查看其结
recommend-type

Java多线程与异常处理详解

"Java多线程与进程调度是编程领域中的重要概念,尤其是在Java语言中。多线程允许程序同时执行多个任务,提高系统的效率和响应速度。Java通过Thread类和相关的同步原语支持多线程编程,而进程则是程序的一次执行实例,拥有独立的数据区域。线程作为进程内的执行单元,共享同一地址空间,减少了通信成本。多线程在单CPU系统中通过时间片轮转实现逻辑上的并发执行,而在多CPU系统中则能实现真正的并行。 在Java中,异常处理是保证程序健壮性的重要机制。异常是程序运行时发生的错误,通过捕获和处理异常,可以确保程序在遇到问题时能够优雅地恢复或终止,而不是崩溃。Java的异常处理机制使用try-catch-finally语句块来捕获和处理异常,提供了更高级的异常类型以及finally块确保关键代码的执行。 Jdb是Java的调试工具,特别适合调试多线程程序。它允许开发者设置断点,查看变量状态,单步执行代码,从而帮助定位和解决问题。在多线程环境中,理解线程的生命周期和状态(如新建、运行、阻塞、等待、结束)以及如何控制线程的执行顺序和同步是至关重要的。 Java的多线程支持包括Thread类和Runnable接口。通过继承Thread类或者实现Runnable接口,用户可以创建自己的线程。线程间同步是多线程编程中的一大挑战,Java提供了synchronized关键字、wait()、notify()和notifyAll()等方法来解决这个问题,防止数据竞争和死锁的发生。 在实际应用中,多线程常用于网络编程、数据库访问、GUI应用程序(如Swing或JavaFX)的事件处理、服务器端的并发处理等场景。例如,一个Web服务器可能需要同时处理多个客户端请求,这时使用多线程可以显著提升性能。此外,多线程在动画制作、游戏开发、多媒体应用等领域也发挥着重要作用,因为它允许同时处理渲染、计算和用户交互等多个任务。 Java的多线程与进程调度是构建高效、健壮应用的基础,而异常处理则提升了程序的稳定性。通过深入理解和熟练运用这些概念,开发者可以创建出更加灵活和可靠的软件系统。"