Создание программы "Касса"

Особенности и принципы объектно-ориентированного программирования. Разработка программы "Касса" для реализации выдачи зарплаты работникам использованием операторов, основных методов и принципов языка Java. Алгоритм и тестовый пример решения задачи.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 10.01.2013
Размер файла 47,7 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Государственное образовательное учреждение высшего профессионального образования

«Санкт-Петербургский государственный политехнический университет»

Факультет экономики и менеджмента

Кафедра «Информационные системы в экономике и менеджменте»

КУРСОВОЙ ПРОЕКТ

По дисциплине «Программирование»

На тему: «Касса»

Выполнил:

студент гр. 1074/2

Громова М.В.

Принял:

доцент

Чанцев В.П.

Санкт-Петербург, 2012

Содержание

Введение

1. О Java

1.1 Типы данных

1.2 Условные операторы

1.3 Циклы

1.4 Принципы объектно-ориентированного программирования

2. Постановка задачи

3. Алгоритм решения

Заключение

Список литературы

Приложение 1. Текст программы

Приложение 2. Тестовый пример

программа java зарплата алгоритм

Введение

Целью данного курсового проекта является написание программы «Касса», в которой требуется реализовать выдачу зарплаты работникам, имея количество купюр каждого достоинства и ведомость выдачи зарплаты.

Для реализации поставленной цели необходимо решить следующие задачи:

1) Изучить особенности программирования на языке Java;

2) Обозначить основные принципы объектно-ориентированного программирования;

3) Написать код программы.

В ходе создания программы решения необходимо использовать операторы, основные методы и принципы языка Java. Более того, программа должна быть предельно проста и понятна.

В соответствии с поставленными задачами работа имеет следующую структуру:

1) Особенности языка Java (типы данных, операторы);

2) Основные принципы и понятия объектно-ориентированного программирования;

3) Описание кода программы.

Глава 1. О Java

1.1 Типы данных

Все типы данных разделяются на две группы. Первую составляют 8 простых, или примитивных (от английского primitive), типов данных. Они подразделяются на три подгруппы:

* целочисленные:

Byte;

Short;

Int;

Long;

Char (также является целочисленным типом);

* дробные:

Float;

Double;

* булево

oolean.

Тип

Размер (бит)

По умолчанию

Значения (диапазон или максимум)

boolean

8

false

True/False

byte

8

0

-128127

char

16

