ตัวอย่างในบทความนี้แบ่งปันการออกแบบระบบช็อปปิ้ง Java และรหัสการใช้งานสำหรับการอ้างอิงของคุณ เนื้อหาเฉพาะมีดังนี้
1. การวิเคราะห์ข้อกำหนดและการจำแนกประเภทของระบบการช็อปปิ้ง
ระบบการช็อปปิ้งเป็นระบบที่ซับซ้อนมากโดยมีรายละเอียดและปัญหามากมายที่จะซับซ้อนมากขึ้นหากคุณศึกษาอย่างลึกซึ้ง นอกจากนี้ระบบการช็อปปิ้งทั่วไปเป็นประเภทหน้าเว็บและจำเป็นต้องมีอินเทอร์เฟซที่เป็นมิตร อย่างไรก็ตามในฐานะโครงการที่เรียบง่ายโครงการนี้เป็นเพียงการแนะนำแนวคิดพื้นฐานของการพัฒนาให้กับผู้เริ่มต้นของ Java และวิธีการออกแบบกรอบและกระบวนการดำเนินการเมื่อมุ่งเน้นวัตถุ ดังนั้นจึงเป็นเพียงโครงการง่าย ๆ ที่พัฒนาขึ้นจาก Eclipse โดยไม่ต้องมีส่วนร่วมของ GUI และมีการใช้รายละเอียดและปัญหามากมายเป็นการวิจัยติดตามผล การออกแบบโดยรวมนั้นค่อนข้างง่าย แต่ก็เพียงพอที่จะอธิบายแนวคิดการออกแบบและแนวคิดการออกแบบมากมาย ดังนั้นความต้องการขั้นพื้นฐานจะถูกวิเคราะห์ด้านล่าง
ในฐานะที่เป็นระบบการช็อปปิ้งอย่างง่ายคุณต้องมีฟังก์ชั่นต่อไปนี้อย่างน้อย (ฟังก์ชั่นเหล่านี้มีการแจกจ่ายในเมนูระดับต่าง ๆ ):
(1) ฟังก์ชั่นการเข้าสู่ระบบของผู้ใช้และฟังก์ชั่นการปรับเปลี่ยนรหัสผ่านบัญชีผู้ใช้ฟังก์ชั่นการลงทะเบียนไม่สามารถใช้งานได้ตลอดเวลา
(2) หลังจากผู้ใช้เข้าสู่ระบบได้สำเร็จเขาต้องมีฟังก์ชั่นการจัดการข้อมูลลูกค้าฟังก์ชั่นการชำระช้อปปิ้งและกิจกรรมลอตเตอรีบางอย่าง
(3) มีฟังก์ชั่นมากมายที่สามารถแบ่งออกเป็นด้านล่างของฟังก์ชั่นการจัดการข้อมูลลูกค้าเช่น: การสืบค้น, การดัดแปลง, เพิ่มเติม ฯลฯ ;
(4) มีฟังก์ชั่นมากมายที่สามารถแบ่งออกเป็นด้านล่างฟังก์ชั่นการตั้งถิ่นฐานการช็อปปิ้งเช่น: การเลือกผลิตภัณฑ์การชำระเงินการเรียกเก็บเงิน ฯลฯ ;
(5) รูปแบบลอตเตอรีต่างๆสามารถออกแบบภายใต้ลอตเตอรีซึ่งสามารถแบ่งออกเป็นโมดูลการทำงานใหม่ ๆ ได้มากขึ้น
(6) ฟังก์ชั่นของการออกจากระบบควรมีให้ในเมนูระดับแรกฟังก์ชั่นของการเข้าสู่ระบบจากเมนูระดับที่สองควรได้รับในเมนูระดับที่สองและเมนูอื่น ๆ ควรกลับไปที่เมนูก่อนหน้า
ฟังก์ชั่นข้างต้นเป็นฟังก์ชั่นพื้นฐานทั้งหมด หากคุณออกแบบตามแนวคิดที่มุ่งเน้นกระบวนการคุณจะแบ่งโมดูลการทำงานจำนวนมากแล้วทำตามขั้นตอนกระบวนการทีละขั้นตอน แต่ตอนนี้เราใช้แนวคิดเชิงวัตถุในการออกแบบเราควรพิจารณากรอบการออกแบบอย่างไร แนวคิดหลักของการมุ่งเน้นวัตถุคือการสรุปข้อกำหนดบางอย่างในหลายคลาสแล้วสร้างการเชื่อมต่อระหว่างคลาสเหล่านี้ ผ่านความร่วมมือร่วมกันระหว่างชั้นเรียนที่แตกต่างกันฟังก์ชั่นทั้งหมดสามารถทำได้ ดังนั้นภารกิจหลักในขณะนี้คือวิธีการที่เป็นนามธรรมของคลาสเหล่านี้อย่างสมเหตุสมผลคลาสเหล่านี้จะใช้ฟังก์ชั่นใดและการเชื่อมต่อระหว่างคลาสคืออะไร? ต่อไปนี้เป็นการวิเคราะห์กระบวนการนี้ตามโครงสร้างของการออกแบบนี้
(1) คลาส Startms: ใช้สำหรับการเริ่มต้นระบบ ระบบของเราต้องการคลาสเริ่มต้นอย่างแน่นอน คลาสนี้มีวิธีหลักในการเริ่มระบบ ชั้นเรียนนี้อยู่ในระดับสูงสุดดังนั้นจึงไม่สามารถเกี่ยวข้องกับรายละเอียดพื้นฐานได้มากเกินไป จำเป็นต้องใช้กระบวนการพื้นฐานระดับบนสุดเท่านั้น สิ่งสำคัญคือการเรียกใช้วิธีการบางอย่างของคลาสพื้นฐานอื่น ๆ เพื่อใช้งานฟังก์ชั่น
(2) คลาสข้อมูล: ใช้เพื่อจัดเก็บข้อมูลข้อมูลทั้งหมดของเรา การออกแบบนี้ส่วนใหญ่จัดเก็บข้อมูลผลิตภัณฑ์ที่เก็บไว้ล่วงหน้าสำหรับการซื้อและข้อมูลสมาชิกที่ลงทะเบียน ทำไมคุณถึงต้องการคลาสนี้? คิดเกี่ยวกับมันในการออกแบบเชิงวัตถุเรามีข้อมูลจำนวนมากและเราต้องไม่กำหนดและแก้ไขมันกระจายอยู่ทุกหนทุกแห่ง สิ่งนี้จะทำให้การรวมระบบต่ำเกินไปมีแนวโน้มที่จะเกิดข้อผิดพลาดมากมายและเป็นการยากที่จะทำการขยายฟังก์ชั่นในภายหลังและการปรับเปลี่ยนข้อผิดพลาด ดังนั้นเราจำเป็นต้องจำแนกข้อมูลสาธารณะบางส่วนที่ใช้จากนั้นวางไว้ในชั้นเรียนและให้วิธีการใช้งานข้อมูลนี้ในชั้นเรียนนี้
(3) คลาสเมนู: ใช้เพื่อแสดงและประมวลผลเมนูในทุกระดับ เนื่องจากเรากำลังออกแบบระบบช็อปปิ้งแม้ว่ามันจะง่ายเราจึงต้องมีเมนูพื้นฐานเพื่อโต้ตอบกับผู้ใช้ เนื่องจากมีเมนูมากมายและเมนูในแต่ละระดับจึงเชื่อมต่อเลเยอร์ด้วยเลเยอร์เราจึงต้องจัดการเมนูอย่างสม่ำเสมอดังนั้นหมวดเมนูจึงปรากฏขึ้น โปรดทราบว่าเมนูที่นี่เป็นเพียงการแสดงเมนูระดับบนสุดและการเรียกใช้ฟังก์ชันพื้นฐาน อัลกอริทึมพื้นฐานที่เฉพาะเจาะจงยังคงต้องดำเนินการโดยชั้นเรียนพื้นฐานมากขึ้น
(4) คลาสผู้จัดการ: ใช้เพื่อจัดเก็บบัญชีและรหัสผ่านของผู้ใช้ เนื่องจากเราต้องการให้ผู้ใช้เข้าสู่ระบบเราต้องต้องใช้คลาสแยกต่างหากเพื่อจัดการบัญชีและรหัสผ่านของผู้ใช้เพื่อให้ระบบมีความเป็นอิสระมากขึ้น ผู้ใช้ที่ออกแบบในเวลานี้มีบัญชีและรหัสผ่านเพียงบัญชีเดียวและอนุญาตให้มีการเปลี่ยนแปลงเฉพาะในบัญชีและรหัสผ่าน แต่ไม่อนุญาตให้ลงทะเบียน
(5) คลาส Verifyequal: ใช้เพื่อตรวจสอบข้อมูลการเข้าสู่ระบบ คลาสนี้เทียบเท่ากับการสรุปฟังก์ชั่นการเข้าสู่ระบบลงในคลาส การใช้งานนี้ไม่จำเป็นจริงๆ แต่เพื่อให้การแบ่งฟังก์ชั่นระบบชัดเจนขึ้นคลาสนี้ได้รับการออกแบบมาเพื่อตรวจสอบข้อมูลการเข้าสู่ระบบและบัญชีและรหัสผ่านที่มีอยู่ซึ่งจะให้ผลการตรวจสอบ
(6) ระดับการดูแลระบบ: ใช้สำหรับการจัดการข้อมูลลูกค้า คลาสนี้ใช้ฟังก์ชั่นพื้นฐานบางอย่างเช่นการสืบค้นการดัดแปลงเพิ่มเติม ฯลฯ เมื่อเราเข้าสู่เมนูการจัดการข้อมูลลูกค้าเราต้องดำเนินการมากมายเกี่ยวกับข้อมูลลูกค้า เพื่ออำนวยความสะดวกในการจัดการการดำเนินงานเหล่านี้และคำนึงถึงการขยายตัวที่ตามมาฟังก์ชั่นทั้งหมดของการจัดการข้อมูลลูกค้าจะถูกสรุปไว้ที่นี่และวางไว้ในหมวดหมู่นี้ เมนูก่อนหน้าตระหนักถึงการจัดการข้อมูลลูกค้าโดยเรียกวิธีการในชั้นเรียนนี้
(7) ชั้นเรียนจ่าย: ใช้ในการจัดการการช็อปปิ้งและการชำระเงิน หลักการของคลาสนี้นั้นเหมือนกับคลาสข้างต้น เมื่อลูกค้าเลือกที่จะซื้อสินค้าจะต้องมีการดำเนินงานมากมายเช่นสิ่งที่ซื้อเงินการชำระเงินการเปลี่ยนแปลง ฯลฯ ฟังก์ชั่นเหล่านี้ค่อนข้างแยกส่วนดังนั้นเราจึงจัดการกับพวกเขาเป็นศูนย์กลาง เมนูก่อนหน้าตระหนักถึงฟังก์ชั่นการช็อปปิ้งและการตั้งถิ่นฐานโดยเรียกวิธีการของคลาสนี้และสามารถกลับไปที่เมนูก่อนหน้า
(8) คลาสการจัดการของขวัญ: ฟังก์ชั่นที่เกี่ยวข้องที่ใช้ในการจัดการกิจกรรมลอตเตอรี เหตุผลของการดำรงอยู่ของคลาสนี้นั้นเหมือนกับใน (6) และ (7) ชั้นเรียนนี้จัดการกิจกรรมลอตเตอรีอย่างสม่ำเสมอ เมนูก่อนหน้านี้จำเป็นต้องเรียกใช้วิธีการของคลาสนี้เพื่อรับรู้ฟังก์ชั่นลอตเตอรี
(9) คลาสของขวัญ: ใช้ในการจัดการของขวัญ เนื่องจากการลอตเตอรีได้รับการออกแบบจึงจำเป็นต้องมีของขวัญอย่างแน่นอน แล้วเราจะให้ของขวัญแบบไหน? เราไม่สามารถแสดงรายการของขวัญแต่ละรายได้ นี่เป็นเรื่องที่ซ้ำซ้อนและลำบากมากดังนั้นเราเพียงแค่สรุปคลาสของขวัญและบันทึกคุณลักษณะบางอย่างของของขวัญ: ชื่อและราคาของของขวัญเป็นตัวแปรสมาชิกของชั้นเรียน จากนั้นเราสามารถจัดการชั้นเรียนได้อย่างง่ายดาย หากต้องการของขวัญให้สร้างวัตถุของขวัญใหม่โดยตรงจากนั้นแก้ไขและจัดการแอตทริบิวต์ของวัตถุ การใช้งานนี้คล้ายกับอินเทอร์เฟซ แต่มันแตกต่างอย่างสิ้นเชิงจากอินเทอร์เฟซและมีฟังก์ชั่นที่คล้ายกัน
ในระยะสั้นคลาสข้างต้นจะถูกแยกออกหลังจากถูกแบ่งออกเป็นโมดูลการทำงานบางอย่างและบางสถานที่ไม่จำเป็นต้องมีเหตุผล พวกเขาส่วนใหญ่จำเป็นต้องดูข้อกำหนดและกำหนดแผนที่แตกต่างกันตามความต้องการที่แตกต่างกัน ที่นี่ฉันต้องการเน้น "คลาสของขวัญ" อีกครั้ง การออกแบบของคลาสนี้สอดคล้องกับแนวคิดเชิงวัตถุ ตัวอย่างเช่นหากจำเป็นต้องใช้ของขวัญมากมายในระบบช็อปปิ้งเช่นโทรศัพท์มือถือคอมพิวเตอร์อุปกรณ์จ่ายไฟมือถือ ฯลฯ ถ้าเราเขียนของขวัญเหล่านี้ทีละหนึ่งรหัสระบบจะซ้ำซ้อนมาก เนื่องจากคุณลักษณะของของขวัญนั้นเหมือนกันเราจึงสามารถนามธรรมพวกเขาในชั้นเรียนเพื่อให้เราสามารถกำหนดวัตถุหนึ่งชิ้นเมื่อเราต้องการของขวัญแล้วให้คุณลักษณะบางอย่าง ตัวอย่างเช่นหากเราต้องการโทรศัพท์มือถือหรือคอมพิวเตอร์เราจะต้องใช้วัตถุคลาสของขวัญใหม่เท่านั้นจากนั้นตั้งค่าแอตทริบิวต์เป็นโทรศัพท์มือถือเมื่อเราต้องการโทรศัพท์มือถือให้ตั้งค่าแอตทริบิวต์ให้กับคอมพิวเตอร์เมื่อเราต้องการคอมพิวเตอร์และตั้งค่าสิ่งที่เราต้องการ สิ่งนี้ทำให้รหัสของเราง่ายขึ้นและโครงสร้างที่ชัดเจนขึ้น ในระบบที่ซับซ้อนมากขึ้นมันมีเหตุผลมากกว่าที่จะใช้อินเทอร์เฟซเพื่อนำของขวัญมาใช้เพื่อให้สามารถนำหมวดหมู่ของขวัญที่แตกต่างกันไปตามอินเตอร์เฟสได้ดังนั้นจึงตอบสนองความต้องการที่แตกต่างกัน มันคล้ายกับอินเทอร์เฟซ USB บนคอมพิวเตอร์ของเรา ด้วยอินเทอร์เฟซนี้เราสามารถเสียบอุปกรณ์ต่อพ่วงต่างๆและความจริงก็คล้ายกัน
2. ความสัมพันธ์และกระบวนการระหว่างชั้นเรียนในระบบการช็อปปิ้ง (แสดงในรูปแบบกราฟิก)
รูปต่อไปนี้แสดงความสัมพันธ์ระหว่าง 9 คลาสเหล่านี้ฉันใช้เครื่องมือวาดภาพ Microsoft Office Visio 2003
จากรูปด้านบนเราสามารถเห็นความสัมพันธ์ระหว่างประเภทต่างๆอย่างชัดเจน ความสัมพันธ์และกระบวนการทั่วไปมีดังนี้:
(1) คลาส startms เป็นคลาสเริ่มต้นซึ่งมีวิธีหลัก คลาสนี้กำหนดวัตถุของคลาส Verifyequal และคลาสข้อมูลเพื่อจัดเก็บข้อมูลและข้อมูลการตรวจสอบ ในเวลาเดียวกันคลาสข้อมูลมีคลาส Manager เพื่อจัดเก็บข้อมูลบัญชีผู้ใช้ที่เก็บไว้ล่วงหน้า จากนั้นด้วยตรรกะบางอย่างในวิธีการหลักวิธี showloginmenu () ในคลาสเมนูถูกเรียกให้ประมวลผลเมนูระดับแรก-กระบวนการปรับเปลี่ยน Login;
(2) หากการเข้าสู่ระบบสำเร็จให้เรียกเมธอด showmainmenu () ในคลาสเมนูเพื่อจัดการกระบวนการหลักของเมนูระดับที่สอง-ระบบการช็อปปิ้ง หากการเข้าสู่ระบบล้มเหลว 3 ครั้งคุณจะออกจากระบบโดยตรง
(3) ในเมธอด showmainmenu () ในคลาสเมนูโดยเลือกตัวเลือกเมนูรองที่แตกต่างกันเมธอด showcustmmenu () ในคลาสเมนูถูกเรียกให้จัดการกระบวนการจัดการข้อมูลลูกค้าหรือเรียกใช้เมธอด shownendmenu () ในคลาสเมนูเพื่อจัดการกระบวนการลอตเตอรี
(4) หากเลือกตัวเลือกการจัดการข้อมูลลูกค้าในเมนูรองได้วิธีการ showcustmmenu () ในคลาสเมนูจะถูกเรียก วิธีนี้จะเรียกวิธีการต่าง ๆ ในคลาสการจัดการเพื่อจัดการการดำเนินงานที่แตกต่างกันในการจัดการข้อมูลลูกค้า
(5) หากเลือกตัวเลือกการตั้งถิ่นฐานการช็อปปิ้งในเมนูรองได้วิธีการ calcprice () ในคลาสจ่ายจะถูกเรียกให้จัดการกระบวนการชำระช้อปปิ้ง โปรดทราบว่าเมธอด getDiscount () ในคลาสจ่ายใช้เพื่อคำนวณอัตราคิดลดตามข้อมูลสมาชิกลูกค้า
(6) หากเลือกตัวเลือกข้อเสนอแนะที่จริงใจในเมนูรอง ได้แก่ วิธีลอตเตอรีจากนั้นวิธีการ shownendmenu () ในคลาสเมนูจะถูกเรียก วิธีนี้จะเรียกวิธีการต่าง ๆ ในคลาสการจัดการของขวัญเพื่อจัดการการดำเนินงานที่แตกต่างกันของลอตเตอรี
โปรดทราบว่ามีวิธี returnlastmenu () ในชั้นเรียนการดูแลและคลาสการจัดการของขวัญซึ่งใช้เพื่อกลับไปที่เมนูก่อนหน้า
3. การใช้งานรหัส
สิ่งหนึ่งที่ควรทราบคือควรวางรหัสเหล่านี้ไว้ในแพ็คเกจ CN.Itcast
3.1 คลาสเริ่มต้น
แพ็คเกจ cn.itcast; นำเข้า java.util.scanner; / ** * คลาสนี้เป็นคลาสวิธีหลักของระบบนี้ใช้เพื่อเริ่มระบบช้อปปิ้ง * * @author * */ คลาสสาธารณะเริ่มต้น {/ ** * ตัวสร้างที่ว่างเปล่า * */ เริ่มต้นสาธารณะ () {}/ ** * วิธีการหลักของระบบ * * @param args */ ข้อมูลที่มีอยู่ data.initial (); // สร้างวัตถุของเมนูเมนูเมนูเมนู = เมนูใหม่ (); // ที่นี่ข้อมูลข้อมูลที่มีอยู่เริ่มต้นจะถูกส่งไปยังเมนูวัตถุเมนู SetData (data.goodsname, data.goodsprice, data.custno, data.custbirth, data.custscore); // แสดงเมนูระดับแรกนั่นคือเมนูอินเทอร์เฟซเข้าสู่ระบบ showloginmenu (); // ธงนี้ใช้เพื่อตรวจสอบว่าเกิดข้อผิดพลาดในการดำเนินการระบบหรือไม่ เมื่อการดำเนินการไม่ถูกต้องธงเป็นเท็จเพื่อออกจากระบบ ค่าเริ่มต้นคือไม่มีข้อผิดพลาดบูลีนธง = จริง; // การประมวลผลกระบวนการระบบทั้งหมดทำ {// เกิดข้อผิดพลาดในการดำเนินการออกจากระบบถ้า (! ตั้งค่าสถานะ) แตก; // สร้างวัตถุที่ตรวจสอบว่าผู้ใช้เข้าสู่ระบบบัญชีและรหัสผ่านนั้นถูกต้องหรือไม่ วัตถุเท่านั้นที่ถูกสร้างขึ้นที่นี่และวิธีการตรวจสอบ Verifyequal ไม่ได้ดำเนินการ Verifyequal = new Verifyequal (); // ป้อนการเลือกในเครื่องสแกนเมนูระดับแรกสแกนเนอร์ = สแกนเนอร์ใหม่ (System.in); int i = scanner.nextint (); // ทำการตอบกลับที่แตกต่างกันในการเลือกเมนูระดับแรก โปรดทราบว่านี่คือสวิตช์การใช้สวิตช์แบบสวิตช์แบบคลาสสิก (I) {กรณีที่ 1: // ผู้ใช้เลือก "ระบบเข้าสู่ระบบ" // กำหนดตัวนับซึ่งหมายความว่าผู้ใช้สามารถลองได้ 3 ครั้งมากที่สุดและออกจากระบบโดยตรงด้วยข้อผิดพลาด 3 ครั้ง int J = 3; // กระบวนการประมวลผลสำหรับการเข้าสู่ระบบ DO {ถ้า (VerifyEqual.Verify (data.Manager.username, data.Manager.password)) {// ผู้ใช้เข้าสู่ระบบได้สำเร็จและเมนูการช็อปปิ้งระดับที่สองจะปรากฏขึ้น! - - menu.showmainmenu (); หยุดพัก; } ถ้า (j! = 1) {// อินพุตของผู้ใช้ไม่ถูกต้องและยังไม่ถึง 3 ครั้ง กลับเข้าสู่ System.out.println ("/n ชื่อผู้ใช้และรหัสผ่านไม่ตรงกันโปรดป้อนอีกครั้ง:"); } else {// 3 ความพยายามสิ้นสุดตั้งค่าธงทางออกและออกจากระบบ loop ในขณะที่ทำแบบวน ธง = เท็จ; หยุดพัก; } // ลดลงเคาน์เตอร์โดย 1 ทุกครั้งที่คุณป้อนเพื่อระบุจำนวนครั้งที่ j--; } ในขณะที่ (จริง); หยุดพัก; กรณีที่ 2: // ผู้ใช้เลือก "เปลี่ยนข้อมูลผู้ดูแลระบบ" ถ้า (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 ("ชื่อผู้ใช้และรหัสผ่านมีการเปลี่ยนแปลง!"); // ข้อมูลมีการเปลี่ยนแปลงสำเร็จ เลือกการดำเนินการถัดไป System.out.println ("/nplease เลือกให้ป้อนหมายเลข:"); } else {// การตรวจสอบข้อมูลล้มเหลวตั้งค่าการตั้งค่าสถานะ Exit System.out.println ("ขออภัยคุณไม่ได้รับอนุญาตให้แก้ไข!"); ธง = เท็จ; } หยุดพัก; กรณีที่ 3: // ผู้ใช้เลือก "ออก" System.out.println ("ขอบคุณสำหรับการใช้งานของคุณ!"); System.Exit (0); หยุดพัก; ค่าเริ่มต้น: // อินพุตเมนูระดับแรกไม่ถูกต้องและคุณต้องเลือก System.out.print อีกครั้ง ("/n อินพุตไม่ถูกต้อง! โปรดเลือกอีกครั้งและป้อนหมายเลข:"); หยุดพัก; }} ในขณะที่ (ธง); -3.2 คลาสข้อมูล
แพ็คเกจ cn.itcast; /*** คลาสข้อมูลที่เก็บข้อมูลการเริ่มต้นของระบบการช็อปปิ้ง คลาสนี้จะจัดเก็บข้อมูลผลิตภัณฑ์ที่มีอยู่และข้อมูลลูกค้า * * @author * * / ข้อมูลคลาสสาธารณะ { / ** * ตัวสร้างเริ่มต้นตัวแปรเริ่มต้น เนื่องจากพวกเขาทั้งหมดเป็นวัตถุอาร์เรย์หรือวัตถุคลาสพวกเขาทั้งหมดจำเป็นต้องใช้ข้อมูล * */ สาธารณะใหม่ () {goodsName = ใหม่สตริง [50]; GoodsPrice = ใหม่สองเท่า [50]; custno = new int [100]; CustBirth = สตริงใหม่ [100]; CustScore = ใหม่ int [100]; ผู้จัดการ = ผู้จัดการใหม่ (); } / *** เริ่มต้นข้อมูลของคลาสนี้** / โมฆะสาธารณะเริ่มต้น () { - - GoodsName [0] = "รองเท้าผ้าใบ addidas"; GoodsPrice [0] = 880D; GoodsName [1] = "กระโปรงเทนนิสคัปปา"; GoodsPrice [1] = 200d; GoodsName [2] = "Top Racket"; GoodsPrice [2] = 780D; GoodsName [3] = "เสื้อยืด Addidas"; GoodsPrice [3] = 420.7799999999999997D; 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] = 1,000; 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 * */ ตัวจัดการคลาสสาธารณะ {/ ** * ตั้งชื่อผู้ใช้และรหัสผ่านเริ่มต้น * */ ผู้จัดการสาธารณะ () {username = "Itcast"; รหัสผ่าน = "itcast"; } /*===================================== กำหนดตัวแปรที่เป็นเจ้าของโดยสิ่งนี้ class ==================================================================================================================== - - -3.4 คลาส Verifyequal
แพ็คเกจ cn.itcast; นำเข้า java.util.scanner; / *** คลาสที่ตรวจสอบว่าผู้ใช้เข้าสู่ระบบถูกต้อง** @author**/ คลาสสาธารณะ Verifyequal {/ *** ตัวสร้างที่ว่างเปล่า**/ Public Verifyequal () {}/ *** วิธีการตรวจสอบ** @param s ชื่อผู้ใช้ที่ถูกต้อง ชื่อผู้ใช้ System.out.print ("โปรดป้อนชื่อผู้ใช้:"); สแกนเนอร์สแกนเนอร์ = สแกนเนอร์ใหม่ (System.in); สตริง s2 = scanner.next (); // ป้อนรหัสผ่านจาก System.out.out.print ("โปรดป้อนรหัสผ่าน:"); สแกนเนอร์ = สแกนเนอร์ใหม่ (System.in); สตริง s3 = scanner.next (); // ตรวจสอบว่าข้อมูลที่ป้อนโดยผู้ใช้สอดคล้องกับข้อมูลที่มีอยู่ส่งคืน S2.Equals (s) && s1.equals (S3); -3.5 เมนูคลาส
แพ็คเกจ cn.itcast; นำเข้า java.util.scanner; / ** * คลาสเมนูที่ใช้เพื่อแสดงเมนูทุกระดับสำหรับการเลือกผู้ใช้ * * @author * */ เมนูคลาสสาธารณะ {/ ** * ตัวสร้างที่ว่างเปล่า * */ เมนูสาธารณะ () {}/ ** * ตั้งค่าข้อมูลในคลาสเมนู * * @param เป็น @param ad * @param ai * @param ai * @param ai * @param ai * @param ai เป็น [], double ad [], int ai [], string as1 [], int ai1 []) {goodsName = AS; GoodsPrice = AD; custno = ai; CustBirth = AS1; CustScore = AI1; }/*** แสดงเมนูระดับแรกนั่นคืออินเตอร์เฟสการเข้าสู่ระบบ**/โมฆะสาธารณะ 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. ออก/n/n"); - - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ระบบ - - - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * logout/n "); system.out.println (" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ธงเพื่อควบคุมธงบูลีน = false; วัตถุประสงค์ของการตั้งถิ่นฐานการช็อปปิ้งและจัดการกับการจ่ายเงินทั้งหมดของการช็อปปิ้ง; เลือก "s.equals (" 4 ") {// แสดงเมนูระดับแรกและมันจะกลับไปที่การประมวลผลเมนูระดับแรกในระดับเริ่มต้น การจัดการ * */ โมฆะสาธารณะ showcustmmenu () {system.out.println ("ระบบการจัดการการช็อปปิ้ง> การจัดการข้อมูลลูกค้า/ n"); - - - * * * * * * * * * * System.out.println ("/t/t/t 2. เพิ่มข้อมูลลูกค้า/n"); - - - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ตั้งค่าข้อมูลที่นี่ยังคงเป็นข้อมูลดั้งเดิม (s.equals ("2")) {custanagement.add (); (s.equals ("n")) {showmainmenu (); ข้อเสนอแนะ/n "); system.out.println (" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ลอตเตอรี/n "); system.out.println ("/t/t/t/t/t 3. คำอวยพรวันเกิด/n "); system.out.println (" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - - - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * (s.equals ("1")) {giftmanagement.sendgoldencust (); "กลับไปที่เมนูก่อนหน้า" ถ้า ("n")) {showmainmenu (); /*================================================================================== [];3.6 ชั้นเรียนการดูแล
แพ็คเกจ cn.itcast; นำเข้า java.util.scanner; / ** * คลาสการจัดการข้อมูลลูกค้า * * @author * */ การดูแลระดับสาธารณะในระดับสาธารณะ {/ ** * ตัวสร้างที่ว่างเปล่า * */ การดูแลระบบสาธารณะ () {}/ ** * ตั้งค่าข้อมูลข้อมูลของคลาสการจัดการข้อมูลลูกค้า * * @param เป็น @param ad * @param ai * @param ai * @param as1 * @param ai ai [], string as1 [], int ai1 []) {goodsName = as; GoodsPrice = AD; custno = ai; CustBirth = AS1; CustScore = AI1; }/*** กลับไปที่เมนูก่อนหน้าคือเมนูการจัดการข้อมูลเมนูระดับที่สองเมนูที่สอง**/โมฆะสาธารณะ returnLastmenu () {system.out.print ("/n/nplease กด 'n' เพื่อกลับไปที่เมนูก่อนหน้า:"); สแกนเนอร์สแกนเนอร์ = สแกนเนอร์ใหม่ (System.in); ธงบูลีน = จริง; ทำถ้า (scanner.next (). เท่ากับ ("n")) {// กลับไปที่เมนูก่อนหน้าวัตถุเมนูใหม่ถูกสร้างขึ้นที่นี่ แต่ตามความเห็นของผู้ใช้ เมนูเมนู = เมนูใหม่ (); menu.setData (GoodsName, GoodsPrice, Custno, Custbirth, CustScore); menu.showcustmmenu (); } else {system.out.print ("ข้อผิดพลาดอินพุตโปรด 'n' กลับไปที่เมนูก่อนหน้า:"); ธง = เท็จ; } ในขณะที่ (! ธง); }/*** เพิ่มข้อมูลลูกค้า**/โมฆะสาธารณะเพิ่ม () {System.out.println ("ระบบการจัดการการช็อปปิ้ง> การจัดการข้อมูลลูกค้า> เพิ่มข้อมูลลูกค้า/n/n"); สแกนเนอร์สแกนเนอร์ = สแกนเนอร์ใหม่ (System.in); System.out.print ("โปรดป้อนหมายเลขสมาชิก (<4-Digit Integer>):"); int i = scanner.nextint (); System.out.print ("โปรดป้อนวันเกิดของสมาชิก (เดือน/วัน <แสดงเป็นสองหลัก>):"); สตริง s = scanner.next (); System.out.print ("โปรดป้อนอินทิกรัล:"); int j = scanner.nextint (); int k = -1; int l = 0; ทำ {ถ้า (l> = custno.length) break; // ค้นหาตำแหน่งที่ว่างเปล่าแรกในอาร์เรย์เพื่อจัดเก็บข้อมูลลูกค้าใหม่ถ้า (custno [l] == 0) {k = l; หยุดพัก; } l ++; } ในขณะที่ (จริง); custno [k] = i; Custbirth [k] = s; CustScore [K] = J; System.out.println ("สมาชิกใหม่เพิ่มสำเร็จ!"); // กลับไปที่เมนูก่อนหน้า returnlastmenu (); }/*** แก้ไขข้อมูลลูกค้า**/โมฆะสาธารณะแก้ไข () {System.out.println ("ระบบการจัดการการช็อปปิ้ง> การจัดการข้อมูลลูกค้า> แก้ไขข้อมูลลูกค้า/n/n"); System.out.print ("โปรดป้อนหมายเลขสมาชิก:"); สแกนเนอร์สแกนเนอร์ = สแกนเนอร์ใหม่ (System.in); int i = scanner.nextint (); System.out.println ("คะแนนวันเกิดสมาชิก"); System.out.println ("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - .Append (CustScore [K]). TOSTRING ()); - - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * เลือก, ป้อนหมายเลข: "); switch (scanner.nextint ()) {กรณี 1: //" แก้ไขวันเกิดของสมาชิก "system.out.print (" โปรดป้อนวันเกิดที่แก้ไข: "); custbirth [j] = scanner.next () modift.sytem. "); custScore [j] = scanner.nextint (); system.out.println (" คะแนนสมาชิกเปลี่ยนไปแล้ว! "); break;}} else {system.out.println (" ขออภัยไม่มีการสืบค้นสมาชิก ");} // กลับไปที่เมนูก่อนหน้า System.out.println ("ระบบการจัดการการช็อปปิ้ง> การจัดการข้อมูลลูกค้า> ข้อมูลลูกค้า/n"); คะแนนวันเกิด "); System.out.println (" ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ > = custno.length) break; จริง; System.out.println ("ระบบการจัดการการช็อปปิ้ง> การจัดการข้อมูลลูกค้า> แสดงข้อมูลลูกค้า/n/n"); 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: "); ธง = เท็จ; } 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(); ธง = จริง; } // 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(); ธง = จริง; } } // 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. ขอบคุณ