Latihan - Meninjau dan menguji aplikasi konsol C# menggunakan data sampel
Dalam latihan ini, Anda meninjau dan menguji kode dalam proyek Starter, mengisolasi dan memperbaiki masalah logika, lalu memverifikasi bahwa aplikasi yang diperbarui berfungsi seperti yang diharapkan.
Anda menyelesaikan tugas-tugas berikut selama latihan ini:
Ulasan kode: tinjau konten file Program.cs.
Program.cs menyertakan bagian kode berikut:
- Pernyataan tingkat atas: pernyataan tingkat atas mensimulasikan serangkaian transaksi menggunakan array
testDataatau jumlah transaksi yang dihasilkan secara acak yang lebih besar. - LoadTillEachMorning:
LoadTillEachMorningmetode ini digunakan untuk mengonfigurasi mesin kasir dengan jumlah lembaran uang yang telah ditentukan sebelumnya dalam setiap denominasi. - MakeChange: metode
MakeChangeini digunakan untuk mengelola laci kas selama transaksi pembelian. - LogTillStatus: metode
LogTillStatusini digunakan untuk menampilkan jumlah lembaran uang dari setiap denominasi yang saat ini ada di laci kas. - TillAmountSummary: metode
TillAmountSummarydigunakan untuk menampilkan pesan yang menunjukkan jumlah uang tunai di laci kas.
- Pernyataan tingkat atas: pernyataan tingkat atas mensimulasikan serangkaian transaksi menggunakan array
Pengujian awal: verifikasi bahwa
MakeChangeberhasil menyeimbangkan uang sampai saat menggunakantestDataarray untuk mensimulasikan transaksi.Penelusuran kesalahan kode: mengisolasi dan memperbaiki masalah logika yang diekspos saat menggunakan data yang dihasilkan secara acak.
Uji verifikasi: lakukan pengujian verifikasi pada kode yang Anda kembangkan dalam latihan ini.
Tinjau isi file Program.cs
Dalam tugas ini, Anda menyelesaikan panduan kode proyek Starter. File Program.cs berisi aplikasi yang mensimulasikan kondisi untuk transaksi harian. Aplikasi memanggil metode MakeChange untuk mengelola kas selama setiap transaksi. Metode lain digunakan untuk menginisialisasi till dan menghasilkan pesan pelaporan.
Pastikan folder GuidedProject terbuka di Visual Studio Code.
Dalam tampilan EXPLORER, perluas folder GuidedProject dan Starter .
Folder Starter berisi aplikasi sampel untuk modul proyek Terpandu ini.
Buka file Program.cs di Editor Visual Studio Code.
Pada menu Tampilan, pilih Palet Perintah.
Pada prompt perintah, masukkan .net: g lalu pilih .NET: Hasilkan Aset untuk Build dan Debug.
Pada perintah Pilih proyek yang akan diluncurkan, pilih proyek Starter.
File launch.json yang dibuat akan menyertakan konfigurasi untuk proyek Starter.
Luangkan beberapa menit untuk meninjau pernyataan tingkat atas untuk aplikasi ini:
/* This application manages transactions at a store check-out line. The check-out line has a cash register, and the register has a cash till that is prepared with a number of bills each morning. The till includes bills of four denominations: $1, $5, $10, and $20. The till is used to provide the customer with change during the transaction. The item cost is a randomly generated number between 2 and 49. The customer offers payment based on an algorithm that determines a number of bills in each denomination. Each day, the cash till is loaded at the start of the day. As transactions occur, the cash till is managed in a method named MakeChange (customer payments go in and the change returned to the customer comes out). A separate "safety check" calculation that's used to verify the amount of money in the till is performed in the "main program". This safety check is used to ensure that logic in the MakeChange method is working as expected. */ string? readResult = null; bool useTestData = true; Console.Clear(); int[] cashTill = new int[] { 0, 0, 0, 0 }; int registerCheckTillTotal = 0; // registerDailyStartingCash: $1 x 50, $5 x 20, $10 x 10, $20 x 5 => ($350 total) int[,] registerDailyStartingCash = new int[,] { { 1, 50 }, { 5, 20 }, { 10, 10 }, { 20, 5 } }; int[] testData = new int[] { 6, 10, 17, 20, 31, 36, 40, 41 }; int testCounter = 0; LoadTillEachMorning(registerDailyStartingCash, cashTill); registerCheckTillTotal = registerDailyStartingCash[0, 0] * registerDailyStartingCash[0, 1] + registerDailyStartingCash[1, 0] * registerDailyStartingCash[1, 1] + registerDailyStartingCash[2, 0] * registerDailyStartingCash[2, 1] + registerDailyStartingCash[3, 0] * registerDailyStartingCash[3, 1]; // display the number of bills of each denomination currently in the till LogTillStatus(cashTill); // display a message showing the amount of cash in the till Console.WriteLine(TillAmountSummary(cashTill)); // display the expected registerDailyStartingCash total Console.WriteLine($"Expected till value: {registerCheckTillTotal}\n\r"); var valueGenerator = new Random((int)DateTime.Now.Ticks); int transactions = 10; if (useTestData) { transactions = testData.Length; } while (transactions > 0) { transactions -= 1; int itemCost = valueGenerator.Next(2, 20); if (useTestData) { itemCost = testData[testCounter]; testCounter += 1; } int paymentOnes = itemCost % 2; // value is 1 when itemCost is odd, value is 0 when itemCost is even int paymentFives = (itemCost % 10 > 7) ? 1 : 0; // value is 1 when itemCost ends with 8 or 9, otherwise value is 0 int paymentTens = (itemCost % 20 > 13) ? 1 : 0; // value is 1 when 13 < itemCost < 20 OR 33 < itemCost < 40, otherwise value is 0 int paymentTwenties = (itemCost < 20) ? 1 : 2; // value is 1 when itemCost < 20, otherwise value is 2 // display messages describing the current transaction Console.WriteLine($"Customer is making a ${itemCost} purchase"); Console.WriteLine($"\t Using {paymentTwenties} twenty dollar bills"); Console.WriteLine($"\t Using {paymentTens} ten dollar bills"); Console.WriteLine($"\t Using {paymentFives} five dollar bills"); Console.WriteLine($"\t Using {paymentOnes} one dollar bills"); // MakeChange manages the transaction and updates the till string transactionMessage = MakeChange(itemCost, cashTill, paymentTwenties, paymentTens, paymentFives, paymentOnes); // Backup Calculation - each transaction adds current "itemCost" to the till if (transactionMessage == "transaction succeeded") { Console.WriteLine($"Transaction successfully completed."); registerCheckTillTotal += itemCost; } else { Console.WriteLine($"Transaction unsuccessful: {transactionMessage}"); } Console.WriteLine(TillAmountSummary(cashTill)); Console.WriteLine($"Expected till value: {registerCheckTillTotal}\n\r"); Console.WriteLine(); } Console.WriteLine("Press the Enter key to exit"); do { readResult = Console.ReadLine(); } while (readResult == null);Kode pernyataan tingkat atas menyelesaikan tugas berikut:
- Mengonfigurasi data aplikasi dan variabel lingkungan yang digunakan untuk menguji
MakeChangemetode . - Memanggil metode
LoadTillEachMorning(),LogTillStatus(), danTillAmountSummary()untuk menyiapkan laci kas dan mencetak pesan status ke konsol. - Menggunakan perulangan
whileuntuk mensimulasikan serangkaian transaksi. - Memanggil metode
MakeChangedari dalam blok kode perulanganwhile. - Melaporkan status uang sampai setelah setiap transaksi.
Catatan
Pernyataan tingkat tinggi termasuk pernyataan
Console.ReadLine(). Filelaunch.jsonperlu diperbarui sebelum debugging.- Mengonfigurasi data aplikasi dan variabel lingkungan yang digunakan untuk menguji
Luangkan waktu sejenak untuk meninjau metode
LoadTillEachMorning().static void LoadTillEachMorning(int[,] registerDailyStartingCash, int[] cashTill) { cashTill[0] = registerDailyStartingCash[0, 1]; cashTill[1] = registerDailyStartingCash[1, 1]; cashTill[2] = registerDailyStartingCash[2, 1]; cashTill[3] = registerDailyStartingCash[3, 1]; }Luangkan waktu beberapa menit untuk meninjau
MakeChange()metode .static string MakeChange(int cost, int[] cashTill, int twenties, int tens = 0, int fives = 0, int ones = 0) { string transactionMessage = ""; cashTill[3] += twenties; cashTill[2] += tens; cashTill[1] += fives; cashTill[0] += ones; int amountPaid = twenties * 20 + tens * 10 + fives * 5 + ones; int changeNeeded = amountPaid - cost; if (changeNeeded < 0) transactionMessage = "Not enough money provided."; Console.WriteLine("Cashier Returns:"); while ((changeNeeded > 19) && (cashTill[3] > 0)) { cashTill[3]--; changeNeeded -= 20; Console.WriteLine("\t A twenty"); } while ((changeNeeded > 9) && (cashTill[2] > 0)) { cashTill[2]--; changeNeeded -= 10; Console.WriteLine("\t A ten"); } while ((changeNeeded > 4) && (cashTill[1] > 0)) { cashTill[2]--; changeNeeded -= 5; Console.WriteLine("\t A five"); } while ((changeNeeded > 0) && (cashTill[0] > 0)) { cashTill[0]--; changeNeeded--; Console.WriteLine("\t A one"); } if (changeNeeded > 0) transactionMessage = "Can't make change. Do you have anything smaller?"; if (transactionMessage == "") transactionMessage = "transaction succeeded"; return transactionMessage; }Metode
MakeChangemengelola laci kas selama setiap transaksi pembelian. Proses transaksi bergantung pada sumber daya dan kondisi berikut:Transaksi tunai: Metode
MakeChangemenerima pembayaran tunai dari pelanggan dan kemudian menentukan berapa banyak tagihan dari setiap denominasi yang harus dikembalikan kepada pelanggan dalam perubahan.MakeChangeharus terlebih dahulu memastikan bahwa pelanggan telah memberikan cukup uang untuk menutupi transaksi. Jika pembayaran cukup, proses pengembalian dimulai dengan denominasi uang kertas terbesar dan berlanjut ke denominasi terkecil. Pada setiap tahap,MakeChangememastikan bahwa denominasi saat ini kurang dari kembalian yang harus diberikan.MakeChangejuga memastikan bahwa uang kertas dengan denominasi yang dibutuhkan tersedia di laci kasir sebelum menambahkannya ke dalam kembalian yang diberikan kepada pelanggan.Parameter input: Metode ini
MakeChangemenggunakan parameter input berikut:- Bilangan bulat yang mewakili biaya item yang dibeli:
itemCost - Array bilangan bulat yang berisi jumlah lembaran uang di laci kasir untuk setiap denominasi:
cashTill - Pembayaran yang ditawarkan oleh pelanggan, di mana jumlah tagihan untuk setiap denominasi ditentukan secara terpisah:
paymentTwenties, ,paymentTens,paymentFivespaymentOnes
- Bilangan bulat yang mewakili biaya item yang dibeli:
Uang tunai yang tersedia di laci: Uang kertas yang ditawarkan sebagai pembayaran oleh pelanggan harus disertakan dalam uang kertas setiap denominasi yang tersedia untuk memberikan kembalian.
Perubahan berutang kepada pelanggan: Perubahan yang terutang kepada pelanggan dihitung menggunakan jumlah yang dibayarkan oleh pelanggan dikurangi biaya item.
Kurang bayar: Jika pelanggan belum memberikan pembayaran yang memadai,
MakeChangemengembalikan pesan deskriptif, dan transaksi dibatalkan.Laci kas tidak mencukupi: Jika laci kas tidak dapat memberikan uang kembalian yang tepat,
MakeChangemenampilkan pesan deskriptif, dan transaksi dibatalkan.
Luangkan waktu sejenak untuk meninjau metode
LogTillStatus().static void LogTillStatus(int[] cashTill) { Console.WriteLine("The till currently has:"); Console.WriteLine($"{cashTill[3] * 20} in twenties"); Console.WriteLine($"{cashTill[2] * 10} in tens"); Console.WriteLine($"{cashTill[1] * 5} in fives"); Console.WriteLine($"{cashTill[0]} in ones"); Console.WriteLine(); }Metode
LogTillStatusini menggunakan larikcashTilluntuk melaporkan isi till saat ini.Luangkan waktu sejenak untuk meninjau metode
TillAmountSummary().static string TillAmountSummary(int[] cashTill) { return $"The till has {cashTill[3] * 20 + cashTill[2] * 10 + cashTill[1] * 5 + cashTill[0]} dollars"; }Metode ini menggunakan array
TillAmountSummaryuntuk menghitung saldo kascashTillyang tersedia saat ini di dalam kasir.
Itu menyelesaikan tinjauan Anda tentang proyek kode yang ada.
Verifikasi bahwa MakeChange berhasil mengelola uang saat menggunakan testData array
Dalam tugas ini, Anda mensimulasikan transaksi menggunakan array testData dan memverifikasi bahwa MakeChange berhasil menyeimbangkan saldo kas.
Pada menu Visual Studio Code Run, pilih Mulai Debugging.
Perhatikan bahwa kesalahan
IOExceptionterjadi.KONSOL DEBUG tidak mendukung
Console.Clear()atauConsole.ReadLine()metode. Anda perlu memperbarui file launch.json sebelum debugging.Pada toolbar Debug, pilih Hentikan.
Gunakan tampilan EXPLORER untuk membuka file launch.json.
Dalam file launch.json, perbarui
consoleatribut sebagai berikut:// For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console "console":"integratedTerminal",Nilai default untuk
consoleatribut adalahinternalConsole, yang selaras dengan panel KONSOL DEBUG. Sayangnya, panel DEBUG CONSOLE tidak mendukung beberapa metode konsol. PengaturanintegratedTerminalselaras dengan panel TERMINAL, yang mendukung input dan output konsol.Simpan perubahan Anda ke file launch.json.
Pada menu Visual Studio Code Run, pilih Mulai Debugging.
Tinjau output yang dihasilkan oleh aplikasi di panel TERMINAL.
Beralih dari panel DEBUG CONSOLE ke panel TERMINAL untuk meninjau output.
Perhatikan bahwa
MakeChangeberhasil menyeimbangkan kas ketika menggunakan arraytestDatadalam mensimulasikan transaksi.Anda akan melihat baris berikut yang tercantum di bagian bawah output yang dilaporkan:
The till has 551 dollars Expected till value: 551 Press the Enter key to exitPerhatikan bahwa nilai yang dilaporkan dan diharapkan hingga keduanya adalah 551.
Untuk keluar dari aplikasi, tekan Enter.
Mengidentifikasi dan memperbaiki masalah logika
Dalam tugas ini, Anda menggunakan transaksi simulasi untuk mengekspos masalah logika kode, lalu menggunakan alat debugger Visual Studio Code untuk mengisolasi dan memperbaiki masalah.
Untuk menjalankan kode menggunakan transaksi yang dihasilkan secara acak, ubah nilai yang ditetapkan ke
useTestDatafalse.Anda dapat menemukan variabel di
useTestDatadekat bagian atas pernyataan tingkat atas.Simpan file Program.cs, lalu jalankan aplikasi di debugger.
Tinjau output di panel TERMINAL tersebut.
Perhatikan ketidaksesuaian dalam saldo laci kas.
Saldo akhir kas yang dihitung oleh
MakeChangedan saldo yang ada di laporan tingkat atas dicantumkan di bagian bawah keluaran. Contoh:Transaction successfully completed. The till has 379 dollars Expected till value: 434 Press the Enter key to exitCatatan
Aplikasi ini secara acak menghasilkan biaya pembelian item. Oleh karena itu, nilai "till" yang dilaporkan dalam output Anda berbeda.
Untuk keluar dari aplikasi, tekan Enter.
Tutup panel TERMINAL.
Mendebug kode
Dalam tugas ini, Anda menggunakan alat debugger Visual Studio Code untuk mengisolasi lalu memperbaiki masalah logika.
Di dekat akhir pernyataan tingkat atas, temukan baris kode berikut:
Console.WriteLine();Atur titik henti pada baris kode yang dipilih.
Pada menu Visual Studio Code Run, pilih Mulai Debugging.
Perhatikan bahwa eksekusi kode berhenti di titik henti.
Pada toolbar Debug controls, pilih Masuk.
Tinjau output di panel TERMINAL tersebut.
Jika nilai yang dilaporkan dan diharapkan sama, pilih Lanjutkan pada toolbar kontrol debug.
Ulangi langkah sebelumnya sampai Anda melihat ada perbedaan antara nilai yang dilaporkan dan nilai yang diharapkan.
Setelah Anda melihat perbedaan, luangkan waktu satu menit untuk memeriksa detail transaksi.
Perhatikan bahwa uang tunai yang dilaporkan diterima dan uang kembalian sudah benar, tetapi kasir kurang lima dolar.
Kekurangan ini menunjukkan bahwa pembaruan array
cashTilldilakukan secara tidak benar, meskipun pelaporannya sudah benar.Hentikan sesi debug dan tutup panel TERMINAL.
Gulir ke bagian terbawah dari
MakeChangemetode.Pernyataan
whileyang digunakan untuk "membuat perubahan" terletak di akhirMakeChangemetode.whileTinjau blok kode pernyataan yang digunakan untuk membuat perubahan.Karena laci kas kekurangan lima dolar, masalah kemungkinan berada di blok kode
whileyang digunakan untuk mengembalikan uang kertas lima dolar.Perhatikan kode berikut:
while ((changeNeeded > 4) && (cashTill[1] > 0)) { cashTill[2]--; changeNeeded -= 5; Console.WriteLine("\t A five"); }Array
cashTill[]digunakan untuk menyimpan jumlah tagihan dari setiap denominasi yang saat ini tersedia. Elemen array1digunakan untuk mengelola jumlah lembaran lima dolar di laci kasir. Ekspresi dalamwhilepernyataan mengacu padacashTill[1]dengan benar. Namun, pernyataan di dalam blok kode mengurangicashTill[2]alih-alihcashTill[1]. Menentukan nilai indeks2berarti bahwa uang kertas sepuluh dolar diambil dari laci kas alih-alih uang kertas lima dolar.whilePerbarui blok kode sebagai berikut:while ((changeNeeded > 4) && (cashTill[1] > 0)) { cashTill[1]--; changeNeeded -= 5; Console.WriteLine("\t A five"); }Simpan Program.cs sebagai file.
Periksa pekerjaan Anda
Dalam tugas ini, Anda menjalankan aplikasi dan memverifikasi bahwa kode yang diperbarui berfungsi seperti yang dimaksudkan.
Pada menu Visual Studio Code Run , pilih Hapus Semua Titik Henti.
Pada menu Jalankan, pilih Mulai Debug.
Tinjau output di panel TERMINAL tersebut.
Verifikasi bahwa nilai kas yang dilaporkan sama dengan nilai kas yang diharapkan.
Saldo akhir kas yang dihitung oleh
MakeChangedan saldo yang ada di laporan tingkat atas dicantumkan di bagian bawah keluaran. Contoh:Transaction successfully completed. The till has 452 dollars Expected till value: 452 Press the Enter key to exitAplikasi ini secara acak menghasilkan biaya pembelian item. Oleh karena itu, nilai "till" yang dilaporkan dalam output Anda berbeda. Selama dua nilai sama, Anda telah berhasil memperbaiki masalah logika.