Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Файлы.doc
Скачиваний:
42
Добавлен:
26.03.2015
Размер:
274.94 Кб
Скачать

Создание информационно-справочной системы

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

Выберем для создания неформатный файл прямого доступа.

Написать программу, позволяющую выбрать из предлагаемого меню определенный пункт.

  1. Создание файла

  2. Просмотр

  3. Справка

  4. Выход

Создадим текстовый форматный файл menu.txt с текстом меню (либо в блокноте, либо в редакторе CVF).

menu

1 create

2 view

3 spravka

0 out

viberi punkt menu

Напишем модуль описания (чтобы не писать описание структуры во всех процедурах).

module global

implicit none

integer, parameter::n=30 !количество записей

Type tovar

Character (20) name

integer kol

real cost

End type tovar

Type (tovar) z !переменная производного типа

integer I !номер записи в файле прямого доступа

character(79) str !переменная симв. типа для вывода строки из файла меню меню на экран

character(1) pm !пункт меню

end module

! Главная программа

program main

use global !модуль общих описаний

call obr_menu() !вызов процедуры обработки меню

end

Процедура обработки меню

subroutine obr_menu()

use global

open(10, file='menu.txt')

pm='1'

cicl1:do while(pm/='0')

rewind(10) !установка на начало

call system('cls') !очистка экрана

cicl2:do while(.not. eof(10))

read(10,'(A)') str !чтение из файла строки меню

print*, str !вывод на экран этой строки

enddo cicl2

read*, pm !считывание нажатой клавиши

select case (pm) !обработка выбранного пункта меню

case('1')

call create()

case('2')

call view()

case('3')

call inform()

case('0')

exit

endselect

read* !задержка текста меню на экране

enddo cicl1

close(10)

end subroutine obr_menu

! Процедура создания файла прямого доступа

subroutine create()

use global

implicit none

open(20, file='isx_base.txt', access= 'direct', form='unformatted', recl= sizeof(z))

do i=1, n

print*,'bb name'

read*,z.name !формирование компонент структуры

print*,'bb kol'

read*,z.kol

print*,'bb zenu'

read*,z.cost

write(20, rec=i)z запись сформированной структуры в файл

enddo

close(20)

end subroutine create

! Процедура просмотра

subroutine view()

use global

implicit none

open(20, file='isx_base.txt', access= 'direct', form='unformatted', recl= sizeof(z))

i=0 !номер записи

print*,' name novara ',' kol. tow ',' cena tow'

do while (.not.eof(20))

i=i+1

read(20, rec=i ) z !чтение из файла всей структуры

print*,z. name, z.kol, z.cost !вывод на экран компонент

enddo

close(20)

end subroutine view

! Процедура справка

subroutine inform()

use global

implicit none

character(20) newname

real value

integer k

open(20, file='isx_base.txt', access= 'direct', form='unformatted', recl=sizeof(z))

i=0

print*,'name new tovara'

read*, newname

k=0

value=0

do while(.not. eof(20))

i=i+1

read(20,rec=i)z

if (z.name==newname)then

k=k+z. kol

value=value+k* z. cost ! вычисление стоимости

endif

enddo

print'(3 (2x, A),I3, 5x, A, F4.1)','tow', newname, 'kol=', k, 'value=', value

close(20)

end subroutine inform

Соседние файлы в предмете Программирование на Pascal