8 dam WEB.NET aplikace (asp.net) + conzolova aplikace .NET
Dneska to bude velmi jednoduche , ne opravdu! V podstatě nic programovat nebudeme, budeme pouze skládat již vytvořené. Cílem tedy bude zobrazit výsledky řešení úlohy o 8 dam jako webovou stránku stihneme i conzolovou aplikaci a tím tuto úlohu navždy opustíme.
Vyjdeme z naší dll knihovny, kterou jsme si minule vytvořili. Jenom zopakuji, že dll knihovnu vytvoříme touto kompilací cs souboru:
csc /t:library /r:System.dll /r:System.Data.dll /r:System.Xml.dll _8dam.cs
WEB APLIKACE
Ukažme si výsledek. Někdy na začátku seriálu o .NET jsme si ukazovali uživatelský kontrol. Dnes najde plné uplatnění. Co se týče toho našeho ascx kontrolu pojmenovaného "ShowDesk.ascx" tak v něm uděláme opravdu kosmetickou úpravu:
int _intDesk = 0; public DataSet _DataSource8Q = null; // implementace vlastnosti aktualni plochy sachovnice public int intDesk { set { _intDesk = value; } }
Vytvoříme vlastnost intDesk, která určuje index do tabulky v DataSetu. Položku _DataSource8Q dáme jako veřejnou (public) abychom ji mohli okamžitě nastavit, z hlavní aspx stránky.
Zbývá napojit dll do aspx kontrolu a vytvořit selectboxy pro volitelné rozmístění 8 dam. Import dll souboru se provede direktivou register (podobně jako vkládání uživatelského kontrolu) POZOR! dll soubor musí být umístěn v podadresári BIN a nadřazený adresář musí být na web serveru (např. na IIS) označen jako webový adresář. (poz. kdyby náhodou programová ukázka nejela tak to je nejspíš tenhle problem Dále v kódu deklarujeme proměnnou o8dam jako instanci naší třídy z dll souboru, vlastní objekt vytváříme v události PageLoad stránky. No a pro všechny řešení ulohy naplňujeme selectboxy a je to.
<%@ Register TagPrefix="uc1" TagName="ShowDesk" Src="ShowDesk.ascx" %> <%@ Register TagPrefix="BINdd" Namespace="App_8dam" Assembly="_8dam" %> <%@Import Namespace="System.Data" %> <html> <script language="C#" runat="server"> App_8dam._8dam o8dam; private void Page_Load(object sender, System.EventArgs e) { o8dam = new _8dam(); ShowDesk1._DataSource8Q = o8dam.SACHOVNICE; ShowDesk1.intDesk = 90; if (!Page.IsPostBack) { for (int i=0; i<o8dam.POCET_RESENI; i++) { Reseni.Items.Add("Řešení " + (i+1)); } for (int i=0; i<o8dam.UNIKATNICH_RESENI; i++) { UReseni.Items.Add("U:Řešení " + (i+1)); } } } private void Index_Changed(object sender, System.EventArgs e) { ShowDesk1.intDesk = Reseni.SelectedIndex; } private void Index_Changed2(object sender, System.EventArgs e) { ShowDesk1.intDesk = o8dam.getUNI(UReseni.SelectedIndex); } </script>
HTML doplníme select boxy
<asp:dropdownlist id="Reseni" runat="server" AutoPostBack="true" OnSelectedIndexChanged="Index_Changed"></asp:dropdownlist> <asp:dropdownlist id="UReseni" runat="server" AutoPostBack="true" OnSelectedIndexChanged="Index_Changed2"></asp:dropdownlist>
CONZOLOVÁ APLIKACE
Tak, ta je nejjednodušší, celý kód je níže. dll soubor dáme do stejného adresáře. Vytvořme soubor napr. form1.cs a ten budeme kompilovat podobně takto:
csc /t:exe /r:System.dll /r:System.Xml.dll /r:System.Data.dll /r:_8dam.dll /out:8dam.exe form1.cs
vlastní celý obsah souboru form1.cs je:
using System; using System.Data; using App_8dam; namespace CONApplication1 { class CON_8dam { static App_8dam._8dam o8dam = new _8dam(); public static int Main(string[] args) { Console.WriteLine("***********************************"); Console.WriteLine("Počet řešení: {0}", o8dam.POCET_RESENI); Console.WriteLine("UNI řešení {0}", o8dam.UNIKATNICH_RESENI); int x; do { Console.WriteLine("Ukončení programu = zadání čísla "0""); Console.Write("Zadej řešení (1-{0}) > ", o8dam.POCET_RESENI); try { x = Int32.Parse(Console.ReadLine()); } catch { Console.WriteLine("Chybné číslo"); x = -1; } if ((x > 0) && (x <= o8dam.POCET_RESENI)) { zobrazReseni(x-1); } } while (x > 0); if (x == 0) { Console.WriteLine("Konec..."); } return 0; } static void zobrazReseni(int idx) { for (int i=0; i<8; i++) { for (int j=0; j<8; j++) { if ((int) o8dam.SACHOVNICE.Tables[idx].Rows[j].ItemArray[7-i] == 1) { Console.Write("* "); } else { Console.Write(". "); } } Console.WriteLine(""); } } } }
Pokud jste v tomto serialku došli až sem, tak si myslím že už je to pro Vás hračka. Nová je framework funkce Console.ReadLine, která čte informace ze vstupu, snažíme se tuto informaci (řetězec) konvertovat na číslo. Trošku jsem si zjednodušil život a použil konstrukci try-catch, k odladění chyby, což je jednoduché, ale asi trochu náročné co do zdrojů a režie. Máme tam smyčku, dokud uživatel nezadá číslo nula tak se program snaží volat metodu zobrazReseni(), jinak program nulou (nebo chybou vstupu) končí.
Tak, nevím jak Vy ale mě už tato úloha leze pořádně krkem (chtěl jsem řict něco horšího ale ovládl jsem se, přiště se tedy těšte na něco jiného. Když to tedy zhrnu, tak to nejdůležitější je, že jsme vytvořili jeden dll soubor, který použijeme nejenom více krát, ale taky v jiných typech aplikace. Taky takto napsaná C# dll knihovna může být použita i programátorem, který používá úplně jiný .NET framework jazyk, typicky např. Visual Basic.NET či J#. Využili jsme podruhé jednou vytvořený uživatelský kontrol (ascx soubor) i když bohužel jsme do něho nově zasahovali, a to bývá problém vývoje. Je to především proto, že jsme přesně nevěděli, jak přesně bude kontrol fungovat (především chybně navržené vstupy do kontrolu).
Aplikace běží online na adrese http://www.stavela.cz/…Control.aspx, dále se můžete podívat na konzolovou verzi aplikace a Windows verzi aplikace
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 179x (44.13 kB)
Aplikace je včetně zdrojových kódů v jazyce C#