Автор работы: Пользователь скрыл имя, 18 Февраля 2013 в 15:48, курсовая работа
Целью данного курсового проекта является написание программы «Касса», в которой требуется реализовать выдачу зарплаты работникам, имея количество купюр каждого достоинства и ведомость выдачи зарплаты.
Для реализации поставленной цели необходимо решить следующие задачи:
Изучить особенности программирования на языке Java;
Содержание:
Введение…………………………………………………………................ 3
1. О Java…………………………………………………………...………….. 4
1.1. Типы данных…………………………………………………………...4
1.2. Условные операторы…………………………………………………..5
1.3. Циклы…………………………………………………………………..7
1.4. Принципы объектно-ориентированного программирования……….7
2. Постановка задачи………………………………………………………….9
3. Алгоритм решения………………………………………………………..10
Заключение………………………………………………………………..11
Список литературы……………………………………………………….12
Приложение 1. Текст программы………………………………………..13
Приложение 2. Тестовый пример……………………………………
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.
Выдача зарплаты реализована.