Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобраться как строятся java программы 
:(
    Опции темы
Kratom
Дата 4.7.2009, 04:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 17.3.2009

Репутация: нет
Всего: нет



  Всем здрасте, начал изучать java, до этого программированием не занимался(не считая калькуляторов на разных языках), о базовых понятих класса почитал , но все равно не понятно как строить программу и как это все использовать. Сейчас решаю задачу с сайта training.ru, она является тестовой для поступающих учиться на их курсы. 
    
************************************************************

Цель:  
Демонстрация навыков объектно-ориентированного подхода и аналитического мышления.

Формулировка:
написать программу расчета зарплаты сотрудникам некой IT-компании.

Ниже список сотрудников:

EMPLOYEE        ROLE            PROJECT(S)              FIXED_SALARY      EXPERIENCE (YEARS)    
----------------------------------------------------------------------------------------------------------
Ivanov Ivan       Developer        Chart Editor (fixed cost),      1700                          0,5
Petrov Petr        Developer        Employment System            2000                          2,0
Mike                 Manager          Chart Editor (fixed cost),      6000                          4,0
                                              Employment System,
                                              Bank Transaction          
Jim                   Developer        Chart Editor (fixed cost)       3500                          2,0
                                                                                    

Где, EMPLOYEE – полное имя сотрудника
       ROLE - должность
       PROJECT – название актуальных проектов сотрудника
       Fixed cost – маркер – проект с ограниченным бюджетом    
       FIXED_SALARY – фиксированный оклад
       EXPERIENCE – стаж работы
            
Условия: Developer может принимать участие только на одном проекте.

Расчет бонусов:
1.     50 за каждый год после одного года работы
2.     500 за каждый проект, у которого неограниченный бюджет

Ввод/Вывод:
Результат работы программы должен выводить в консоль список имен сотрудников с указанием полной зарплаты (оклад + бонусы), отсортированный по зарплате.

Результат работы должен представлять собой ZIP-архив с исходными кодами приложения и директорией build содержащая скомпилированное, готовое к запуску приложение, если необходимо - инструкция.


********************************************************



       Вот первый набросок

 
package raschet;
import java.io.*;

    public class Employee  
    {
        //данные класса.
        String Name;
        String Role;
        float experience;
        String [][] projects;
        float FixedSalary; 
             
            public static void main(String[] args){
                         
         ********
            }
    public class Developer extends Employee
    {
        ********
    }

 }
 
        класс предок Employee c переменными содержащими сведения из таблицы, в том числе двумерный массив содержащий названия проектов и идентификатор фиксированного или не фиксированного бюджета.  В нем же абстрактный метод, назовем его getSalary реализация его будет содержаться в подклассах  девелопер и менеджер, так как у менеджеров по другому зарплата считается, а если девелопер будет задействован более чем в двух проектах программа должна выдавать ошибку. 
       Далее создаются три объекта типа девелопер и один типа менеджер, в них заносятся данные, а дальше в методе мейн выводятся в консоль с использованием метода getSalary, сортировку пока не трогаю с ней и сам разберусь. Да, и все это будет в одном файле, после метода мейн будут идти объявления класса девелопер и манагер, в теле мейн создание экземпляров этих классов, и распечатка. Просьба общую концепцию подсказать, чисто теоретически.
PM MAIL   Вверх
frikey
Дата 4.7.2009, 05:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior Sys Engineer



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.10.2008
Где: Russia, Samara

Репутация: нет
Всего: нет



Цитата

Да, и все это будет в одном файле, после метода мейн будут идти объявления класса девелопер и манагер


Вот этого точно не стоит делать. Помести лучше каждый класс в отдельный файл.
PM MAIL WWW ICQ Skype GTalk   Вверх
Connie
Дата 4.7.2009, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 382
Регистрация: 12.8.2008

Репутация: 1
Всего: 9



http://www.java-course.ru/

и было бы неплохо про объектно ориентированное программирование почитать, мне в свое время помогла и понравилась книга Gordon Dodril C++ LANGUAGE TUTORIAL поищите ее в сети, ничего, что она про С++ основные принципы и там и в java схожи
PM MAIL WWW   Вверх
Данкинг
Дата 4.7.2009, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



Цитата(Kratom @  4.7.2009,  05:03 Найти цитируемый пост)
до этого программированием не занимался

И сразу с JAVA начинаешь? smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
cube
Дата 4.7.2009, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 11.4.2007

Репутация: 2
Всего: 3



Цитата(Данкинг @ 4.7.2009,  13:23)
Цитата(Kratom @  4.7.2009,  05:03 Найти цитируемый пост)
до этого программированием не занимался

И сразу с JAVA начинаешь? smile

да разницы нет, с чего начинать...


Идею ты понял правильно ;) Классы девелопер и манагер отдельно от мэйн класса их нафиг ;) и Employee тоже ;) 

