年會抽獎 抽獎系統 抽獎軟件 C# Winform


年會抽獎軟件:

 Q.Q 358189777

C#、  數據庫Access;

1、系統啟動,自動全屏展示。

2、背景隨心切換、

3、快捷鍵方便自如:

  F1:彈出設置界面

  F2:查詢人員名單、中獎名單

  F3:基礎人員信息導入

  F4:查看當前抽獎項目已經抽取的名單

  F5:刷新

  F12:退出系統

  ESC:主界面自動最小化;其他設置界面自動關閉

  Delete:數據重置

有需要源碼,在我的淘寶店下單  https://item.taobao.com/item.htm?id=542768246339 ;

 

 

 

 

 

 

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CJ.Ctrl;

namespace CJ
{
    public partial class MainFrom : Form
    {
        public MainFrom()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 人員抽獎組塊
        /// </summary>
        public static List<UCNum> LstUcnum = new List<UCNum> ();
        public int YgNoLength = 6;//長度,參與人員的代號長度
        public int SX = 0;
        public int SY1 = 0;//抽獎項目框的Y周初始位置
        public int SY2 = 0;//抽獎項目框的Y軸結束位置
        public TextBox tbOtherCJNum = new TextBox();//其他抽獎項目,記錄人數。
        public TextBox tbOtherCJNumName = new TextBox(); //其他抽獎項目,抽獎項目名稱。
        public GroupBox GBQT = new GroupBox();
        public Image imgStr;//設置抽獎按鈕背景圖片,開始按鈕
        public Image imgEnd;//設置抽獎按鈕背景圖片,結束按鈕
        public int MaxNum = 0;//最大抽獎人數 
        public int SYNumn = 0;
        public   bool IsTrue = true;
        public static List<YG> LstYg = new List<YG>(); 
        public RadioButton RdioOrther = new RadioButton();
        public Label LbDispyCJ = new Label();
        public Button BtntherCJ = new Button();
        //用全局變量中轉
        Point mouseLocation; 
        //---------------------------------------------------------------------
        public Prize prize = new Prize();
        public void SetBackgroundImage(string Imagestr,string Mrk)
        {
            if (Mrk == "主頁")
            {
                this.BackgroundImage = Image.FromFile(Imagestr);
            }
            else if (Mrk == "開始")
            {
                lbbtn.Image = Image.FromFile(Imagestr);
                imgStr = Image.FromFile(Imagestr);
            }
            else
            {
                imgEnd = Image.FromFile(Imagestr);
            }
        }

         #region =========================================全屏設置================================================  
          [DllImport("user32.dll", EntryPoint = "ShowWindow")]
          public static extern Int32 ShowWindow(Int32 hwnd, Int32 nCmdShow);
          public const Int32 SW_SHOW = 5; public const Int32 SW_HIDE = 0;
  
          [DllImport("user32.dll", EntryPoint = "SystemParametersInfo")]
          private static extern Int32 SystemParametersInfo(Int32 uAction, Int32 uParam, ref Rectangle lpvParam, Int32 fuWinIni);
          public const Int32 SPIF_UPDATEINIFILE = 0x1;
          public const Int32 SPI_SETWORKAREA = 47;
         public const Int32 SPI_GETWORKAREA = 48;
  
         [DllImport("user32.dll", EntryPoint = "FindWindow")]
         private static extern Int32 FindWindow(string lpClassName, string lpWindowName); 

         /// <summary>  
         /// 設置全屏或這取消全屏  
         /// </summary>  
         /// <param name="fullscreen">true:全屏 false:恢復</param>  
         /// <param name="rectOld">設置的時候,此參數返回原始尺寸,恢復時用此參數設置恢復</param>  
         /// <returns>設置結果</returns>  
         public Boolean SetFormFullScreen(Boolean fullscreen)//, ref Rectangle rectOld
         {
             Rectangle rectOld = Rectangle.Empty;
             Int32 hwnd = 0;
             hwnd = FindWindow("Shell_TrayWnd", null);//獲取任務欄的句柄

             if (hwnd == 0) return false;

             if (fullscreen)//全屏
             {
                 ShowWindow(hwnd, SW_HIDE);//隱藏任務欄

                 SystemParametersInfo(SPI_GETWORKAREA, 0, ref rectOld, SPIF_UPDATEINIFILE);//get  屏幕范圍
                 Rectangle rectFull = Screen.PrimaryScreen.Bounds;//全屏范圍
                 SystemParametersInfo(SPI_SETWORKAREA, 0, ref rectFull, SPIF_UPDATEINIFILE);//窗體全屏幕顯示
             }
             else//還原 
             {
                 ShowWindow(hwnd, SW_SHOW);//顯示任務欄

                 SystemParametersInfo(SPI_SETWORKAREA, 0, ref rectOld, SPIF_UPDATEINIFILE);//窗體還原
             }
             return true;
         }
         #endregion =========================================全屏設置================================================       

         private void MainFrom_Load(object sender, EventArgs e)
         {
               tbOtherCJNum.TextChanged+=tbOtherCJNum_TextChanged;  //其他抽獎項目,記錄人數。
               tbOtherCJNumName.TextChanged+=tbOtherCJNumName_TextChanged;  //其他抽獎項目,抽獎項目名稱。
               BtntherCJ.Click += BtntherCJ_Click;
               tbOtherCJNum.KeyPress += tbOtherCJNum_KeyPress;
             //A.[員工代號],A.[員工名稱],A.[部門代號],B.[部門名稱],A.[抽獎狀態],a.[中獎限制],A.[中獎號],A.[中獎名稱]
             #region ==================================加載所有員工======================================
             DataTable DtAllYg = ReYg();
             for (int i = 0; i < DtAllYg.Rows.Count; i++)
             {
                 YG y = new YG();
                 YG xzy = new YG();
                 y.YG_NO = DtAllYg.Rows[i]["員工代號"].ToString();
                 y.YG_Name = DtAllYg.Rows[i]["員工名稱"].ToString();
                 LstYg.Add(y); 
             }
             #endregion ==================================加載所有員工======================================
             BackgroundImageLoad();//背景圖片加載
             #region =====================================全屏設置============================================
             SetFormFullScreen(true);
             this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
             this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
             #endregion=====================================全屏設置============================================
             PrizeLoad();//抽獎項目加載 
             GetNoLength();//獲取人員工號長度
             lbbtn.Tag = "開始";
         }

