-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathfullSchoolSystem.sol
More file actions
105 lines (76 loc) · 2.35 KB
/
Copy pathfullSchoolSystem.sol
File metadata and controls
105 lines (76 loc) · 2.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Parent {
function sayHello() public pure returns (string memory) {
return "Hello from Parent";
}
}
contract Child is Parent {
function sayHelloFromChild() public pure returns (string memory) {
return "Hello from Child";
}
}
contract Parent_f {
function externalFunction() public pure returns (string memory) {
return "Called from another contract";
}
}
contract Child_f {
Parent_f externalContract;
constructor(address _externalContractAddress) {
externalContract = Parent_f(_externalContractAddress);
}
function callExternalFunction() public view returns (string memory) {
return externalContract.externalFunction();
}
}
contract School {
string public schoolName;
constructor(string memory _name) {
schoolName = _name;
}
function getSchoolName() public view returns (string memory) {
return schoolName;
}
}
contract StudentsSystem is School {
struct Student {
string name;
uint mathGrade;
uint scienceGrade;
}
mapping(uint => Student) public students;
constructor(string memory _schoolName) School(_schoolName) {
}
function addStudent(uint _id, string calldata _name, uint _mathGrade, uint _scienceGrade) public {
students[_id] = Student(_name, _mathGrade, _scienceGrade);
}
function getStudent(uint _id) public view returns (string memory, uint, uint) {
Student memory s = students[_id];
return (s.name, s.mathGrade, s.scienceGrade);
}
}
contract AdminControl {
address public admin;
constructor() {
admin = msg.sender;
}
modifier onlyAdmin() {
require(msg.sender == admin, "Not admin");
_;
}
function changeAdmin(address _newAdmin) public onlyAdmin {
admin = _newAdmin;
}
}
contract FullSchoolSystem is StudentsSystem, AdminControl {
constructor(string memory _schoolName)
StudentsSystem(_schoolName)
AdminControl() {
}
function getFullDetails(uint _id) public view returns (string memory,
uint, uint, string memory, address) {
(string memory name, uint mathGrade, uint scienceGrade) = getStudent(_id);
return (name, mathGrade, scienceGrade, getSchoolName(), admin);
}
}