Результат работы программы

 

При запуске программы появляется меню со следующим списком действий:

 

I N F O R M A T I O N S E A R C H S Y S T E M

         A B I T U R I E N T

- MENU --------------------------------------------

   F1 - About

   L - Print list

   A - Add record to list

   C - Change record

   D - Delete record of list

   R - Restore deleted record

   S - Save list

   ESC - Exit

---------------------------------------------------

 

Вывод списка абитуриентов(L):

- LIST --------------------------------------------

- 1 --------------------------------------------

   FIO:   Kuznetsov Alexey Petrovich

   DR:    2.6.1991

   Passport: 9704 352216

   Balls: 81 77 75 0 0

   Faculty: IVT

   Speciality: Speciality

- 2 --------------------------------------------

   FIO:   Averkiev Aleksandr Vitalievich

    DR:    17.7.1991

   Passport: 9704 332211

   Balls: 80 80 80 0 0

   Faculty: IVT

   Speciality: PO

---------------------------------------------------

 

             Добавление нового абитуриента(A):

 

- NEW RECORD --------------------------------------

- SOURNAME: Petrov

- NAME       : Aleksandr

- FATHERNAME: Alekseevich

- BIRTH DAY  : 12

- BIRTH MONTH: 2

- BIRTH YEAR: 1989

- PASPORT S  : 1212

- PASPORT N: 121212

- BALLS:

   Ball[1]: 67

   Ball[2]: 83

   Ball[3]: 88

   Ball[4]: 0

   Ball[5]: 0

- FACULTY  : IVT

- SPECIALITY: PO

- SUM BALLS: 217

   The record 6 added...

---------------------------------------------------

Изменение записи:

 

- CHANGE RECORD -----------------------------------

- ENTER NUMBER: 6

 

- CHANGE RECORD 6 --------------------------------

 

- SOURNAME (Petrov): Petrov

- NAME  (Aleksandr): Aleksey

- FATHERNAME (Alekseevich): Petrovich

- BIRTH DAY (12):     12

- BIRTH MONTH(2):   2

- BIRTH YEAR (1989): 198

- PASPORT S (1212121212): 1212

- PASPORT N ():          121212

- BALLS:

   Ball[1] (67): 12

   Ball[2] (83): 12

   Ball[3] (88): 12

   Ball[4] (0): 12

   Ball[5] (0): 12

- FACULTY (IVT): 12

- SPECIALITY (PO): 12

- SUM BALLS (217): 12

   The record 6 changed...

---------------------------------------------------
Вывод

 

Мною решена задача проектирования и написания программы система «Абитуриент» с применением основных принципов объектно-ориентированного программирования.

В этой задаче очень много данных и деталей, которые сложно удержать в голове, поэтому возникла необходимость обратиться к методам повышения абстракции с целью упростить структуру данных, что позволило управлять большим объемом информации.

Благодаря тому, что программа системы представляется в терминах поведения объектов, при программировании использовались понятия, более близкие к предметной области, следовательно, программа легче читается и понимается. Это является большим преимуществом ООП.

Плохо спроектированная иерархия классов приводит к созданию сложных и запутанных программ. Важно до начала проектирования правильно определить, требуется ли вообще применить объектно-ориентированный подход. Применение к этой задаче объектно-ориентированного подхода, по моему мнению, добавила к положительным качествам программы такие пункты, как эффективность, компактность и надежность. Также программа стала хорошо читаемой и легко модифицируемой.




Список использованной литературы

 

1. Т.А.Павловская. С/С++ Программирование на языке высокого уровня. 2009.

2. Шилдт, Герберт. Полный справочник по С, 4-е издание.: Пер. с анг.- М.:

Вильямс, 2005.

 

 



Приложение

faculty.h:

class Faculty

{

public:

char nameFaculty[15];

public:

void SetParam(char *name);

void Print()

{

       printf("\tFaculty: %s\n",this->nameFaculty);

};

};

 

class Speciality: public Faculty

{

public:

char nameSpeciality[15];

int sumBalls;

public:

void SetParam(char *nameF, char *nameS, int sumBalls);

void Print()

{

       Faculty::Print();

       printf("\tSpeciality: %s\n",nameSpeciality);

};

void PrintBalls()

{

       printf("\t%d",sumBalls);

}

};

 

           

