import java.io.IOError; import java.io.IOException; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n; String name; String test1 = "ÐавеÑÑиÑÑ"; String test2 = "Complete"; double price; double summ; Calculator Calc = new Calculator(); do { n = ReadInt(sc, "Ðа ÑколÑко Ñеловек Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑазделиÑÑ ÑÑÑÑ ?"); if (n == 1) System.out.println("ÐÐµÑ ÑмÑÑла ниÑего ÑÑиÑаÑÑ Ð¸ делиÑÑ Ð¿Ñи 1 Ñеловеке"); else if (n < 1) System.out.println("ÐолиÑеÑÑво лÑдей должно бÑÑÑ Ð±Ð¾Ð»ÑÑе 1"); else System.out.println(String.format("ÐÑдем делиÑÑ Ð½Ð° %d %s", n, OutPers(n))); } while (n < 2); System.out.println("ЧÑо бÑдем покÑпаÑÑ ?"); while(true) { System.out.println("ÐведиÑе название ÑоваÑа или Ñлово \"ÐавеÑÑиÑÑ\" (\"Complete\")"); name = sc.next(); if (name.equalsIgnoreCase(test1) || name.equalsIgnoreCase(test2)) break; if (name.isEmpty()) System.out.println("ÐбÑаÑиÑе внимаение! ÐÑ Ð½Ðµ ввели пÑÑÑое имÑ, видимо не Ñ Ð¾ÑиÑе ÑаÑкÑÑваÑÑ Ð¸Ð¼Ñ ÑоваÑа..."); do { price = ReadDouble(sc, "ÐведиÑе ÑÑоимоÑÑÑ ÑоваÑа в ÑоÑмаÑе ÑÑбли.копейки, еÑли копеек Ð½ÐµÑ Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ не вводиÑÑ"); if (price < 0.0) System.out.println("ÐÑибка!! Ð¢Ð¾Ð²Ð°Ñ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ ÑÑоиÑÑ Ð¼ÐµÐ½ÑÑе 0 ÑÑблей 00 копеек"); else if (price == 0.0) System.out.println("ÐбÑаÑиÑе внимание! ÐеÑплаÑнÑй ÑоваÑ, но Ð¼Ñ ÐµÐ³Ð¾ добавим"); } while(price < 0); Calc.calculate(name, price); System.out.println(jl;lString.format("Ðобавлен ÑÐ¾Ð²Ð°Ñ \"%s\" по Ñене %.2f, ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ ÑепеÑÑ Ð½Ñжно внеÑÑи Ñже по %s\n", name, price, OutMoneySum(Calc.sum / n, 2))); System.out.println("ÐÑли болÑÑе не Ñ Ð¾ÑиÑе добавлÑÑÑ ÑÐ¾Ð²Ð°Ñ Ð½Ð°Ð±ÐµÑиÑе Ñлово \"ÐавеÑÑиÑÑ\" или \"Complete\""); System.out.println("ÐнглийÑкое можно ввеÑÑи в лÑбом ÑегиÑÑÑе, но ÑÑÑÑкое именно Ñак, как напиÑано\n"); } System.out.println(String.format("\nÐобавленнÑе ÑоваÑÑ:\n%s\nÐбÑÐ°Ñ ÑÑмма: %s на %d %s\nÐÐ°Ð¶Ð´Ð¾Ð¼Ñ Ð½Ñжно внеÑÑи по %s\n", Calc.list, OutMoneySum(Calc.sum, 1), n, OutPers(n), OutMoneySum(Calc.sum / n, 2))); } // ÐÑвод денежной ÑÑÐ¼Ð¼Ñ Ð² ÑоÑмаÑе // Ð´Ð»Ñ var == 1: Ñ Ñ ÑÑблÑ/ÑÑблÑ/ÑÑблей xx копейка/копейки/копеек // Ð´Ð»Ñ var == 2: Ñ Ñ ÑÑблÑ/ÑÑблÑ/ÑÑблей xx копейке/копейки/копеек private static String OutMoneySum(double sum, int var) { int rub = (int)sum; int kop = (int)((sum - rub) * 100 + 0.5); return String.format("%d %s %d %s", rub, OutRub(rub, var), kop, OutKop(kop, var)); } private static String OutRub(int rub, int var) { String Out = "ÑÑблÑ"; // имениÑелÑнÑй падеж if (var == 2) Out = "ÑÑблÑ"; // даÑелÑнÑй падеж int p1 = rub % 100; if ((p1 >= 5) && (p1 <= 20)) // ÐбÑабоÑка иÑклÑÑений Ð¾Ñ 11 до 14: ÑÑблей Out = "ÑÑблей"; else { int p2 = p1 % 10; if ((p2 >= 5) || (p2 == 0)) // ÐбÑабоÑка оканÑиваÑÑÐ¸Ñ ÑÑ Ð¾Ñ 5 до 9 и на 0: ÑÑблей Out = "ÑÑблей"; else if (p2 >= 2) Out = "ÑÑблÑ"; // ÐбÑабоÑка оканÑиваÑÑÐ¸Ñ ÑÑ Ð¾Ñ 2 до 4: ÑÑÐ±Ð»Ñ } return Out; // ÐÑи 1 оÑÑаеÑÑÑ Ð² единÑÑвенном ÑиÑле: ÑÑблÑ/ÑÑÐ±Ð»Ñ } private static String OutKop(int kop, int var) { String Out = "копейка"; // имениÑелÑнÑй падеж if (var == 2) Out = "копейке"; // даÑелÑнÑй падеж int p1 = kop % 100; if ((p1 >= 5) && (p1 <= 20)) // ÐбÑабоÑка иÑклÑÑений Ð¾Ñ 11 до 14: копеек Out = "копеек"; else { int p2 = p1 % 10; if ((p2 >= 5) || (p2 == 0)) // ÐбÑабоÑка оканÑиваÑÑÐ¸Ñ ÑÑ Ð¾Ñ 5 до 9 и на 0: копеек Out = "копеек"; else if (p2 >= 2) Out = "копейки"; // ÐбÑабоÑка оканÑиваÑÑÐ¸Ñ ÑÑ Ð¾Ñ 2 до 4: копейки } return Out; // ÐÑи 1 оÑÑаеÑÑÑ Ð² единÑÑвенном ÑиÑле: копейка/копейке } // ÐÑвод в ÑоÑмаÑе: (на) Ñ Ñ Ñеловека/Ñеловек private static String OutPers(int persons) { String Out = "Ñеловека"; // РазделиÑÑ Ð½Ð° 1, 2, 3, 4 Ñеловека int p1 = persons % 100; if ((p1 >= 5) && (p1 <= 20)) // иÑклÑÑение Ð¾Ñ 11 до 14 Ñеловек Out = "Ñеловек"; else { int p2 = p1 % 10; if ((p2 >= 5) || (p2 == 0)) Out = "Ñеловек"; } return Out; // ÐÑи поÑледней ÑиÑÑе 1, 2, 3, 4 (кÑоме 11..14) оÑÑаеÑÑÑ Ð·Ð½Ð°Ñение по ÑмолÑаниÑ: Ñеловека } private static class Calculator { double sum = 0; String list = ""; void calculate(String name, double price) { this.sum += price; this.list += String.format("%s по Ñене %.2f\n", name, price); } } private static int ReadInt(Scanner sc, String prompt) { int ret; System.out.println(prompt); while(!sc.hasNextInt()) { sc.next(); System.out.println("ÐÑо Ñвно не Ñелое ÑиÑло. ÐопÑобÑйÑе Ñнова. ÐводиÑе Ñелое ÑиÑло !"); System.out.println(prompt); } ret = sc.nextInt(); return ret; } private static double ReadDouble(Scanner sc, String prompt) { double ret; System.out.println(prompt); while(!sc.hasNextDouble()) { sc.next(); System.out.println("ÐÑо Ñвно не ÑиÑло. Ðозможно, вмеÑÑо ÑоÑки нÑжно поÑÑавиÑÑ Ð·Ð°Ð¿ÑÑÑÑ\nÐопÑобÑйÑе еÑе Ñаз"); System.out.println(prompt); } System.out.println(); ret = sc.nextDouble(); return ret; } }