លំហសិក្សាកម្ពុជា
V1.0
មេរៀនទី ២ នេះផ្ដោតលើការរំលឹកចំណេះដឹង Python សំខាន់ៗដែលត្រូវប្រើសម្រាប់ការរៀបចំទិន្នន័យ Blockchain។ បន្ទាប់ពីមេរៀនទី ១ ដែលនិស្សិតបានរៀនអំពី Python Console Application, input(), print(), conditions និង loops មេរៀននេះបន្តទៅកាន់ functions, lists និង dictionaries។ គោលបំណងសំខាន់គឺឱ្យនិស្សិតយល់ថា Blockchain មិនចាប់ផ្ដើមពី Block ភ្លាមៗទេ ប៉ុន្តែចាប់ផ្ដើមពី Transaction ដែលជាកំណត់ត្រាទិន្នន័យមួយ។ ក្នុង Project នេះ Transaction មួយអាចតំណាងឱ្យ Certificate Record មួយ ដែលមាន Certificate ID, Student Name, Program, Certificate Title, Issue Date និង Status។ Python Documentation ពន្យល់ថា list គឺជារចនាសម្ព័ន្ធទិន្នន័យសម្រាប់រក្សាទុកធាតុជាច្រើន ហើយ dictionary គឺជារចនាសម្ព័ន្ធ key-value ដែលសមស្របសម្រាប់តំណាងឱ្យកំណត់ត្រាទិន្នន័យមួយ [1]. Blockchain ក៏ប្រើ Transaction ជាធាតុមូលដ្ឋានក្នុង ledger ដែលបន្ទាប់មកត្រូវបានដាក់ចូលក្នុង Block [2]. ដូច្នេះ មេរៀននេះជាជំហានសំខាន់សម្រាប់បង្កើត Certificate Transaction Manager មុននឹងបន្តទៅ CSV Storage, Hashing និង Block Creation។
| ចំណុច | ព័ត៌មាន |
|---|---|
| មុខវិជ្ជា | Blockchain Technology Using Python Console and CSV |
| មេរៀន | មេរៀនទី ២ |
| ចំណងជើង | Python Review II and Blockchain Data Structure |
| ប្រធានបទសំខាន់ | Functions, Lists, Dictionaries, and Blockchain Transactions |
| កម្រិតនិស្សិត | Beginner to Intermediate |
| ភាសាសរសេរកម្មវិធី | Python |
| ប្រភេទកម្មវិធី | Console Application |
| ឧបករណ៍ប្រើប្រាស់ | Python, VS Code, Terminal / Command Prompt |
| លទ្ធផលរំពឹងទុក | និស្សិតអាចបង្កើត Certificate Transaction Manager ក្នុង Console |
| ទិសដៅ Project | Console-Based Blockchain Student Certificate Verification System |
បន្ទាប់ពីបញ្ចប់មេរៀននេះ និស្សិតគួរអាច៖
ក្នុង Final Project និស្សិតនឹងបង្កើតប្រព័ន្ធ៖
Design and Implementation of a Console-Based Blockchain Student Certificate Verification System Using Python and CSV File Storage
មុនពេលប្រព័ន្ធនេះអាចបង្កើត Blockchain បាន វាត្រូវការរចនាសម្ព័ន្ធទិន្នន័យសម្រាប់រក្សាទុក Certificate Records ជាមុន។ Certificate Record មួយនឹងក្លាយជា Transaction មួយ។ Transaction ជាច្រើនអាចត្រូវបានដាក់ក្នុង Block មួយ។ Block ជាច្រើនភ្ជាប់គ្នាដោយ Hash ហើយក្លាយជា Blockchain។
ដូច្នេះ Flow សិក្សាគឺ៖
Certificate Record
↓
Certificate Transaction
↓
List of Transactions
↓
Block
↓
Blockchain
↓
Validation and Tamper Detection

