摇奖机设计

要求

使用Math和ArrayList完成一个摇奖机的功能

  1. 将一些学生对象加入到ArrayList中(从控制台输入学生信息)
  2. 输入2抽象

=双11大抽奖
1.添加抽奖学生==
=2.开始抽奖========

输入1:
输入学生信息,添加学生
输入" end" 完成添加
输入2:
开始抽奖,对于被抽取到的学生提示:恭喜中奖,作业题10道!
已经中过奖的学生从集合中移除 remove
输入“back”可以返回上一级菜单
学生信息:学号,姓名,性别

思路

编写多个方法,然后调用这些方法完成功能。返回上一级需要用到递归的方法。

代码(1)

创建学生(student)类,定义属性、方法,和一个带参数的构造器、一个不带参数的构造器。

package com.softeem.lesson13.dafuweng;

public class Student {

	private int sno;
	private String sname;
	private String sex;
	
	public Student() {
		// TODO Auto-generated constructor stub
	}
	
	
	public Student(int sno, String sname, String sex) {
		super();
		this.sno = sno;
		this.sname = sname;
		this.sex = sex;
	}


	public int getSno() {
		return sno;
	}
	public void setSno(int sno) {
		this.sno = sno;
	}
	public String getSname() {
		return sname;
	}
	public void setSname(String sname) {
		this.sname = sname;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
}

代码(2)

package com.softeem.lesson13.dafuweng;
//导包
import java.awt.Color;
import java.awt.Font;
import java.util.ArrayList;
import java.util.Scanner;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class Extruct {
    //用ArrayList创建一个包含学生类的数组
	static ArrayList<Student>list = new ArrayList<>();
	//定义窗体,好处是只创建一个窗体,后面可以都使用这个窗体
	private JFrame j;
	//添加学生
	public void addStu() {
		System.out.println("请输入学生信息,例如(1001/softeem/男):");
		///输入String
		Scanner sc = new Scanner(System.in);
		String str = sc.nextLine();
		//提取用"/"分割符分离的字符串到一个数组
		String[] info = str.split("/");
		//判断输入的内容是否包含三项信息
		if(info.length != 3) {
			System.out.println("信息输入有误!");
			//递归
			addStu();
			return;
		}
		//将输入的信息截取以及转换之后存储到对象中
		Student s = new Student(Integer.parseInt(info[0]),info[1],info[2]);
		//将对象加入集合
		list.add(s);
		System.out.println("输入end返回上一级菜单!输入其他继续添加");
		if("end".equals(sc.nextLine())) {
			//todo 上一级菜单
			menu();
		}else {
			addStu();
		}
	}
	
	//抽奖
	public void ext() {
		//每次抽取之前,先隐藏上一个窗口
				if(j != null) {
					j.setVisible(false);
				}
		if(list.size() > 0) {
		//从学生集合中随机一个索引
		int index =(int) (list.size() * Math.random());
		//获取中奖学生
		Student stu = list.get(index);
		//显示图形界面
		showDialog(stu.getSname());
//		System.out.println("中奖学生:"+stu.getSname());
		//将此学生从集合中移除
		list.remove(index);
		//返回上一级
		menu();
		}else {
			System.out.println("请继续添加抽奖人!");
			addStu();
		}
	}
	
	public void menu() {
		System.out.println("==========SOFTEEM 双十一大抽奖===========");
		System.out.println("【1】.添加抽奖学生");
		System.out.println("【2】.抽奖");
		System.out.println("【0】.退出抽奖");
		System.out.println("=========================================");
		
		Scanner sc = new Scanner(System.in);
		String i = sc.next();
		switch(i) {
		case "1":
			addStu();
			break;
		case "2":
			ext();
			break;
		case "0":
			System.out.println("谢谢使用,再见!");
			System.exit(0);
			break;
			default:
				System.out.println("请重新输入");
				//递归
				menu();
		}
	}
	
	//显示窗口
	public void showDialog(String name) {
		//创建窗体
		j = new JFrame("中奖人");
		//设置窗口大小
		j.setSize(300,200);
		//设置居中显示
		j.setLocationRelativeTo(null);
		//禁止改变窗口大小
		j.setResizable(false);
		//创建JLabel
		JLabel txt = new JLabel(name);
		
		txt.setFont(new Font("楷体",Font.BOLD,50));
		txt.setForeground(Color.RED);
		//将JLabel加入到窗体中显示
		j.add(txt);
		
//		j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//显示窗体
		j.setVisible(true);
		
	}
	//测试
	public static void main(String[] args) {
		new Extruct().menu();
	}
}

运行结果

在这里插入图片描述添加完成后输入end结束添加,否则继续添加学生。
在这里插入图片描述
在这里插入图片描述

总结

很典型的例题,先创建一个存入数组的学生类型,然后要用到接触不久的str.split("/") ;Integer.parseInt(info[0])。返回上一级和重新添加都需要用到递归的方法。最后一个难点就是关于窗口的一些方法的运用,因为比较陌生,所以难以运用,需要多接触,多理解。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值