【问题描述】 参加计算机设计大赛的n个学校编号为1~n,赛事分成m个项目,项目的编号为
1~m.比赛获奖按照得分降序,取前三名,写一个统计程序产生各种成绩单和得分报表
【基本要求】
1)每个比赛项目至少有10支参赛队;每个学校最多有6支队伍参赛;
2)能统计各学校的总分;
3)可以按照学校编号或名称查询,学校的总分、各项目的总分排序输出;
4)可以按学校编号查询学校某个项目的获奖情况;可以按项目编号查询取得前三名的学校;
5)数据存入文件并能随时查询
【设计要求】
1)输入数据形式和范围:可以输入学校的名称,赛事项目的名称。
2)输出形式:有中文提示,各学校分数为整数
3)界面要求:交互设计要合理,每个功能可以设立菜单,根据提示,完成相关功能的要求。
4)存储结构:学生自己根据系统功能要求自己设计,但是赛事相关数据要存储在文件中。
【测试数据】 要求使用全部合法数据,整体非法数据,局部非法数据。进行程序测试,以保
证程序的稳定。
【实现提示】 假设3<赛事项目数量<=10,学校名称长度不超过20个字符。每个赛事结束时,
将其编号、名称输入,并依次输入参赛学校编号、学校名称和成绩。
1、问题分析和任务定义、
通过问题,可以建立项目类和学校类。
2、数据结构的选择和概要设计、
Team类表示参赛队伍情况:参加的项目编号(int) 所在学校(string)获得成绩(int);
用arraylist把项目类装到集合中,进行数据处理。
3、逻辑设计、
Team(String xiangmu, String xuexiao, int chengji)
排序时,对Team以及School通过Comparable接口,对成绩以及编号排序
通过java中set和get方法,分别实现求前三名,学校各项目的总分
文本内容通过IOException将txt文本导入即可
输入形式为 项目编号 学校名 分数
4、测试结果及其分析、
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.*; import java.util.ArrayList; public class shiyan2 { static Scanner sc = new Scanner(System.in); public static class Team implements Comparable<Team> { private int xiangmu; private String xuexiao; private int chengji; public void setXiangmu(int xiangmu) { this.xiangmu = xiangmu; } public int getXiangmu() { return xiangmu; } public void setXuexiao(String xuexiao) { this.xuexiao = xuexiao; } public String getXuexiao() { return xuexiao; } public void setChengji(int chengji) { this.chengji = chengji; } public void getChengji() { this.chengji = chengji; } public int compareTo(Team tea) { if (this.chengji < tea.chengji) return 1; if (this.chengji > tea.chengji) return -1; return 0; } } public static void qiansan(ArrayList<Team> teams,int xiangmuname) { //前三名 ArrayList<Team> list = new ArrayList<Team>(); if (teams.isEmpty()) { System.out.println("当前无数据,请添加后重试"); } else { for (int i = 0; i < teams.size() ; i++) { if (teams.get(i).getXiangmu()==xiangmuname) { list.add(teams.get(i)); } } } Collections.sort(list); for (int r = 0; r < 3; r++) { System.out.println("项目编号"+xiangmuname+" "+"第" + (r+1) + "名为" + list.get(r).xuexiao + "学校" + "," + "成绩为" + list.get(r).chengji); } } public static void huojiang(ArrayList<Team> teams,String schoolname,int xiangmuname){ //获奖情况 ArrayList<Team> list = new ArrayList<Team>(); if (teams.isEmpty()) { System.out.println("当前无数据,请添加后重试"); } else { for (int i = 0; i < teams.size() ; i++) { if (teams.get(i).getXiangmu()==(xiangmuname)) { list.add(teams.get(i)); } } Collections.sort(list); for (int r = 0; r < 3 ; r++) { if (list.get(r).xuexiao.equals(schoolname)){ System.out.println("项目编号"+xiangmuname+" "+schoolname+"学校获得第"+(r+1)+"名"); } } if (!(list.get(0).xuexiao.equals(schoolname))&&!(list.get(1).xuexiao.equals(schoolname))&&!(list.get(2).xuexiao.equals(schoolname))){ System.out.println("项目编号"+xiangmuname+" "+"该学校未获奖"); } } } public static void zongfen(ArrayList<Team> teams,String schoolname,int xiangmuname) { int sum = 0; // 指定项目的总分 if (teams.isEmpty()) { System.out.println("当前无数据,请添加后重试"); } else { for (int i = 0; i < teams.size() ; i++) { if (teams.get(i).getXuexiao().equals(schoolname)&&teams.get(i).xiangmu==(xiangmuname) ) { sum += teams.get(i).chengji; } } System.out.println("项目编号"+xiangmuname+" "+schoolname + "学校的总分数为" + sum); } } public static void main(String[] args) throws IOException { BufferedReader br=new BufferedReader(new FileReader("C:\\Users\\luck\\IdeaProjects\\untitled4\\src\\实验1测试数据.txt")); String line; ArrayList<Team> teams1 = new ArrayList<Team>(); while ((line=br.readLine())!=null){ String[] strArray =line.split(" "); Team team = new Team(); team.setXiangmu(Integer.parseInt(strArray[0])); team.setXuexiao(strArray[1]); team.setChengji(Integer.parseInt(strArray[2])); teams1.add(team); } br.close(); for (Team team:teams1){ team.getXiangmu(); team.getXuexiao(); team.getChengji(); } System.out.println("\t\t\t+ 1 查询前三 +"); System.out.println("\t\t\t+ 2 查询获奖情况 +"); System.out.println("\t\t\t+ 3 查询总分 +"); System.out.println("请输入0-3:"); int k=sc.nextInt(); switch(k) { case 1: System.out.println("请输入想要得到前三名的项目号"); qiansan(teams1, sc.nextInt()); break; case 2: System.out.println("请输入学校以及项目号"); huojiang(teams1, sc.next(),sc.nextInt()); break; case 3: System.out.println("请输入学校以及项目号"); zongfen(teams1, sc.next(), sc.nextInt()); break; default: System.out.println("输入有误"); break; } }
测试数据 从左到右依次为项目编号,学校名称,成绩
5、用户使用说明、
6、参考文献、
7、附录;