រូបភាពនេះគួរបង្ហាញពីលំហូរទិន្នន័យពី Certificate Record ទៅជា Certificate Transaction ហើយបន្តទៅកាន់ Block និង Blockchain។ វាជួយឱ្យនិស្សិតយល់ថា Blockchain មិនចាប់ផ្ដើមពី Chain ទេ ប៉ុន្តែចាប់ផ្ដើមពីកំណត់ត្រាទិន្នន័យតូចៗដែលហៅថា Transaction។
Function គឺជាប្លុកកូដមួយដែលមានឈ្មោះ និងអាចហៅប្រើឡើងវិញបាន។ នៅពេលកម្មវិធីកាន់តែធំ ការសរសេរកូដទាំងអស់នៅកន្លែងតែមួយនឹងធ្វើឱ្យពិបាកអាន ពិបាកកែប្រែ និងពិបាកសាកល្បង។ Function ជួយបែងចែកកម្មវិធីទៅជាផ្នែកតូចៗ។
ឧទាហរណ៍៖
def show_title(): print("=== Certificate Transaction Manager ===") show_title()
ក្នុងឧទាហរណ៍នេះ show_title() គឺជា Function មួយ។ ពេលយើងហៅ show_title() កម្មវិធីនឹងបង្ហាញចំណងជើង។
Python Tutorial ពន្យល់ថា Python មានរចនាសម្ព័ន្ធទិន្នន័យ និងវិធីសាស្ត្របង្កើតកូដមានប្រសិទ្ធភាព ដែលសមស្របសម្រាប់អ្នកចង់បង្កើតកម្មវិធីមានរចនាសម្ព័ន្ធ [1].
ក្នុង Certificate Verification Project យើងនឹងមានមុខងារជាច្រើនដូចជា៖
បើសរសេរកូដទាំងអស់នៅកន្លែងតែមួយ វានឹងស្មុគស្មាញ។ ដូច្នេះយើងត្រូវបំបែកជា Functions។
| Function | តួនាទី |
|---|---|
add_transaction() | បញ្ចូល Certificate Transaction ថ្មី |
show_transactions() | បង្ហាញ Transactions ទាំងអស់ |
search_transaction() | ស្វែងរក Certificate តាម Certificate ID |
count_transactions() | រាប់ចំនួន Transactions |
show_menu() | បង្ហាញ Menu របស់កម្មវិធី |

