Применяя метод функциональной декомпозиции, спроектируем структуру программы мини-системы управления картотекой служащих:
main (mainkart.cpp)
/ |
/ menu -------------podmenu
/ / | \ /\
/ / | \ / \ (fkart.cpp)
init_k sozd_k prosm_k poisk_k ud_k zam_k
| | | | | | | | | | | | | | | | | | | | |
| +| | |-----+--|--------+-|--|--------+| | | |----+| | | | |--form_k
(ind.cpp) | +| |---------|-----------|--|----------| | | |-----+| | | |--vvod_k
| | | +----------+-|---------+| | |-------+| | |--vyvod_k
sort--------+--------+|------------------------|----------+| |---------+| |
dob_ind--------------+ | | | | |
poisk_ind------------------------------------+-----------+|-----------+|
ud_ind------------------------------------------------------+ |
zam_ind------------------------------------------------------------------+
Применяя метод модульной (файловой) организации, сгруппируем функции в файлы кодов: в файл кодов mainkart.cpp - функции main, menu, podmenu; в ind.cpp - функции dob_ind, poisk_ind, ud_ind, zam_ind, sort; в fkart.cpp - функции init_k, sozd_k, prosm_k, poisk_k, ud_k, zam_k, form_k, vvod_k, vyvod_k. Предусмотрим для файлов кодов ind.cpp и fkart.cpp файлы заголовков ind.hpp и fkart.hpp.
//первая версия программы с функциями main, menu, podmenu
//файл заголовков ind.hpp
#ifndef ind_hpp
#define ind_hpp
#define zaglushka(st) gotoxy(2,23); cprintf("%*s",60," "); \
gotoxy(2,23); cprintf("%s",st); getch();
#include <conio.h>
#include <iostream.h>
#include <string.h>
const int max_pole=10;
struct tip_index
{
char kluch[max_pole];
int nomer;
};
int dob_ind(char kl[max_pole],int &kol,tip_index index[]);
int poisk_ind(char kl[max_pole],int nomer,
int kol,tip_index index[]);
void ud_ind(int ind,tip_index index[]);
void zam_ind(int ind,char kl[max_pole],tip_index index[]);
void sort(int kol,tip_index index[]);
#endif
//файл кодов ind.cpp еще не требуется
//файл заголовков fkart.hpp
#ifndef fkart_hpp
#define fkart_hpp
#include <conio.h>
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
#include <dos.h>
#include "ind.hpp"
static const char *imf_k="kart_slu.dat";
struct t_k
{
char tabn[3];
char fio[30];
char doljn[30];
float oklad;
};
void init_kart();
void form_kart(char* option);
void vvod_kart();
void vyvod_kart();
void sozd_kart();
void prosm_kart();
void poisk_kart();
void ud_kart();
void zam_kart();
#endif
//файл кодов fkart.cpp
//в вызываемых функциях стоят "заглушки"
//функции form_kart,vvod_kart,vyvod_kart еще не требуются
#include "fkart.hpp"
static struct t_k zap;
static struct t_k zap_null={"","","",0};
tip_index index_k[100];
int kol_k;
void init_kart()
{ zaglushka("Вызвана функция init_kart, нажмите <Enter>"); }
void sozd_kart()
{ zaglushka("Вызвана функция sozd_kart, нажмите <Enter>"); }
void prosm_kart()
{ zaglushka("Вызвана функция prosm_kart, нажмите <Enter>"); }
void poisk_kart()
{ zaglushka("Вызвана функция poisk_kart, нажмите <Enter>"); }
void ud_kart()
{ zaglushka("Вызвана функция ud_kart, нажмите <Enter>"); }
void zam_kart()
{ zaglushka("Вызвана функция zam_kart, нажмите <Enter>"); }
//файл кодов mainkart.cpp
#include "fkart.hpp"
void podmenu(int x)
{
char ch;
char *m[]={ " Удаление ",
" Замена ",
" Выход "
};
int pos[3];
_setcursortype(_NOCURSOR);
gotoxy(2,23);
clreol();
cputs("Выберите пункт меню и нажмите <Enter>");
for (int k=0;k<3;k++)
{
if (k==0)
textattr(0+(2<<4));
else
textattr(0+(7<<4));
gotoxy(x,3+k);
pos[k]=wherey();
cputs(m[k]);
}
k=0;
for (;;)
{
ch=getch();
if (ch==13) break;
if (ch==0)
{
ch=getch();
switch (ch)
{
case 80: if (k==2) continue;
gotoxy(x,pos[k]);
textattr(0+(7<<4));
cputs(m[k]);
k++;
gotoxy(x,pos[k]);
textattr(0+(2<<4));
cputs(m[k]);
textattr(7+(0<<4));
break;
case 72: if (k==0) continue;
gotoxy(x,pos[k]);
textattr(0+(7<<4));
cputs(m[k]);
k--;
gotoxy(x,pos[k]);
textattr(0+(2<<4));
cputs(m[k]);
textattr(7+(0<<4));
break;
}
}
}
textattr(7+(0<<4));
_setcursortype(_NORMALCURSOR);
switch (k)
{
case 0: ud_kart();
break;
case 1: zam_kart();
break;
case 2: break;
}
if (k!=2) podmenu(x);
return;
}
void menu()
{
char ch;
char *m[]={ " Создание ",
" Просмотр ",
" Поиск ",
"Корректировка",
" Выход "
};
int pos[5];
clrscr();
_setcursortype(_NOCURSOR);
gotoxy(2,23);
clreol();
cputs("Выберите пункт меню с помощью -> и <-,нажмите <Enter>");
gotoxy(13,1);
for (int k=0;k<5;k++)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.