题目:请将你班学生的姓名与考试分数录入到Map中,并按分数从高到低在控制台上打印出来。

Java学生成绩排序
本文介绍了一个使用Java实现的学生姓名与分数录入及排序的例子。通过Map结构存储学生姓名和分数,利用Set去重并借助Arrays.sort进行排序,最终实现了分数从高到低的排序输出。
<span style="font-size:18px;"><span style="font-size:18px;">package com.yunhe.shangwu;

//请将你班学生的姓名与考试分数录入到Map中,并按分数从高到低在控制台上打印出来。

import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class Stu {
	public static void main(String[] args) {
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("zhangsan", 100);
		map.put("lisi", 80);
		map.put("mazi", 90);
		map.put("wanger", 90);

		//通过.values()的方法来取得同学们的成绩
		Collection<Integer> values = map.values();
		// System.out.println(values);

		// 利用Set不重复的特点来去重
		Set<Integer> set = new HashSet<Integer>();
		for (Integer temp : values) {
			set.add(temp);
		}

		// 建立一个int数组类型的数组来存放set里的值,然后通过Arrays.sort的方法排序
		int[] array = new int[set.size()];
		int i = 0;
		for (int temp : set) {
			array[i++] = temp;
		}

		// for(int temp:array)
		// System.out.println(temp);
		// 进行排序
		Arrays.sort(array);//对数组进行排序
		for (int temp : array)
			System.out.println(temp);

		// 利用双重for循环 来取出分数从高到低排序好的对应的同学的名字
		Set<String> keySet = map.keySet();
		for (int j = array.length - 1; j >= 0; j--) {
			for (String temp : keySet) {
				if (array[j] == map.get(temp)) {
					System.out.println(temp);
				}
			}

		}

	}

}
</span></span>