`\u0000'

0..65535

short

16

0

-32768..32767

int

32

0

-2147483648..2147483647

long

64

0

922372036854775807L

float

32

0.0

3.40282347E+38

double

64

0.0

От 1.7e-308 до 1.7e+308

Вторую группу составляют объектные, или ссылочные (от английского reference), типы данных. Это все классы, интерфейсы и массивы. В стандартных библиотеках первых версий Java находилось несколько сотен классов и интерфейсов, сейчас их уже тысячи. Кроме стандартных, написаны многие и многие классы и интерфейсы, составляющие любую Java-программу.

1.2 Условные операторы

Управляющая конструкция if-else в зависимости от значения логического выражения позволяет выполнять различные части программного кода. В общей форме этот оператор записывается следующим образом:

if (логическое выражение) блок1; [else блок2;]

Если условие, задаваемое заключенным в круглые скобки логическим выражением истинно, то будет выполняться блок 1, иначе - блок 2. Часть else может и отсутствовать.

Управляющие конструкции if и if-else могут быть вложенными, и с помощью блока (block) (заключения нескольких операторов в фигурные скобки) позволяют помещать в каждую из двух своих ветвей произвольное число операторов. Это позволяет разделить поток управления программы на произвольное число частей.

Эту же задачу часто удобнее решать с помощью оператора switch, общий вид которого таков:

switch (выражение) {

case значение 1:

блок 1;

break;

case значение 2:

блок 2;

break;

case значениеN:

блокN;

break;

default:

блок N+1;

}

Выражение, которое должно иметь целочисленный тип, сравнивается со всеми значениями (тоже целочисленными), указанными после ключевых слов case. Если оно оказывается совпадающим с одним из них, то управление передается соответствующему блоку операторов, а если совпадения не обнаруживается, то управление передается блоку default (если таковой существует, ибо он не является обязательным). После выполнения того блока, на который было передано управление, оператор break вызывает завершение выполнения оператора switch. При отсутствии оператора break управление просто будет передано следующему блоку за только что выполненным.

1.3 Циклы

Для организации циклов существует ряд конструкций. Первая - это while:

while (условие) действие;

Уже понятно, что для выполнения нескольких действий просто заключаем операторы в фигурные скобки. Действие(я) будет выполняться если условие истинно.

Аналогичный цикл do … while:

do действие while (условие);

Различие в том, что данный цикл сперва выполняет действие, а после этого проверяется условие дальнейшей итерации цикла. Т.е. в не зависимости от условия действие выполняется как минимум один раз.

Выше речь шла об условных циклах. Для того, что заставить эти циклы выполнять определенное количество итераций необходимо вводить дополнительную переменную-счетчик. Для этих целей как нельзя лучше подходит цикл for:

for (инициализация счетчика; условие; действие над счетчиком) действие;

1.4 Принципы объектно-ориентированного программирования на Java

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

1) Абстракция. Описывая поведение какого-либо объекта, мы строим его модель. Модель, как правило, не может описать объект полностью, реальные объекты слишком сложны. Приходится отбирать только те характеристики объекта, которые важны для решения поставленной перед нами задачи. Мы должны абстрагироваться от некоторых конкретных деталей объекта. Очень важно выбрать правильную степень абстракции. Слишком высокая степень даст только приблизительное описание объекта, не позволит правильно моделировать его поведение. Слишком низкая степень абстракции сделает модель очень сложной, перегруженной деталями, и потому непригодной.

2) Иерархия означает классификацию объектных типов, рассматривая объекты как реализацию классов (класс похож на заготовку, а объект -- это то, что строится на основе этой заготовки) и связывая различные классы отношениями наподобие «наследует», «расширяет», «является его абстракцией», «определение интерфейса».

3) Ответственность. Она заключается в том, что объект берет на себя ответственность задавать правильные параметры в сообщении другому объекту или возлагает на себя ответственность применить какой-либо метод.

4) Модульность. Этот принцип утверждает -- каждый класс должен составлять отдельный модуль. Члены класса, к которым не планируется обращение извне, должны быть инкапсулированы.

5) Принцип KISS. Самый основной, базовый и самый великий принцип программирования не нуждается в разъяснениии переводе: "Keep It Simple, Stupid!"

2. Постановка задачи

Массив K(n) содержит значения (номиналы) денежных знаков (купюр и монет) некоторой валютной системы; массив L(n) - количество знаков каждого достоинства в кассе; массив S(m) - ведомость выдачи зарплаты. Известно, что денег в кассе больше, чем сумма зарплат работников, т.е. что касса платежеспособна. Реализовать выдачу зарплаты, т.е. найти количество знаков каждого достоинства для каждого работника или показать, что без сдачи это сделать нельзя.

3. Алгоритм решения

1) Заполним массивы K(n), L(n) и S(m) необходимыми для решения задачи данными.

2) Зарплату каждого работника будем делить на достоинства купюр данной валютной системы в порядке убывания, пока остаток от деления не будет равен 0.

3) Выведем полученные данные на экран.

Заключение

В представленном курсовом проекте были рассмотрены основные понятия языка программирования Java, а именно: типы данных, условные операторы, циклы. Так же были представлены основные принципы объектно-ориентированного программирования.

На Java нами была написана программа, которая осуществляет выдачу зарплаты работникам предприятия. Она имеет большое значение, поскольку она может значительно облегчить решение практических задач.

Список литературы

1. Васильев А.Н. Объектно-ориентированное программирование для магистров и бакалавров: базовый курс по объектно-ориентированному программированию. - Санкт-Петербург, Питер, 2011г - 396 с.

2. Брюс Эккель. Философия Java. - Санкт-Петербург,Питер,2009 г- 640 с.

Приложение 1

Текст программы

public class kassa {

public static void main(String[] args) {

//Объявляем константы, переменные и массивы

int MaxN = 20;//Максимальное количество номиналов денежных знаков

int MaxM = 200;//Максимальное количество работников

int n; //Количество разных номиналов валюты

int m; //Количество работников в ведомости

float K[]; //Значения номиналов денежных знаков

int L[]; //Количество знаков каждого достоинства в кассе

float S[];//Ведомость выдачи зарплаты

//Создаем объект "in" класса "Scaner"

Scanner in = new Scanner(System.in);

//Запрос на ввод количества номиналов денежных знаков

// Ограничение на количество номиналов от 1 до 20, верхнее значение можно изменить

// Если количество номиналов денежных знаков выйдет за пределы от 1 до 20, то программа завершится

System.out.print("\nVvedite kolichestvo nominalov denezhnyh znakov [1,"+MaxN+"]: ");

n = in.nextInt();

if ((n < 1)||(n>MaxN)) {

System.out.print("\nNevernoe kolichestvo nominalov");

return;

}

// Создаем пустой массив для номиналов денежных знаков

K = new float[n];

// Создаем пустой массив для количества знаков каждого достоинства в кассе

L = new int [n];

//Запрос на ввод значения номинала и количества знаков данного достоинства

System.out.print("Vvedite znachenie nominala v poryadke ubyvaniya i kolichestvo znakov dannogo dostoinstva:\n");

// Запрос и ввод происходит в цикле

for (int j=0; j<n; j++) {

System.out.print("Klass nominala: " + (j+1) + '\n');

System.out.print("Znachenie nominala: ");

K[j] = in.nextInt();

System.out.print("Kolichestvo znakov: ");

L[j] = in.nextInt();

}

//Выводит таблицу с номиналами денежных единиц и их количеством

System.out.print("\n Nominal | Kol-vo ");

float KaccaSumm=0;

for (int j=0; j<n; j++) {

System.out.printf("\n %7.2f | %6d", K[j], L[j]);

KaccaSumm+= K[j] * L[j];

}

//Выводит сумму денег в кассе

System.out.printf("\nDeneg v KACCE: %.2f", KaccaSumm);

// Запрос на количество работников

// Ограничение на количество работников от 1до 200, верхнее значение можно изменить

// Если количество работников выйдет за пределы от 1 до 200, то программа завершится

System.out.print("\n\nVvedite kolichestvo rabotnikov [1,"+MaxM+"]: ");

m = in.nextInt();

if ((m < 1)||(m>MaxM)) {

System.out.print("\nNevernoe kolichestvo rabotnikov");

return;

}

//Создаем пустой массив-ведомость для указанного (m) количества работников

S = new float [m];

// Запрос и вывод происходит в цикле

for (int i=0; i<m; i++) {

System.out.print("Nomer rabotnika: " + (i+1) + '\n');

System.out.print("Zarplata rabotnika: ");

S[i] = in.nextInt();

}

//Выводит таблицу с номерами работников и их зарплатой

System.out.print("\n Rabotnik | Zarplata ");

float ZarplataSumm=0;

for (int i=0; i<m; i++) {

System.out.printf("\n %8d | %8.2f", (i+1), S[i]);

ZarplataSumm+= S[i];

}

// Выводим сумму зарплаты по всем работникам

System.out.printf("\nSumma zarplaty: %.2f", ZarplataSumm);

// Проверка, что денег в кассе хватит на зарплату всех работников. Если не хватит, то программ завершится

if (ZarplataSumm > KaccaSumm) {

System.out.print("\nDeneg v kacce ne hvataet\n");

return;

}

//Главная часть программы

System.out.print("\n\n Si ");// perevod kursora na 2 stroki i vyvod "Si"

// В цикле выводим таблицу по столбцам

for (int j=0; j<n; j++) {

String s = 'K'+Integer.toString(j+1);

System.out.printf(" %4s ", s);// Выводим номиналы денег в строке по столбцам

}

System.out.print(" Zi");// Последний столбец - сумма денег, которую получит работник при наличии в кассе денег определенного достоинства

for (int i=0; i<m; i++) { // по строкам

String s = 'S'+Integer.toString(i+1);

System.out.printf("\n%4s ", s); //выводим номера работников

float Zi=0; // сумма, которую выдадут из кассы работнику с номером [i]. Она может не совпадать с реальной зарплатой работника если размена купюр нет

float Si = S[i]; // Si - это реальная зарплата работника

//В цикле считаем количество купюр каждого номинала

for (int j=0; j<n; j++) {

//Считаем от самого крупного номинала K1,

if (L[j] != 0) { // проверка, есть ли в кассе купюры номинала K[j], если нет, то переходим в строку программы (*)

int Qij = (int) (Si/K[j]); //находим количество купюр номинала K[j], которое нужно для выдачи зарплаты работника с номером [i]

if (Qij != 0) { //Проверка, то количество купюр номинала K[j] не 0, а если 0, то переходим в строку программы (**)

if (Qij < L[j]) { //Проверяем, что в кассе есть необходимое количество [Qij] купюр номинала K[j]. Если нет, то переходим в строку программы (***)

Si -= K[j] * Qij; //Находим остаток от зарплаты после того, как определили количество купюр [Qij] номинала K[j]

L[j] -= Qij; //Находим остаток купюр в кассе после того, как работнику с номером [i] выдали необходимое число купюр [Qij] номинала K[j]

}

else { //(***) - строка для перехода

Qij = L[j]; //присваиваем количество всех купюр номинала K[j] в кассе (L[j]) переменной [Qij]. То есть все купюры номинала K[j] отдаем работнику с номером [i]

Si -= K[j] * L[j]; //Находим остаток от зарплаты после того, как определили количество купюр [Qij] номинала K[j]

L[j] = 0; //Сделаем количество купюр номинала K[j] в кассе 0

}

Zi += K[j] * Qij; //Увеличиваем выдаваемую сумму зарплаты [Zi] на величину произведения номинала K[j] купюр на и количество, выданное работнику с номером [i]

}

System.out.printf(" %4d ",Qij); //(**) выводим на печать [Qij]

}

else {

System.out.printf(" %4d ",0); //(*) выводим на печать 0

}

}

System.out.printf(" %7.2f",Zi); //Выводим на печать сумму денег, которую можем выдать из кассы работнику с номером [i]

//эта сумма может не совпадать с реальной зарплатой

//Если сумма не совпадает с реальной зарплатой, то зарплату без сдачи выдать не можем

if (Zi < S[i]) {

System.out.print(" Net razmena v kasse");

}

}

System.out.println();

}

}

Приложение 2

Тестовый пример

Для примера возьмем некую валютную систему с пятью номиналами купюр и монет: 50 единиц, 10 единиц, 5 единиц, 2 единицы и 1 единицу. Предположим, мы имеем 30 купюр по 50 единиц, 27 купюр по 10 единиц, 15 монет по 5 единиц, 12 монет по 2 единицы и 20 монет по 1 единице. Тогда сумма денег в кассе равна 1889 единиц. Пусть количество работников в ведомости равно 3, а зарплата каждого равна 128, 583 и 321 единицы соответственно. Сумма зарплат равна 1032 единиц. Тогда для того, чтобы выплатить зарплату первому работнику, нужны 2 купюры по 50 единиц, 2 купюры по 10 единиц, 1 монета по 5 единиц, 1 монета по 2 единицы, 1 монета по 1 единице; чтобы выдать зарплату второму работнику, нужны 11 купюр по 50 рублей, 3 по 10, 1 по 2 и 1 по 1; чтобы выдать зарплату третьему работнику, нужно 6 купюр по 50 рублей, 2 по 10 и 1 по 1.

Выдача зарплаты реализована.

Размещено на Allbest.ru


Подобные документы

  • Разработка игры "Экзамен" с применением объектно-ориентированного программирования и языка Java (в среде Eclipse Helios). Структура программы и алгоритм решения задачи. Описание методов и переменных. Экспериментальное тестирование и оценка программы.

    курсовая работа [122,5 K], добавлен 19.05.2011

  • Создание программы с использованием принципов объектно-ориентированного программирования на языке высокого уровня С# средствами Microsoft Visual Studio 2010. Построение алгоритма реализации. Определение математического аппарата, применение его в задаче.

    курсовая работа [500,4 K], добавлен 13.01.2015

  • Особенности объектно-ориентированного программирования. Основные возможности языка программирования Java, классификация платформ. Создание программы, обеспечивающей вычисление арифметических выражений. Руководство пользователя и характеристика функций.

    курсовая работа [1,2 M], добавлен 07.07.2012

  • История создания языка Java. Основные принципы объектно-ориентированного программирования. Структура, особенности синтаксиса и примеры прикладных возможностей использования языка Java, его преимущества. Перспективы работы программистом на языке Java.

    курсовая работа [795,9 K], добавлен 14.12.2012

  • Характеристика основных принципов объектно-ориентированного программирования. Этапы разработки программы на языке C++, реализующей игру "Морской бой". Выбор языка программирования. Характеристика необходимых классов, наследований, виртуальных методов.

    курсовая работа [657,6 K], добавлен 17.06.2012

  • Разработка программы с использованием принципов объектно-ориентированного программирования на языке высокого уровня С средствами Microsoft Visual Studio 2010. Построение алгоритма реализации. Класс программы, инструкция по использованию программы.

    курсовая работа [1,0 M], добавлен 26.12.2013

  • Общая характеристика объектно-ориентированного подхода в программировании, его основные свойства и принципы. Разработка программы для автоматизация деятельности кафе на основе объектно-ориентированного подхода, проектирования и реализации схемы данных.

    курсовая работа [1,2 M], добавлен 22.01.2012

  • Исследование принципов объектно-ориентированного программирования на базе языка программирования С++. Разработка программного комплекса для ведения учёта памятников города. Описание процессов сортировки, поиска, формирования статистики по памятникам.

    курсовая работа [782,4 K], добавлен 26.05.2014

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

    курсовая работа [333,5 K], добавлен 21.01.2013

  • Разработка приложения "Калькулятор с переходом в строковый калькулятор" с применением объектно-ориентированного программирования. Концепция и понятия объектно-ориентированного программирования. Язык программирования Java. Листинг программы "Калькулятор".

    курсовая работа [966,9 K], добавлен 11.02.2016

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.