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#