         void tbOtherCJNum_KeyPress(object sender, KeyPressEventArgs e)
         { 
             if (e.KeyChar != '\b')//這是允許輸入退格鍵  
             {
                 if ((e.KeyChar < '0') || (e.KeyChar > '9'))//這是允許輸入0-9數字  
                 {
                     e.Handled = true;
                 }
             }
         } 
         /// <summary>
         /// 獲取所有參與抽獎的人員信息。
         /// </summary>
         /// <returns></returns>
         public DataTable ReYg()
         {
             DataTable dt = new DataTable();
             try
             {
                 string sql = "SELECT A.[員工代號],A.[員工名稱],A.[部門代號],B.[部門名稱],A.[抽獎狀態],a.[中獎限制],A.[中獎號],A.[中獎名稱]  FROM 人員表 as A left join 部門表  as B on A.[部門代號] = B.[部門代號] ;";
                 dt = AccessHelper.DataSet(sql).Tables[0];
             }
             catch (Exception ex)
             {
             }
             return dt;
         }
         void tbOtherCJNumName_TextChanged(object sender, EventArgs e)
         {
             lb項目號.Text = tbOtherCJNumName.Text;
             lbPrizeTile.Text = tbOtherCJNumName.Text;
         }
         void tbOtherCJNum_TextChanged(object sender, EventArgs e)
         {
             lb總人數.Text = tbOtherCJNum.Text;            
         }
        /// <summary>
        /// 獲取人員工號長度
        /// </summary>
         public void GetNoLength()
         {
             //MaxNum
             string sql = "SELECT Num,NumType FROM MaxNum";
             DataTable dt = AccessHelper.DataSet(sql).Tables[0];
             for (int i = 0; i < dt.Rows.Count; i++)
             {
                 if (dt.Rows[i]["NumType"].ToString() == "W")
                 {
                     YgNoLength =Convert.ToInt32(dt.Rows[i]["Num"].ToString());
                 }
                 if (dt.Rows[i]["NumType"].ToString() == "N")
                 {
                     MaxNum =Convert.ToInt32( dt.Rows[i]["Num"].ToString());
                 }
             }
         }
        /// <summary>
        /// 背景圖片加載
        /// </summary>
         public void BackgroundImageLoad()
         {
             try
             {
                 string sql0 = "SELECT A.[Path],a.[IType] FROM BackImage AS A";
                 DataTable DtBakImage = AccessHelper.DataSet(sql0).Tables[0];
                 for (int i = 0; i < DtBakImage.Rows.Count; i++)
                 {
                     if (DtBakImage.Rows[i]["IType"].ToString() == "Main")
                     {
                         this.BackgroundImage = Image.FromFile(DtBakImage.Rows[i]["Path"].ToString()); ;
                     }
                     else if (DtBakImage.Rows[i]["IType"].ToString() == "BtnStr")
                     {
                         imgStr = Image.FromFile(DtBakImage.Rows[i]["Path"].ToString());
                         lbbtn.Image = Image.FromFile(DtBakImage.Rows[i]["Path"].ToString()); ;
                     }
                     else if (DtBakImage.Rows[i]["IType"].ToString() == "BtnEnd")
                     {
                         imgEnd = Image.FromFile(DtBakImage.Rows[i]["Path"].ToString());
                     }
                     else if (DtBakImage.Rows[i]["IType"].ToString() == "Title")
                     {
                         LbGSMC.Text = DtBakImage.Rows[i]["Path"].ToString();
                     }
                     else
                     {
                         lb標語.Text = DtBakImage.Rows[i]["Path"].ToString();
                     }
                 }
             }
             catch (Exception)
             {

             }
         }
        /// <summary>
        /// 抽獎項目加載
        /// </summary> 
        public void PrizeLoad()
         { 
             try
             {
                 PMeiun.Controls.Clear();
                 int W = this.Width;//當前寬度
                 int H = this.Height;//當前高度
                 int PX = Convert.ToInt32(Math.Floor((H - 400) * 1.0 / 2));
                 PMeiun.Location = new System.Drawing.Point(0, PX); //位置
                 SY1 = PX;//獲取並設置抽獎項目Y坐標初始位置
                 SY2 = PX + 400;//獲取抽獎項目Y坐標做大范圍的坐標
             }
             catch (Exception ex)
             { 
             }

             try
             {
                 string sql = "SELECT a.[排序],a.[項目號],a.[獎項名稱],a.[中獎人數],a.[限制因素],a.[已經抽取],a.[批次數] FROM 抽獎規則 AS a ORDER BY a.排序 ASC ";
                 DataTable DtCJ = AccessHelper.DataSet(sql).Tables[0];
                 int RH = 0;
                 int RW = 0;
                 if (DtCJ.Rows.Count > 0)
                 {
                     RH = 28;// Convert.ToInt32(Math.Floor(400 * 1.0 / (DtCJ.Rows.Count + 2)));
                     RW = 178;
                     for (int i = 0; i < DtCJ.Rows.Count; i++)
                     {
                         RadioButton rad = new RadioButton();
                         rad.Location = new System.Drawing.Point(8, 5 + RH * i);
                         rad.Size = new System.Drawing.Size(RW, RH - 2);
                         rad.TabIndex = 0;
                         rad.TabStop = true;
                         rad.Text = DtCJ.Rows[i]["中獎人數"] + "人:" + DtCJ.Rows[i]["獎項名稱"].ToString();
                         rad.UseVisualStyleBackColor = true;
                         rad.CheckedChanged += rad_CheckedChanged;
                         rad.Tag = DtCJ.Rows[i]["項目號"].ToString();                          
                         this.PMeiun.Controls.Add(rad);
                     }
                     RdioOrther.Location = new System.Drawing.Point(8, 5 + RH * DtCJ.Rows.Count);
                     RdioOrther.Size = new System.Drawing.Size(RW, RH - 1);
                     RdioOrther.TabIndex = 0;
                     RdioOrther.TabStop = true;
                     RdioOrther.Text = "臨時加抽";
                     RdioOrther.UseVisualStyleBackColor = true;
                     RdioOrther.CheckedChanged += RdioOrther_CheckedChanged;
                     this.PMeiun.Controls.Add(RdioOrther);
                     //-------------------------------------------------------------------------------
                     GroupBox gb = new GroupBox();
                     gb.BackColor = System.Drawing.Color.Transparent;
                     gb.Location = new System.Drawing.Point(4, RH * (DtCJ.Rows.Count + 1) - 4);
                     gb.Name = "gB";
                     gb.Size = new System.Drawing.Size(170, 130);
                     gb.TabIndex = 7;
                     gb.TabStop = false;
                     gb.Visible = false;
                     GBQT = gb;
                     this.PMeiun.Controls.Add(GBQT);
                     //--------------------------------------------------------------------------------
                     Label lbotherCJ = new Label();
                     lbotherCJ.Text = "抽獎人數";
                     lbotherCJ.AutoSize = true;
                     lbotherCJ.Location = new System.Drawing.Point(10, 40);
                     lbotherCJ.Size = new System.Drawing.Size(32, 12);
                     this.GBQT.Controls.Add(lbotherCJ);
                     tbOtherCJNum.Location = new System.Drawing.Point(62, 35);
                     tbOtherCJNum.Size = new System.Drawing.Size(100, 21);
                     this.GBQT.Controls.Add(tbOtherCJNum);
                     //--------------------------------------------------
                     Label lbotherName = new Label();
                     lbotherName.Text = "獎項名稱";
                     lbotherName.AutoSize = true;
                     lbotherName.Location = new System.Drawing.Point(10, 70);
                     lbotherName.Size = new System.Drawing.Size(32, 12);
                     this.GBQT.Controls.Add(lbotherName);
                     tbOtherCJNumName.Location = new System.Drawing.Point(62, 65);
                     tbOtherCJNumName.Size = new System.Drawing.Size(100, 21);
                     tbOtherCJNumName.Text = "加抽獎" + DateTime.Now.ToString("fffff") ;
                     this.GBQT.Controls.Add(tbOtherCJNumName);
                     //
                     BtntherCJ.Text = "保 存";
                     BtntherCJ.Location = new System.Drawing.Point(62, 95);
                     BtntherCJ.Size = new System.Drawing.Size(70, 21);
                     this.GBQT.Controls.Add(BtntherCJ);
                 }
             }
             catch (Exception ex)
             {
                 string xxxx = ex.Message.ToString();
             } 
         }

