Автор: serj_nsk
Дата сообщения: 21.12.2008 12:25
Помогите вставить в эту базу данных сортировку по любому из атрибутов
до вторника желательно!! оч буду признателен
text segment 'code'
assume cs:text, ds:data
stdout=1
stdin=0
CR=13
LF=10
myproc proc
mov AX, data
mov DS, AX
mov si,0
;устанавливаем цвет фона и символов
mov ah,06h
mov al,0
mov bh,20h
mov ch,0
mov cl,0
mov dh,24
mov dl,79
int 10h
mov ah,06h
mov al,0
mov bh,30h
mov ch,7
mov cl,0
mov dh,24
mov dl,79
int 10h
;вывод меню
mov ah,40h
mov bx,stdout
mov cx,fonlen
mov dx,offset fon
int 21h
mov ah,40h
mov bx,stdout
mov cx,menulen
mov dx,offset menu
int 21h
;открытие файла
mov AH, 3dh
mov al,2
mov CX, 0
mov DX, offset filename
int 21h
mov handle, AX
nn:
mov ah,01
int 21h
;Выбор пункта меню нажатием соответствущей клавиши.
;При нажатии 1-5 переход на соответствующую метку
cmp al,'1'
je cc
cmp al,'2'
je vvod
cmp al,'3'
je vivod
cmp al,'4'
je vv
cmp al,'5'
je exit1
call error
cc:
;создание файла
mov ah,06h
mov al,0
mov bh,30h
mov ch,7
mov cl,0
mov dh,24
mov dl,79
int 10h
mov ah,02h
mov bh,0
mov dh,6
mov dl,0
int 10h
mov AH, 3ch
mov CX, 0
mov DX, offset filename
int 21h
mov handle, AX
next:
call continuec
;вывод сообщения об ошибке, если нажата клавиша не из диапазона 1-5
error:
mov ah,06h
mov al,0
mov bh,30h
mov ch,7
mov cl,0
mov dh,24
mov dl,79
int 10h
mov ah,02h
mov bh,0
mov dh,6
mov dl,0
int 10h
;Вывод сообщения об ошибке
mov ah,40h
mov bx,stdout
mov cx,erlen
mov dx,offset er
int 21h
call continuec
vivod:
call vivod1
vv:
call vv1
exit1:
call exit
;добавление новой строки в конец файла
vvod:
mov ah,06h
mov al,0
mov bh,30h
mov ch,7
mov cl,0
mov dh,24
mov dl,79
int 10h
mov ah,02h
mov bh,0
mov dh,6
mov dl,0
int 10h
;смещаем указатель на конец файла
mov ah,42h
mov al,2
mov bx,handle
mov cx,0
mov dx,0
int 21h
mov ah,40h
mov bx,stdout
mov cx,lennum
mov dx,offset nummes
int 21h
mov ah,3Fh
mov bx,stdin
mov cx,500
mov dx,offset buf1
int 21h
sub ax,2
mov actlen1,ax
;дописывание нулей в начало если длина номера меньше 3
mov cx,3
sub cx,ax
cmp cx,0
je next5
cicl4:
push cx
mov ah,40h
mov bx,handle
mov cx,1
mov dx,offset nul
int 21h
pop cx
loop cicl4
next5:
;Вывод номера строки на экран
mov ah,40h
mov bx,handle
mov cx,actlen1
mov dx,offset buf1
int 21h
;Вставка пробела
mov ah,40h
mov bx,handle
mov cx,1
mov dx,offset pr
int 21h
;Введения названия театра
mov ah,40h
mov bx,stdout
mov cx,namelen
mov dx,offset namep
int 21h
;ввод новой строки с клавиатуры
mov ah,3Fh
mov bx,stdin
mov cx,500
mov dx,offset buf
int 21h
sub ax,2
mov actlen,ax
;записываем строку в файл без 2-х последних символов перехода на новую строчку
mov ah,40h
mov bx,handle
mov cx,actlen
mov dx,offset buf
int 21h
;дополняем строку пробелами, чтобы длина записи была равна 80
mov cx,21
sub cx,actlen
sub cx,2
cicl1:
mov ah,40h
mov bx,handle
push cx
mov cx,1
mov dx,offset pr
int 21h
pop cx
loop cicl1
;Введение даты создания театра
mov ah,40h
mov bx,stdout
mov cx,datalen
mov dx,offset datap
int 21h
;ввод новой строки с клавиатуры
mov ah,3Fh
mov bx,stdin
mov cx,500
mov dx,offset buf
int 21h
sub ax,2
mov actlen,ax
;записываем строку в файл без 2-х последних символов перехода на новую строчку
mov ah,40h
mov bx,handle
mov cx,actlen
mov dx,offset buf
int 21h
;дополняем строку пробелами, чтобы длина записи была равна 21
mov cx,21
sub cx,actlen
sub cx,2
cicl11:
mov ah,40h
mov bx,handle
push cx
mov cx,1
mov dx,offset pr
int 21h
pop cx
loop cicl11
;Введение имени города
mov ah,40h
mov bx,stdout
mov cx,gorodlen
mov dx,offset gorod
int 21h
;ввод новой строки с клавиатуры
mov ah,3Fh
mov bx,stdin
mov cx,500
mov dx,offset buf
int 21h
sub ax,2
mov actlen,ax
;записываем строку в файл без 2-х последних символов перехода на новую строчку
mov ah,40h
mov bx,handle
mov cx,actlen
mov dx,offset buf
int 21h
;дополняем строку пробелами, чтобы длина записи была равна 20
mov cx,20
sub cx,actlen
sub cx,2
cicl12:
mov ah,40h
mov bx,handle
push cx
mov cx,1
mov dx,offset pr
int 21h
pop cx
loop cicl12
;Введение имени режиссера
mov ah,40h
mov bx,stdout
mov cx,rejlen
mov dx,offset rej
int 21h
;ввод новой строки с клавиатуры
mov ah,3Fh
mov bx,stdin
mov cx,500
mov dx,offset buf
int 21h
sub ax,2
mov actlen,ax
;записываем строку в файл без 2-х последних символов перехода на новую строчку
mov ah,40h
mov bx,handle
mov cx,actlen
mov dx,offset buf
int 21h
;дополняем строку пробелами, чтобы длина записи была равна 20
mov cx,20
sub cx,actlen
sub cx,2
cicl13:
mov ah,40h
mov bx,handle
push cx
mov cx,1
mov dx,offset pr
int 21h
pop cx
loop cicl13
;добавление символа перевода на следующую строку
mov ah,40h
mov bx,handle
mov cx,2
mov dx,offset en
int 21h
call continuec
;вывод всего содержимого файла
vivod1:
;очистка экрана
mov ah,06h
mov al,0
mov bh,30h
mov ch,7
mov cl,0
mov dh,24
mov dl,79
int 10h
;позиционирование курсора
mov ah,02h
mov bh,0
mov dh,6
mov dl,0
int 10h
mov ah,40h
mov bx,stdout
mov cx,2
mov dx,offset en
int 21h
;перевод указателя на начало файла
mov ah,42h
mov al,0
mov bx,handle
mov cx,0
mov dx,0
int 21h
;Считывание в buf содержимого файла
mov ah,3Fh
mov bx,handle
mov cx,1500
mov dx,offset buf2
int 21h
mov actlen2,ax
;Вывод buf на экран
mov ah,40h
mov bx,stdout
mov cx,actlen2
mov dx,offset buf2
int 21h
call continuec
;удаление строки
vv1:
mov ah,40h
mov bx,stdout
mov cx,delslen
mov dx,offset dels
int 21h
;Ввод номера удаляемой строки
mov ah,3fh
mov bx,stdin
mov cx,80
mov dx,offset buf3
int 21h
;Создание вспомогательного файла
mov AH, 3ch
mov CX, 0
mov DX, offset filename1
int 21h
mov handle1, AX
;Цикл сравнения строк в файле с удаляемой
mov cx,30
mov di,0
cicl2:
;Сохраняем значение cx
mov n,cx
;Смещение указателя на размер 1 записи(80)
mov ah,42h
mov al,0
mov bx,handle
mov cx,0
mov dx,di
int 21h
;Считывание файла
mov ah,3fh
mov bx,handle
mov cx,80
mov dx,offset buf1
int 21h
mov actlen1,ax
add di,80
;Сравнение номера строк в цикле по 1 символу
mov si,0
mov cx,3
cicl3:
mov bh,buf3[si]
mov bl,buf1[si]
cmp bh,bl
jne next3
inc si
loop cicl3
;Если символы не совпадают то переходим на метку, не выводя строку во вспомагательный файл
call next2
next3:
;Вывод строки во вспомагательный файл
mov ah,40h
mov bx,handle1
mov cx,actlen1
mov dx,offset buf1
int 21h
next2:
;Восстановления количества повторений в цикле
mov cx,n
loop cicl2
;Закрытие исходного файла
mov ah,3eh
mov bx,handle
int 21h
;Закрытие вспомагательного файла
mov ah,3eh
mov bx,handle1
int 21h
;Удаление исходного файла
mov AH, 41h
mov CX, 0
mov DX, offset filename
int 21h
;Замена основного файла вспомагательным
push ds
pop es
mov ah,56h
mov dx,offset filename1
mov di,offset filename
int 21h
;Открытие основного файла
mov AH, 3dh
mov al,2
mov CX, 0
mov DX, offset filename
int 21h
mov handle, AX
;Закрашивание области на экране и изменения цвета символов
mov ah,06h
mov al,0
mov bh,30h
mov ch,7
mov cl,0
mov dh,24
mov dl,79
int 10h
;Позиционирования курсора
mov ah,02h
mov bh,0
mov dh,6
mov dl,0
int 10h
continuec:
mov ah,40h
mov bx,stdout
mov cx,2
mov dx,offset en
int 21h
jmp nn
exit:
;закрытие файла
mov ah,3eh
mov bx,handle
int 21h
;выход из программы
mov AX, 4C00h
int 21h
myproc endp
text ends
data segment
n dw 0
buf db 2000 dup (0)
actlen dw 0
buf1 db 2000 dup (0)
actlen1 dw 0
buf2 db 2000 dup (0)
actlen2 dw 0
buf3 db 2000 dup (0)
actlen3 dw 0
nul db '0'
fon db 'Teatri Rossii',CR,LF
fonlen equ $-fon
nummes db CR,LF,'Vvedite nomer stroki:',CR,LF
lennum equ $-nummes
menu db '1.Sozdat new fail',CR,LF,'2.Vstavit stroku',CR,LF,'3.Vivesti dannie na ekran',CR,LF,'4.Udalit stroku',CR,LF,'5.Exit',CR,LF,'Viberite menu, najav klavishi 1-5:',CR,LF
menulen equ $-menu
er db CR,LF,'Oshibka vvoda. Povtorite popitku:',CR,LF
erlen equ $-er
namep db CR,LF,'Vvedite nazvanie teatra:',CR,LF
namelen equ $-namep
datap db CR,LF,'Vvedite datu sozdaniya:',CR,LF
datalen equ $-datap
gorod db CR,LF,'Vvedite gorod:',CR,LF
gorodlen equ $-gorod
rej db CR,LF,'Vvedite imya glavnogo rejissera:',CR,LF
rejlen equ $-rej
en db CR,LF
namen db ?
dels db CR,LF,'Vvedite nomer stroki, dlya udaleniya',CR,LF
delslen equ $-dels
handle dw ?
handle1 dw ?
filename db 'teatri.txt',0
filename1 db 'teatri.in',0
pr db ' '
mas dw 100 dup(0)
data ends
stack1 segment para stack 'stack'
db 128 dup (?)
stack1 ends
end myproc