រូបភាពនេះគួរបង្ហាញថា កម្មវិធីមួយអាចបែងចែកជាមុខងារតូចៗដូចជា Add, Show, Search និង Count។ វាជួយឱ្យនិស្សិតយល់ថា Function ជួយធ្វើឱ្យកូដមានរចនាសម្ព័ន្ធល្អ ងាយអាន ងាយសាកល្បង និងងាយកែប្រែ។
def add_two_numbers(): number1 = int(input("Enter first number: ")) number2 = int(input("Enter second number: ")) total = number1 + number2 print("Total:", total) add_two_numbers()
def add_two_numbers(): បង្កើត Function ថ្មី។
input() ទទួលលេខពីអ្នកប្រើប្រាស់។
int() បម្លែងអក្សរទៅជាចំនួនគត់។
total = number1 + number2 គណនាផលបូក។
print() បង្ហាញលទ្ធផល។
add_two_numbers() ហៅ Function ឱ្យដំណើរការ។
List គឺជារចនាសម្ព័ន្ធទិន្នន័យក្នុង Python ដែលអាចរក្សាទុកធាតុជាច្រើននៅក្នុង Variable តែមួយ។ List ត្រូវបានសរសេរដោយប្រើសញ្ញា [].
ឧទាហរណ៍៖
students = ["Sok Dara", "Chan Vicheka", "Kim Sopheak"] print(students)
List សមស្របសម្រាប់រក្សាទុក Certificate Transactions ជាច្រើន។ Python Documentation ពន្យល់ថា List មាន methods ជាច្រើន ដូចជា append() ដែលអាចប្រើសម្រាប់បន្ថែមធាតុថ្មីទៅចុង List [1].
ក្នុង Project របស់យើង Transaction មួយគឺជាកំណត់ត្រា Certificate មួយ។ Transactions ជាច្រើនអាចរក្សាទុកក្នុង List មួយ។
ឧទាហរណ៍៖
transactions = [] transactions.append("CERT-FDE-001") transactions.append("CERT-FDE-002") print(transactions)
លទ្ធផល៖
['CERT-FDE-001', 'CERT-FDE-002']
ប៉ុន្តែការរក្សាទុកតែ Certificate ID មិនគ្រប់គ្រាន់ទេ។ យើងត្រូវការរក្សាទុកព័ត៌មានពេញលេញ ដូចជា Student Name, Program, Certificate Title, Issue Date និង Status។ ដូច្នេះយើងត្រូវប្រើ Dictionary។
Dictionary គឺជារចនាសម្ព័ន្ធទិន្នន័យដែលរក្សាទុកទិន្នន័យជា Key និង Value។ Dictionary សមស្របសម្រាប់តំណាងឱ្យ Record មួយ ព្រោះវាអាចដាក់ឈ្មោះ Field បានច្បាស់។
ឧទាហរណ៍៖
certificate = { "certificate_id": "CERT-FDE-001", "student_name": "Sok Dara", "program": "Digital Economy" } print(certificate)
Python Documentation ពន្យល់ថា Dictionary ត្រូវបានសរសេរដោយប្រើ key:value pairs ហើយសមស្របសម្រាប់រក្សាទុកទិន្នន័យដែលមានទំនាក់ទំនងជាឈ្មោះ និងតម្លៃ [1].
ក្នុង Blockchain Project របស់យើង Certificate Transaction មួយអាចត្រូវបានសរសេរជា Dictionary ដូចខាងក្រោម៖
certificate_transaction = { "certificate_id": "CERT-FDE-001", "student_name": "Sok Dara", "program": "Digital Economy", "certificate_title": "Blockchain Technology Completion", "issue_date": "2026-08-25", "status": "Valid" }
| Field | ការពន្យល់ |
|---|---|
certificate_id | លេខសម្គាល់វិញ្ញាបនបត្រ |
student_name | ឈ្មោះនិស្សិត |
program | កម្មវិធីសិក្សា |
certificate_title | ចំណងជើងវិញ្ញាបនបត្រ |
issue_date | ថ្ងៃចេញវិញ្ញាបនបត្រ |
status | ស្ថានភាព Valid, Invalid ឬ Revoked |

រូបភាពនេះគួរបង្ហាញ Certificate Transaction មួយជាទម្រង់ Dictionary ដែលមាន key-value pairs។ វាជួយឱ្យនិស្សិតយល់ថា Dictionary អាចតំណាងឱ្យកំណត់ត្រាទិន្នន័យមួយបានច្បាស់ ហើយកំណត់ត្រានេះនឹងក្លាយជា Transaction មុនពេលដាក់ចូលក្នុង Block។
Transaction គឺជាកំណត់ត្រាទិន្នន័យមួយដែលត្រូវបានបញ្ចូលទៅក្នុងប្រព័ន្ធ Blockchain។ ក្នុង Cryptocurrency Transaction អាចមាន sender, receiver និង amount។ ប៉ុន្តែក្នុង Project របស់យើង Transaction មួយគឺជា Certificate Record មួយ។
NIST Blockchain Technology Overview ពន្យល់ថា Blockchain អនុញ្ញាតឱ្យអ្នកប្រើកត់ត្រា Transactions ក្នុង Shared Ledger ហើយក្រោមការដំណើរការធម្មតា Transaction មិនអាចត្រូវបានកែប្រែក្រោយពេល published បានទេ [2].
ក្នុង Project នេះ Transaction មួយមានន័យថា៖
កំណត់ត្រាវិញ្ញាបនបត្រមួយ ដែលត្រូវបានរៀបចំសម្រាប់បញ្ចូលទៅក្នុង Blockchain។
ឧទាហរណ៍៖
transaction = { "certificate_id": "CERT-FDE-001", "student_name": "Sok Dara", "program": "Digital Economy", "certificate_title": "Blockchain Technology Completion", "issue_date": "2026-08-25", "status": "Valid" }
ក្នុងមេរៀនបន្ទាប់ៗ Transaction នេះនឹងត្រូវបាន៖

រូបភាពនេះគួរបង្ហាញលំហូរពីការបញ្ចូល Certificate Data ទៅជា Transaction ហើយបន្តទៅ Save, Hash និង Add to Block។ វាជួយបញ្ជាក់ថា Transaction គឺជាជំហានមូលដ្ឋានមួយមុនការបង្កើត Blockchain។
បង្កើត Certificate Transaction មួយដោយប្រើ Python Dictionary។
certificate_transaction = { "certificate_id": "CERT-FDE-001", "student_name": "Sok Dara", "program": "Digital Economy", "certificate_title": "Blockchain Technology Completion", "issue_date": "2026-08-25", "status": "Valid" } print("=== Certificate Transaction ===") print(certificate_transaction)
កូដនេះបង្កើត Dictionary មួយដែលតំណាងឱ្យ Certificate Transaction។ Field នីមួយៗមានឈ្មោះច្បាស់។ ការប្រើ Dictionary ធ្វើឱ្យទិន្នន័យងាយអាន និងងាយប្រើសម្រាប់ Hashing នៅមេរៀនបន្ទាប់។
បង្កើត List សម្រាប់រក្សាទុក Certificate Transactions ជាច្រើន។
transactions = [] def add_transaction(): certificate_id = input("Certificate ID: ") student_name = input("Student Name: ") program = input("Program: ") certificate_title = input("Certificate Title: ") issue_date = input("Issue Date: ") status = input("Status Valid/Invalid/Revoked: ") transaction = { "certificate_id": certificate_id, "student_name": student_name, "program": program, "certificate_title": certificate_title, "issue_date": issue_date, "status": status } transactions.append(transaction) print("Transaction added successfully.") add_transaction() print(transactions)
transactions = [] បង្កើត List ទទេ។
add_transaction() ជា Function សម្រាប់បញ្ចូល Transaction ថ្មី។
input() ទទួលទិន្នន័យពីអ្នកប្រើប្រាស់។
transaction = {...} បង្កើត Dictionary។
transactions.append(transaction) បន្ថែម Dictionary ចូលក្នុង List។

រូបភាពនេះគួរបង្ហាញ List មួយដែលមាន Certificate Transactions ជាច្រើន។ Transaction នីមួយៗគឺជា Dictionary មួយ។ វាជួយឱ្យនិស្សិតយល់ថា List អាចរក្សាទុក Records ជាច្រើន ហើយ Records ទាំងនេះអាចត្រូវបានដាក់ចូលទៅក្នុង Block នៅមេរៀនបន្ទាប់។
បង្ហាញ Transactions ទាំងអស់ដែលបានបញ្ចូលក្នុង List។
def show_transactions(): print("\n=== All Certificate Transactions ===") if len(transactions) == 0: print("No transactions available.") else: for transaction in transactions: print("-----------------------------") print("Certificate ID:", transaction["certificate_id"]) print("Student Name:", transaction["student_name"]) print("Program:", transaction["program"]) print("Certificate Title:", transaction["certificate_title"]) print("Issue Date:", transaction["issue_date"]) print("Status:", transaction["status"]) show_transactions()
Function នេះពិនិត្យជាមុនថា List មាន Transaction ឬអត់។ បើគ្មានវាបង្ហាញសារ No transactions available. បើមាន វាប្រើ for loop ដើម្បីបង្ហាញ Transaction នីមួយៗ។
បង្កើត Function សម្រាប់ស្វែងរក Transaction តាម Certificate ID។
def search_transaction(): search_id = input("Enter Certificate ID to search: ") for transaction in transactions: if transaction["certificate_id"] == search_id: print("Certificate found:") print("Certificate ID:", transaction["certificate_id"]) print("Student Name:", transaction["student_name"]) print("Program:", transaction["program"]) print("Certificate Title:", transaction["certificate_title"]) print("Issue Date:", transaction["issue_date"]) print("Status:", transaction["status"]) return print("Certificate not found.")
Function នេះទទួល Certificate ID ពីអ្នកប្រើប្រាស់ បន្ទាប់មកប្រើ for loop ដើម្បីពិនិត្យ Transaction នីមួយៗ។ ប្រសិនបើរកឃើញ Certificate ID ត្រូវគ្នា វាបង្ហាញព័ត៌មាននោះ ហើយ return ដើម្បីចេញពី Function។ បើរកមិនឃើញ វាបង្ហាញ Certificate not found.

រូបភាពនេះគួរបង្ហាញដំណើរការ Search ដោយអ្នកប្រើបញ្ចូល Certificate ID ហើយកម្មវិធីស្វែងរកក្នុង List of Transactions។ ប្រសិនបើរកឃើញ វាបង្ហាញ Certificate Record។ ប្រសិនបើរកមិនឃើញ វាបង្ហាញ Not Found។ រូបភាពនេះជួយភ្ជាប់ Python Loop និង Condition ទៅនឹងមុខងារផ្ទៀងផ្ទាត់វិញ្ញាបនបត្រ។
បង្កើតកម្មវិធី Console មួយដែលមាន Menu សម្រាប់ Add, Show, Search, Count និង Exit។
transactions = [] def show_menu(): print("\n=== Certificate Transaction Manager ===") print("1. Add Transaction") print("2. Show All Transactions") print("3. Search Transaction") print("4. Count Transactions") print("5. Exit") def add_transaction(): certificate_id = input("Certificate ID: ") student_name = input("Student Name: ") program = input("Program: ") certificate_title = input("Certificate Title: ") issue_date = input("Issue Date: ") status = input("Status Valid/Invalid/Revoked: ") transaction = { "certificate_id": certificate_id, "student_name": student_name, "program": program, "certificate_title": certificate_title, "issue_date": issue_date, "status": status } transactions.append(transaction) print("Transaction added successfully.") def show_transactions(): print("\n=== All Certificate Transactions ===") if len(transactions) == 0: print("No transactions available.") else: for transaction in transactions: print("-----------------------------") print("Certificate ID:", transaction["certificate_id"]) print("Student Name:", transaction["student_name"]) print("Program:", transaction["program"]) print("Certificate Title:", transaction["certificate_title"]) print("Issue Date:", transaction["issue_date"]) print("Status:", transaction["status"]) def search_transaction(): search_id = input("Enter Certificate ID to search: ") for transaction in transactions: if transaction["certificate_id"] == search_id: print("Certificate found:") print("Certificate ID:", transaction["certificate_id"]) print("Student Name:", transaction["student_name"]) print("Program:", transaction["program"]) print("Certificate Title:", transaction["certificate_title"]) print("Issue Date:", transaction["issue_date"]) print("Status:", transaction["status"]) return print("Certificate not found.") def count_transactions(): print("Total Transactions:", len(transactions)) while True: show_menu() choice = input("Choose option: ") if choice == "1": add_transaction() elif choice == "2": show_transactions() elif choice == "3": search_transaction() elif choice == "4": count_transactions() elif choice == "5": print("Goodbye!") break else: print("Invalid choice. Please try again.")
កម្មវិធីនេះជាជំហានដំបូងនៃ Final Project។ វាមិនទាន់រក្សាទុកទៅ CSV ទេ ហើយមិនទាន់មាន Hash ឬ Blockchain ទេ។ ប៉ុន្តែវាជួយបង្កើត Transaction Data ដែលជា Foundation សំខាន់សម្រាប់មេរៀនបន្ទាប់។