abiturient.h

#include "faculty.h"

       struct sfio      

       {

             char surname[15];

             char name[15];

             char father[15];

       };

       struct sdr

       {

             int day;

             int month;

             int year;

       };

struct Abiturient

{

public:

       bool deleted;

       Speciality speciality;

       sfio fio;

       sdr dr;

       int balls[5];

       char pasport_s[4];

char pasport_n[6];

public:

       const Abiturient& operator = (const Abiturient &abit)

       {

             if (&abit == this) return *this;

             for(int i=0; i<5; i++) this->balls[i]=abit.balls[i];

             this->speciality.SetParam((char *)abit.speciality.nameFaculty,

                   (char *)abit.speciality.nameSpeciality,

                   abit.speciality.sumBalls);

             strcpy(this->fio.father,abit.fio.father);

             strcpy(this->fio.name,abit.fio.name);

             strcpy(this->fio.surname,abit.fio.surname);

             this->dr.day=abit.dr.day;

             this->dr.month=abit.dr.month;

             this->dr.year=abit.dr.year;

             strcpy(this->pasport_n,abit.pasport_n);

             strcpy(this->pasport_s,abit.pasport_s);

             return *this;

       };

       void Print()

       {

             printf("\tFIO:   %s %s %s\n",fio.surname,fio.name,fio.father);

             printf("\tDR:    %d.%d.%d\n",dr.day,dr.month,dr.year);

             printf("\tPassport: ");

             for(int i=0;i<4; i++) printf("%c",pasport_s[i]);

             printf(" %s\n",pasport_n);

             printf("\tBalls: ");

             for(int i=0; i<5; i++)

                   printf("%d ",balls[i]);

             printf("\n");

             speciality.Print();

       };

};

 

list.h

#include "abiturient.h"

class List

{

private:

int count;

Abiturient list[10];

public:

List()

{

       count=0;

       for(int i=0;i<10; i++) list[i].deleted=false;

};

void ReadData(char *name);

void SaveData(char *name);

void PrintList(void);

void AddRecord();

void DelRecord();

void ChangeRecord();

void RestoreRecord();

};

 

proc.cpp

 #include <iostream>

#include <string>

#include <stdlib.h>

#include <conio.h>

#include "list.h"

void Faculty::SetParam(char *name)

{

strcpy(nameFaculty,name);

};

void Speciality::SetParam(char *nameF,char *nameS,int sumBalls)

{

Faculty::SetParam(nameF);

strcpy(nameSpeciality,nameS);

this->sumBalls=sumBalls;

}

void List::ReadData(char *name)

{

const int dl=125;

char s[dl];

int i=0,sumBalls;

char faculty[15];

char speciality[15];

FILE *_f;

_f = fopen(name,"r");

while (fgets(s,dl,_f))

{

       int pos=0;

       int j=0;

       while(s[pos+j]!=' ')

             {list[count].fio.surname[j]=s[pos+j];j++;}

       list[count].fio.surname[j]='\0';

       pos+=sizeof(list[count].fio.surname)+1;j=0;

 

       while(s[pos+j]!=' ')

             {list[count].fio.name[j]=s[pos+j];j++;}

       list[count].fio.name[j]='\0';

       pos+=sizeof(list[count].fio.name);j=0;

 

       while(s[pos+j]!=' ')

             {list[count].fio.father[j]=s[pos+j];j++;}

       list[count].fio.father[j]='\0';

       pos+=sizeof(list[count].fio.father);

       list[count].dr.day = atoi(&s[pos]);

       pos+=3;

       list[count].dr.month=atoi(&s[pos]);

       pos+=3;

       list[count].dr.year=atoi(&s[pos]);

       pos+=5;

       for(j=0;j<4;j++)

             list[count].pasport_s[j]=s[pos+j];

       list[count].pasport_s[j]='\0';

       pos+=5;

       for(j=0;j<6;j++) list[count].pasport_n[j]=s[pos+j];

       list[count].pasport_n[j]=0;

       pos+=7;

       for(int k=0; k<sizeof(list[count].balls)/4; k++)

             list[count].balls[k]=atoi(&s[pos+3*k]);

       pos+=15;

       for(j=0;j<sizeof(faculty);j++)

             faculty[j]=s[pos+j];

       j--;

       while (faculty[j]==' ')

             j--;

       j++;

       faculty[j]='\0';

       pos+=sizeof(faculty)+1;

       for(j=0;j<sizeof(speciality);j++)

             speciality[j]=s[pos+j];

       j--;

       while (speciality[j]==' ')

             j--;

       j++;

       speciality[j]='\0';

       pos+=sizeof(speciality)+1;

       sumBalls=atoi(&s[pos]);

       pos+=1;

       this->list[count].speciality.SetParam(faculty,speciality,sumBalls);

       count++;

}

count--;

fclose(_f);

}

