Projekt z języka programowania
obiektowego
VISUAL C++
Treść zadania:
Napisz program umożliwiający wprowadzenie określonej liczby studentów (nazwisko, imię, rok studiów, ocena zaliczeniowa). W kolejnym okienku powinny pojawiać się dane o wprowadzonej grupie: średnia ocen grupy, dane studenta o najwyższej ocenie zaliczenia (nazwisko, imię, ocena), dane studenta o najniższej ocenie.
CZĘŚĆ PRAKTYCZNA:
1.Utwórz projekt MFC AppWizard(exe) z wykorzystaniem aplikacji typu Dialog nadając mu nazwę Zadanie7.
2.Zaprojektuj formatkę jak na poniższym rysunku:
3.Ustaw własności obiektów zamieszczonych na formatce tak jak podaje tabela:
Nazwa obiektu |
Identyfikator |
Caption |
Nazwa zmiennej |
Type |
Kategoria |
List Box |
IDC_LISTA |
|
m_lista |
CListBox |
Control |
Static Text |
IDC_STATIC |
Nowe Nazwisko |
|
|
|
Static Text |
IDC_STATIC |
Nowe Imie |
|
|
|
Static Text |
IDC_STATIC |
Nowy Rok |
|
|
|
Static Text |
IDC_STATIC |
Nowa Ocena |
|
|
|
Group Box |
IDC_STATIC |
Nowe dane |
|
|
|
Edit Box |
IDC_NAZWISKO |
|
m_nazwisko |
CString |
Value |
Edit Box |
IDC_IMIE |
|
m_imie |
CString |
Value |
Edit Box |
IDC_ROK |
|
m_rok |
DWORD |
Value |
Edit Box |
IDC_OCENA |
|
m_ocena |
Float |
Value |
Button |
IDC_DODAJ |
Dodaj |
|
|
|
Static Text |
IDC_STATIC |
Średnia grupy |
|
|
|
Static Text |
IDC_STATIC |
Najniższa ocena |
|
|
|
Static Text |
IDC_STATIC |
Najwyższa ocena |
|
|
|
Edit Box |
IDC_SREDNIA |
Styles/Read-only |
m_srednia |
String |
Value |
Edit Box |
IDC_NAJNIZSZA |
Styles/Read-only |
m_najnizsza |
String |
Value |
Edit Box |
IDC_NAJWYZSZA |
Styles/Read-only |
m_najwyzsza |
String |
Value |
Static Text |
IDC_STATIC |
Nazwisko |
|
|
|
Static Text |
IDC_STATIC |
Imie |
|
|
|
Static Text |
IDC_STATIC |
Rok |
|
|
|
Static Text |
IDC_STATIC |
Ocena |
|
|
|
Static Text |
IDC_STATICNAZWISKO |
<brak>, Styles/Sunken |
m_staticnazwisko |
CString |
Value |
Static Text |
IDC_STATICIMIE |
<brak>, Styles/Sunken |
m_staticimie |
CString |
Value |
Static Text |
IDC_STATICROK |
<brak>, Styles/Sunken |
m_staticrok |
CString |
Value |
Static Text |
IDC_STATICOCENA |
<brak>, Styles/Sunken |
m_staticocena |
CString |
Value |
Static Text |
IDC_LICZBA |
Styles/Read-only |
m_liczbaogolem |
DWORD |
Value |
Static Text |
IDC_STATIC |
Liczba studentów |
|
|
|
Button |
IDC_KONIEC |
Koniec |
|
|
|
4. Do przechowywania danych o studentach będziemy wykorzystywać 4 tablice - Nazwisko, Imie, Rok i Ocena.
W tym celu w obszarze roboczym przechodzimy do zakładki Class View - prawym klawiszem podświetlamy CZadanie7Dlg i wybieramy Add Member Variable. Jako Typ podajemy CStringArray, a jako nazwę kolejno:
nazwiska
oceny
rok
imiona.
We wszystkich tablicach zaznaczamy public.
5. Następnie dodajemy kolejne zmienne (analogicznie jak w punkcie 4.)
public:
float sumaocen;
DWORD iloscstud;
float najwyzsza;
float najnizsza;
6. Na formatce uruchamiamy Class Wizard'a i nastepnie przechodzimy do funkcji OnInitDialog dopisując w niej następujący kod
nazwiska.SetSize(100);
imiona.SetSize(100);
rok.SetSize(100);
oceny.SetSize(100);
Kod ten wyznacza rozmiar tablic, w których program będzie przechowywać dane o studentach. Następnie pod wyżej wpisanym kodem wpisujemy:
najnizsza=6;
najwyzsza=0;
iloscstud=0;
sumaocen=0;
m_liczbaogolem=0;
UpdateData(FALSE);
Zapis ten przyporządkowuje zmiennym wartości, które będą umożliwiały:
Wybór studenta o najwyższej i najniższej ocenie
Obliczanie średniej ocen grupy.
7. Kolejno wchodzimy na formatkę i klikając dwa razy przycisk DODAJ wchodzimy do kodu źródłowego i wpisujemy:
void CZadanie7Dlg::OnDodaj()
{
CString lan, ocenastring; Deklaracja pomocniczych zmiennych
UpdateData();
nazwiska[iloscstud]=m_nazwisko; Pobranie danych studenta z pól EditBoxa
imiona[iloscstud]=m_imie; i umieszczenie ich w tablicach
lan.Format("%d",m_rok);
rok[iloscstud]=lan;
ocenastring.Format("%1.1f",m_ocena);
oceny[iloscstud]=ocenastring;
iloscstud++;
sumaocen+=m_ocena; obliczanie sredniej ocen grupy
float srednia=sumaocen;
srednia/=iloscstud;
lan.Format("%1.2f",srednia);
m_srednia=lan;
m_liczbaogolem=iloscstud; przekazanie obliczonej sredniej i liczby studentów
UpdateData(FALSE); do pól edycyjnych
lan=m_nazwisko;
lan+=" "; Połączenie imienia z nazwiskiem i wyświetlenie w liście
lan+=m_imie;
m_lista.AddString(lan);
lan+="(";
lan+=ocenastring; dodanie do imienia i nazwiska oceny
lan+=")";
if(m_ocena<najnizsza)
{
najnizsza=m_ocena; szukanie najwyzszej i najnizszej oceny studenta
m_najnizsza=lan;
UpdateData(FALSE);
}
if(m_ocena>najwyzsza)
{
najwyzsza=m_ocena;
m_najwyzsza=lan;
UpdateData(FALSE);
}
}
8. Aby móc uzyskiwać informacje o studencie zaznaczonym w liście wykonujemy następujące czynności:
Wchodzimy do Class Wizard, do zakładki Message Maps, w polu objectIDs podświetlamy IDC_LISTA, następnie w polu Messages wybieramy funkcję LBN_SELCHANGE i naciskamy Add Function. Następnie w polu Member Function pojawia się dodana funkcja, klikając na niej dwa razy przechodzimy do kodu i wpisujemy:
void CZadanie7Dlg::OnSelchangeLista()
{
DWORD d; deklaracja pomocniczej zmiennej
d=m_lista.GetCurSel(); odczytanie numeru zaznaczonej pozycji w liscie
podstawienie go pod d
m_staticnazwisko=nazwiska[d];
m_staticimie=imiona[d]; pobranie danych o zaznaczonym studencie i
m_staticrok=rok[d]; wyswietlenie ich w obiektach StaticText
m_staticocena=oceny[d];
UpdateData(FALSE);
}
9. Ostatnim krokiem jest uaktywnienie przycisku Koniec. W tym celu klikamy dwa razy na znajdujący się na formatce przycisk koniec i wpisujemy kod:
void CZadanie7Dlg::OnKoniec()
{
OnOK();
}