تشترك الأمثلة في هذه المقالة في تصميم نظام التسوق Java ورمز التنفيذ للرجوع إليه. المحتوى المحدد كما يلي
1. تحليل المتطلبات وتصنيف نظام التسوق
يعد نظام التسوق نفسه نظامًا معقدًا للغاية ، مع العديد من التفاصيل والمشاكل التي ستكون أكثر تعقيدًا إذا درستها بعمق. بالإضافة إلى ذلك ، فإن نظام التسوق العام هو نوع صفحة الويب ويحتاج إلى واجهة ودية. ومع ذلك ، كمشروع بسيط ، فإن هذا المشروع هو مجرد تقديم الأفكار الأساسية للتطوير للمبتدئين في Java وكيفية تصميم الأطر وعمليات التنفيذ عند الموجهة نحو الكائن. لذلك ، إنه مجرد مشروع بسيط تم تطويره استنادًا إلى الكسوف ، دون مشاركة واجهة المستخدم الرسومية ، ويتم استخدام العديد من التفاصيل والقضايا كبحوث متابعة. التصميم العام بسيط نسبيًا ، لكنه يكفي لشرح العديد من أفكار التصميم ومفاهيم التصميم. لذلك يتم تحليل الاحتياجات الأساسية أدناه.
كنظام تسوق بسيط ، تحتاج إلى الحصول على الوظائف التالية على الأقل (يتم توزيع هذه الوظائف في مستويات مختلفة من القوائم):
(1) وظيفة تسجيل دخول المستخدم ووظيفة تعديل كلمة مرور حساب المستخدم ، وظيفة التسجيل غير متوفرة في الوقت الحالي ؛
(2) بعد قيام المستخدم بتسجيل الدخول بنجاح ، يحتاج إلى وظيفة إدارة معلومات العميل ، وظيفة تسوية التسوق ، وبعض أنشطة اليانصيب ؛
(3) هناك العديد من الوظائف التي يمكن تقسيمها إلى وظيفة إدارة معلومات العميل أدناه ، مثل: الاستعلام ، التعديل ، الإضافة ، إلخ ؛
(4) هناك العديد من الوظائف التي يمكن تقسيمها إلى أسفل وظيفة تسوية التسوق ، مثل: اختيار المنتج ، الدفع ، الفواتير ، إلخ ؛
(5) يمكن تصميم أشكال اليانصيب المختلفة تحت اليانصيب ، والتي يمكن تقسيمها إلى العديد من الوحدات الوظيفية الجديدة.
(6) ينبغي توفير وظيفة الخروج من النظام في القائمة من المستوى الأول ، وينبغي توفير وظيفة تسجيل الخروج من القائمة من المستوى الثاني في القائمة من المستوى الثاني ، ويجب أن تكون القوائم الأخرى قادرة على العودة إلى القائمة السابقة.
الوظائف أعلاه كلها وظائف أساسية نسبيا. إذا قمت بتصميم الفكرة الموجهة للعملية ، فسوف تقسم العديد من الوحدات الوظيفية ثم اتبع العملية خطوة بخطوة. لكن الآن نستخدم الفكرة الموجهة نحو الكائن للتصميم ، كيف يجب أن نفكر في إطار التصميم؟ الفكرة الرئيسية للموجهة نحو الكائن هي تجريد بعض المتطلبات في العديد من الفئات ، ثم إنشاء اتصالات بين هذه الفئات. من خلال التعاون التعاوني بين الطبقات المختلفة ، يمكن تحقيق جميع الوظائف. لذلك ، فإن المهمة الرئيسية الآن هي كيفية تجريد هذه الفئات بشكل معقول ، وما هي الوظائف التي ستنفذها هذه الفئات ، وما هي الروابط بين الفصول؟ فيما يلي تحليل لهذه العملية بناءً على بنية هذا التصميم.
(1) فئة يبدأ: تستخدم لبدء النظام. نظامنا يحتاج بالتأكيد إلى فئة بدء التشغيل. تحتوي هذه الفئة على الطريقة الرئيسية لبدء النظام. هذا الفصل في المستوى الأعلى ، لذلك لا يمكن أن يشمل الكثير من التفاصيل الأساسية. يحتاج فقط إلى تنفيذ بعض العمليات الأساسية من المستوى الأعلى. الشيء الرئيسي هو استدعاء بعض طرق الفصول الأساسية الأخرى لتنفيذ الوظائف.
(2) فئة البيانات: تستخدم لتخزين جميع معلومات البيانات الخاصة بنا. يخزن هذا التصميم بشكل أساسي بعض معلومات المنتج المخزن مسبقًا للشراء ومعلومات الأعضاء المسجلة. لماذا تحتاج هذا الفصل؟ فكر في الأمر ، في التصميم الموجهة للكائنات ، لدينا الكثير من البيانات ، ويجب ألا نحددها وتعديلها في كل مكان. سيؤدي ذلك إلى جعل تجميع النظام منخفضًا جدًا ، عرضة للعديد من الأخطاء ، ومن الصعب إجراء توسيع الوظائف لاحقًا وتعديل الخطأ. لذلك ، نحتاج إلى تصنيف بعض البيانات العامة المستخدمة ، ثم نضعها في فئة ، ونوفر طرقًا لتشغيل هذه البيانات في هذه الفئة.
(3) فئة القائمة: تستخدم لعرض ومعالجة القوائم على جميع المستويات. نظرًا لأننا نقوم بتصميم نظام تسوق ، حتى لو كان الأمر بسيطًا ، فنحن بحاجة إلى قائمة أساسية للتفاعل مع المستخدمين. نظرًا لوجود العديد من القوائم والقوائم في كل مستوى ، يتم توصيل طبقة حسب الطبقة ، فنحن بحاجة إلى إدارة القوائم بشكل موحد ، وبالتالي تظهر فئة القائمة. لاحظ أن القائمة هنا هي مجرد بعض شاشات القائمة ذات المستوى الأعلى ومكالمات الوظائف الأساسية. لا يزال يتعين تنفيذ الخوارزمية الأساسية المحددة من قبل فئات أكثر أساسيات.
(4) فئة المدير: تستخدم لتخزين حساب المستخدم وكلمة المرور. نظرًا لأننا بحاجة إلى المستخدمين لتسجيل الدخول ، يجب أن نحتاج بالتأكيد إلى فئة منفصلة لإدارة حساب المستخدم وكلمة المرور ، بحيث يكون النظام أكثر استقلالية. يحتوي المستخدم المصمم هذه المرة على حساب وكلمة مرور واحدة فقط ، ولا يُسمح إلا بإجراء التغييرات إلى الحساب وكلمة المرور ، لكن التسجيل غير مسموح به.
(5) التحقق من فئة: يستخدم للتحقق من معلومات تسجيل الدخول. هذا الفصل يعادل استخلاص وظيفة تسجيل الدخول في فئة. هذا التنفيذ ليس ضروريًا للغاية ، ولكن من أجل جعل قسم وظائف النظام أكثر وضوحًا ، تم تصميم هذه الفئة للتحقق من معلومات تسجيل الدخول والحسابات وكلمات المرور الحالية ، وبالتالي إعطاء نتيجة التحقق.
(6) فئة الإدارة: تستخدم لإدارة معلومات العميل. تنفذ هذه الفئة بعض الوظائف الأساسية ، مثل الاستعلام والتعديل والإضافة وما إلى ذلك عندما ندخل قائمة إدارة معلومات العميل ، يجب علينا القيام بالكثير من العمليات على معلومات العميل. من أجل تسهيل إدارة هذه العمليات ومراعاة التوسع اللاحق ، يتم تجريد جميع وظائف إدارة معلومات العميل هنا ووضعها في هذه الفئة. تدرك القائمة السابقة إدارة معلومات العميل عن طريق استدعاء الأساليب في هذا الفصل.
(7) فئة الدفع: تستخدم للتعامل مع عمليات التسوق والخروج. مبدأ هذه الفئة هو في الأساس نفس الفئة أعلاه. عندما يختار العميل التسوق ، يجب أن يكون هناك العديد من العمليات ، مثل ما يجب شراؤه ، ومقدار الأموال ، والدفع ، والتغيير ، وما إلى ذلك. تدرك القائمة السابقة وظائف التسوق والتسوية من خلال استدعاء طريقة هذه الفئة ، ويمكنها العودة إلى القائمة السابقة.
(8) فئة الإدارة: الوظائف ذات الصلة المستخدمة للتعامل مع أنشطة اليانصيب. أسباب وجود هذه الفئة هي أساسا تلك الموجودة في (6) و (7). تدير هذه الفئة بشكل موحد أنشطة اليانصيب. تحتاج القائمة السابقة فقط إلى استدعاء طريقة هذه الفئة لتحقيق وظيفة اليانصيب.
(9) فئة الهدايا: تستخدم لإدارة الهدايا. منذ أن تم تصميم جلسة اليانصيب ، هناك حاجة بالتأكيد للهدايا. فما نوع الهدايا التي سنقدمها؟ لا يمكننا سرد كل هدية بالتفصيل. هذا زائد ومزعج للغاية ، لذلك نحن ببساطة نلخص فئة هدايا ونوفر بعض سمات الهدية: اسم وسعر الهدية في متغيرات الأعضاء في الفصل. ثم يمكننا بسهولة إدارة الفصل. إذا كانت هناك حاجة إلى الهدية ، قم بإنشاء كائن هدية جديد مباشرة ، ثم قم بتعديل وإدارة سمات الكائن. يشبه هذا التنفيذ واجهة ، لكنه يختلف تمامًا عن الواجهة وله وظائف مماثلة.
باختصار ، يتم استخلاص الفئات المذكورة أعلاه بعد تقسيمها إلى بعض الوحدات الوظيفية ، وبعض الأماكن ليست بالضرورة معقولة. إنهم يحتاجون بشكل أساسي إلى النظر في المتطلبات وصياغة خطط مختلفة وفقًا للاحتياجات المختلفة. هنا ، أريد التأكيد على "فئة الهدايا" مرة أخرى. يتوافق تصميم هذه الفئة مع الفكرة الموجهة للكائن. على سبيل المثال ، إذا كانت هناك حاجة إلى الكثير من الهدايا في نظام التسوق ، مثل الهواتف المحمولة ، وأجهزة الكمبيوتر ، ومستلزمات الطاقة المحمولة ، وما إلى ذلك ، فإذا كتبنا هذه الهدايا واحدة تلو الأخرى ، فسيكون رمز النظام زائد للغاية. نظرًا لأن سمات الهدايا متشابهة بشكل أساسي ، يمكننا تجريدها في فصل ما ، بحيث يمكننا فقط تحديد كائن واحد عندما نحتاج إلى هدية ، ثم نعطي سمات معينة. على سبيل المثال ، إذا كنا بحاجة إلى هاتف محمول أو كمبيوتر ، فسنحتاج فقط إلى جدد كائن فئة الهدايا ، ثم ضبط سماته على الهاتف المحمول عندما نحتاج إلى هاتف محمول ، وضبط سماته على جهاز كمبيوتر عندما نحتاج إلى جهاز كمبيوتر ، وتعيين كل ما نحتاجه. هذا يجعل رمزنا مبسطة والهيكل أكثر وضوحا. في الأنظمة الأكثر تعقيدًا ، من المعقول في الواقع استخدام واجهة لتنفيذ الهدايا ، بحيث يمكن تنفيذ فئات الهدايا المختلفة وفقًا للواجهة ، وبالتالي تلبية احتياجات مختلفة. يشبه واجهة USB على جهاز الكمبيوتر الخاص بنا. مع هذه الواجهة ، يمكننا توصيل العديد من الأجهزة الطرفية المختلفة ، والحقيقة متشابهة.
2. العلاقة والعملية بين الفصول الدراسية في نظام التسوق (المشار إليها في شكل الرسوم)
يوضح الشكل التالي العلاقة بين هذه الفئات التسعة التي استخدمتها أداة رسم Microsoft Office Visio 2003.
من الشكل أعلاه ، يمكننا أن نرى بوضوح العلاقة بين الأنواع المختلفة. العلاقة العامة والعملية هي كما يلي:
(1) فئة البدء هي فئة بدء التشغيل ، والتي تحتوي على الطريقة الرئيسية. تحدد هذه الفئة كائنات فئة Verifyequal وفئة البيانات لتخزين معلومات البيانات والتحقق. في الوقت نفسه ، تحتوي فئة البيانات على فئة المدير لتخزين معلومات حساب المستخدم مسبقًا. بعد ذلك ، من خلال منطق معين في الطريقة الرئيسية ، يتم استدعاء طريقة ShowLoginMenu () في فئة القائمة لمعالجة القائمة من المستوى الأول-عملية تعديل اللوجينات ؛
(2) إذا نجح تسجيل الدخول ، اتصل بالطريقة showmainmenu () في فئة القائمة للتعامل مع العملية الرئيسية لقائمة المستوى الثاني-نظام التسوق. إذا فشل تسجيل الدخول 3 مرات ، فستخرج مباشرة من النظام ؛
(3) في طريقة showmainmenu () في فئة القائمة ، عن طريق تحديد خيارات القائمة الثانوية المختلفة ، يتم استدعاء طريقة showcustmmenu () في فئة القائمة للتعامل مع عملية إدارة معلومات العميل أو استدعاء طريقة spherendmenu () في فئة القائمة للتعامل مع عملية اليانصيب ، أو الاتصال بالطريقة calcprice () في فئة الدفع للتعامل مع عملية تسوية التسوق ؛
(4) إذا تم تحديد خيار إدارة معلومات العميل في القائمة الثانوية ، فسيتم استدعاء طريقة showcustmmenu () في فئة القائمة. ستستدعي هذه الطريقة طرقًا مختلفة في فئة الإدارة للتعامل مع العمليات المختلفة في إدارة معلومات العميل ؛
(5) إذا تم تحديد خيار تسوية التسوق في القائمة الثانوية ، فسيتم استدعاء طريقة CalcPrice () في فئة الدفع للتعامل مع عملية تسوية التسوق. لاحظ أن طريقة getDiscount () في فئة الدفع تستخدم لحساب معدل الخصم بناءً على معلومات أعضاء العميل ؛
(6) إذا تم تحديد خيار التغذية المرتدة المخلصة في القائمة الثانوية ، على سبيل المثال ، سيتم استدعاء طريقة اليانصيب ، ثم يتم استدعاء طريقة العرض في فئة القائمة. ستستدعي هذه الطريقة طرقًا مختلفة في فئة الإدارة للهدية للتعامل مع عمليات مختلفة من اليانصيب ؛
لاحظ أن هناك طريقة إرجاع () في فئة الإدارة وفئة الهدايا ، والتي تستخدم للعودة إلى القائمة السابقة.
3. تنفيذ الكود
شيء واحد يجب ملاحظة أنه يجب وضع هذه الرموز في حزمة CN.Itcast.
3.1 يبدأ فئة
حزمة cn.itcast ؛ استيراد java.util.scanner ؛ / ** * هذه الفئة هي فئة الطريقة الرئيسية لهذا النظام ، وتستخدم لبدء نظام التسوق * * Author * */ يبدأ الفئة العامة {/ ** * مُنشئ فارغ * */ public startms () {}/ ** * النظام الأساسي الأسلوب * * param args */ public static void main (string args []) data.Initial () ؛ // إنشاء كائن من قائمة قائمة فئة القائمة = قائمة جديدة () ؛ // هنا يتم إرسال معلومات البيانات الحالية إلى قائمة كائن القائمة. // عرض القائمة من المستوى الأول ، أي قائمة Login Interface Menu.ShowloginMenu () ؛ // يتم استخدام هذه العلامة لتحديد ما إذا كان قد حدث خطأ في تشغيل النظام. عندما تكون العملية غير صحيحة ، تكون العلم خاطئة ، وذلك للخروج من النظام. الافتراضي هو عدم وجود خطأ في العلم المنطقي = صحيح ؛ // معالجة عملية النظام بأكملها تفعل {// حدوث خطأ في العملية ، والخروج من النظام إذا // إنشاء كائن يتحقق مما إذا كان المستخدم الذي قام بتسجيل الدخول في الحساب وكلمة المرور صحيحة. يتم إنشاء الكائنات فقط هنا ، ولا يتم تنفيذ طريقة التحقق من التحقق. Verifyequal = new Verifyequal () ؛ ] int i = scanner.nextint () ؛ // قم بإجراء ردود مختلفة على اختيار القائمة من المستوى الأول. لاحظ أن هذا هو مفتاح استخدام حالة التبديل الكلاسيكي (I) {CASE 1: // يحدد المستخدم "نظام تسجيل الدخول" // تحديد عداد ، مما يعني أنه لا يمكن للمستخدم سوى 3 مرات على الأكثر ، والخروج مباشرة من النظام مع 3 أخطاء إدخال int j = 3 ؛ // عملية المعالجة لتسجيل الدخول إلى النظام لا {if (Verifyequal.Verify (data.manager.username ، data.manager.password)) {// قام المستخدم بتسجيل الدخول بنجاح ويتم عرض قائمة التسوق من المستوى الثاني! ! ! menu.showmainmenu () ؛ استراحة؛ } if (j! = 1) {// إدخال المستخدم غير صحيح ولم يصل 3 مرات. إعادة إدخال System.out.println ("/اسم المستخدم وكلمة المرور لا يتطابقان ، يرجى إعادة الدخول:") ؛ } آخر {// المحاولات الثلاثة ، قم بتعيين علامة الخروج ، والخروج من نظام الحلقة. العلم = خطأ ؛ استراحة؛ } // قم بتقليل العداد بمقدار 1 في كل مرة تدخل فيها للإشارة إلى عدد المرات J-- ؛ } بينما (صحيح) ؛ استراحة؛ الحالة 2: // يحدد المستخدم "تغيير معلومات المسؤول" إذا (الوضع (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 حدد ، أدخل الرقم:") ؛ } آخر {// فشل التحقق من المعلومات ، قم بتعيين نظام الخروج system.out.println ("آسف ، ليس لديك إذن لتعديله!") ؛ العلم = خطأ ؛ } استراحة؛ الحالة 3: // يحدد المستخدم "exit" system.out.println ("شكرًا لك على استخدامك!") ؛ System.exit (0) ؛ استراحة؛ الافتراضي: // إدخال القائمة من المستوى الأول غير صحيح ، وتحتاج إلى إعادة تحديد system.out.print ("/n الإدخال غير صحيح! يرجى تحديد مرة أخرى وإدخال الرقم:") ؛ استراحة؛ }} بينما (العلم) ؛ }}3.2 فئة البيانات
حزمة cn.itcast ؛ /*** فئة البيانات التي تخزن بيانات التهيئة لنظام التسوق. تقوم هذه الفئة بتخزين معلومات المنتج الحالية ومعلومات العميل * * * Author * * / بيانات الفئة العامة { / ** * المنشأة الافتراضية ، وتهيئة المتغيرات. نظرًا لأنها كلها كائنات صفيف أو كائنات فئة ، فإنها تحتاج جميعًا إلى استخدام بيانات * */ عامة جديدة () {goodname = new string [50] ؛ goodprice = جديد مزدوج [50] ؛ CUSSTNO = NEW Int [100] ؛ custbirth = سلسلة جديدة [100] ؛ CUSTSCORE = NEW Int [100] ؛ المدير = New Manager () ؛ } / *** تهيئة بيانات هذه الفئة** / public void initial () { /*========================================================= ==========================================================/ GOUSSNAME [0] = "Addidas Sneakers" ؛ PouldPrice [0] = 880d ؛ GOUSSNAME [1] = "Kappa Tennis Skirt" ؛ Goodsprice [1] = 200D ؛ GOUSSNAME [2] = "Top Gracket" ؛ PouldPrice [2] = 780d ؛ GOUSSNAME [3] = "Addidas T-Shirt" ؛ Goodsprice [3] = 420.779999999999997d ؛ GOUSSNAME [4] = "Nike Sneakers" ؛ Goodsprice [4] = 900D ؛ GOUSSNAME [5] = "Kappa Tennis" ؛ PouldPrice [5] = 45D ؛ goodname [6] = "kappat-shirt" ؛ PouldPrice [6] = 245D ؛ /*============================================================================================= ================================================================================================ ================================================================================================ ================================================================================================ CUSSTNO [1] = 1711 ؛ custbirth [1] = "07/13" ؛ CUSTSCORE [1] = 4000 ؛ CUSSTNO [2] = 1623 ؛ custbirth [2] = "06/26" ؛ CUSTSCORE [2] = 5000 ؛ CUSSTNO [3] = 1545 ؛ custbirth [3] = "04/08" ؛ CUSTSCORE [3] = 2200 ؛ CUSSTNO [4] = 1464 ؛ custbirth [4] = "08/16" ؛ CUSTSCORE [4] = 1000 ؛ CUSSTNO [5] = 1372 ؛ custbirth [5] = "12/23" ؛ CUSTSCORE [5] = 3000 ؛ CUSSTNO [6] = 1286 ؛ custbirth [6] = "12/21" ؛ CUSTSCORE [6] = 10080 ؛ } /*========================================================================================================================================= =========================================================================================================================================== =========================================================================================================================================== =========================================================================================================================================== عيد ميلاد العميل الجمهور int custscore [] ؛ // مدير نقاط العميل مدير عام ؛ // فئة المسؤول ، فقط اسم المستخدم وكلمة المرور للمسؤول}3.3 فئة المدير
حزمة cn.itcast ؛ / ** * فئة المسؤول ، تخزن فقط اسم المستخدم وكلمة المرور للمسؤول * * Author * */ مدير الفئة العامة {/ ** * قم بتعيين اسم المستخدم وكلمة المرور الافتراضية * */ Public Manager () {username = "itcast" ؛ كلمة المرور = "itcast" ؛ } /*=================================== class ======================================================================================= ============================================================================================== ============================================================================================== ================================================================================================3.4 التحقق من فئة
حزمة cn.itcast ؛ استيراد java.util.scanner ؛ ! اسم المستخدم system.out.print ("الرجاء إدخال اسم المستخدم:") ؛ الماسح الضوئي = الماسح الضوئي الجديد (System.in) ؛ السلسلة S2 = Scanner.next () ؛ // أدخل كلمة المرور من system.out.print ("الرجاء إدخال كلمة المرور:") ؛ الماسح الضوئي = الماسح الضوئي الجديد (system.in) ؛ السلسلة S3 = Scanner.next () ؛ // تحديد ما إذا كانت المعلومات التي يدخلها المستخدم تتفق مع المعلومات الموجودة s2.equals (s) && s1.equals (S3) ؛ }}3.5 فئة القائمة
حزمة cn.itcast ؛ استيراد java.util.scanner ؛ ! ad double [] ، int ai [] ، string as1 [] ، int ai1 []) {goodname = as ؛ GOUSSPRICE = م ؛ الوسيط = الذكاء الاصطناعي ؛ custbirth = as1 ؛ CUSTSCORE = AI1 ؛ }/*** إظهار القائمة من المستوى الأول ، أي واجهة تسجيل الدخول**/public void showloginmenu () {system.out.println ("/n/n/t/t/t مرحبًا بك في Itcast Management Management System الإصدار 1.0/n/n") ؛ system.out.println (" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * System.out.println ("/t/t/t/t 3. exit/n/n") ؛ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * النظام. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * إدارة معلومات العميل/n ") ؛ system.out.println ("/t/t/t 2. تسوية التسوق/n ") logout/n ") ؛ system.out.println (" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * التحكم في العلم Boolean ؛ فئة التسوق وتتعامل مع الأجر تسوية جديدة =) "تسجيل الدخول" (S.Equals (4 ") الإدارة * */ public void showcustmenu () {system.out.println ("نظام إدارة التسوق> إدارة معلومات العميل/ n") ؛ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * system.out.println ("/T/T/T 2. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * البيانات هنا لا تزال البيانات الأصلية. (S.Equals (2 ") {custmanagement. (S.Equals ("N") {showmainmenu () ردود الفعل/n ") ؛ system.out.println (" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Lottery/n"); System.out.println("/t/t/t/t/t 3. Birthday greeting/n"); System.out.println("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * System.in) (S.Equals (1 ") يختار "القائمة السابقة" إذا كان ("إدخال خطأ ، يرجى إعادة إدخال الرقم" / *==========================================================================* []; // 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: "); العلم = خطأ ؛ } 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; العودة د ؛ } /** * 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: "); العلم = خطأ ؛ } 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; /** * 用来存放真情回馈中的礼物的类*/ public class Gift { /** * 空构造方法* */ public Gift() { } /** * 根据礼物对象的变量返回礼物的全部信息* */ public String toString() { return (new StringBuilder()).append("一个价值¥").append(price) .append("的").append(name).toString(); } /*====================定义该类所拥有的变量====================*/ public String name ; // 礼物名字public double price; // 礼物价格}3.10 代码总结
从上面的9个类的代码来看,有一些需要注意的地方:
(1)在许多类中都定义了与Data中基本一样的成员变量,只是没有Manager对象而已,这是为了让数据一层层保存和传递,通过setData()方法实现,不过这种方法其实并不是很好,并且一般来说成员变量应该最好设置为私有的,这里这样的设计是为了操作方便,使系统更简单一些,安全性不好。
(2)注意到所有要进行字符串拼接的地方都使用JAVA中的StringBuilder类,这是为了高效处理字符串拼接,防止String类带来的拼接数据冗余。
(3)这些设计中的流程并不是非常合理,大家可以自己的需要进行修改。
(4)代码中基本上没有考虑异常时的处理,所以当输入时出现错误的时候,普通错误可以进行重新输入,但是如果出现不匹配等错误,直接会出现异常,从而退出系统,这些也是本设计的缺陷,可以通过正则表达式等来完善一些。
总之,给出的代码仅供参考,大家可以根据需要进行修改,这些代码都是经过验证的,可以直接运行。
4. 总结
这个设计只是为了说明一些基本的设计思想和设计理念,以及设计过程中需要考虑的问题,主要还是为了说明怎样用面向对象的思想去解决现实生活中的问题,所以设计相对简单,不过希望大家可以通过这个设计理解这些基本的思想,从而帮助大家理想面向对象的基本思想。
In short, language is just a tool to solve problems. You can use other languages such as C++ and C# to implement this system, as long as you have good design concepts and design ideas. Again, this design is for reference only. Everyone is welcome to participate in the discussion. If there are any errors, please correct me. شكرًا لك.