Цель работы: освоение команд, используемых в командных файлах.
Задание:
В этой работе необходимо написать программу на языке СУБД , которая должна выполнять следующие действия:
- Ввод записей в базу данных.
- Редактирование полей.
- Поиск и вывод на экран записей по условию поиска полей.
- Удаление по условию поиска.
- Сжатие БД. Подрежимы в виде меню : — упаковка БД;
— восстановление записей. - Выход.
Структуры баз данных:
1 2 3 4 5 6 7 8 9 10 |
----------------------------------------------------------------- Газета Имя поля Тип Длина Позиция ------------------------------------------- KOD C 6 ;Код газеты * NAIM C 30 ;Название * DATA D 8 ;Дата выпуска TIRAG N 7 0 ;Тираж |
Выполнение:
Была написана следующая программа на FoxPro:
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 |
set talk off set deleted on set century on set date to german set escape on *по Esc программа прерывается use lab8 CLEAR define window mainwindow from 0,0 to 24,79 system noclose nofloat nogrow nominimize noshadow nozoom fill '*' define window messagewindow from 5,5 to 10,65 title 'Сообщение' in ; window mainwindow system grow nominimize shadow zoom noclose DEFINE MENU mainmenu in mainwindow DEFINE PAD dbpad OF mainmenu PROMPT ' \<База данных' AT 0,0 DEFINE PAD editpad OF mainmenu PROMPT ' \<Редактиpование' AT 0,14 ON SELECTION PAD dbpad OF mainmenu ACTIVATE POPUP dbpop ON SELECTION PAD editpad OF mainmenu ACTIVATE POPUP editpop DEFINE POPUP dbpop FROM 1,0 DEFINE BAR 1 OF dbpop PROMPT '\<Удаление помеченных на удаление записей' DEFINE BAR 2 OF dbpop PROMPT '\<Восстановление помеченных на удаление записей' DEFINE BAR 3 OF dbpop PROMPT '\<Выход' ON SELECTION bar 1 of dbpop DO dbpack on selection bar 2 of dbpop do dbrecall on selection bar 3 of dbpop do dbexit DEFINE POPUP editpop FROM 1,14 DEFINE BAR 1 OF editpop PROMPT '\<Добавление записи' DEFINE BAR 2 OF editpop PROMPT '\<Редактирование записей' define bar 3 of editpop prompt '\<Поиск' define bar 4 of editpop prompt '\<Удаление по условию' on selection bar 1 of editpop do editadd on selection bar 2 of editpop do editedit on selection bar 3 of editpop do editfind on selection bar 4 of editpop do editdelete activate window mainwindow do while .t. activate menu mainmenu enddo ***************************END OF MAIN PROGRAM********************************* procedure dbpack activate window messagewindow ? 'Идёт удаление записей. Пожалуйста, подождите...' pack ? 'Удаление записей завершено' wait deactivate window messagewindow return procedure dbrecall activate window messagewindow ? 'Идёт восстановлениие записей. Пожалуйста, подождите...' recall all ? 'Восстановление записей завершено.' wait deactivate window messagewindow return procedure dbexit activate window messagewindow @ 0,0 say 'Вы действительно хотите выйти из БД?' @ 3,5 promp 'Да' @ 3,20 promp 'Нет' menu to sel do case case sel=1 quit otherwise deactivate window messagewindow endcase return procedure editadd define window appendwindow from 2,2 to 16,72 title 'Добавление записи'; in window mainwindow system close float grow nominimize shadow zoom locate all for len(alltrim(kod))=0.and.len(alltrim(naim))=0.and.tirag<=0 if .not.found() set deleted off locate all for deleted() if .not.found() append blank else recall replace kod with '', naim with '', data with date(), tirag with 0 endif set deleted on endif replace data with date() do mybrowse with 'appendwindow','' deactivate window appendwindow return procedure editedit define window editwindow from 2,2 to 16,72 title 'Редактирование'; in window mainwindow system close float grow nominimize shadow zoom do mybrowse with 'editwindow','' deactivate window appendwindow return procedure editfind define window findwindow from 2,2 to 16,72 title 'Поиск'; in window mainwindow system close float grow nominimize shadow zoom activate window findwindow @ 1,1 say 'Введите условия поиска:' ss=enterfindparams() deactivate window findwindow do mybrowse with 'findwindow',ss return procedure editdelete define window deletewindow from 2,2 to 16,72 title ; 'Удаление записей, удовлетворяющий условию'; in window mainwindow system close float grow nominimize shadow zoom activate window deletewindow @ 1,1 say 'Введите условия удаления: ' ss=enterfindparams() deactivate window deletewindow activate window messagewindow ? 'Выполняется удаление. Пожалуйста, подождите...' delete all for &ss ? 'Удаление завершено...' wait deactivate window messagewindow return procedure enterfindparams pnaim=space(30) pbegindata={} penddata={} pbegintirag=0 pendtirag=0 @ 3,1 say 'Название: ' get pnaim @ 5,1 say 'Дата выпуска от ' get pbegindata @ 5,40 say ' до' get penddata @ 7,1 say 'Тираж от' get pbegintirag @ 7,20 say ' до'get pendtirag read ss='.t.' pnaim=alltrim(pnaim) if len(pnaim)>0 ss=ss+'.and."&pnaim"$naim' endif if pbegindata#{} ss=ss+'.and.data>={'+dtoc(pbegindata)+'}' endif if penddata#{} ss=ss+'.and.data<={'+dtoc(penddata)+'}' endif if pbegintirag#0 ss=ss+'.and.tirag>='+str(pbegintirag) endif if pendtirag#0 ss=ss+'.and.tirag<='+str(pendtirag) endif return ss procedure mybrowse parameter mywindow, ss brpar= 'fields KOD:H="Код",naim:H="Наименование",data:H="Дата",tirag:H="Тираж"' if len(ss)>0 browse &brpar window &mywindow for &ss else browse &brpar window &mywindow endif return |