Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Spolocny projekt s existPierrom - aplikacia  (Přečteno 3087 krát)

wam]Spider007

  • Host
Spolocny projekt s existPierrom - aplikacia
« kdy: 11 Srpna 2009, 18:24:46 »
Nazdarek,
Chcem sa len trochu pochvalit jednym projektom, ktory som vytvoril spolocne s existPierrom. Jedna sa o JAVA aplikaciu spolupracujucu s MySQL databazou, ktora sluzi na skladove hospodarstvo. Aplikacia je specificka, kedze je robena na mieru.

Aplikacia umoznuje evidenciu tovarov, zakaznikov, skladovych zasob a aj samotnych pouzivatelov systemu. Vytvaranie a tlac prijemiek, vydajov pripadne preskladnovanie tovarov. Nasledne je mozne zobrazenie a tlacenie zuctovania. Aplikacia je multiplatformova a taktiez aj multipouzivatelska.

Za databazovu cast a navrh som zodpovedny ja :), za GUI existPierre. Celkovo ma aplikacia cca. 13 000 riadkov kodu, z toho 10k v Jave.

Tu si mozete pozriet video prezentaciu, ktoru robil Pierre, je dobre pozret v HD :)
<a href="http://www.youtube.com/watch?v=uPp2WZMmE1o" target="_blank">http://www.youtube.com/watch?v=uPp2WZMmE1o</a>

Do buducna dufam, ze sa nam podobne projekty budu darit, hlavne kvoli presadzovaniu linuxovych rieseni aj vo firemnom prostredi.

//dufam, ze nie je nevhodne to sem davat :)

existpierre

  • Host
Re: Spolocny projekt s existPierrom - aplikacia
« Odpověď #1 kdy: 11 Srpna 2009, 18:33:46 »
Ja len dodam a vopred sa ospravedlnujem, ze video je vo windows a nie linux. Je to preto, lebo ked som to robil tak som akurat daco doladoval a v linuxe navyse nie je dobry program na nahravanie(recordmydesktop pomale). V celku je to ale jedno. V oboch pripadoch sa to sprava rovnako, ale samozrejme ze v linuxe to ovela krajsie vypada :)

Prsatá blondýna

  • Závislák
  • ***
  • Příspěvků: 1669
  • Stále se učím...
    • Osobní portfolio
Re: Spolocny projekt s existPierrom - aplikacia
« Odpověď #2 kdy: 11 Srpna 2009, 19:17:44 »
hmm, alre z videa toho asi moc nepozname . byl by zdrojak ? nebo primo aplikace ? jinak nevidim duvod to sem davat...
AMD Phenom X4 9500, 2GB DDR2 800MHz RAM(GEIL), 200GB SATA (Seagate), nVidia 8600GT (ASUS), MSI K9A2CF-F MB -  Ubuntu 10.04 Lízací Lopata
ASUS EEE 901 - Ubuntu 10.04 Lízací Lopata
Vodafone 845 s Androidem 2.3  Nepoužívejte Windows ! Je nebezpečný, nepoužitelný, nestabilní a možná i něco víc, ale to M$ zatím tají ... Uznávám 2 bohy : sebe a google

col_boggy

  • Host
Re: Spolocny projekt s existPierrom - aplikacia
« Odpověď #3 kdy: 11 Srpna 2009, 21:58:09 »
Co to umí?
fifo/průměr,...
...inventury
A celé to může běžet na linuxu, což zodpovídá tvůj dotaz, stet :P

jfoot

  • Aktivní člen
  • *
  • Příspěvků: 197
  • ..nemožné ihned, zázraky do tří dnů...
Re: Spolocny projekt s existPierrom - aplikacia
« Odpověď #4 kdy: 11 Srpna 2009, 22:08:52 »
Zdravím úspěšné tvůrce,

a blahopřeji.
jinak nevidim duvod to sem davat...

No možná jo, ale na druhé straně, beru to jako výraz radosti nad protržením dílčí cílové pásky...
Pochlubte se, jestli jste použili nějaký formální jazyk při analýze a jak jste ralizovali tisky (xml, xslt, fop ?).


Po šesté atomové válce  povrch planety Rogoz nevypadal pěkně...

