Сабж. Через программу заполняю форматный файл прямого доступа сведениями о таблетках, вроде все делаю правильно, однако каждую следующую запись программулина дружелюбно записывает сразу после предыдущей, не переходя в новую строку (wtf).
Болит 4-й пункт кейса. На данный момент интересует только то, чтобы каждая запись была в новой строке... Файл обязательно должен быть прямого доступа - таково условие задачи.
Заранее спасибо. P.S. Здесь единственное место, где всегда помогают, при этом по делу и быстро.
Код программы:
program lab12_18
type medicine
character(20) name
integer amount
real price
integer life
end type medicine
type (medicine) :: a
integer i,ierr,input
real pmin,pmax
logical(1) f
open(1,file='lab12/18_in.txt',iostat=ierr,form='formatted',access='direct',recl=32)
print*
if(ierr/=0) stop 'Fatal Error: File not found'
!if(EOF(1)) stop 'Error: File is empty'
1 format (A20,I3,F7.2,I2)
call system('color 70')
do while (1)
call system('cls')
print*,'-----------Menu--------------'
print*,'[1] Do main task '
print*,'[2] Delete empty medicine '
print*,'[3] Edit records '
print*,'[4] Add new record '
print*,'[5] Exit '
print*,'-----------------------------'
read*,input
i=0;s=0;f=.false.
selectcase(input)
case(1)
!-----------------1---------------------
call system('cls')
read(1,1,rec=1) a.name,a.amount,a.price,a.life
pmin=a.price
pmax=a.price
print*,'Can be kept longer than 3 mounth:'
do while (.not.EOF(1))
i=i+1
read(1,1,rec=i) a
if(a.price>=pmax) pmax=a.price
if(a.price<pmin) pmin=a.price
s=s+a.price
if(a.life>3) then
write(*,'(2x,A20,I5,F7.2,I2)') a
f=.true.
endif
enddo
print*
if(.not.f) print*,'No one'
print*,'-------------------------------------'
write(*,'(2x,A30,F7.2)') 'The higher price is ',pmax
write(*,'(2x,A30,F7.2)') 'The lower price is ',pmin
write(*,'(2x,A30,F7.2)') 'Total cost of all medicine: ',s
write(*,'(2x,A30,I2)') 'Total amount of medicine: ',i
print*,'-------------------------------------';print*
pause
!-----------------end-1------------------
case(2)
!----------------2-----------------------
call system('cls')
do while(.not.EOF(1))
i=i+1;
read(1,1,rec=i) a
if(a.amount==0) write(1,'(A)',rec=i);
enddo
print*, 'Done'
pause
!-----------------end-2------------------
case(3)
!--------------------3-------------------
call system('cls')
do
print*,"Enter record's number to edit"
read*,i
print*,"OK. Enter new:"
write(*,'(A\)') "Name: "; read(*,'(A20)') a.name;
write(*,'(A\)') "Amount: "; read*,a.amount;
write(*,'(A\)') "Price: "; read*,a.price;
write(*,'(A\)') "Life Time: "; read*,a.life;
write(1,1,rec=i) a.name,a.amount,a.price,a.life;
print*; print*,"Do it once more? (y/n)"
read*, a.name
if(a.name == 'n') then
exit
write(1,rec=i+1)
endif
enddo
!------------end-3-----------------------
case(4)
!-----------------4----------------------
call system ('cls')
i=1
do while(.not.EOF(1))
read(1,*)
i=i+1
enddo
do
print*,"Enter new data"
write(*,'(A\)') "Name: "; read(*,'(A20)') a.name;
write(*,'(A\)') "Amount: "; read*,a.amount;
write(*,'(A\)') "Price: "; read*,a.price;
write(*,'(A\)') "Life Time: "; read*,a.life;
write(1,1,rec=i) a.name,a.amount,a.price,a.life;
print*; print*,"Do it once more? (y/n)"
i=i+1
read*, a.name
if(a.name == 'n') exit
enddo
!---------------end-4-------------------
case(5)
exit
end select
close(1)
enddo !end main while
end