使用面向对象知识制作一个简单的抽奖程序
还是老样子不多废话看题目!
ps:注解写的比较详细,一看就会,一写就费.
使用Math和ArrayList完成一个摇奖机的功能
- 将一些学生对象加入到ArrayList中(从控制台输入学生信息)
- 输入2抽奖
- =双11大抽奖
- =1.添加抽奖学生====
- =2.开始抽奖========
输入1:
输入学生信息,添加学生
输入" end" 完成添加
输入2:
开始抽奖,对于被抽取到的学生提示:恭喜中奖,作业题10道!
已经中过奖的学生从集合中移除 remove
输入“back”可以返回上一级菜单
学生信息:学号,姓名,性别
- @author ZyKun
学生类:
package demo;
public class Student {
private int sno;
private String sname;
private String sex;
public Student() {
}
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;
}
}
实现+测试:
package demo;
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 {
static ArrayList<Student> list = new ArrayList<>();
private JFrame j;
//添加学生
public void addStu() {
//输出提示语句
System.out.println("请输入学生信息,例如(1001/ZyKun/男):");
Scanner sc = new Scanner(System.in);
//接收一行字符串
String str = sc.nextLine();
//根据"/"来截取str片段存入info数组中
String[] info = str.split("/");
//判断输入的内容是否包含三项信息
if(info.length != 3) {
System.out.println("信息输入有误!");
//递归(自己调用自己)
addStu();
}
//将输入的信息截取以及转换之后存储到对象中
//Integer.parseInt(info[0])--->将String类型转换成int类型
Student s = new Student(Integer.parseInt(info[0]), info[1], info[2]);
//将对象加入集合
list.add(s);
System.out.println("输入end返回上一级菜单! 输入其他则继续添加");
if("end".equals(sc.nextLine())) {
//上一级菜单
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());
//将此学生从集合中移除
list.remove(index);
//返回上一级
menu();
}else {
System.out.println("请继续添加抽奖人!!!");
//继续添加学生
addStu();
}
}
//显示窗口
public void showDialog(String name) {
//创建窗体
j = new JFrame("中奖人");
//设置窗口大小
j.setSize(666,666);
//设置居中显示
j.setLocationRelativeTo(null);
//禁止改变窗口大小
j.setResizable(false);
//创建JLabel
JLabel txt = new JLabel("恭喜你:"+name+"!领取作业题十道!");
txt.setFont(new Font("楷体",Font.BOLD,40));
txt.setForeground(Color.RED);
//将JLabel加入到窗体中显示
j.add(txt);
//显示窗体
j.setVisible(true);
}
//界面
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) {
//如果输入的是1
case "1":
addStu();
break;
//如果输入的是2
case "2":
ext();
break;
//如果输入的是0
case "0":
System.out.println("谢谢使用,再见!");
System.exit(0);
break;
//否则
default:
System.out.println("请重新输入");
menu();
}
}
public static void main(String[] args) {
new Extruct().menu();
}
}
看看效果:
ps:小白一枚,仅供参考!