Question: Develop an application that let the user maintain a list of student scores. However, youll use a text file to store the student data. Okay
Develop an application that let the user maintain a list of student scores. However, youll use a text file to store the student data.
Okay now that someone on here pointed me in the right direction for getting the file to read all the scores, I am now having an issue with adding them.
here are my classes:
Student Class
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace Student_Scores_Lab { public class Student {
private string name; private List
public Student() { }
public Student(string name, List
public string Name { get { return name; } set { name = value; } }
public List
public string GetDisplayText() { string total = ""; foreach (int score in scoreList) { total += "|" + score; } return name + total; } } }
StudentDB class
--------------------------------------------------------------
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO;
namespace Student_Scores_Lab { public static class StudentDB { private const string dir = @"C:\C# 2017\For Lab 4\"; private const string path = dir + "StudentScores.txt";
public static void SaveStudents(List
foreach (Student student in students) { string scoresList = "";
for (int i = 0; i < student.ScoreList.Count(); i++) { int value = student.ScoreList[i];
scoresList += (value + "|"); }
textOut.Write(student.Name + "|"); textOut.WriteLine(scoresList.TrimEnd('|')); } textOut.Close(); }
public static List
StreamReader textIn = new StreamReader( new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read));
List
while (textIn.Peek() != -1) { string row = textIn.ReadLine(); string[] columns = row.Split('|'); Student student = new Student();
List
if (columns[1] != "") { int[] scoreArray = columns[1].Split('|').Select(n => Convert.ToInt32(n)).ToArray();
scoreList = scoreArray.ToList(); student.ScoreList = scoreList; } else { student.ScoreList = new List
student.Name = columns[0]; students.Add(student);
}
textIn.Close();
return students; }
public static void LoadSampleStudents() {
if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); }
if (!File.Exists(path)) {
StreamWriter textOut = new StreamWriter( new FileStream(path, FileMode.Create, FileAccess.Write));
textOut.WriteLine("Elle Hamilton|100|97|68"); textOut.WriteLine("Paul Wolf|95|76|87"); textOut.WriteLine("Hannah Berry|95|89|94");
textOut.Close(); } } } }
------------------------------------
Validator Class
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;
namespace Student_Scores_Lab { public static class Validator { public static string title = "Entry Error";
public static bool IsPresent(TextBox textBox, string name) { if (textBox.Text == String.Empty) { MessageBox.Show(name + " is a required field.", title); textBox.Focus(); return false; } return true; }
public static bool IsInt32(TextBox textBox, string name) { int number = 0; if (Int32.TryParse(textBox.Text, out number)) { return true; } else { MessageBox.Show(name + " must be an integer.", title); textBox.Focus(); return false; } }
public static bool IsWithinRange(TextBox textBox, string name, int min, int max) { int number = Convert.ToInt32(textBox.Text); if (number < min || number > max) { MessageBox.Show(name + " must be between " + min + " and " + max + ".", title); textBox.Focus(); return false; } return true; } } }
Student_Scores.cs - main form
--------------------
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;
namespace Student_Scores_Lab { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private List
private void Form1_Load(object sender, EventArgs e) { StudentDB.LoadSampleStudents(); students = StudentDB.GetStudents(); FillStudentListBox(); txtBoxTotal.Text = String.Empty; txtBoxCount.Text = String.Empty; txtBoxAverage.Text = String.Empty; }
private void FillStudentListBox() { lstStudents.Items.Clear(); foreach (Student s in students) { lstStudents.Items.Add(s.GetDisplayText()); } }
private void btnExit_Click_1(object sender, EventArgs e) { this.Close(); }
private void btnAddNew_Click(object sender, EventArgs e) { Add_New_Student addStudentForm = new Add_New_Student(); Student student = addStudentForm.GetNewStudent();
if (student != null) { students.Add(student); StudentDB.SaveStudents(students); FillStudentListBox(); int i = students.Count - 1; lstStudents.SetSelected(i, true); } }
/* private void btnUpdate_Click(object sender, EventArgs e) { int i = lstStudents.SelectedIndex; if (i != -1) { Student selectedStudent = students[i]; Update_Student_Scores updateStudentScoresForm = new Update_Student_Scores(selectedStudent); updateStudentScoresForm.GetUpdatedStudent(); StudentDB.SaveStudents(students); FillStudentListBox(); lstStudents.SetSelected(i, true); } } */
private void btnDelete_Click(object sender, EventArgs e) { int i = lstStudents.SelectedIndex;
if (i != -1) { Student student = students[i]; students.Remove(student); StudentDB.SaveStudents(students); FillStudentListBox(); txtBoxTotal.Text = String.Empty; txtBoxCount.Text = String.Empty; txtBoxAverage.Text = String.Empty; } }
private void lstStudents_SelectedIndexChanged(object sender, EventArgs e) { Calculations(); }
private void Calculations() { int i = lstStudents.SelectedIndex;
if (i != -1) { Student selectedStudent = students[i]; if (selectedStudent.ScoreList.Count() == 0) { txtBoxTotal.Text = "n/a"; txtBoxCount.Text = "0"; txtBoxAverage.Text = "n/a"; } else { int total = 0; foreach (int score in selectedStudent.ScoreList) { total += score; } int count = selectedStudent.ScoreList.Count(); decimal average = Convert.ToDecimal(total) / Convert.ToDecimal(count);
txtBoxTotal.Text = Convert.ToString(total); txtBoxCount.Text = Convert.ToString(count); txtBoxAverage.Text = average.ToString("#.##");
} } }
}//end form class }
-------------
Add_New_Student.cs
-------------------------------
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;
namespace Student_Scores_Lab {
public Add_New_Student() { InitializeComponent(); }
private Student student = null; List
public Student GetNewStudent() { this.ShowDialog(); return student; }
public Add_New_Student(List
private void Add_New_Student_Load(object sender, EventArgs e) {
}
private void btnOk_Click(object sender, EventArgs e) { if (Validator.IsPresent(txtBoxName, "Name")) { student = new Student(txtBoxName.Text, tempList); this.Close(); } }
List
private void btnAddScore_Click(object sender, EventArgs e) { }
private void btnClear_Click(object sender, EventArgs e) { tempList.Clear(); txtBoxScores.Text = String.Empty; }
private bool IsValidData() { return Validator.IsPresent(txtBoxScores, "Score") && Validator.IsInt32(txtBoxScores, "Score") && Validator.IsWithinRange(txtBoxScores, "Score", 0, 100); }
private void btnCancel_Click_1(object sender, EventArgs e) { this.Close(); }
private void txtBoxScore_TextChanged(object sender, EventArgs e) {
txtBoxScores.Text = String.Empty; } }
}
Add_Score.cs
-------------------
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;
namespace Student_Scores_Lab { public partial class Add_Score : Form { private int score = -1;
public Add_Score() { InitializeComponent(); }
private void Add_Score_Load(object sender, EventArgs e) {
}
private void btnAdd_Click(object sender, EventArgs e) { if (IsValidData()) { score = Convert.ToInt32(txtBoxScore.Text); this.Close(); } }
private void btnCancel_Click(object sender, EventArgs e) { this.Close(); }
public int GetNewScore() { this.ShowDialog(); return score; }
private bool IsValidData() { return Validator.IsPresent(txtBoxScore, "Score") && Validator.IsInt32(txtBoxScore, "Score") && Validator.IsWithinRange(txtBoxScore, "Score", 0, 100); }
} }
From the main menu Student_Scores.cs when I click Add Score it correctly brings up the next form Add_New_Student. However, I need help with the "add score" button on the form and it needs to be able to show the scores entered in the greyed out "scores textbox and then in turn when I leave that form to write it to the file and update the list. Im pretty sure I have the reading / writing part down but for some reason can't get the add button to add the name and the scores entered. Any guidence on this would be great!
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
