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_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()方法,剩下的部分教给大家动手实现相关功能。

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

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值