C#实现随机抽奖(^)
刚接触C#没多久,尝试着写了一个抽奖的小程序(+—+)。
*功能简介:*它可以在规定时间内随机选取要抽取对象中的一个,可以连续抽取(重复也行,不重复也可以)。这个看自己要哪种效果啦。对了这个小程序写得不是很好,需要自己建一个txt文件添加自己要抽的东西(名字要和代码里的一样哦),一行只能添加一个对象(这个列表类型是识别一行为一个对象)。。。。。。。
*思路:*利用定时器timer实现⏲定时功能,Random产生随机数,将自己的待抽取对象以文件流的形式读取出来,然后与上面两个功能相结合产生结果。
*实现:*先创建一个Windows窗体应用,添加一个timer控件和一个openFileDialog控件(用来打开文件)。然后可以再添加两个button控件,一个实现程序的开关,另一个用来选择打开文件。然后就可以开始操作一波啦(嘿嘿~)。
附上我的效果图(瞎搞的):
代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 抽奖
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
StreamReader sred;
Random rdm = new Random(); //实例化随机类对象
int i = 0, length = 0;
List<string> array=new List<string> (); //实例化一种可通过索引访问的强列表类型
string fileName = "Random.txt"; //用来储存数据的文本,注:此处没有写生成文件的代码,需要自己创建一个同名txt文件
public void readText() //读取文本文件内的抽取对象
{
i = 0;length = 0;
sred = new StreamReader(fileName, UnicodeEncoding.GetEncoding("UTF-8")); //从选择文件内读取成UTF-8 格式的文件流
string content; //用来存储读取到的内容
while ((content = sred.ReadLine()) != null) //读取到内容添加进列表中
{
array.Add(content);
}
sred.Close(); //读取完毕,关闭文件流读取对象
}
private void button1_Click(object sender, EventArgs e) //用来开始和关闭抽取过程
{
timer1.Stop();
timer1.Start();
}
private void button2_Click(object sender, EventArgs e) //用来选择文件
{
openFileDialog1.Filter = "(*.txt)|*.txt"; //指定文件格式为txt
if (openFileDialog1.ShowDialog() == DialogResult.OK) //打开文件选择对话框
{
fileName = openFileDialog1.FileName; //选中并打开文件
readText(); //读取
}
}
private void textBox1_ImeModeChanged(object sender, EventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void timer1_Tick(object sender, EventArgs e)
{
i++; length++;
if (array.Count == 0) //没有数据,提示重新选择
{
timer1.Stop();
MessageBox.Show("当前不存在抽取对象或对象已经抽完,请重新选择", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
if (length > array.Count - 1) //只有一个抽取对象,就直接显示结果
{
length = 0;
}
textBox1.Text = array[length];
if (i == 10) //延时一秒
{
int tempNum = rdm.Next(0, array.Count - 1); //随机返回这个范围内的一个整数
textBox1.Text = array[tempNum]; //显示结果
// array.RemoveAt(tempNum); //加上就变成不重复抽取
i = 0;
timer1.Stop(); //抽取停止
}
}
}
}
}
有什么不对的地方欢迎大家指正,我也是才接触没多久的新手,嘻嘻(*^*)