이 기사의 예는 참조를위한 Java 쇼핑 시스템 설계 및 구현 코드를 공유합니다. 특정 내용은 다음과 같습니다
1. 요구 사항 분석 및 쇼핑 시스템 분류
쇼핑 시스템 자체는 매우 복잡한 시스템이며, 많은 세부 사항과 문제가있는 많은 세부 사항과 문제가 있습니다. 또한 일반 쇼핑 시스템은 웹 페이지 유형이며 친근한 인터페이스가 필요합니다. 그러나 간단한 프로젝트 로서이 프로젝트는 Java의 초보자에게 개발의 기본 아이디어를 소개하고 객체 지향적 일 때 프레임 워크 및 구현 프로세스를 설계하는 방법을 소개하는 것입니다. 따라서 GUI의 참여없이 Eclipse를 기반으로 개발 된 간단한 프로젝트 일 뿐이며 많은 세부 사항과 문제가 후속 연구로 사용됩니다. 전반적인 디자인은 비교적 간단하지만 많은 디자인 아이디어와 디자인 개념을 설명하기에 충분합니다. 따라서 기본적인 요구는 아래에 분석됩니다.
간단한 쇼핑 시스템 으로서는 다음과 같은 기능이 필요합니다 (이러한 기능은 다른 수준의 메뉴로 배포됩니다).
(1) 사용자 로그인 기능 및 사용자 계정 비밀번호 수정 기능, 등록 기능은 당분간 사용할 수 없습니다.
(2) 사용자가 성공적으로 로그인 한 후에는 고객 정보 관리 기능, 쇼핑 정산 기능 및 일부 복권 활동이 필요합니다.
(3) 쿼리, 수정, 추가 등 고객 정보 관리 기능 아래로 나눌 수있는 많은 기능이 있습니다.
(4) 쇼핑 결제 기능 아래로 나눌 수있는 많은 기능이 있습니다. 제품 선택, 지불, 청구 등;
(5) 다양한 복권 형태는 복권 하에서 설계 될 수 있으며, 이는 많은 새로운 기능 모듈로 더 나눌 수 있습니다.
(6) 시스템 종료 기능은 첫 번째 레벨 메뉴에서 제공되어야하며, 두 번째 레벨 메뉴에서 로그인하는 기능은 두 번째 레벨 메뉴에 제공되어야하며 다른 메뉴는 이전 메뉴로 돌아갈 수 있어야합니다.
위의 기능은 모두 비교적 기본적인 기능입니다. 프로세스 지향 아이디어에 따라 디자인하면 많은 기능 모듈을 나눈 다음 단계별로 프로세스를 따릅니다. 그러나 이제 우리는 객체 지향 아이디어를 설계하기 위해 사용합니다. 디자인 프레임 워크를 어떻게 고려해야합니까? 객체 지향의 주요 아이디어는 일부 요구 사항을 많은 클래스로 추상화 한 다음 이러한 클래스간에 연결을 설정하는 것입니다. 다른 클래스 간의 공동 협력을 통해 모든 기능을 달성 할 수 있습니다. 따라서 주요 작업은 이제 이러한 클래스를 합리적으로 추상화하는 방법, 이러한 클래스가 구현할 기능, 클래스 간의 연결은 무엇입니까? 다음은이 설계의 구조를 기반 으로이 프로세스의 분석입니다.
(1) Startsms 클래스 : 시스템 시작에 사용됩니다. 우리 시스템에는 확실히 스타트 업 클래스가 필요합니다. 이 클래스에는 시스템을 시작하는 주요 방법이 포함되어 있습니다. 이 클래스는 최상위 수준이므로 너무 많은 기본 세부 사항을 포함 할 수 없습니다. 일부 최상위 기본 프로세스 만 구현하면됩니다. 가장 중요한 것은 다른 기본 클래스의 일부 방법을 호출하여 기능을 구현하는 것입니다.
(2) 데이터 클래스 : 모든 데이터 정보를 저장하는 데 사용됩니다. 이 디자인은 주로 구매 및 등록 된 회원 정보를 위해 사전 저장된 제품 정보를 저장합니다. 이 수업이 필요한 이유는 무엇입니까? 객체 지향 설계에서 우리는 많은 데이터를 가지고 있으며, 어디에서나 흩어져서 그것을 정의하고 수정해서는 안됩니다. 이렇게하면 시스템 집계가 너무 낮아지고 많은 오류가 발생하기 쉬우 며 나중에 기능 확장 및 오류 수정을 수행하기가 어렵습니다. 따라서 사용 된 일부 공개 데이터를 분류 한 다음 클래스에 넣고이 클래스 에서이 데이터를 작동하는 방법을 제공해야합니다.
(3) 메뉴 클래스 : 모든 수준에서 메뉴를 표시하고 처리하는 데 사용됩니다. 쇼핑 시스템을 설계하고 있으므로 간단하더라도 사용자와 상호 작용할 기본 메뉴가 필요합니다. 많은 메뉴가 있고 각 레벨의 메뉴가 레이어별로 연결되어 있으므로 메뉴를 균일하게 관리해야하므로 메뉴 범주가 나타납니다. 여기의 메뉴는 일부 최상위 메뉴 표시 및 기본 기능 호출입니다. 특정 기본 알고리즘은 여전히 더 기본 클래스에서 구현해야합니다.
(4) 관리자 클래스 : 사용자 계정 및 비밀번호를 저장하는 데 사용됩니다. 사용자가 로그인해야하므로 시스템이 더 독립적이되도록 사용자의 계정 및 비밀번호를 관리하려면 별도의 클래스가 필요합니다. 이번에 설계된 사용자는 계정과 비밀번호가 하나 뿐이며 계정 및 비밀번호에 대한 변경 만 허용되지만 등록은 허용되지 않습니다.
(5) 검증 클래스 : 로그인 정보를 확인하는 데 사용됩니다. 이 클래스는 로그인 기능을 클래스로 추상화하는 것과 같습니다. 이 구현은 실제로는 그다지 필요하지 않지만 시스템 기능 부서를 명확하게하기 위해이 클래스는 로그인 정보와 기존 계정 및 암호를 확인하도록 설계되어 확인 결과를 제공합니다.
(6) Custmanagement Class : 고객 정보 관리에 사용됩니다. 이 클래스는 쿼리, 수정, 추가 등과 같은 일부 기본 기능을 구현합니다. 고객 정보 관리 메뉴를 입력 할 때 고객 정보에 대한 많은 작업을 수행해야합니다. 이러한 운영의 관리를 용이하게하고 후속 확장을 고려하기 위해, 고객 정보 관리의 모든 기능이 여기에 추출 되어이 범주에 배치됩니다. 이전 메뉴는이 클래스의 메소드를 호출하여 고객 정보 관리를 실현합니다.
(7) 급여 수업 : 쇼핑 및 결제 작업을 처리하는 데 사용됩니다. 이 클래스의 원칙은 기본적으로 위의 클래스와 동일합니다. 고객이 쇼핑을 선택할 때 구매 대상, 돈, 지불, 변경 등과 같은 많은 운영이 있어야합니다. 이러한 기능은 비교적 조각화되어있어 중앙에서 중앙에서 관리 하므로이 클래스를 추상화하고 쇼핑 및 결제를위한 메뉴 옵션을위한 기본 알고리즘을 구현합니다. 이전 메뉴는이 클래스의 방법을 호출하여 쇼핑 및 정착 기능을 깨닫고 이전 메뉴로 돌아갈 수 있습니다.
(8) 선물 관리 수업 : 복권 활동을 처리하는 데 사용되는 관련 기능. 이 클래스의 존재 이유는 기본적으로 (6) 및 (7)의 이유와 동일합니다. 이 수업은 복권 활동을 균일하게 관리합니다. 이전 메뉴는 복권 기능을 실현하기 위해이 클래스의 메소드 만 호출하면됩니다.
(9) 선물 수업 : 선물을 관리하는 데 사용됩니다. 복권 세션은 설계되었으므로 선물이 필요합니다. 그래서 우리는 어떤 선물을 줄까요? 우리는 각 선물을 자세히 나열 할 수 없습니다. 이것은 매우 중복되고 번거롭기 때문에 우리는 단순히 선물 수업을 추출하고 선물의 일부 속성, 즉 선물의 이름과 가격을 클래스의 회원 변수로 저장합니다. 그런 다음 수업을 쉽게 관리 할 수 있습니다. 선물이 필요한 경우 새 선물 객체를 직접 작성한 다음 객체의 속성을 수정하고 관리하십시오. 이 구현은 인터페이스와 유사하지만 인터페이스와 완전히 다르며 비슷한 기능이 있습니다.
요컨대, 위의 클래스는 일부 기능 모듈로 나눈 후에 추상화되며 일부 장소가 반드시 합리적 일 필요는 없습니다. 그들은 주로 요구 사항을보고 다른 요구에 따라 다른 계획을 공식화해야합니다. 여기서 "선물 클래스"를 다시 강조하고 싶습니다. 이 클래스의 디자인은 객체 지향 아이디어와 매우 일치합니다. 예를 들어, 휴대폰, 컴퓨터, 모바일 전원 공급 장치 등과 같은 쇼핑 시스템에서 많은 선물이 필요한 경우, 이러한 선물을 하나씩 작성하면 시스템 코드가 매우 중복됩니다. 선물의 속성은 기본적으로 동일하기 때문에 선물이 필요할 때만 하나의 객체를 정의한 다음 특정 속성을 제공 할 수 있도록 클래스로 추상화 할 수 있습니다. 예를 들어, 휴대폰이나 컴퓨터가 필요한 경우, 새로운 선물 클래스 객체 만 새로운 선물 클래스 객체 만 있으면 휴대 전화가 필요할 때 속성을 휴대 전화로 설정하고 컴퓨터가 필요할 때 컴퓨터에 속성을 설정하고 필요한 것을 설정합니다. 이로 인해 코드가 단순화되고 구조가 더 명확 해집니다. 보다 복잡한 시스템에서는 인터페이스를 사용하여 선물을 구현하는 것이 실제로 더 합리적이므로 인터페이스에 따라 다양한 선물 범주를 구현하여 다른 요구를 충족시킬 수 있습니다. 컴퓨터의 USB 인터페이스와 유사합니다. 이 인터페이스를 사용하면 다양한 주변 장치를 연결할 수 있으며 진실은 비슷합니다.
2. 쇼핑 시스템의 수업 간의 관계와 프로세스 (그래픽 형식으로 표시)
다음 그림은 Microsoft Office Visio 2003 드로잉 도구를 사용한 9 가지 클래스 간의 관계를 보여줍니다.
위 그림에서 우리는 다양한 유형 사이의 관계를 명확하게 볼 수 있습니다. 일반적인 관계와 프로세스는 다음과 같습니다.
(1) StartSMS 클래스는 주요 방법을 포함하는 스타트 업 클래스입니다. 이 클래스는 검증 클래스 및 데이터 클래스의 객체를 정의하여 데이터 및 확인 정보를 저장합니다. 동시에 데이터 클래스에는 미리 저장된 사용자 계정 정보를 저장하는 관리자 클래스가 포함되어 있습니다. 그런 다음 기본 메소드의 특정 논리를 통해 메뉴 클래스의 showloginMenu () 메소드를 호출하여 첫 번째 레벨 메뉴 (로그 인 수정 프로세스)를 처리합니다.
(2) 로그인이 성공한 경우 메뉴 클래스의 ShowMainMenu () 메소드를 호출하여 두 번째 레벨 메뉴 (쇼핑 시스템)의 주요 프로세스를 처리하십시오. 로그인이 3 번 실패하면 시스템을 직접 종료하게됩니다.
(3) 메뉴 클래스의 ShowMainMenu () 메소드에서, 다양한 보조 메뉴 옵션을 선택하여 메뉴 클래스의 showcustmmenu () 메소드는 고객 정보 관리 프로세스를 처리하거나 메뉴 클래스에서 ShowendMenu () 메소드를 호출하여 복권 프로세스를 처리하거나 급여 수업에서 Calcprice () 메소드를 호출하여 쇼핑 정산 프로세스를 처리하도록 호출됩니다.
(4) 보조 메뉴의 고객 정보 관리 옵션이 선택되면 메뉴 클래스의 showcustmmenu () 메소드가 호출됩니다. 이 방법은 Custmanagement 클래스의 다양한 방법을 호출하여 고객 정보 관리의 다른 운영을 처리합니다.
(5) 보조 메뉴의 쇼핑 정산 옵션이 선택되면, 쇼핑 정산 과정을 처리하기 위해 급여 클래스의 calcprice () 메소드가 호출됩니다. 급여 클래스의 getDiscount () 메소드는 고객 구성원 정보를 기반으로 할인율을 계산하는 데 사용됩니다.
(6) 보조 메뉴의 성실한 피드백 옵션이 선택되면, 즉 복권, 메뉴 클래스의 showendMenu () 메소드가 호출됩니다. 이 방법은 선물 관리 클래스의 다양한 방법을 호출하여 복권의 다른 운영을 처리합니다.
Custmanagement Class 및 Giftmanagement 클래스에는 이전 메뉴로 돌아 오는 데 사용되는 ReturnLastMenu () 메소드가 있습니다.
3. 코드 구현
주목할만한 점은 이러한 코드를 CN.ITCAST 패키지에 배치해야한다는 것입니다.
3.1 Startmes 클래스
패키지 cn.itcast; java.util.scanner import; / ** *이 클래스는 쇼핑 시스템을 시작하는 데 사용되는이 시스템의 주요 방법 클래스입니다. * @author */ public class startmes {/ ** * 빈 생성자 */ public startms () {}/ ** * 시스템 메인 메소드 * */ public static void main (String Args []) {// 기존 데이터 데이터의 개체 및 기존 제품 데이터 생성 (); data.initial (); // 메뉴 클래스의 객체를 만듭니다. 메뉴 메뉴 = 새 메뉴 (); // 여기에서 초기화 된 기존 데이터 정보는 메뉴 객체 Menu.SetData (data.goodsName, data.goodsprice, data.custno, data.custbirth, data.custscore)로 전송됩니다. // 첫 번째 레벨 메뉴, 즉 로그인 인터페이스 메뉴를 표시합니다 .ShowloginMenu (); //이 플래그는 시스템 작동 오류가 발생했는지 여부를 결정하는 데 사용됩니다. 작업이 올바르지 않으면 플래그는 거짓이며 시스템을 종료합니다. 기본값은 오류가 아닙니다. 부울 플래그 = true; // 전체 시스템 프로세스 처리 수행 {// 작업 오류가 발생합니다. // 계정에 로그인 한 사용자가 올바른지 여부를 확인하는 객체를 만듭니다. 여기에서 객체 만 생성되며 검증 메소드 인증은 실행되지 않습니다. verifyequal = new verifyequal (); // 첫 번째 레벨 메뉴 스캐너 스캐너 = 새 스캐너 (System.In)에 선택을 입력합니다. int i = scanner.nextint (); // 첫 번째 레벨 메뉴 선택에 대해 다른 응답을합니다. 이것은 클래식 스위치 케이스 사용 스위치 (i) {case 1 : // 사용자가 "로그인 시스템"을 선택합니다. // 카운터 정의를 선택합니다. 즉, 사용자는 최대 3 번만 시도하고 3 개의 입력 오류로 시스템을 직접 종료 할 수 있음을 의미합니다. int j = 3; // 시스템에 로그인하는 처리 프로세스는 {if (verifeequal.verify (data.manager.username, data.manager.password)) {// 사용자가 성공적으로 로그인하고 두 번째 레벨 쇼핑 메뉴가 표시됩니다! ! ! menu.showmainmenu (); 부서지다; } if (j! = 1) {// 사용자 입력이 잘못되었고 3 번 도달하지 않았습니다. Reenter System.out.println ( "/n 사용자 이름과 비밀번호 일치하지 않으면 다시 입력하십시오 :"); } else {// 3 시도 종료, 종료 플래그를 설정하고 Do-While Loop System.out.println을 종료합니다 ( "/nyou 시스템에 입력 할 수있는 권한이 없습니다! 감사합니다!"); flag = false; 부서지다; } // 입력 할 때마다 1만큼 카운터를 줄이십시오. } while (true); 부서지다; CASE 2 : // 사용자는 "관리자 정보 변경"을 선택합니다 (verifeequal.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 ( "사용자 이름과 암호가 변경되었습니다!"); // 정보가 성공적으로 변경되었습니다. 다음 작업 시스템을 선택하십시오. out.println ( "/nplease select, 숫자를 입력하십시오 :"); } else {// 정보 확인 실패, 종료 플래그 시스템을 설정하십시오. flag = false; } 부서지다; 사례 3 : // 사용자는 "종료"System.out.println을 선택합니다 ( "사용해 주셔서 감사합니다!"); System.exit (0); 부서지다; 기본값 : // 첫 번째 레벨 메뉴 입력이 잘못되었으며 System.out.out.print를 다시 선택해야합니다 ( "/n 입력이 잘못되었습니다! 다시 선택하고 번호를 입력하십시오 :"); 부서지다; }} while (플래그); }}3.2 데이터 클래스
패키지 cn.itcast; /*** 쇼핑 시스템의 초기화 데이터를 저장하는 데이터 클래스. 이 클래스는 기존 제품 정보 및 고객 정보 만 저장합니다 * * @author * / public class data { / ** * 기본 생성자, 변수 초기화. 그것들은 모두 배열 객체 또는 클래스 객체이기 때문에 모두 새 * */ public data () {goodsname = new String [50]을 사용해야합니다. goodsprice = 새로운 더블 [50]; custno = 새로운 int [100]; custbirth = 새 문자열 [100]; custscore = 새로운 int [100]; manager = new Manager (); } / ***이 클래스의 데이터 초기화** / public void initial () { /*============================================================== =========================================================/ goodsname [0] = "Addidas 스니커즈"; GoodsPrice [0] = 880D; GoodsName [1] = "Kappa Tennis Skirt"; GoodsPrice [1] = 200D; goodsname [2] = "상단 라켓"; goodsprice [2] = 780d; GoodsName [3] = "Addidas 티셔츠"; GoodsPrice [3] = 420.779999999999997D; GoodsName [4] = "Nike 스니커즈"; GoodsPrice [4] = 900D; GoodsName [5] = "Kappa Tennis"; 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; } /*============================================================================================================== ======================================================================================================================= ======================================================================================================================= ======================================================================================================================= 고객의 생일 공개 int custscore []; // 고객 포인트 공공 관리자 관리자; // 관리자 클래스, 관리자의 사용자 이름 및 비밀번호 만}3.3 관리자 수업
패키지 cn.itcast; / ** * 관리자 클래스는 관리자의 사용자 이름과 비밀번호 만 저장합니다 * * @author */ public class manager {/ ** * 기본 사용자 이름과 비밀번호를 설정 */ public manager () {username = "itcast"; password = "itcast"; } /*================================= 이에 의해 소유 한 변수를 정의합니다 클래스 ================================================================================================================= ========================================================================================================================================= ========================================================================================================================================= ===========================================================================================================================3.4 검증 클래스
패키지 cn.itcast; java.util.scanner import; / *** 로그인 한 사용자가 정확한지 여부를 확인하는 클래스** @author*/ public class verifyequal {/ *** 빈 생성자**/ public exifyequal () {}/ *** 검증을 수행하는 방법** @param s verification을위한 정확한 사용자 이름*/ retilean*/ public bolean verify (string s1). username system.out.print ( "사용자 이름을 입력하십시오 :"); 스캐너 스캐너 = 새 스캐너 (System.In); 문자열 s2 = scanner.next (); // 사용자 system.out.print에서 비밀번호를 입력하십시오 ( "비밀번호를 입력하십시오 :"); 스캐너 = 새 스캐너 (System.In); 문자열 s3 = scanner.next (); // 사용자가 입력 한 정보가 기존 정보와 일치하는지 여부를 결정합니다. }}3.5 메뉴 수업
패키지 cn.itcast; java.util.scanner import; / ** * 메뉴 클래스, 사용자 선택을위한 모든 수준의 메뉴를 표시하는 데 사용되는 메뉴 * * * */ public class menu {/ ** * 빈 생성자 */ public menu () {}/ ** * 메뉴 클래스에서 데이터 정보를 설정 * @param ad * @param ai * @param ai * @param ai * @param ai1 */ public void settata an as an ad [], int ai [], String as1 [], int ai1 []) {goodsname = as; goodsprice = ad; custno = ai; custbirth = as1; custscore = ai1; }/*** 첫 번째 레벨 메뉴를 표시합니다. 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 이 메뉴는이 메뉴를 처리하기위한 모든 프로세스를 포함합니다 */public void showmainmenu () {// 2 차 메뉴, 즉 시스템 시스템의 기본 메뉴를 표시합니다. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Customer Information Management/n"); System.out.println("/t/t/t/t 2. Shopping Settlement/n"); System.out.println("/t/t/t/t 3. True Reply/n"); System.out.println("/t/t/t/t 4. Logout/n"); System.out.println("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *] 루프 부울 깃발을 제어하십시오. do {strings. 쇼핑 클래스 및 Pay.SetData (PAY); "S.Equals ("4 ") {// 첫 번째 레벨 메뉴를 표시합니다. */ public void showcustmmenu () {System.out.println ( "쇼핑 관리 시스템> 고객 정보 관리/ n"); * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * system.out.println ( "/t/t/t 2. 고객 정보 추가/n."; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * System.out.print("Please select, enter a number or press 'n' to return to the previous menu:"); Scanner scanner = new Scanner(System.in); boolean flag = true; do { // Create a customer information management object and set the data, the 여기서는 Custmanagement (Custmanagement)가 여전히 사용됩니다 ( "2") {custmanagement.add (); ( "n") {showmainmenu (); 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("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * System.In은 GiftManagement (GiftManagement)를 제작합니다 ( "1") {GiftManuction.sendgoldencust (); "n"을 선택하십시오 ( "n") {showmainmenu (); /*============================================================== []; // customer membership number public String custBirth []; // customer's birthday public int custScore []; // customer's points}3.6 CustManagement类
package cn.itcast; import 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; import 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; import 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 = ""; 부울 플래그 = 거짓; 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 = ""; 부울 플래그 = 거짓; 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; /** * Class used to store gifts in true feedback*/ public class Gift { /** * Empty constructor* */ public Gift() { } /** * Return all the information of the gift based on the variables of the gift object* */ public String toString() { return (new StringBuilder()).append("a value ¥").append(price) .append("").append(name).toString(); } /*======================== Define the variables owned by this class=================================================================================== ============================================================================================================================================= ============================================================================================================================================= ============================================================================================================================================= // Gift name public double price; // Gift 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. 감사합니다.