Нужно на одном графике сделать отражение количества студентов по специальности и по курсу. Данные берутся из файла
Код на кнопку построения диаграммы:
requestChart.Series.Clear();
requestChart.Series.Add("Количество");
requestChart.Titles.Clear();
requestChart.Series[0].Points.Clear();
requestChart.Titles.Add("Name");
requestChart.Titles[0].Text = "Распределение числа студентов по специальностям за последний год";
requestChart.Series.Add("Курс");
requestChart.Series[1].Points.Clear();
requestChart.Series[0].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Column;
requestChart.Series[1].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Column;
var studentCount = Student.RequestStudentBySpecialities();
for (int i = 0; i < studentCount.name.Length; i++)
requestChart.Series[0].Points.AddXY(studentCount.name[i], studentCount.count[i]);
for (int i = 0; i < studentCount.cources.Length; i++)
requestChart.Series[1].Points.AddXY(1, studentCount.cources[i] + 1);
Код метода класса Student, который забирает информацию из файла и считает количество как по специальности, так и по курсу:
static public StudentCount RequestStudentBySpecialities()
{
string name = "database.txt";
string[] list;
int[] cources = new int[5];
string buffer = "";
var year = DateTime.Now.Year;
List<string> specialities = new List<string>();
List<string> students = new List<string>();
//List<int> specialitiesCount = new List<int>();
for (int i = 0; i < CreatingForm.SpecialtiesFill().Length; i++)
specialities.Add(CreatingForm.SpecialtiesFill()[i]);
string[] template = specialities.ToArray();
int[] specialitiesCount = new int[specialities.Count];
// чтение из файла
FileStream file = new FileStream(name, FileMode.OpenOrCreate);
using (StreamReader streamReader = new StreamReader(file))
{
while (!streamReader.EndOfStream)
{
// разделение строки на элементы списка
buffer = streamReader.ReadLine();
list = buffer.Split(';');
if (!students.Contains(list[0]))
{
students.Add(list[0]);
int startYear = Convert.ToInt32(list[1].Substring(0, 4));
if (year - startYear <= 5)
{
cources[year - startYear]++;
for (int i = 0; i < template.Length; i++)
{
if (list[2] == template[i] && Convert.ToInt32(list[13]) == year)
specialitiesCount[i]++;
}
}
}
}
StudentCount studentCount = new StudentCount();
studentCount.name = template;
studentCount.count = specialitiesCount;
studentCount.cources = cources;
return studentCount;
}
}
При построении гистограммы только по специальности все выводится правильно:
А при построении гистограммы по специальности и курсу получается такое:
Как это исправить?