java IO编程实例——投票选举

执键写春秋
• 阅读 1469

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

程序操作员将每张选票上所填的代号(1、2、3、4)循环输入电脑,输入数字0结束输,然后将所有候选人的得分情况显示出来,并显示最终当选者结果。 (2)具体要求 要求用面向对象方法,编写学生类Student,将候选人姓名、代号与票数保存到类Student中,并实现相应的get与set方法。

输入数据前,显示出各候选人代号,知直到输入的数字为0,结束选票输入工作。

在接收每次输入的选票后要求验证该选票是否有效,即如果输入的数不是0、1、2、3、4、5之间的数字,则选票无效,提示错误信息并继续输入。

输入结束后显示所有候选人的得票情况,如参考样例。

输出最终当选择和的相关信息,如参样例所示。 (3)参考样例 张三【0】票 李四【0】票 王五【0】票 赵六【0】票 请输入班长候选人代号(数字0结束):1 请输入班长候选人代号(数字0结束):1 请输入班长候选人代号(数字0结束):7 您输入有误,请重新输入:0 结果: 张三【2】票 李四【0】票 王五【0】票 赵六【0】票 投票结果:恭喜张三同学最后以2票当选班长!

程序实现: 第一步,先把学生类给建立起来,通过阅读题目,分析所得这个类里面需要保存有候选人编号、候选人姓名、得票数,并实现对应的构造方法和相应的get\set方法。

package person.xsc.praticeIII; 
public class Student implements Comparable<Student>{
    private int stuId ;    // 候选人编号
    private String stuName ;    //候选人姓名
    private int vote ;    // 候选人票数
    public Student(int stuId, String stuName, int vote) {
        this.stuId = stuId;
        this.stuName = stuName;
        this.vote = vote;
    }

    public int getStuId() {
        return stuId;
    }

    public void setStuId(int stuId) {
        this.stuId = stuId;
    }

    public String getStuName() {
        return stuName;
    }

    public void setStuName(String stuName) {
        this.stuName = stuName;
    }

    public int getVote() {
        return vote;
    }

    public void setVote(int vote) {
        this.vote = vote;
    }

    public int compareTo(Student o){
        if(this.vote<o.vote){
            return 1 ;
        }else if(this.vote>o.vote){
            return -1 ;
        }else{
            return 0 ;
        }
    }
@Override
    public String toString() {
        return "Student [stuId=" + stuId + ", stuName=" + stuName + ", vote=" + vote + "]";
    }
 }

第二步,定义方法接口类,阅读题目要求,总结出大致的方法,一是输出结束投票后输出候选人各自信息。一是输出投票最终结果。一是投票功能。还有就是接受控制台输入的信息处理方法。

package person.xsc.praticeIII;

import java.io.IOException;

public interface InVote {
    //用于结束投票后输出候选人信息
    public void printInfo();
    //投票最终结果输出
    public void getResult();
    //投票功能
    public void vote() throws IOException;
    //数据接收方法
    public int getInt(String info,String err) throws IOException;
}

第三步,实现接口内的方法

package person.xsc.praticeIII;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class InVoteImple implements InVote{
    //实例候选人
    Student stu[] = {new Student(1,"张三",0),new Student(2,"李四",0),
            new Student(3,"王五",0),new Student(4,"赵六",0)} ;// 侯选人信息
    //中断循环
    boolean flag = true ;
    //用于结束投票后输出候选人信息
    @Override
    public void printInfo() {
        // TODO Auto-generated method stub
        for(int i=0;i<stu.length;i++){
            System.out.println(this.stu[i].getStuId() + ":"
                + this.stu[i].getStuName() + "【"+this.stu[i].getVote()+"】") ;    
        }
    }
    //投票最终结果输出
    @Override
    public void getResult() {
        // TODO Auto-generated method stub
        java.util.Arrays.sort(stu) ;    // 排序
        System.out.println("投票最终结果:" + stu[0].getStuName()+"同学,最后以"+stu[0].getVote()+"票当选班长!") ;
    }
    //具体投票过程
    @Override
    public void vote() throws IOException {
        // TODO Auto-generated method stub
        int num = getInt("请输入班长侯选人代号(数字0结束):","此选票无效,请输入正确的侯选人代号!") ;
        switch(num){
            case 0:{
                flag = false ;    // 中断循环
                break ;
            }
            case 1:{
                stu[0].setVote(stu[0].getVote() + 1) ;
                break ;
            }
            case 2:{
                stu[1].setVote(stu[1].getVote() + 1) ;
                break ;
            }
            case 3:{
                stu[2].setVote(stu[2].getVote() + 1) ;
                break ;
            }
            case 4:{
                stu[3].setVote(stu[3].getVote() + 1) ;
                break ;
            }
            default:{
                System.out.println("此选票无效,请输入正确的候选人代号!") ;
            }
        }
    }
    @Override
    public int getInt(String info, String err) throws IOException {
        // TODO Auto-generated method stub
        BufferedReader buf=new BufferedReader(new InputStreamReader(System.in)) ;
        int temp = 0 ;
        String str = null ;
        boolean flag = true ;    // 定义一个循环标记
        while(flag){
            System.out.print(info) ;//打印提示信息
            str = buf.readLine() ;//接收数据
            if(str.matches("\\d+")){//判断输入内容是否是数字
                temp = Integer.parseInt(str) ;
                flag = false ;    // 更改标志位,将退出循环
            }else{
                System.out.println(err) ;
            }
        }
        return temp ;
    }

}

