Примеры в этой статье делятся проектированием системы и реализации Java System для вашей ссылки. Конкретный контент заключается в следующем
1. Анализ требований и классификация системы покупок
Сама система покупок является очень сложной системой, со многими деталями и проблемами, которые будут более сложными, если вы изучите их глубоко. Кроме того, система общей покупки является типом веб -страницы и должна иметь дружеский интерфейс. Тем не менее, как простой проект, этот проект просто для того, чтобы представить основные идеи разработки начинающим Java и способы разработки рамок и процессов реализации, когда объектно-ориентированные. Следовательно, это просто простой проект, разработанный на основе затмения, без участия в графическом интерфейсе, и многие детали и проблемы используются в качестве последующих исследований. Общий дизайн относительно прост, но этого достаточно, чтобы объяснить многие идеи дизайна и концепции дизайна. Таким образом, основные потребности анализируются ниже.
Как простая система покупок, вам необходимо иметь хотя бы следующие функции (эти функции распределены в разных уровнях меню):
(1) Функция входа пользователя и функция изменения пароля пользователя, функция регистрации недоступна для времени;
(2) После успешного входа пользователя он должен выполнять функцию управления информацией о клиентах, функцию расчетов торговых точек и некоторые виды лотереи;
(3) Существует много функций, которые можно разделить на функцию управления информацией о клиентах, такие как: запрос, модификация, сложение и т. Д.;
(4) Существует много функций, которые можно разделить на функцию по урегулированию торговых точек, такие как: выбор продукта, оплата, выставление счетов и т. Д.;
(5) Различные лотерейные формы могут быть спроектированы под лотереей, которые могут быть дополнительно разделены на многие новые функциональные модули.
(6) Функция выхода из системы должна быть предоставлена в меню первого уровня, функция выхода из меню второго уровня должна быть предоставлена в меню второго уровня, а другие меню должны иметь возможность вернуться в предыдущее меню.
Вышеуказанные функции являются относительно основными функциями. Если вы проектируете в соответствии с процессом, ориентированной на процесс, вы разделите много функциональных модулей, а затем следуете процессу шаг за шагом. Но теперь мы используем объектно-ориентированную идею для проектирования, как мы должны рассмотреть структуру дизайна? Основная идея объектно-ориентированного-абстрагировать некоторые требования во многие классы, а затем установить связи между этими классами. Благодаря совместному сотрудничеству между различными классами все функции могут быть достигнуты. Следовательно, основная задача сейчас состоит в том, как разумно абстрагировать эти классы, какие функции будут реализовать эти классы и каковы связи между классами? Ниже приведен анализ этого процесса на основе структуры этой конструкции.
(1) Класс стартов: используется для запуска системы. Наша система определенно нуждается в классе стартапа. Этот класс содержит основной метод для запуска системы. Этот класс находится на верхнем уровне, поэтому он не может включать слишком много основных деталей. Он должен реализовать только некоторые основные процессы верхнего уровня. Главное, чтобы вызвать некоторые методы других базовых классов для реализации функций.
(2) Класс данных: используется для хранения всей нашей информации данных. В этом дизайне в основном хранится предварительно сохраняющаяся информация о продукте для покупки и зарегистрированной информации о участниках. Зачем вам этот класс? Подумайте об этом, в объектно-ориентированном дизайне у нас много данных, и мы не должны определять и модифицировать его разбросано везде. Это сделает системную агрегацию слишком низкой, подверженной многим ошибкам, и трудно выполнить более позднее расширение функций и изменение ошибок. Поэтому нам необходимо классифицировать некоторые из используемых общедоступных данных, затем поместить их в класс и предоставить методы для использования этих данных в этом классе.
(3) Класс меню: используется для отображения и обработки меню на всех уровнях. Поскольку мы разрабатываем систему покупок, даже если она проста, нам нужно базовое меню для взаимодействия с пользователями. Поскольку на каждом уровне есть много меню, а меню подключены слоем по слою, нам нужно равномерно управлять меню, поэтому появляется категория меню. Обратите внимание, что меню здесь-это лишь некоторые дисплеи меню верхнего уровня и основные вызовы функций. Конкретный базовый алгоритм по -прежнему должен быть реализован более базовыми классами.
(4) Класс менеджера: используется для хранения учетной записи пользователя и пароля. Поскольку нам нужны пользователи, чтобы войти в систему, нам определенно нужен отдельный класс для управления учетной записью и паролем пользователя, чтобы система была более независимой. Пользователь, разработанный на это время, имеет только одну учетную запись и пароль, и разрешено только изменения в учетную запись и пароль, но регистрация не разрешена.
(5) Verify Equal Class: используется для проверки информации о входе в систему. Этот класс эквивалентен абстрагированию функции входа в вход в класс. Эта реализация на самом деле не очень необходима, но для того, чтобы делить разделение функции системы было более четким, этот класс предназначен для проверки информации о входе в систему, а также существующих учетных записей и паролей, что дает результат проверки.
(6) Класс Custmangement: используется для управления информацией о клиентах. Этот класс реализует некоторые базовые функции, такие как запрос, модификация, добавление и т. Д. Когда мы вводим меню управления информацией о клиентах, мы должны выполнять много операций с информацией о клиенте. Чтобы облегчить управление этими операциями и учитывать последующее расширение, все функции управления информацией о клиентах абстрагируются здесь и помещаются в эту категорию. Предыдущее меню осознает управление информацией о клиентах, вызывая методы в этом классе.
(7) Класс оплаты: используется для обработки покупок и оформления операций. Принцип этого класса в основном такой же, как и вышеупомянутый класс. Когда клиент выбирает делать покупки, должно быть много операций, например, что купить, сколько денег, оплаты, изменений и т. Д. Эти функции относительно фрагментированы, поэтому мы центрально управляем ими, тем самым абстрагируя этот класс и реализуя базовый алгоритм для вариантов меню для торговых точек и поселения. Предыдущее меню осознает функции покупок и урегулирования, вызывая метод этого класса, и может вернуться в предыдущее меню.
(8) Класс подарочного управления: связанные функции, используемые для обработки лотереи. Причины существования этого класса в основном такие же, как и в (6) и (7). Этот класс равномерно управляет лотереей. Предыдущее меню нужно только вызвать метод этого класса, чтобы реализовать функцию лотереи.
(9) Класс подарков: используется для управления подарками. Поскольку лотерейная сессия разработана, подарки определенно необходимы. Так какие дары мы дадим? Мы не можем подробно перечислять каждый подарок. Это очень избыточно и хлопотно, поэтому мы просто абстрагируем класс подарков и сохраняем некоторые атрибуты дара: название и цена дара в переменные члена класса. Тогда мы можем легко управлять классом. Если подарок необходим, создайте новый подарочный объект напрямую, а затем измените и управляйте атрибутами объекта. Эта реализация аналогична интерфейсу, но она полностью отличается от интерфейса и имеет аналогичные функции.
Короче говоря, приведенные выше классы абстрагируются после того, как они разделены на некоторые функциональные модули, а некоторые места не обязательно являются разумными. В основном им нужно рассмотреть требования и сформулировать различные планы в соответствии с различными потребностями. Здесь я хочу снова подчеркнуть «класс подарков». Дизайн этого класса очень соответствует объектно-ориентированной идее. Например, если в системе покупок необходимо много подарков, таких как мобильные телефоны, компьютеры, мобильные питания и т. Д., То, что если мы напишем эти подарки один за другим, системный код будет очень избыточным. Поскольку атрибуты даров в основном одинаковы, мы можем абстрагировать их в класс, чтобы мы могли определить один объект только тогда, когда нам нужен подарок, а затем дать определенные атрибуты. Например, если нам нужен мобильный телефон или компьютер, то нам нужно только новый объект класса подарков, а затем установить его атрибуты на мобильный телефон, когда нам нужен мобильный телефон, установите его атрибуты на компьютер, когда нам нужен компьютер, и установить все, что нам нужно. Это делает наш код упрощенным и структурой более четкой. В более сложных системах на самом деле более разумно использовать интерфейс для реализации подарков, чтобы различные категории подарков могли быть реализованы в соответствии с интерфейсом, тем самым удовлетворяя различные потребности. Это похоже на USB -интерфейс на нашем компьютере. С помощью этого интерфейса мы можем подключить множество различных периферийных устройств, и правда похожа.
2. Отношения и процесс между классами в системе покупок (обозначены в графической форме)
На следующем рисунке показано взаимосвязь между этими 9 классами, которые я использовал инструмент рисования Microsoft Office Visio 2003.
Из приведенной выше рисунка мы можем четко увидеть взаимосвязь между различными типами. Общие отношения и процесс следующие:
(1) Класс Startsms - это класс запуска, который содержит основной метод. Этот класс определяет объекты проверки класса и класса данных для хранения данных и проверки данных. В то же время класс данных содержит класс Manager для хранения предварительно сохраняемой информации об учетной записи пользователя. Затем, благодаря определенной логике в основном методе, метод ShowLoginMenu () в классе меню вызывается для обработки процесса модификации меню первого уровня-логинового процесса;
(2) Если вход в систему успешно, вызовите метод Showmainmenu () в классе меню, чтобы справиться с основным процессом меню второго уровня-системы покупок. Если вход в систему не удастся 3 раза, вы прямо выйдете из системы;
(3) В методе Showmainmenu () в классе меню, выбирая различные варианты вторичных меню, метод ShowCustmmenu () в классе меню вызван для обработки процесса управления информацией о клиентах или для вызова метода ShowendMenu () в классе меню для обработки лотерейного процесса или для вызова метода Calcprice () в классе платного класса для обработки процесса урегулирования торговли;
(4) Если выбран вариант управления информацией о клиенте во вторичном меню, будет вызван метод showcustmmenu () в классе меню. Этот метод будет называть различные методы в классе Custmanagement для обработки различных операций в управлении информацией о клиентах;
(5) Если выбрана опция урегулирования торговых точек во вторичном меню, метод Calcprice () в классе оплаты будет вызван для обработки процесса урегулирования торговых точек. Обратите внимание, что метод getDiscount () в классе оплаты используется для расчета ставки дисконтирования на основе информации о членах клиента;
(6) Если выбрана искренняя опция обратной связи во вторичном меню, то есть лотерея, то будет вызван метод ShowendMenu () в классе меню. Этот метод будет называть различные методы в классе Giftmanage, чтобы справиться с различными операциями лотереи;
Обратите внимание, что в классе Custmanagement есть метод returnlastmenu () и класс подарков, который используется для возвращения в предыдущее меню.
3. Реализация кода
Следует отметить, что эти коды должны быть размещены в пакете CN.ITCAST.
3.1 Startsms Class
Пакет Cn.itcast; импортировать java.util.scanner; /** * This class is the main method class of this system, used to start the shopping system* * @author * */ public class StartSMS { /** * Empty constructor* */ public StartSMS() { } /** * System main method* * @param args */ public static void main(String args[]) { // Create an object of the existing data class and initialize the existing product information and customer information Data data = new Data(); data.initial (); // Создать объект меню меню меню = новое меню (); // Здесь инициализированная информация о существующих данных отправляется в меню Menu Object Menu.SetData (data.goodsname, data.goodsprice, data.custno, data.custbirth, data.custscore); // Отображение меню первого уровня, то есть меню интерфейса входа. Showloginmenu (); // Этот флаг используется для определения того, произошла ли ошибка операции системы. Когда операция неверна, флаг является ложным, чтобы выйти из системы. По умолчанию нет ошибки Boolean Flag = true; // Обработка всего системного процесса do {// возникает ошибка операции, выйдите из системы, если (! Flag) Break; // Создать объект, который проверяет, является ли пользователь, зарегистрированный в учетной записи, и пароль правильным. Здесь создаются только объекты, а метод проверки Verify Equal не выполняется. verifyeequal = new verifyequal (); // Введите выбор в Scanner Scanner Menu Menu First Level = новый сканер (System.in); int i = scanner.nextint (); // Сделайте разные ответы на выбор меню первого уровня. Обратите внимание, что это классический переключатель использования коммутатора (i) {case 1: // Пользователь выбирает «Система входа в систему» // Определение счетчика, что означает, что пользователь может попробовать только в 3 раза больше всего и напрямую выйти из системы с 3 ошибками ввода int j = 3; // Процесс обработки для входа в систему do {if (verifyequal.verify (data.manager.username, data.manager.password)) {// Пользователь успешно вошел в систему, и отображается меню покупки второго уровня! ! ! menu.showmainmenu (); перерыв; } if (j! = 1) {// Пользовательский ввод неверен и не достиг 3 раза. Повторно включить system.out.println ("/n Имя пользователя и пароль не совпадают, пожалуйста, повторно введите:"); } else {// 3 попытки заканчиваются, установите флаг выхода и выходите из системы do-WHILE LOOP System.out.println ("/nou не иметь разрешения на вход в систему! Спасибо!"); flag = false; перерыв; } // уменьшить счетчик на 1 каждый раз, когда вы входите, чтобы указать, сколько раз j--; } while (true); перерыв; Case 2: // Пользователь выбирает «Изменение информации администратора» if (verifyequal.verify (data.manager.username, data.manager.password)) {// Прежде чем вводить новую информацию, необходимо проверить исходную информацию. Это означает, что проверка была успешной. System.out.print («Пожалуйста, введите новое имя пользователя:»); data.manager.username = scanner.next (); System.out.print («Пожалуйста, введите новый пароль:»); data.manager.password = scanner.next (); System.out.println («Имя пользователя и пароль были изменены!»); // Информация была успешно изменена. Выберите следующую систему работы. } else {// Проверка информации не удалась, установите систему флага Exit.out.println («Извините, у вас нет разрешения на изменение ее!»); flag = false; } перерыв; Case 3: // Пользователь выбирает «Exit» System.out.println («Спасибо за использование!»); System.Exit (0); перерыв; по умолчанию: // Ввод меню первого уровня неверен, и вам необходимо повторно выбрать System.out.print ("/n ввод неверный! Пожалуйста, выберите еще раз и введите номер:"); перерыв; }} while (flag); }}3.2 Класс данных
Пакет Cn.itcast; /*** Класс данных, который хранит данные инициализации системы покупок. В этом классе хранится только существующая информация о продукте и информацию о клиентах * * @author * * / public Class Data { / ** * Конструктор по умолчанию, инициализируя переменные. Поскольку все они являются массивными объектами или объектами класса, все они должны использовать новые * */ public Data () {GovelName = New String [50]; Goodsprice = новый двойник [50]; custno = new int [100]; custbirth = новая строка [100]; custscore = new Int [100]; Manager = новый менеджер (); } / *** Инициализировать данные этого класса** / public void initial () { /*================================================================== ==================================================================== Goodsname [0] = "Addidas Sneakers"; Goodsprice [0] = 880d; Goodsname [1] = "Теннисная юбка каппа"; Goodsprice [1] = 200d; Goodsname [2] = "Top Racket"; Goodsprice [2] = 780d; Goodsname [3] = "Addidas Fit Fit"; Goodsprice [3] = 420,7799999999999997d; Goodsname [4] = "Nike Conteakers"; Goodsprice [4] = 900D; Goodsname [5] = "Каппа теннис"; Goodsprice [5] = 45d; Goodsname [6] = "Kappat Shirt"; Goodsprice [6] = 245d; /*========================================================================================================= ========================================================================================== ========================================================================================== ========================================================================================== custno [1] = 1711; custbirth [1] = "07/13"; custscore [1] = 4000; custno [2] = 1623; custbirth [2] = "06/26"; custscore [2] = 5000; custno [3] = 1545; custbirth [3] = "04/08"; custscore [3] = 2200; custno [4] = 1464; custbirth [4] = "08/16"; custscore [4] = 1000; custno [5] = 1372; custbirth [5] = "12/23"; custscore [5] = 3000; custno [6] = 1286; custbirth [6] = "12/21"; custscore [6] = 10080; } /*======================================================================================== ========================================================================================== ========================================================================================== ========================================================================================== День рождения клиента Public int custscore []; // Общедоступный менеджер по менеджеру клиента; // класс администратора, только имя пользователя и пароль администратора}3.3 Manager Class
Пакет Cn.itcast; / ** * Класс администратора, только хранит имя пользователя и пароль администратора * * @author * */ public Class Manager {/ ** * Установить имя пользователя и пароль по умолчанию * */ public Manager () {username = "itcast"; пароль = "itcast"; } /*=================================================================== Класс ========================================================================================================== ========================================================================================== ========================================================================================== ==========================================================================================3.4 Проверьте экзамен класса
Пакет Cn.itcast; импортировать java.util.scanner; / *** Класс, который проверяет, является ли пользователь, вошел в систему, является правильным** @author**/ public class verifyequal {/ *** пустой конструктор**/ public verifyequal () {}/ *** Метод для выполнения проверки** @param s правильное имя пользователя для проверки* @param s Правильный пароль* @return*/ public boolean verify (string strify (string strify (string strify (string strify (string stric username System.out.print («Пожалуйста, введите имя пользователя:»); Сканер сканер = новый сканер (System.in); String s2 = scanner.next (); // Введите пароль из пользовательской системы.out.print («Пожалуйста, введите пароль:»); Scanner = новый сканер (System.in); String s3 = scanner.next (); // Определите, соответствует ли информация, введенная пользователем, существующая информация return s2.equals (ы) && s1.equals (s3); }}3.5 класс меню
Пакет Cn.itcast; импортировать java.util.scanner; / ** * класс меню, используемый для отображения всех уровней меню для выбора пользователя * * @author * */ public class menu {/ ** * upty constructor * */ public menu () {}/ ** * Установите данные в классе меню * * @param as * @param ad * @param ai * @param ai * @param ai * @param ai * @param ai * @param ai * @param ai * @param ai * @param setData (строка как [], двойная ad [], int ai [], string as1 [], int ai1 []) {goodsname = as; Goodsprice = ad; custno = ai; custbirth = as1; custscore = ai1; }/*** Показать меню первого уровня, то есть интерфейс входа в систему**/public void showloginmenu () {system.out.println ("/n/n/t/t/t/t добро пожаловать в систему управления покупками ITCAST версию 1.0/n/n"); System.out.println (" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * System.out.println ("/T/T/T/T/T 3. EXIT/N/N"); * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Система. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Logout/n "); System.out.println (" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Флаг для управления петлей Boolean Flag = false; Определяет объект урегулирования торговли и обрабатывает весь процесс урегулирования покупок. } // Пользователь выбирает "IF (S.Equals (" 4 ")) обрабатывать процесс управления информацией о клиентах * */ public void showcustmmenu () {System.out.println ("Система управления покупками> Управление информацией клиента/ n"); * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Создать объект управления клиентом и установить данные, данные по -прежнему являются исходными данными. Клиент выберите «Информация о клиенте». (S.Equals ("n") {ShowMainmenu (); Система> истинная обратная связь/n "); System.out.println (" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *. Лотерея/n "); System.out.println ("/t/t/t/t/t 3. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * (S.Equals («1») Выбирает «Вернуться в предыдущее меню» if (s.equals ("n")) {showmainmenu (); /*======================================================================================================================================= [];3.6 Класс зажигания
Пакет Cn.itcast; импортировать java.util.scanner; /** * Customer information management class* * @author * */ public class CustManagement { /** * Empty constructor* */ public CustManagement() { } /** * Set data information of customer information management class* * @param as * @param ad * @param ai * @param ai * @param as1 * @param ai1 */ public void setData(String as[], double ad[], int ai[], String as1[], int ai1[]) { goodsName = as; goodsPrice = ad; custNo = ai; custBirth = as1; custScore = ai1; } /** * Return to the previous menu, i.e. the second-level menu-customer information management menu* */ public void returnLastMenu() { System.out.print("/n/nPlease press 'n' to return to the previous menu:"); Scanner scanner = new Scanner(System.in); boolean flag = true; do if (scanner.next().equals("n")) { // Return to the previous menu, a new menu object was created here, but in the user's opinion, the same processing flow is actually the same, // However, for the program, a new secondary menu processing process has begun. Menu menu = new Menu(); menu.setData(goodsName, goodsPrice, custNo, custBirth, custScore); menu.showCustMMenu(); } else { System.out.print("Input error, please 'n' return to the previous menu: "); flag = false; } while (!flag); } /** * Add customer information* */ public void add() { System.out.println("Shopping Management System> Customer Information Management> Add customer information/n/n"); Scanner scanner = new Scanner(System.in); System.out.print("Please enter the member number (<4-digit integer>):"); int i = scanner.nextInt(); System.out.print("Please enter the member's birthday (month/day <denoted in two digits>):"); String s = scanner.next(); System.out.print("Please enter the integral:"); int j = scanner.nextInt(); int k = -1; int l = 0; do { if (l >= custNo.length) break; // Find the first empty location in the array to store new customer information if (custNo[l] == 0) { k = l; перерыв; } l++; } while (true); custNo [k] = i; custBirth[k] = s; custScore[k] = j; System.out.println("New member added successfully!"); // Return to the previous menu returnLastMenu(); } /** * Modify customer information* */ public void modify() { System.out.println("Shopping Management System> Customer Information Management> Modify customer information/n/n"); System.out.print("Please enter the member number:"); Scanner scanner = new Scanner(System.in); int i = scanner.nextInt(); System.out.println(" member number birthday points"); System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- .append(custScore[k]).toString()); j = k; break; } k++; } while (true); // The member exists, then modify the information process if (j != -1) { System.out.println("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /n"); System.out.println("/t/t/t1. Modify the member's birthday./n"); System.out.println("/t/t/t/t2.Modify member points./n"); System.out.println("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /n"); System.out.print("Please select, enter the number: "); switch (scanner.nextInt()) { case 1: // "Modify member's birthday" System.out.print("Please enter the modified birthday: "); custBirth[j] = scanner.next(); System.out.println("Birthday information has been changed!"); break; case 2: // "Modify member points" System.out.print("Please enter the modified member points: "); custScore[j] = scanner.nextInt(); System.out.println("Member points have been changed!"); break; } } else { System.out.println("Sorry, there is no member you query."); } // Return to the previous menu returnLastMenu(); } /** * Query customer information* */ public void search() { System.out.println("Shopping Management System> Customer Information Management> Query Customer Information/n"); Scanner scanner = new Scanner(System.in); for (String s = "y"; s.equals("y"); s = scanner.next()) { System.out.print("Please enter the membership number: "); int i = scanner.nextInt(); System.out.println("Member number birthday points"); System.out.println("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 0; do { if (j >= custNo.length) break; // Show the information of the member if (custNo[j] == i) { System.out.println((new StringBuilder()).append(custNo[j]) .append("/t/t").append(custBirth[j]).append("/t/t") .append(custScore[j]).toString()); flag = true; break; } j++; } while (true); if (!flag) System.out.println("Sorry, there is no member information you query."); System.out.print("/nDo you want to continue querying (y/n):"); } // Return to the previous menu returnLastMenu(); } /** * Show all customer information* */ public void show() { System.out.println("Shopping Management System> Customer Information Management> Show customer information/n/n"); System.out.println("Member number birthday points"); System.out.println("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- System.out.println((new StringBuilder()).append(custNo[j]).append( "/t/t").append(custBirth[j]).append("/t/t").append(custScore[j]).toString()); // Return to the previous menu returnLastMenu(); } /*======================================================================================================= ========================================================================================================= ========================================================================================================= ========================================================================================================= custNo []; // Customer’s membership number public String custBirth []; // Customer’s birthday public int custScore []; // Customer’s points}3.7 Pay类
package cn.itcast; импортировать java.util.scanner; /** * Class that handles customers' purchases and settlements* * @author * */ public class Pay { /** * Empty constructor* */ public Pay() { } /** * Set data information of shopping settlement class* * @param as * @param ad * @param ai * @param ai * @param as1 * @param ai1 */ public void setData(String as[], double ad[], int ai[], String as1[], int ai1[]) { goodsName = as; goodsPrice = ad; custNo = ai; custBirth = as1; custScore = ai1; } /** * Determine the discount rate based on member information* * @param i * @param ai * @param ai * @param ai1 * @return */ public double getDiscount(int i, int ai[], int ai1[]) { int j = -1; int k = 0; do { if (k >= ai.length) break; if (i == ai[k]) { j = k; перерыв; } k ++; } while (true); double d; if (ai1[j] < 1000) d = 0.94999999999999999999999996D; else if (1000 <= ai1[j] && ai1[j] < 2000) d = 0.900000000000000000000002D; else if (2000 <= ai1[j] && ai1[j] < 3000) d = 0.8499999999999999999999999999999999999999999999999999999999 99999999999999999999999999999999999999999999999999999999996D; else if (1000 <= ai1[j] && ai1[j] < 4000) d = 0.8000000000000000000004D; else if (4000 <= ai1[j] && ai1[j] < 6000) d = 0.75D; else if (6000 <= ai1[j] && ai1[j] < 8000) d = 0.69999999999999999999996D; else d = 0.5999999999999999998D; возврат D; } /** * Key methods of this class, used to handle shopping and checkout* */ public void calcPrice() { String s2 = ""; double d1 = 0.0D; double d2 = 0.0D; int l = 0; double d4 = 0; System.out.println("Shopping Management System> Shopping Checkout/n/n"); System.out.println("************************************************"); System.out.println("Please select the purchased product number: "); // Show all purchaseable product information, the information here is the initial initial product data for (l = 0; l < goodsName.length && goodsName[l] != null; l++) { d4++; System.out.println((new StringBuilder()).append(d4).append(": ") .append(goodsName[l]).append("/t").toString()); } System.out.println("*********************************************/n"); Scanner scanner = new Scanner(System.in); System.out.print("/tPlease enter the member number: "); int i = scanner.nextInt(); // Get discount information based on member information d4 = getDiscount(i, custNo, custScore); String s1; do { System.out.print("/tPlease enter the product number: "); int j = scanner.nextInt(); System.out.print("/tPlease enter the number: "); int k = scanner.nextInt(); double d = goodsPrice[j - 1]; String s = goodsName[j - 1]; d1 += d * (double) k; s2 = (new StringBuilder()).append(s2).append("/n").append(s) .append("/t").append("¥").append(d).append("/t/t") .append(k).append("/t/t").append("¥") .append(d * (double) k).append("/t").toString(); System.out.print("/t continue (y/n)"); s1 = scanner.next(); } while (s1.equals("y")); d2 = d1 * d4; // Total price after discount System.out.println("/n"); System.out.println("***************************************************************************************************************************** System.out.println("Item/t/t unit price/t/t number/t/t amount/t amount/t"); System.out.print(s2); System.out.println((new StringBuilder()).append("/n discount: /t").append(d4).toString()); System.out.println((new StringBuilder()).append("Total amount:/t¥").append(d2).toString()); System.out.print("Actual payment:/t¥"); double d3 = scanner.nextDouble(); System.out.println((new StringBuilder()).append("Find money:/t¥").append(d3 - d2).toString()); int i1 = ((int) d2 / 100) * 3; int j1 = 0; do { if (j1 >= custNo.length) break; if (custNo[j1] == i) { custScore[j1] = custScore[j1] + i1; System.out.println((new StringBuilder()).append("The points obtained in this shopping are: ") .append(i1).toString()); break; } j1++; } while (true); System.out.print("/nPlease 'n' to return to the previous menu:"); if (scanner.next().equals("n")) { // Return to the previous menu, a new menu object was created here, but in the user's opinion, the same processing flow was actually still the same, // However, for the program, a new secondary menu processing flow has started. Menu menu = new Menu(); menu.setData(goodsName, goodsPrice, custNo, custBirth, custScore); menu.showMainMenu(); } } /*=====================================================================================*/ public String goodsName []; // product name public double goodsPrice[]; // product price public int custNo []; // customer membership number public String custBirth []; // customer's birthday public int custScore []; // customer's points}3.8 GiftManagement类
package cn.itcast; импортировать java.util.scanner; /** * Gift management class* * @author * */ public class GiftManagement { /** * Empty constructor* */ public GiftManagement() { } /** * Set data information of gift management class* * @param as * @param ad * @param ai * @param ai * @param as1 * @param ai1 */ public void setData(String as[], double ad[], int ai[], String as1[], int ai1[]) { goodsName = as; goodsPrice = ad; custNo = ai; custBirth = as1; custScore = ai1; } /** * Return to the previous menu, that is, the second-level menu-true feedback menu* */ public void returnLastMenu() { System.out.print("/n/nPlease press 'n' to return to the previous menu:"); Scanner scanner = new Scanner(System.in); boolean flag = true; do if (scanner.next().equals("n")) { // Return to the previous menu, a new menu object was created here, but in the user's opinion, the same processing flow is actually the same, // However, for the program, a new secondary menu processing process has begun. Menu menu = new Menu(); menu.setData(goodsName, goodsPrice, custNo, custBirth, custScore); menu.showCustMMenu(); } else { System.out.print("Input error, please 'n' return to the previous menu: "); flag = false; } while (!flag); } /** * Birthday greeting* */ public void sendBirthCust() { System.out.println("Shopping Management System> Birthday greeting/n/n"); System.out.print("Please enter today's date (month/day <indicated in two digits>): "); Scanner scanner = new Scanner(System.in); String s = scanner.next(); System.out.println(s); String s1 = ""; логический флаг = false; for (int i = 0; i < custBirth.length; i++) if (custBirth[i] != null && custBirth[i].equals(s)) { s1 = (new StringBuilder()).append(s1).append(custNo[i]).append( "/n").toString(); flag = true; } // The gift here is fixed, so there is no gift class if (flag) { System.out.println("Birthday members are:"); System.out.println(s1); System.out.println("Congratulations! I received one MP3!"); } else { System.out.println("Members with no birthday today!"); } // Return to the previous menu returnLastMenu(); } /** * Lucky lottery, note that this is a random lottery, so you need a random number. You only need to formulate a lottery rule by yourself* */ public void sendLuckyCust() { System.out.println("Shopping Management System> Lucky lottery/n/n"); System.out.print("Does it start (y/n):"); Scanner scanner = new Scanner(System.in); if (scanner.next().equals("y")) { int i = (int) (Math.random() * 10D); // Generate a random number String s = ""; логический флаг = false; for (int k = 0; k < custNo.length && custNo[k] != 0; k++) { // Compare the random number with the corresponding results of the customer membership number to determine whether a customer wins int j = (custNo[k] / 100) % 10; if (j == i) { s = (new StringBuilder()).append(s).append(custNo[k]) .append("/t").toString(); flag = true; } } // Fixed prize, so there is no need for gifts if (flag) System.out.println((new StringBuilder()).append("Lucky customer gets MP3:") .append(s).toString()); else System.out.println("No lucky customers."); } // Return to the previous menu returnLastMenu(); } /** * Lucky big broadcast, the member with the highest points will be the lucky one, and the prize will be given * */ public void sendGoldenCust() { System.out.println("Shopping Management System> Lucky big broadcast/n/n"); int i = 0; int j = custScore[0]; for (int k = 0; k < custScore.length && custScore[k] != 0; k++) { // Find the member with the highest points if (custScore[k] > j) { j = custScore[k]; i = k; } } System.out.println((new StringBuilder()).append("The member with the highest points is: ").append( custNo[i]).append("/t").append(custBirth[i]).append("/t") .append(custScore[i]).toString()); // Create a gift class and set the gift information. The gift here is a fixed information Gift gift = new Gift(); gift.name = "Apple laptop"; gift.price = 12000D; System.out.print("Congratulations! Received a gift: "); System.out.println(gift); // Return to the previous menu returnLastMenu(); } /*================================================================================================================= ==================================================================================================================== =================================================================================================================== ==================================================================================================================== Customer's points}3.9 Gift类
package cn.itcast; /** * 用来存放真情回馈中的礼物的类*/ public class Gift { /** * 空构造方法* */ public Gift() { } /** * 根据礼物对象的变量返回礼物的全部信息* */ public String toString() { return (new StringBuilder()).append("一个价值¥").append(price) .append("的").append(name).toString(); } /*====================定义该类所拥有的变量====================*/ public String name ; // 礼物名字public double price; // 礼物价格}3.10 代码总结
从上面的9个类的代码来看,有一些需要注意的地方:
(1)在许多类中都定义了与Data中基本一样的成员变量,只是没有Manager对象而已,这是为了让数据一层层保存和传递,通过setData()方法实现,不过这种方法其实并不是很好,并且一般来说成员变量应该最好设置为私有的,这里这样的设计是为了操作方便,使系统更简单一些,安全性不好。
(2)注意到所有要进行字符串拼接的地方都使用JAVA中的StringBuilder类,这是为了高效处理字符串拼接,防止String类带来的拼接数据冗余。
(3)这些设计中的流程并不是非常合理,大家可以自己的需要进行修改。
(4)代码中基本上没有考虑异常时的处理,所以当输入时出现错误的时候,普通错误可以进行重新输入,但是如果出现不匹配等错误,直接会出现异常,从而退出系统,这些也是本设计的缺陷,可以通过正则表达式等来完善一些。
总之,给出的代码仅供参考,大家可以根据需要进行修改,这些代码都是经过验证的,可以直接运行。
4. Резюме
这个设计只是为了说明一些基本的设计思想和设计理念,以及设计过程中需要考虑的问题,主要还是为了说明怎样用面向对象的思想去解决现实生活中的问题,所以设计相对简单,不过希望大家可以通过这个设计理解这些基本的思想,从而帮助大家理想面向对象的基本思想。
In short, language is just a tool to solve problems. You can use other languages such as C++ and C# to implement this system, as long as you have good design concepts and design ideas. Again, this design is for reference only. Everyone is welcome to participate in the discussion. If there are any errors, please correct me. Спасибо.