编写WPF应用程序实现以下功能:定义一个RandomHelp类,该类提供一个静态的GetIntRandomNumber方法,一个静态的GetDoubleRandomNumber方法。

实验6、定时器和随机数 

(1)实验目的

通过该实验,让学生掌握定时器和Random类的使用方法。

(2)实验内容

编写WPF应用程序实现以下功能:定义一个RandomHelp类,该类提供一个静态的GetIntRandomNumber方法,一个静态的GetDoubleRandomNumber方法。

在窗体中让用户指定随机数范围,当用户单击开始按钮时,启动定时器,在定时器事件中调用RandomHelp类中的静态方法生成随机数,并在页面中显示出来。当用户单击停止按钮时,停止定时器,然后用比原字体大一倍的字体显示最后生成的随机数

(3)验收/测试用例

在主窗体中,让用户指定随机数范围,当用户单击【开始】按钮时,启动定时器,在定时器事件中调用RandomHelp类中的静态方法生成随机数,并在窗体上显示出来。当用户单击【停止】按钮时,停止定时器,然后用比原字体大一号的字体显示最后生成的随机数。

运行结果:

窗体界面:

 窗体代码:

<Window x:Class="CSharp_RandomNumber.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:CSharp_RandomNumber"
        mc:Ignorable="d"
        Title="RandomNumber" Height="450" Width="800">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="2*"/>
            <ColumnDefinition Width="23*"/>
        </Grid.ColumnDefinitions>
        <GroupBox Header="参数" Margin="26,10,26,272" Grid.ColumnSpan="2"/>
        <GroupBox Header="结果" Margin="26,244,26,21" Grid.ColumnSpan="2"/>
        <Label Content="最小:" HorizontalAlignment="Left" Margin="25,42,0,0" VerticalAlignment="Top" Grid.Column="1"/>
        <Label Content="停时器间隔:" HorizontalAlignment="Left" Margin="25,92,0,0" VerticalAlignment="Top" Grid.Column="1"/>
        <Label Content="最大:" HorizontalAlignment="Left" Margin="313,42,0,0" VerticalAlignment="Top" Grid.Column="1"/>
        <Label x:Name="result" Content="" HorizontalAlignment="Left" Margin="92,264,0,0" VerticalAlignment="Top" Width="447" Height="130" AllowDrop="True" FontSize="30"  VerticalContentAlignment="Center" Grid.Column="1"  />
        <RadioButton x:Name="shishu" Content="生成随机实数" HorizontalAlignment="Left" Margin="577,104,0,0" VerticalAlignment="Top" Grid.Column="1"/>
        <RadioButton x:Name="zhengshu" Content="生成随机整数" HorizontalAlignment="Left" Margin="577,43,0,0" VerticalAlignment="Top" IsChecked="True" Grid.Column="1"/>
        <TextBox x:Name="min" HorizontalAlignment="Left" Margin="71,46,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" Grid.Column="1"/>
        <TextBox x:Name="jiange" HorizontalAlignment="Left" Margin="112,101,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="367" Grid.Column="1"/>
        <TextBox x:Name="max" HorizontalAlignment="Left" Margin="359,46,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="120" Grid.Column="1"/>
        <Button x:Name="start" Content="开始" HorizontalAlignment="Left" Margin="71,186,0,0" VerticalAlignment="Top" Width="163" Height="43" Grid.Column="1" Click="start_Click_1"/>
        <Button x:Name="stop" Content="停止" HorizontalAlignment="Left" Margin="419,186,0,0" VerticalAlignment="Top" Width="186" Height="43" Grid.Column="1" Click="stop_Click"/>

    </Grid>
</Window>

操作代码段:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;

namespace CSharp_RandomNumber
{
    /// <summary>
    /// 作者:杨清源
    /// 注释:本次实验是河南大学软件学院C#课程的实验六“RandomNumber”
    /// 完成时间:2022/9/19
    /// </summary>
    public partial class MainWindow : Window
    {
        RandomHelp random1 = new RandomHelp(); //随机数对象
        DispatcherTimer timer = new DispatcherTimer(); //计时器对象    //在这里要特别注释到:WPf应用程序取消了timer控件,要使用using System.Windows.Threading;语句调用命名空间。
        
        private void Get(object sender, EventArgs e)
        {
            if (zhengshu .IsChecked == true)
            {
                int num1 = int.Parse(min.Text); //获得最小值
                int num2 = int.Parse(max.Text); //获得最大值
                result.Content = random1.GetIntRandomNUmber(num1, num2).ToString(); //更新随机数
            }
            else if (shishu.IsChecked == true)
            {
                double num1 = double.Parse(min.Text); //获得最小值
                double num2 = double.Parse(max.Text); //获得最大值
                result.Content = random1.GetDoubleRandomNumber(num1, num2).ToString(); //更新随机数
            }//通过if_else语句实现对 “选择了哪一个Radio button”的判断

        }//在最大值和最小值的textbox里获得随机数范围

        private void start_Click_1(object sender, RoutedEventArgs e)
        {
            double time = double.Parse(jiange.Text);//通过“jiange”textbox 获得timer的时间间隔。    //特别的,这里的时间间隔是以毫秒单位
            timer.Interval = TimeSpan.FromMilliseconds(time);//时间间隔
            timer.Tick += Get;  //每一轮时间间隔结束执行的事件
            timer.Start(); //开始计时            
        }

        private void stop_Click(object sender, RoutedEventArgs e)
        {
            timer.Stop(); //停止计时
        }
    }

    class RandomHelp
    {
        Random n = new Random();//生成一个random实例


        public int GetIntRandomNUmber(int num1, int num2)
        {
            int number = num1 + n.Next(num2 - num1);
            return number;
        } //生成int形的随机数n


        public double GetDoubleRandomNumber(double num1, double num2)
        {
            double number = num1 + n.Next((int)(num2 - num1)) + n.NextDouble();
            return number;
        } //生成double形的随机数n

    } //新建一个类,用来实现对不同类型随机数的生成
     //特别的,我发现如果使用DLL调用来实现这个功能,可能会出现奇怪的系统报错……
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值