C#程序设计实验6 定时器和随机数

一、设计思想
先进行UI设计,放空间,调属性。再进行后台代码设计,创建开始按钮,整数按钮和实数按钮的标志,全设为false,用来控制点击事件的发生和停止。创建产生随机数的两个方法,从UI界面的最大值和最小值文本框中接受最大值和最小值创建相应范围的随机数。创建点击开始事件,在点击事件里创建定时器,从文本框中接受毫秒数,每隔相应的毫秒数执行一次产生随机数方法。在开始的点击事件中设立实数和整数标志的条件,用于产生相应的随机数。
二、主要源代码
UI界面
<Window x:Class="timerAndRandom.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:timerAndRandom"
        mc:Ignorable="d" Height="372" Width="757" Title="定时器和随机数练习">
    <Grid Height="326" VerticalAlignment="Top" Width="712">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="252*"/>
            <ColumnDefinition Width="108*"/>
            <ColumnDefinition Width="397*"/>
        </Grid.ColumnDefinitions>
        <Button Content="开始" HorizontalAlignment="Left" Margin="209,164,0,0" VerticalAlignment="Top" Height="22" Width="76" RenderTransformOrigin="0.519,0.164" Grid.ColumnSpan="2" Click="Start_Click"/>
        <Button Content="停止" HorizontalAlignment="Left" Margin="56,164,0,0" VerticalAlignment="Top" Height="22" Width="76" RenderTransformOrigin="0.371,-0.374" Grid.Column="2" Click="Stop_Click"/>
        <GroupBox Header="参数" Margin="38,24,39,203" Grid.ColumnSpan="3" Width="636">
            <Label Content="最小:" HorizontalAlignment="Left" Margin="54,-44,0,0" Width="42" RenderTransformOrigin="-1.047,-1.335" Height="28"/>
        </GroupBox>
        <TextBox x:Name="min" HorizontalAlignment="Center" Margin="90,47,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="60" RenderTransformOrigin="0.041,0.184"/>
        <Label Content="最大:" HorizontalAlignment="Left" Margin="199,44,0,254" Width="42" RenderTransformOrigin="-1.047,-1.335" Height="28"/>
        <TextBox x:Name="max" HorizontalAlignment="Left" Margin="249,48,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="60" TextChanged="TextBox_TextChanged" Grid.ColumnSpan="2"/>
        <Label Content="定时器间隔(毫秒):" HorizontalAlignment="Left" Margin="97,74,0,224" Width="130" RenderTransformOrigin="-1.047,-1.335" Height="28"/>
        <TextBox x:Name="ms" HorizontalAlignment="Left" Margin="249,78,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="60" TextChanged="TextBox_TextChanged" Grid.ColumnSpan="2"/>
        <RadioButton x:Name="int" Grid.Column="2" Content="随机生成整数" HorizontalAlignment="Left" Margin="127,50,0,0" VerticalAlignment="Top" Checked="_int_Checked"/>
        <RadioButton x:Name="real" Grid.Column="2" Content="随机生成实数" HorizontalAlignment="Left" Margin="127,79,0,0" VerticalAlignment="Top" Checked="real_Checked"/>
        <GroupBox x:Name="result" Grid.Column="2" Header="结果" Width="636" Height="72" Margin="-340,181,-1,0" FontFamily="Arial Black" FontSize="24"/>

    </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.Timers; //定时器
using System.Threading;
using System.Windows.Threading;

namespace timerAndRandom
{
    public partial class MainWindow : Window
    {
        DispatcherTimer timer = new DispatcherTimer();

        private static bool run_flag = false;  //开始与停止的标志
        private static bool int_flag = false;   //整数标志
        private static bool real_flag = false;  //实数标志

        public MainWindow()
        {
            InitializeComponent();
        }
        public void Start_Click(object sender, RoutedEventArgs e)
        {
            //判断按钮和值是否输入
            if(min.Text==null || max.Text==null)
            {
                MessageBox.Show("请先输入要产生的随机数范围!");
                return;
            }
            run_flag = true;
            int s = Convert.ToInt32(ms.Text);
            if (run_flag && int_flag)
            {
                timer.Interval = new TimeSpan(0, 0, 0,0,s);//设置的间隔为s毫秒
                timer.Tick += methods_Int;      //调用整数生成方法
                timer.IsEnabled = true;         //启动
                timer.Start();
            }else if (run_flag && real_flag)
            {
                timer.Interval = new TimeSpan(0, 0, 0,0,s);//设置的间隔为s毫秒,此函数为(天,小时,分钟,秒,毫秒)
                timer.Tick += methods_Double;   //调用生成实数方法
                timer.IsEnabled = true;         //启动
                timer.Start();
            }

        }
        //创建生成随机整数方法
        public void methods_Int(object sender, EventArgs e)
        {
            int r;
            r = RandomHelp.GetIntRandomNumber(Convert.ToInt32(min.Text), Convert.ToInt32(max.Text));
            result.Content = "                                    "+r;
        }

        //创建生成随机小数方法
        public void methods_Double(object sender, EventArgs e)
        {
            double r;
            r = RandomHelp.GetDoubleRandomNumber(Convert.ToInt32(min.Text), Convert.ToInt32(max.Text));
            result.Content = "                     "+r;
        }
        private void Stop_Click(object sender, RoutedEventArgs e)
        {
            timer.Stop();       //定时器终止 ,开始标志为false
            run_flag=false;
        }

        private void real_Checked(object sender, RoutedEventArgs e)
        {
           real_flag = true;
            int_flag = false;
        }

        private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
        {

        }

        private void _int_Checked(object sender, RoutedEventArgs e)
        {
            real_flag = false;
            int_flag = true;
        }
    }
    //生成随机数
    public class RandomHelp
    {
        //随机整数
        public static int GetIntRandomNumber(int min,int max)
        {
            Random rInt = new Random();
               int r = rInt.Next(min,max+1); //生成min到max内的随机整数
            return r;
        }
        //随机实数
        public static double GetDoubleRandomNumber(int min,int max)
        {
            Random rdouble = new Random();
           // double r = rdouble.Next(min, max+1);    //生成min到max内的随机实数
            double r = rdouble.NextDouble(); //生成0.0-1.0之间的浮点数
            r= r*(max-min+1)+min;           //生成min 到 max 之间的浮点数
            return r;
        }
        }
}

猜你喜欢

转载自blog.csdn.net/qq_62480054/article/details/131585527