Java综合实践——学生成绩查询系统

news2024/9/25 23:16:24

此系列文章收录大量Java经典代码题(也可以算是leetcode刷题指南),剩余文章指路Java题集。希望可以与大家一起探索Java的神秘。3、2、1,请看!

本篇文章将带大家一起来写一个学生成绩查询系统。

目录

系统呈现效果

前言——成绩查询系统的数据结构

控制台命令的读取和控制

1.确定参数

2.退出系统

查询某人某门课成绩

对某门课程成绩进行排序

系统呈现效果

“学生成绩查询系统”中保存有学生姓名、课程名称以及学生的课程成绩。查询系统从控制台输入统计命令及参数,实现几种方式的成绩查询,如:

  • avg Java:统计课程Java的平均分。
  • avg song:统计学生song的平均分。
  • get song Java:获取学生song的Java 课程的成绩。
  • sort Java:列出 Java课程的成绩的排序结果。
  • exit:退出程序。

如果查询的学生或课程不存在时,给出相应的提示。运行效果如图:

80f86e84f2924112bf1541830dae3621.jpeg

如运行效果所示,查询系统的总体任务应该包括:

  • 系统数据(学生成绩)的初始化。
  • 显示成绩单。
  • 查询系统的控制台命令调度。
  • 查询某门课或某人的平均成绩。
  • 查询某人某门课的成绩。
  • 对某门课程的成绩进行排序。

ab529907831c48e795984900cee50b8e.jpg

前言——成绩查询系统的数据结构

    //用常量存储学生数和课程数
    static final int STUDENT_NUM=6;
	static final int COURSE_NUM=5;
	//用字符串数组存储学生姓名和课程名称
	static String[] students = {"zhang","wang","li","zhao","liu","song"};
	static String[] courses = {"C","Java","mySQL","Linux","HTML"};
    存储学生成绩
	static int[][] score= new int[STUDENT_NUM][COURSE_NUM];

控制台命令的读取和控制

1.确定参数
avg+课程名
avg+姓名
get +姓名+课程名
sort + 课程名

匹配命令字符串时使用 equalsIgnoreCase 方法,匹配时忽略字符串的大小写。

2.退出系统

查询系统在未输入“exit”命令的情况下运行,可以在循环中使用“System.exit(0)”退出循环,结束系统的运行

	public static void run(){
		Scanner scn=new Scanner(System.in);		
		
		while(true){
			System.out.print("请输入命令:");	
			String command=scn.next();
			
			if(command.equalsIgnoreCase("avg")){//"avg"需要一个参数
				String parameter=scn.next();
				avg(parameter);
			}else if(command.equalsIgnoreCase("get")){//"get"需要两个参数
				String parameter1=scn.next();
				String parameter2=scn.next();
				get(parameter1,parameter2);
			}else if(command.equalsIgnoreCase("sort")){//"sort"需要一个参数
				String parameter=scn.next();		
				sortByScore(parameter);
			}else if (command.equalsIgnoreCase("exit")){//退出系统
				System.out.println("退出系统!byebye!");
				System.exit(0);
			}
		}		
	}

查询某人某门课成绩

get()方法,先在 students数组中查询是否有 conditionl 指定的学生。如果有该学生,则记录下学生位置(作为成绩二维数组的行标),并继续在 courses数组中查询是否存在 condition2 指定的课程,如果有该课程,则记录下该课程的位置(作为成绩二维数组的列标);输出查找到位置上的成绩

	public static void get(String condition1, String condition2){
		int i_index=-1, j_index=-1;

		//查询是否存在该学生i_index
		for(int i=0; i<students.length; i++){
			if (students[i].equalsIgnoreCase(condition1)){
				i_index=i;
			}
		}
		if(i_index!=-1){  //有此人,继续查找是否有该课程j_index
			for(int j=0; j<courses.length; j++)
				if (courses[j].equalsIgnoreCase(condition2)){
					j_index=j;					
				}
		}else{
			System.out.println("没有 "+ condition1+ "这个学生");
			return;
		}
	
		if(j_index!=-1){
			System.out.println(condition1+"的"+condition2+"成绩是"+score[i_index][j_index]);
		}else{
			System.out.println(condition1+"没有"+condition2+" 这门课程");
			return;
		}
	}

对某门课程成绩进行排序