Dítě nevinné...Co ty můžeš vědět...o sadomasochistické derivaci oidipovského komplexu...(O.Neff, K. Saudek, Arnal & Dva dračí zuby)

Prsatá blondýna

  • Závislák
  • ***
  • Příspěvků: 1669
  • Stále se učím...
    • Osobní portfolio
Re: Spolocny projekt s existPierrom - aplikacia
« Odpověď #5 kdy: 12 Srpna 2009, 00:30:41 »
jo, vyraz radosti to jo. ja jim to neberu, verim ze je to kvaůitni produkt. ale proc je to tady. kdyby se aspon hodilo par zdrojaku nebo instalacka... ale takhle... to bych sem mohl taky pastovat kazdej php projekt... protoze to muze bezet na linuxu
AMD Phenom X4 9500, 2GB DDR2 800MHz RAM(GEIL), 200GB SATA (Seagate), nVidia 8600GT (ASUS), MSI K9A2CF-F MB -  Ubuntu 10.04 Lízací Lopata
ASUS EEE 901 - Ubuntu 10.04 Lízací Lopata
Vodafone 845 s Androidem 2.3  Nepoužívejte Windows ! Je nebezpečný, nepoužitelný, nestabilní a možná i něco víc, ale to M$ zatím tají ... Uznávám 2 bohy : sebe a google

nettezzaumana

  • Host
Re: Spolocny projekt s existPierrom - aplikacia
« Odpověď #6 kdy: 12 Srpna 2009, 00:45:56 »
souhlasim se stetem ..
bez toho toho videa na youtube (a to jsem se ani neobtezoval na nej podivat a ani by me to nenapadlo) bych se obesel spis nez bez kodu, kdyz uz teda hrde oznamuju, ze jsem neco naprogramoval ..

aneb k cemu je toto oznameni dobre?

Citace
Do buducna dufam, ze sa nam podobne projekty budu darit, hlavne kvoli presadzovaniu linuxovych rieseni aj vo firemnom prostredi.

receno slovy klasika:

kecy jsou levne, ukazte kod ..

wam]Spider007

  • Host
Re: Spolocny projekt s existPierrom - aplikacia
« Odpověď #7 kdy: 12 Srpna 2009, 01:49:53 »
uff....osobne by som sa zverejneniu kodu nebranil, ale voci zakaznikovi, ktoremu bola aplikacia tvorena by to asi nebolo fer.

tymto threadom som nechcel prezentovat ani tak aplikaciu samotnu, ako to, ze projekty tohto druhu je mozne robit aj pre linux a ukazat aj inym, ktori chcu tvorit, ze to ide.

Tiez sa nebranim (dufam, ze ani existpierre) vytvoreniu open-source projektu podobneho typu. Chyba nam vsak inspiracia pripadne nejaky ohlas o tom, co ludom chyba. Ak sa nieco najde nebudem mat problem a ak sa bude chciet niekto pripojit, tak budem len rad.

jfoot

  • Aktivní člen
  • *
  • Příspěvků: 197
  • ..nemožné ihned, zázraky do tří dnů...
Re: Spolocny projekt s existPierrom - aplikacia
« Odpověď #8 kdy: 12 Srpna 2009, 08:32:38 »
Zdravím všechny diskutující,

ad zdrojáky)
zveřejnit zdrojáky by nebylo špatné. Nicméně průměrný aplikační programátor (mezi které se počítám i já  ;D) se ale dle mého názoru do zdrojáků aplikace, která právě neřeší  "jeho" problematiku, tedy tu, na které právě pracuje,
totiž vůbec nepodívá. Na to je příliš zavalen jinou prací, která jej nezřídka živí.
Zvlášť když zdrojáky nedoprovází analytický materál popsaný třeba pomocí UML.
Zveřejnění source code má samozřejmě smysl pro jedince, který právě řeší skladové hospodářství, ať je to student, profesionál anebo hacker.

ad využití)
využití aplikace typu skladové hospodářství by mohlo být (v závislosti na licenci
a po jejím příslušném "ohnutí", tedy adaptaci určité části její funkčnosti)
pro lidičky, kteří působí v různých občanských spolcích, kde se provádí operace spadající pod rámec této aplikace a kde se nedostává peněz na nákup odpovídajícího komerčního software.

