Разработвне на информационна система

     Информационната система (ИС) е предназначена за създаване, добавяне, обработка и актуализация на въведени данни за получаване на информация, която е нужна на потребителя.
Потребителя може да получава различна информация като: справки, статистики, диаграми и др. Поради непрекъснатото нарастване на необходимостта едни и същи данни да се ползват от различни приложения, от различни потребители и за различни цели, данните започват да се организират в бази от данни (БД).

     Целта на урока е да се проектира и програмира информационната система за обучение. Да въведем име, презиме, фамилия и клас на трима ученика. Въвеждаме оценките по литература, математика, английски език и да изчислим средния успех от тези предмети. Да изведем тази информация на екрана и след това да я запишем във вид на файл на твърдия диск под името: "myfile1.txt"

I. Проектиране

За обучение можем да създадем различни информационни системи като например здравословен картон, изчисление на среден успех от диплома и др. Ние ще създадем малка информационна система за учениците в един клас.
    За начало трябва да уточним от каква информация се нуждаем и от какъв тип ще бъдат данните:
  •   Име - ще съдържа до 20 символа, тип string.
  •   Презиме - до 20 символа, тип string.
  •   Фамилия - до 40 символа, тип string.
  •   Клас - до 5 символа, тип string.
          Учебни предмети и среден успех.
  •   Литература - цяло число, тип int.
  •   Математика - цяло число, тип int.
  •   Английски език - цяло число, тип int.
  •   Среден успех - реален типо данни (число с десетична запетая).

II. Теоретична подготовка

          II.I. Структури

   Структурата:    представлява набор от разнообразни типове данни с различна дължина , определени с една декларация.

Деклариране :

Деклариране: Пример:

      struct Етикет
    {
        тип 1 член 1;
        тип 2 член 2;
        тип 3 член 3;
    -      
    -      
   тип N член N;
    } име на обекта (променливата);

    struct Name
      {
          char first[30];
          char last[30];
          int year;
             -
             -
             -

        } Asen,Ivan;

      Действие :

      struct – служебната дума за деклариране на структура;
      Етикет – името на структурата-незадължителна част, но обекта (променливата)
трябва де е деклариран, тук след затварящата фигурна скоба
(от по-горния пример - Ivan, Asen)
      тип – показва от какъв тип ще бъдат променливите (идентификаторите);
      име на обекта - не задължително поле, служи за директно деклариране на обекти.
Името на структурата може да се ползва за деклариране на нови променливи (обекти), както int, double, float.

          II.II. Класове

   Класът  представлява набор от разнообразни типове данни и функции с различни права на достъп, определени с една декларация.
     Правата на достъп се наричат още спецификатори на достъп и могат да бъдат:
private , protected и public .
Данните и функциите декларирани в дефиницията на класа са съответно:
- член променливи и член функции.

      class – служебната дума за деклариране на клас;
      Етикет – името на класа
      тип – показва от какъв тип ще бъдат променливите (идентификаторите) или функциите;
      име на обекта - не задължително поле, служи за директно
деклариране на обекти - в конкретния случай това е (променлива, обекта, екземпляра
инстанцията - всички имена имат едно и също значение)  променливата b.
    Правилното наименование е обекта b.
       Основната идея на класовете е, че можем да създаваме
собствени типове многокомпонентни данни.

     Може да си представим името на класа като име от прости
типове данни: int a, double a,b, char c; така и класа sum
може да декларира обекти (инстанции) по този начин: sum a;
Спецификаторите за достъп се използват за скриване и предпазване
(капсулиране) на данните.
Деклариране: Пример:
      class Етикет
    {
       спецификатор за достъп :
        тип1 член1;
        
       спецификатор за достъп :
        тип 2 член 2;
    } име на обекта (променливата);

    class suma
      {
        public :
          void set_xy (int, int);
          int get_xy () { return (x+y);}
        private :
           int x, y;
      } b;

    Спецификатори на достъп и могат да бъдат:
      private - членовете от този клас, могат да бъдат извикани
само от членовете на същия клас или от приятелските му класове;
      protected - членовете на този клас, могат да бъдат извикани
само от членовете на същия клас, от приятелските му класове,
така и от производните му класове;
      public - могат да бъдат извикани от всяка точка на програмата
от където се вижда класът.
    Разликата между структурите и класовете е само това, че класовете
имат различни права на достъп и функции, чрез които се достига
до защитените данни.
В структурата член данните по подразбиране са публични.
В класовете член данните и член функциите по подразбиране са защитени ( private ).


I. Създаване и програмиране

    1. Ще представим пример за въвеждане на име, презиме и години на ученик и след това ги извеждаме на екрана.

   Пример 1:

#include <iostream>
#include <string.h>
using namespace std;
struct ime
{
string first ;
string second ;
int year ;
};
int main()
{
ime a;
a.first="Ivan";
a.second="Asenov";
a.year=19;
cout<<a.first<<","<<a.second<<","<<a.year<<endl;
return 0;
}


    1. Ще покажем разликата, когато декларираме низ, чрез служебната дума char[30] и string, забележете разликата как се присвояват стойности на a.first и a.second.

   Пример 2:
#include <iostream>
#include <string.h>
using namespace std;
struct ime
{
//string first ;
char first[30];
string second ;
int year ;
};
int main()
{
ime a;
//a.first="Ivan";
strcpy(a.first,"Ivan");
a.second="Asenov";
a.year=19;
cout<< a.first<< ","<< a.second<<","<< a.year<< endl;
return 0;
}


Предаване параметри на функция по адрес
   Когато желаете чрез функция да промените повече от една стойност на променлива (аргумент) във функция. Пред името на аргумента (променливата) трябва да се пише знака &(амперсанд). Това означава, че предавате адресите на параметрите към функцията и функцията работи не със стойности, а с адресите на които се съдържат тези стойностите. По този начин можете да промените стойностите в главната програма.


   Пример 3 : Въвеждаме име, през име и години на трима ученика
и след това ги извеждаме.

#include <iostream>
#include<stdio.h>
#include <stdlib.h>
using namespace std;
struct ime
{
string first ;
string second ;
int year ;
};
void inn (ime& a,int i)
{
cout<< "N:"<< i+1<< endl;
cout<< "Enter the first name =>";
cin>>a.first;
cout<< "Enter the last name=>";
cin>>a.second;
cout<< "Enter years =>";
cin>>a.year;
}
void outt (ime& a,int i)
{
cout<< endl<< "N:"<< i+1<< endl;
cout<< a.first<< " "<< a.second<< " "<< a.year<< endl;
}
int main()
{
int i;
ime n[3];
for(i=0;i<3;i++)
inn(n[i], i);
for(i=0;i<3;i++)
outt(n[i],i);
return 0;
}

   Пример 4 : Въвеждаме име, фамилия, оценките по литература, математика, английски език на трима ученика и средния успех от тези предмети, след това ги извеждаме на екрана.

#include <iostream>
#include<stdio.h>
#include <stdlib.h>
using namespace std;
struct ime
    {
        string first ;
        string last ;
        double lit ;
        double mat ;
        double eng ;
        double aver;
    };
  void inn (ime& a,int i)
    {
      cout<< "N:"<< i+1<< endl;
      cout<< "Enter the first name =>";
      cin>>a.first;
      cout<< "Enter the last name=>";
      cin>>a.last;
      cout<< "Enter your grade in literatura =>";
      cin>>a.lit;
      cout<< "Enter your grade in mathematics =>";
      cin>>a.mat;
      cout<< "Enter your grade in engligh =>";
      cin>>a.eng;
    }
  void outt (ime& a,int i)
    {
      cout<< endl<< "N:"<< i+1<< endl;
      cout<< a.first<< " "<< a.last<< " "<< endl;
      a.aver=(a.lit+a.mat+a.eng)/3;
      cout<<"Literatura ="<< a.lit<<" Mathematics ="<< a.mat<<" English ="<< a.eng<< " Sreden uspeh ="<< a.aver<< endl;
    }
  int main()
    {
      int i;
      ime n[3];
      for(i=0;i<3;i++)
      inn(n[i], i);
      for(i=0;i<3;i++)
      outt(n[i],i);
      return 0;
    }




   Пример 5 : Въвеждаме име, презиме, фамилия, клас, оценките по литература, математика, английски език на трима ученика и средния успех от тези предмети. Извеждаме тази информация и след това я записваме като файл на твърдия диск под името: "myfile1.txt"


#include <iostream>
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#include<fstream>
using namespace std;
struct ime
    {
        string first ;
        string second ;
        string last ;
        string klas;
        double lit ;
        double mat ;
        double eng ;
        double aver;
    };
  void inn (ime& a,int i)
    {
      cout<< "N:"<< i+1<< endl;
      cout<< "Enter the first name =>";
      cin>>a.first;
      cout<< "Enter the middle name=>";
      cin>>a.second;
      cout<< "Enter the last name=>";
      cin>>a.last;
      cout<< "Enter your class =>";
      cin>>a.klas;
      cout<< "Enter your grade in literatura =>";
      cin>>a.lit;
      cout<< "Enter your grade in mathematics =>";
      cin>>a.mat;
      cout<< "Enter your grade in engligh =>";
      cin>>a.eng;
    }
  int main()
    {
      ofstream myfile;
      myfile.open ("test/myfile1.txt");
      int i;
      ime n[3];
      for(i=0;i<3;i++)
      inn(n[i], i);
  for(i=0;i<3;i++)
    {
      cout<< endl<< "N:"<< i+1<< endl;
      myfile << "\n N:"<< i+1<< "\n";
      cout<< n[i].first<< " "<< n[i].second<< " "<< n[i].last<< " "<< n[i].klas<<" class PGI Pernik"<< endl;
      n[i].aver=(n[i].lit+n[i].mat+n[i].eng)/3;
      myfile << n[i].first<< " "<< n[i].second<< " "<< n[i].last<< " "<< n[i].klas<<" class PGI Pernik\n";
      cout<< "Literatura ="<< n[i].lit<<" Mathematics ="<< n[i].mat<<" English ="<< n[i].eng<< " Sreden uspeh ="<< n[i].aver<< endl;
      myfile <<"Literatura ="<< n[i].lit<<" Mathematics ="<< n[i].mat<<" English ="<< n[i].eng<< " Sreden uspeh ="<< n[i].aver<< "\n";
    }
      myfile.close();
      return 0;
  }



   Пример 6 : Създайте програма, която да съдържа: име, фамилия, оценките по литература, математика, английски език и информатика на пет ученика и средния успех от тези предмети. Изчислете средния успех на класа и го запишете като файл на твърдия диск под името: "myfile.txt"


#include <iostream>
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#include<fstream>
using namespace std;
struct ime
  {
    string first ;
    string last ;
    double lit ;
    double mat ;
      double eng ;
    double inf ;
    double aver;
  };
void inn (ime& a,int i)
  {
    cout<< "N:"<< i+1<< endl;
    cout<< "Enter the first name =>";
    cin>>a.first;
    cout<< "Enter the last name=>";
    cin>>a.last;
    cout<< "Enter your grade in literatura =>";
    cin>>a.lit;
    cout<< "Enter your grade in mathematics =>";
    cin>>a.mat;
    cout<< "Enter your grade in engligh =>";
    cin>>a.eng;
    cout<< "Enter your grade in informatika =>";
    cin>>a.inf;
  }
    double outt (ime& a,int j,ofstream& myfile)
  {
    double b;
    cout<< endl<< "N:"<< j+1<< endl;
    cout<< a.first<< " "<< a.last<< " "<< endl;
    b= a.aver=(a.lit+a.mat+a.eng+a.inf)/4;
    cout<<"Literatura ="<< a.lit<<" Mathematics ="<< a.mat<<" English ="<< a.eng<<" Informatika"<< a.inf<< " Sreden uspeh ="<< a.aver<< endl;
    myfile << a.first<< " "<< a.last<< " "<<" \n";
    myfile <<"Literatura ="<< a.lit<<" Mathematics ="<< a.mat<<" English ="<< a.eng<<" Informatika"<< a.inf<< " Sreden uspeh ="<< a.aver<< "\n";
    return (b);
  }
int main()
  {     ofstream myfile;
    myfile.open ("test/myfile.txt");
    int i;
    double s=0,x=0;
    ime n[5];
    for(i=0;i< 5;i++)
    inn(n[i], i);
    for(i=0;i< 5;i++)
      {
      x=outt(n[i],i, myfile);
      s=s+x;
      }
    cout << "Sreden uspeh na classa ==>"<< s/i<< endl;
    myfile<< "Sreden uspeh na classa ==>"<< s/i<<" \n";
    myfile.close();
    return 0;
  }



Задачи за самостоятелна работа:

     1. Създайте програма, която да съдържа: номер на ученика име, фамилия, оценките по литература, математика, английски език, история и география, средния успех от тези предмети. Тази информация да я запишем на файл.

     2. Създайте програма, която да съдържа: име, фамилия, оценките по литература, математика, английски език на трима ученика и средния успех от тези предмети, след това ги извеждаме на екрана. Изчислете средния успех на класа.

     3. Създайте програма, която да съдържа: номер на ученика име, фамилия, клас, ръст в сантиметри, тегло в килограми, брой отсъствия. Тази информация да я запишем на файл.





Видео файл за допълнителна информация



Тест за проверка на знанията



Примерна програма
   за изчисление на среден успех на дипломата за средно образование



       Използвана литература
     1. Учебник по информатика за 9 клас профилирана подготовка "Информатика +" автори: проф. Петър Бърнев, доц. Георги Тотков, доц. Росица Донева, доц. Владимир Шкуртов, гл. ас. Коста Гъров. Издателство "Летра"- Пловдив 2001 г.

    2.Учебник - "С практически самучител" автор: Хърб Шилдт. Издателство "СофтПрес" ООД - 2009 г.     3.Учебник - "С++ в примери, задачи и приложения" автори: Павел Азълов, Фани Златарова. Издателство "Просфета-София" АД -2011 г.