java习题-面向对象封装-春节晚会最喜爱节目评选模拟程序
要求:
1、功能描述:春节晚会有四类节目,每类节目的类型名称及代号分别为 小品 X, 舞蹈 W,独唱 D,杂技 Z。程序操作员将每张观众的选票上所填的代号(X、W、D、或Z)循环输入电脑,输入字母E结束输入,然后将所有节目的得票情况显示出来,并显示最终获奖节目的信息。
2、具体要求如下:
(1)要求用面向对象方法,编写节目类JieMu,将节目的类型名称、代号和票数保存到类JieMu的对象中,并实现相应的getXXX 和 setXXX方法。
(2)编写主程序class OneTest(请考试学员统一使用主类名称:OneTest)
(3)输入数据之前,显示出各类节目的代号及类型名称:(提示:建立一个节目类型数组)如下图所示。
(4)循环执行接收键盘输入的节目代号,直到输入的数字为E,结束选票的输入工作,如下图所示
(5)在接收每次输入的选票后要求验证该选票是否有效,即:如果输入的数不是X,D,W,Z,E这5个字母之一,应显示出错误提示信息:此选票无效,请输入正确的节目代号!并继续等待输入。
(6)输入结束后显示所有节目的得票情况,如图所示
(7)输出最终获奖节目的相关信息,如图所示。
(8)建议用函数实现获得最终获选节目的功能(提示:以节目数组为参数,返回类型为:节目类型)
(9)从控制台接受输入数据,可以参考使用下面的代码
(10)只要提交源代码OneTest.java 和 JieMu.java
三、参考图示:

JieMu.java
1 package partyprogram; 2 3 public class JieMu { 4 private String name;//类型名称 5 private String code;//代号 6 private int ticketNum=0;//票数 7 //构造方法 8 public JieMu(String name, String code) { 9 super(); 10 this.name = name; 11 this.code = code; 12 } 13 public JieMu() { 14 super(); 15 // TODO Auto-generated constructor stub 16 } 17 18 public String getName() { 19 return name; 20 } 21 public void setName(String name) { 22 this.name = name; 23 } 24 public String getCode() { 25 return code; 26 } 27 public void setCode(String code) { 28 this.code = code; 29 } 30 public int getTicketNum() { 31 return ticketNum; 32 } 33 public void setTicketNum(int ticketNum) { 34 this.ticketNum = ticketNum; 35 } 36 37 38 /** 39 * 参数1: code :name 40 * 参数2:name:ticket 41 * 参数不是1也不是2:输出观众最喜欢的节目 42 * 43 */ 44 public String show(int select){ 45 if(select ==1) 46 return code+" : "+name; 47 else if(select==2){ 48 return name+" : "+ticketNum; 49 } 50 else 51 return "观众最喜欢的节目是:"+name+" 获得了"+ticketNum+"票"; 52 53 } 54 //用于进行票数的增加 55 public void addticketnum(){ 56 ticketNum++; 57 } 58 //用于判断当前id是否存在 59 public boolean isSame(String code){ 60 return this.code.equalsIgnoreCase(code); 61 } 62 63 }
OntTest.java
1 package partyprogram; 2 3 import java.util.Scanner; 4 5 public class OntTest { 6 public static void main(String[] args) { 7 //准备数据,创建一个所有名称的数组 8 String[] names={"小品","舞蹈","独唱","杂技"}; 9 //创建一个代号的数组 10 String[] codes={"X","D","W","Z"}; 11 //利用以上数组创建节目数组 null null null null 12 JieMu[] jiemu=new JieMu[names.length]; 13 //给数组得每一个元素进行实例化对象操作 14 for(int i = 0;i<jiemu.length;i++){//给null new对象 15 jiemu[i]=new JieMu(names[i],codes[i]); 16 } 17 //打印节目单 18 System.out.println("选举开始,节目代号和名称如下"); 19 //打印信息 20 for(JieMu jm:jiemu){ 21 System.out.println(jm.show(1)); 22 } 23 //接收输入指令 24 Scanner sc = new Scanner(System.in); 25 do{ 26 System.out.print("请选择你喜欢的节目前的代号进行投票(输入E结束):"); 27 String jge = sc.next(); 28 //判断输入指令是否为E equalsIgnoreCase忽略大小写 29 if("E".equalsIgnoreCase(jge)) break; 30 boolean flag =false;//表示不正确的指令 31 for(JieMu jm:jiemu){ 32 if(jm.isSame(jge)){ 33 jm.addticketnum(); 34 flag=true;//表示选票指令正确 35 break; 36 } 37 } 38 //如果执行循环结束后,flag还是flase 表示指令输入错误 39 if(!flag) System.out.println("输入的指令错误"); 40 41 }while(true); 42 System.out.println("选举结束"); 43 //对选票结果进行排序,不考虑同票 44 //利用冒泡排序 45 for(int i=0;i<jiemu.length-1;i++){ 46 for(int j=0;j<jiemu.length-1-i;j++){ 47 if(jiemu[j].getTicketNum()<jiemu[j+1].getTicketNum()){ 48 JieMu jm = jiemu[j+1]; 49 jiemu[j+1]=jiemu[j]; 50 jiemu[j]=jm; 51 } 52 } 53 } 54 for(JieMu jm:jiemu){ 55 System.out.println(jm.show(2)); 56 } 57 System.out.println(jiemu[max].show(0)); 58 59 } 60 }

浙公网安备 33010602011771号