в Employee как ты правильно все написал будет основной код, этот класс ты будешь расширять как Девелопером так и Манагером

Но вот только я бы посоветовал написать тебе еще один класс например EmployeeList в котором будет основное поле List<Employee> list = new ArrayList....

и все мотоды например   

public List<Employee> getManagers() {}  // здесь будешь возвращать список всех менеджеров
public List<Employee> getDevelopers() {}   // здесь будешь возвращать список всех девелоперов
public double getAmountByEmloyee(Employee emp) {} // здесь сумму по конкретному челу (будь то менеджер, или девелопер)
public List<String> getProjectsByEmloyee(Employee emp) {} // здесь будешь возвращать список названий проектов


будет еще один private метод который загрузит из базы данных или из какого-то файла или еще от куда нибудь список list

преимущества такой конструкции - со временем ты можешь ее расширать добавляя новые объекты и методы для работы с ними, удачи ;)

PM MAIL   Вверх
rimidal
Дата 4.7.2009, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 25.9.2007

Репутация: 1
Всего: 1



Цитата

да разницы нет, с чего начинать...


Еще как есть. Любой предмет изучается прежде всего согласно истории его развития.
Вот и программирование так.
Сначала были процедуры, потом появились модули и только потом ООП (это быстро и на пальцах).
Изучать надо все по порядку. 
Начинать изучение программирования с явы  это все равно что учиться летать сразу на аэробусе.

Вобщем изначально надо посидеть хотябы с полгодика на паскале (ну или чем-либо подобном), 
так сказать "пройти курс молодого бойца", а уж потом начинать изучать ООП и смотреть в сторону явы.
PM MAIL   Вверх
lihusha
Дата 4.7.2009, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 8.6.2008

Репутация: нет
Всего: нет



Kratom, советую почитать книгу Лафоре "Объектно-ориентированное программирование в С++"

Очень доступно для новичков.
PM MAIL   Вверх
Fieral
Дата 5.7.2009, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 10.12.2007

Репутация: нет
Всего: 1



Цитата

Еще как есть. Любой предмет изучается прежде всего согласно истории его развития.
Вот и программирование так.

Ога. Пусть с перфокарт начинает. А нет - лучше с паяльника.


Автор, идите вот сюда: http://www.java-course.ru/


--------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор.
PM MAIL   Вверх
Kratom
Дата 5.7.2009, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 17.3.2009

Репутация: нет
Всего: нет



Цитата(Connie @ 4.7.2009,  12:18)
http://www.java-course.ru/

и было бы неплохо про объектно ориентированное программирование почитать, мне в свое время помогла и понравилась книга Gordon Dodril C++ LANGUAGE TUTORIAL поищите ее в сети, ничего, что она про С++ основные принципы и там и в java схожи

за ссылку спасибо, сайт уже телепортом сливаю, то что нужно для начала изучения EE. Но пока рано читать. Щас онлайн курс с progs.biz курю. А с книжками по с++ лучше пока попуститься, я так быстро не впитываю.

Добавлено через 10 минут и 40 секунд
Цитата(cube @ 4.7.2009,  17:56)
Цитата(Данкинг @ 4.7.2009,  13:23)
Цитата(Kratom @  4.7.2009,  05:03 Найти цитируемый пост)
до этого программированием не занимался

И сразу с JAVA начинаешь? smile

да разницы нет, с чего начинать...


Идею ты понял правильно ;) Классы девелопер и манагер отдельно от мэйн класса их нафиг ;) и Employee тоже ;) 

в Employee как ты правильно все написал будет основной код, этот класс ты будешь расширять как Девелопером так и Манагером

Но вот только я бы посоветовал написать тебе еще один класс например EmployeeList в котором будет основное поле List<Employee> list = new ArrayList....

