用WinForm寫的員工考勤項目!!!!!!

来源:http://www.cnblogs.com/wei-91/archive/2016/08/26/5811413.html
-Advertisement-
Play Games

先說幾句,作為一個還在學習的程式員,掌握的知識有限;但我利用自身所學,給一些像我一樣還在學習的碼農提供我的綿薄之力! 寫的不好,但是儘力了,希望大牛指點。多多吐槽!!! 好了開始說項目需求: 實現新增員工;使用DataGridView控制項展示員工信息;實現根據員工工號進行模糊查詢;實現刪除員工信息; ...


先說幾句,作為一個還在學習的程式員,掌握的知識有限;但我利用自身所學,給一些像我一樣還在學習的碼農提供我的綿薄之力!

寫的不好,但是儘力了,希望大牛指點。多多吐槽!!!

   好了開始說項目需求: 實現新增員工;使用DataGridView控制項展示員工信息;實現根據員工工號進行模糊查詢;實現刪除員工信息;每天只能簽到一次;簽退前必須已經簽到

看到這些需求,我們先要思考下該做什麼,理清思路才能更快的完成項目。我通常先搭建窗體,然後根據要求逐步實現項目要求!

這是我們所要用的到的三個窗體

我們建一個輔助類,初始化一個單列的泛型集合,給單列的泛型集合付個初值

 

class Worker
    {
        private string id;
        private string name;
        private int age;
        private string sex;
        public string ID
        {
            get
            {
                return id;
            }

            set
            {
                id = value;
            }
        }

        public string Name
        {
            get
            {
                return name;
            }

            set
            {
                name = value;
            }
        }

        public int Age
        {
            get
            {
                return age;
            }

            set
            {
                age = value;
            }
        }

        public string Sex
        {
            get
            {
                return sex;
            }

            set
            {
                sex = value;
            }
        }
        
        public static List<Worker> list = new List<Worker>();
        public static void Insert()
        {
            Worker w1 = new Worker();
            w1.ID = "20090101";
            w1.Name = "王小毛";
            w1.Age = 20;
            w1.Sex = "男";
            list.Add(w1);
            Worker w2 = new Worker();
            w2.ID = "20090102";
            w2.Name = "周新雨";
            w2.Age = 19;
            w2.Sex = "女";
            list.Add(w2);
        }
    }

 這是員工信息維護窗體的Load事件的代碼

 private void FrmSecond_Load(object sender, EventArgs e)
        {
如果list沒有數據就添加數據,確保調用這個窗體是,只有在沒有數據時才能添加數據! if (Worker.list.Count==0) { Worker.Insert(); }
清除datagridview的英文列,並且綁定數據 dgvList.AutoGenerateColumns = false; dgvList.DataSource = Worker.list; }

 這是新增里的代碼

private void toolStripButton1_Click(object sender, EventArgs e)
        {
調用添加員工員工信息窗體 FrmFirst ff = new FrmFirst(); this.Hide(); ff.Show(); }
private void btn1_Click(object sender, EventArgs e)
        {
確保一個工號只能添加一次 foreach (Worker item in Worker.list) { if (item.ID==txt01.Text) { MessageBox.Show("工號已存在!!!!"); return; } }
添加一個員工信息 Worker w1 = new Worker(); w1.ID = txt01.Text; w1.Name = txt03.Text; w1.Age = Convert.ToInt32(txt02.Text); w1.Sex =cob01.Text; Worker.list.Add(w1); FrmSecond fs = new FrmSecond(); this.Close(); fs.Show(); }

 

