java课程设计—成绩排序系统

课程设计要求:

设计一个学生成绩排名系统

实现以下功能:

1) 具备对成绩的管理功能(添加、删除、排序);

2) 具备对成绩的统计功能(最高分,最低分,平均分,及格率等);

3) 具备按学号、姓名、或课程名查询成绩的功能;

备注:成绩记录以下信息:班级,学号,姓名,四门成绩(百分制)。

 

废话不多说,直接上代码。 GUI版本到我主页找另一篇博客。

 

包名:com.hncj.tt类名:sssss     读者自行修改。

 

package com.hncj.tt;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

public class sssss {
	
	static List<String> stuName = new ArrayList();
	static List<String> stuClass = new ArrayList();
	static List<String> stuNumber = new ArrayList();
	static int[][] stuScore = new int[10001][5];// 二维数组,第一个对应学生,第二个该学生的四科成绩,语文,数学,英语,政治
	static int logout = 1;// 用于用户退出程序
	static Scanner input = new Scanner(System.in);
	public static void main(String[] args) {
		stuName.add("张三");
		stuClass.add("0824172");
		stuNumber.add("082417220");
		stuScore[0][0] = 72;
		// stuScore[0][1] = 74;
		stuScore[0][2] = 76;
		stuScore[0][3] = 78;
		stuName.add("李四");
		stuClass.add("0824172");
		stuNumber.add("082417299");
		stuScore[1][0] = 62;
		stuScore[1][1] = 64;
		stuScore[1][2] = 66;
		stuScore[1][3] = 68;
		stuName.add("王五");
		stuClass.add("0824172");
		stuNumber.add("082417289");
		stuScore[2][0] = 82;
		stuScore[2][1] = 84;
		stuScore[2][2] = 86;
		// 初始化数据
		do {
			System.out.println("------欢迎进入学生成绩排名系统--------");
			System.out.println("\n1.查询成绩");
			System.out.println("2.添加或修改成绩");
			System.out.println("3.删除成绩");
			System.out.println("4.成绩排序");
			System.out.println("5.成绩统计");
			System.out.println("6.退出系统");
			System.out.println("请输入对应数字进行选择:");
			String choice = input.next();
			switch (choice) {
			case "1":
				lookScore();
				break;
			case "2":
				addScore();
				break;
			case "3":
				deleteScore();
				break;
			case "4":
				scoreStatistics(choice);
				break;
			case "5":
				scoreStatistics(choice);
				break;
			case "6":
				logout = 2;
				break;
			default:
				System.out.println("非法操作!");
				logout = 1;
			}
			if (logout != 2) {// 如果为2则是用户选择了退出或者是非法操作
				System.out.println("输入0返回主界面,输入非0值退出系统 ");
				int back = input.nextInt();
				if (back != 0) {// 如果用户没选择0则为非法操作
					logout = 2;
				}
			}
		} while (logout == 1); // 判断用户择退出还是返回
		System.out.println("----谢谢使用!----");
	}

