jackson
							
								Участник 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 «  : 07-11-2011 20:16 »   | 
								
								 | 
							  
							 
							Доброго времени суток! Опыт программирования на java у меня практически нулевой,но столкнулся с задачей,которую необходимо реализовать:  Создать абстрактный класс Сотрудник. У него должны быть методы для задания ставки (з/п в месяц при 100% отработки), количества отработанных часов, а также методы для получения процента отработанного времени и зарплаты за месяц.  Сотрудники могут быть двух типов: Программист и Менеджер. Программист получает зарплату в соответствии с количеством отработанных часов, а менеджер - 100% в случае переработки и соответствующий процент в случае недоработки.  Класс Бухгалтер принимает множество сотрудников и считает их з/п. Для него должно быть прозрачным, какого типа является сотрудник. Ему важна только зарплата за текущий месяц.  Создать нужно 4 класса: сотрудник,менеджер,программист,бухгалтер.  класс сотрудник,менеджер и программист я создал,но не понимаю, нафиг нужен класс бухгалтер,если у меня зарплата считается в менеджере и программисте,но класс "бухгалтер" должен быть обязательно;класс бухгалтер должен наследовать сотрудника или не обязательно?как вообще подсчёт зарплаты в этом классе организовать?Заранее спасибо за советы.  Вот собственно то,что я уже набросал:  abstract class Employee {         private int ID;         public String name;         public String role;         public int FixedSalary;         public int worckedHours;         public Employee()         {                 ID++;         }         public final int getID()         {                 return ID;         }         public void setName(String name)         {                 this.name=name;         }         public void setRole(String role)         {                 this.role=role;         }         public int setFixedSalary(int FixedSalary)         {                 return this.FixedSalary=FixedSalary;         }         public int setWorckedHours(int worckedHours)         {                 return this.worckedHours=worckedHours;         }         public int getWorckedHours()         {                 return worckedHours;         }         public int getFixedSalary()         {                 return this.FixedSalary;         }         public String getName()         {                 return name;         }         public String getRole()         {                 return role;         }           public abstract int getPercent();         public abstract int getFullSalary();          } class Developer extends Employee  {          static private  final  int HOURS_FOR_MONTH = 160;          static private  final  int MAX_SALARY=5000;          public  int getPercent()          {                  return getWorckedHours()*100/HOURS_FOR_MONTH;          }          public  int getFullSalary()          {                  return getFixedSalary()*100/MAX_SALARY;          }  } class Manager extends Employee  {          static private  final  int HOURS_FOR_MONTH = 160;          static private  final  int MAX_SALARY=4000;          public  int getPercent()          {                  if(getWorckedHours()>HOURS_FOR_MONTH)                  {                          return 100;                  }                  return getWorckedHours()*100/HOURS_FOR_MONTH;          }          public  int getFullSalary()          {                  return getFixedSalary()*100/MAX_SALARY;          }  }  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 08-11-2011 15:34 от Джон »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Kivals
							
						 | 
						
							
								  | 
								
									
									 « Ответ #1 : 08-11-2011 00:08 »   | 
								
								 | 
							  
							 
							... но класс "бухгалтер" должен быть обязательно;класс бухгалтер должен наследовать сотрудника или не обязательно? Так это вопросы к постановщику задачи - что дальше планируется с этими классами? По идее бухгалтер тоже должен получать з/п (голую ставку), но в отличии от программиста - он имеет доступ к з/п других сотрудников. ИМХО начинать нужно с прорисовки (хотя бы общих чертах)  полной модели приложения  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Вад
							
						 | 
						
							
								  | 
								
									
									 « Ответ #2 : 08-11-2011 06:38 »   | 
								
								 | 
							  
							 
							нафиг нужен класс бухгалтер,если у меня зарплата считается в менеджере и программисте Ну, как один из вариантов, программист может не сам считать зарплату, а запрашивать её у бухгалтера. Мало ли, ему менеджер премию выписал   Но в целом, согласен с Kivals: надо понимать, как эти все сущности друг с другом связаны, построить модель этого взаимодействия (например, как появляется новый сотрудник - регистрируется у бухгалтера? у менеджера?).   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Dimka
							
								Деятель 
								Команда клуба
								
								 
								  Offline
								Пол:   
								
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #3 : 08-11-2011 08:52 »   | 
								
								 | 
							  
							 
							но не понимаю, нафиг нужен класс бухгалтер,если у меня зарплата считается в менеджере и программисте Правильный вопрос: а почему  у тебя зарплата считается в менеджере и программисте? Разве IRL это так? Разве IRL они считают свою зарплату и сообщают её бухгалтеру?  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел) 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							jackson
							
								Участник 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #4 : 08-11-2011 09:27 »   | 
								
								 | 
							  
							 
							как вариант,я думаю,методы подсчёт зарплаты и процента отработанного времени нужно в классах программист и менеджер сделать абстрактными(так как эти методы наследуются ими из класса сотрудник),а в классе бухгалтер создать метод подсчёта зарплаты и принимать в этот метод параметр типа Сотрудник. Далее он должен через instanceof проверять, какого типа этот сотрудник - программист или менеджер, и в зависимости от этого высчитывать процентную ставку. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Sla
							
						 | 
						
							
								  | 
								
									
									 « Ответ #5 : 08-11-2011 09:50 »   | 
								
								 | 
							  
							 
							Не понимаю чем отличается Сотрудник, Менеджер, программист, бухгалтер друг от друга, кроме кк обязанностей и методов начисления зарплаты. Сотрудник - Личные данные -   Программист -сотрудник-зарплата-(метод начисления)отработанное время-доступ разрешен только к просмотру зарплаты самого себя. Менеджер -сотрудник-зарплата-(Метод начисления)отработанное время-доступ разрешен к редактированию з/пл программиста, запрещен к изменению самого себя - только просмотр Бухгалтер - сотрудник -зарплата-(метод начисления) - доступ разрешен к изменению/начислению зарплаты всех сотрудников 
 
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Мы все учились понемногу... Чему-нибудь и как-нибудь. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							jackson
							
								Участник 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #6 : 08-11-2011 09:56 »   | 
								
								 | 
							  
							 
							это понятно;мне только не совсем понятно,как  организовать сам подсчёт в классе бухгалтер 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Sla
							
						 | 
						
							
								  | 
								
									
									 « Ответ #7 : 08-11-2011 10:20 »   | 
								
								 | 
							  
							 
							А кто сказал что это должно делаться в классе бухгалтера. Доступ к начислению может иметь только бухгалтер 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Мы все учились понемногу... Чему-нибудь и как-нибудь. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							jackson
							
								Участник 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #8 : 08-11-2011 10:24 »   | 
								
								 | 
							  
							 
							вобще-то в задании сказано,что в бухгалтер считает зарплату 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Sla
							
						 | 
						
							
								  | 
								
									
									 « Ответ #9 : 08-11-2011 10:26 »   | 
								
								 | 
							  
							 
							А я говорю что-то другое?
  Ладно создавай класс бухгалтер, а внем метод - считать зряплату, на вход поступают все сотрудники. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Мы все учились понемногу... Чему-нибудь и как-нибудь. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							jackson
							
								Участник 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #10 : 08-11-2011 10:28 »   | 
								
								 | 
							  
							 
							протупил) да я уже,в общем-то,так и собираюсь сделать) 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Sla
							
						 | 
						
							
								  | 
								
									
									 « Ответ #11 : 08-11-2011 10:35 »   | 
								
								 | 
							  
							 
							Я тебе даже по секрету скажу. Зарплату должен начислять не бухгалтер, а сотрудник с определенным табельным номером, и пусть он будет хоть паровозом, но он имеет право начислять зарплату.    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Мы все учились понемногу... Чему-нибудь и как-нибудь. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							jackson
							
								Участник 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									«  Ответ #12 : 08-11-2011 13:26 »    | 
								
								 | 
							  
							 
							в общем получилась такая прога: abstract class Employee {         private int ID;         public String name;         public String role;         public int Salary;         public int worckedHours;                  public void setName(String name)         {                 this.name=name;         }         public void setRole(String role)         {                 this.role=role;         }         public int setSalary(int Salary)         {                 return this.Salary=Salary;         }         public int setWorckedHours(int worckedHours)         {                 return this.worckedHours=worckedHours;         }         public int getWorckedHours()         {                 return worckedHours;         }         public int getSalary()         {                 return this.Salary;         }         public String getName()         {                 return name;         }         public String getRole()         {                 return role;         }           public abstract float getPercent();         public abstract float getFullSalary();  class Developer extends Employee  {          static private  final  int HOURS_FOR_MONTH = 160;                    public  float getPercent()          {                  return getWorckedHours()*100/HOURS_FOR_MONTH;          }                    public  float getFullSalary()          {                  return (getSalary()/HOURS_FOR_MONTH)*getWorckedHours();          }  } class Manager extends Employee  {          static private  final  int HOURS_FOR_MONTH = 160;                    public  float getPercent()          {                  if(getWorckedHours()>HOURS_FOR_MONTH)                  {                          return getSalary();                  }                  return getWorckedHours()*100/HOURS_FOR_MONTH;          }          public  float getFullSalary()          {                                    return (getSalary()/HOURS_FOR_MONTH)*getWorckedHours();          }  } class Accountant  {                            public float calculateFullSalary (Employee[] employers)             {                 float sum=0;                 for (Employee emp : employers)                     sum=emp.getFullSalary();                 return sum ;             }          } public abstract class salar {
          /**          * @param args          */         public static void main(String[] args) {                 // TODO Auto-generated method stub                 Developer developer = new Developer();                  Manager manager = new Manager();                 Accountant accountant = new Accountant();                 developer.setName("Fedor");                 developer.setRole("Developer");                 developer.setSalary(3000);                 developer.setWorckedHours(100);                 manager.setName("Ivan");                 manager.setRole("Manager");                 manager.setSalary(4200);                 manager.setWorckedHours(120);                 Employee[] emp = new Employee[]{developer, manager};                 accountant.calculateFullSalary(emp);                 System.out.println("Данные о сотрудниках:");                 System.out.println("Имя:"+developer.getName()+"Должность:"+developer.getRole()+"Количество отработанных часов:"+developer.getWorckedHours()+"Фиксированная ставка:"+developer.getSalary()+"Зарплата за месяц:"+accountant.calculateFullSalary(emp));                 System.out.println("************************************************************");                 System.out.println("Имя:"+manager.getName()+"Должность:"+manager.getRole()+"Количество отработанных часов:"+manager.getWorckedHours()+"Фиксированная ставка:"+manager.getSalary()+"Зарплата за месяц:"+accountant.calculateFullSalary(emp));                 
          }
  } и такой вывод: ----------------- Данные о сотрудниках: Имя:FedorДолжность:DeveloperКоличество отработанных часов:100Фиксированная ставка:3000Зарплата за месяц:3120.0 ************************************************************ Имя:IvanДолжность:ManagerКоличество отработанных часов:120Фиксированная ставка:4200Зарплата за месяц:3120.0 --------------- не могу понять, в чём проблема?  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 08-11-2011 15:34 от Джон »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Sla
							
						 | 
						
							
								  | 
								
									
									 « Ответ #13 : 08-11-2011 14:34 »   | 
								
								 | 
							  
							 
							С самого начала хотел спросить, а почему некоторые сеттеры что-то возвращают?
  Теперь по вопросу. 
  то это? float sum=0;            for (Employee emp : employers)                sum=emp.getFullSalary();
  а где сама сумма?
 
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Мы все учились понемногу... Чему-нибудь и как-нибудь. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Dimka
							
								Деятель 
								Команда клуба
								
								 
								  Offline
								Пол:   
								
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #14 : 08-11-2011 14:40 »   | 
								
								 | 
							  
							 
							Потому что пляшете не от той печки, потому так и выходит.
  В чём задача? Посчитать зарплату. Выполнять эту задачу должен бухгалтер. Есть какие-то сотрудники, для которых по-разному считаются зарплаты.
  Классификации должны подвергаться не сотрудники, а методы начисления зарплаты. Примеры: оклад, сдельная, разные виды премирования и надбавок - и т.д. У сотрудников должны быть возможность хранить внутри себя список всех видов начислений, которые к данному сотруднику применяются. Это же и даёт гибкость в управлении кадрами - можно сотруднику изменить порядок начисления тех же премий без всяких модификаций исходного кода, просто заменив один экземпляр на другой.
  Называется это всё шаблон проектирования "стратегия".
  Задача бухгалтера, таким образом, сводится к тому, чтобы перебрать всех сотрудников, а у каждого сотрудника - все его зарплатные "опции" вычислить, просуммировать и вывести в какой-нибудь табель.
  Особый момент здесь тот, что разные стратегии зависят от разных атрибутов сотрудников: для каких-то расчётов нужно знать количество рабочих часов в месяц, для других, например, - сумму сделок, заключённых менеджером по продажам, для третьих - отклонение от каких-то нормативных показателей.
  Поэтому помимо классификации по видам начислений ещё нужна классификация по видам данных, необходимых для применения стратегий.
  P.S. Тему в "Технологии разработки ПО". 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел) 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							jackson
							
								Участник 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #15 : 08-11-2011 14:42 »   | 
								
								 | 
							  
							 
							с сеттерами тупанул,уже исправил; sum это переменная для хранения зарплаты,просто надо было по-другому её назвать
  Добавлено через 3 минуты и 18 секунд:
  Dimka,спасибо за совет) 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 08-11-2011 14:45 от jackson »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Sla
							
						 | 
						
							
								  | 
								
									
									 « Ответ #16 : 08-11-2011 14:55 »   | 
								
								 | 
							  
							 
							я указал на ошибку
  accountant.calculateFullSalary(emp); ---- Здесь она непраильно считается ПОСЧИТАЛИ всех   ..... accountant.calculateFullSalary(emp)); System.out.println("************************************************************"); ..... accountant.calculateFullSalary(emp));       
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Мы все учились понемногу... Чему-нибудь и как-нибудь. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							jackson
							
								Участник 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #17 : 08-11-2011 14:58 »   | 
								
								 | 
							  
							 
							а как её исправить? просто я в джаве пока ещё полный нубяра,пока не доганяю 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Sla
							
						 | 
						
							
								  | 
								
									
									 « Ответ #18 : 08-11-2011 15:07 »   | 
								
								 | 
							  
							 
							хм... я в jave уще полнее НОЛЬ   А что там исправлять, ты что не сам код писал? Тогда, Димка просил в Технологии, а я прошу к Начинающим   sum=0 for i=1 to N {   sum = sum + i } У тебя код расчета общей зарплаты похож на это?  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Мы все учились понемногу... Чему-нибудь и как-нибудь. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							jackson
							
								Участник 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #19 : 08-11-2011 15:10 »   | 
								
								 | 
							  
							 
							нет.не похож)
  Добавлено через 1 минуту и 27 секунд: чёто я в цикл не совсем въехал... а куда мне тогда девать for (Employee emp : employers)? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 08-11-2011 15:12 от jackson »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Sla
							
						 | 
						
							
								  | 
								
									
									 « Ответ #20 : 08-11-2011 15:14 »   | 
								
								 | 
							  
							 
							как ты думаешь, как работает это цикл? Я догадываюсь
  Он пробегает по каждому члену коллекции  но не  суммирует 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Мы все учились понемногу... Чему-нибудь и как-нибудь. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Dimka
							
								Деятель 
								Команда клуба
								
								 
								  Offline
								Пол:   
								
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #21 : 08-11-2011 16:32 »   | 
								
								 | 
							  
							 
							Тогда, Димка просил в Технологии, а я прошу к Начинающим Ну ежели автору даже цикл непонятен, то, конечно, какие тут стратегии.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел) 
						 | 
					 
				 
			 |  
		 
	 | 
	 |