0% found this document useful (0 votes)
12 views7 pages

Practical 7

The document outlines a smart contract for managing assignment submissions between teachers and students using blockchain technology. It includes functions for creating assignments, submitting work, viewing submissions, and grading by teachers, ensuring transparency and accountability. The contract aims to streamline educational workflows while maintaining accurate timestamps and tamper-proof grades.

Uploaded by

indujeph30
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
12 views7 pages

Practical 7

The document outlines a smart contract for managing assignment submissions between teachers and students using blockchain technology. It includes functions for creating assignments, submitting work, viewing submissions, and grading by teachers, ensuring transparency and accountability. The contract aims to streamline educational workflows while maintaining accurate timestamps and tamper-proof grades.

Uploaded by

indujeph30
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 7

2CEIT6PE10_BLOCKCHAIN TECHNOLOGIES

Practical - 7

Aim: Consider a scenario of developing a smart contract between a teacher and a student
for
assignment submission. Implement important functions that you would include in your

smart contract.

Code:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract TeacherStudentAssignment {
address public teacher;

struct Assignment {
uint id;
string title;
string description;
uint deadline;
bool isActive;
}

struct Submission {
string content;
uint submitTime;
uint grade;
bool isGraded;
}

// Assignments storage
uint public Total_assignments;
mapping(uint => Assignment) public assignments;

// Submissions: assignmentId => studentAddress => Submission


mapping(uint => mapping(address => Submission)) public submissions;

// Track which assignments have been submitted by which students


mapping(uint => address[]) private assignmentStudents;

// Constructor
constructor() {
teacher = msg.sender;
Total_assignments = 0;
}

modifier onlyTeacher() {
require(msg.sender == teacher, "Only teacher can perform this action");
_;
}

22012011052 U.V.Patel College of Engineering Karan Yadav


2CEIT6PE10_BLOCKCHAIN TECHNOLOGIES

// Create a new assignment


function createAssignment(string memory _title, string memory _description, uint
_daysToSubmit)
public
onlyTeacher
{
uint deadline = block.timestamp + (_daysToSubmit * 1 days);

assignments[Total_assignments] = Assignment({
id: Total_assignments,
title: _title,
description: _description,
deadline: deadline,
isActive: true
});

Total_assignments++;
}

// Get all available assignments (that haven't been submitted by the calling student)
function S_Available_Assignments() public view returns (
uint[] memory ids,
string[] memory titles,
uint[] memory deadlines
){
// Count active assignments that haven't been submitted by this student
uint availableCount = 0;
for (uint i = 0; i < Total_assignments; i++) {
if (assignments[i].isActive &&
submissions[i][msg.sender].submitTime == 0) {
availableCount++;
}
}

// Create result arrays


ids = new uint[](availableCount);
titles = new string[](availableCount);
deadlines = new uint[](availableCount);

// Fill result arrays


uint index = 0;
for (uint i = 0; i < Total_assignments; i++) {
if (assignments[i].isActive &&
submissions[i][msg.sender].submitTime == 0) {
ids[index] = assignments[i].id;
titles[index] = assignments[i].title;
deadlines[index] = assignments[i].deadline;
index++;
}
}

22012011052 U.V.Patel College of Engineering Karan Yadav


2CEIT6PE10_BLOCKCHAIN TECHNOLOGIES

return (ids, titles, deadlines);


}

// Teacher views all assignments (active and inactive)


function T_AllAssignments() public view onlyTeacher returns (
uint[] memory ids,
string[] memory titles,
uint[] memory deadlines,
bool[] memory active
){
ids = new uint[](Total_assignments);
titles = new string[](Total_assignments);
deadlines = new uint[](Total_assignments);
active = new bool[](Total_assignments);

for (uint i = 0; i < Total_assignments; i++) {


ids[i] = assignments[i].id;
titles[i] = assignments[i].title;
deadlines[i] = assignments[i].deadline;
active[i] = assignments[i].isActive;
}

return (ids, titles, deadlines, active);


}

// Student submits an assignment


function submitAssignment(uint _assignmentId, string memory _content) public {
require(_assignmentId < Total_assignments, "Assignment does not exist");
require(assignments[_assignmentId].isActive, "Assignment is not active");
require(block.timestamp <= assignments[_assignmentId].deadline, "Deadline has passed");
require(submissions[_assignmentId][msg.sender].submitTime == 0, "You have already
submitted this assignment");

// Add student to the list of submitters for this assignment


assignmentStudents[_assignmentId].push(msg.sender);

submissions[_assignmentId][msg.sender] = Submission({
content: _content,
submitTime: block.timestamp,
grade: 0,
isGraded: false
});
}

// Teacher views pending submissions that need grading


function T_PendingSubmissionsforGrade() public view onlyTeacher returns (
uint[] memory assignmentIds,
address[] memory students,
string[] memory assignmentTitles
){
// Count all ungraded submissions
uint totalPending = 0;
22012011052 U.V.Patel College of Engineering Karan Yadav
2CEIT6PE10_BLOCKCHAIN TECHNOLOGIES

for (uint i = 0; i < Total_assignments; i++) {


for (uint j = 0; j < assignmentStudents[i].length; j++) {
address student = assignmentStudents[i][j];
if (!submissions[i][student].isGraded) {
totalPending++;
}
}
}

// Create result arrays


assignmentIds = new uint[](totalPending);
students = new address[](totalPending);
assignmentTitles = new string[](totalPending);

// fill result
uint index = 0;
for (uint i = 0; i < Total_assignments; i++) {
for (uint j = 0; j < assignmentStudents[i].length; j++) {
address student = assignmentStudents[i][j];
if (!submissions[i][student].isGraded) {
assignmentIds[index] = i;
students[index] = student;
assignmentTitles[index] = assignments[i].title;
index++;
}
}
}

return (assignmentIds, students, assignmentTitles);


}

// Teacher grades a submission


function gradeAssignment(uint _assignmentId, address _student, uint _grade) public
onlyTeacher {
require(_assignmentId < Total_assignments, "Assignment does not exist");
require(_grade <= 100, "Grade must be between 0 and 100");

Submission storage submission = submissions[_assignmentId][_student];


require(submission.submitTime > 0, "No submission found for this student");
require(!submission.isGraded, "Submission already graded");

submission.grade = _grade;
submission.isGraded = true;
}

// Student views for their own submissions (both graded and ungraded)
function S_MySubmissions() public view returns (
uint[] memory assignmentIds,
string[] memory assignmentTitles,
bool[] memory isGraded,
uint[] memory grades
22012011052 U.V.Patel College of Engineering Karan Yadav
2CEIT6PE10_BLOCKCHAIN TECHNOLOGIES

){
uint submissionCount = 0;
for (uint i = 0; i < Total_assignments; i++) {
if (submissions[i][msg.sender].submitTime > 0) {
submissionCount++;
}
}

assignmentIds = new uint[](submissionCount);


assignmentTitles = new string[](submissionCount);
isGraded = new bool[](submissionCount);
grades = new uint[](submissionCount);

uint index = 0;
for (uint i = 0; i < Total_assignments; i++) {
if (submissions[i][msg.sender].submitTime > 0) {
assignmentIds[index] = i;
assignmentTitles[index] = assignments[i].title;
isGraded[index] = submissions[i][msg.sender].isGraded;
grades[index] = submissions[i][msg.sender].grade;
index++;
}
}

return (assignmentIds, assignmentTitles, isGraded, grades);


}
}

Output:
Creating Assignment by Teacher:

22012011052 U.V.Patel College of Engineering Karan Yadav


2CEIT6PE10_BLOCKCHAIN TECHNOLOGIES

Submitting Assignment by Student:

Grading Submitted Assignments by Teacher:

22012011052 U.V.Patel College of Engineering Karan Yadav


2CEIT6PE10_BLOCKCHAIN TECHNOLOGIES

Conclusion:
This smart contract creates a transparent and efficient system for managing academic assignments.
Teachers can create and grade assignments while tracking student submissions, and students can
view available tasks and their graded work. The blockchain-based approach ensures submission
timestamps are accurate and grades remain tamper-proof. This demonstrates how smart contracts
can streamline educational workflows while maintaining accountability for both teachers and
students.

22012011052 U.V.Patel College of Engineering Karan Yadav

You might also like