ad autoři)
předpokládám, že máte tiskové výstupy v *pdf naprogramované v prostředí Javy
za užití open source. Pokud nemáte a budete chtít info na toto téma (v prostředí Javy), dejte vědět ...
Po šesté atomové válce  povrch planety Rogoz nevypadal pěkně...

Dítě nevinné...Co ty můžeš vědět...o sadomasochistické derivaci oidipovského komplexu...(O.Neff, K. Saudek, Arnal & Dva dračí zuby)

Firzen

  • Stálý člen
  • **
  • Příspěvků: 1287
    • Beroot
Re: Spolocny projekt s existPierrom - aplikacia
« Odpověď #9 kdy: 14 Srpna 2009, 16:48:46 »
Nějaké zdrojáky veřejné jsou ale nepovím, kde :P
AMD Phenom II X6 1100T@3,3GHz, Gigabyte GeForce GT 430 1GiB, 8GiB RAM, 1TiB SATA3 HDD, Nokia N900
OS: Debian 6.0 Squeeze, Maemo 5
Citace
Prosintě ty jsi takový zkušený vývojář - co mám dělat, když nevím, jako něco udělat? :D

existpierre

  • Host
Re: Spolocny projekt s existPierrom - aplikacia
« Odpověď #10 kdy: 14 Srpna 2009, 21:45:34 »
Hus hajzle:-D:-D ale ne. Tie objekty sem mozem dat. Aj ked budem bombardovany vlnou kritiky:-D

Firzen

  • Stálý člen
  • **
  • Příspěvků: 1287
    • Beroot
Re: Spolocny projekt s existPierrom - aplikacia
« Odpověď #11 kdy: 15 Srpna 2009, 16:11:53 »
Muhehe ;D
AMD Phenom II X6 1100T@3,3GHz, Gigabyte GeForce GT 430 1GiB, 8GiB RAM, 1TiB SATA3 HDD, Nokia N900
OS: Debian 6.0 Squeeze, Maemo 5
Citace
Prosintě ty jsi takový zkušený vývojář - co mám dělat, když nevím, jako něco udělat? :D

existpierre

  • Host
Re: Spolocny projekt s existPierrom - aplikacia
« Odpověď #12 kdy: 15 Srpna 2009, 17:36:15 »
tak napriklad:

Kód: [Vybrat]
/*
 * Trieda, ktora na zakladne vstupnych info : celkovy pocet riadkov a pocet riadkov
 * na stranu, vypocita, kolko to bude mat stran a vypocita start a end index pre kazdu stranu
 */
package ishs;

/**
 *
 * @author peter
 */
public class TablePage {

    private int actual_page = 1;
    private int rows_per_page = 0;
    private boolean last_zero = false;
    private int last = 0;
    private int rows_count = 0;
    private int pages_count = 0;


    /**
     * {@inheritDoc}
     * <p>
     * inkremetuje aktualnu stranku
     */
    public void nextPage() {
        if (actual_page == getPagesCount()) {
            actual_page = 0;
            actual_page++;
        } else {
            actual_page++;
        }
    }

    /**
     * {@inheritDoc}
     * <p>
     * dekremetuje aktualnu stranku
     */
    public void prewiousPage() {
        if (actual_page == 1) {
            actual_page = getPagesCount() + 1;
            actual_page--;
        } else {
            if(actual_page > 0){
            actual_page--;
            }
        }
    }

    /**
     * {@inheritDoc}
     * <p>
     * nastavi stranu, ktora ma byt zobrazena
     */
    public void setActualPage(int actual_page) {
        if (actual_page < getPagesCount() + 1) {
            this.actual_page = actual_page;
        }
    }

        /**
     * {@inheritDoc}
     * <p>
     * vrati cislo aktualne zobrazenej strany
     */
    public int getActualPage() {
        return actual_page;
    }

        /**
     * {@inheritDoc}
     * <p>
     * ulozi pocet zaznamov
     */
    public void setRowsCount(int rows_count) {
        this.rows_count = rows_count;
    }