	private static void lookScore() {
		int exitlook = 0;
		// 这一层do while是为了查询一个结果后能继续查询
		do {
			System.out.println("----请选择按哪种方式查询------");
			System.out.println("\n1.学号查询");
			System.out.println("2.姓名查询");
			System.out.println("3.课程名查询");
			System.out.println("4.返回或退出");
			System.out.println("请输入对应数字进行选择:");
			int k = 0;// 多次输入错误之后,跳出查询。返回主界面
			int choiceLI = input.nextInt();
			do {
				int i = 0;// i用于通过循环次数准确查找数据
				switch (choiceLI) {
				case 1:
					System.out.println("请输入学号:");
					String choiceNumber = input.next();
					for (String a : stuNumber) {
						if (choiceNumber.equals(a) == true) {
							k = 4;
							break;
						} else {
							i++;
						}
					}
					break;
				case 2:
					System.out.println("请输入姓名:");
					String choiceName = input.next();
					for (String name : stuName) {
						if (choiceName.equals(name) == true) {
							k = 4;
							break;
						} else {
							i++;
						}
					}
					break;
				case 3:
					System.out.println("请输入课程名:");
					String choicekecheng = input.next();
					if ("语文".equals(choicekecheng)) {
						i = 0;
						k = 5;
					} else if ("数学".equals(choicekecheng)) {
						i = 1;
						k = 5;
					} else if ("英语".equals(choicekecheng)) {
						i = 2;
						k = 5;
					} else if ("政治".equals(choicekecheng)) {
						i = 3;
						k = 5;
					}
					break;
				case 4:
					k = 3;
					exitlook = 1;
					break;
				}
				if (k < 2) {
					System.out.println("未找到对应字段,请重新输入");
					k++;
				} else if (k == 2) {
					System.out.println("错误三次,请继续操作");
					k++;
				} else if (k == 4) {
					System.out.println("查询结果如下:");
					System.out.println("姓名\t" + stuName.get(i) + "\n学号\t" + stuNumber.get(i) + "\n班级\t"
							+ stuClass.get(i) + "\n语文\t" + stuScore[i][0] + "\n数学\t" + stuScore[i][1] + "\n英语\t"
							+ stuScore[i][2] + "\n政治\t" + stuScore[i][3]);
				} else if (k == 5) {
					System.out.println("具有该课程的学生查询结果如下:");
					for (int j = 0; j < stuName.size(); j++) {
						if (stuScore[j][i] > 0 && stuScore[j][i] <= 100) {// 范围是0~100,不包含零的原因是int型默认值是0,这也是一个bug
							String sss = null;
							if (i == 0)
								sss = "语文";
							if (i == 1)
								sss = "数学";
							if (i == 2)
								sss = "英语";
							if (i == 3)
								sss = "政治";
							System.out.println("姓名\t" + stuName.get(j) + "\n学号\t" + stuNumber.get(j) + "\n班级\t"
									+ stuClass.get(j) + "\n" + sss + "\t" + stuScore[j][i]);
						}
					}
				}
			} while (k < 3);
			if (k != 3) {
				System.out.println("是否继续查询(输入0继续,非0退出):");
				int choicenext = input.nextInt();
				if (choicenext != 0) {
					exitlook = 1;
				}
			}
		} while (exitlook == 0);
	}

	private static void addScore() {
		// 添加已有的成绩时,相当于修改
		int exitadd = 0;
		do {
			int k = 0;
			System.out.println("----请输入需要添加或修改成绩的学生姓名或0退出------");
			String addName = input.next();
			int i = 0; // 用于计数,以找到对应学生的学号
			if (!"0".equals(addName)) {
				for (String st : stuName) {
					if (st.equals(addName)) {
						System.out.println("学生信息如下:");
						System.out.println(
								"姓名\t" + stuName.get(i) + "\n学号\t" + stuNumber.get(i) + "\n班级\t" + stuClass.get(i));
						for (int jj = 0; jj < 4; jj++) {
							String sss = null;
							if (jj == 0)
								sss = "语文";
							if (jj == 1)
								sss = "数学";
							if (jj == 2)
								sss = "英语";
							if (jj == 3)
								sss = "政治";
							if (stuScore[i][jj] > 0) {
								System.out.println(sss + "\t" + stuScore[i][jj]);
							}
						}
						int xxx = 0;// 判断用户是否继续添加该学生信息
						do {
							System.out.println("请输入要添加或修改的科目:");
							String add = input.next();
							int j = 10;// 10 是随便附的值,为了不为0~3.因为0~3刚好可以对应二维数组中的科目
							if ("语文".equals(add)) {
								j = 0;
							} else if ("数学".equals(add)) {
								j = 1;
							} else if ("英语".equals(add)) {
								j = 2;
							} else if ("政治".equals(add)) {
								j = 3;
							} else {
								j = 5;
							}

							if (j != 5) {
								System.out.println("请填写该科目的成绩(0~100分):");
								int Score = input.nextInt();
								if (Score > 0 && Score <= 100) {
									stuScore[i][j] = Score;// 将该科目赋值为0,就是删除该科目。因为int型默认值为0
									System.out.println("修改成功,该学生信息如下:");
									System.out.println("姓名\t" + stuName.get(i) + "\n学号\t" + stuNumber.get(i) + "\n班级\t"
											+ stuClass.get(i));
									for (int jj = 0; jj < 4; jj++) {
										String sss = null;
										if (jj == 0)
											sss = "语文";
										if (jj == 1)
											sss = "数学";
										if (jj == 2)
											sss = "英语";
										if (jj == 3)
											sss = "政治";
										if (stuScore[i][jj] > 0) {
											System.out.println(sss + "\t" + stuScore[i][jj]);
										}
									}
								} else {
									System.out.println("非法输入!");
								}
								System.out.println("是否继续添加或修改该学生的成绩(是:0,否:非0):");
								int chonet = input.nextInt();
								if (chonet != 0) {
									xxx = 4;
								}
							} else {
								System.out.println("非法输入!\n提示:科目名只有语文,数学,英语,政治");
								xxx++;
							}
							if (xxx == 3) {
								System.out.println("错误三次,请继续操作");
							}
						} while (xxx < 3);
						k = 1;
					} else {
						i++;
					}
				}
			} else if ("0".equals(addName)) {
				exitadd = 1;
				k = 2;
			}
			if (k == 0) {
				System.out.println("未找到该学生,请确认后输入");
			}
			if (k == 1) {
				System.out.println("是否继续添加或退出(输入0继续,非0退出):");
				int choicene = input.nextInt();
				if (choicene != 0) {
					exitadd = 1;
				}
			}
		} while (exitadd == 0);

	}