и все мотоды например   

public List<Employee> getManagers() {}  // здесь будешь возвращать список всех менеджеров
public List<Employee> getDevelopers() {}   // здесь будешь возвращать список всех девелоперов
public double getAmountByEmloyee(Employee emp) {} // здесь сумму по конкретному челу (будь то менеджер, или девелопер)
public List<String> getProjectsByEmloyee(Employee emp) {} // здесь будешь возвращать список названий проектов


будет еще один private метод который загрузит из базы данных или из какого-то файла или еще от куда нибудь список list

преимущества такой конструкции - со временем ты можешь ее расширать добавляя новые объекты и методы для работы с ними, удачи ;)

слабо понимаю, с утра напишу примитивней, потом попробую твой класс реализовать
PM MAIL   Вверх
cube
Дата 5.7.2009, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 11.4.2007

Репутация: 2
Всего: 3



Цитата(Kratom @ 5.7.2009,  01:07)
слабо понимаю, с утра напишу примитивней, потом попробую твой класс реализовать

Пиши как тебе удобнее и не обязательно мой класс реализовывать ;)
Если появятся вопросы спрашивай, поможем ;)
PM MAIL   Вверх
rimidal
Дата 5.7.2009, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 25.9.2007

Репутация: 1
Всего: 1



Цитата

Ога. Пусть с перфокарт начинает. А нет - лучше с паяльника.

А при чем здесь паяльник?
Перфокарта - это всего лишь носитель информации. Где вы увидели что я предлагал использовать старое железо?.

Kratom  для начала вы взяли сложненькую задачу. Грамотно произвести декомпозицию задачи и разложить это все на классы это целое искусство.
PM MAIL   Вверх
Kratom
Дата 6.7.2009, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 17.3.2009

Репутация: нет
Всего: нет



Вот пока, что получается 

  Employee.java

Код


abstract public class Employee
    {
        //данные класса.
        String Name;
        String Role;
        float Experience;
        float FixedSalary;
        String[][] Projects;
        
           //Методы для присваивания значений переменным
            public void setName(String newName)
            {
                Name=newName;
            }
            public void setRole(String newRole)
            {
                Role = newRole;
            }
            public void setExperience(float newExperience)
            {
                Experience = newExperience;
            }
            public void setFixedSalary(float newFixedSalary)
            {
                FixedSalary = newFixedSalary;
            }
            public void setProjects(String[][] newProjects)
            {
                Projects = newProjects;
            }
            //Метод расчета количества стажа свыше одного года
            public int getExpOverYear()
            {
            int ExpOverYear;
            ExpOverYear = (int)(Experience);
            return ExpOverYear;
            }
                        
            //метод возвращающий значение полной зарплаты
            abstract public float getFullSalary();
            
    }




     developer.java

Код


public class developer extends Employee
{
    int UnfixedCoastProjects;
    //считаем количество проектов с неограниченным бюджетом
    public developer()
    {
        if(Projects[1][2] == "1")
            UnfixedCoastProjects = 1;
        else 
            UnfixedCoastProjects = 0;
    }
    
    //реализация метода считающего полную зарплату
    public float getFullSalary()
    {
        float FullSalary;
        FullSalary = FixedSalary + (getExpOverYear())*50 + UnfixedCoastProjects;
        return FullSalary;
    }
    

}

    
   manager.java

Код


public class manager extends Employee
{
    int UnfixedCoastProjects;
    //считаем количество проектов с неограниченным бюджетом
    public manager()
    {
        for(int i=1;i>=3;i++)
        {
            if(Projects[1][2] == "1")
                UnfixedCoastProjects = UnfixedCoastProjects + 1;
            else 
                UnfixedCoastProjects = 0;
        }    
    }
    
    //реализация метода считающего полную зарплату
    public float getFullSalary()
    {
        float FullSalary;
        FullSalary = FixedSalary + (getExpOverYear())*50 + UnfixedCoastProjects;
        return UnfixedCoastProjects;
    }
    

}




   Вопрос, как сделать чтоб цикл выполнялся количество раз равное количеству строк в двумерном массиве? ведь проектов у менеджера может быть больше чем три. 
    Еще надо решить откуда брать данные сотрудников, по задачи можно вручную создавать экземпляры типа манагер и девелопер и вносить данные в тексте программы. Можно ли их забить в базу данных какую-нибудь что б с программой носить один файл базы данных или вообще что б таблица с данными как-нибудь в программу вообще зашита была. Чем для этого воспользоваться, какой манул покурит?

     