    /**
     * {@inheritDoc}
     * <p>
     * vrati pocet zaznamov
     */
    public int getRowsCount() {
        return rows_count;
    }

    /**
     * {@inheritDoc}
     * <p>
     * ulozi sa zvysok po vypocte poctu stran podla poctu zaznamov.
     */
    private void setLast(int last) {
        this.last = last;
    }

    /**
     * {@inheritDoc}
     * <p>
     * vrati zvysok
     */
    private int getLast() {
        return last;
    }

    /**
     * {@inheritDoc}
     * <p>
     * vrati, ci bol vysledok vypoctu poctu stran so zvyskom alebo bez
     */
    private boolean isLastZero() {
        return last_zero;
    }

       /**
     * {@inheritDoc}
     * <p>
     * ak bol vypocet bez zvysku, vrati true
     */
    private void setLastZero(boolean last_zero) {
        this.last_zero = last_zero;
    }

        /**
     * {@inheritDoc}
     * <p>
     * nastavi pozadovany pocet zaznamov na stranu
     */
    public void setRowsPerPage(int rows_per_page) {
        this.rows_per_page = rows_per_page;
    }

    /**
     * {@inheritDoc}
     * <p>
     * vrati pozadovany pocet zaznamov na stranu
     */
    public int getRowsPerPage() {
        return rows_per_page;
    }

        /**
     * {@inheritDoc}
     * <p>
     * vrati  pocet stran
     */
    public int getPagesCount() {
        return pages_count;
    }

        /**
     * {@inheritDoc}
     * <p>
     * podla poctu zaznamov a zaznamov na stranu vypocita pocet stran
     */
    public void loadPagesCount() {
        int ret_val = 0;
        if (getRowsPerPage() > 0) {
            int rc = getRowsCount();
            if (rc % rows_per_page == 0) {
                ret_val = rc / rows_per_page;
                setLastZero(true);
            } else {
                ret_val = rc / rows_per_page + 1;
                setLastZero(false);
                setLast(rc % rows_per_page);
            }
        } else {
            ret_val = 1;
        }
       
        if (ret_val == 0) {
            pages_count = 1;
        } else {
            pages_count = ret_val;
        }

    }

    /**
     * {@inheritDoc}
     * <p>
     * vrati pociatocny index na stranu
     */
    public int getStartOfPage() {
        int ret_val = 0;
        if (getRowsPerPage() > 0) {
            int page = getActualPage() - 1;
            if (page == 0) {
                ret_val = 0;
            } else {
                ret_val = (page * getRowsPerPage());
            }
        } else {
            ret_val = 0;
        }
        return ret_val;
    }

    /**
     * {@inheritDoc}
     * <p>
     * vrati konecny index na stranu
     */
    public int getEndOfPage() {
        int ret_val = 0;
        if (getRowsPerPage() > 0) {
            if (isLastZero()) {
                    ret_val = (getStartOfPage() + getRowsPerPage()) - 1;
            } else {
                if (getActualPage() == getPagesCount()) {
                    ret_val = (getStartOfPage() + getLast()) - 1;
                } else if(getActualPage() < getPagesCount()){
                    ret_val = (getStartOfPage() + getRowsPerPage()) - 1;
                }
            }
        } else {
            ret_val = getRowsCount() - 1;
        }
        return ret_val;
    }
}

vdaka tomuto objektu nemam v tabulke vsetky zaznamy, ale rozdeli mi to na strany, ktore potom zobrazujem a listujem ako v knihe



Tento ubjekt uklada a nacita/zapisuje nastavenia zo/do suboru. Napisem si tam len konstanty (nazvy nastaveni) a potom s tym pracujem

Kód: [Vybrat]
/*
 * Objekt pre ukladanie a nacitanie nastaveni
 */
package ishs;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Vector;

/**
 *
 * @author peter
 */
public class AppOptions {

    public final String ROWS_PAGES_CUST = "rowsPerPageCustomers";
    public final String ROWS_PAGES_ARTI = "rowsPerPageArticles";
    public final String ROWS_PAGES_ARTI_MC = "rowsPerPageMatchArticles";
    public final String ROWS_PAGES_STOR = "rowsPerPageStore";
    public final String ROWS_PAGES_WORK = "rowsPerPageWork";
    public final String MACHINE = "machine";
    public final String DATABASE = "database";
    private String file_name_str = "";
    public Vector<String> data_set = new Vector();

