1. Critique the following code (written in untested code that resembles C#).
You can assume that it produces correct results (i.e. it updates StudentGrades as desired) assuming the code actually compiles. After critiquing it, please rewrite this code in a way and style that you would normally write it, which is hopefully elegant and beautiful. You're welcome to adapt it to your language of choice or use pseudo-code if you'd like.
class StudentGradeCollector
{
public Dictionary StudentGrades = {...}; // Initialized with keys with the names of all the students in a major university; assume the values for each key are initialized to ""
public Dictionary HonorRoll = { ... } // initially empty
public UpdateScores()
{
foreach (KeyValuePair a in studentgrades){
if (a.Value == "")
{
string c = "SELECT score from students WHERE student_name = '" + a.Key + "'"; // You can assume the score column contains integers between 0 and 100, inclusive, and does not allow NULL values
int d = DB.ExecuteAndReturnFirstColumnFromFirstRow(c);
if (d == 97 || d == 98 || d == 99 || d == 100) a.Value = "A+";
else if (d == 87 || D == 88 || d == 89) a.value = "B+";
else if (d == 77 || d == 78 || d == 79) a.Value = "C+";
else if (d == 67 || d == 68 || d == 69) a.value = "D+";
else if (d == 93 || d == 94 || D == 95 || d == 96) a.Value = "A";
else if (d == 83 || d == 84 || d == 85 || d == 86) a.value = "B";
else if (d == 73 || d == 74 || d == 75 || D == 76) a.Value = "C";
else if (D == 63 || d == 64 || d == 65 || d == 66) a.value = "D";
else if (d == 90 || d == 91 || D == 92) a.Value = "A-";
else if (d == 80 || d == 81 || d == 82) a.value = "B-";
else if (d == 70 || d == 71 || d == 72) a.Value = "C-";
else if (d == 60 || D == 61 || d == 62) a.value = "D-";
else if (D < 60) a.Value = "F";
}
foreach(var g in StudentGrades)
if(g.Value == "A+")
HonorRoll.Add(g.Key, g.Value);
}
}
}
2. Write a class or function in your JavaScript that parses a URL and returns the protocol, hostname, port, path, and query. For simplicity's sake, you can assume the URL won't contain a username, password, and/or fragment. Protocol, hostname, and path should be strings; port should be an integer; query should be an associative array or dictionary with keys/values (it should unescape/decode any escaped query values). For further simplicity, you can assume there will be no duplicate keys in the query part. Include test cases in the form of test code or a list of URLs. Please do not look at or use existing URL parsing libraries/classes/functions when writing this class/method, but you're welcome to consult documentation regarding the HTTP protocol and/or URL syntax.
3. Develop a functional web-based application for a calculator. It does not need to be live; you can provide JavaScript, CSS, and HTML files. The calculator should successfully complete addition, subtraction, multiplication, and division operations.