Os exemplos deste artigo compartilham o Código de Design e Implementação do Sistema de Compras Java para sua referência. O conteúdo específico é o seguinte
1. Análise de requisitos e classificação do sistema de compras
O sistema de compras em si é um sistema muito complexo, com muitos detalhes e problemas que serão mais complicados se você os estudar profundamente. Além disso, o sistema de compras em geral é o tipo de página da web e precisa ter uma interface amigável. No entanto, como um projeto simples, este projeto é apenas para introduzir as idéias básicas de desenvolvimento aos iniciantes do Java e como projetar estruturas e processos de implementação quando orientados a objetos. Portanto, é apenas um projeto simples desenvolvido com base no eclipse, sem a participação da GUI, e muitos detalhes e problemas são usados como pesquisa de acompanhamento. O design geral é relativamente simples, mas basta explicar muitas idéias de design e conceitos de design. Portanto, as necessidades básicas são analisadas abaixo.
Como um sistema comercial simples, você precisa ter pelo menos as seguintes funções (essas funções são distribuídas em diferentes níveis de menus):
(1) Função de login do usuário e função de modificação da senha da conta do usuário, a função de registro não está disponível por enquanto;
(2) Depois que o usuário efetua login com sucesso, ele precisa ter a função de gerenciamento de informações do cliente, função de liquidação de compras e algumas atividades de loteria;
(3) Existem muitas funções que podem ser divididas abaixo da função de gerenciamento de informações do cliente, como: consulta, modificação, adição, etc.;
(4) Existem muitas funções que podem ser divididas abaixo da função de liquidação de compras, como: seleção de produtos, pagamento, cobrança, etc.;
(5) Várias formas de loteria podem ser projetadas na loteria, que podem ser divididas em muitos novos módulos funcionais.
(6) A função de sair do sistema deve ser fornecida no menu de primeiro nível, a função de registrar o menu de segundo nível deve ser fornecida no menu de segundo nível e outros menus devem poder retornar ao menu anterior.
As funções acima são todas funções relativamente básicas. Se você projetar de acordo com a idéia orientada ao processo, dividirá muitos módulos funcionais e seguirá o processo passo a passo. Mas agora usamos a idéia orientada a objetos para projetar, como devemos considerar a estrutura de design? A principal idéia de orientação a objetos é abstrair alguns requisitos em muitas classes e, em seguida, estabelecer conexões entre essas classes. Através da cooperação colaborativa entre diferentes classes, todas as funções podem ser alcançadas. Portanto, a principal tarefa agora é como abstrair razoavelmente essas classes, quais funções essas classes serão implementadas e quais são as conexões entre as classes? A seguir, é apresentada uma análise desse processo com base na estrutura desse design.
(1) Classe StartsMs: Usado para inicialização do sistema. Nosso sistema definitivamente precisa de uma aula de inicialização. Esta classe contém o método principal para iniciar o sistema. Esta aula está no nível superior, por isso não pode envolver muitos detalhes subjacentes. Ele só precisa implementar alguns processos básicos de nível superior. O principal é chamar alguns métodos de outras classes subjacentes para implementar funções.
(2) Classe de dados: usado para armazenar todas as informações de dados. Esse design armazena principalmente algumas informações de produto pré-armazenadas para compra e informações de membros registradas. Por que você precisa desta aula? Pense nisso, no design orientado a objetos, temos muitos dados e não devemos definir e modificá-los espalhados por toda parte. Isso tornará a agregação do sistema muito baixa, propensa a muitos erros, e é difícil executar a expansão da função posterior e a modificação de erros. Portanto, precisamos classificar alguns dos dados públicos utilizados e colocá -los em uma classe e fornecer métodos para operar esses dados nesta classe.
(3) Classe de menu: usado para exibir e processar menus em todos os níveis. Como estamos projetando um sistema de compras, mesmo que seja simples, precisamos de um menu básico para interagir com os usuários. Como existem muitos menus e os menus em cada nível são conectados por camada por camada, precisamos gerenciar os menus uniformemente, para que a categoria de menu apareça. Observe que o menu aqui é apenas alguns monitores de menu de nível superior e chamadas básicas de função. O algoritmo subjacente específico ainda precisa ser implementado por classes mais subjacentes.
(4) Classe de gerente: usado para armazenar a conta e a senha do usuário. Como precisamos dos usuários para fazer login, devemos definitivamente precisar de uma classe separada para gerenciar a conta e a senha do usuário, para que o sistema seja mais independente. O usuário projetado desta vez possui apenas uma conta e senha, e apenas alterações podem ser feitas na conta e na senha, mas o registro não é permitido.
(5) Verifique a classe Equal: Usado para verificar as informações de login. Esta classe é equivalente a abstrair a função de login em uma classe. Na verdade, essa implementação não é muito necessária, mas para tornar a divisão de função do sistema mais clara, esta classe foi projetada para verificar as informações de login e contas e senhas existentes, fornecendo assim o resultado da verificação.
(6) Classe de custom -gerenciamento: usado para o gerenciamento das informações do cliente. Essa classe implementa algumas funções subjacentes, como consulta, modificação, adição etc. Quando inserimos o menu de gerenciamento de informações do cliente, devemos fazer muitas operações nas informações do cliente. Para facilitar o gerenciamento dessas operações e levar em consideração a expansão subsequente, todas as funções do gerenciamento de informações do cliente são abstraídas aqui e colocadas nesta categoria. O menu anterior realiza o gerenciamento das informações do cliente, chamando os métodos nesta classe.
(7) PAY CLASS: Usado para lidar com operações de compras e check -out. O princípio desta classe é basicamente o mesmo que a classe acima. Quando um cliente escolhe fazer compras, deve haver muitas operações, como o que comprar, quanto dinheiro, pagamento, mudança etc. Essas funções são relativamente fragmentadas, por isso os gerenciamos centralmente, abstraindo essa classe e implementando o algoritmo subjacente para opções de menu para compras e liquidação. O menu anterior realiza as funções de compras e liquidação chamando o método desta classe e pode retornar ao menu anterior.
(8) Classe de gerenciamento de presentes: funções relacionadas usadas para lidar com atividades de loteria. As razões para a existência desta classe são basicamente as mesmas que as em (6) e (7). Esta classe gerencia uniformemente as atividades da loteria. O menu anterior só precisa chamar o método desta classe para realizar a função da loteria.
(9) Classe de presente: Usado para gerenciar presentes. Como a sessão da loteria foi projetada, os presentes são definitivamente necessários. Então, que tipo de presentes vamos dar? Não podemos listar cada presente em detalhes. Isso é muito redundante e problemático, por isso simplesmente abstraímos uma aula de presentes e salvamos alguns atributos do presente: o nome e o preço do presente nas variáveis de membros da classe. Então podemos gerenciar facilmente a classe. Se o presente for necessário, crie um novo objeto de presente diretamente e modifique e gerencie os atributos do objeto. Essa implementação é semelhante a uma interface, mas é completamente diferente da interface e possui funções semelhantes.
Em suma, as classes acima são abstraídas após serem divididas em alguns módulos funcionais, e alguns lugares não são necessariamente razoáveis. Eles precisam analisar principalmente os requisitos e formular planos diferentes de acordo com diferentes necessidades. Aqui, quero enfatizar a "classe de presente" novamente. O design desta classe é muito consistente com a idéia orientada a objetos. Por exemplo, se muitos presentes forem necessários no sistema de compras, como telefones celulares, computadores, fontes de alimentação móvel etc., se escrevermos esses presentes um por um, o código do sistema será muito redundante. Como os atributos dos presentes são basicamente os mesmos, podemos abstraí -los em uma classe, para que possamos definir apenas um objeto quando precisamos de um presente e depois dar certos atributos. Por exemplo, se precisarmos de um telefone ou computador celular, precisamos apenas um novo objeto de classe de presente e, em seguida, definir seus atributos para um telefone celular quando precisarmos de um telefone celular, defina seus atributos para um computador quando precisarmos de um computador e defina o que precisamos. Isso torna nosso código simplificado e a estrutura mais clara. Em sistemas mais complexos, é realmente mais razoável usar uma interface para implementar presentes, para que diferentes categorias de presentes possam ser implementadas de acordo com a interface, atendendo assim a diferentes necessidades. É semelhante à interface USB em nosso computador. Com essa interface, podemos conectar vários dispositivos periféricos e a verdade é semelhante.
2. O relacionamento e o processo entre as classes no sistema de compras (indicado em forma gráfica)
A figura a seguir mostra a relação entre essas 9 classes que usei a ferramenta de desenho do Microsoft Office Visio 2003.
A partir da figura acima, podemos ver claramente a relação entre vários tipos. O relacionamento e o processo geral são os seguintes:
(1) A classe StartMS é uma classe de inicialização, que contém o método principal. Esta classe define objetos da classe verificada e classe de dados para armazenar informações de dados e verificação. Ao mesmo tempo, a classe de dados contém a classe do gerente para armazenar informações de conta de usuário pré-armazenadas. Em seguida, através de certa lógica no método principal, o método ShowLoginMenu () na classe de menu é chamado para processar o processo de modificação do menu de primeiro nível-Login;
(2) Se o login for bem-sucedido, ligue para o método showMainMenu () na classe de menu para lidar com o processo principal do menu de segundo nível-o sistema de compras. Se o login falhar 3 vezes, você sairá diretamente do sistema;
(3) No método ShowMainMenu () na classe de menu, selecionando diferentes opções de menu secundário, o método ShowCustmMenu () na classe de menu é chamado para lidar com o processo de gerenciamento de informações do cliente ou para chamar o método ShowSENDMENU () na classe de menu para lidar com o processo de loteria ou chamar o método calcprice () na classe de pagamento para manipular a liquidação de compras para a liquidação de compras;
(4) Se a opção de gerenciamento de informações do cliente no menu secundário for selecionada, o método ShowCustmMenu () na classe de menu será chamado. Este método chamará vários métodos na classe Custmanagement para lidar com diferentes operações no gerenciamento de informações do cliente;
(5) Se a opção de liquidação de compras no menu secundário for selecionada, o método calcprice () na aula de pagamento será chamado para lidar com o processo de liquidação de compras. Observe que o método getDiscount () na aula de pagamento é usado para calcular a taxa de desconto com base nas informações do membro do cliente;
(6) Se a opção de feedback sincero no menu secundário for selecionado, ou seja, a loteria, o método ShowSendMenu () na classe de menu será chamado. Este método chamará vários métodos na classe de gerenciamento de presentes para lidar com diferentes operações da loteria;
Observe que existe um método ReturnLastMenu () na classe Custmanagement e na classe GiftManagement, que é usada para retornar ao menu anterior.
3. Implementação de código
Uma coisa a observar é que esses códigos devem ser colocados no pacote CN.itcast.
3.1 Startsms Class
pacote cn.itcast; importar 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 (); // Crie um objeto do menu Menu da classe de menu = novo menu (); // aqui as informações de dados existentes inicializadas são enviadas para o menu Menu Menu.setData (data.goodsname, data.goodsprice, data.custno, data.custbirth, data.custscore); // Exibe o menu de primeiro nível, ou seja, o menu de interface de login.ShowloGinMenu (); // Este sinalizador é usado para determinar se ocorreu um erro de operação do sistema. Quando a operação está incorreta, o sinalizador é falso, para sair do sistema. O padrão é nenhum erro sinalizador booleano = true; // Processando todo o processo do sistema {// Ocorre um erro de operação, saia do sistema if (! Sinalizador) quebra; // Crie um objeto que verifique se o usuário registrou a conta e a senha está correta. Somente objetos são criados aqui, e o método de verificação verificado não é executado. verifyequal = new verifyequal (); // Digite a seleção no scanner de menu de primeiro nível = new Scanner (System.in); int i = scanner.NextInt (); // faz respostas diferentes à seleção do menu de primeiro nível. Observe que este é o interruptor de uso clássico do switch-case (i) {case 1: // User seleciona "Sistema de login" // define um contador, o que significa que o usuário pode tentar apenas 3 vezes no máximo e sair diretamente do sistema com 3 erros de entrada int j = 3; // Processo de processamento para fazer login no sistema {if (verifyequal.verify (data.manager.username, data.manager.password)) {// o usuário efetuou login com sucesso e o menu de compras de segundo nível é exibido! ! ! MENU.SHOWMAINMENU (); quebrar; } if (j! = 1) {// A entrada do usuário está incorreta e não atingiu 3 vezes. Reentro system.out.println ("/nO nome do usuário e senha não correspondem, por favor, volte novamente:"); } else {// as 3 tentativas terminam, defina o sinalizador de saída e saia do sistema de loop do while.out.println ("/nyou não tem permissão para entrar no sistema! Obrigado!"); bandeira = false; quebrar; } // decrem o contador em 1 toda vez que você entra para indicar quantas vezes j--; } while (true); quebrar; Caso 2: // O usuário seleciona "Alterar informações do administrador" if (verifyequal.verify (data.manager.username, data.manager.password)) {// Antes de inserir novas informações, você deve verificar as informações originais. Isso significa que a verificação foi bem -sucedida. System.out.print ("Por favor, digite o novo nome de usuário:"); data.manager.username = scanner.Next (); System.out.print ("Digite a nova senha:"); data.manager.password = scanner.Next (); System.out.println ("Nome de usuário e senha foram alterados!"); // As informações foram alteradas com sucesso. Selecione o próximo sistema de operação.out.println ("/Nplease Selecione, digite o número:"); } else {// A verificação da informação falhou, defina o sinalizador de saída System.out.println ("Desculpe, você não tem permissão para modificar!"); bandeira = false; } quebrar; Caso 3: // O usuário seleciona "Exit" System.out.println ("Obrigado pelo seu uso!"); System.Exit (0); quebrar; padrão: // a entrada do menu do primeiro nível está incorreta e você precisa re-selecionar o sistema.out.print ("/n entrada está incorreta! Selecione novamente e digite o número:"); quebrar; }} while (sinalizador); }}3.2 classe de dados
pacote cn.itcast; /*** A classe de dados que armazena os dados de inicialização do sistema de compras. Esta classe armazena apenas as informações existentes do produto e as informações do cliente * * @author * * / public class Data { / ** * O construtor padrão, inicializando variáveis. Como todos são objetos de matriz ou objetos de classe, todos precisam usar novos dados * */ public Data () {bensName = new String [50]; bensprice = novo duplo [50]; custno = new int [100]; custbirth = new string [100]; custscore = new int [100]; gerente = new Manager (); } / *** inicialize os dados desta classe** / public void Initial () { /*============================================================ ============================================================// bensName [0] = "Addidas Sneakers"; bensprice [0] = 880d; bensname [1] = "saia de tênis Kappa"; bensprice [1] = 200d; bensName [2] = "Racket superior"; bensprice [2] = 780d; bensName [3] = "T-shirt addidas"; BOTSPRICE [3] = 420.77999999999999997D; bensName [4] = "Sneakers Nike"; bensprice [4] = 900D; bensname [5] = "tênis kappa"; bensprice [5] = 45d; bensName [6] = "Kappat-shirt"; bensprice [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; } /*= =========================================================================================================================================== quase=roeroeóóóó ,ó quase passe quase===eeeeeeenerorororororororororororororororororororororo deleroón donco do33 do mundo do reno o que o dona do São o Colo do Sul do que o Centro do São o Colo do Sul do que o Cultivo do Centro do Sul do que o Cultivo do Sul do que o Cultivo do Centro do São Paulo =========================================================================================================== =========================================================================================================== =========================================================================================================== Aniversário do cliente Public int CustScore []; // Gerente de Gerente Público de Pontos do Cliente; // Classe de administrador, apenas o nome de usuário e senha do administrador}3.3 Classe de gerente
pacote cn.itcast; / ** * Classe de administrador, armazena apenas o nome de usuário e a senha do administrador * * @author * */ public class Manager {/ ** * Defina o nome de usuário e a senha padrão * */ public Manager () {userName = "Itcast"; senha = "itcast"; } /*================================== Defina as variáveis de propriedade disso class============================================================================================= ================================================================================================== ================================================================================================== ===================================================================================================3.4 Verifique a classe Equal
pacote cn.itcast; importar java.util.scanner; / *** Classe que verifica se o usuário logous está correto** @Author**/ public class VerifyEqual {/ *** Construtor vazio**/ public verifyequal () {}/ *** Método para executar verificação* @param s O usuário correto para verificação* @param S a senha correta para verificação* nome de usuário System.out.print ("Por favor, digite o nome de usuário:"); Scanner Scanner = New Scanner (System.in); String s2 = scanner.Next (); // Digite a senha do usuário do usuário.out.print ("Digite a senha:"); scanner = new Scanner (System.in); String s3 = scanner.Next (); // Determine se as informações inseridas pelo usuário são consistentes com as informações existentes retornar S2.Equals (s) && S1.Equals (S3); }}3.5 Classe de menu
pacote cn.itcast; importar java.util.scanner; /** * Menu class, used to display all levels of menus for user selection* * @author * */ public class Menu { /** * Empty constructor* */ public Menu() { } /** * Set data information in menu class* * @param as * @param ad * @param ai * @param ai * @param ai * @param ai * @param ai1 */ public void setData(String como [], duplo ad [], int ai [], string as1 [], int ai1 []) {bensname = as; bensprice = ad; custno = ai; custbirth = AS1; custscore = ai1; }/*** Mostrar o menu de primeiro nível, ou seja, a interface de login**/public void ShowLoginMenu () {System.out.println ("/n/n/t/t/t/t Welcome to Itcast Shopping Management System versão 1.0/n/n"); System.out.println("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * System.out.println("/t/t/t/t 1. Log in to the system/n/n"); System.out.println("/t/t/t/t 2. Change administrator information/n/n"); System.out.println ("/t/t/t/t/t 3. Exit/n/n"); * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /** * Display the secondary menu, that is, the main menu of the Sistema. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *, Logout/n"); System.out.println("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * User selects the service item System.out.print("Please select, enter the number:"); Scanner scanner = new Scanner(System.in); // Set O sinalizador para controlar o sinalizador booleano = FALSO; o objeto da liquidação de compras e lida com o processo de liquidação de compras = Pay = novo Pay (); O usuário seleciona "Login" Se (S.Equals ("4") {// Exibe o menu de primeiro nível e retornará ao Fluxo de Processamento de Menu no primeiro nível no SHOWLOGINME de todo o gerenciamento de informações do cliente * */ public void exibindo -se () {System.out.println ("Sistema de gerenciamento de compras> Gerenciamento de informações do cliente/ n"); * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * System.out.println ("/t/t/t/t 2. Adicione informações do cliente/n"); * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 14 Objeto de Gerenciamento de Informações e Defina os dados aqui são os dados originais. Informações "if (s.equals (" 2 ")) {CustManagement.add (); quebra;} // Custor Selecione" Modificar informações do cliente "se (s.equals (" 3 ")) {CustManagement.modify (); Break;} // Customer Select" Informações do cliente "if (s.equals (" 4 ")) {CustManagement.Searr. (S.Equals ("N) {ShowMainMenu (); true feedback/n"); System.out.println("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Lucky Broadcast/n"); System.out.println("/t/t/t/t 2. Lucky Lottery/n"); System.out.println("/t/t/t/t/t 3. Birthday greeting/n"); System.out.println("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Scanner (System.in); (GRESTGONDGOLDENCION elevados seleciona "Retorno ao menu anterior" se (s.equals ("n")) {showMainMenu (); /*==================================================================================/ Publicsname []; [];3.6 Classe Custmanagement
pacote cn.itcast; importar 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: "); bandeira = 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; quebrar; } 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; importar 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; quebrar; } 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; retornar 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; importar 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: "); bandeira = 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 = ""; bandeira booleana = 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(); bandeira = 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 = ""; bandeira booleana = 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(); bandeira = 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. Resumo
这个设计只是为了说明一些基本的设计思想和设计理念,以及设计过程中需要考虑的问题,主要还是为了说明怎样用面向对象的思想去解决现实生活中的问题,所以设计相对简单,不过希望大家可以通过这个设计理解这些基本的思想,从而帮助大家理想面向对象的基本思想。
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. Obrigado.