    public AppOptions() {
        /**
         * {@inheritDoc}
         * <p>
         * nacita do vectora neparsnute riadky
         */
        try {

            file_name_str = DDirectory.getDataDirectory() + "config" + File.separator + "ishs.cfg";
            BufferedReader in = new BufferedReader(new FileReader(file_name_str));
            String str;
            while ((str = in.readLine()) != null) {
                try {
                    str = deleteSpace(str);
                    data_set.add(str);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            in.close();
        } catch (Exception e) {
            e.printStackTrace();

        }
    }

    /**
     * {@inheritDoc}
     * <p>
     * podla nazvu nastavenia ulozi hodnotu do vectora
     */
    public void saveOption(String option_name, String value) {
        for (int x = 0; x < data_set.size(); x++) {
            String str = extractOptionName(data_set.get(x));
            if (option_name.equals(str)) {
                data_set.setElementAt(option_name + " = " + value, x);
            }
        }
    }

    /**
     * {@inheritDoc}
     * <p>
     * podla nazvu nastavenia ziska danu hodnotu z nacitaneho suboru
     */
    public String getOption(String option_name) {
        String ret_val = "";
        for (int x = 0; x < data_set.size(); x++) {
            String str = extractOptionName(data_set.get(x));
            if (option_name.equals(str)) {
                ret_val = extractOptionValue(data_set.get(x));
            }
        }

        return ret_val;
    }

    /**
     * {@inheritDoc}
     * <p>
     * zapise vector s novymi nastaveniami na disk
     */
    public void writeFile() {
        try {
            FileWriter out_file = new FileWriter(file_name_str);
            PrintWriter out = new PrintWriter(out_file);

            for (int x = 0; x < data_set.size(); x++) {
                try {
                    out.println(deleteSpace(data_set.get(x)));
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    /**
     * {@inheritDoc}
     * <p>
     *  z riadku parsne nazov nastavenia
     */
    private String extractOptionName(String str) {
        return deleteSpace(str.substring(0, str.lastIndexOf(" ") - 2));
    }

    /**
     * {@inheritDoc}
     * <p>
     *  z riadku parsne hodnotu nastavenia
     */
    public String extractOptionValue(String str) {
        return deleteSpace(str.substring(str.lastIndexOf(" ") + 1, str.length()));
    }

    /**
     * {@inheritDoc}
     * <p>
     * odstrani medzery
     */
    private String deleteSpace(String str) {
        String ret_val = "";
        ret_val = str.replace(" ", "").replace("=", " = ");
        return ret_val;
    }
}


Zistenie OS a podla toho prisposobi nazov korenovej zlozky nastaveni

Kód: [Vybrat]
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ishs;

import java.io.File;

/**
 *
 * @author eXistPierre
 */
public class DDirectory {

    private static String name_os = System.getProperty("os.name");
    private static String data_directory = "hermestore" + File.separator;

        /**
     * {@inheritDoc}
     * <p>
     * vrati nazov priecinka s potrebnymi subormi. Zisti, pod akou platformou je aplikacia pustena
     * ak sa jedna o linux, tak ho da ako skryty a bude v home zlozke
     */
    public static String getDataDirectory() {
        name_os = name_os.substring(0, 1).toLowerCase().trim();
        if ("w".equals(name_os.toLowerCase())) {
            data_directory = "hermestore" + File.separator;
        } else {
            data_directory = ".hermestore" + File.separator;
        }
        return DDirectory.data_directory;
    }

        /**
     * {@inheritDoc}
     * <p>
     * vrati, ci sa jedna o windows alebo ine platformy
     */
    public static boolean isWindows() {
        if ("w".equals(name_os.toLowerCase())) {
            return true;
        } else {
            return false;
        }

    }
}
« Poslední změna: 16 Srpna 2009, 12:42:08 od eXistPierre »

 

Provoz zaštiťuje spolek OpenAlt.