void List::AddRecord()

{

Abiturient abit;

printf("- NEW RECORD --------------------------------------");

printf("\n - SOURNAME: ");scanf("%s",abit.fio.surname);

printf(" - NAME : ");scanf("%s",abit.fio.name);

printf(" - FATHERNAME: ");scanf("%s",abit.fio.father);

printf(" - BIRTH DAY: ");std::cin>>abit.dr.day;

printf(" - BIRTH MONTH: ");std::cin>>abit.dr.month;

printf(" - BIRTH YEAR: ");std::cin>>abit.dr.year;

printf(" - PASPORT S: ");scanf("%s",abit.pasport_s);

printf(" - PASPORT N: ");scanf("%s",abit.pasport_n);

printf(" - BALLS: \n");

for(int i=0; i<5; i++)

{

       printf("\tBall[%d]: ",i+1);

       std::cin>>abit.balls[i];

};

printf(" - FACULTY: ");scanf("%s",abit.speciality.nameFaculty);

printf(" - SPECIALITY: ");scanf("%s",abit.speciality.nameSpeciality);

printf(" - SUM BALLS: ");std::cin>>abit.speciality.sumBalls;

count++;

this->list[count]=abit;

printf("\tThe record %d added...\n",count+1);

printf("---------------------------------------------------\n");

};

void List::PrintList()

{

printf("- LIST --------------------------------------------\n");

int i=0;

while(i<count+1)

{

       if (!list[i].deleted)

       {

             printf(" - %d --------------------------------------------\n",i+1);

             list[i].Print();

             i++;

       }

       else

             i++;

};

printf("---------------------------------------------------\n\n");

};

void List::DelRecord()

{

this->PrintList();

int number;

printf("\n- DELETE RECORD -----------------------------------\n");

printf("  - ENTER NUMBER: ");std::cin>>number;

list[number-1].deleted = true;

printf("\tThe record %d deleted...\n",count+1);

printf("\tPress L for print the new list...\n");

printf("---------------------------------------------------\n");

};

void List::ChangeRecord()

{

this->PrintList();

int number;

printf("\n- CHANGE RECORD -----------------------------------\n");

printf(" - ENTER NUMBER: ");std::cin>>number;

printf("\n- CHANGE RECORD %d --------------------------------\n",number);

printf("\n - SOURNAME (%s): ",list[number-1].fio.surname);scanf("%s",list[number-1].fio.surname);

printf(" - NAME  (%s): ",list[number-1].fio.name);scanf("%s",list[number-1].fio.name);

printf(" - FATHERNAME (%s): ",list[number-1].fio.father);scanf("%s",list[number-1].fio.father);

printf(" - BIRTH DAY (%d): ",list[number-1].dr.day);std::cin>>list[number-1].dr.day;

printf(" - BIRTH MONTH(%d): ",list[number-1].dr.month);std::cin>>list[number-1].dr.month;

printf(" - BIRTH YEAR (%d): ",list[number-1].dr.year);std::cin>>list[number-1].dr.year;

printf(" - PASPORT S (%s): ",list[number-1].pasport_s);scanf("%s",list[number-1].pasport_s);

printf(" - PASPORT N (%s): ",list[number-1].pasport_n);scanf("%s",list[number-1].pasport_n);

printf(" - BALLS      : \n");

for(int i=0; i<5; i++)

{

       printf("\tBall[%d] (%d): ",i+1,list[number-1].balls[i]);

       std::cin>>list[number-1].balls[i];

};

printf(" - FACULTY (%s): ",list[number-1].speciality.nameFaculty);scanf("%s",list[number-1].speciality.nameFaculty);

printf(" - SPECIALITY (%s): ",list[number-1].speciality.nameSpeciality);scanf("%s",list[number-1].speciality.nameSpeciality);

printf(" - SUM BALLS (%d): ",list[number-1].speciality.sumBalls);std::cin>>list[number-1].speciality.sumBalls;

printf("\tThe record %d changed...\n",number);

printf("---------------------------------------------------\n");

};