PM MAIL   Вверх
rimidal
Дата 7.7.2009, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 25.9.2007

Репутация: 1
Всего: 1



Цитата

Вопрос, как сделать чтоб цикл выполнялся количество раз равное количеству строк в двумерном массиве?


Код

   for(int i=0; i<Projects.length;i++){
     .......
  }


Цитата

Еще надо решить откуда брать данные сотрудников, по задачи можно вручную создавать экземпляры типа манагер и девелопер и вносить данные в тексте программы. Можно ли их забить в базу данных какую-нибудь что б с программой носить один файл базы данных или вообще что б таблица с данными как-нибудь в программу вообще зашита была. Чем для этого воспользоваться, какой манул покурит?


Ну вы сами уже ответили на свой вопрос. Надо использовать базы данных. Какую использовать зависит от задачи. Думаю вам подойдет SQLite ну или ей подобные.
Только если вы захотите использовать БД то вам потребуеться паттерн DAO(http://ooad.asf.ru/). Кроме этого вам еще надо почитать про JDBC. Вобщем прочитать надо будет много чего.

P.S. Рановато вы за эту задачку взялись. А вобще здесь много полезных ссылок - http://forum.vingrad.ru/forum/topic-9229/view-all.html
PM MAIL   Вверх
agR
Дата 7.7.2009, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 19.7.2006
Где: Киев

Репутация: 2
Всего: 2



Цитата(Kratom @  6.7.2009,  23:03 Найти цитируемый пост)
какой манул покурит?

Исходя из вашего кода тут до БД еще курить и курить...
Я бы посоветовал начать пока с начала, то бишь полистать книгу Эккеля "Thinking in Java" или же книгу Хорстманна "Java2. Библиотека профессионала" в 2-х томах, если конечно время позволяет smile
Но без основ, вот так сходу, вряд ли что-то толковое получится.
Например, относительно вашего кода:
1) Желательно (в принципе необходимо) придерживаться определенных правил (соглашений) написания кода: имена переменных должны начинаться с маленькой буквы, имена классов, наоборот - с большой.
2) Также следует придерживаться инкапсуляции данных: переменные экземпляров объявлять как private, а доступ к ним выполнять через общедоступные методы.
3)
Код

        for(int i=1;i>=3;i++)
        {
            if(Projects[1][2] == "1")
                UnfixedCoastProjects = UnfixedCoastProjects + 1;
            else 
                UnfixedCoastProjects = 0;
        }    

Данный цикл никогда не выполнится, так как с  самого начала условие не выполняется. Также, обычно счетчик используется в теле цикла, а у вас - нет.
Если надо пройти по 2-мерному массиву, то это делается примерно так:
Код

        String[][] s = new String[10][10];
        for (int i = 0; i < s.length; i++) {
            for (int j = 0; j < s[i].length; j++) {
                System.out.print(s[i][j]+ " ");
            }
            System.out.println("");
        }

4) Мелочь, но все же, в большинстве случаев наиболее удобным является тип double, а не float.
В общем, если есть время и желание, то лучше все таки почитать книги, тем более скорее всего на курсах расскажут то же самое, только за деньги (хотя смотря какие курсы - может и за большие деньги smile )
PM MAIL ICQ   Вверх
Fieral
Дата 7.7.2009, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 10.12.2007

Репутация: нет
Всего: 1



Цитата

 Еще надо решить откуда брать данные сотрудников, по задачи можно вручную создавать экземпляры типа манагер и девелопер и вносить данные в тексте программы.


грузите из текстового файла

Код

String thisLine;
 
     //Open the file for reading
       BufferedReader br=null;
     try {
br = new BufferedReader(new FileReader(file_path));
       while ((thisLine = br.readLine()) != null) { // while loop begins here
         System.out.println(thisLine);
       } // end while 

br.close();
     } // end try
     catch (IOException e) {
       System.err.println("Error: " + e);


     }
 



затем "раскусываете" строку используя 
http://java.sun.com/j2se/1.4.2/docs/api/ja...gTokenizer.html

а числа распознаёте методами
Double.parse(...)
Integer.parse(...)
--------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1133 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.