Автор Тема: Програма за магазин  (Прочетена 6152 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

Meniak

  • Full Member
  • ***
  • Благодарности
  • -Казани: 5
  • -Получени: 4
  • Публикации: 224
Програма за магазин
« -: 02 Ноември 2014, 22:03:36 »
Реших с наученото до сега за Java (до колко правилно и до колко кривилно вие кажете) да напиша някаква програмка.

Племеницата ми има магазинче - железария - и артикулите ги описваше на един екселски файл като сама смяташе отписваше дописваше и т.н.т. когато продава или доставя артилули. Аз я попитах защо не използва някоя складова програма? има ги безплатни в интернет а тя каза че са прекалено заангажираци, на нея и трябвало нещо по просто.
И реших аз да напиша нещо просто което да е като екселския файл ама поне изчисленията да прави само.
Написах тази програмка която споделям с вас и и я дадох да я тества под предлог че не съм сигурен това дали ще сработи но не стига че работелело правилно ми и неини колеги на който тя се похвалила я искаха да си работят с нея.

Та понеже интереса кам тази програмка ме запали да си я развивам искам да попитам за вашето мнение за кода, за програмата, изобщо тръгва ли на вашите компщтри, за абсолючно всичко. И втората причина поради която искам да си развивам програмката е че тя е първото мое проектче което не е мъртво родено а вижда реализация за разлика от доста код дето сам изписал до сега.

Програмата е писана на Java и изискава инсталиран JDK минимум 1.8.0
Програмата не е тествана какработи под Linux и се съмнявам да няма кривинки в дизайна на прозорците.

Линк за сваляне: http://dox.bg/files/dw?a=dc41d88dad

Линк към Github: https://github.com/Meniak/Magazin в папката src се намира кода на програмата - NetBeans качи целия проект :D
« Последна редакция: 02 Ноември 2014, 22:07:32 от Meniak »

Wanderer

  • Full Member
  • ***
  • Благодарности
  • -Казани: 4
  • -Получени: 26
  • Публикации: 196
Re: Програма за магазин
« Отговор #1 -: 02 Ноември 2014, 22:14:08 »
Не съм ти пробвал приложението, но кода ти е ужасен! 
« Последна редакция: 16 Ноември 2014, 18:48:07 от Wanderer »
“You must make the Journey along the road, nobody is able to do it for you!”

Meniak

  • Full Member
  • ***
  • Благодарности
  • -Казани: 5
  • -Получени: 4
  • Публикации: 224
Re: Програма за магазин
« Отговор #2 -: 02 Ноември 2014, 22:16:59 »
Много ше съм благодарен. Не съм на ясно с много неща и искам да ги ознам.

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Re: Програма за магазин
« Отговор #3 -: 03 Ноември 2014, 08:55:06 »
@Wanderer a твоя първи проект как изглеждаше?
@Маniak браво за положените усилия. Прави добро впечатление, че си направил github репо, което е нетипично за прохождащи в занаята.

Meniak

  • Full Member
  • ***
  • Благодарности
  • -Казани: 5
  • -Получени: 4
  • Публикации: 224
Re: Програма за магазин
« Отговор #4 -: 16 Ноември 2014, 17:03:44 »
Здравейте. Качвам представям подобрена версия на програмата ми.

Новото в програмата е че когато в сметка имаме записи надписа на бутона сметка става червен и не е нужно да проверяваме всеки път дали имаме записи в сметката.

Всъщност целта на бутона сметка е да избегнете работата с калкулатор за да изчислите сумата която трябва да плати клиента, просто продавате артикулите и те се добавят към сметка след като клиента приключи с поръчките отваряте сметка и виждате каква е сумата за плащане на всеки един артикул по единично и общо.

Другото ново нещо е че програмата копира папката Store ( която всъщност е базата данни на програмата ) в папката Backup при всяко стартиране на програмата и ако базата данни на програмата се повреди ( както вече ми се случи ) можем да си заредим работеща база данни от последното включване на програмата.

Програмата вече е и с инсталатор.

Програмата е лицензирана под GNU GPL лиценз и изисква инсталиран JDK 1.8.0 минимум.

Линк за сваляне  :  http://dox.bg/files/dw?a=cdffdd8ba4

Линк към Github  :  https://github.com/Meniak/Magazin

Кода все още ми е ужасно написан защото не знам как да го напиша както трябва.


HanKrum

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 120
  • -Получени: 73
  • Публикации: 991
  • Кибик
Re: Програма за магазин
« Отговор #5 -: 16 Ноември 2014, 18:28:25 »
Дай шорткъти скрийншоти за да видим как изглежда и ко има вътре.
« Последна редакция: 16 Ноември 2014, 19:21:22 от HanKrum »
"Силата на правителството се крепи на невежеството на народа, и те знаят това и винаги ще се борят против просвещението." Лев Толстой

Wanderer

  • Full Member
  • ***
  • Благодарности
  • -Казани: 4
  • -Получени: 26
  • Публикации: 196
Re: Програма за магазин
« Отговор #6 -: 16 Ноември 2014, 18:49:14 »
@Wanderer a твоя първи проект как изглеждаше?

И моя, то между другото все още си ми е ужасен  ;D

Цитат
Дай шорткъти за да видим как изглежда и ко има вътре
Да нямаш предвид screenshots ?


-----------------------------------------------------------------------------------------------------------------
Защо кода  е лош:

-Не е ООП
--кода е само статични методи
-- дори тези които не са статични - могат да бъдат, защото “класовете“ ти нямат никакво вътрешно състояние например виж Reports.java, Edit.java, Help.java  и други
--някои класове имат ужасни имена - DS, DD, VP, BackupDatabase  ??? Името на класовете трябва да е съществително
--защо гореизброените класове ползват Simple-Whatever-Property вместо string, double , etc ? Така и така получават примирно string и връщат string - от какъв зор тогава ползваш SimpleStringProperty ?
--getter, setter са antipatterns, нищо, че java beans са изградени върху тях. Правилото е “TELL! DON'T ASK!" - или казано с повече думи - класовете, които съдържат информацията трябва да вършат работата.

По-късно може да добавя още неща
« Последна редакция: 16 Ноември 2014, 19:05:34 от Wanderer »
“You must make the Journey along the road, nobody is able to do it for you!”

Meniak

  • Full Member
  • ***
  • Благодарности
  • -Казани: 5
  • -Получени: 4
  • Публикации: 224
Re: Програма за магазин
« Отговор #7 -: 16 Ноември 2014, 18:58:47 »






HanKrum

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 120
  • -Получени: 73
  • Публикации: 991
  • Кибик
Re: Програма за магазин
« Отговор #8 -: 16 Ноември 2014, 19:22:50 »
Изглежда доста прилично ;)
"Силата на правителството се крепи на невежеството на народа, и те знаят това и винаги ще се борят против просвещението." Лев Толстой