void List::RestoreRecord()

{

this->PrintList();

int number;

printf("\n- RESTORE RECORD ---------------------------------\n");

printf(" - ENTER NUMBER: ");std::cin>>number;

list[number-1].deleted = false;

printf("\tThe record %d restored...\n",count+1);

printf("\tPress L for print the new list...\n");

printf("---------------------------------------------------\n");

};

void List::SaveData(char *name)

{

FILE *_f;

_f = fopen(name,"w+");

if(_f == 0)

       printf("\tNot open the file %s!\n",name);

else

{

       printf("\n- SAVING DATA -----------------------------------\n");

       for(int i=0; i<=this->count; i++)

       {

             if(!list[i].deleted)

             {

                   int pos=sizeof(list[i].fio.surname);

                   fprintf(_f,"%- 16s%- 15s%- 15s%0.2d %0.2d %0.4d ",

                        list[i].fio.surname,

                        list[i].fio.name,

                        list[i].fio.father,

                        list[i].dr.day,

                        list[i].dr.month,

                        list[i].dr.year);

                   for(int j=0; j<4; j++)

                        fprintf(_f,"%c",list[i].pasport_s[j]);

                   fprintf(_f," %- 7s",list[i].pasport_n);

                   for(int j=0; j<5; j++)

                        fprintf(_f,"%0.2d ",list[i].balls[j]);

                   fprintf(_f,"%- 16s%- 16s%d",

                        list[i].speciality.nameFaculty,

                        list[i].speciality.nameSpeciality,

                        list[i].speciality.sumBalls

                       );

                   int count=0;

                   for(int j=i+1; j<=this->count; j++)

                        if(!list[j].deleted) count++;

                   if (count>0) fprintf(_f,"\n");

             }

                 

       }

           

}

fclose(_f);

printf("\tThe data are saved...\n");

printf("---------------------------------------------------\n");

}

 

menu.cpp

 #include <iostream>

void PrintMenu()

{

printf(" I N F O R M A T I O N S E A R C H S Y S T E M\n");

printf("         A B I T U R I E N T\n\n");

printf("- MENU --------------------------------------------\n");

printf("\tF1 - About\n");

printf("\tL - Print list\n");

printf("\tA - Add record to list\n");

printf("\tC - Change record\n");

printf("\tD - Delete record of list\n");

printf("\tR - Restore deleted record\n");

printf("\tS - Save list\n");

printf("\tESC - Exit\n");

printf("---------------------------------------------------\n\n");

};

void PrintHelp()

{

printf("- ABOUT -------------------------------------------\n");

printf("\t............\n");

printf("\t............\n");

printf("\t............\n");

printf("\t............\n");

printf("\t............\n");

printf("---------------------------------------------------\n\n");

};

 


main.cpp

 #include <iostream>

#include <string>

#include <stdlib.h>

#include <conio.h>

#include <windows.h>

#include "list.h"

void PrintHelp();

void PrintMenu();

using namespace std;

void main()

{

List list;

list.ReadData("abit2.txt");

//list.PrintList();

char ch=0;

while((int)ch!=27)//ESC

{    

       system("cls");

       PrintMenu();

       switch((int)ch)

       {

       case 59://F1

             PrintHelp();

             break;

       case -92://L

       case 108:

             list.PrintList();

             break;

       case -28://A

       case 97:

             list.AddRecord();

             break;

       case 100://D

       case -94:

             list.DelRecord();

             break;

       case 114:

       case -86:

             list.RestoreRecord();

             break;

       case 99://C

       case -31:

             list.ChangeRecord();

             break;

       case 115:

       case -21:

             list.SaveData("abit2.txt");

             break;

       default:

             printf("Key - %d\n", (int)ch);

       }

       ch = getch();

}

}

 


[1] Далее каждую сущность будем называть объектом

[2] Т.к. нормализация базы данных не является целью курсовой работы, то этот недостаток не будем учитывать при выборе оптимального метода решения




Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: