C#:辦公用品管理軟體項目總結

來源:互聯網
上載者:User

標籤:

本學期.net課的課程設計是做一個辦公用品管理的軟體,課堂上只給了五次課十個小時,由於老師給的需求文檔也不是太全面,基本上是課下寫,遇到問題上課再問老師,功能不對的地方再改。這個軟體本身功能不複雜,畢竟是學校的作業而不是公司的產品,除去介面部分剩下的就是對資料庫的操作。database裡的表是老師建好的,總共也才四個表,不過老師建表時相關聯的表並沒有設定外鍵,主鍵也沒有設成自增的,所以在增加和刪除操作時,總是感覺很彆扭,刪除的時候不能串聯刪除,要一個一個表依次刪除,費時費力,還好只有四個表。這種情況到公司肯定不會有的。

這篇文章就是想把我寫這個小軟體的過程再捋一捋,把過程中遇到的一些問題,學到的一些知識記錄下來,以便以後需要時方便查看。

介面

主介面:


功能表列的各個子目錄:






這是法語版的介面,介紹一下:

  • Fichier:File 檔案
  • Article:物品
  • Marque:品牌
  • Famille:種類
  • Sous-Famille:子種類
  • Sélectionner:選擇
  • Afficher:顯示
  • Ajouter:添加
  • Modifier:修改
  • Supprimer:刪除

    點擊“選擇”按鈕,彈出“資料整合對話方塊”,如下:


    左上方的按鈕點擊之後彈出一個檔案選擇對話方塊,可以選擇一個XML檔案,所有的資料都是以XML檔案格式儲存。右上方的單選框是確定資料的整合方式:上方的選擇是將資料庫裡原有的資料全部刪除,將新的XML檔案的資料存進資料庫;下方的選擇是更新資料庫。點擊“Integration”按鈕開始讀資料,如果遇到什麼異常和錯誤,顯示在Exception視窗裡,資料讀完該視窗自動消失。

讀資料

為了從資料庫讀資料,我首先建立了一個物品的實體類Article_Model,它有六個屬性,分別對應XML檔案中的六個屬性,是XML檔案中資料的格式:


接著建立專門讀取XML檔案資料的類:XML_Read,該類只有一個方法:

public List<Article_Model> Read_XML(string FileName) {    XmlDocument Doc = new XmlDocument();    Doc.Load(FileName);    XmlElement RootElem = Doc.DocumentElement;//root element    XmlNodeList ArticleNodes = RootElem.GetElementsByTagName("article");//all articles    List<Article_Model> Atl_Model_List = new List<Article_Model>();    //get datas    foreach (XmlNode Node in ArticleNodes) {        XmlNodeList Childs = Node.ChildNodes;        string Description = Childs.Item(0).InnerText;        string RefArticle = Childs.Item(1).InnerText;        string Marque = Childs.Item(2).InnerText;        string Famille = Childs.Item(3).InnerText;        string SousFamille = Childs.Item(4).InnerText;        string StrPrixHT = Childs.Item(5).InnerText;        string[] Str = StrPrixHT.Split(new char[] { ‘,‘});        string TempPrix = Str[0] + "." + Str[1];        float PrixHT = float.Parse(TempPrix);        Article_Model AM = new Article_Model(Description, RefArticle, Marque,            Famille, SousFamille, PrixHT);        Atl_Model_List.Add(AM);    }    return Atl_Model_List;    }

由於資料裡商品價格一欄的資料小數點是逗號(老師你為什麼要用逗號!!!!),所有又做了一次轉換,將該值轉成float類型。

開啟檔案選擇對話方塊是時,由於只能選XML格式的檔案,所以我加了一個過濾器:

OpenFileDialog Ofd = new OpenFileDialog();Ofd.Filter = "xml files(*.xml)|*.xml";Ofd.ShowDialog();


當把資料從XML檔案存到List裡再往資料庫存時,有一個問題就是,資料可能重複。比如XML檔案裡有50條商品目錄,但是它們可能屬於30個不同的品牌,也就是說品牌,種類,子種類有可能有重複的,而且這些表的主鍵還不是自增的,這就需要在往資料庫插資料之前先檢查資料庫中是否存在該資料,不存在則插入。因為要求用MVC模式,所以我把對資料庫的操作的函數全封裝到了一個類裡:DB_Controller。以Marques表為例,解決方案:

DB_Controller DataBase = new DB_Controller();//insert data to table Marquesif (DataBase.SelectMarquesTable(ArtModelList[i].marque) == -1){    DataBase.InsertMarquesTable(MarqueId++, ArtModelList[i].marque);}

查詢函數和插入函數如下:

public void InsertMarquesTable(int RefMarque,string Nom) {     SQLiteConnection DB_Conn = new SQLiteConnection("Data Source=Mercure.SQLite;");     DB_Conn.Open();     string Sql = "INSERT INTO Marques (RefMarque,Nom) VALUES (" + RefMarque +         ",‘" + Nom + "‘)";     SQLiteCommand Command = new SQLiteCommand(Sql, DB_Conn);     Command.ExecuteNonQuery();     DB_Conn.Close(); } public int SelectMarquesTable(string Nom) {     SQLiteConnection DB_Conn = new SQLiteConnection("Data Source=Mercure.SQLite;");     DB_Conn.Open();     string Sql = "SELECT RefMarque FROM Marques WHERE Nom = ‘" + Nom +"‘";     SQLiteCommand Command = new SQLiteCommand(Sql, DB_Conn);     SQLiteDataReader Date = Command.ExecuteReader();     int I = -1;     if (Date.Read())     {         I = int.Parse(Date["RefMarque"].ToString());     }     else     {         I = -1;     }     Date.Close();     DB_Conn.Close();     return I; }


資料庫裡一共有四張表,Articles,Marques,Familles,SousFamilles.樣本圖:





讀完資料之後,點擊“顯示”按鈕,便可把全部商品的資訊顯示出來,這需要四個表聯集查詢,用ListView控制項顯示資訊。效果如:

資料的增刪改

對三個小表:Marques,Familles,SousFamilles的增加操作很簡單,點擊“添加”按鈕,直接彈出一個對話方塊,使用者輸入名字即可。添加SousFamille時,使用者要選擇一個已經存在的Famille,所以在添加視窗上Famille用下拉式清單ComboBox顯示以供使用者選擇。對Articles的增加操作,也是一個視窗,視窗上的Marque,SousFamille也是用下拉式清單ComboBox顯示以供使用者選擇。

修改和刪除三個小表:Marques,Familles,SousFamilles的資料時,相應的Articles表裡的內容也要更新,並且顯示視窗裡的資料也要即時更新。

以Marques表為例,修改和刪除函數:

public void UpdateMarquesTable(string DeNom,string Nom){     SQLiteConnection DB_Conn = new SQLiteConnection("Data Source=Mercure.SQLite;");     DB_Conn.Open();     string Sql = "UPDATE Marques SET Nom = ‘" + Nom + "‘ WHERE Nom = ‘" + DeNom + "‘";     SQLiteCommand Command = new SQLiteCommand(Sql, DB_Conn);     Command.ExecuteNonQuery();     DB_Conn.Close(); } public void DeleteMarqueByName(string Nom) {     SQLiteConnection DB_Conn = new SQLiteConnection("Data Source=Mercure.SQLite;");     DB_Conn.Open();     string Sql = "DELETE FROM Marques WHERE Nom = ‘" + Nom + "‘";     SQLiteCommand Command = new SQLiteCommand(Sql, DB_Conn);     Command.ExecuteNonQuery();     DB_Conn.Close(); }


總結

總的來說,這個課程設計並不難,介面的話在VS2015裡拖拽一下就畫好了,資料的話主要還是操作資料庫,只要控制好各個功能之間的邏輯問題,一切自然而然就成了。這是我第一次用C#,感覺和C++,java沒多大區別,可能是接觸的不深。不過電腦語言是相通的,認真掌握了一門,其他的也就好上手了。

C#:辦公用品管理軟體項目總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.