Meniak

  • Full Member
  • ***
  • Благодарности
  • -Казани: 5
  • -Получени: 4
  • Публикации: 224
Re: Програма за магазин
« Отговор #9 -: 16 Ноември 2014, 19:32:29 »
Мерси аз по принцип не мога да правя дизайни защото нямам усет да направя нещо красиво, но щом това ти харесва значи имам напредък. Епа ако се барне това и с малко CSS ще светне.

Meniak

  • Full Member
  • ***
  • Благодарности
  • -Казани: 5
  • -Получени: 4
  • Публикации: 224
Re: Програма за магазин
« Отговор #10 -: 16 Ноември 2014, 23:03:23 »

Защо кода  е лош:

-Не е ООП
--кода е само статични методи
-- дори тези които не са статични - могат да бъдат, защото “класовете“ ти нямат никакво вътрешно състояние например виж Reports.java, Edit.java, Help.java  и други
--някои класове имат ужасни имена - DS, DD, VP, BackupDatabase  ??? Името на класовете трябва да е съществително
--защо гореизброените класове ползват Simple-Whatever-Property вместо string, double , etc ? Така и така получават примирно string и връщат string - от какъв зор тогава ползваш SimpleStringProperty ?
--getter, setter са antipatterns, нищо, че java beans са изградени върху тях. Правилото е “TELL! DON'T ASK!" - или казано с повече думи - класовете, които съдържат информацията трябва да вършат работата.

По-късно може да добавя още неща

Благодаря че ме насочи какво да гледам.

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3623
Re: Програма за магазин
« Отговор #11 -: 18 Ноември 2014, 02:04:13 »
Няма какво да добавя щото съм далеч от Java, но браво за усилията които полагаш, виждам резултати и още..... благодаря, че пишеш и споделяш в научиМе.
« Последна редакция: 18 Ноември 2014, 02:06:48 от jazzman »
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Re: Програма за магазин
« Отговор #12 -: 18 Ноември 2014, 17:20:59 »
Браво за усилията и от мен. Хубаво изглежда на външен вид.  Само остава да изпълниш съветите на @wanderer,  които общо взето важат за всеки един език за програмиране с обектен модел. Давай смело и продължавай напред. Пък с каквото може ще помагаме.