រូបភាពនេះគួរបង្ហាញ Console Menu ដែលមានជម្រើស Add Transaction, Show All Transactions, Search Transaction, Count Transactions និង Exit។ វាជួយឱ្យនិស្សិតយល់ពីរបៀបបង្កើតកម្មវិធីមានរចនាសម្ព័ន្ធ និងអាចពង្រីកបានទៅកាន់ CSV Storage និង Blockchain Logic នៅមេរៀនបន្ទាប់ៗ។
គ្រូអាចប្រើសំណួរខាងក្រោមសម្រាប់ពិភាក្សា៖
សរសេរចម្លើយខ្លី ៥–៧ បន្ទាត់៖
ហេតុអ្វី Transaction គឺជាជំហានសំខាន់មុនពេលបង្កើត Block និង Blockchain?
ចម្លើយគួរបង្ហាញពីគំនិត៖
សរសេរ Function មួយឈ្មោះ show_project_title() ដែលបង្ហាញ៖
Console-Based Blockchain Certificate Verification System
បង្កើត Dictionary មួយដែលមាន Fields៖
បន្ទាប់មកបង្ហាញ Dictionary នោះ។
បង្កើត List មួយឈ្មោះ transactions ហើយបន្ថែម Certificate Transaction ចំនួន ៣ ចូលទៅក្នុង List។
សរសេរ Function មួយឈ្មោះ show_transactions() ដើម្បីបង្ហាញ Transactions ទាំងអស់ក្នុង List។
សរសេរ Function មួយឈ្មោះ search_transaction() ដើម្បីស្វែងរក Certificate តាម certificate_id។
បង្កើត Menu ដែលមានជម្រើស៖
1. Add Transaction 2. Show Transactions 3. Search Transaction 4. Count Transactions 5. Exit
បង្កើតកម្មវិធី Python Console មួយឈ្មោះ៖
certificate_transaction_manager.py
កម្មវិធីត្រូវមានមុខងារ៖
បន្ទាប់ពីបញ្ចប់មេរៀនទី២ និស្សិតគួរមាន៖
មេរៀននេះមិនទាន់បង្កើត Blockchain ពេញលេញទេ។ វាជាមេរៀនសំខាន់សម្រាប់រៀបចំ Data Structure។ បើ Data Structure មិនត្រឹមត្រូវ ការបង្កើត Hash, Block និង Blockchain នៅមេរៀនបន្ទាប់នឹងពិបាក។
គ្រូគួរផ្ដល់ឧទាហរណ៍ជាច្រើនអំពី Records ពិតៗ ដូចជា៖
គ្រូគួរអោយនិស្សិតពន្យល់ដោយមាត់ថា៖
Transaction មួយក្នុង Project របស់យើងគឺជាអ្វី?
ចម្លើយដែលរំពឹងទុក៖
Transaction មួយគឺជា Certificate Record មួយដែលត្រូវបានរៀបចំជាទម្រង់ Dictionary ដើម្បីបញ្ចូលទៅក្នុង Blockchain នៅមេរៀនបន្ទាប់។
| Figure | កន្លែងបញ្ចូល | គោលបំណង |
|---|---|---|
| Figure 1 | ផ្នែក ៣ | បង្ហាញលំហូរពី Certificate Record ទៅ Blockchain Transaction |
| Figure 2 | ផ្នែក ៤.២ | បង្ហាញរចនាសម្ព័ន្ធកម្មវិធីដែលបែងចែកជា Functions |
| Figure 3 | ផ្នែក ៦.២ | បង្ហាញ Certificate Transaction ជា Dictionary |
| Figure 4 | ផ្នែក ៧.២ | បង្ហាញ Transaction Flow ពី Data ទៅ Block |
| Figure 5 | ផ្នែក ៩ | បង្ហាញ List of Certificate Transactions |
| Figure 6 | ផ្នែក ១១ | បង្ហាញ Search Transaction by Certificate ID |
| Figure 7 | ផ្នែក ១២ | បង្ហាញ Complete Console Transaction Manager Menu |
[1] Python Software Foundation, “5. Data Structures — Python 3 Documentation,” Python Documentation, 2026.
[2] D. Yaga, P. Mell, N. Roby, and K. Scarfone, “Blockchain Technology Overview,” National Institute of Standards and Technology, NISTIR 8202, 2018, doi: 10.6028/NIST.IR.8202.
[3] Python Software Foundation, “csv — CSV File Reading and Writing,” Python Documentation, 2026.
មតិយោបល់ 0