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

此系列文章收录大量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_indexfor(int i=0; i<students.length; i++){if (students[i].equalsIgnoreCase(condition1)){i_index=i;}}if(i_index!=-1){  //有此人,继续查找是否有该课程j_indexfor(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.rhkb.cn/news/421470.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一些硬件知识(二十二)

二极管&#xff08;Diode&#xff09;伏安特性、技术参数和项目中的应用 在正向偏置下&#xff0c;二极管呈现出良好的导电性能&#xff0c;可以允许电流通过&#xff1b;而在反向偏置下&#xff0c;二极管具有很高的阻断能力&#xff0c;几乎不允许电流通过。这是由构成二极管…

new String(),toString()和Arrays.toString()的区别

下面写了一段代码来展示结果 import javax.sound.midi.Soundbank; import java.util.Arrays; import java.util.Scanner;public class Main {public static void main(String[] args) {String str "abc";System.out.println("str:"str);char[] chars st…

Linux编译器-gcc/g++使用

1. 背景知识 1. 预处理&#xff08;进行宏替换) 2. 编译&#xff08;生成汇编) 3. 汇编&#xff08;生成机器可识别代码&#xff09; 4. 连接&#xff08;生成可执行文件或库文件) 2. gcc如何完成 格式 gcc [选项] 要编译的文件 [选项] [目标文件] 预处理(进行宏替换) 编…

SSM校园二手交易平台---附源码78592

摘要 SSM校园二手交易平台是针对大学生群体而设计的一款在线交易平台。该平台的目的是为大学生提供一个便捷、安全、可靠的交易渠道&#xff0c;帮助他们买卖二手商品。平台具有以下特点&#xff1a;注重安全性&#xff1a;平台采取严格的用户认证和身份验证机制&#xff0c;确…

【人工智能学习笔记】4_4 深度学习基础之生成对抗网络

生成对抗网络&#xff08;Generative Adversarial Network, GAN&#xff09; 一种深度学习模型&#xff0c;通过判别模型&#xff08;Discriminative Model&#xff09;和生成模型&#xff08;Generative Model&#xff09;的相互博弈学习&#xff0c;生成接近真实数据的数据分…

html 引入 css文档

1. 三种方法 html 引入 css文档有三种方式&#xff1a; 1.1 内部样式表 1.2 外部样式表 1.3 行内样式表

python 学习一张图

python学习一张图&#xff0c;python的特点的是学的快&#xff0c;一段时间不用&#xff0c;忘记的也快&#xff0c;弄一张图及一些入门案例吧。 写一个简单的测试&#xff1a; #!/usr/bin/python # -*- coding: UTF-8 -*- import osdef add_num(a, b):return a bif __name__…

【深度学习】Pytorch基础

目录 梯度下降算法&#xff08;Gradient Descent&#xff09;代码实现 梯度下降算法&#xff08;Gradient Descent&#xff09; 梯度下降算法在机器学习中应用十分的广泛&#xff0c;不论是在线性回归还是Logistic回归中&#xff0c;它的主要目的是通过迭代找到目标函数的最小…

企业会议室预约管理系统

基于springbootvuemysql实现的企业会议室预约管理系统&#xff08;源码数据库部署视频&#xff09; ### 主要技术 SpringBoot、Vue、MySQL ### 系统角色 员工、管理员 ### 系统功能 1&#xff09;管理员&#xff1a;数据统计&#xff08;会议室使用统计-柱状图、设备状态统计…

通过IDEA的Maven插件清理maven依赖缓冲

问题 有时候&#xff0c;在IDEA编程的时候&#xff0c;会遇到2个服务都依赖同一个模块&#xff0c;但是&#xff0c;其中有1个服务没有生效&#xff0c;但是&#xff0c;在CLI的maven中检查依赖树&#xff0c;没有任何问题&#xff0c;但是在IDEA中那个服务始终就是没有生效。…

计算语言学(一)基础

概率论的几个概念 熵、互信息 神经网络基础 MLP CNN RNN Seq2Seq LSTM Transformer 语料库与知识库

世界时钟 做外贸的朋友你需要这么一个看时间的工具

有很多人需要经常查看世界各地的时间&#xff0c;以前的办法就是去网上找时间&#xff0c;一个个对一下&#xff0c;这样是比较麻烦的&#xff0c;而且效率也非常低。 其实我们可以非常智能的管理这些时间时钟&#xff0c;让你更直观的&#xff0c;便捷的了解世界各地时间。 …

TESSY创建以及设计一个测试用例

我们以tessy5.1 IDE为例&#xff0c;给大家展示编写一个测试用例的过程。 还不会创建工程的&#xff0c;可以参考以下这篇文章&#xff1a; TESSY创建单元测试或集成测试工程_tessy 集成测试-CSDN博客 接下来我们以这个作为开始状态进行介绍 1、添加源文件 2、添加头文件路径…

Vulnhub-RickdiculouslyEasy靶场(9个flag)

flag1 端口9090有一个flag flag2 13337端口 flag3 使用dirb进行扫描网站的80端口&#xff0c;发现一些敏感文件 访问80端口&#xff0c;没有发现有效信息 访问passwords目录 访问FLAG.txt 再返回访问passwords.html文件 查看页面源代码发现一个密码 flag4 之前扫描到了robo…

一些硬件知识(二十)

单端差动放大器并不是指“单输入单输出”。它的意思是&#xff1a;输入端为差分输入&#xff0c;而输出为单端输出。 低压差线性稳压器&#xff08;LDO&#xff0c;Low Dropout Regulator&#xff09;是一种常见的线性稳压器&#xff0c;具有低输入输出电压差的特点&#xff0c…

全视通医院智慧后勤全场景管理+一体化解决方案,让医院管理提质增效

在 “十四五” 时期&#xff0c;公立智慧医院建设正如火如荼地进行着。2021年&#xff0c;国家卫生健康委医政医管局发布《医院智慧管理分级评估标准体系&#xff08;试行&#xff09;》&#xff0c;从政策层面给出了推进面向医务人员的“智慧医疗”、面向患者的“智慧服务”、…

线性方程组求解——预处理Preconditioning介绍

为什么需要预处理&#xff1f; 工程中出现的大规模线性方程组往往是病态的, 对数值求解带来很大的困难: ▶ 使得迭代法(比如Krylov 子空间迭代法) 收敛变得非常缓慢 ▶ 对数值解的精度产生很大的影响(在有限精度计算情形下) 对于第一个问题, 当前的有效处理方法是预处理, 预处…

Flutter的升级和降级步骤

升级 1.版本升级 // 升级到指定版本 flutter upgrade 版本号 // 升级到最新版本 flutter upgrade 2. 更新开发配置 启动 Android Studio。 打开 Settings 对话框&#xff0c;查看 SDK Manager。 如果你已经打开了一个项目&#xff0c;请打开 Tools > SDK Manager。 如果…

strtok函数讲解使用

目录 1.头文件 2.strtok函数介绍 3.解释strtok函数 小心&#xff01;VS2022不可直接接触&#xff0c;否则&#xff01;没这个必要&#xff0c;方源面色淡然一把抓住&#xff01;顷刻炼化&#xff01; 1.头文件 strtok函数的使用需要头文件 #include<string.h> 2.strto…

运维工程师需要掌握什么技能?

&#x1f91f; 基于入门网络安全/黑客打造的&#xff1a;&#x1f449;黑客&网络安全入门&进阶学习资源包 运维工程师作为确保IT基础设施稳定运行的关键角色&#xff0c;需要掌握一系列核心技能。这些技能涵盖了从系统监控到故障排查&#xff0c;从自动化脚本编写到云服…