Meniak

  • Full Member
  • ***
  • Благодарности
  • -Казани: 5
  • -Получени: 4
  • Публикации: 224
Re: Програма за магазин
« Отговор #13 -: 18 Ноември 2014, 18:08:00 »
Мерси много. работа по съветите на @wanderer но ми е трудно да асимилирам това

Защо кода  е лош:

-Не е ООП
--кода е само статични методи
-- дори тези които не са статични - могат да бъдат, защото “класовете“ ти нямат никакво вътрешно състояние например виж
Reports.java, Edit.java, Help.java  и други.

Wanderer

  • Full Member
  • ***
  • Благодарности
  • -Казани: 4
  • -Получени: 26
  • Публикации: 196
Re: Програма за магазин
« Отговор #14 -: 18 Ноември 2014, 20:00:36 »
Съществуват няколко подхода (ако може да се нарекат така) към програмирането:
-процедурно - данните и логиката , която се изпълнява върху тях са разделени.
-ООП - данните и логиката, която се изпълнява върху тях са едно.

Двата подхода имат различни плюсове и минуси. Например при ООП е много по-лесно да дефинираш нов тип данни (клас) или да промениш вече съществуващ, но пък е много по-трудно да добавиш логика, която се изпълнява върху него. Докато при процедурното програмиране е обратното. Там е много по лесно да добавиш нова функция, която работи върху дадена структура, отколкото да промениш вече съществуваща структура.

Виждам, че си преименувал файловете, та сега ми е трудно да се ориентирам :D Нека разгледаме:

Код: Java
  1. public class ReportsWindow {
  2.  
  3.     public void referenceSales() throws IOException {
  4.         Parent root = FXMLLoader.load(getClass().getResource("/screens/DailySalesScreen.fxml"));
  5.         Stage stage = new Stage();
  6.         Scene scene = new Scene(root);
  7.  
  8.         stage.setTitle("Справка дневни продажби");
  9.         stage.initModality(Modality.APPLICATION_MODAL);
  10.         stage.setResizable(false);
  11.         stage.initStyle(StageStyle.UTILITY);
  12.         stage.setScene(scene);
  13.         stage.show();
  14.     }
  15.  
  16.     public void referenceSupply() throws IOException {
  17.         Parent root = FXMLLoader.load(getClass().getResource("/screens/DailyDeliveriesScreen.fxml"));
  18.         Stage stage = new Stage();
  19.         Scene scene = new Scene(root);
  20.  
  21.         stage.setTitle("Справка дневни доставки");
  22.         stage.initModality(Modality.APPLICATION_MODAL);
  23.         stage.setResizable(false);
  24.         stage.initStyle(StageStyle.UTILITY);
  25.         stage.setScene(scene);
  26.         stage.show();
  27.     }
  28. }
  29.  

Защо горните два метода не са статични ? Защо трябва да направя инстанция на класа за да ги използвам ?
Също се забелязва 100% дублиране на код. Така е по добре, въпреки че такива utility методи са code smell.

Код: Java
  1. public class ReportsWindow {
  2.  
  3.     public static void utilityWIndow(String title, URI pathToFxml) throws IOException  {
  4.         Parent root = FXMLLoader.load(pathToFxml);
  5.         Stage stage = new Stage();
  6.         Scene scene = new Scene(root);
  7.  
  8.         stage.setTitle(title);
  9.         stage.initModality(Modality.APPLICATION_MODAL);
  10.         stage.setResizable(false);
  11.         stage.initStyle(StageStyle.UTILITY);
  12.         stage.setScene(scene);
  13.         stage.show();
  14.     }
  15.  
  16.     public static void referenceSales() throws IOException {
  17.         utilityWIndow("Справка дневни продажби", getClass().getResource("/screens/DailyDeliveriesScreen.fxml"));
  18.     }
  19.  
  20.     public static referenceSupply() throws IOException {
  21.         utilityWIndow("Справка дневни доставки", getClass().getResource("/screens/DailySalesScreen.fxml"));
  22.     }
  23. }

Не съм запознат с JavaFX-a така че не мога да ти кажа как точно да си организираш кода, но само статични методи не е добре. Също избягвай повторението, където е възможно.
“You must make the Journey along the road, nobody is able to do it for you!”