先在 courses数组中查询是否存在 condition 指定的课程,如果有该课程,则记录下该课程的位置。并建立临时数组存储学生姓名和成绩,在对成绩数组冒泡排序过程中同时交换姓名。最后进行输出。

	public static void sortByScore(String sort_condition){
		int i, j;
		int j_index=-1;

		for(j=0; j<courses.length; j++){
			if (courses[j].equalsIgnoreCase(sort_condition)){
				j_index=j;
			}
		}
		if(j_index==-1){
			System.out.println("没有这门课程");
			return;
		}
		
		//将成绩数据和姓名导入临时数组
		int[] score_temp= new int[STUDENT_NUM]; 
		for(i=0; i<score.length; i++){
			score_temp[i]=score[i][j_index];
		}
		String[] students_temp=new String[STUDENT_NUM];
		for(i=0; i<students.length; i++){
			students_temp[i]=students[i];
		}
					
		//对score_temp数组进行冒泡排序,同时对student_temp数据进行同步交换
		for(int k=0; k<score_temp.length-1; k++){
			for (int kk=0; kk<score_temp.length-k-1; kk++){
				if (score_temp[kk]>score_temp[kk+1]){
					//交换成绩
					int temp=score_temp[kk];
					score_temp[kk]=score_temp[kk+1];
					score_temp[kk+1]=temp;
					
					//交换姓名
					String tmp_str=students_temp[kk];  
					students_temp[kk]=students_temp[kk+1];
					students_temp[kk+1]=tmp_str;
				}
			}
		}
		
		//输出结果
		//1.输出抬头
		System.out.print("名次\t");
		System.out.print("姓名\t");
		System.out.print(courses[j_index]+"\t");
		System.out.println();
		
		//2.输出数据
		for(int k=0; k<score_temp.length; k++){
			System.out.print((k+1)+"\t");
			System.out.print(students_temp[k]+"\t");  //学生姓名
			System.out.println(score_temp[k]);  //学生成绩
		}
	}

当然还有一个功能是计算某一学生或课程成绩的平均分,这个功能的实现类似上面获取某人某成绩的get()方法,剩下的部分教给大家动手实现相关功能。

这篇文章到此结束,源码已经放在资源区了,大家可以前往查看。感谢各位的阅读和所提出的宝贵意见。如果觉得这篇文章写的还可以或者对您有帮助,麻烦点赞收藏加转发!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2126004.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

亚马逊跨境蓝海选品思路和方法(实操建议版)

跨境电商中&#xff0c;“七分靠选品&#xff0c;三分靠运营”。这句话强调了产品在店铺中的重要性&#xff0c;选品的好坏直接影响到后续推广的成败。 如何正确选择产品我们先从思路入手&#xff0c;明确自己的选品思路。以下是几点选品思路的总结和使用店雷达选品的技巧。 …

硅外延片行业分析:未来几年年复合增长率CAGR为5.3%

硅外延晶片是通过在抛光晶片上添加数微米厚的单层碳化硅晶体层制成的。需要精确控制厚度、掺杂&#xff08;载流子浓度&#xff09;和缺陷密度&#xff0c;才能使半导体制造设备生产出高产量的功率器件。外延主要是为了增强晶片的功能。近年来&#xff0c;技术已成为制造高集成…

集运企业运营过程中有哪些痛点?集运系统如何解决?

在集运行业的激烈竞争中&#xff0c;企业面临着诸多运营痛点&#xff0c;这些痛点不仅影响了企业的运营效率&#xff0c;也制约了客户体验的提升。 易境通集运系统&#xff0c;作为一款专为集运行业设计的智能化管理系统&#xff0c;通过技术创新和流程优化&#xff0c;为集运…

ARMxy嵌入式边缘计算控制器支持Linux OS应用于AIOT

人工智能与物联网&#xff08;AIoT&#xff09;的融合正深刻改变着各个行业。而在这一变革中&#xff0c;ARMxy 嵌入式控制器以其卓越的性能和对 Linux OS 的支持&#xff0c;成为了 AIoT 应用的关键推动力量。 一、ARMxy 嵌入式控制器的优势 强大的处理能力 ARMxy 嵌入式控制…

会话好友区设计与开发(二)

会话好友区设计与开发&#xff08;二&#xff09; 前言 在上一集我们已经完成了对item的设计与开发&#xff0c;也详细解释了一些细节&#xff0c;但是我们上一集并没有对item进行显示&#xff0c;那么这一集我们会开发两个SessionFriendArea的方法以及使用一个宏开关进行测试…

《深入理解JAVA虚拟机(第2版)》- 第11章 - 学习笔记

第11章 晚期&#xff08;运行期&#xff09;优化 11.1 概述 频繁执行的方法或代码块&#xff0c;被认定为“热点代码”&#xff08;Hot Spot Code&#xff09;。为了提高热点代码的执行效率&#xff0c;在运行期&#xff0c;将热点代码编译成本地机器码并进行优化&#xff0c…

VD1012 单节锂离子充电电池保护IC 2.8V过放电压 SOT-353小封装芯片

VD1012内置高精度电压检测电路和延迟电路以及内置MOSFET&#xff0c;是用于单节锂离子/锂聚合物可再充电电池的保护IC。 本IC适合于对1节锂离子/锂聚合物可再充电电池的过充电、过放电和过电流进行保护。 VD1012具备如下特点:高精度电压检测电路 过充电检测电压 4.…