這是刪除的代碼
private void toolStripButton3_Click(object sender, EventArgs e) {
提示點擊是才會刪除 DialogResult result = MessageBox.Show("提示","是否刪除",MessageBoxButtons.YesNo,MessageBoxIcon.Question); if(result==DialogResult.Yes) {
string id = dgvList.SelectedRows[0].Cells[0].Value.ToString(); //string id = dgvList.SelectedCells[0].Value.ToString();
如果ID和我選中的ID相等才會刪除 foreach (Worker item in Worker.list) { if(item.ID==id) { Worker.list.Remove(item); break; } } } //dgvList.AutoGenerateColumns = false; dgvList.DataSource = new BindingList<Worker>(Worker.list); }

 

這段是重點難點在寫這段之前先建好另一個輔助類
  class Record
    {
        public string id { get; set; }
        public string name { get; set; }
        public DateTime SignInTime { get; set; }
        public DateTime SignOutTime { get; set; }
        創建一個雙列泛型集合
        public static Dictionary<string, Record> relist = new Dictionary<string, Record>();
      
    }

public int num; private void 簽到ToolStripMenuItem_Click(object sender, EventArgs e) {
給num賦值,把你選中的type值付給num Worker w = new Worker(); foreach (Worker item in Worker.list) { if (item.Name == dgvList.SelectedCells[1].Value.ToString()) { w = item; break; } } num = w.type;
判斷如果num是0才可以簽到 if (num == 0) { Record r = new Record(); r.id = dgvList.SelectedRows[0].Cells[0].Value.ToString(); r.name = dgvList.SelectedRows[0].Cells[1].Value.ToString(); r.SignInTime = DateTime.Now; Record.relist.Add(r.name, r);
給你選中的type賦值一個1 w.type = 1; MessageBox.Show("簽到成功"); } else { MessageBox.Show("您已經簽到過了"); } } private void 簽退ToolStripMenuItem_Click(object sender, EventArgs e) { Worker w = new Worker(); foreach (Worker item in Worker.list) { if (item.Name == dgvList.SelectedCells[1].Value.ToString()) { w = item; break; } }
把你選中的type賦值給num num = w.type;
如果num是1,才可以簽退 if (num == 1) { foreach (string item in Record.relist.Keys) { if (item == dgvList.SelectedRows[0].Cells[1].Value.ToString()) { Record.relist[dgvList.SelectedRows[0].Cells[1].Value.ToString()].SignOutTime = DateTime.Now; w.type = 2; MessageBox.Show("簽退成功"); break; } } }
如果是0證明沒有簽到 else if (num == 0) { MessageBox.Show("沒有簽到,無法簽退"); }
否則已經簽退過了 else { MessageBox.Show("您已經簽退過了"); } //dgvList.AutoGenerateColumns = false; //dgvList.DataSource = new BindingList<Worker>(Worker.list); }

  


把員工的簽到信息展示在DataGridView上

private void FrmThisd_Load(object sender, EventArgs e) { dgvList.AutoGenerateColumns = false; BindingSource bs = new BindingSource(); bs.DataSource = Record.relist.Values; dgvList.DataSource = bs; lbl1.Text = dgvList.RowCount.ToString(); }

  

 

 

 

  

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 阿裡巴巴-矢量圖標庫 此網站 1、能搜到官方和個人提供的優秀圖標 再也不用擔心不會用photoshop~再也不用擔心沒圖標,做不出界面了~ 2、能生成複雜的字體 IP地址:http://iconfont.cn/ 網站界面: 轉自:http://Www.CnBlogs.Com/WebEnh/ 感謝We ...
  • 依賴屬性,簡單的說,在WPF控制項應用過程中,界面上直接可以引用的屬性 如:<Button Content="aaa"></Button> Content稱為Button的依賴屬性 當我們自定義控制項時,如何添加依賴屬性呢 1、添加屬性 2、註冊屬性 然後在應用自定義控制項時,就能直接設置屬性了,例如: ...
  • 學習了Spring.NET+NHibernate的框架,覺得Spring.NET框架不夠輕量,配置來配置去的比較頭疼,所以把Spring.NET換成了Autofac框架,同時加入WCF框架整了一個組合。 本來想把NHibernate換成EF的,因為現在普通用的.net 4.0,但是.net 4.0里 ...
  • 在一個系統裡面,往往有很多菜單項目,每個菜單項對應一個頁面,一般用戶只需要用到一些常用的功能,如果每次都需要去各個層次的菜單裡面去找對應的功能,那確實有點繁瑣。特別是在菜單繁多,而客戶又對系統整體不熟悉的情況下,如果有一個類似瀏覽器的收藏夾模塊,把一些常用的菜單連接保存起來,每次從這個收藏夾主頁去找... ...
  • 自定義標題欄 一、設計界面樣式 <UserControl x:Class="WpfApplication6.TitleListControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="htt ...
  • 燈光的測試例子:光源參數可以調節的測試場景 先看一下測試場景和效果。 場景中可以切換視圖, 以方便觀察三維體和燈光的位置。環境光,漫射光,鏡面反射光都可以在四種顏色間切換。 燈光位置和攝像機位置(LookAt)可以輸入數值或者點動調節,也可以按鍵盤的QEWASD六個鍵進行調節。 你還會註意到:球體對 ...
  • .net環境下通信主要掌握 通信協議(UDP&TCP). 網路抓包工具().:使用方法 點對點通信,IP組播,廣播通信 c#中結構體轉為位元組流方式 c#結構體與c++結構體轉換對應關係 開源的通信模塊:http://www.networkcomms.net/getting-started/ ...
  • 問題:最近在項目中遇到,不同客戶機安裝不同Office版本,在導出Excel時,發生錯誤。 找不到Excel Com組件,錯誤信息如下。 未能載入文件或程式集“Microsoft.Office.Interop.Excel, Version=12.0.0.0, Culture=neutral, Pub ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...