Розробка програмного забезпечення для ведення електронного обліку успішності школярів
p align="left">Форми й звіти WYSIWYGГрафіки й діаграми Можливості DDE і OLE Доступ до Internet Убудовані функції Макроси: програмування без програмування Модулі: Visual Basic for Applications програмування баз даних Рекомендації для користувачів Інформація для користувачів електронних таблиць MySQL -- вільна система керування реляційними базами даних. Ця система керування базами даних (СКБД) з відкритим кодом була створена як альтернатива комерційним системам. MySQL з самого початку була дуже схожою на mSQL, проте з часом вона все розширювалася і зараз MySQL -- одна з найпоширеніших систем керування базами даних. Вона використовується, в першу чергу, для створення динамічних веб-сторінок, оскільки має чудову підтримку з боку різноманітних мов програмування. MySQL -- компактний сервер баз даних. Характеризується великою швидкістю, стійкістю і простотою використання. MySQL був розроблений компанією «ТсХ» для підвищення швидкодії обробки великих баз даних. MySQL вважається гарним рішенням для малих і середніх застосунків. Вихідні коди сервера компілюються на багатьох платформах. Найповніше можливості сервера виявляються в UNІХ-системах. Для некомерційного використання MySQL є безкоштовним. Можливості сервера MySQL: - простота у встановленні та використанні; - підтримується необмежена кількість користувачів, що одночасно працюють із БД; - кількість рядків у таблицях може досягати 50 млн.; - висока швидкість виконання команд; - наявність простої і ефективної системи безпеки. MySQL виникла як спроба застосувати mSQL до власних розробок компанії: таблицям, для яких використовувалися ISAM -- підпрограми низького рівня. У результаті був вироблений новий SQL-інтерфейс, але API-інтерфейс залишився в спадок від mSQL. Звідки походить назва «MySQL» -- достеменно не відомо. Розробники дають два варіанти: або тому, що практично всі напрацювання компанії починалися з префікса My, або на честь дівчинки на ім'я My, дочки Майкла Монті Віденіуса, одного з розробників системи . Логотип MySQL у вигляді дельфіна носить ім'я «Sakila». Він був обраний з великого списку запропонованих користувачами «імен дельфіна». Ім'я «Sakila» було відправлено Open Source-розробником Ambrose Twebaze. В січні-лютому 2008 Sun Microsystems придбала виробника системи керування базами даних MySQL за $1 млрд. Після поглинання у 2009 році Sun Microsystems з боку Oracle Corporation MySQL стала власністю Oracle. Основні переваги пакету MySQL: 1) багато поточність; 2) підтримка декількох одночасних запитів; 3) оптимізація зв'язків з приєднанням багатьох даних за один прохід; 4) записи фіксованої і змінної довжини; 5) ODBC драйвер в комплекті; 6) гнучка система привілеїв і паролів; 7) до 16 ключів в таблиці, кожен ключ може мати до 15 полів; 8) основана на потоках, швидка система пам'яті; 9) всі операції роботи з рядками не звертають уваги на регістр символів в оброблюваних рядках; 10) псевдоніми застосовні як до таблиць, так і до окремих стовпців в таблиці; 11) всі поля мають значення за замовчуванням; 12) легкість управління таблицею, включаючи додавання і видалення ключів і полів. Реляційна система керування базами даних Microsoft SQL Server. Microsoft SQL Server -- реляційна система керування базами даних (СКБД), розроблена корпорацією Microsoft. Основна використовувана мова запитів -- Transact-SQL, створений спільно Microsoft й Sybase. Transact-SQL являється реалізацією стандарту ANSI/ISO по структурованій мові запитів (SQL) с розширеннями. Використається для невеликих і середніх по розміру баз даних, і в останні 5 років - для великих баз даних масштабів підприємства, конкурує з іншими СКБД у цьому сегменті ринку. Вихідний код MS SQL Server (до версії 7.0) ґрунтувався на коді Sybase SQL Server, і це дозволило Microsoft вийти на ринок баз даних для підприємств, де конкурували Oracle, IBM, і, пізніше, сама Sybase. Microsoft, Sybase й Ashton-Tate спочатку об'єдналися для створення й випуску на ринок першої версії програми, що одержала назва SQL Server 1.0 для OS/2, яка фактично була еквівалентом Sybase SQL Server 3.0 для Unix, VMS і ін. Microsoft SQL Server 4.2 був випущений в 1992 році і входив до складу операційної системи Microsoft OS/2 версії 1.3. Офіційний реліз Microsoft SQL Server версії 4.21 для ОС Windows NT відбувся одночасно з релізом самої Windows NT (версії 3.1). Microsoft SQL Server 6.0 був першою версією SQL Server, створеної винятково для архітектури NT і без участі в процесі розробки Sybase. Поточна версія -- Microsoft SQL Server 2005 -- була представлена в листопаді 2005 року. Запуск версії відбувався паралельно запуску Visual Studio 2005. Існує також «врізана» версія Microsoft SQL Server - Microsoft SQL Server Express; вона доступна й вільно поширюється з її програмним забезпеченням. З моменту випуску попередньої версії SQL Server (SQL Server 2000) був здійснений розвиток інтегрованого середовища розробки й ряду додаткових підсистем, що входять до складу SQL Server 2005. Зміни торкнулися реалізації технології ETL, що входить до складу компонента SQL Server Integration Services (SSIS), сервера оповіщення, засобів аналітичної обробки багатомірних моделей даних (OLAP) і збору релевантної інформації (обидві служби входять до складу Microsoft Analysis Services), а також декількох служб повідомлень, а саме Service Broker й Notification Services. Крім цього, зроблені поліпшення в продуктивності. Функціональність Microsoft SQL Server як мова запитів використовує версію SQL, яка отримала назву Transact-SQL (скорочено T-SQL), що є реалізацією SQL-92 (стандарт ISO для SQL) із множинними розширеннями. T-SQL дозволяє використати додатковий синтаксис для процедур збереження і забезпечує підтримку транзакцій (взаємодія бази даних з керуючим додатком). Microsoft SQL Server й Sybase ASE для взаємодії з мережею використовують протокол рівня додатка за назвою Tabular Data Stream (TDS, протокол передачі табличних даних). Протокол TDS також був реалізований у проекті FreeTDS з метою забезпечити різним додаткам можливість взаємодії з базами даних Microsoft SQL Server й Sybase. SQL Server підтримує надлишкове дублювання даних по трьох сценаріях: - знімок - виробляється «знімок» бази даних, що сервер відправляє одержувачам; - історія змін - всі зміни бази даних безупинно передаються користувачам. - синхронізація з іншими серверами - бази даних декількох серверів синхронізуються між собою. Зміни всіх баз даних відбуваються незалежно один від одного на кожному сервері, а при синхронізації відбувається звірення даних. Даний тип дублювання передбачає можливість розв'язання протиріч між БД. В SQL Server 2005 вбудована підтримка .NET Framework. Завдяки цьому, збережені процедури БД можуть бути написані на будь-якій мові платформи .NET, використовуючи повний набір бібліотек, доступних для .NET Framework, включаючи Common Type System (система обігу з типами даних в Microsoft .NET Framework). Однак, на відміну від інших процесів, .NET Framework, будучи базисною системою для SQL Server 2005, виділяє додаткову пам'ять і вибудовує засоби керування SQL Server замість того, щоб використовувати вбудовані засоби Windows. Це підвищує продуктивність у порівнянні із загальними алгоритмами Windows, тому що алгоритми розподілу ресурсів спеціально налаштовані для використання в структурах SQL Server. 2.3 Вибір засобів розробки інформаційної системи Розробку журналу успішності системи планується проводити з використанням сучасних засобів розробки програмного забезпечення для мережевих інформаційних систем. Вибрані інструментальні засоби являють собою універсальне інструментальне програмне забезпечення, за допомогою якого можна розробляти різні за складністю та функціональним призначенням інформаційні системи. Переваги C# над Delphi: простіше працювати з динамічною пам'яттю; більше розвинене ООП в порівнянні з процедурним; сама платформа .NET більше орієнтована на C# ніж на Delphi. Оскільки вибрано C#.NET немає особливої різниці у виборі ситеми керування базами даних тому вибрано MS Access через зручний інтуєтивно зрозумілий інтерфейс для створення та редагування бази даних на початку проектування проекту. 3. Програмна реалізація 3.1 Структура і функціональне призначення модулів системи, їх взаємозв'язок За своєю структурою програмне забезпечення для ведення успішності школярів складається з чотирьох блоків. Кожен із блоків має своє чітко визначене призначення, яке полягає в реалізації певної функцій системи. Перелі модулів: 1) uchni.cs - модуль, який відповідає за роботу форми відображення усіх учнів школи; 2) uchеn.cs - модуль, який призначений для роботи форми відображення успішності певного учня; 3) edit.cs - модуль який відповідає за редагування даних; 4) zhu.cs - модуль в якому описані деякі функції для роботи з даними. Модуль edit.cs являє собою основний функціональний модуль, який включає процедури та функції, які відповідають за: - редагування даних успішності (додання, видалення); - редагування предметів (додання, видалення); - редагування оцінок успішності; - зміна окремих даних; - відбір за заданими параметрами; Модуль edit.cs являє собою основний функціональний модуль, який включає процедури та функції, які відповідають за: - редагування даних успішності (додання, видалення); - редагування предметів (додання, видалення); - редагування оцінок успішності; - зміна окремих даних; - відбір за заданими параметрами; Допоміжний функціональний модуль zhu.cs являє включає процедури та функції, які відповідають за: - заповнення даними головних таблиць; - заповнення даними випадаючих списків; - коректне відображення даних. Модуль uchni.cs створений для відображення всіх учнів школи з можливістю відбору учнів які навчаються в певному вказаному класі, також для фомування вхідних даних модуля uchеn.cs який в свою чергу керує формою, яка відображає оцінки певного учня. Рисунок 3.1 - Модулі програмного продукту 3.2 Розробка програмних модулів При розробці структури даний програмний продукт був поділений на модулі Для того, щоб програма відповідала поставленим вимогам, були розроблені окремі блоки для реалізації завдань. Блок завантаження головної форми який знаходиться у файлі ініціалізації програми: static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new uchni()); } Підключення бази даних яке знаходиться у кожному модулі: OleDbConnection connection = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=dbase.mdb"); Подія завантаження форми при якій відбувається завантаження даних з бази у DataGridViev при запуску програми: private void Form2_Load(object sender, EventArgs e) { // Uchni(); zaput1 = "SELECT uchni.fkuchni, uchni.fkklasu, klasu.klas AS [Клас], uchni.prizv AS [Прізвище], uchni.imya AS [Ім'я], uchni.pobat AS [Побатькові] FROM (uchni INNER JOIN klasu ON uchni.fkklasu = klasu.fkklasu) WHERE (klasu.klas = " + strkl + ") ORDER BY uchni.prizv"; ss.MainSel(dataGridView1, zaput1); ss.VisiF(dataGridView1, 1); ss.combSel(combklasu, "SELECT klas, fkklasu, rikpost FROM klasu ORDER BY rikpost;",false); } Блок відбору однокласників за заданим класом: if (combklasu.SelectedItem.ToString() == "*") strkl = "klasu.klas"; else strkl = "'" + combklasu.SelectedItem.ToString() + "'"; zaput1 = "SELECT uchni.fkuchni, uchni.fkklasu, klasu.klas AS [Клас], uchni.prizv AS [Прізвище], uchni.imya AS [Ім'я], uchni.pobat AS [Побатькові] FROM (uchni INNER JOIN klasu ON uchni.fkklasu = klasu.fkklasu) WHERE (klasu.klas = " + strkl + ") ORDER BY uchni.prizv"; ss.MainSel(dataGridView1, zaput1); ss.VisiF(dataGridView1, 1); Запуск форми на якій відображається успішність вибраного учня з переданням параметрів для його вибору: uchen fo3 = new uchen(dataGridView1.CurrentRow.Cells[0].Value.ToString(),"ІДЗ"); fo3.Show(); Запуск форми редагування з передачею відомостей про те який клас потрібно відкрити: edit ed = new edit(strkl); ed.Show(); Рисунок 3.2 - Форма головної сторінки. Блок інізіалізації форми що відображає інформацію про учня з прийомом даних які передаються з іншої форми: public uchen(string idUhc,string tup) { fkUch = idUhc; zaput1 = "SELECT idz.ocinka AS [Оцінка], idznazva.nazva AS [Назва ІДЗ], predmetu.nazva AS [Предмет] FROM (((predmetu INNER JOIN idz ON predmetu.fkpredm = idz.idzfkpre) INNER JOIN((uchni INNER JOIN semestru ON uchni.fkuchni = semestru.semfkuchen) INNER JOIN klasu ON uchni.fkklasu = klasu.fkklasu) ON idz.idzfksem = semestru.fksem) INNER JOIN idznazva ON idz.nazva = idznazva.fkidznazva) WHERE (uchni.fkuchni = " + fkUch + ")"; InitializeComponent(); } Процедура події яка відповідає за завантаження форми з блоком заповнення даними учня таблиці DataGridViev: private void Form3_Load(object sender, EventArgs e) { zhusl.MainSel(dataGridView1, zaput1); connection.Open(); OleDbCommand thisCommandp = new OleDbCommand("SELECT uchni.prizv FROM (uchni INNER JOIN klasu ON uchni.fkklasu = klasu.fkklasu) WHERE (uchni.fkuchni = " + fkUch + ")", connection); OleDbDataReader thisReader = thisCommandp.ExecuteReader(); thisReader.ToString(); thisReader.Read(); ipp.Text += thisReader[0].ToString()+" "; thisCommandp = new OleDbCommand("SELECT uchni.imya FROM (uchni INNER JOIN klasu ON uchni.fkklasu = klasu.fkklasu) WHERE (uchni.fkuchni = " + fkUch + ")", connection); thisReader = thisCommandp.ExecuteReader(); thisReader.ToString(); thisReader.Read(); ipp.Text += thisReader[0].ToString() + " "; thisCommandp = new OleDbCommand("SELECT uchni.pobat FROM (uchni INNER JOIN klasu ON uchni.fkklasu = klasu.fkklasu) WHERE (uchni.fkuchni = " + fkUch + ")", connection); thisReader = thisCommandp.ExecuteReader(); thisReader.ToString(); thisReader.Read(); ipp.Text += thisReader[0].ToString() + " "; thisReader.Close(); connection.Close(); } Рисунок 3.3 - Форма яка відображає успішність вибраного учня. Прийом даних які передає головна форма - формі редагування: public edit(string klos) { strkl = klos; InitializeComponent(); } Зміні необхідні для вибірки даних: public static string strkl = "klasu.klas", strpredm = "predmetu.nazva", stridznazva = "idznazva.nazva"; Заповнення усіх об'єктів на формі даними: zhusl.combSel(combklasu, "SELECT klas, fkklasu, rikpost FROM klasu ORDER BY rikpost", false); zhusl.combSel(combpredm, "SELECT nazva FROM predmetu ORDER BY nazva", true); zhusl.combSel(combidz, "SELECT nazva FROM idznazva ORDER BY nazva", true); combpredm.SelectedIndex = 0; //combklasu.SelectedIndex = 11; // combimya.SelectedIndex = 0; //FormLoad zhusl.MainSel(dataGridView1, "SELECT idz.fkidz AS [FKIDZ], idz.idzfksem AS [FKSEMIDZ], idz.idzfkpre, idz.nazva AS idznazva, klasu.fkklasu, uchni.fkuchni, klasu.klas AS [Клас], uchni.prizv AS [Прізвище], uchni.imya AS [Ім'я], uchni.pobat AS [Побатькові], idznazva.nazva AS [Назва ІДЗ], idz.ocinka AS [Оцінка], predmetu.nazva AS [Предмет] FROM (predmetu INNER JOIN (((uchni INNER JOIN semestru ON uchni.fkuchni = semestru.semfkuchen) INNER JOIN klasu ON uchni.fkklasu = klasu.fkklasu) INNER JOIN(idz INNER JOIN idznazva ON idz.nazva = idznazva.fkidznazva) ON semestru.fksem = idz.idzfksem) ON predmetu.fkpredm = idz.idzfkpre) WHERE (klasu.klas = " + strkl + " AND predmetu.nazva = " + strpredm + " AND idznazva.nazva = " + stridznazva + ") ORDER BY uchni.prizv"); zhusl.VisiF(dataGridView1, 5); Вибірка за предметами: if (combpredm.SelectedItem.ToString() == "*") strpredm = "predmetu.nazva"; else strpredm = "'" + combpredm.SelectedItem.ToString() + "'"; zhusl.MainSel(dataGridView1, "SELECT idz.fkidz AS [FKIDZ], idz.idzfksem AS [FKSEMIDZ], idz.idzfkpre, idz.nazva AS idznazva, klasu.fkklasu, uchni.fkuchni, klasu.klas AS [Клас], uchni.prizv AS [Прізвище], uchni.imya AS [Ім'я], uchni.pobat AS [Побатькові], idznazva.nazva AS [Назва ІДЗ], idz.ocinka AS [Оцінка], predmetu.nazva AS [Предмет] FROM (predmetu INNER JOIN (((uchni INNER JOIN semestru ON uchni.fkuchni = semestru.semfkuchen) INNER JOIN klasu ON uchni.fkklasu = klasu.fkklasu) INNER JOIN(idz INNER JOIN idznazva ON idz.nazva = idznazva.fkidznazva) ON semestru.fksem = idz.idzfksem) ON predmetu.fkpredm = idz.idzfkpre) WHERE (klasu.klas = " + strkl + " AND predmetu.nazva = " + strpredm + " AND idznazva.nazva = " + stridznazva + ") ORDER BY uchni.prizv"); zhusl.VisiF(dataGridView1, 5); Вибірка за класами: if (combklasu.SelectedItem.ToString() == "*") strkl = "klasu.klas"; else strkl = "'" +combklasu.SelectedItem.ToString()+"'"; zhusl.MainSel(dataGridView1, "SELECT idz.fkidz AS [FKIDZ], idz.idzfksem AS [FKSEMIDZ], idz.idzfkpre, idz.nazva AS idznazva, klasu.fkklasu, uchni.fkuchni, klasu.klas AS [Клас], uchni.prizv AS [Прізвище], uchni.imya AS [Ім'я], uchni.pobat AS [Побатькові], idznazva.nazva AS [Назва ІДЗ], idz.ocinka AS [Оцінка], predmetu.nazva AS [Предмет] FROM (predmetu INNER JOIN (((uchni INNER JOIN semestru ON uchni.fkuchni = semestru.semfkuchen) INNER JOIN klasu ON uchni.fkklasu = klasu.fkklasu) INNER JOIN(idz INNER JOIN idznazva ON idz.nazva = idznazva.fkidznazva) ON semestru.fksem = idz.idzfksem) ON predmetu.fkpredm = idz.idzfkpre) WHERE (klasu.klas = " + strkl + " AND predmetu.nazva = " + strpredm + " AND idznazva.nazva = " + stridznazva + ") ORDER BY uchni.prizv"); zhusl.VisiF(dataGridView1, 5); Вибірка за назвою оцінки: if (combidz.SelectedItem.ToString() == "*") stridznazva = "idznazva.nazva"; else stridznazva = "'" + combidz.SelectedItem.ToString() + "'"; zhusl.MainSel(dataGridView1, "SELECT idz.fkidz AS [FKIDZ], idz.idzfksem AS [FKSEMIDZ], idz.idzfkpre, idz.nazva AS idznazva, klasu.fkklasu, uchni.fkuchni, klasu.klas AS [Клас], uchni.prizv AS [Прізвище], uchni.imya AS [Ім'я], uchni.pobat AS [Побатькові], idznazva.nazva AS [Назва ІДЗ], idz.ocinka AS [Оцінка], predmetu.nazva AS [Предмет] FROM (predmetu INNER JOIN (((uchni INNER JOIN semestru ON uchni.fkuchni = semestru.semfkuchen) INNER JOIN klasu ON uchni.fkklasu = klasu.fkklasu) INNER JOIN(idz INNER JOIN idznazva ON idz.nazva = idznazva.fkidznazva) ON semestru.fksem = idz.idzfksem) ON predmetu.fkpredm = idz.idzfkpre) WHERE (klasu.klas = " + strkl + " AND predmetu.nazva = " + strpredm + " AND idznazva.nazva = " + stridznazva + ") ORDER BY uchni.prizv"); zhusl.VisiF(dataGridView1, 5); Функція яка дістає ключове поле таблиці за назвою інших полів: string getFK(string stre) { string tem = ""; OleDbCommand thisCommand = new OleDbCommand(stre, connection); OleDbDataReader thisReader = thisCommand.ExecuteReader(); thisReader.ToString(); thisReader.Read(); tem = thisReader[0].ToString(); thisReader.Close(); return tem; } Динамічна зміна предмету та назви оцінки: switch (dataGridView1.CurrentCell.ColumnIndex) { case 10: zhusl.combSel(combfrog, "SELECT nazva FROM idznazva ORDER BY nazva;",false); panel1.Visible = true; panel1.Top = e.Y + dataGridView1.Top; panel1.Left = e.X + dataGridView1.Left; break; case 12: zhusl.combSel(combfrog, "SELECT nazva FROM predmetu ORDER BY nazva;",false); panel1.Visible = true; panel1.Top = e.Y + dataGridView1.Top; panel1.Left = e.X + dataGridView1.Left break; default: break;} Процедура динамічної зміни: private void combfrog_SelectedIndexChanged(object sender, EventArgs e) { connection.Open(); OleDbCommand thisCommand = new OleDbCommand(); thisCommand.Connection = connection; thisCommand.CommandText = "SELECT nazva FROM idznazva ORDER BY nazva;"; OleDbDataReader thisReader = thisCommand.ExecuteReader(); thisReader.Close(); switch (dataGridView1.CurrentCell.ColumnIndex) { case 10: thisCommand.CommandText = "UPDATE idz SET nazva = ? WHERE (fkidz= ?);"; thisCommand.Parameters.Add("@nazva", OleDbType.VarChar).Value = getFK("SELECT fkidznazva FROM idznazva WHERE (nazva = '" + combfrog.SelectedItem.ToString() + "');"); thisCommand.Parameters.Add("@fkidz", OleDbType.VarChar).Value = dataGridView1.CurrentRow.Cells[0].Value.ToString(); thisReader = thisCommand.ExecuteReader(); thisReader.ToString(); thisReader.Close(); break; case 12: thisCommand.CommandText = "UPDATE idz SET idzfkpre = ? WHERE (fkidz= ?);"; thisCommand.Parameters.Add("@idzfkpre", OleDbType.VarChar).Value = getFK("SELECT fkpredm FROM predmetu WHERE (nazva = '" + combfrog.SelectedItem.ToString() + "');"); thisCommand.Parameters.Add("@fkidz", OleDbType.VarChar).Value = dataGridView1.CurrentRow.Cells[0].Value.ToString(); thisReader = thisCommand.ExecuteReader(); thisReader.ToString(); thisReader.Close(); break; default: break; } panel1.Visible = false; connection.Close(); zhusl.MainSel(dataGridView1, "SELECT idz.fkidz AS [FKIDZ], idz.idzfksem AS [FKSEMIDZ], idz.idzfkpre, idz.nazva AS idznazva, klasu.fkklasu, uchni.fkuchni, klasu.klas AS [Клас], uchni.prizv AS [Прізвище], uchni.imya AS [Ім'я], uchni.pobat AS [Побатькові], idznazva.nazva AS [Назва ІДЗ], idz.ocinka AS [Оцінка], predmetu.nazva AS [Предмет] FROM (predmetu INNER JOIN (((uchni INNER JOIN semestru ON uchni.fkuchni = semestru.semfkuchen) INNER JOIN klasu ON uchni.fkklasu = klasu.fkklasu) INNER JOIN(idz INNER JOIN idznazva ON idz.nazva = idznazva.fkidznazva) ON semestru.fksem = idz.idzfksem) ON predmetu.fkpredm = idz.idzfkpre) WHERE (klasu.klas = " + strkl + " AND predmetu.nazva = " + strpredm + " AND idznazva.nazva = " + stridznazva + ")"); zhusl.VisiF(dataGridView1, 5); } Процедура створення нової оцінки для динамічної процедури: private void addbutton_Click(object sender, EventArgs e) { //panel1.Height = 70; MessageBox.Show(combfrog.Text); connection.Open(); OleDbCommand thisCommand = new OleDbCommand(); thisCommand.Connection = connection; thisCommand.CommandText = "SELECT nazva FROM idznazva ORDER BY nazva;"; OleDbDataReader thisReader = thisCommand.ExecuteReader(); thisReader.Close(); switch (dataGridView1.CurrentCell.ColumnIndex) { case 10: thisCommand.CommandText = "INSERT INTO idznazva (nazva) VALUES(@Nazva);"; thisCommand.Parameters.Add("@nazva", OleDbType.VarChar).Value = combfrog.Text; thisReader = thisCommand.ExecuteReader(); thisReader.ToString(); thisReader.Close(); connection.Close(); zhusl.combSel(combfrog, "SELECT nazva FROM idznazva ORDER BY nazva", false); break; case 12: thisCommand.CommandText = "INSERT INTO predmetu (nazva) VALUES(@Nazva);"; thisCommand.Parameters.Add("@nazva", OleDbType.VarChar).Value = combfrog.Text; thisReader = thisCommand.ExecuteReader(); thisReader.ToString(); thisReader.Close(); connection.Close(); zhusl.combSel(combfrog, "SELECT nazva FROM idznazva ORDER BY nazva", false); break; default: break; } } Блок відкриття, закриття панелі для додавання нової оцінки: if (panel2.Visible) panel2.Visible = false; else panel2.Visible = true; Додання нової оцінки: OleDbCommand thisCommanduch = new OleDbCommand("SELECT uchni.fkuchni FROM (uchni INNER JOIN klasu ON uchni.fkklasu = klasu.fkklasu) WHERE (klasu.klas = " + strkl + ")", connection); OleDbCommand thisCommandsem = new OleDbCommand(); OleDbCommand thisCommand = new OleDbCommand(); OleDbCommand thisCommandi = new OleDbCommand(); connection.Open(); thisCommandi = new OleDbCommand("INSERT INTO idznazva (nazva) VALUES (@nazva)", connection); thisCommandi.Parameters.Add("@nazva", OleDbType.VarChar).Value = textBox1.Text; OleDbDataReader thisReaderuch2 = thisCommandi.ExecuteReader(); OleDbDataReader thisReaderuch = thisCommanduch.ExecuteReader(); string uch = "",uch2 = ""; bool kt = false; thisReaderuch.ToString(); string stre = "",stre2 = ""; while (thisReaderuch.Read()) { string rea = thisReaderuch[0].ToString(); thisCommandsem = new OleDbCommand("SELECT semestru.fksem FROM (semestru INNER JOIN uchni ON semestru.semfkuchen = uchni.fkuchni) WHERE (uchni.fkuchni = " + rea + ")", connection); OleDbDataReader thisReadersem = thisCommandsem.ExecuteReader(); thisReadersem.ToString(); while (thisReadersem.Read()) { if ((sem1.Checked) && (uch!=rea)) { string reasem = thisReadersem[0].ToString(); thisCommand = new OleDbCommand("INSERT INTO idz (nazva, ocinka, idzfkpre, idzfksem) VALUES (@nazva, @ocinka, @idzfkpre, @idzfksem);", connection); thisCommand.Parameters.Add("@nazva", OleDbType.VarChar).Value = getFK("SELECT fkidznazva FROM idznazva WHERE (nazva = '" + textBox1.Text + "')"); thisCommand.Parameters.Add("@ocinka", OleDbType.VarChar).Value = "0"; thisCommand.Parameters.Add("@idzfkpre", OleDbType.VarChar).Value = getFK("SELECT fkpredm FROM predmetu WHERE (nazva = " + strpredm + ")"); thisCommand.Parameters.Add("@idzfksem", OleDbType.VarChar).Value = reasem; OleDbDataReader thisReader = thisCommand.ExecuteReader(); uch = rea; kt = true; } else { kt = false; uch = rea; } if ((sem2.Checked) && (uch == rea) && !kt) { kt = false; } else { } } } connection.Close(); textBox1.Text = ""; panel2.Visible = false; zhusl.combSel(combidz, "SELECT nazva FROM idznazva ORDER BY nazva", true); Відкриття, закриття панелі для додання нового предмету: if (panel3.Visible) panel3.Visible = false; else panel3.Visible = true; Процедура виставлення оцінок із збереженням іх у базу даних: void updOcinku() { connection.Open(); if (dataGridView1.CurrentRow.Cells[11].Value.ToString() == "") dataGridView1.CurrentRow.Cells[11].Value = "0"; OleDbCommand thisCommand = new OleDbCommand("UPDATE idz SET ocinka = ? WHERE (fkidz= ?);", connection); thisCommand.Parameters.Add("@ocinka", OleDbType.VarChar).Value = dataGridView1.CurrentRow.Cells[11].Value.ToString(); thisCommand.Parameters.Add("@fkidz", OleDbType.VarChar).Value = dataGridView1.CurrentRow.Cells[0].Value.ToString(); OleDbDataReader reader = thisCommand.ExecuteReader(); reader.Close(); connection.Close(); } Відалення вибраної оцінки: OleDbCommand thisCommandsem = new OleDbCommand(); OleDbCommand thisCommand = new OleDbCommand(); OleDbCommand thisCommandi = new OleDbCommand(); OleDbDataReader thisReader; connection.Open(); thisCommandsem = new OleDbCommand("SELECT idz.fkidz FROM (idz INNER JOIN idznazva ON idz.nazva = idznazva.fkidznazva) WHERE (idznazva.nazva = " + stridznazva + ")", connection); OleDbDataReader thisReadersem = thisCommandsem.ExecuteReader(); thisReadersem.ToString(); while (thisReadersem.Read()) { string rea = thisReadersem[0].ToString(); thisCommand = new OleDbCommand("DELETE FROM idz WHERE (fkidz = " + rea + ")", connection); thisReader = thisCommand.ExecuteReader(); } thisCommandi = new OleDbCommand("DELETE FROM idznazva WHERE (nazva = " + stridznazva + ")", connection); thisReader = thisCommandi.ExecuteReader(); connection.Close(); zhusl.combSel(combidz, "SELECT nazva FROM idznazva ORDER BY nazva", true); combidz.SelectedIndex = 0; Добавлення нового предмету: connection.Open(); OleDbCommand thisCommand = new OleDbCommand("INSERT INTO predmetu (nazva) VALUES(@nazva);", connection); thisCommand.Parameters.Add("@nazva", OleDbType.VarChar).Value = textBox2.Text; OleDbDataReader thisReader = thisCommand.ExecuteReader(); thisReader.ToString(); connection.Close(); zhusl.combSel(combpredm, "SELECT nazva FROM predmetu ORDER BY nazva", true); textBox2.Text = ""; panel3.Visible = false; Видалення предмету і всіх оцінок пов'язаних з ним: OleDbCommand thisCommandsem = new OleDbCommand(); OleDbCommand thisCommand = new OleDbCommand(); OleDbCommand thisCommandi = new OleDbCommand(); OleDbDataReader thisReader; connection.Open(); thisCommandsem = new OleDbCommand("SELECT idz.fkidz FROM (idz INNER JOIN predmetu ON idz.idzfkpre = predmetu.fkpredm) WHERE (predmetu.nazva = " + strpredm + ")", connection); OleDbDataReader thisReadersem = thisCommandsem.ExecuteReader(); thisReadersem.ToString(); while (thisReadersem.Read()) { string rea = thisReadersem[0].ToString(); thisCommand = new OleDbCommand("DELETE FROM idz WHERE (fkidz = " + rea + ")", connection); thisReader = thisCommand.ExecuteReader(); } thisCommandi = new OleDbCommand("DELETE FROM predmetu WHERE (nazva = " + strpredm + ")", connection); thisReader = thisCommandi.ExecuteReader(); connection.Close(); zhusl.combSel(combpredm, "SELECT nazva FROM predmetu ORDER BY nazva", true); zhusl.combSel(combidz, "SELECT nazva FROM idznazva ORDER BY nazva", true); combpredm.SelectedIndex = 0; Рисунок 3.4 - Форма редагування даних. Функція для заповнення даними об'єктів DataGridView модуля «zhu.cs»: public void MainSel(DataGridView datta,string zaput1) { connection.Open(); OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(zaput1, connection); DataSet dSet = new DataSet(); adapter.Fill(dSet); datta.DataSource = dSet.Tables[0]; connection.Close(); } Функція для заповнення даними об'єктів ComboBox модуля «zhu.cs»: public void combSel(ComboBox combi, string stre,bool resh) { // OleDbDataAdapter adapter; combi.Items.Clear(); OleDbCommand thisCommand = new OleDbCommand(stre, connection); connection.Open(); OleDbDataReader thisReader = thisCommand.ExecuteReader(); thisReader.ToString(); if (resh) combi.Items.Add("*"); while (thisReader.Read()) combi.Items.Add(thisReader[0].ToString()); thisReader.Close(); connection.Close(); } Функція для коректного відображеня даних в об'єктах DataGridView модуля «zhu.cs»: public void VisiF(DataGridView dataGridParent, int county) { CurrencyManager cmgr = (CurrencyManager)dataGridParent.BindingContext[dataGridParent.DataSource]; cmgr.SuspendBinding(); for (int i = 0; i <= county; i++) dataGridParent.Columns[i].Visible = false; cmgr.ResumeBinding(); } 3.3 Інструкція користувача При запуску програми з'являється форма зі списком усіх учнів школи: Рисунок 3.5 - Головна форма. У ній можна вибрати клас який нас цікавить у випадаючому списку, який знаходиться у верхньому лівому куті: Рисунок 3.6 - Вибір класу за яким проведеться вибірка. Якщо ж двічі клацнути по якомусь з учнів, то з'виться форма з його успішністтю: Рисунок 3.7 - Успішність вибраного учня. Для переходу на форму редагування потрібно натиснути кнопку «Форма редагування успішності», яка знаходиться у верхньому правому куті головної форми. Рисунок 3.7 - Форма редагування. На формі редагування можна додати, або видалити предмети, та оцінки з назвами тем, також можна виставляти оцінки редагуючи стовпчик оцінки. Всі змінювані дані будуть заноситись в базу даних. 3.4 Вимоги до технічних засобів Вимоги до апаратних засобів значною мірою залежать не від вимог розробленого програмного забезпечення, а від вимог операційної системи. Однак рекомендованими мінімальними вимогами до апаратного забезпечення розрахункової програми можна вважати такі: процесор - AMD Athlon 1.8 GHz або його аналог іншого виробника; обсяг оперативної пам'яті - 256 MB Мбайт; обсяг вільного місця на диску - 20 MB. Зазначені мінімальними вимоги до апаратного забезпечення стосуються лише IBM-сумісних персональних комп'ютерів, оскільки для комп'ютерів сімейства Apple Macintosh тестування розробленого програмного забезпечення не проводилося. До зазначених апаратних вимог необхідно також додати наявність мінімальної розширювальної здатності монітору 800*600. Вимоги до програмного забезпечення викладені нижче. У якості операційної системи комп'ютера можуть виступати: Windows XP/Vista/7 x86 - x64. Тестування з іншими операційними системами не проводилось. Висновки Як висновок, можна відзначити, що електронні журнали необхідно розглядати не як новомодний спосіб відображення оцінок, а як потужний засіб підвищення успішності і рівня освіти в цілому на рівні школи. Для кращої реалізації власного проекту було проведено огляд новітніх інформаційних технологій, та програмного забезпечення, що могли б бути використані для розробки сучасного, ефективного та головне конкуренто здатного програмного продукту. Для роботи обрано середовище розробки програмного забезпечення Microsoft Visual Studio 2008. Література 1. А. Климов C#. Советы программистам,2008 - 658с. 2. Чарльз Петцольд Программирование с использованием Microsoft Windows Forms Русская Редакция, -Питер,2006 - 432с 3. Павловская Т.А. C#. Программирование на языке высокого уровня,2009 - 453с 4. Фаронов В.В. Программирование на языке С#,2007 - 240с. 5. Ульман Л. MySQL: Пер. с англ. Слинкина А.А -- М.: ДМК Пресс; СПб.: Питер, 2004. -- 352 с. 6. Интернет-Университет Информационных Технологий [Електронний ресурс]. - Режим доступу: http://www.INTUIT.ru 7. Библиотека класов С# [Електронний ресурс]. - Режим доступу: http://msdn.microsoft.com/ 8. Форум программистов .NET [Електронний ресурс]. - Режим доступу: http://forum.vingrad.ru/forum/
Страницы: 1, 2
|