使用idea创建一个项目给出项目框架,题目要求如下:题目1 基于 Kotlin 的控制台学生成绩管理设计实现 一、问题描述 需开发一个基于 Kotlin 的控制台学生成绩管理系统,支持级管理、学生信息录入成绩录入统计、排分析等功能。用户可通过控制台完成级创建、学生信息维护、多科目成绩录入,系统需自动计算总分、平均分、及格率,生成成绩分析报告。程序设计要求数据处理效、逻辑严谨,具备良好的扩展性,可支持多级、多科目管理需求。要求画出符合标准图例的用例图、系统功能结构图,以体现对系统需求的深入理解和整体架构设计能力。 难度系数 h=0.9。 二、功能要求 1. 核心功能  级管理:支持创建多个级(级编号、称),支持级信息查询删除,最多支持 20 个级。  学生信息管理:按录入学生信息(学号、姓名、性别、出生日期),支持学生信息修改、删除、查询(按学号或姓名模糊查询),每个级最多支持 100 学生。  成绩管理功能:支持为每个级设置自定义科目(最多 8 门),录入 / 修改学生各科成绩(0-100 分);自动校验成绩合法性,计算学生个人总分、平均分、各科排,以及级整体的平均分、最分、最分、及格率(60 分及以上)、优秀率(85 分及以上)。  排分析功能:支持按级生成学生总分排(降序)、单科成绩;支持导出成绩报表(包含学生个人信息、各科成绩、总分、平均分、排);支持查询各科成绩分布(按分数段统计人数:0-59、60-74、75-84、85-100)。 2. 交互容错要求  控制台交互:提供清晰的功能菜单(级管理→学生管理→成绩管理→排分析→数据导出→退出),支持按级切换操作上下文。  错误处理:对非法输入(非数字成绩、无效级 / 学号、超出范围的分数)进行提示允许重新输入;避免重复创建级、重复录入学生信息等逻辑错误。 三、技术实现要求 1. 开发环境语言  编程语言:Kotlin  运行环境:JDK 8 及以上  无需依赖额外框架,使用 Kotlin 标准库实现所有功能 2. 数据存储处理  采用文件存储持久化数据,支持程序重启后数据恢复(存储级信息、学生档案、各科成绩)。  数据结构设计:合理设计数据类存储级、学生成绩信息,使用集合类(如 Map, List)效管理数据。 3. 代码规范  代码需划分合理的函数模块(如参赛信息录入、比分计算、排统计、文件读写),避免冗余。  命规范:变量、函数、类遵循 Kotlin 编码规范,添加必要注释说明核心逻辑。
最新发布
12-08
题目1 基于 Kotlin 的控制台学生成绩管理设计实现 一、问题描述 需开发一个基于 Kotlin 的控制台学生成绩管理系统,支持级管理、学生信息录入成绩录入统计、排分析等功能。用户可通过控制台完成级创建、学生信息维护、多科目成绩录入,系统需自动计算总分、平均分、及格率,生成成绩分析报告。程序设计要求数据处理效、逻辑严谨,具备良好的扩展性,可支持多级、多科目管理需求。要求画出符合标准图例的用例图、系统功能结构图,以体现对系统需求的深入理解和整体架构设计能力。 难度系数 h=0.9。 二、功能要求 1. 核心功能  级管理:支持创建多个级(级编号、称),支持级信息查询删除,最多支持 20 个级。  学生信息管理:按录入学生信息(学号、姓名、性别、出生日期),支持学生信息修改、删除、查询(按学号或姓名模糊查询),每个级最多支持 100 学生。  成绩管理功能:支持为每个级设置自定义科目(最多 8 门),录入 / 修改学生各科成绩(0-100 分);自动校验成绩合法性,计算学生个人总分、平均分、各科排,以及级整体的平均分、最分、最分、及格率(60 分及以上)、优秀率(85 分及以上)。  排分析功能:支持按级生成学生总分排(降序)、单科成绩;支持导出成绩报表(包含学生个人信息、各科成绩、总分、平均分、排);支持查询各科成绩分布(按分数段统计人数:0-59、60-74、75-84、85-100)。 2. 交互容错要求  控制台交互:提供清晰的功能菜单(级管理→学生管理→成绩管理→排分析→数据导出→退出),支持按级切换操作上下文。  错误处理:对非法输入(非数字成绩、无效级 / 学号、超出范围的分数)进行提示允许重新输入;避免重复创建级、重复录入学生信息等逻辑错误。 三、技术实现要求 1. 开发环境语言  编程语言:Kotlin  运行环境:JDK 8 及以上  无需依赖额外框架,使用 Kotlin 标准库实现所有功能 2. 数据存储处理  采用文件存储持久化数据,支持程序重启后数据恢复(存储级信息、学生档案、各科成绩)。  数据结构设计:合理设计数据类存储级、学生成绩信息,使用集合类(如 Map, List)效管理数据。 3. 代码规范  代码需划分合理的函数模块(如参赛信息录入、比分计算、排统计、文件读写),避免冗余。  命规范:变量、函数、类遵循 Kotlin 编码规范,添加必要注释说明核心逻辑。 根据题目进行设计
12-08
题目2 基于 Kotlin的控制台多阶段综合乒乓球赛事管理系统设计实现 一、问题描述 需开发一个基于 Kotlin 的控制台多阶段综合乒乓球赛事管理系统。该系统不仅要记录单场比赛,更要能模拟和管理一个完整的、包含小组赛和淘汰赛阶段的专业赛事。系统需支持单打双打两种模式,引入基于角色的用户体系(管理员、裁判、观众),能自动化处理复杂的赛程编排、晋级逻辑和排计算。程序设计要求具备严谨的业务逻辑、健壮的数据模型、度的模块化以及优秀的用户体验,以应对真实赛事管理的复杂场景。要求画出符合标准图例的用例图、系统功能结构图,以体现对系统需求的深入理解和整体架构设计能力。 难度系数 h=1。 二、功能要求 1. 核心功能 1. 多模式多阶段赛制:  比赛模式:支持创建“单打赛事”或“双打赛事”。双打模式下,需支持选手自由组队。  赛事结构:赛事必须包含“小组赛阶段”和“淘汰赛阶段”。  小组赛:支持将参赛选手/队伍随机或手动分配到多个小组,组内进行单循环比赛。  淘汰赛:根据小组赛排自动生成淘汰赛对阵图(如:A组第一 vs B组第二),支持单败淘汰制,直至决出冠亚季军。 2. 多模式多阶段赛制:  小组排:小组内排依据:1. 积分;2. 净胜局数;3. 净胜分数;4. 双方胜负关系。系统需能完整实现此套复杂的排规则。  自动晋级:小组赛结束后,系统根据预设规则(如每组前2晋级)自动将选手/队伍放入淘汰赛对阵图 3. 自动化赛程管理:  赛程生成:管理员设定好赛事参数后,系统能自动生成小组赛所有场次的比赛列表和淘汰赛的对阵图。  状态跟踪:每场比赛有状态(未开始、进行中、已结束),系统需实时更新展示当前赛程进度。 2. 级功能 1. 基于角色的用户系统 (RBAC):  管理员:拥有最权限,负责创建赛事、管理用户账户、分配裁判、设定赛制、启动/结束赛事。  裁判:被分配到特定比赛,只能录入和提交自己所负责场次的比分,无法修改其他比赛。  观众:只能查看赛程、实时比分、选手信息和排,无任何修改权限。 2. 双打团队管理:  支持选手在系统中创建双打队伍,一个队伍由两选手组成。  选手可以同时参加单打和双打赛事,系统需独立管理其个人和团队成绩。 3. 详细的历史统计:  选手档案:记录每个选手/队伍在本次赛事中的所有比赛详情(对手、比分、胜负)。  数据统计:自动统计展示“单局最分”、“最长连胜”、“净胜分最多”等趣味数据。 4. 实时比赛中心:  提供一个类似仪表板式的视图,集中显示“正在进行”的比赛、“即将开始”的比赛以及“最新结束”的比赛结果,方便裁判和观众快速了解赛事动态。 5. 交互容错要求  角色化菜单:用户登录后,系统根据其角色展示完全不同的功能菜单和操作权限。  业务逻辑验证:除了基础输入验证,还需处理复杂的业务逻辑错误,如:裁判录入比分比赛规则冲突(如11分制下出现12:0)、淘汰赛阶段试图修改小组赛结果、双打队伍成员重复等。  数据一致性:在多人(模拟)操作场景下,确保数据读写的一致性,例如,一个裁判正在录入比分时,其他裁判不能修改同一场比赛。 三、技术实现要求 1. 开发环境语言  编程语言:Kotlin  运行环境:JDK 8 及以上  无需依赖额外框架,使用 Kotlin 标准库实现所有功能 2. 数据存储处理  采用文件存储持久化数据,支持赛事中途暂停后恢复(存储参赛信息、已赛赛程、当前积分)。  数据结构设计:合理设计数据类存储用户、选手、队伍、比赛、赛事等信息,使用集合类效管理赛程和积分数据。 3. 代码规范  代码需划分合理的函数模块(如参赛信息录入、比分计算、排统计、文件读写),避免冗余。  命规范:变量、函数、类遵循 Kotlin 编码规范,添加必要注释说明核心逻辑。 给出代码的实现
12-05
在该代码基础上改为2.0版本:#include <iostream> #include <iomanip> #include <algorithm> #include <string> using namespace std; const int MAX_STUDENTS = 30; struct Student { string id; float score; }; // 录入学生信息 void inputStudents(Student students[], int &count) { cout << "输入学生人数 (最多30人): "; cin >> count; if (count > MAX_STUDENTS || count <= 0) { cout << "人数无效,设置为最大值" << MAX_STUDENTS << endl; count = MAX_STUDENTS; } for (int i = 0; i < count; ++i) { cout << "\n第" << i + 1 << "个学生:\n"; cout << "学号: "; cin >> students[i].id; cout << "成绩: "; cin >> students[i].score; // 验证成绩范围 while (students[i].score < 0 || students[i].score > 100) { cout << " 无效成绩! 输入0-100之间的值: "; cin >> students[i].score; } } cout << "录入完成!\n"; } // 计算总分和平均分 void calculateTotalAverage(Student students[], int count) { float total = 0; for (int i = 0; i < count; ++i) { total += students[i].score; } cout << "总分: " << fixed << setprecision(1) << total << endl; cout << "平均分: " << fixed << setprecision(2) << (total / count) << endl; } // 按成绩降序排序() void sortByScore(Student students[], int count) { sort(students, students + count, [](const Student &a, const Student &b) { return a.score > b.score; }); cout << "\n按成绩降序排:\n"; cout << "排\t学号\t成绩\n"; int rank = 1; for (int i = 0; i < count; ++i) { if (i > 0 && students[i].score != students[i-1].score) { rank = i + 1; } cout << rank << "\t" << students[i].id << "\t" << students[i].score << endl; } } // 按学号升序排序 void sortById(Student students[], int count) { sort(students, students + count, [](const Student &a, const Student &b) { return a.id < b.id; }); cout << "\n按学号升序排序:\n"; cout << "学号\t成绩\n"; for (int i = 0; i < count; ++i) { cout << students[i].id << "\t" << students[i].score << endl; } } // 按学号查询 void searchById(Student students[], int count) { string targetId; cout << "输入查询学号: "; cin >> targetId; // 按成绩排序确定排 Student temp[MAX_STUDENTS]; copy(students, students + count, temp); sort(temp, temp + count, [](const Student &a, const Student &b) { return a.score > b.score; }); int rank = -1; float score = -1; // 查找学生 for (int i = 0; i < count; ++i) { if (students[i].id == targetId) { score = students[i].score; // 在排序后数组中找排 for (int j = 0; j < count; ++j) { if (temp[j].id == targetId) { rank = j + 1; // 处理列情况 while (j > 0 && temp[j].score == temp[j-1].score) { rank--; j--; } break; } } break; } } if (rank != -1) { cout << "学号: " << targetId << endl; cout << "成绩: " << score << endl; cout << "排: " << rank << endl; } else { cout << "未找到学号: " << targetId << endl; } } // 统计分数段 void analyzeGrades(Student students[], int count) { int levels[5] = {0}; // 不及格,及格,中等,良好,优秀 for (int i = 0; i < count; ++i) { if (students[i].score >= 90) levels[4]++; else if (students[i].score >= 80) levels[3]++; else if (students[i].score >= 70) levels[2]++; else if (students[i].score >= 60) levels[1]++; else levels[0]++; } string categories[] = {"不及格(0-59)", "及格(60-69)", "中等(70-79)", "良好(80-89)", "优秀(90-100)"}; cout << "\n成绩统计分析\n"; cout << "类别\t\t人数\t百分比\n"; for (int i = 0; i < 5; ++i) { float percentage = (static_cast<float>(levels[i]) / count) * 100; cout << categories[i] << "\t" << levels[i] << "\t" << fixed << setprecision(1) << percentage << "%\n"; } } // 显示所有学生记录 void displayAll(Student students[], int count) { cout << "\n学生记录:\n"; cout << "学号\t成绩\n"; for (int i = 0; i < count; ++i) { cout << students[i].id << "\t" << students[i].score << endl; } } int main() { Student students[MAX_STUDENTS]; int count = 0; int choice; do { cout << "\n学生成绩管理系统V1.0\n"; cout << "1.录入学生成绩\n"; cout << "2.计算总分和平均分\n"; cout << "3.按成绩降序排序\n"; cout << "4.按学号升序排序\n"; cout << "5.按学号查询\n"; cout << "6.分数段统计分析\n"; cout << "7.显示所有学生记录\n"; cout << "0. 退出\n"; cout << "选择操作: "; cin >> choice; switch (choice) { case 1: inputStudents(students, count); break; case 2: if (count > 0) calculateTotalAverage(students, count); else cout << "录入学生数据!\n"; break; case 3: if (count > 0) sortByScore(students, count); else cout << "录入学生数据!\n"; break; case 4: if (count > 0) sortById(students, count); else cout << "录入学生数据!\n"; break; case 5: if (count > 0) searchById(students, count); else cout << "录入学生数据!\n"; break; case 6: if (count > 0) analyzeGrades(students, count); else cout << "录入学生数据!\n"; break; case 7: if (count > 0) displayAll(students, count); else cout << "录入学生数据!\n"; break; case 0: cout << "系统已退出!\n"; break; default: cout << "无效选择,重新输入!\n"; } } while (choice != 0); return 0; }
06-26
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值