Contoh -contoh dalam artikel ini berbagi desain sistem belanja Java dan kode implementasi untuk referensi Anda. Konten spesifiknya adalah sebagai berikut
1. Analisis Persyaratan dan Klasifikasi Sistem Belanja
Sistem belanja itu sendiri adalah sistem yang sangat kompleks, dengan banyak detail dan masalah yang akan lebih rumit jika Anda mempelajarinya secara mendalam. Selain itu, sistem belanja umum adalah jenis halaman web dan perlu memiliki antarmuka yang ramah. Namun, sebagai proyek sederhana, proyek ini hanya untuk memperkenalkan ide-ide dasar pengembangan kepada pemula Java dan cara merancang kerangka kerja dan proses implementasi saat berorientasi objek. Oleh karena itu, ini hanya proyek sederhana yang dikembangkan berdasarkan gerhana, tanpa partisipasi GUI, dan banyak detail dan masalah digunakan sebagai penelitian tindak lanjut. Desain keseluruhan relatif sederhana, tetapi cukup untuk menjelaskan banyak ide desain dan konsep desain. Jadi kebutuhan dasar dianalisis di bawah ini.
Sebagai sistem belanja yang sederhana, Anda harus memiliki setidaknya fungsi -fungsi berikut (fungsi -fungsi ini didistribusikan dalam berbagai tingkat menu):
(1) Fungsi Login Pengguna dan Fungsi Modifikasi Kata Sandi Akun Pengguna, Fungsi Pendaftaran tidak tersedia untuk saat ini;
(2) Setelah pengguna berhasil masuk, ia perlu memiliki fungsi manajemen informasi pelanggan, fungsi penyelesaian belanja, dan beberapa kegiatan lotre;
(3) Ada banyak fungsi yang dapat dibagi menjadi di bawah fungsi manajemen informasi pelanggan, seperti: kueri, modifikasi, penambahan, dll.;
(4) Ada banyak fungsi yang dapat dibagi menjadi di bawah fungsi penyelesaian belanja, seperti: pemilihan produk, pembayaran, penagihan, dll.;
(5) Berbagai bentuk lotere dapat dirancang di bawah lotre, yang dapat dibagi lebih lanjut menjadi banyak modul fungsional baru.
(6) Fungsi keluar dari sistem harus disediakan di menu tingkat pertama, fungsi keluar dari menu tingkat kedua harus disediakan di menu tingkat kedua, dan menu lain harus dapat kembali ke menu sebelumnya.
Fungsi di atas adalah semua fungsi yang relatif mendasar. Jika Anda mendesain sesuai dengan ide yang berorientasi pada proses, Anda akan membagi banyak modul fungsional dan kemudian mengikuti proses langkah demi langkah. Tetapi sekarang kita menggunakan ide yang berorientasi pada objek untuk merancang, bagaimana kita harus mempertimbangkan kerangka desain? Gagasan utama berorientasi objek adalah untuk mengabstraksikan beberapa persyaratan ke dalam banyak kelas, dan kemudian membangun koneksi antara kelas-kelas ini. Melalui kerja sama kolaboratif antara kelas yang berbeda, semua fungsi dapat dicapai. Oleh karena itu, tugas utama sekarang adalah bagaimana cara abstrak kelas -kelas ini secara wajar, fungsi apa yang akan diimplementasikan oleh kelas -kelas ini, dan apa hubungan antar kelas? Berikut ini adalah analisis proses ini berdasarkan struktur desain ini.
(1) Kelas StartMS: Digunakan untuk startup sistem. Sistem kami pasti membutuhkan kelas startup. Kelas ini berisi metode utama untuk memulai sistem. Kelas ini berada di level atas, sehingga tidak dapat melibatkan terlalu banyak detail yang mendasarinya. Ini hanya perlu menerapkan beberapa proses dasar tingkat atas. Hal utama adalah memanggil beberapa metode kelas yang mendasari lain untuk mengimplementasikan fungsi.
(2) Kelas Data: Digunakan untuk menyimpan semua informasi data kami. Desain ini terutama menyimpan beberapa informasi produk yang disimpan sebelumnya untuk pembelian dan informasi anggota terdaftar. Mengapa Anda membutuhkan kelas ini? Pikirkan tentang hal ini, dalam desain yang berorientasi objek, kami memiliki banyak data, dan kami tidak boleh mendefinisikan dan memodifikasinya di mana-mana. Ini akan membuat agregasi sistem terlalu rendah, rentan terhadap banyak kesalahan, dan sulit untuk melakukan ekspansi fungsi dan modifikasi kesalahan. Oleh karena itu, kita perlu mengklasifikasikan beberapa data publik yang digunakan, kemudian memasukkannya ke dalam kelas, dan memberikan metode untuk mengoperasikan data ini di kelas ini.
(3) Kelas Menu: Digunakan untuk menampilkan dan memproses menu di semua tingkatan. Karena kami merancang sistem belanja, bahkan jika itu sederhana, kami membutuhkan menu dasar untuk berinteraksi dengan pengguna. Karena ada banyak menu dan menu di setiap level yang terhubung dengan lapisan demi lapisan, kita perlu mengelola menu secara seragam, sehingga kategori menu muncul. Perhatikan bahwa menu di sini hanyalah beberapa tampilan menu tingkat atas dan panggilan fungsi dasar. Algoritma yang mendasari spesifik masih perlu diimplementasikan oleh kelas yang lebih mendasarinya.
(4) Kelas Manajer: Digunakan untuk menyimpan akun dan kata sandi pengguna. Karena kami membutuhkan pengguna untuk masuk, kami harus membutuhkan kelas terpisah untuk mengelola akun dan kata sandi pengguna, sehingga sistem lebih mandiri. Pengguna yang dirancang kali ini hanya memiliki satu akun dan kata sandi, dan hanya perubahan yang diizinkan untuk dilakukan ke akun dan kata sandi, tetapi pendaftaran tidak diizinkan.
(5) Verifikasi Kelas: Digunakan untuk memverifikasi informasi login. Kelas ini setara dengan mengabstraksi fungsi login ke dalam kelas. Implementasi ini sebenarnya tidak terlalu diperlukan, tetapi untuk membuat divisi fungsi sistem lebih jelas, kelas ini dirancang untuk memverifikasi informasi login dan akun dan kata sandi yang ada, sehingga memberikan hasil verifikasi.
(6) Kelas CustManagement: Digunakan untuk manajemen informasi pelanggan. Kelas ini mengimplementasikan beberapa fungsi yang mendasarinya, seperti kueri, modifikasi, penambahan, dll. Ketika kami memasukkan menu manajemen informasi pelanggan, kami harus melakukan banyak operasi pada informasi pelanggan. Untuk memfasilitasi pengelolaan operasi ini dan memperhitungkan ekspansi selanjutnya, semua fungsi manajemen informasi pelanggan diabstraksi di sini dan ditempatkan dalam kategori ini. Menu sebelumnya menyadari manajemen informasi pelanggan dengan memanggil metode di kelas ini.
(7) Bayar kelas: Digunakan untuk menangani operasi belanja dan checkout. Prinsip kelas ini pada dasarnya sama dengan kelas di atas. Ketika seorang pelanggan memilih untuk berbelanja, harus ada banyak operasi, seperti apa yang harus dibeli, berapa banyak uang, pembayaran, perubahan, dll. Fungsi -fungsi ini relatif terfragmentasi, jadi kami mengelola secara terpusat, sehingga mengabstraksi kelas ini dan menerapkan algoritma yang mendasari untuk opsi menu untuk belanja dan penyelesaian. Menu sebelumnya menyadari fungsi belanja dan penyelesaian dengan memanggil metode kelas ini, dan dapat kembali ke menu sebelumnya.
(8) Kelas Manajemen Hadiah: Fungsi terkait yang digunakan untuk menangani aktivitas lotre. Alasan keberadaan kelas ini pada dasarnya sama dengan yang ada di (6) dan (7). Kelas ini secara seragam mengelola aktivitas lotre. Menu sebelumnya hanya perlu memanggil metode kelas ini untuk mewujudkan fungsi lotre.
(9) Kelas Hadiah: Digunakan untuk mengelola hadiah. Karena sesi lotere dirancang, hadiah pasti diperlukan. Jadi hadiah macam apa yang akan kita berikan? Kami tidak dapat mencantumkan setiap hadiah secara detail. Ini sangat berlebihan dan merepotkan, jadi kami hanya mengabstraksikan kelas hadiah dan menyimpan beberapa atribut hadiah: nama dan harga hadiah menjadi variabel anggota kelas. Kemudian kita dapat dengan mudah mengelola kelas. Jika hadiah diperlukan, buat objek hadiah baru secara langsung, lalu ubah dan kelola atribut objek. Implementasi ini mirip dengan antarmuka, tetapi sangat berbeda dari antarmuka dan memiliki fungsi yang serupa.
Singkatnya, kelas -kelas di atas disarikan setelah dibagi menjadi beberapa modul fungsional, dan beberapa tempat tidak selalu masuk akal. Mereka terutama perlu melihat persyaratan dan merumuskan rencana yang berbeda sesuai dengan kebutuhan yang berbeda. Di sini, saya ingin menekankan "kelas hadiah" lagi. Desain kelas ini sangat konsisten dengan ide yang berorientasi objek. Misalnya, jika banyak hadiah diperlukan dalam sistem belanja, seperti ponsel, komputer, catu daya seluler, dll, maka jika kita menulis hadiah ini satu per satu, kode sistem akan sangat berlebihan. Karena atribut hadiah pada dasarnya sama, kita dapat mengabstraksikannya ke dalam kelas, sehingga kita hanya dapat mendefinisikan satu objek ketika kita membutuhkan hadiah, dan kemudian memberikan atribut tertentu. Misalnya, jika kita membutuhkan ponsel atau komputer, maka kita hanya perlu objek kelas hadiah baru, dan kemudian mengatur atributnya ke ponsel saat kita membutuhkan ponsel, mengatur atributnya ke komputer ketika kita membutuhkan komputer, dan mengatur apa pun yang kita butuhkan. Ini membuat kode kami disederhanakan dan strukturnya lebih jelas. Dalam sistem yang lebih kompleks, sebenarnya lebih masuk akal untuk menggunakan antarmuka untuk mengimplementasikan hadiah, sehingga kategori hadiah yang berbeda dapat diimplementasikan sesuai dengan antarmuka, sehingga memenuhi kebutuhan yang berbeda. Ini mirip dengan antarmuka USB di komputer kami. Dengan antarmuka ini, kita dapat mencolokkan berbagai perangkat periferal, dan kebenarannya serupa.
2. Hubungan dan proses antar kelas dalam sistem belanja (dilambangkan dalam bentuk grafik)
Gambar berikut menunjukkan hubungan antara 9 kelas ini saya menggunakan alat menggambar Microsoft Office Visio 2003.
Dari gambar di atas, kita dapat dengan jelas melihat hubungan antara berbagai jenis. Hubungan dan proses umum adalah sebagai berikut:
(1) Kelas StartMS adalah kelas startup, yang berisi metode utama. Kelas ini mendefinisikan objek dari kelas VerifyEqual dan kelas data untuk menyimpan informasi data dan verifikasi. Pada saat yang sama, kelas data berisi kelas manajer untuk menyimpan informasi akun pengguna yang disimpan sebelumnya. Kemudian, melalui logika tertentu dalam metode utama, metode showloginMenu () di kelas menu dipanggil untuk memproses menu tingkat pertama-proses modifikasi login;
(2) Jika login berhasil, hubungi metode showmainmenu () di kelas menu untuk menangani proses utama menu tingkat kedua-sistem belanja. Jika login gagal 3 kali, Anda akan langsung keluar dari sistem;
(3) Dalam metode showMainMenu () di kelas menu, dengan memilih opsi menu sekunder yang berbeda, metode showcustmMenu () di kelas menu dipanggil untuk menangani proses manajemen informasi pelanggan atau untuk menghubungi metode showendMenu () di kelas menu untuk menangani proses lotere, atau untuk memanggil metode calcprice () dalam kelas pembayaran untuk menangani proses perbelanjaan;
(4) Jika opsi manajemen informasi pelanggan di menu sekunder dipilih, metode showcustmMenu () di kelas menu akan dipanggil. Metode ini akan menghubungi berbagai metode di kelas custManagement untuk menangani berbagai operasi dalam manajemen informasi pelanggan;
(5) Jika opsi penyelesaian belanja di menu sekunder dipilih, metode calcprice () di kelas pembayaran akan dipanggil untuk menangani proses penyelesaian belanja. Perhatikan bahwa metode getDiscount () di kelas pembayaran digunakan untuk menghitung tingkat diskonto berdasarkan informasi anggota pelanggan;
(6) Jika opsi umpan balik yang tulus di menu sekunder dipilih, yaitu lotre, maka metode showendMenu () di kelas menu akan dipanggil. Metode ini akan menghubungi berbagai metode di kelas manajemen hadiah untuk menangani operasi lotre yang berbeda;
Perhatikan bahwa ada metode returnLastMenu () di kelas custManagement dan kelas manajemen hadiah, yang digunakan untuk kembali ke menu sebelumnya.
3. Implementasi Kode
Satu hal yang perlu diperhatikan adalah bahwa kode -kode ini harus ditempatkan di paket CN.itcast.
3.1 Kelas Mulai
paket cn.itcast; impor java.util.scanner; / ** * Kelas ini adalah kelas metode utama dari sistem ini, digunakan untuk memulai sistem belanja * * @author * */ kelas publik mulai {/ ** * Konstruktor kosong * */ startms publik () {}/ ** * Metode utama sistem * * @param args * Public static void main (string args []) {// membuat objek data yang ada dan ada data yang ada data.Initial (); // Buat objek menu menu menu menu = menu baru (); // Di sini informasi data yang ada diinisialisasi dikirim ke menu menu menu.setData (data.goodsname, data.goodsprice, data.custno, data.custbirth, data.custscore); // Tampilkan menu tingkat pertama, yaitu, menu login. // Bendera ini digunakan untuk menentukan apakah kesalahan operasi sistem telah terjadi. Ketika operasi tidak benar, bendera salah, sehingga dapat keluar dari sistem. Defaultnya tidak ada kesalahan boolean flag = true; // Memproses seluruh proses sistem do {// kesalahan operasi terjadi, keluar dari sistem jika (! Bendera) break; // Buat objek yang memverifikasi apakah pengguna masuk ke akun dan kata sandi sudah benar. Hanya objek yang dibuat di sini, dan metode verifikasi VerifyEqual tidak dijalankan. VerifikasiEqual = new verifyequal (); // Masukkan pilihan di pemindai menu tingkat pertama pemindai = pemindai baru (System.in); int i = scanner.nextInt (); // Buat tanggapan yang berbeda untuk pemilihan menu tingkat pertama. Perhatikan bahwa ini adalah sakelar penggunaan sakelar klasik (i) {case 1: // pengguna memilih "sistem login" // Tentukan penghitung, yang berarti bahwa pengguna hanya dapat mencoba 3 kali paling banyak, dan langsung keluar dari sistem dengan 3 kesalahan input int j = 3; // Proses pemrosesan untuk masuk ke sistem do {if (verifyequal.verify (data.manager.username, data.manager.password)) {// Pengguna masuk dengan sukses dan menu belanja tingkat kedua ditampilkan! Lai Lai menu.showmainmenu (); merusak; } if (j! = 1) {// Input pengguna salah dan belum mencapai 3 kali. Masuk kembali sistem.out.println ("/n nama pengguna dan kata sandi tidak cocok, mohon masukkan kembali:"); } else {// 3 upaya berakhir, atur bendera keluar, dan keluar dari do-while loop system.out.println ("/nyou tidak memiliki izin untuk memasukkan sistem! Terima kasih!"); bendera = false; merusak; } // Kurangi penghitung dengan 1 setiap kali Anda masuk untuk menunjukkan berapa kali J--; } while (true); merusak; Kasus 2: // Pengguna memilih "Ubah Informasi Administrator" jika (VerifyEqual.Verify (data.Manager.username, data.Manager.password)) {// Sebelum memasukkan informasi baru, Anda harus memverifikasi informasi asli. Ini berarti bahwa verifikasi telah berhasil. System.out.print ("Silakan masukkan nama pengguna baru:"); data.Manager.username = scanner.next (); System.out.print ("Harap masukkan kata sandi baru:"); data.Manager.password = scanner.next (); System.out.println ("Nama pengguna dan kata sandi telah diubah!"); // Informasi telah berhasil diubah. Pilih System Operasi berikutnya.out.println ("/nPlease SELECT, masukkan nomor:"); } else {// Verifikasi Informasi Gagal, atur Exit Flag System.out.println ("Maaf, Anda tidak memiliki izin untuk memodifikasinya!"); bendera = false; } merusak; Kasus 3: // Pengguna memilih "Keluar" System.out.println ("Terima kasih atas penggunaan Anda!"); System.exit (0); merusak; Default: // Input menu tingkat pertama salah, dan Anda perlu memilih kembali System.out.print ("/N input salah! Silakan pilih lagi dan masukkan nomor:"); merusak; }} while (flag); }}3.2 Kelas Data
paket cn.itcast; /*** Kelas data yang menyimpan data inisialisasi sistem belanja. Kelas ini hanya menyimpan informasi produk dan informasi pelanggan yang ada * * @author * * / data kelas publik { / ** * Konstruktor default, inisialisasi variabel. Karena mereka semua adalah objek array atau objek kelas, mereka semua perlu menggunakan data baru * */ publik () {goodsname = string baru [50]; Goodsprice = double baru [50]; custno = int baru [100]; custbirth = string baru [100]; custscore = int baru [100]; manajer = manajer baru (); } / *** Inisialisasi data kelas ini** / public void initial () { /*============================================================ =============================================================/ Goodname [0] = "Sneakers Addidas"; Goodsprice [0] = 880D; Goodsname [1] = "rok tenis kappa"; Goodsprice [1] = 200D; Goodsname [2] = "Racket Top"; Goodsprice [2] = 780D; Goodsname [3] = "T-Shirt Addidas"; Goodsprice [3] = 420.7799999999999997D; Goodsname [4] = "Nike Sneakers"; 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; } /*==================================================================================================================================================== ========================================================================================================================================================= ========================================================================================================================================================= ========================================================================================================================================================= Ulang Tahun Pelanggan Int CustScore Public []; // Poin Pelanggan Manajer Publik Manajer; // kelas administrator, hanya nama pengguna dan kata sandi administrator}3.3 Kelas Manajer
paket cn.itcast; / ** * kelas administrator, hanya menyimpan nama pengguna dan kata sandi administrator * * @author * */ manajer kelas publik {/ ** * Tetapkan nama pengguna dan kata sandi default * */ manajer publik () {username = "itcast"; kata sandi = "iTcast"; } /*=================================== Tentukan variabel yang dimiliki oleh ini class =========================================================================================================================================================================================== ============================================================================================================================================================= ============================================================================================================================================================= ==================================================================================================================================================3.4 Verifikasi Kelas yang Dipersua
paket cn.itcast; impor java.util.scanner; / *** Kelas yang memverifikasi apakah pengguna masuk adalah benar** @author**/ kelas publik verifikasi {/ *** Konstruktor kosong**/ public verifyequal () {}/ ** *** Metode untuk melakukan verifikasi* @param s Username yang benar untuk verifikasi* @param s Kata sandi yang benar untuk verifikasi* @rreturn* public {public Singe (public Singe (public sing (public sing (public sing (public sing (public sing (public s string* @param username system.out.print ("Silakan masukkan nama pengguna:"); Pemindai Pemindai = Pemindai Baru (System.in); String s2 = scanner.next (); // Masukkan kata sandi dari sistem pengguna.out.print ("Harap masukkan kata sandi:"); pemindai = pemindai baru (System.in); String s3 = scanner.next (); // Tentukan apakah informasi yang dimasukkan oleh pengguna konsisten dengan informasi yang ada pengembalian s2.equals && s1.equals (s3); }}3.5 Kelas Menu
paket cn.itcast; impor java.util.scanner; / ** * Kelas menu, digunakan untuk menampilkan semua level menu untuk pemilihan pengguna * * @author * */ menu kelas publik {/ ** * Konstruktor kosong * */ menu publik () {}/ ** * Setel informasi data di kelas menu * * @param sebagai * @param iklan * @param ai * @param ai * @param ai * @param @param @param @param * @param @1 ad [], int ai [], string as1 [], int ai1 []) {goodsname = as; Goodsprice = iklan; custno = ai; custbirth = as1; custscore = ai1; }/*** Tampilkan menu tingkat pertama, yaitu antarmuka login**/public void showloginMenu () {System.out.println ("/n/n/n/t/t/t/t disambut di sistem manajemen belanja ITCAST versi 1.0/n/n"); System.out.println("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *X * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *X * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/T/ System.out.println("/t/t/t/t/t 3. Exit/n/n"); System.out.println("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *X * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *X * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /** * Display the secondary menu, that is, the main menu of the Sistem. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *X * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *X * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *X * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Manajemen Informasi Pelanggan/n "); System.out.println ("/t/t/t/t 2. Penyelesaian belanja/n "); System.out.println ("/t/t/t/t 3. Sistem Balas/n "); Logout/n"); System.out.println("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *X * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *X * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Sistem pemindaian bendera untuk loop boolean bendera = false; Objek Penyelesaian Belanja dan Menangani Seluruh Proses Penyelesaian Belanja Pay = Pembayaran Baru (); // Pengguna memilih "if (s.equals (" 4 ") {// menampilkan menu tingkat pertama, dan akan kembali ke aliran menu tingkat pertama di kelas awal showloginMenu (). semua manajemen informasi pelanggan * */ public void showcustmMenu () {System.out.println ("Sistem Manajemen Belanja> Manajemen Informasi Pelanggan/ n"); * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *X * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *X * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *X * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * System.out.println ("/t/t/t 2. Tambahkan informasi pelanggan/n"); * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *X * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *X * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *X * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Sistem. Objek manajemen, data di sini masih merupakan data asli. Informasi "if (s.equals (" 2 ")) {custmanagement.add (); break;} // Pelanggan pilih" Modifikasi informasi pelanggan "if (s.equals (" 3 ")) {custManagement.modify (); break;} // pelanggan pilih" informasi pelanggan if (s.equals ("4")) {custMan manajemen. " (S.Equals ("N")) {showmainMenu (); System> true feedback/n"); System.out.println("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *X * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *X * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *. Lottery/n"); System.out.println("/t/t/t/t/t 3. Birthday greeting/n"); System.out.println("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *X * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *X * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *X * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Pemindai (System.in); (S.Equals (1 ")) {Hadiah Manajemen.Sendgoldencust (); memilih menu sebelumnya "if (s.equals (" n ")) {showmainMenu () /*====================================================. [];3.6 CustManagement类
package cn.itcast; impor 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: "); bendera = 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; merusak; } 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; impor 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; merusak; } 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; kembali 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; impor 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: "); bendera = 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 = ""; bendera boolean = false; for (int i = 0; i < custBirth.length; i++) if (custBirth[i] != null && custBirth[i].equals(s)) { s1 = (new StringBuilder()).append(s1).append(custNo[i]).append( "/n").toString(); bendera = 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 = ""; bendera boolean = false; for (int k = 0; k < custNo.length && custNo[k] != 0; k++) { // Compare the random number with the corresponding results of the customer membership number to determine whether a customer wins int j = (custNo[k] / 100) % 10; if (j == i) { s = (new StringBuilder()).append(s).append(custNo[k]) .append("/t").toString(); bendera = true; } } // Fixed prize, so there is no need for gifts if (flag) System.out.println((new StringBuilder()).append("Lucky customer gets MP3:") .append(s).toString()); else System.out.println("No lucky customers."); } // Return to the previous menu returnLastMenu(); } /** * Lucky big broadcast, the member with the highest points will be the lucky one, and the prize will be given * */ public void sendGoldenCust() { System.out.println("Shopping Management System> Lucky big broadcast/n/n"); int i = 0; int j = custScore[0]; for (int k = 0; k < custScore.length && custScore[k] != 0; k++) { // Find the member with the highest points if (custScore[k] > j) { j = custScore[k]; i = k; } } System.out.println((new StringBuilder()).append("The member with the highest points is: ").append( custNo[i]).append("/t").append(custBirth[i]).append("/t") .append(custScore[i]).toString()); // Create a gift class and set the gift information. The gift here is a fixed information Gift gift = new Gift(); gift.name = "Apple laptop"; gift.price = 12000D; System.out.print("Congratulations! Received a gift: "); System.out.println(gift); // Return to the previous menu returnLastMenu(); } /*================================================================================================================= ==================================================================================================================== =================================================================================================================== ==================================================================================================================== Customer's points}3.9 Gift类
package cn.itcast; /** * 用来存放真情回馈中的礼物的类*/ public class Gift { /** * 空构造方法* */ public Gift() { } /** * 根据礼物对象的变量返回礼物的全部信息* */ public String toString() { return (new StringBuilder()).append("一个价值¥").append(price) .append("的").append(name).toString(); } /*====================定义该类所拥有的变量====================*/ public String name ; // 礼物名字public double price; // 礼物价格}3.10 代码总结
从上面的9个类的代码来看,有一些需要注意的地方:
(1)在许多类中都定义了与Data中基本一样的成员变量,只是没有Manager对象而已,这是为了让数据一层层保存和传递,通过setData()方法实现,不过这种方法其实并不是很好,并且一般来说成员变量应该最好设置为私有的,这里这样的设计是为了操作方便,使系统更简单一些,安全性不好。
(2)注意到所有要进行字符串拼接的地方都使用JAVA中的StringBuilder类,这是为了高效处理字符串拼接,防止String类带来的拼接数据冗余。
(3)这些设计中的流程并不是非常合理,大家可以自己的需要进行修改。
(4)代码中基本上没有考虑异常时的处理,所以当输入时出现错误的时候,普通错误可以进行重新输入,但是如果出现不匹配等错误,直接会出现异常,从而退出系统,这些也是本设计的缺陷,可以通过正则表达式等来完善一些。
总之,给出的代码仅供参考,大家可以根据需要进行修改,这些代码都是经过验证的,可以直接运行。
4. Ringkasan
这个设计只是为了说明一些基本的设计思想和设计理念,以及设计过程中需要考虑的问题,主要还是为了说明怎样用面向对象的思想去解决现实生活中的问题,所以设计相对简单,不过希望大家可以通过这个设计理解这些基本的思想,从而帮助大家理想面向对象的基本思想。
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. Terima kasih.