	private static void deleteScore() {
		int exitdelete = 0;
		do {
			int k = 0;
			System.out.println("----请输入需要删除成绩的学生姓名或0退出------");
			String deleteName = input.next();
			int i = 0; // 用于计数,以找到对应学生的学号
			if (!"0".equals(deleteName)) {
				for (String st : stuName) {
					if (st.equals(deleteName)) {
						System.out.println("学生信息如下,");
						System.out.println(
								"姓名\t" + stuName.get(i) + "\n学号\t" + stuNumber.get(i) + "\n班级\t" + stuClass.get(i));
						for (int jj = 0; jj < 4; jj++) {
							String sss = null;
							if (jj == 0)
								sss = "语文";
							if (jj == 1)
								sss = "数学";
							if (jj == 2)
								sss = "英语";
							if (jj == 3)
								sss = "政治";
							if (stuScore[i][jj] > 0) {
								System.out.println(sss + "\t" + stuScore[i][jj]);
							}
						}
						int xxx = 0;// 判断用户是否继续删除该学生信息
						do {
							System.out.println("请输入要删除的科目:");
							String del = input.next();
							int j = 10;// 10 是随便附的值,为了不为0~3.因为0~3刚好可以对应二维数组中的科目
							if ("语文".equals(del)) {
								j = 0;
							} else if ("数学".equals(del)) {
								j = 1;
							} else if ("英语".equals(del)) {
								j = 2;
							} else if ("政治".equals(del)) {
								j = 3;
							} else {
								j = 5;
							}
							if (j != 5) {
								stuScore[i][j] = 0;// 将该科目赋值为0,就是删除该科目。因为int型默认值为0
								System.out.println("删除成功,该学生信息如下:");
								System.out.println("姓名\t" + stuName.get(i) + "\n学号\t" + stuNumber.get(i) + "\n班级\t"
										+ stuClass.get(i));
								for (int jj = 0; jj < 4; jj++) {
									String sss = null;
									if (jj == 0)
										sss = "语文";
									if (jj == 1)
										sss = "数学";
									if (jj == 2)
										sss = "英语";
									if (jj == 3)
										sss = "政治";
									if (stuScore[i][jj] > 0) {
										System.out.println(sss + "\t" + stuScore[i][jj]);
									}
								}
								System.out.println("是否继续删除该学生的成绩(是:0,否:非0):");
								int chonet = input.nextInt();

								if (chonet != 0) {
									xxx = 4;
								}
							} else {
								System.out.println("非法输入!\n提示:科目名只有语文,数学,英语,政治");
								xxx++;
							}
							if (xxx == 3) {
								System.out.println("错误三次,请继续操作");
							}
						} while (xxx < 3);
						k = 1;
					} else {
						i++;
					}
				}
			} else if ("0".equals(deleteName)) {
				exitdelete = 1;
				k = 2;
			}
			if (k == 0) {
				System.out.println("未找到该学生,请确认后输入");
			}
			if (k == 1) {
				System.out.println("是否继续删除或退出(输入0继续,非0退出):");
				int choicene = input.nextInt();
				if (choicene != 0) {
					exitdelete = 1;
				}
			}
		} while (exitdelete == 0);

	}

