基于C#语言Windows窗体应用(.Net Framework)的教室点名系统V1.1——可配置每个学生点中的概率

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情

一、前言

前文请细看:基于C#语言Windows窗体应用(.Net Framework)的教室点名系统V1.0

今天加个功能,老师想要把某个别同学的点名概率提上来,这要咋整。

简单,安排!

二、原理简述

  • 提高指定同学的点名概率,那么就增加权重即可
  • 默认权重1(默认空,即1),通过修改权重值,就可以间接的提高指定同学的点名概率
  • 如下图,在原本的学生名单中,增加格式:XX
  • 在解析学生名单时,查询到:XXX,则代表有XX个该学生参与随机点名
    • 如下图的张三,原本没有:10,则张三被随机点名的概率是1/3
    • 如今,增加了:10,则张三被随机点名的概率是10/(10+2)=10/12
张三:10
李四
王五
复制代码

三、源码详解

  • 每行遍历
  • 每行人名中是否存在:
    • 如果存在,则接着解析:后面的数字N,则添加NnamenameList
    • 如果不存在,则添加一个namenameList
  • 因为程序在随机点名的时候,会随机在nameList里面抽选,那么如果nameList里面张三的名字越多,被抽中的概率也越多。
private void getNameList(string path)
{
    StreamReader streamReader = new StreamReader(path, Encoding.UTF8);
    string content;
    string str = "";
    nameList.Clear();
    while ((content = streamReader.ReadLine()) != null)
    {
        //Console.WriteLine(content.ToString());
        string name = content.ToString();
        int index = content.IndexOf(':');
        if (index!=-1)
        {
            name = content.Substring(0, index);
            string number = content.Substring(index+1, content.Length-index-1);
            int num = Convert.ToInt32(number, 10);
            for(int i=1; i<num; i++)
            {
                nameList.Add(name);
            }
        }
        nameList.Add(name);
        str += (name + "、");
    }
    streamReader.Close();
    str = str.Substring(0, str.Length-1);
    nameListLabel.Text = str;
}
复制代码
private void randomBtn_Click(object sender, EventArgs e)
{
    //Random rd = new Random();  //无参即为使用系统时钟为种子
    int rd = new Random().Next(0, nameList.Count);
    nameLabel.Text = nameList[rd];            
}
复制代码

四、效果展示

~~稍后传~~~

操作太简单了,我就不录视频了~

觉得好,就一键三连呗(点赞+收藏+关注)

分类:
人工智能
标签: