Professional Documents
Culture Documents
BáoCáo UDPT Nhóm9
BáoCáo UDPT Nhóm9
Đà Nẵng, 12/2023
MỤC LỤC
BẢNG PHÂN CÔNG.................................................................................................................................3
TÓM TẮT CHỨC NĂNG...........................................................................................................................4
GIẢI THÍCH CODE....................................................................................................................................5
BẢNG PHÂN CÔNG
Tên thành viên IDSV Phân công Mức độ hoàn
thành
// Contact là một cấu trúc (struct) chứa thông tin liên lạc của một người.
// Có năm trường dữ liệu:
struct Contact {
string addressLine1;// Địa chỉ dòng 1.
string addressLine2;// Địa chỉ dòng 2.
string city; // Thành phố.
string phoneNumber;// Số điện thoại.
string email; // Địa chỉ email.
}
// Patient là một cấu trúc (struct) đại diện cho thông tin của một bệnh
nhân.
// Có năm trường dữ liệu:
struct Patient {
string name;// Tên của bệnh nhân.
string dob; // Ngày tháng năm sinh
string bloodType; // Nhóm máu của bệnh nhân.
Contact contactInfo;// Một trường kiểu Contact chứa thông tin liên lạc
của bệnh nhân.
string healthStatus; // Tình trạng sức khỏe
}
modifier onlyOwner() { // Modifier này đảm bảo rằng chỉ chủ sở hữu của hợp
đồng mới có thể gọi được hàm chứa modifier này.
require(msg.sender == owner, "Only contract owner can call this
function");
// kiểm tra xem người gọi hàm có phải là chủ sở hữu của hợp đồng
không. Nếu không, hàm sẽ bị ngừng lại và một thông báo lỗi sẽ được hiển thị.
// Nếu không, hàm sẽ bị ngừng lại và một thông báo lỗi sẽ được hiển
thị.
_;
//là nơi mà nội dung của hàm gốc sẽ được thực thi nếu điều kiện của
modifier đúng.
}
modifier onlyAuthorized() { // Modifier này đảm bảo rằng chỉ các địa chỉ
được ủy quyền hoặc chủ sở hữu mới có thể gọi được hàm chứa modifier này.
require(
authorizedAddresses[msg.sender] || msg.sender == owner,
"Not authorized to perform this action"
// kiểm tra xem người gọi hàm có phải là một địa chỉ được ủy quyền
hoặc là chủ sở hữu của hợp đồng không.
// Nếu không, hàm sẽ bị ngừng lại và một thông báo lỗi sẽ được hiển
thị.
);
_;
// là nơi mà nội dung của hàm gốc sẽ được thực thi nếu điều kiện của
modifier đúng.
}
constructor() {
owner = msg.sender;
// Hàm này được gọi khi hợp đồng được triển khai. Nó sẽ đặt chủ sở hữu của
hợp đồng
// là địa chỉ của người triển khai hợp đồng (msg.sender).
}
function registerPatient(
// Hàm registerPatient được thiết kế để đăng ký thông tin của một bệnh
nhân mới vào hệ thống.
string memory _name,
string memory _dob,
string memory _bloodType,
string memory _addressLine1,
string memory _addressLine2,
string memory _city,
string memory _phoneNumber,
string memory _email,
string memory _healthStatus
) external onlyAuthorized {
// modifier Đảm bảo rằng chỉ những địa chỉ được ủy quyền mới có thể gọi
hàm này.
require(bytes(_name).length > 0, "Name must not be empty");
// Đảm bảo tên bệnh nhân không được trống.
require(bytes(_dob).length > 0, "Date of birth must not be empty");
// Đảm bảo ngày tháng năm sinh không được trống.
require(bytes(patients[msg.sender].dob).length == 0, "Patient already
registered");
// Kiểm tra xem bệnh nhân đã được đăng ký trước đó hay chưa bằng cách
kiểm tra xem ngày
// tháng năm sinh đã được lưu trữ cho địa chỉ người gọi hàm chưa.
// để tham chiếu đến thông tin bệnh nhân mới, sẽ được lưu trữ trong
patients mapping
// với khóa là địa chỉ của người gọi hàm.
// Lưu trữ tên, ngày tháng năm sinh, nhóm máu, thông tin liên lạc
// (bao gồm cả địa chỉ dòng 1 và dòng 2, thành phố, số điện thoại,
email), và tình trạng sức khỏe của bệnh nhân.
Patient storage newPatient = patients[msg.sender];
newPatient.name = _name;
newPatient.dob = _dob;
newPatient.bloodType = _bloodType;
newPatient.contactInfo = Contact({
addressLine1: _addressLine1,
addressLine2: _addressLine2,
city: _city,
phoneNumber: _phoneNumber,
email: _email
});
newPatient.healthStatus = _healthStatus;
patientAddresses.push(msg.sender);
// Thêm địa chỉ của bệnh nhân mới vào danh sách các địa chỉ bệnh nhân.
function updatePatientInfo(
// Hàm updatePatientInfo được thiết kế để cập nhật thông tin của một bệnh
nhân đã được đăng ký trong hệ thống.
address _patientAddress,
string memory _name,
string memory _dob,
string memory _bloodType,
string memory _addressLine1,
string memory _addressLine2,
string memory _city,
string memory _phoneNumber,
string memory _email,
string memory _healthStatus
) external onlyAuthorized {
// modifier Đảm bảo rằng chỉ những địa chỉ được ủy quyền mới có thể gọi
hàm này.
require(bytes(_name).length > 0, "Name must not be empty");
// Đảm bảo tên bệnh nhân không được trống.
require(bytes(_dob).length > 0, "Date of birth must not be empty");
// Đảm bảo ngày tháng năm sinh không được trống.
require(bytes(patients[_patientAddress].dob).length > 0, "Patient not
found");
// Kiểm tra xem bệnh nhân cần cập nhật có tồn tại không, dựa trên việc
kiểm tra ngày tháng năm sinh
// đã được lưu trữ cho địa chỉ bệnh nhân cần cập nhật hay không.
// Phát ra sự kiện để thông báo rằng thông tin của một bệnh nhân đã
được cập nhật thành công,
// kèm theo địa chỉ của bệnh nhân và thông tin cụ thể đã được cập
nhật.
emit PatientUpdated(_patientAddress, "Name", _name);
emit PatientUpdated(_patientAddress, "DateOfBirth", _dob);
emit PatientUpdated(_patientAddress, "BloodType", _bloodType);
emit PatientUpdated(_patientAddress, "AddressLine1", _addressLine1);
emit PatientUpdated(_patientAddress, "AddressLine2", _addressLine2);
emit PatientUpdated(_patientAddress, "City", _city);
emit PatientUpdated(_patientAddress, "PhoneNumber", _phoneNumber);
emit PatientUpdated(_patientAddress, "Email", _email);
emit PatientUpdated(_patientAddress, "HealthStatus", _healthStatus);
}
delete patients[_patientAddress];
// Xóa thông tin của bệnh nhân khỏi mapping patients.
// Duyệt qua mảng patientAddresses để tìm địa chỉ của bệnh nhân cần
xóa và xóa nó.
for (uint256 i = 0; i < patientAddresses.length; i++) {
if (patientAddresses[i] == _patientAddress) {
delete patientAddresses[i];
// delete patientAddresses[i];: Xóa địa chỉ bệnh nhân khỏi
mảng patientAddresses.
break;
}
}
emit PatientRemoved(_patientAddress);
// Phát ra sự kiện để thông báo rằng một bệnh nhân đã được loại bỏ
khỏi hệ thống,
// kèm theo địa chỉ của bệnh nhân đã bị xóa.
}