Техничка школа Пирот

Maturski rad: Savic Nikola, IV-4 "E-DNEVNIK"

📅 09. јун 2010.
Vesti
Maturski rad: Savic Nikola, IV-4 "E-DNEVNIK"

Maturant: Savić Nikola, IV-4, Elektrotehničar računara
Predmet: Računarske mreže i komunikacije
Tema: E-DEVNIK KLIJENTSKA APLIKACIJA

 

interfejs_start

OLG

Zadatak praktičnog rada je izrada  e-dnevnik  klijent aplikacije  za potrebe škole. U pitanju je izrada Windows aplikacije za generisanje XML fajla sa ocenama učenika za potrebe Web aplikacije za prikazivanje ocena učenika na sajtu škole. Aplikacija treba  da sve potrebne podatke preuzme iz posebno kreirane baze podataka i na osnovu njih generiše xml fajl formata potrebnog  Web aplikaciji za prikaz ocena učenika. Web aplikacija u ovom slučaju je Online Grades sistem za onlajn pregled i unos ocena učenika.

 

Tehnologije i alati upotrebljeni za razvoj aplikacije:
Microsoft Visual Studio 2008 Express Edition, .NET Framework, C#, SQL, ADO.NET, Microsoft Access 2007, Online Grades, XML.

Maturski rad (Word dokument, source code i instalaciju programa) možete preuzeti ovde.

 

  {edocs}Maturski/e-dnevnik.doc,750,600,link{/edocs}

 


2.1 Namena aplikacije-osnovne mogućnosti

e-dnevnik klijent je aplikacija koja služi za eksportovanje ocena učenika na e-dnevnik server ocena škole,koristeći š kolsku bazu podataka sa ocenama organizovanu na specifičan način. Ova aplikacija nije elektronski dnevnik za vođenje ocena učenika,već samo klijent aplikacija koja iz posebno organizovane baze podataka preuzima potrebne podatke i stvara xml fajl potreban za unos na e-dnevnik aplikaciju na severu (u sklopu internet prezentacije škole). Učitavanje  tog fajla je ručno,u sklopu odgovarajuće strane Online Grades  sistema škole.

2.2Izgled prozora aplikacije

interfejs_start

2.3 Rad sa aplikacijom –koraci ka generisanju xml fajla
  1. Pokretanje aplikacije se vrši klikom na prečicu programa na desktopu ili na ikonicu programa u start meniju.

ikonica

     

    1. Poruka po prvom pokretanju koja saopštava da prethodna podešavanja programa nisu pronađena se javlja ako:
    • nije pronađen fajl sa podešavanjima lastset.txt 
    • aplikacija se pokreće po prvi put 
    • lastset.txt  je oštećen ili nepotpun 

     

     prvo_pokretanje

    Ukoliko su sva podešavanja pronađena i ispravna aplikacija će sama pronaći bazu podataka sa ocenama učenika i sama ponuditi naziv i lokaciju generisanog xml fajla.

    1. Pronalaženje baze podataka klikom na dugme učitaj je potrebno ukoliko se želi promeniti baza podataka koja se koristi ili po prvom pokretanju programa.U svakom slučaju naziv baze podataka koja se trenutno koristi i njena lokacija je data odmah pored dugmeta Učitaj.
    2. Unos korisničkog imena i lozinke za e-dnevnik škole u odgovarajuće tekst boksove.Lozinka koja se unosi je ista ona koju profesori koriste za pristup svom nalogu na e-dnevniku škole.Unos je obavezan.
    3. Unos imena predavača se odnosi na stvarno ime profesora i prikazuje se na odgovarajućim stranama e-dnevnika na internetu.Ovo je obavezno polje.
    4. Izbor perioda tj. perioda školske godine  na koji se odnose ocene je zahtevano i obavezno polje.Potrebno je iz padajuće liste izabrati odgovarajući period.
    5. Komentar o odeljenju/predmetu nije obavezan i odnosi se na lična zapažanja o ukupnom učinku odeljenja iz nekog predmeta koja se prikazuju u okviru liste sa ocenama svih učenika određenog odeljenja.Maksimalno 1000 karaktera.

    1. Izbor predmeta jeste izbor odgovarajućeg predmeta na koji seodnose ocene učenika.Zbog specifičnosti Online Grades   sistema nije moguće odjedanput eksportovati sve ocene svih učenika jednog odeljenja za sve predmete već samo za jedan predmet.Ovo je obavezno polje i ukoliko se ne odabere ni jedan predmet aplokacija će prikazati poruku o grešci.
    2. Izbor odeljenja iz padajuće liste je obavezno i ovim se eksportuju ocene učenika samo izabranog odeljenja. Ovo je obavezno polje i ukoliko se ne odabere ni jedno odeljenje aplikacija će prikazati poruku o grešci.
    3. Izbor lokacije i naziva eksportovanog xml fajla ukoliko nije ponuđena  ni jedna lokacija ili se ona želi promeniti, vrši klikom na dugme EKSPORT .Nakon odabira naziva i likacije ista se prikazuje uodmah pored dugmeta.Naziv nije bitan ali se preporučuje da to bude nešto u vezi sa profesorom,predmetom,datumom eksporta i slično. 
    4. Eksportovanje započinje klikom na dugme eksportuj .Na izabranoj lokaciji se formira potreban xml fajl ukoliko su svi zahtevani parametri prisutni.U suprotnom dolazi do poruke o grešci. 
    5. Pomoć korisniku se dobija klikom na link pomoć,koji će prikazati sadržaj indeksa tema koje nude rešenja problema sa redom u aplikaciji.Ovaj sadržaj će se prikazati u podrazumevanom Web pregledaču. Takođe sadržavanjem kursora nad elementima prozora pojaciće se tooltip baloni sa uputstvima u vezi sa objektom ispod. 
    6. Kraj rada se vrši klikom na dugme zatvori a pritom se korisnik pita da li je siguran da želi da završi rad u aplikaciji.

    yes_no_dialog

       

       

      2.4 Pimer strukture generisanog  xml fajla

       RD1

      01

      Quarter 1: Reading

      login name

        

      password

      Mr. Teacher Name

      Kraj godine

      komentar oodeljenju

       

      2006-10-01

      Journal Intro.

      50

      Assignment Note Number one.

       

      2006-10-02

      Student Survey

      100

      Assignment Note number two.

       

      Summer Essay

      50

         

      4335

      50,yes,,50,50,50

      100.0

      A+

      2,,,

      Free text comments for this student.

       

      4987

      50,yes,10,47,45,50

      100.7

      A+

      3,,,

      Student comments for student 4987.

       

       


      2.5 Upload  xml fajla

      Nakon generisanja xml fajla sa ocena ,spremnog za učitavanje na e-dnevnik škole treba pristupiti i samom upload-u. To se radi na sledeći način:

      1. Logujte se na strani za profesore Online Grades sistema škole koristeći svoje korisničko ime i šifru.To je isto korisničko ime i šifra koja je prethodno unesena u e-dnevnik klijent aplikaciju prilikom kreiranja xml fajla.
      2. Kliknite na link Submit File nakon čega se otvara strana naslovljena Locate your export file... kao na slici submit
      3. Kliknite na dugme Browse i iz dijaloga pronađite odgovarajući fajl sa ocenama.Nakon toga kliknite na dugme OK
      4. Naziv fajla i lokacija će se pojaviti odmah pored dugmeta Browse.
      5. Kliknite na dugme Submit File to Online Grades
      6. Ukoliko je sve u redu dobićete poruku o uspešnom unosu ocena na sistem.Ako postoje greške probajte da ih ispravite na sledećoj strani uz pomoć administratora  Online Grades sistema škole.
      7. U ostalom pratite uputstva pomoći sistema ili administratora.

       


      3. Rad sa ugrađenom (coreDB)bazom podataka

       

      3.1 Osnovne napomene

       

      • Ugrađena (coreDB) baza  podataka je osnovni i jedini izvor podataka sa ocenama,učenicima,odeljenjima,predmetima,i zadacima u okviru predmeta na osnovu koga e-dnevnik klijent generiše xml fajl za potrebe aploada.Menjanje zadate strukture u smislu brisanja dovodi do nemogućnosti rada aplikacije.Međutim,dodavanje sadržaja u smislu tabela i kolona ne smeta radu aplikacije.
      • Ugrađena (coreDB) baza podataka dolazi u sklopu instalacije e-dnevhik klijenta i nalazi se u folderu sa instaliranom aplikacijom .
      • Ugrađena (coreDB) baza  podataka je zamišljena prvenastveno kao kostur za izgradnju školske baze podataka.Zahvaljujući funkcijama MS Accessa 2007 voma je lako ovu bazo organizovati i kao mirror bazu već postojeće baze podataka škole,odnosno vema je lako popunuti i iz spiska učenika iz Excel-a.
      • Nije neophodno postojanje ovakve baze na svakom računaru profesora posebno.Ovo može biti i centralizovana baza podataka na jednom računaru u mreži(preporučljivo).
      • Naziv baze je nebitan.
      • Prema uputstvu profesora sigurnosna podešavanja baze podataka su namerno isključena.Preporučujem da se ova baza zato smesti na zaštićenom nalogu računara.Postavljanje zaštite naknadno može dovesti do nemogućnosti aplikacije da pristupi bazi podataka.

      3.2 Sruktura baze podataka

       

      Kao što je već napomenuto,ovo je kostur za školsku bazu podataka sa tako definisanom strukturom koja je prilagođena specifičnoj organizaciji  Online Grades sistema.Samo ovakvoj bazi podatak može da pristupi klijentska aplikacija za generisanje xml fajla,tako da nije preporučljivo menjanje njene osnovne strukture.Međutim njeno proširenje ne predstavlja problem normalnom funkcionisanju e-dnevnik klijenta.Zašto je baza ovako organizovana prizialazi iz specifičnosti potreba Online Grades sistema tj. od činjenice da je on prilagođen zapadnom sistemu školovanja.Prilikom izgradnje baze ovaj sistem je maksimalno prilagođen našem školskom sistemu ,a struktura podataka će biti kasnije objašnjena.

      layot_baze_finalver

      3.3 Sistem  organizacije podataka u bazi.Odnos pojedinih entiteta.

      Da bi se bolje razumela organizacija baze podataka mora se razumeti način na koji Online Grades sistem posmatra podatke o učenicima,ocenama,zadacima itd. Naime Online Grades sistem posmatra sve učenike ravnopravno(bez obzira na pripadnost odeljenju/razredu).Takođe ocene učenika se ne posmatraju na nivou predmeta , već na nivou pojedinačnih zadataka tj. aktivnosti na kojima učenici dobijaju ocene.Dakle jedina veza između učenika i zadataka jeste konkretno tabela ocena.Zbog toga  ova ugrađena baza podataka ima malo ,,čudniju“ organizaciju podataka u odnosu na klasičan sistem evidencije podataka o ocenama učenika.

      Zarad prilagođenja Online Grades sistema našem sistemu vođenja evidencije baza je organizovana na sledeći način:

      1. Top level tabele su Razredi (za tabelu Učenici) i Predmeti (za tabelu sa aktivnostima na kojima učenici mogu dobiti ocenu – Zadaci).Ove dve tabele na samo što logički približavaju organizaciju evidencije o učenicima nama poznatijem modelu,već služe i kao filter za izdvajanje neophodnih podataka prilikom generisanja eksporta.
      2. Tabela Zadaci  sadrži opise svih zadataka iz svih predmeta u školi,nezavisno od razreda,odeljenja ili predmeta.Isto tako i tabela Učenici sadrži podatke o svim učenicima nezavisno od razreda,odeljenja ipredmeta koji pohađaju.
      3. Jedina tabela koja povezuje ove prethodno navedene glavne strukture podataka jeste Tabela Ocena koja funkcioniše na odnosu učenik-zadatak

      ->ocena.

      Možda je najbolje pogledati sledeći dijagram zarad shvatanja organizacije podataka:


      3.4 Preporuke za popunjavanje baze podataka podacima

      Tokom izrade baze podataka  i njene organizacije došao sam do nekih zaključaka u vezi sa popunjavanjem tabela(što se najčešće odnosi na primarne ključeve tabela kod kojih  treba težiti da su funkcionalni i u isto vreme i human readable –razumljivi za ljude):

      1. Entitet Razredi treba posmatrati kao celinu.To znači da primarni ključ treba formirati u formi Naziv_obrazovnog_profila_godina_upisa  npr (EltehRac_2010).Kasnije možete menjati pojedinosti tipa Razred u kome su učenici konkretnog obrazovnog profila upisanog iste godine i numeracije odeljenja itd.
      2. Šifra učenika se mora sastojati samo od brojeva,nikako od slova inače dolazi do grešaka prilikom učitavanja eksport fajla.
      3. Šifra predmeta je najbolje da se organizuje u smislu predmeta kao kursa koji pohađaju učenici npr(Elektrotehnika1ili Mat2).
      4. Šifru zadatka je najbolje smisleno povezati sa konkretnom aktivnošću iz određenog predmeta npr. Mat2_Pismeni2 ili Merenja1_DomaciRad_1.2.2010.
      5. Što se tiče polja ID u tabeli ocena ono je bitno samo za aplikaciju za eksport,a kako je autonum tipa može da ima bilo koju vrednost.Bitno je pravilno povezati šifru učenika sa odgovarajućom šifrom zadatka,ako se prate predhodne preporuke to neće biti prevelik problem.

       

      3.5 Ugrađene forme za unos i sortirani prikaz podataka

       

      Pored ručnog popunjavanja bazu je moguće popuniti i uz pomoć ugrađenih formulara za unos podataka.Naravno modu se i isprogramirati posebne aplikacije za unos podataka,a masovno popunjavanje tabela se može izvršiti i učitavanjem spiska učenika ili predmeta iz Excela.

      Organizovano pregledavanje podataka i njihovo štampanje na primer je olakšano i moguće iz samog  Microsoft Access 2007 menadžera baze podataka.Dodavanje novih formi izveštaja je veoma lako i svako sa malo iskustava u Access-u možnje veoma lako da doda nove.Isto važi i za forme za unos podataka.

       

      3.6 Proširenje osnovne baze podataka

       

      Kao što je već napomenuto ova baza predstavlja samo kostur za izradu kompleksnije baze podataka .Njena nadogradnja je zato moguća i poželjna i zavisi samo od potreba zbog kojih se proširava.Jedini uslov je da se već ugrađeni elementi ne diraju,tj. da se ne briši i preimenjuju.Naravno ukoliko ova baza služi samo e-dnevnik klijentskoj aplikaciji nema potreba za nadogradnjom.


      4.  Izvorni kod programa

      1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 
      using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.OleDb; using System.IO;   namespace WindowsFormsApplication1 {  public partial class Form1 : Form  {  public Form1()  {  InitializeComponent();  }  //bool ok = false;  string output_path,inport_path;  bool promene = false;  string conection_string, comand_string;    private void Form1_Load(object sender, EventArgs e)  {  txbIMe.Enabled = false;  txbKomentar.Enabled = false;  txbLogin.Enabled = false;  txbPassword.Enabled = false;  promene = true;  try  {  StreamReader read = new StreamReader("lastset.txt");  inport_path =read.ReadLine();  output_path = read.ReadLine();  read.Close();  if (inport_path != "" && output_path != "")  {    IMPORT_PATH_LABEL.Text = inport_path;  EXPORT_PATH_LABEL.Text = output_path;  btnEXPORT.Enabled = true;  txbIMe.Enabled = true;  txbKomentar.Enabled = true;  txbLogin.Enabled = true;  txbPassword.Enabled = true;  cmbODELJENJE.Enabled = true;  cmbPeriod.Enabled = true;  cmbPREDMET.Enabled = true;  {  try  {  conection_string = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}", inport_path);  // OleDbConnection Konekcija = new OleDbConnection();  Konekcija.ConnectionString = conection_string;  label_status.Text = "Program pristupa podataka! ";  Konekcija.Open();  //komanda  //OleDbCommand Komanda = new OleDbCommand();  Komanda.Connection = Konekcija;  comand_string = "SELECT * FROM Predmeti;";  Komanda.CommandText = comand_string;    //data set  // DataSet DS = new DataSet();    //data adapter  //OleDbDataAdapter DA = new OleDbDataAdapter();  DA.SelectCommand = Komanda;    DA.Fill(DS);    //data reader  // OleDbDataReader DR;    DR = Komanda.ExecuteReader();  //punjenje combo boxa-a  while (DR.Read() == true)  {  cmbPREDMET.Items.Add(DR["Sifra_Predmeta"].ToString());    }  Konekcija.Close();    comand_string = "SELECT ID FROM Razredi";  Konekcija.ConnectionString = conection_string;  Konekcija.Open();  Komanda.CommandText = comand_string;  DA.SelectCommand = Komanda;  DA.Fill(DS);  DR = Komanda.ExecuteReader();  //punjenje combo boxa-a  while (DR.Read() == true)  {  cmbODELJENJE.Items.Add(DR["ID"].ToString());    }  btnEXPORT.Enabled = true;  button1.Enabled = true;    //}  Konekcija.Close();  label_status.Text = "Program uspesno okoncao pristup bazi podataka. ";  btnEXPORT.Enabled = true;  button1.Enabled = true;  }  catch (FileNotFoundException)  {  MessageBox.Show("DATA BAZA NIJE PRONADJENA ILI SA NJOM NIJE MOGUCE USPOSTAVITI KONTAKT!", "OBAVESTENJE!");  }  }    }        else MessageBox.Show("Poslednja podesavanja programa nisu pronadjena.nMoracete rucno da pronadjete bazu podataka!", "Obavestenje", MessageBoxButtons.OK);    }  catch (FileNotFoundException)  {  MessageBox.Show("Poslednja podesavanja programa nisu pronadjena.nMoracete rucno da pronadjete bazu podataka!", "Obavestenje", MessageBoxButtons.OK);    }    label_status.Text = "Program uspesno pokrenut,ocekuje unos podataka! ";  }  OleDbConnection Konekcija = new OleDbConnection();  OleDbCommand Komanda = new OleDbCommand();  DataSet DS = new DataSet();  OleDbDataAdapter DA = new OleDbDataAdapter();  OleDbDataReader DR;    private void btnIMPORT_Click(object sender, EventArgs e)  {  openFileDialog1.InitialDirectory = inport_path;  try{    if (openFileDialog1.ShowDialog() == DialogResult.OK)  {  //malo kozmetike  {  btnEXPORT.Enabled = true;  txbIMe.Enabled = true;  txbKomentar.Enabled = true;  txbLogin.Enabled = true;  txbPassword.Enabled = true;    inport_path = openFileDialog1.FileName;  IMPORT_PATH_LABEL.Text = inport_path;  cmbODELJENJE.Enabled = true;  cmbPeriod.Enabled = true;  cmbPREDMET.Enabled = true;  cmbODELJENJE.Items.Clear();  cmbPREDMET.Items.Clear();  }    //konekcija   conection_string = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}", Convert.ToString(openFileDialog1.FileName));  // OleDbConnection Konekcija = new OleDbConnection();  Konekcija.ConnectionString = conection_string;  label_status.Text = "Program pristupa podataka! ";  Konekcija.Open();  //komanda  //OleDbCommand Komanda = new OleDbCommand();  Komanda.Connection = Konekcija;  comand_string = "SELECT * FROM Predmeti;";  Komanda.CommandText = comand_string;    //data set  // DataSet DS = new DataSet();    //data adapter  //OleDbDataAdapter DA = new OleDbDataAdapter();  DA.SelectCommand = Komanda;    DA.Fill(DS);    //data reader  // OleDbDataReader DR;    DR = Komanda.ExecuteReader();  //punjenje combo boxa-a  while (DR.Read() == true)  {  cmbPREDMET.Items.Add(DR["Sifra_Predmeta"].ToString());    }  Konekcija.Close();    comand_string = "SELECT ID FROM Razredi";  Konekcija.ConnectionString = conection_string;  Konekcija.Open();  Komanda.CommandText = comand_string;  DA.SelectCommand = Komanda;  DA.Fill(DS);  DR = Komanda.ExecuteReader();  //punjenje combo boxa-a  while (DR.Read() == true)  {  cmbODELJENJE.Items.Add(DR["ID"].ToString());    }      }  Konekcija.Close();  label_status.Text = "Program uspesno okoncao pristup bazi podataka. ";  }   catch (FileNotFoundException )  {    MessageBox.Show("DATA BAZA NIJE PRONADJENA ILI SA NJOM NIJE MOGUCE USPOSTAVITI KONTAKT!","OBAVESTENJE!");  label_status.Text = "Program nije uspesno pristupio bazi podataka. ";  }        //  // Komanda.Dispose();  // Konekcija.Dispose();  // DR.Dispose();  }    private void textBox4_TextChanged(object sender, EventArgs e)  {    }    private void button3_Click(object sender, EventArgs e)  {  if (promene == false)  {  this.Close();  }  else  {  if(MessageBox.Show("Da li ste sigurni da zelite da prekinete rad?","Upozorenje!",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Question)==DialogResult.Yes)  {  this.Close();  }      }  }    private void cmbPeriod_SelectedIndexChanged(object sender, EventArgs e)  {      }    private void button1_Click(object sender, EventArgs e)  {  string tempString,tmp1,tmp2=" ";  string period = Convert.ToString(cmbPeriod.SelectedItem);  string odeljenje = Convert.ToString(cmbODELJENJE.SelectedItem);  string predmet = Convert.ToString(cmbPREDMET.SelectedItem);  string loggin = Convert.ToString(txbLogin.Text);  string pass = Convert.ToString(txbPassword.Text);  string ime = Convert.ToString(txbIMe.Text);  string komentar = Convert.ToString(txbKomentar.Text);  string temstring2;  StreamWriter sr = new StreamWriter(output_path);    //StreamReader sr3=new StreamReader("temp.txt");  //set za konekciju sa ucenicima  OleDbConnection Konekcija2 = new OleDbConnection();  OleDbCommand Komanda2 = new OleDbCommand();  DataSet DS2 = new DataSet();  OleDbDataAdapter DA2 = new OleDbDataAdapter();  OleDbDataReader DR2;  //pocetak eksporta    label_status.Text = "Program pristupa obradi .xml datoteke; "; sr.WriteLine(" ");   //definicija odeljenja sr.WriteLine(" "); temstring2 = String.Format(" {0}  ",odeljenje); sr.WriteLine(temstring2); sr.WriteLine(" 01 ");  Konekcija.Open();  Komanda.Connection=Konekcija;  tempString=string.Format("SELECT * FROM Predmeti WHERE Predmeti.Sifra_Predmeta='{0}';",predmet);  Komanda.CommandText=tempString;  DA.SelectCommand=Komanda;  DA.Fill(DS);  DR=Komanda.ExecuteReader();  DR.Read();  sr.WriteLine(" {0}  ",DR["Naziv_Predmeta"].ToString()); sr.WriteLine(" {0} ",loggin); sr.WriteLine(" "); sr.WriteLine(" "); sr.WriteLine(" "); sr.WriteLine(" {0} ",pass); sr.WriteLine(" {0} ",ime); sr.WriteLine(" {0} ",period); sr.WriteLine(" {0} ",komentar); sr.WriteLine(" "); Konekcija.Close(); //DR.Dispose(); //definicija zadataka  comand_string = String.Format("SELECT * FROM Zadaci,Predmeti WHERE Zadaci.Predmet_kome_zadatak_pripada=Predmeti.Sifra_Predmeta AND Predmeti.Sifra_predmeta='{0}' ORDER BY Datum_izrade_zadatka ;", predmet);  Konekcija.Open();  Komanda.Connection = Konekcija;  Komanda.CommandText = comand_string;    DA.SelectCommand = Komanda;  DA.Fill(DS);  DR = Komanda.ExecuteReader(); //petlja za popunu tabele zadataka while(DR.Read()==true)  { sr.WriteLine(" "); sr.WriteLine(" {0} ", DR["Datum_izrade_zadatka"].ToString()); sr.WriteLine(" {0} ",DR["Naziv_zadatka"].ToString()); sr.WriteLine(" {0} ",DR["MAX_bodova"].ToString()); sr.WriteLine(" {0} ",DR["Komentar"].ToString()); sr.WriteLine("");   };  Konekcija.Close(); //definicaja ucenika u while petlji  comand_string = String.Format("SELECT * FROM Ucenici,Razredi WHERE Ucenici.Razred=Razredi.ID AND Razredi.ID='{0}';", odeljenje);    Konekcija.Open();  Komanda.Connection = Konekcija;  Komanda.CommandText = comand_string;    DA.SelectCommand = Komanda;  DA.Fill(DS);  DR = Komanda.ExecuteReader();   while (DR.Read() == true) {  sr.WriteLine(" ");  temstring2=DR["Sifra_ucenika"].ToString();  sr.WriteLine(" {0} ",temstring2 );  //sr.WriteLine(" ");  //popuna ocena    // ce mora da se deklarise jos jedan set objekata za konekciju sa bazom da bi se popunilie ocene!  tempString = String.Format("SELECT * FROM Tabela_ocena,Zadaci,Ucenici WHERE Tabela_ocena.SIFRA_ZADATKA=Zadaci.ID_zadatka AND Tabela_ocena.SIFRA_UCENIKA=Ucenici.Sifra_ucenika AND Zadaci.Predmet_kome_zadatak_pripada='{0}' AND Tabela_ocena.SIFRA_UCENIKA='{1}';",predmet ,temstring2);  Konekcija2.ConnectionString =conection_string;  Konekcija2.Open();  Komanda2.Connection = Konekcija2;  Komanda2.CommandText = tempString;  DA2.SelectCommand = Komanda2;  DA2.Fill(DS2);  DR2 = Komanda2.ExecuteReader();  string tmp3="";  while (DR2.Read() == true)  {  tmp1=String.Format("{0}" , DR2["Ocena_na_zadatku"].ToString());  tmp2=String.Format("{0},{1}", tmp2 , tmp1);  tmp3 = tmp2;  };    Konekcija2.Close();  sr.WriteLine(" {0} ", tmp3);    //sr.WriteLine("");  sr.WriteLine(" ");  sr.WriteLine(" {0} ", DR["Srednja_ocena"]);  sr.WriteLine(",,,");  //for(int x=0;x=i;i++)  //{  //temp_string2=string.Format(",{0}",temp_string);  //temp_string=tempstring2;  //};  //sr.WriteLine("");  sr.WriteLine(" ");  sr.WriteLine("");   }; sr.WriteLine(""); Konekcija.Close(); sr.Close(); label_status.Text = "Program uspesno okoncao pristup bazi podataka i formirao .xml datoteku. ";   if (inport_path != "" || output_path != "") {  StreamWriter sr2 = new StreamWriter("lastset.txt");    sr2.WriteLine("{0}", inport_path);  sr2.WriteLine("{0}", output_path);  sr2.Close();   }  }    private void btnEXPORT_Click(object sender, EventArgs e)  {  saveFileDialog1.InitialDirectory = output_path;  if (saveFileDialog1.ShowDialog() == DialogResult.OK)  {  output_path = Convert.ToString(saveFileDialog1.FileName);  EXPORT_PATH_LABEL.Text = output_path;  button1.Enabled = true;    }  if (inport_path != "" || output_path != "")  {  StreamWriter sr2 = new StreamWriter("lastset.txt");    sr2.WriteLine("{0}", inport_path);  sr2.WriteLine("{0}", output_path);  sr2.Close();    }  }    private void Form1_FormClosing(object sender, FormClosingEventArgs e)  {  if (inport_path != "" || output_path != "")  {  StreamWriter sr2 = new StreamWriter("lastset.txt");    sr2.WriteLine("{0}", inport_path);  sr2.WriteLine("{0}", output_path);  sr2.Close();    }  //  Komanda.Dispose();  Konekcija.Dispose();  //DR.Dispose();  }    private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)  {  try  {  VisitLink();  }  catch (Exception ex )  {  MessageBox.Show("Aplikacija ne moze da pokrene/pronadje index.htm .");  } }   private void VisitLink() {    linkLabel1.LinkVisited = true;    System.Diagnostics.Process.Start("index.htm"); }    }  }    

       


       


       

      5. Zaključak

       

      Tokom rada na razvoju ove aplikacije i pisanju izvornog koda došao sam do sledećih zaključaka i zapažanja:

      Dobre strane razvoja aplikacija u okviru  .Net Frameworka jesu lakoća pisanja koda i pojednostavljenje (posmatrano sa programerske strane) rada sa ključnim i komplikovanim sistemima kakav je na primer SQL baza podataka.Isto tako i sam način  na koji je aplikacija isprogramirana i dizajnirana nudi više prednosti:

      -dobra logička organizacija podataka u internoj bazi podataka

      -nezavisnost od postojanja internet konekcije sa e-dnevnik serverom  zarad generisanja xml fajla sa ocenama

      -lakoća korišćenja i jednostavnost

      Naravno primećene su i loše strane razvoja ovakve aplikacije u pomenutom okruženju/platformi:

      -potreba za postojanjem .Net Framework podrške na računaru korisnika ,verzije 2.0 ili više

      -opterećenje lokalne mreže u situaciji kada je baza podataka sa ocenama na jednom računaru u lokalnoj mreži a aplikacija pristupa sa drugog-to je posledica same prirode SQL upita bazi i delimične nefleksibilnosti ADO.NET-a .

      -nepotpuna kompatibilnost sa našim školskim sistemom,što je posledica same prirode Online Grades sistema.

       

      Ovakva klijentska aplikacija veoma dobro podmiruje potrebe za koje je namenjena.Međutim sam pristup razradi problema ,kao i njegovo rešavanje je donelo i set prednosti i mana.Ova aplikacija ,dakle,je specijalizovana samo za potrebe generisanja eksport fajla sa ocenama  za Online Grades sistem za prikazivanje ocena učenika na internetu.Ko takva ona odlično podmiruje potrebe jedne prosečne školske ustanove,mada je sam Online Grades sistem ipak optimizovaniji za visokoškolske ustanove.Mogućnost aplikacije da nezavisno od samog Online Grades sistema generiše fajl sa ocenama jeste i najveća prednost,ali i mana same aplikacije,jer kako je potpuno nezavistna u odnosu na sam sistem aplikacija generiše eksport fajl sa svim ocenama u bazi a ne vodi računa o onim koje već postoje u bazi Online Grades sistema.To dovodi do nepotrebnog zatrpavanja servera nepotrebnim podacima ,koje ovaj odvaja,i odbacuje, jer ih već ima.

      Dalji razvoj ovakve aplikacije je najpoželjnije voditi u smeru pune Web aplikacije napisane na primer u PHP-u koja je u potpunosti prilagođena Online Grades sistemu škole,ali koja i koristi samu bazu podataka ovog sistema za čuvanje i direktan unos podataka u sistem.Takođe trebalo bi zadržati izvesnu dozu nezavisnosti,tj. postojanja mogućnosti da se generiše eksport fajl za kasnije,poželjno,automatizovani proces aploada.


      Literatura

       

      Tokom izrade ovog maturskog rada korišćena je sledeća literatura i izvori:

      1. 1. Online Grades Internet Grade Posting System – dokumentacija vezana za način rada ovog sistema za prikazivanje ocena,kao i za format xml fajla za unos ocena i način na koji je organizovano arhiviranje podataka u bazi:  http://onlinegrades.sf.net/

      http://onlinegrades.sourceforge.net

      1. 2. Easy Grade Pro (EGP) – klasičan elektronski dnevnik potpuno prilagođen pomenuom sistemu.Korišćena je pomoć korisniku ovog programa radi lakšeg organizovanja baze podataka učenika. 
      2. 3. Mala škola programiranja – publikacija sa osnovama programiranja u C# i Microsoft Visual Studio 2008 kao i sa  osnovama upotrebe ADO.NET-a i SQL –a za potrebe aplikacije. http://www.microsoft.com/scg/obrazovanje/pil/programiranje/default.mspx 
      3. 4. Matična internet stranica Microsoft Visual Studio alata –puno korisnih primera i dokumentacije u vezi sa programiranjem u C# i Microsoft Visual Studio 2008 kao i o mogućnostima .NET Framework-a : http://www.microsoft.com/express/sql/default.aspx
      4. 5. Relacioni model baza podataka http://en.wikipedia.org/wiki/Relational_model
      5. 6. XML- format dokumenata,server parseri itd... http://www.w3.org/XML/