(JavaIO编程案例)投票选举

投票选举

(1)功能描述

有一个半采用*投票的方法推选班长,班长候选人共4位,每个人姓名以及代号分别为“张三 1,李四 2,王五 3,赵六 4”。

程序操作员将每张选票上所填的代号(1、2、3、4)循环输入电脑,输入数字0结束输,然后将所有候选人的得分情况显示出来,并显示最终当选者结果。

(2)具体要求

  1. 要求用面向对象方法,编写学生类Student,将候选人姓名、代号与票数保存到类Student中,并实现相应的get与set方法。
  2. 输入数据前,显示出各候选人代号,知直到输入的数字为0,结束选票输入工作。
  3. 在接收每次输入的选票后要求验证该选票是否有效,即如果输入的数不是0、1、2、3、4、5之间的数字,则选票无效,提示错误信息并继续输入。
  4. 输入结束后显示所有候选人的得票情况,如参考样例。
  5. 输出最终当选择和的相关信息,如参样例所示。

(3)参考样例

  1. 张三【0】票
  2. 李四【0】票
  3. 王五【0】票
  4. 赵六【0】票

请输入班长候选人代号(数字0结束):

1

请输入班长候选人代号(数字0结束):

1

请输入班长候选人代号(数字0结束):

7

您输入有误,请重新输入:

0

结果:

  1. 张三【2】票
  2. 李四【0】票
  3. 王五【0】票
  4. 赵六【0】票

投票结果:恭喜张三同学最后以2票当选班长!

 

程序实现:

  1. 建立学生类,这个类里面需要保存有编号、姓名、票数
    package com.io.demo.vo;
    
    public class Student implements Comparable<Student>{
    	
    	private long id;
    	private String name;
    	private int vote;	//票数
    	
    	public Student(long id,String name,int vote) {
    		
    		this.id = id;
    		this.name = name;
    		this.vote =vote;
    		
    	}
    	
    	
    	
    	@Override
    	public int compareTo(Student o) {
    	
    		return  o.vote - this.vote;
    		
    	}
    	
    	public String toString() {
    		
    		return "代号:"+this.id+"、姓名:" + this.name +"、票数:"+this.vote;
    		
    	}
    
    
    	//setter、getter
    	public long getId() {
    		return id;
    	}
    
    
    
    	public void setId(long id) {
    		this.id = id;
    	}
    
    
    
    	public String getName() {
    		return name;
    	}
    
    
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    
    
    	public int getVote() {
    		return vote;
    	}
    
    
    
    	public void setVote(int vote) {
    		this.vote = vote;
    	}
    	
    	
    
    }
    

     

  2. 定义投票处理的业务接口
    package com.io.demo.service;
    
    import com.io.demo.vo.Student;
    
    public interface IVoteService {
    
    	public boolean inc(long id);	//根据编号进行增长
    	public Student[] result();	//获取投票的结果
    	public Student[] getData();	//获取全部数据
    	
    }
    
  3. 定义VoteServiceImpl子类实现方法

    package com.io.demo.serviceImpl;
    
    import java.util.Arrays;
    
    import com.io.demo.service.IVoteService;
    import com.io.demo.vo.Student;
    
    public class VoteServiceImpl  implements IVoteService{
    
    	private Student[] students = new Student[] {new Student(1,"张三",0),
    												new Student(2,"李四",0),
    												new Student(3,"王五",0),
    												new Student(4,"赵六",0)};
    	
    	@Override
    	public boolean inc(long id) {
    		
    		for(int x = 0;x < students.length;x++) {
    			if(students[x].getId() == id) {	//获取了指定的编号
    				this.students[x].setVote(this.students[x].getVote()+1);	//票数增长
    				return true;
    			}
    		}
    		return false;
    		
    	}
    
    	@Override
    	public Student[] result() {
    		
    		Arrays.sort(this.students);
    		return this.students;
    		
    	}
    
    	@Override
    	public Student[] getData() {
    		
    		return this.students;
    		
    	}
    
    }
    

     

  4. 定义工厂类

    package com.io.demo.factory;
    
    import com.io.demo.service.IVoteService;
    import com.io.demo.serviceImpl.VoteServiceImpl;
    
    public class Factory {
    
    	private Factory() {}
    	
    	public static IVoteService getInstance() {
    		
    		return new VoteServiceImpl();
    		
    	}
    	
    }
    
  5. 定义一个输入工具类

    package com.io.demo.InputUtil;
    
    import java.util.Scanner;
    
    public class InputUtil {
    	
    	private InputUtil() {}
    	
    	/**
    	 * 实现键盘输入数字的操作
    	 * @param prompt 提示信息
    	 * @return 一个可以使用的数字
    	 */
    	public static int getInt(String prompt) {
    		
    		int num = 0;
    		boolean flag = true;
    		Scanner input;
    		while(flag) {
    			input = new Scanner(System.in); 
    			System.out.print(prompt);	//打印提示信息
    			if(input.hasNext("\\d+")){
    				num = Integer.parseInt(input.next("\\d+"));	//记录数据
    				flag = false;
    			}else{
    				System.out.println("输入的内容不是数据");
    			}
    		}
    		return num;
    		
    	}
    	
    }
    

     

  6. 定义一个菜单显示类

    package com.io.demo.menu;
    
    import com.io.demo.InputUtil.InputUtil;
    import com.io.demo.factory.Factory;
    import com.io.demo.service.IVoteService;
    import com.io.demo.vo.Student;
    
    public class Menu {
    
    	private IVoteService voteService;
    	
    	public Menu() {
    		
    		this.voteService = Factory.getInstance();
    		this.vote();
    		
    	}
    
    	private void vote() {	//投票处理
    		
    		//获取数据并输出
    		Student[] stu = this.voteService.getData();
    		for(Student temp : stu) {
    			System.out.println(temp);
    		}
    		//对票数进行统计
    		int num = 10;
    		while(num != 0) {	//循环投票
    			num = InputUtil.getInt("请输入投票数据(0表示结束):");
    			if(num != 0) {
    				if(!this.voteService.inc(num)) {	//根据Id增长票数,如果返回是false则提示错误信息
    					System.out.println("此票无效,请重新输入!");
    				}
    			}
    		}
    		System.out.println("投票最终结果:");
    		stu = this.voteService.result();	//对结果进行排序
    		System.out.println("恭喜"+stu[0].getName()+"同学以"+stu[0].getVote()+"票获取班长职位!");
    
    		
    	}
    	
    }
    

     

  7. 定义测试类

    package com.io.demo;
    
    import com.io.demo.menu.Menu;
    
    public class Demo {
    	public static void main(String[] args) {
    		new Menu();
    	}
    }
    

     

 

上一篇:几种排名算法


下一篇:Linux配置硬盘自动挂载