From 111c753ccb1f9124b5707b8aaa22f02f46e0dee2 Mon Sep 17 00:00:00 2001 From: juliussneezer04 Date: Thu, 21 Oct 2021 14:21:47 +0800 Subject: [PATCH] Updating the Developer Guide for Proposed StudentMarks Implementation. Let's add a description of the proposed implementation and describe it. --- docs/DeveloperGuide.md | 76 +++++++++++++++++- docs/images/StudentMarksState1.png | Bin 0 -> 3391 bytes docs/images/StudentMarksState2.png | Bin 0 -> 4242 bytes .../seedu/address/model/student/Student.java | 1 + 4 files changed, 73 insertions(+), 4 deletions(-) create mode 100644 docs/images/StudentMarksState1.png create mode 100644 docs/images/StudentMarksState2.png diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 7c20265ef37..3fd4a71d8a9 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -263,10 +263,9 @@ These operations are exposed in the `Model` interface as `Model#hasTutorialClass `Model#addTutorialClass(TutorialClass tutorialClass)`, `Model#deleteTutorialClass(TutorialClass tutorialClass)` and `Model#getTutorialClass()`respectively. - Given below is an example of how the tutorial class features can be used: -Step 1. The user launches the application for the first time. The `UniqueTUtorialClassList` would be derived from the +Step 1. The user launches the application for the first time. The `UniqueTutorialClassList` would be derived from the initial ClassMATE state, and all tutorial classes stored will be displayed. Step 2. The user executes an `addc c/G00 s/Tues 12 - 2pm` command. The `addc` command calls `Model#addTutorialClass()`, adding a new tutorial class to Classmate. This modifies and saves the @@ -299,7 +298,8 @@ Execution of the `AddClassCommand` #### Design Considerations -#####Aspect: Finding Tutorial Classes +#### Aspect: Finding Tutorial Classes + * Alternative 1 (current choice): Find Tutorial Classes by selecting all classes with classcodes matching the search keyword * Pros: Shorter keyword to type, therefore increasing user typing speed. User is also able to find multiple classes @@ -310,7 +310,7 @@ Execution of the `AddClassCommand` * Cons: Takes longer for user to type commands, less user friendly #### Aspect: Student and Tutorial Class lists -* Alternatice 1 (current choice): Use two seperate lists to store students and tutorial classes +* Alternative 1 (current choice): Use two separate lists to store students and tutorial classes * Pros: Faster, simpler command executions for student and tutorial class commands. Easier to maintain overall. Therefore, all students and all tutorial classes can be accessed independent of each other. * Cons: Class specific student commands are slower. For example a user is required to 'viewc' in order to filter just the students in the class, @@ -319,9 +319,77 @@ Execution of the `AddClassCommand` * Pros: Faster in class specific student commands and students are better organised. * Complexity of tutorial classes is increased and slower to navigate to view other tutorial classes or perform general commands on the students +### [Proposed] Student Participation Mark Features + +(Contributed by Vishnu Sundaresan) + +ClassMATE allows the user to manage information about Class Participation grading relevant to each Student. A User is able to: + +1. Add a weekly participation mark +2. Delete a weekly participation mark +3. Edit a weekly participation mark + +#### Proposed Implementation + +Each Student will contain a `List` known as `marks` that will store all participation mark values for the Student. This list is internally stored as an `ArrayList`. Using an `Enumeration` of Student Marks, which contains the following Marks: + +* `POOR` (0 marks) +* `LOW` (1 mark) +* `AVG` (2 marks) +* `GOOD` (3 marks) +* `HIGH` (4 marks) +* `EXCELLENT` (5 marks) + +ClassMATE will then support the following command classes: + +* `AddLastMarkCommand(Index index, StudentMark mark)` +* `DeleteLastMarkCommand(Index index)` +* `DeleteAllMarksCommand(Index index)` +* `EditMarkCommand(Index index, int week)` + +These commands inherit from the `Command` class, and are named accordingly. + +Given below is an example of how the student marks features can be used: + +Step 1. The user launches the application for the first time. The existing `marks` list would be derived from the +initial ClassMATE state, and all students stored will be displayed along with their currently stored marks below their name +Step 2. The user executes an `addm 1 m/low` command. The `addm` command calls `Model#setStudent()`, adding the mark provided (`LOW` in this case) to Classmate. This modifies and saves the state of ClassMATE. The updated `UniqueStudentList` will be displayed in the `ClassListPanel` to the user. + +Step 3. The user executes a `deletelm 1` command. The `deletelm` command calls the `Model#setStudent()` and the `Model#updateFilteredStudentList()`, modifying the state of the filtered list of students. The updated filtered list consists the students with the latest mark removed from the 1st student. + +​ **Before `deletelm` command** + +![StudentMarkState1](images/StudentMarksState1.png) + +​ **After `deletelm` command** + +![StudentMarkState2](images/StudentMarksState2.png) + +Step 4. The user executes a `deleteam 1` command. The `deleteam` command calls `Model#setStudent()`, modifying and saving the state of ClassMATE by deleting all marks for the 1st student at the given index in the `UniqueStudentList`. This updated list will be displayed to the user. + +Step 5. The user executes a `editm` command. The `editm` command calls `Model#setStudent()` modifying and saving the state of the `FilteredList` to contain all students in ClassMATE. This updated list will be displayed to the user. + +Using the example of the `AddMarkCommand`, +when the user enters the `addm` command to add a tutorial class, the user input command undergoes the same command parsing as described in [Section 3.3, “Logic component”](#33-logic-component). +During the parsing, a new `Student` instance is created. This `Student` instance will be received by the `AddMarkCommand` when it is created. + +The *Sequence Diagram* below summarizes the aforementioned steps. + +//TODO: Add sequence diagram for AddMark. + +Execution of the `AddMarkCommand` + +#### Design Considerations +#### Aspect: Rationale for studentMarks size +* Alternative 1 (current choice): Keep a list of variable length + * Pros: Flexible, allows instructors not to worry about the number of tutorials taken. + * Cons: Prone to human error of counting, not tallying within strict 26 tutorial-limit. +* Alternative 2: Keep a fixed-size list of 26 + * Pros: Since there are 13 weeks and two tutorials a week, there will be a projected 26 tutorials held. Thus, a fixed size of 26 elements will allow the list to reflect this requirement. + * Cons: Instructors are limited to this 26-class limit, and cannot store marks for extra tutorials/make-up sessions. diff --git a/docs/images/StudentMarksState1.png b/docs/images/StudentMarksState1.png new file mode 100644 index 0000000000000000000000000000000000000000..fd137b49987f02d904017d35f7032f9ac8c30448 GIT binary patch literal 3391 zcmd5K1mze9hx4x%-?maaS`j{u=Zty9xI4(A~_J zhZwJ~#&zs;Q#q;bZoJgALyORubpMCDDLVsyIt=@*Q6k6BM=hMp4p}wz7+UR%n-L|) zlKrBFh?O4XMeA$UzAU{cq#W?O7;$|Y@X!eWULH~afPF{hfTa6J0l+BDXH&(VQ*{pp6PpEi^ z!G2Jt+iyRjBN&g@(K-ohpY7PBym#FS$ncZHJ}8%R>6&1&4su{~eFh(ugPj{gF+!x+ zx%vTDR=lJu^GL`@Wt_C_iCP_G%WxPQlptAIAag2x0tp06%9;;(JeIpSlcqnp&!l&F zV`AS#gQUZJFY(BzU9(Q_msk@tII)?`i>@@7e=++0SH~#Pk<#0cd5AVx zUdjct^ZvIBT657W#{hkK#z)r(%I1Ewvpx$Jx22&Cvl;cpeYd$y-w@rDe(eREMWvbAghVCXTz|0?w)1TEd=EcJHMe~MU_>)qv&FF75ql$yR(l?<~{Y~ zQs7#h`q`5NgstGSAw;Pnq(o-j@g{;}g_m1L?3B=8Hk zESBMWJl1*&0Y&`4O`+uWKNlDY43gH8i=c^;hCV2I=o-=IOOHVnaymbhHqvviLlc2q zh}aoI+l);CH$EAT+?hqhEH;(3kWfn`@TvJ8hDxt*^yi0l5T$f7CxMC+tQ*nAOK0fn z@V1yV3+DdL2*gd~a%juybps{JT5GksU$lR48Hz*M+TgN+1&+a=n`VlF1BO9SWAA%B z%lJyIB{T+D+B}rA`atGB)teF#2Z2h&tWW27k31VVJX3&jP4!)y{T1t_*+GEg_;e`^ zCv#!6fq$l|!s}sZBD-gHYT`Gq>597k7k!e|;Xmg}^Y7l7mbvsm&q}u*zTVWWQTwXR z*4pItQmZG+l4M=WGD!l>WWtJB<24+RJ7CcGmRgn8c_(i&jW7YkZDRcMm(w)CumnE?tu^1I2}a^b|>i-MVAzU zm8`zL=7DA*hvmAETfbZ~3Yz|D2A{Zvyc^7wNm|e+iFeR~;f40&k|1}yo(Z)W}%qc*jhu_3$l)_$5k~iT{NJE zE2pBVbVKY0>}BeimK>Hi|MqU_B>^wFpxW*8EmY}cSW$^qTr;8 z(2?)NH8t4a|2Qd|( zLRQo!$g|Xb+r7Epb4aGH=``?z7otflm}FWzr#kI|E1nYas z0eV^FhoU<&WyVx6GduMvOB5-MrhD=6!Vz$#7yPL={S}|OMdj0|xb^+#x+ce3`U)SB z9=1+Rbqj+DXB?0^v9rbF22$h^u=uN;0py9Td4X*2zpd|hCsrqPS;UTl8u;g_D*PBX(}@& z*ddFhwJDwGgIB{Ga>&V(^Yxga7ap-wnT~;|MC$sNd~Z$ed1@a^8rIG-`?xn`w-hV< zWuL>_!;!_C!P&AnrJL2{$?yfPKjmz@JF06|mvx!E0kM|<#O${_oo(%-t5cymP{IKt zdLG}5c% zXu>evN%Y1ko{`sOF_9;~UY#4j@Y47egGr~a7G+^xmH)uG#vr7ith4h&6XAm@wdpjQ zJB0`^&tb6rKPijITIbzrqizo`@Dxa6!p?m$?LD|hP06`CwuEPCYZrAWb;&p)gMHRv zL=-{x4190%Ooq&S*P9mpNBj5~Bur~#2bBQNf_?2{Q0C>XjOcEvK3w$JeloImr*JVW zCA=!c-vj1tx1cBYecsvjL9--Bt6I0GxvLFq*(s}=s!5BqRU#E~S!p28bUX_glx6u` zmO0OvfWc_X-)F7r?DC;{(A1!jPdXG(xO1un&3RwA*H8>rCZv6YmU+h1^RS+No3c19 z-(iiggIUCng@BSXEN#^3?V)Nd+H|^Eo3Vx|x-7eSTC7*`2S<(z-)e z__@n~SFkamvfSG*Dn?J4#>+Ud*H;6$DY4(uL(#2E`D4Y4I3La_PIvn!P~oitBzw9f zD>W;eZA+nUm7q(O-zu8T<1ZpZ_q;E5bfy$uQ6#9e20*@L04I>Sa=#m!LFdg!ohTW1 z>5*U=%@=tdq$b*%V$5n&jvU6xTf-ZPAvgoDMBx!8bRX79JRIb0H{Ug_-fqp3YDioM zTfeC)Qe0Q}=GoK7SDmXh1KTiO6V`@;qU>n5;GSrVvhrWEivDL|N^)Dw?F)S?D?*Wq tfM?)+|E4?{A5c8-zbu{$h(zf&{X~`2qgtP`aJB}oi(XjDjt3CpoEBOh#zjT}M|K3|cXMNVVFObF3| zLZs$=s6@<$K5Syf?|yt=uix+g-yh%aAKR|y+WUUr*LB^`bKmdld0=I6PFze*3H5;gx_JoZ+)=3QVQA;yMfwy=kMpKcSU@+JDrV?Qo3>&Y!83wCF#lT?qJm4S|W%+P8 z4AvI)A9BB!mu8Md$R@Nh9bhoW>-%Hi)8W{MG7$qsu|8HZ6E9+)yR^nX;;{$D*Gz3y zEVC3w$bI;{u@L^FkV`RFTy}bO!d^#W+7$hVHFQE&15Rx%wt)wJzb{jA#zsY03YOZP ziD6j>=RB zjob{m>4zbAE-Uop^NQS`J z2f&nlEC-p7fcf+>#M~AJd6OY*8-#s2A+awK@zWS&xcR3TWSRmKlMi_x-vfXxX1f4Z zbqknT>?8?Fa6hP>YPS^>TMv|p6(t%3VGdD*b2q?DbCJJsHv(^J?nyY;h30#lDjZ1n zYCKc7G#Y&FSB7tVa8^O=u{yWKZX?M@Ap&lnd+}v7pItRQPWIs2-p&kM@|IoY_BqUw zIin51K?)q3X`3nSzNdu}n4r}UD%lEn3YVGApbCnHCjG}KHH7QwbV0$dvc1IEw6Bdu zy#CUlZjCQKB~^*N)a8=PcG(9NiOi8w^6`_^#Pw7B@`mEfWsWV%_{!{XZPiu&*ApSx zbw3`enXa$#=ce)!&?S1Kv9oI3A51qt&^k$;>PFREOuo3by3qB=&Z~iWluBrgSDam6 z)4g~uUZFV4`(fw$#1n^-GwI7+eOk`E*%5jCQa8O5m7(qJJkGA_%4(dY((2rUjtG{I zH?8_`<1X(m6Utj&TjA8&CUkyjjO6ABm@Yvyy>m%T$I4uMc3s!Y3mr5SCEaD8qT-`U z%c96K5331^OF~;EF7(YQd4<-eWhe2RRD;TFo5oaDdBx+>CB#0vnmd`FVylUw{I3kp zA+1l^<8hD75KljS**SBW_o|Mf7clQw{qrxn;$zfR{Qd!RRuoe!rvG(ue1UY5W#&L{ z-iOdv1jpV5_L;PJCH)(El~2V_RD`)=2XBp$Dj9uL7wK(owx$s_0U0u7LceRMN8}&YRUJqZV6M5A>nl)Vj&5 z8kN*xE0e#9x9g;R)M2^V-s*i|DioHou+?eiF>4;RMbhrZO}2Y0Ls8y1s({1mq@_BS zSDQW2LC9;STR7X6XF3Y3w5bxBj;EPUO7z)bc0a3sip-i*SGQ^FzJjytRatepxjqDWW}!3RU64z#=R`2VPUM%w z?zb}=c`+y~RqyV`VmssF(mW81Ko%P{^G!>6YQJKoAe~GNh7aD!X1huUXI7Dlh1N?n zUO8_caGcBDe|w8m#mzwv7b#n>J0+)ytsyZI0~)2os%uZy%sy{+M|zlRy5co6hu>7V zXZcb1oSOQHD{|Cm3ZKV}LOkFeA`Ie!OaCvHYC&%t`o)2o5x;b`8T)|m_wzoyX0NSH z7iQZN7S_NW{slc;$h8pReFjh1T*_0D&r&mXOeOp7kB`LihTi0McEi%B?}ST&-sHzX zQgH;hWqXp7n!QQ0wZH0`X8N}Z8kZ;Kag66W85tKw#`M?ziqbQet5(7DMtjAsY_}I(yy+PcgNd~F`EY>d;Vjg$G!{B%UOSOu zXTSVT#^I&4rZN#x(^^VzHlcR_vMCWx`|+k%Y4xubgC=^;A16=f)_rZ(Utb+Jr$jiW z9JOP-?BS93@HjlGj zn)d;VLN7JKk#6sX<;nDsS0;niMH0KvrIyn}0acC9E%C}{-fT{?{b+q+NO5|@ z$&3Np+{eu?+-8^9+ZCOHP#L3A{EWo8sn=mbw7X#G@dODaG}}Cwwh9)K=};J3y^W$r zV(R_Vwr`f~-h*>jx;t-pdL2}SnfkEVFO8Kq}mT;j*C!^%=r1m}V*O8&4&+fi#97X`R9;H#9S%_z&rR*pUms5H!~18dJ;}V`(6L3v{@b17 zL$2-1{)s6MZgd@9{xhC1!t_PPFlpo;mtJo-aygPe<$j%FfcvL! zdRS4V!Q!IWUY&|;-N4ExHMCD)B|ZoK%ESrE&oW~j^xdV!bnwUI?&%PfjGb{)s9-Nr z9}Q2_)Vk+pCBwfPqpv(PbTUW@$JQIZTH8RV8GTc8jO0P$x?cWrbmbV?ajxR@@_2&2 zeQ_B124lo?h*9fv_0`(S4DAZ?^N3n#W%r-=@?I}{{-EBCW>qknLf1oZa>3NuneryT z=UrYhD++Jww7q{sqL+UitX3Nl{oN`yrpvLVV46}(YJ%ce-YIqH10^!d1T>EPvrP*3 zYiY#afg_o_318}os7UH5U0P%QW^Ga5Ut6z`EU?YC)*IYvbJWd~e!W>I>*<{Fme#JL+R|$K7#L-}CMM(P1!3FHvIS zi?_m2Q=Z&d{F9$l*Qz4)hL9ky*VmhSf{~%8CHsQ- z#LQ%9E?tlkb5L*)%eEQRn4iffDo&j~>QP@YR@3c;nhFfE=TB6P!7pV-F4{?4!v!_+ zT;R5$5`G=&A+8u8BF>IMi(g#Npi3H6^o?o7 zVAK5?f|q99r#oBF&!<1Cm1oRG7u2Dd^zx8wLdgP+F8;r#`b2a@|4)af#YTj{rX=?s zGi=zcYtdC<_{#xI&()hzjcKVSeD$4~FG$;+TdfydgtAFxLgI;H@@wCy&DOXDazvAZ z%33~oDv*p@ru6Wvs}e^G6j|DC1M?;J+}v?$tF!+FXOeEUM``?Gf2q!%G~R7hKZTjW z&`fYfW+tBO()AsGdONE)<)Izja-gx7E3ely{TuBjfDUowO!kNOBG2cZsq}BR%{lhb z5dYXkmgT&|b@;YHT8KtE()#0F6wP zgOs@1DQHsby^#EVzCnH%jKsQL$HbuGl(zu#{VzNqxVk2=w|iVS0)9s!74ZjFMyC=XTVXN@O`OU!N^GiI3Zen zqvz?~fpSGhO3|U7XEz)b3j*E^g6}YZPlFO{^i9Cr>Lg5t>KK9OIo<+y1}4G~E-T_B zi~?9;IO@&bxYy?pn_!Zt{o*Zfs0TY7nMjB4Lx8_8ATa+Z$2q>zxFpa^{T-ld{z8^+ zfPWlOry9+21{+UgV%$#5PSePcOHo%`u2h0#U@7e%LD69Mkm!B?)rJ@3`Ty&&T{Tzq YjqG6+T9O9Q;5`D&%*4W&hH(u4A9Wv$L;wH) literal 0 HcmV?d00001 diff --git a/src/main/java/seedu/address/model/student/Student.java b/src/main/java/seedu/address/model/student/Student.java index 278d9c8bcfe..994cb9fcf40 100644 --- a/src/main/java/seedu/address/model/student/Student.java +++ b/src/main/java/seedu/address/model/student/Student.java @@ -24,6 +24,7 @@ public class Student { private final Address address; private final ClassCode classCode; private final Set tags = new HashSet<>(); + //private final List marks = new ArrayList<>(); /** * Every field must be present and not null.