曝字节 AI 硬件团队首款自研产品为智能耳机,与豆包联动;OpenAI 神秘新模型或将在两周内发布丨 RTE 开发者日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

「OC」事件点击demo合集

「OC」事件点击demo合集 文章目录 「OC」事件点击demo合集前言可用鼠标移动的UIview突出的tabBar按钮扩大按钮的响应范围 前言 在前面通过学习事件响应流程&#xff0c;学习了许多新的内容&#xff0c;当然也学习了许多不同的用法&#xff0c;但在之前的文章之中并没有将运用到…

SDH信号的帧结构与复用

在OTN技术的学习中&#xff0c;涉及到了大量SDH的相关知识&#xff0c;例如映射&#xff0c;复用&#xff0c;开销等&#xff0c;所以简单的总结一下SDH的帧结构与复用用以辅助学习OTN技术。 DWDM&#xff08;密波&#xff09;大容量SDH&#xff08;同步数字体系&#xff09;的…

无源晶振的等效电路与电路结构解析

无源晶振&#xff0c;即不带内置振荡电路的晶体振荡器&#xff0c;它在电子设备中扮演着产生原始时钟频率的重要角色。以下是关于无源晶振的等效电路、电路结构及其关键参数的详细解析。 一、无源晶振的等效电路 无源晶振的等效电路主要包括静态电容C0、动态电容C1、谐振电阻R…

网络高级(学习)2024.9.11

目录 Modbus库函数 1.初始化和释放函数 2.功能函数 3.功能案例 Modbus RTU 1.特点 2.协议格式 3.编程思路 Modbus库函数 1.初始化和释放函数 modbus_t* modbus_new_tcp(const char *ip, int port) 功能&#xff1a;以TCP方式创建Modbus实例&#xff0c;并初始化 参数…

坐牢第三十八天(Qt)

1、使用Qt绘画事件处理画一个闹钟 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> #include <QPaintEvent>//画画处理事件 #include <QPainter>//画画 #include <QTime> //时间类 #include <QTimer>…

NVIDIA AI Workbench 让 Windows 上的 GPU 使用更加简便

NVIDIA AI Workbench 是一款免费的、用户友好型开发环境管理器&#xff0c;可在您选择的系统&#xff08;PC、工作站、数据中心或云&#xff09;上简化数据科学、ML 和 AI 项目。在 Windows、macOS 和 Ubuntu 上&#xff0c;您可以本地开发、测试项目和构建项目原型&#xff0c…

初识Maven:Java项目管理工具

实际开发中&#xff0c;伴随着项目规模的增长&#xff0c;依赖管理和构建自动化变得至关重要&#xff0c;一套标准化的项目结构有助于更好的开发项目、简化这项任务&#xff08;真的不是强迫症&#xff09; Maven&#xff0c;作为 Apache Software Foundation 维护的项目管理工…

如何获取MySQL数据表的列信息

在数据库管理中&#xff0c;了解表的结构是至关重要的。在MySQL中&#xff0c;我们可以通过几种方式来获取数据表的列信息。这不仅可以帮助我们更好地理解表的结构&#xff0c;还可以在编写查询时提供便利。以下是三种常用的方法来获取MySQL数据表的列信息。 使用 SHOW COLUMN…

HDMI彩条显示——FPGA学习笔记12

素材来自原子哥 一、HDMI简介 英文全称是High-Definition Multimedia Interface&#xff0c;即高清多媒体接口。 HDMI引脚解析&#xff08;A型&#xff09; HDMI工作连接图 HDMI工作原理 DVI编码输出示意图 二、TMDS编码&#xff08;最小化差分传输&#xff09; TMDS编码框图…

pip 阿里云镜像报错 certificate verify failed: unable to get local issuer certificate

在没有管理员身份&#xff0c;且有防火墙限制的电脑上&#xff0c;pip安装​python库包失败。​但是在普通的电脑上安装正常。​​报错内容如下&#xff1a; (SSS_web) C:\Users\HXAIYVQ>pip install flask -i https://mirrors.aliyun.com/pypi/simple/ Looking in indexes…

302.AI学术论文搜索工具的智能体验

Hey朋友们&#xff0c; 你是否曾在学术的海洋里迷失方向&#xff0c;为了找到一篇论文而苦苦挣扎&#xff1f; 就像在茫茫大海中寻找灯塔&#xff0c;我们渴望一盏明灯&#xff0c;指引我们前行。 别担心&#xff0c;今天我来给你介绍一个超级给力的工具——302.AI学术论文…

求教0基础入门大模型的学习路线?

0基础入门大模型&#xff0c;transformer、bert这些是要学的&#xff0c;但是你的第一口不一定从这里咬下去。真的没有必要一上来就把时间精力全部投入到复杂的理论、各种晦涩的数学公式还有编程语言上&#xff0c;这样不仅容易让你气馁&#xff0c;而且特别容易磨光热情。当我…