第四步,测试类

package person.xsc.praticeIII;

import java.io.IOException;

public class Test{
    public static void main(String args[]) throws IOException{
        InVoteImple t=new InVoteImple();
        t.printInfo();// 先输出候选人信息
        while(t.flag) {
            t.vote();// 循环调用投票
        }
        t.printInfo();// 输出投票之后的侯选人信息
        t.getResult();// 得到结果
    }
}

第五步,输出

1:张三【0】
2:李四【0】
3:王五【0】
4:赵六【0】
请输入班长侯选人代号(数字0结束):2
请输入班长侯选人代号(数字0结束):9
此选票无效,请输入正确的候选人代号!
请输入班长侯选人代号(数字0结束):/
此选票无效,请输入正确的侯选人代号!
请输入班长侯选人代号(数字0结束):wd
此选票无效,请输入正确的侯选人代号!
请输入班长侯选人代号(数字0结束):1
请输入班长侯选人代号(数字0结束):2
请输入班长侯选人代号(数字0结束):4
请输入班长侯选人代号(数字0结束):1
请输入班长侯选人代号(数字0结束):1
请输入班长侯选人代号(数字0结束):0
1:张三【3】
2:李四【2】
3:王五【0】
4:赵六【1】
投票最终结果:张三同学,最后以3票当选班长!
点赞
收藏
评论区
推荐文章
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
SQL一些面试题
1\.用一条SQL语句查询出每门课都大于80分的学生姓名namekechengfenshu张三语文81张三数学75李四语文76李四数学90王五语文81王五数学100王五英语90A:selectdistinctname
可莉 可莉
3年前
201771010124 王海珍 《面向对象设计 java》第十八周总结
1、实验目的与要求(1)综合掌握java基本程序结构;(2)综合掌握java面向对象程序设计特点;(3)综合掌握javaGUI程序设计结构;(4)综合掌握java多线程编程模型;(5)综合编程练习。2、实验内容和步骤任务1:填写课程课后调查问卷,网址:https://www.w
可莉 可莉
3年前
201772020113 李清华《面向对象程序设计(java)》第18周学习总结
1、实验目的与要求(1)综合掌握java基本程序结构;(2)综合掌握java面向对象程序设计特点;(3)综合掌握javaGUI程序设计结构;(4)综合掌握java多线程编程模型;(5)综合编程练习。2、实验内容和步骤任务1:填写课程课后调查问卷,网址:https://www.w
Stella981 Stella981
3年前
201771010124 王海珍 《面向对象设计 java》第十八周总结
1、实验目的与要求(1)综合掌握java基本程序结构;(2)综合掌握java面向对象程序设计特点;(3)综合掌握javaGUI程序设计结构;(4)综合掌握java多线程编程模型;(5)综合编程练习。2、实验内容和步骤任务1:填写课程课后调查问卷,网址:https://www.w
Stella981 Stella981
3年前
IK Analyzer分词及词频统计Java简单实现
IKAnalyzer基于HadoopMapReducer框架Java实现:1、新建一个ChineseWordCount类2、在该类中再建一个私有静态类CWCMapper继承Mapper类,并复写Mapper类中map方法。PS:Mapper的4个泛型分别为:输入key类型,通常为LongWritable,为偏移量;输入value类型;输出ke
Wesley13 Wesley13
3年前
C实现通讯录管理系统(亮点:纯链表实现、子串匹配,文件读写)
题目:通讯录管理程序问题描述编写一个简单的通讯录管理程序。通讯录记录有姓名,地址(省、市(县)、街道),电话号码,邮政编码等四项。基本要求程序应提供的基本基本管理功能有:1) 添加:即增加一个人的记录到通信录中2) 显示:即在屏幕上显示所有通信录中的人员信息,应能分屏显示。3) 存储:即将通讯录信息保存在一个文件中。4
Wesley13 Wesley13
3年前
9: 偏函数,高级函数,匿名函数,参数推断,闭包,柯里化,控制抽象
第十三章函数式编程高级13.1偏函数(partialfunction)13.1.1提出一个需求,引出思考给你一个集合vallistList(1,2,3,4,"abc"),请完成如下要求:1、将集合list中的所有数字1,并返回一个新的集合
Stella981 Stella981
3年前
201772020113 李清华《面向对象程序设计(java)》第18周学习总结
1、实验目的与要求(1)综合掌握java基本程序结构;(2)综合掌握java面向对象程序设计特点;(3)综合掌握javaGUI程序设计结构;(4)综合掌握java多线程编程模型;(5)综合编程练习。2、实验内容和步骤任务1:填写课程课后调查问卷,网址:https://www.w
Wesley13 Wesley13
3年前
Java面试测试题
1.作用域public,protected,private,以及不写时的区别?(1)Public:不同包、同一包、类内都可用。(2)Private:类内。(3)Protected:不同包的子类、同一包、类内都可用。(4)不写时:同一包内、类内。2.面向对象的特征有哪些方面?(1)抽象:找共性,将共有的属性、方法放到父类中。(2)继