	private static void scoreStatistics(String choice) {
		int exitSta = 0, j = 0;
		do {
			int k = 0, n = 100;// n的值随便设置的,也是因为0~3表示的是课程名,不冲突
			System.out.println("----请输入需要统计分析的课程名或0退出------");
			String StaName = input.next();
			if ("语文".equals(StaName)) {
				n = 0;
			} else if ("数学".equals(StaName)) {
				n = 1;
			} else if ("英语".equals(StaName)) {
				n = 2;
			} else if ("政治".equals(StaName)) {
				n = 3;
			} else if ("0".equals(StaName)) {
				exitSta = 1;
				k = 2;
				j = 1;
			} else {
				System.out.println("输入有误!\n提示:科目名只有语文,数学,英语,政治");
				j++;
			}
			if (j == 0) {
				int[] ls = new int[10001];
				int len = 0;// 统计有多少个成绩
				for (int ii = 0; ii < stuName.size(); ii++) {// 因为一科成绩相当于一个二维数组中的列。排序比较麻烦,先用一维数组接收
					if (stuScore[ii][n] != 0) {
						ls[len] = stuScore[ii][n];
						len++;
					}
				}
				if("4".equals(choice)) {
					toptop(len,ls,exitSta);
				}else {
					topStatis(len,ls,exitSta);
				}
			}
		} while (exitSta == 0 && j < 3);
	}

	private static int topStatis(int len,int[] ls,int exitSta) {
		int exitttt=0;
		do {
		System.out.println("----请选择统计方式------");
		System.out.println("1.最高分");
		System.out.println("2.最低分");
		System.out.println("3.平均值");
		System.out.println("4.及格率");
		System.out.println("请输入对应数字进行选择:");
		String choii = input.next();
		int count=0;//count用于统计个数,result用于累计求和
		float result=0;
		if("1".equals(choii)) {
			for (int i = 0; i < len; i++) {
				if(ls[i]>ls[i+1])
				{
					result = ls[i];
				}
			}
			System.out.println("最高分: "+result);
			exitttt=0;//归零,当前面输入有错误的时候,后面输入正确之后,将错误数归零
		}else if("2".equals(choii)) {
			for (int i = 0; i < len; i++) {
				if(ls[i]<ls[i+1])
				{
					result = ls[i];
				}
			}
			System.out.println("最低分: "+result);
			exitttt=0;//归零,当前面输入有错误的时候,后面输入正确之后,将错误数归零
		}else if("3".equals(choii)) {
			for (int i : ls) {
				if(i>0) {
				count++;
				result=result+i;
				}
			}
			System.out.println("平均值: "+result/count);
			exitttt=0;//归零,当前面输入有错误的时候,后面输入正确之后,将错误数归零
		}else if("4".equals(choii)) {
			float j=0;
			for (int i : ls) {
				if(i>0) {
				if(i>60) {
					j++;
				}
				count++;
			}}
			System.out.println("及格率: "+j/count);
			exitttt=0;//归零,当前面输入有错误的时候,后面输入正确之后,将错误数归零
		}else {
			System.out.println("非法输入!");
			exitttt++;
		}
		if(exitttt==3) {//错误数到达到三次,退出当前循环。
			System.out.println("错误三次,请继续操作");
		}
		if(exitttt==0) {
			System.out.println("是否继续统计该科目信息(是:0,否:非0值)");
			String next = input.next();
			if (!"0".equals(next)) {
				exitttt= 4;//用户自己不再统计,推出该科目信息的统计循环
			}
		}
		}while(exitttt<3);
		System.out.println("是否继续进行统计(是:0,否:非0值)");
		String next = input.next();
		if (!"0".equals(next)) {
			exitSta = 1;
		}
		return exitSta;
	}

	private static int toptop(int len,int[] ls,int exitSta) {
		System.out.println("升序输出:0,降序输出:非0值");
		String choi = input.next();
		if ("0".equals(choi)) {
			for (int ll = 0; ll < len - 1; ll++) {// 冒泡升排序
				for (int lj = len-2; lj >=0; lj--) {
					if (ls[lj] >ls[lj + 1]) {
						int temp = ls[lj];
						ls[lj] = ls[lj + 1];
						ls[lj + 1] = temp;
					}
				}
			}
			for (int i = 0; i < len; i++) {// 循环输出
				System.out.println(ls[i]);
			}
		} else {
			for (int ll = 0; ll < len - 1; ll++) {// 冒泡降序排序
				for (int lj = 0; lj < len - ll; lj++) {
					if (ls[lj] < ls[lj + 1]) {
						int temp = ls[lj];
						ls[lj] = ls[lj + 1];
						ls[lj + 1] = temp;
					}
				}
			}
			for (int i = 0; i < len; i++) {// 循环输出
				System.out.println(ls[i]);
			}
		}

		System.out.println("是否继续排序(是:0,否:非0值)");
		int next = input.nextInt();
		if (next != 0) {
			exitSta = 1;
		}
		return exitSta;
	}


}

 

  • 10
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值