        /// <summary>
        /// 臨時加抽獎,保存按鈕
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void BtntherCJ_Click(object sender, EventArgs e)
        {
            try
            {
                if (Convert.ToInt32(tbOtherCJNum.Text.Trim())==0)
                {
                    return;
                }
                string sql = "";
                prize.IsidNum = 1;                
                prize.Name = this.tbOtherCJNumName.Text.Trim();
                prize.Num = Convert.ToInt32(tbOtherCJNum.Text.Trim());
                prize.YJNum = 0;
                prize.YJIsidNum = 0;
                prize.ThisNum = prize.Num;
                prize.ReMark = "";
                sql = "Select  count(1)  From [抽獎規則] as A  Where A.[獎項名稱] = '" + prize.Name + "' ";
                int count = Convert.ToInt32(AccessHelper.DataSet(sql).Tables[0].Rows[0][0]);
                if (count < 1)
                {
                    prize.Item = DateTime.Now.ToString("HHmmssffffff");
                    sql = "Select  Max(A.[排序])+1 From [抽獎規則] as A ";
                    prize.ID = Convert.ToInt32(AccessHelper.DataSet(sql).Tables[0].Rows[0][0]);
                    sql = "INSERT INTO  抽獎規則([排序],[項目號],[獎項名稱],[中獎人數],[已經抽取],[批次數]) VALUES("
                        + prize.ID + ",'"
                        + prize.Item + "','"
                        + prize.Name + "',"
                        + prize.Num + ",  "
                        + prize.YJNum + ","
                        + prize.IsidNum + ")";
                    AccessHelper.ExecuteSql(sql);
                    lbPrizeTile.Text = prize.Name.ToString();
                }
            }
            catch (Exception ex)
            {
                 
            }
        }
        /// <summary>
        /// 事先設置好的項目的單選按鈕的點擊事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void RdioOrther_CheckedChanged(object sender, EventArgs e)
        {
            LstUcnum.Clear();//清空已經抽獎明細
            LstUcnum = new List<UCNum>();
            //------------------------------------------
            panel1.Controls.Clear();
            //------------------------------------------
            tbOtherCJNum.Text="0";// = new TextBox();//其他抽獎項目,記錄人數。
            tbOtherCJNumName.Text = "加抽"+">";// new TextBox(); //其他抽獎項目,抽獎項目名稱。
            GBQT.Visible = true;
            lbPrizeTile.Text = "加抽獎";
            prize.ReMark = "新添加";
            this.lb項目號.Text = "加抽獎";
            this.lb總人數.Text = "0";
            this.lb總批次.Text = "1";
            this.lb已抽取.Text = "0";
            lb完成批次.Text = "0"; 
        }
        /// <summary>
        /// 未事先設置好的項目的單選按鈕的點擊事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void rad_CheckedChanged(object sender, EventArgs e)
        {
            LstUcnum.Clear();//清空已經抽獎明細
            LstUcnum = new List<UCNum>();
            //------------------------------------------
            panel1.Controls.Clear();
            //------------------------------------------
            RadioButton R = (RadioButton)sender;
            GBQT.Visible = false;
            prize = GetCJItem(R.Tag.ToString());           
            this.lb項目號.Text = prize.Name;
            this.lb項目號.Tag = prize.Item;
            this.lb已抽取.Text = prize.YJNum.ToString();
            this.lb總批次.Text = prize.IsidNum.ToString();
            this.lb總人數.Text = prize.Num.ToString();
            lb完成批次.Text = prize.YJIsidNum.ToString();
            if (prize.YJIsidNum != prize.IsidNum)
            {
                lb抽獎狀態.Text = "" + (prize.YJIsidNum).ToString() + "輪抽獎結束";
                lbPrizeTile.Text = prize.Name+"" + (prize.YJIsidNum).ToString() + "輪抽獎結束";
            }
            else
            {
                lb抽獎狀態.Text = "抽獎結束!";
                 lbPrizeTile.Text = prize.Name+ ":抽獎結束!";
            }           
            if (prize.YJIsidNum == 0)
            {
                lbPrizeTile.Text = prize.Name+":待抽獎!";
            } 
        }

