案例: 学生投票系统

某班级投票竞选班干部,班级学生人数为10 人,每个学生只能投一票,投票成功提示 “感谢你的投票”。若重复投票,提示“请 勿重复投票”。当投票总数达到10或者主观 结束投票时,统计投票学生人数和投票结果。 本案例要求编程一个程序实现学生投票。

根据题目信息书写信息代码块

package voter;

public class message {
	private int count ;  //投票数
	private String name;  //投票人姓名
	private String advice;  //投票建议
	private static String list[] = new String[10];   //已投票人名单(所有成员共用一个成员名单)
	private static String selected[] = new String[10];  //选举人名单
	private static int selected_count[] = new int [10]; //选举人票数
	private static int num = 0;         //投票名单下标
	private static int figure = 0;        //选举者名单下标
	//含参构造函数
	public message(String name) {
		this.name = name;
	}
	
	//无参构造函数
	public message() {	
	}
	
	//赋值名字
	public void set_Name(String name) {
		this.name = name;
	}
	
	//投票
	public void vote(message voter,message constituent) {
		if(vote_advice(voter.name)) {
			advice  =  "请勿重复投票";
			System.out.println(advice);
		}
		
		else {
			advice  =  "感谢你的投票";
			System.out.println(advice);
			list[num] = voter.name;   //投票者名字加入名单
			num++;
			constituent.count++;         //选举者票数+1
			int k = voter_in(constituent);
			if(k==figure) {
				selected[k] = constituent.name;  //选举者名字加入名单
				selected_count[k]++;                   //更新票数
				figure++;
			}
			else {
				selected_count[k]++;                    //更新票数
			}
		}	
	}
	
	//判断是否已投票
	private boolean vote_advice(String name) {
		for(int i = 0;i<num;i++) {
			if(list[i].equals(name)) {
				return true;    //该成员已经投票
				}  
			}
			return false;  	 //该成员尚未投票
		}
	
	private int voter_in(message constituent) {
		for(int i = 0;i < figure;i++) {
			if(selected[i].equals(constituent.name)) {            //该选举者已存在
				return i;
			}
		}
		return figure;                                //新的提名者
	}
	
	//显示得票数
	public void show() {
		System.out.println(count);
	}
	
	//显示最后结果
	public void result() {
		System.out.println("投票人数:" + num);
		for(int i =0;i<figure;i++) {                          //冒泡排序
			for(int j = 0; j<figure-i-1;j++) {
				if(selected_count[j]>selected_count[j+1]) {
					int temp = selected_count[j];                    //对得票数进行排序
					selected_count[j] = selected_count[j+1];
					selected_count[j+1] = temp;
																						//更新选举者位置
					String str_temp = selected[j];
					selected[j] = selected[j+1];
					selected[j+1] = str_temp;
				}
			}
		}
		for(int i = 0;i<figure;i++) {
			System.out.println(selected[i] + ":" + selected_count[i]);
		}
		System.out.println("程序结束...");
	}
	
	//输出名字
	public String get_name() {
		return name;
	}
	
	public void get_count() {
		System.out.println(name + ":" + count);
	}
	
}

 题目中要求满足10人进行投票,定义一个message类型的数组保存这10人的信息然后不同的成员通过自己的代号调用投票函数,投票结束后用户还可以通过成员的代号查询投票情况,结束查询时,输出所有选举人的得票情况(按得票数目从小到大排序输出)

package voter;

import java.util.Scanner;

public class Voter {
	private message vote[] = new message[10] ;
	private int num = 10;
	//投票人员初始化(程序运行阶段赋值)
	public  void initialize() {
		for(int i = 0;i<num;i++) {
			String str_name;
			Scanner name = new Scanner(System.in);
			System.out.print("请输入成员姓名:");
			str_name = name.next();
			vote[i] = new message("str_name");
		}
	}
	//初始化成员将成员直接赋值
	public void set() {
		for(int i = 0;i<num;i++) {
			vote[i] =new message();
		}
		vote[0].set_Name("Jan");
		vote[1].set_Name("Michale");
		vote[2].set_Name("KangKang");
		vote[3].set_Name("Jack");
		vote[4].set_Name("Mera");
		vote[5].set_Name("Win");
		vote[6].set_Name("June");
		vote[7].set_Name("July");
		vote[8].set_Name("Auget");
		vote[9].set_Name("Bank");
	}
	
	//代号
	public void show() {
		for(int i = 0;i<num;i++) {
			System.out.print(i + ":" + vote[i].get_name() +" \t");
		}
		System.out.println("("+"10" + "退出系统"+")");
	}
	
	public static void main(String[] args) {
		Voter voter = new Voter();
		int j;
		int number = 0;	
		int i;
		voter.set();
		OUT:
		while(true) {
		Scanner in = new Scanner(System.in);
		voter.show();
		System.out.print("请输入你的身份代号:");            
		j = in.nextInt();
																//以某一成员的身份结束程序
		System.out.print("请问需要给谁投票 (输入10直接退出系统):");
		i = in.nextInt();
		if(i==10||number==10) {
			for(;;) {               //查询得票信息
				voter.show();
				System.out.println("(0~9):查询对应人员的得票数,10:退出系统(输出所有选举者得票情况)");
				System.out.print("查询:");
				int k = in.nextInt();
				if(k==10)
				{
					voter.vote[0].result();
					break OUT;
				}
				voter.vote[k].get_count();
				}
			}
		
		else{
			voter.vote[j].vote(voter.vote[j],voter.vote[i]);
			}
		}
	}
	
}

需要注意的是:创建自定义类后,新建一个自定义类的数组,Java语言本身是不提供在自定义类数组声明时候自动创建新对象的方式的,需要为每一位成员开辟空间

public void initialize() {
		for(int i = 0;i<num;i++) {
			String str_name;
			Scanner name = new Scanner(System.in);
			System.out.print("请输入成员姓名:");
			str_name = name.next();
			vote[i] = new message("str_name");
		}
	}
	
	//初始化成员将成员直接赋值
public void set() {
		for(int i = 0;i<num;i++) {
			vote[i] =new message();
		}
		vote[0].set_Name("Jan");
		vote[1].set_Name("Michale");
		vote[2].set_Name("KangKang");
		vote[3].set_Name("Jack");
		vote[4].set_Name("Mera");
		vote[5].set_Name("Win");
		vote[6].set_Name("June");
		vote[7].set_Name("July");
		vote[8].set_Name("Auget");
		vote[9].set_Name("Bank");
	}

  • 6
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值