private void удалитьПользователяToolStripMenuItem_Click(object sender, EventArgs e) { if (listOfUsers.SelectedRows.Count != 0) { WorkWithDB workDB = new WorkWithDB(); int code = workDB.openConnection(); int index = listOfUsers.CurrentRow.Index; string login = listOfUsers[0, index].Value.ToString(); if (code == 1) { try { SQLiteConnection scon = workDB.SqLiteConnection; SQLiteCommand command = new SQLiteCommand(string.Format ("DELETE FROM User WHERE login='******';", login), scon); /*SQLiteCommand command = new SQLiteCommand( string.Format("DELETE u.*, t.*, st.* FROM User as u LEFT JOIN Training as t ON u.login=t.login " + "LEFT JOIN StatisticsOfExercises as st on t.id_training=st.id_training " + "WHERE u.login='******';", ), scon); */ command.ExecuteNonQuery(); command = new SQLiteCommand(string.Format ("SELECT id_training FROM 'Training' WHERE login='******';", login), scon); string ids = ""; DataTable dt = null; SQLiteDataAdapter da = new SQLiteDataAdapter(command); DataSet ds = new DataSet(); da.Fill(ds); dt = ds.Tables[0]; if (dt == null) { MessageBox.Show("БД пуста или запрос не вернул данных"); } else { int rows = dt.Rows.Count; for (int i = 0; i < rows; i++) ids += dt.Rows[i][0].ToString() + ","; } ids = ids.Substring(0, ids.Length - 1); command = new SQLiteCommand(string.Format ("DELETE FROM Training WHERE login='******';", login), scon); command.ExecuteNonQuery(); command = new SQLiteCommand(string.Format("DELETE FROM 'StatisticsOfExercises' WHERE id_training IN ({0});", ids), scon); command.ExecuteNonQuery(); } catch { } finally { workDB.closeConnection(); } listOfUsers.Rows.RemoveAt(index); } } else MessageBox.Show("Не выбран пользователь для удаления", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
/// <summary> /// Строит круговую диаграмму, /// распределяя ошибки среди пользователей /// сколько ошибок /// 1-5 ошиб. /// 5-10 ошиб. /// 11-60 ошиб. /// 61-100 ошиб. /// </summary> public void fillPieChartMistakes() { WorkWithDB workDB = new WorkWithDB(); int code = workDB.openConnection(); if (code == 1) { SQLiteConnection scon = workDB.SqLiteConnection; SQLiteCommand command = new SQLiteCommand( string.Format("SELECT u.login, SUM(st.amountOfMistakes) FROM " + "User u JOIN Training tr ON u.login=tr.login " + "JOIN StatisticsOfExercises AS st ON tr.id_training=st.id_training " + "GROUP BY u.login;"), scon); DataTable dt = null; SQLiteDataAdapter da = new SQLiteDataAdapter(command); DataSet ds = new DataSet(); da.Fill(ds); dt = ds.Tables[0]; if (dt == null) { MessageBox.Show("БД пуста или запрос не вернул данных"); } else { int amount = dt.Rows.Count; int[] mas = new int[amount]; //Получаем распределение числа пройденных упражнений по пользователям //каждая ячейка относится к одному пользователю for (int i = 0; i < amount; i++) { mas[i] = Convert.ToInt32(dt.Rows[i][1].ToString()); } //сортируем массив Array.Sort(mas); forMistakesChart(mas); } workDB.closeConnection(); } }
public void fillDataGreed() { WorkWithDB workDB = new WorkWithDB(); int code = workDB.openConnection(); if (code == 1) { SQLiteConnection scon = workDB.SqLiteConnection; SQLiteCommand command = new SQLiteCommand( string.Format("SELECT u.login,u.lastDataTraining,u.lastLevelNumber,ROUND(AVG(st.speed),2),ROUND(AVG(st.amountOfMistakes),2) FROM User AS u JOIN Training AS t " + "ON u.login=t.login " + "JOIN StatisticsOfExercises AS st ON t.id_training=st.id_training " + "GROUP BY u.login ORDER BY u.lastLevelNumber DESC;"), scon); DataTable dt = null; SQLiteDataAdapter da = new SQLiteDataAdapter(command); DataSet ds = new DataSet(); da.Fill(ds); dt = ds.Tables[0]; if (dt == null) { MessageBox.Show("БД пуста или запрос не вернул данных"); } else { listOfUsers.DataSource = dt; listOfUsers.Columns[0].HeaderText = "Логин"; listOfUsers.Columns[1].HeaderText = "Дата последней тренировки"; listOfUsers.Columns[2].HeaderText = "Номер уровня"; listOfUsers.Columns[3].HeaderText = "Ср. v, симв./мин"; listOfUsers.Columns[4].HeaderText = "Ср. кол-во ошибок"; } } else { MessageBox.Show("Ошибка при соединении с БД"); } workDB.closeConnection(); }
/// <summary> /// Строит круговую диаграмму, /// распределяя сколько пользователей прошли /// сколько упражнений /// 1-15 упр /// 16-30 упр /// 30-60 упр /// 60-150 упр /// </summary> public void fillPieChartExercises() { //запрос должен суммировать число упражнений пройденных каждым пользователем и //группировать по пользователю //потом беру полученные чиселки и получаю из них свои стат данные //смотрю сколько упражнений прошел каждый пользователь //а суммирую пользователей, //на диаграмме будут пользователи WorkWithDB workDB = new WorkWithDB(); int code = workDB.openConnection(); if (code == 1) { SQLiteConnection scon = workDB.SqLiteConnection; SQLiteCommand command = new SQLiteCommand( string.Format("SELECT u.login, COUNT(st.number) FROM " + "User u JOIN Training tr ON u.login=tr.login " + "JOIN StatisticsOfExercises AS st ON tr.id_training=st.id_training " + "GROUP BY u.login;"), scon); DataTable dt = null; SQLiteDataAdapter da = new SQLiteDataAdapter(command); DataSet ds = new DataSet(); da.Fill(ds); dt = ds.Tables[0]; if (dt == null) { MessageBox.Show("БД пуста или запрос не вернул данных"); } else { int amount = dt.Rows.Count; int[] mas = new int[amount]; //Получаем распределение числа пройденных упражнений по пользователям //каждая ячейка относится к одному пользователю for (int i = 0; i < amount; i++) { mas[i] = Convert.ToInt32(dt.Rows[i][1].ToString()); } //сортируем массив Array.Sort(mas); forExercisesChart(mas); } workDB.closeConnection(); } }