        #region ========================================抽獎四步操作 ========================================
        /// <summary>
        /// 第一步、 獲取抽獎人數
        /// </summary>
        /// <param name="item">抽獎號,抽獎項目號</param>
        /// <returns>返回抽獎信息</returns>
        public Prize GetCJItem(string item)
        {
            Prize Pze = new Prize();
            Dictionary<int, int> dic = new Dictionary<int, int>();
            StringBuilder sb = new StringBuilder();
            sb.Append("SELECT    ");
            sb.Append("    A.[排序],A.[項目號],A.[獎項名稱],A.[中獎人數],A.[限制因素],A.[已經抽取],A.[批次數]    ");
            sb.Append("FROM [抽獎規則] AS A   ");
            sb.Append("WHERE A.[項目號] = '" + item + "'   ");
            DataTable DtCJNO = AccessHelper.DataSet(sb.ToString()).Tables[0];
            sb.Clear();
            sb.Append("SELECT     COUNT(1) FROM  [中獎人員] AS A  WHERE A.[中獎號] =  '" + item + "'    ");
            //抽獎人數
            int Count = Convert.ToInt32(AccessHelper.DataSet(sb.ToString()).Tables[0].Rows[0][0]);
            sb.Clear();
            string 獎項名稱 = (DtCJNO.Rows[0]["獎項名稱"] == null) ? "" : DtCJNO.Rows[0]["獎項名稱"].ToString().Trim();
            int 中獎人數 = (DtCJNO.Rows[0]["中獎人數"] == null) ? 0 : Convert.ToInt32(DtCJNO.Rows[0]["中獎人數"].ToString().Trim());
            int 已經抽取 = (DtCJNO.Rows[0]["已經抽取"] == null) ? 0 : Convert.ToInt32(DtCJNO.Rows[0]["已經抽取"].ToString().Trim());
            int 批次數 = (DtCJNO.Rows[0]["批次數"] == null) ? 0 : Convert.ToInt32(DtCJNO.Rows[0]["批次數"].ToString().Trim());
            //、、----------------------------------------------------------
            int 已抽獎批數 = 0;
            int _MaxNum = Convert.ToInt32(Math.Floor(中獎人數 * 1.0 / 批次數));//每批抽獎最少人數
            //、、----------------------------------------------------------
            int Max = _MaxNum;
            for (int i = 1; i <= 批次數; i++)
            {
                if (i == 批次數)
                {
                    Max = 中獎人數 - (Max * (i - 1));
                }
                dic.Add(i, Max);
            }
            if (已經抽取 < 中獎人數)
            {
                已抽獎批數 = Convert.ToInt32(已經抽取 * 1.0 / _MaxNum);
            }
            else
            {
                已抽獎批數 = 批次數;
            }
            Pze.IsidNum = 批次數;
            Pze.Item = item;//項目號
            Pze.Name = 獎項名稱;
            Pze.Num = 中獎人數;
            Pze.YJNum = 已經抽取;
            Pze.YJIsidNum = 已抽獎批數;
            Pze.Dic = dic;//每批次,抽取
            Pze.IsTrue = true;
            if (已抽獎批數 != 批次數)
            {
                Pze.ThisNum = dic[已抽獎批數 + 1];
            }
            //--------------------------------------------------------------------------------------------
            //抽獎程序異常,調整。
            if (已經抽取 != Count)
            {
                Pze.IsTrue = false;
                //已經抽取的人數 設置為系統后台抽獎的實際總人數
                已經抽取 = Count;
                //已經抽取 除以 每次抽取人數 然后取最小整數,作為已經抽獎完成的批次
                Pze.YJIsidNum = Convert.ToInt32(Math.Floor(已經抽取 * 1.0 / _MaxNum));
                //本次抽獎人數
                Pze.ThisNum = Pze.Dic[已經抽取 + 1] - (Count - _MaxNum * Pze.YJIsidNum);
            }
            //-----------------------------------------------------------------
            return Pze;
        }

        /// <summary>
        /// 第二步、根據抽獎人數隨機抽取
        /// </summary>
        /// <param name="DtNoPrize">員工列表</param>
        /// <param name="Num">當前要抽出多少人</param>
        /// <param name="ItemNumber">抽獎號</param>
        /// <returns>返回中獎人員明細:List<YG></returns>
        public List<YG> SetZJNum(DataTable DtNoPrize, int Num, string ItemNumber)
        {
            List<YG> lst = new List<YG>();
            //所有未中獎的
            DataRow[] DrCJItem = DtNoPrize.Select("[抽獎狀態] = '否' and (([中獎限制] = '普通') or ([中獎限制] = '必須中獎' and [中獎號] = '" + ItemNumber + "')) ");
            DataRow[] DrMax = DtNoPrize.Select("[抽獎狀態] = '否' and [中獎限制] = '必須中獎' and [中獎號] = '" + ItemNumber + "'   ");
            if (DrCJItem.Length > Num)
            {
                foreach (DataRow dr in DrMax)
                {
                    YG yg = new YG();
                    yg.YG_NO = dr["員工代號"].ToString();
                    yg.YG_Name = dr["員工代號"].ToString();
                    int Count = lst.Where(t => t.YG_NO == yg.YG_NO).ToList().Count;
                    if (Count < 1) //.必須不能重復
                    {
                        lst.Add(yg);
                    }
                    if (lst.Count == Num)//如果等於設定數量自動跳出
                    {
                        break;
                    }
                }
                //循環隨機獲取一個員工
                while (true)
                {
                    Random ran = new Random();//
                    int i = ran.Next(DrCJItem.Length - 1);
                    YG yg = new YG();
                    yg.YG_NO = DrCJItem[i]["員工代號"].ToString();
                    yg.YG_Name = DrCJItem[i]["員工名稱"].ToString();
                    int Count = lst.Where(t => t.YG_NO == yg.YG_NO).ToList().Count;
                    if (Count < 1)//.必須不能重復
                    {
                        lst.Add(yg);
                    }
                    if (lst.Count == Num)//如果等於設定數量自動跳出
                    {
                        break;
                    }
                }
            }
            return lst;
        }
        /// <summary>
        /// 第三步、分組框的設計
        /// </summary>
        /// <param name="lst">中獎人員列表</param>
        /// <param name="NoLength">工號長度</param>
        /// <param name="Num">此處中獎人數</param>
        public void LoadContrl(List<YG> lst, int NoLength, int Num, int ThisWidth, int ThisHeight, bool blcj)
        {
            int H = 0;//組塊高度;
            int Hs = 0;//豎向高度 組塊高度+間距
            int W = 0;//組塊寬度
            int JG = 0;//組塊高度間隔; 
            int Nqueue = 1;//最大放幾排;
            int NC = 0;//每排人數
            int YJG = 0;//組塊Y軸間隔; 
            int Mark = 93;//基數;需要大於等於93
            //--------------------------------------------
            int Hts = 0;//組塊高度;
            int Hsts = 0;//豎向高度 組塊高度+間距
            int Wts = 0;//組塊寬度
            int JGts = 0;//組塊高度間隔;

            int Nqueuets = 1;//最大放幾排;
            int NCts = 0;//每排人數
            int YJGts = 0;//組塊Y軸間隔;
            int XJGts = 0;//X軸間隔;
            int KJGts = 0;//空白間隔; 
            //--------------------------------------------
            H = Convert.ToInt32(Math.Floor(ThisHeight * 1.0 / Num)) - 3;
            W = H * (NoLength + 1) + H * 3 + 4;//"Num+1":每個小框的間隔;"H * 3":留足3個空位填名字,+4留足每排的間隔
            //組塊寬度>容器寬度
            if (W > ThisWidth)//只放一排
            {
                W = Convert.ToInt32(ThisWidth * 1.0);
                H = Convert.ToInt32(
                        (
                            (ThisWidth - 4) * 1.0
                        ) / (Num + 1 + 3)
                    );
                JG = Convert.ToInt32(
                        Math.Floor(
                                     (
                                         ThisHeight - H * Num
                                    ) * 1.0 / Num
                            )
                    );
                for (int i = 0; i < lst.Count; i++)
                {
                    ContrlSet(0, i * (H + JG), W, NoLength, LstYg, lst[i].YG_NO, lst[i].YG_Name, blcj);
                }
            }
            else
            {
                Hts = 0;
                Wts = 0;
                Hsts = 0;
                YJGts = 0;
                Nqueuets = 1;
                NCts = 0;
                Nqueue = Convert.ToInt32(Math.Floor(ThisWidth * 1.0 / W));//最多可以放多少排!  
                //多排計算方式
                for (int i = 1; i <= Nqueue; i++)
                {
                    H = 0;//小模塊高度;
                    W = 0;//小木塊寬度;
                    NC = Convert.ToInt32(Math.Ceiling(Num * 1.0 / i));//總人數 / 排數 每排人數
                    H = Convert.ToInt32(Math.Floor((ThisHeight) * 1.0 / NC)) - 3;
                    Hs = H + 3;
                    W = H * (NoLength + 1) + H * 3 + 4;//"NoLength+1":每個小框的間隔;"H * 3":留足3個空位填名字,+4留足每排的間隔
                    if (W > (ThisWidth * 1.0 / i))//一排寬度;Width-3:留3個位置空余
                    {
                        W = Convert.ToInt32(Math.Floor(ThisWidth * 1.0 / i));
                        H = Convert.ToInt32(Math.Floor((W - 4 - NC) * 1.0 / (NC + 3))) - 3;
                        Hs = H + 3;
                    }
                    //-------------------------------------------------------------------------
                    YJG = Convert.ToInt32(
                            Math.Floor(
                                        (
                                            ThisHeight - Hs * NC
                                       ) * 1.0 / NC
                               )
                             );
                    //---------------------------------------------------------------------
                    if (H < Hts)
                    {
                        break;
                    }
                    Nqueuets = i;
                    Hts = H;
                    Wts = W;
                    YJGts = YJG;// JG2 = JG0;
                    NCts = NC;
                }
                Nqueue = Nqueuets;//最優排數
                H = Hts;//最優高度
                W = Wts;//最優組塊寬度
                YJG = YJGts;//間隔
                NC = NCts; //每排人數
                int Counts = 0;
                for (int j = 0; j < NC; j++)
                {
                    Counts = j;
                    for (int t = 0; t < Nqueue; t++)
                    {
                        Counts = j * Nqueue + t;
                        ContrlSet(t * (W + 1), j * (H + YJG), W, NoLength, LstYg, lst[Counts].YG_NO, lst[Counts].YG_Name, blcj);
                        if (Counts == lst.Count - 1)
                        {
                            return;
                        }
                    }
                }
            }
        }
        /// <summary>
        /// 第四步、獲取當前獎項抽獎人員明細
        /// </summary>
        /// <param name="Item"></param>
        /// <returns></returns>
        public List<YG> SetZJNum(string item)
        {
            List<YG> lst = new List<YG>();
            string sql = "SELECT A.[員工代號] ,A.[員工名稱],A.[部門代號],A.[中獎號],A.[中獎名稱] FROM [中獎人員] AS A WHERE A.[中獎號]= '" + item + "'";
            DataTable dt = AccessHelper.DataSet(sql).Tables[0];
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                YG yg = new YG();
                yg.YG_NO = dt.Rows[i]["員工代號"].ToString();
                yg.YG_Name = dt.Rows[i]["員工名稱"].ToString();
                lst.Add(yg);
            }
            return lst;
        }
        /// <summary>
        /// 設置一個 單元塊的長寬,以及各模塊的大小
        /// </summary>
        /// <param name="X">模塊的位置:X軸</param>
        /// <param name="Y">模塊的位置:Y軸</param>
        /// <param name="Width">模塊寬度;高度:(Width - 50) * 1.0 / N(小模塊個數)</param>
        /// <param name="N">小模塊個數</param>
        public void ContrlSet(int X, int Y, int Width, int N, List<YG> _lstyg, string ygno, string ygName, bool blcj)
        {
            //----------------------------------------------------------------------
            int H = Convert.ToInt32(
                                    (
                                        (Width - 4) * 1.0
                                    ) / (N + 1 + 3)
                                );
            UCNum uc = new UCNum(this);
            //uc.dt = DtTemp;
            uc.LstYg = _lstyg;
            uc.name = ygName;
            uc.YgNo = ygno;
            uc.Width = Width;//留足空余寫名字
            uc.Height = H;// Convert.ToInt32(Math.Floor((Width - 50) * 1.0 / N));//高度
            uc.H = uc.Height - 4;
            uc.W = uc.Height - 4;
            //----------------------------------------------------------------------
            uc.Num = N;
            uc.Size = new System.Drawing.Size(uc.Width, uc.Height);//大小
            uc.Location = new System.Drawing.Point(X, Y); //位置
            uc.Set();
            LstUcnum.Add(uc);
            uc.Istrue = blcj;
            this.panel1.Controls.Add(uc);
            //----------------------------------------------------------------------
        } 
        #endregion ========================================抽獎四步操作 ========================================
        /// <summary>
        /// 獲取所有人員明細
        /// </summary>
        /// <param name="Item"></param>
        /// <returns></returns>
        public DataTable ReCJGZ(string Item)
        {
            if (Item.Trim() != "")
            {
                Item = "  Where  a.[項目號] = '" + Item + "'  ";
            }
            string sql = "SELECT a.[排序],a.[項目號],a.[獎項名稱],a.[中獎人數],a.[限制因素],a.[已經抽取] FROM 抽獎規則 AS a " + Item + "  ORDER BY a.排序 ASC ";
            DataTable DtCJ = AccessHelper.DataSet(sql).Tables[0];
            return DtCJ;
        }
        #region ==========================================抽獎按鈕========================================
        /// <summary>
        /// 抽獎按鈕
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lbbtn_Click(object sender, EventArgs e)
        {
            try
            {
                if (lbbtn.Tag.ToString() == "開始")
                {
                    IsTrue = true;
                    lbbtn.Tag = "結束";
                    lbbtn.Image = imgEnd;
                    //------------------------------------------
                    LstUcnum.Clear();//清空已經抽獎明細
                    LstUcnum = new List<UCNum>();
                    //------------------------------------------
                    panel1.Controls.Clear();
                    prize = GetCJItem(prize.Item);
                    lb項目號.Text = prize.Name;
                    lb總人數.Text = prize.Num.ToString();
                    lb已抽取.Text = prize.YJNum.ToString();
                    lb總批次.Text = prize.IsidNum.ToString();
                    lb完成批次.Text = prize.YJIsidNum.ToString();
                    List<YG> lstyg;
                    if (prize.YJIsidNum != prize.IsidNum)
                    {
                        lbPrizeTile.Text = prize.Name + ":當前正在抽取第" + (prize.YJIsidNum + 1).ToString() + "輪獎";
                        lb抽獎狀態.Text = "當前正在抽取第" + (prize.YJIsidNum + 1).ToString() + "輪獎";
                        DataTable DtTemp = ReYg();//所有參與人員表                    
                        //---------------------------------------------
                        lstyg = SetZJNum(DtTemp, prize.ThisNum, prize.Item);
                        LoadContrl(lstyg, YgNoLength, prize.ThisNum, panel1.Width - 4, panel1.Height, true);
                        return;
                    }
                    else
                    {
                        lb抽獎狀態.Text = "抽獎結束!";
                        lbbtn.Image = imgStr;
                        lbbtn.Tag = "開始";
                        lbPrizeTile.Text = prize.Name + ":抽獎完畢!";
                    }
                }
                else
                {
                    try
                    {
                        lbbtn.Image = imgStr;
                        lbbtn.Tag = "開始";
                        IsTrue = false;
                        for (int i = 0; i < LstUcnum.Count; i++)
                        {
                            LstUcnum[i].Istrue = false;
                        }
                        SaveYJ_CJ();//抽獎結束保存抽獎結果。
                        LstUcnum.Clear();
                        LstUcnum = new List<UCNum>();
                        lbPrizeTile.Text = prize.Name + "" + prize.YJIsidNum + "輪抽獎完畢!";
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message.ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
        } 
        /// <summary>
        /// 抽獎保存
        /// </summary>
        public void SaveYJ_CJ()
        {
            try
            {
                if (LstUcnum.Count > 0)
                {
                    int Count = 0;
                    string sql = "  ";
                    OleDbConnection conn = new OleDbConnection();
                    OleDbCommand comm = new OleDbCommand();
                    conn.ConnectionString = AccessHelper.connectionString;
                    comm.Connection = conn;
                    conn.Open();
                    comm.CommandType = CommandType.Text;
                    for (int i = 0; i < LstUcnum.Count; i++)
                    {
                        Count = Count + 1;                       
                        comm.CommandText = "UPDATE [人員表] SET [抽獎狀態] = '是' WHERE [員工代號] ='" + LstUcnum[i].YgNo + "'";
                        comm.ExecuteNonQuery();
                        comm.CommandText = "INSERT INTO [中獎人員] ([員工代號],[員工名稱],[中獎號],[中獎名稱] )VALUES('" + LstUcnum[i].YgNo + "','" + LstUcnum[i].name + "','" + prize.Item + "','" + prize.Name + "')";
                        comm.ExecuteNonQuery();
                    }
                    //----------------------------------------------------
                    //獲取此獎項已經抽過獎的數量
                    DataTable dt = new DataTable(); 
                    OleDbDataAdapter da = new OleDbDataAdapter();
                    try
                    {
                        comm.CommandType = CommandType.Text;
                        comm.CommandText = "SELECT 已經抽取 FROM 抽獎規則 Where 項目號 = '" + prize.Item + "'";
                        da.SelectCommand = comm;
                        da.Fill(dt);
                    }
                    catch (Exception e)
                    {
                    }
                    int NumTemp = 0;
                    try
                    {
                       NumTemp = Convert.ToInt32(dt.Rows[0]["已經抽取"]);
                    }
                    catch (Exception )
                    {
                        NumTemp = 0;
                    }
                    //------------------------------------  
                    //保存已經並匯總已經抽獎過的
                    sql = "UPDATE 抽獎規則 SET 已經抽取 = " + (NumTemp + LstUcnum.Count).ToString() + "  WHERE 項目號 = '" + prize.Item + "' ";
                    comm.CommandType = CommandType.Text;
                    comm.CommandText = sql;
                    comm.ExecuteNonQuery();
                    //---------------------------------------------------------
                    if (conn.State == ConnectionState.Open)
                    {
                        conn.Close();
                        conn.Dispose();
                        comm.Dispose();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
            //----------------------------------------------------------------
            try
            {
                prize = GetCJItem(prize.Item); 
                this.lb項目號.Text = prize.Name;
                this.lb項目號.Tag = prize.Item;
                this.lb已抽取.Text = prize.YJNum.ToString();
                this.lb總批次.Text = prize.IsidNum.ToString();
                this.lb總人數.Text = prize.Num.ToString();
                lb完成批次.Text = prize.YJIsidNum.ToString();
                if (prize.YJIsidNum != prize.IsidNum)
                {
                    lb抽獎狀態.Text = "" + (prize.YJIsidNum).ToString() + "輪抽獎結束";
                }
                else
                {
                    lb抽獎狀態.Text = "抽獎結束!";
                }                 
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            } 
        } 
        #endregion ==========================================抽獎按鈕========================================

        /// <summary>
        /// 窗體大小變化后自動調整功能框的位置
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MainFrom_Resize(object sender, EventArgs e)
        {
            int W = this.Width;
            int H = this.Height;
            int lw = Convert.ToInt32(Math.Floor(W * 1.0 / 2));
            int lw2 = Convert.ToInt32(Math.Floor(lbPrizeTile.Width * 1.0 / 2));
            int lw3 = Convert.ToInt32(Math.Floor(lb標語.Width * 1.0 / 2));
            lbPrizeTile.Location = new System.Drawing.Point(lw - lw2, 110); //位置
            lb標語.Location = new System.Drawing.Point(lw - lw3, 60); //位置

            //---------------------------------------------------------------------------
            int lwgsmc = Convert.ToInt32(Math.Floor(LbGSMC.Width * 1.0 / 2));
            LbGSMC.Location = new System.Drawing.Point(lw - lwgsmc, 5); //位置
            //---------------------------------------------------------------------------
            int PX = Convert.ToInt32(Math.Floor((H - 373) * 1.0 / 2));
            PMeiun.Location = new System.Drawing.Point(0, PX); //位置
            SY1 = PX;
            SY2 = PX + 400;
            //---------------------------------------------------------------------------
            groupBox1.Location = new System.Drawing.Point(W - groupBox1.Width - 5, PX); //位置 
            //----------------------------------------------------------------------------
        }

        private void timer1_Tick(object sender, EventArgs e)
        {  
            if (this.mouseLocation.X < 178 && mouseLocation.Y > SY1 && mouseLocation.Y < SY2)
            {
                PMeiun.Width = 178;
                PMeiun.Height = 400;
                Cursor = Cursors.Hand;
            }
            else
            {
                PMeiun.Width = 1;
                PMeiun.Height = 1; 
            } 
        }
        private void MainFrom_MouseMove(object sender, MouseEventArgs e)
        {
            this.mouseLocation = e.Location;
        }
        private void lbbtn_MouseEnter(object sender, EventArgs e)
        {
            Cursor = Cursors.Hand;
        }
        private void lbbtn_MouseLeave(object sender, EventArgs e)
        {
            Cursor = Cursors.Default;
        }         
        /// <summary>  
        /// 快捷鍵操作  
        /// </summary>  
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            switch (keyData)
            {
                case Keys.Space://空格  
                    {
                        try
                        {
                            if (lbbtn.Tag.ToString() == "開始")
                            {
                                IsTrue = true;
                                lbbtn.Tag = "結束";
                                lbbtn.Image = imgEnd;
                                //------------------------------------------
                                LstUcnum.Clear();//清空已經抽獎明細
                                LstUcnum = new List<UCNum>();
                                //------------------------------------------
                                panel1.Controls.Clear();
                                prize = GetCJItem(prize.Item);
                                lb項目號.Text = prize.Name;
                                lb總人數.Text = prize.Num.ToString();
                                lb已抽取.Text = prize.YJNum.ToString();
                                lb總批次.Text = prize.IsidNum.ToString();
                                lb完成批次.Text = prize.YJIsidNum.ToString();
                                List<YG> lstyg;
                                if (prize.YJIsidNum != prize.IsidNum)
                                {
                                    lbPrizeTile.Text = prize.Name + ":當前正在抽取第" + (prize.YJIsidNum + 1).ToString() + "輪獎";
                                    lb抽獎狀態.Text = "當前正在抽取第" + (prize.YJIsidNum + 1).ToString() + "輪獎";
                                    DataTable DtTemp = ReYg();//所有參與人員表                    
                                    //---------------------------------------------
                                    lstyg = SetZJNum(DtTemp, prize.ThisNum, prize.Item);
                                    LoadContrl(lstyg, YgNoLength, prize.ThisNum, panel1.Width - 4, panel1.Height, true);
                                   
                                }
                                else
                                {
                                    lb抽獎狀態.Text = "抽獎結束!";
                                    lbbtn.Image = imgStr;
                                    lbbtn.Tag = "開始";
                                    lbPrizeTile.Text = prize.Name + ":抽獎完畢!"; 
                                }

                            }
                            else
                            {
                                try
                                { 
                                    lbbtn.Image = imgStr;
                                    lbbtn.Tag = "開始";
                                    IsTrue = false;
                                    for (int i = 0; i < LstUcnum.Count; i++)
                                    {
                                        LstUcnum[i].Istrue = false;
                                    }
                                    SaveYJ_CJ();//抽獎結束保存抽獎結果。
                                    LstUcnum.Clear();
                                    LstUcnum = new List<UCNum>();
                                    lbPrizeTile.Text = prize.Name + "" + prize.YJIsidNum + "輪抽獎完畢!";
                                }
                                catch (Exception ex)
                                {
                                    MessageBox.Show(ex.Message.ToString());
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message.ToString());
                        }                         
                    }
                    break;
                case Keys.F4://設置
                    {
                        try
                        {
                            panel1.Controls.Clear();
                            LstUcnum.Clear();
                            LstUcnum = new List<UCNum>();

                            List<YG> lstyg;
                            lstyg = SetZJNum(prize.Item);
                            LoadContrl(lstyg, YgNoLength, lstyg.Count, panel1.Width - 4, panel1.Height, false);
                        }
                        catch (Exception)
                        {
                             
                        }
                    }
                    break;
                case Keys.F1://設置
                    {
                        FormPrizeSet f = new FormPrizeSet(this);
                        f.ShowDialog();
                    }
                    break;
                case Keys.F2://查詢功能等節目
                    {
                        FormSearch f = new FormSearch();
                        f.ShowDialog();
                        //MessageBox.Show("F2");
                    }
                    break;
                case Keys.F3://查詢功能等節目
                    {
                        Form1 f = new Form1();
                        f.ShowDialog();
                    }
                    break;
                case Keys.Escape://查詢功能等節目
                    {
                        SetFormFullScreen(false);
                        WindowState = System.Windows.Forms.FormWindowState.Minimized;
                    }
                    break;
                case Keys.Delete://查詢功能等節目
                    {

                        try
                        {
                            panel1.Controls.Clear();
                            LstUcnum.Clear();
                            LstUcnum = new List<UCNum>();
                            int Count = 0;
                            string sql = "  ";
                            OleDbConnection conn = new OleDbConnection();
                            OleDbCommand comm = new OleDbCommand();
                            conn.ConnectionString = AccessHelper.connectionString;
                            comm.Connection = conn;
                            conn.Open();
                            //----------------------------------------------------------------------
                            comm.CommandType = CommandType.Text;
                            comm.CommandText = "UPDATE [人員表] SET [抽獎狀態] = '否',中獎限制='普通',[中獎號]='',[中獎名稱]='' ";
                            comm.ExecuteNonQuery();
                            //----------------------------------
                            comm.CommandText = "DELETE  FROM [中獎人員]";
                            comm.ExecuteNonQuery();
                            //-----------------------------------
                            comm.CommandText = "UPDATE [抽獎規則] SET [已經抽取]=0 ";
                            comm.ExecuteNonQuery();
                            //----------------------------------------------------------------------
                            if (conn.State == ConnectionState.Open)
                            {
                                conn.Close();
                                conn.Dispose();
                                comm.Dispose();
                            }
                            MessageBox.Show("重置完成");
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message.ToString());
                        }
                    }
                    break;
                case Keys.F5://查詢功能等節目
                    {
                        panel1.Controls.Clear();
                        LstUcnum.Clear();
                        LstUcnum = new List<UCNum>();
                        //A.[員工代號],A.[員工名稱],A.[部門代號],B.[部門名稱],A.[抽獎狀態],a.[中獎限制],A.[中獎號],A.[中獎名稱]
                        #region ==================================加載所有員工======================================
                        DataTable DtAllYg = ReYg();
                        for (int i = 0; i < DtAllYg.Rows.Count; i++)
                        {
                            YG y = new YG();
                            YG xzy = new YG();
                            y.YG_NO = DtAllYg.Rows[i]["員工代號"].ToString();
                            y.YG_Name = DtAllYg.Rows[i]["員工名稱"].ToString();
                            LstYg.Add(y);
                        }
                        #endregion ==================================加載所有員工======================================
                        BackgroundImageLoad();//背景圖片加載
                        #region =====================================全屏設置============================================
                        SetFormFullScreen(true);
                        this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
                        this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
                        #endregion=====================================全屏設置============================================
                        PrizeLoad();//抽獎項目加載 
                        GetNoLength();//獲取人員工號長度
                        lbbtn.Tag = "開始";
                    }
                    break;
                case Keys.F12://查詢功能等節目
                    {
                        SetFormFullScreen(false);
                        Application.Exit();
                    }
                    break;
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }
        private void MainFrom_FormClosing(object sender, FormClosingEventArgs e)
        {
            SetFormFullScreen(false);
        } 
    }
}
 

 源碼9 9...¥,加我Q


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM