Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив1 / doc92 / Курсач(11).doc
Скачиваний:
23
Добавлен:
03.08.2013
Размер:
288.77 Кб
Скачать

4.3. Настройка программы.

Для корректной работы программы необходимо чтобы файл data.txt находился в одной директории с файлом 13.exe. В случае отсутствия файла, этот файл будет создан в самой программе путём добавления новых записей.

4.4. Сообщения системному программисту.

Сообщения программы

Действия пользователя

Каталог не найден!

Проверьте правильность пути к файлу с данными, указанного в программе.

Не могу открыть файл!

Зайти в пункт меню ВВОД и ввести информацию для создания файла.

Не хватает памяти. Слишком много открытых файлов!

Закройте все открытые файлы.

5. Приложение.

5.1. Листинг программы.

.186

.MODEL SMALL

.STACK 100h

include maclib1.inc

sved struc

nzala db 2 dup(0) ; номер зала

kolvop db 2 dup(0) ; кол-во пэвм

;mash db 13 dup(' ')

bit db 00000000b ; байт признаков

sved ends

;---Программа.

.DATA

s sved <> ;опpеделение стpуктуpы

ijk db 0

koor db 13

handle dw ?

fl db 'data.txt',0

count db ?

kolvo db ?

nz db 0

index db 0

cehsrav db 13 dup (' ')

a db 1

p db 1

fon db 7

strel db 'Перемещение по пунктам меню осуществляется клавишами ','$'

priv1 db 'О программе','$'

priv2 db 'Ввод данных','$'

priv3 db 'Просмотр файла','$'

priv4 db 'Поиск по № зала','$'

priv5 db 'Выход','$'

priv6 db 'О программе.','$'

helpstr1 db 'Программа "Сведения об изделиях"','$'

helpstr2 db 'курсовая работа студента группы ИВТ12','$'

helpstr3 db 'Бондарева Максима.','$'

helpstr4 db 'Программа позволяет:','$'

helpstr5 db '-Добавить данные в файл,или заполнить пустой файл,','$'

helpstr6 db '-Просмотреть содержание файла data.txt,','$'

helpstr7 db '-Вывести данные о машинах по № зала,','$'

helpstr8 db 'Выход из программы.','$'

svednet db 'Сведений нет!!!','$'

presskey db 'Нажмите любую клавишу...','$'

error1 db '','$'

error11 db 0c9h,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0bbh,'$'

error12 db 0bah,'Невозможно открыть файл!',0bah,'$'

error13 db 0c8h,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0cdh,0bch,'$'

error2 db 'Каталог не найден!','$'

error3 db 'Не хватает памяти. Слишком много открытых файлов!','$'

ex_esc db 'Есть ещё детали? "Esc"-Нет','$'

ex_esc1 db 'Есть ещё изделия? "Esc"-Нет','$'

vnzalap db 'Введите № зала/2цифры/: ','$'

vkolvop db 'Введите Количество ПЭвм/2цифры/: ','$'

;vmash db 'Введите шифр машины/12символов/: ','$'

otv db 'Расставьте хар-ки машин:/1-да,0-нет/','$'

pr db 'Есть принтер: ','$'

mon db 'Жк монитор: ','$'

port db 'USB порт: ','$'

disk db 'CD-RW дисковод: ','$'

disket db 'Дисковод для дискеты: ','$'

xp db 'Windows XP: ','$'

pasc db 'Pascal: ','$'

delp db 'Delphi: ','$'

tabest db 'Да','$'

tabnet db 'Hет ','$'

tab0 db ' ╔═══════════════════════════════════════════════════════════════════╗','$'

tab1 db ' ║ ║','$'

tab3 db ' ║Машинный зал №: Количество ПЭВМ: ║','$'

tab4 db ' ╠══════╦═══════╦═══════╦════╦════════╦════════╦═══════╦══════╦══════╣','$'

tab5 db ' ║ Шифp ║ Есть ║ Жк ║USB ║ CD-RW ║Дисковод║Windows║Pascal║Delphi║','$'

tab6 db ' ║машины║принтер║монитор║порт║дисковод║для дис-║ XP ║ ║ ║','$'

tab6a db' ║ ║ ║ ║ ║ ║ кеты ║ ║ ║ ║','$'

tab7 db ' ╠══════╬═══════╬═══════╬════╬════════╬════════╬═══════╬══════╬══════╣','$'

tab8 db ' ║ ║ ║ ║ ║ ║ ║ ║ ║ ║','$'

tab9 db ' ╚══════╩═══════╩═══════╩════╩════════╩════════╩═══════╩══════╩══════╝','$'

vnzala db 'Введите № машинного зала: ','$'

.CODE

start:

mov ax,@data

mov ds,ax

window 0,0,80,25,3,15 ;

nocursor ; Выключение курсора

window 0,0,80,3,1,15

window 0,1,80,25,1,15

do:

cmp p,1 ;;; Меню

je p1

jmp p2

p1:

mov fon,3

jmp p3

p2:

mov fon,1

p3:

window 0,0,15,0,fon,15

window 0,1,80,25,1,15

gotoxy 2,0

puts priv1

gotoxy 10,24

puts strel

cmp p,2

je pp1

jmp pp2

pp1:

mov fon,3

jmp pp3

pp2:

mov fon,1

pp3:

window 15,0,30,0,fon,15

window 0,1,80,25,1,15

gotoxy 17,0

puts priv2

gotoxy 10,24

puts strel

cmp p,3

je pp13

jmp pp23

pp13:

mov fon,3

jmp pp33

pp23:

mov fon,1

pp33:

window 30,0,48,0,fon,15

window 0,1,80,25,1,15

gotoxy 32,0

puts priv3

gotoxy 10,24

puts strel

cmp p,4

je ppp1

jmp ppp2

ppp1:

mov fon,3

jmp ppp3

ppp2:

mov fon,1

ppp3:

window 48,0,66,0,fon,15

window 0,1,80,25,1,15

gotoxy 50,0

puts priv4

gotoxy 10,24

puts strel

cmp p,5

je pn1

jmp pn2

pn1:

mov fon,3

jmp pn3

pn2:

mov fon,1

pn3:

window 66,0,79,0,fon,15

window 0,1,80,25,1,15

gotoxy 68,0

puts priv5

gotoxy 10,24

puts strel

getch

cmp al,75

je met

jmp met1

met:

cmp p,1

je next

jmp next1

next:

mov p,5

jmp met2

next1:

dec p

jmp met1

do1:

jmp do

met1:

cmp al,77

je me

jmp met2

me:

cmp p,5

je nex

jmp nex1

nex:

mov p,1

jmp met2

nex1:

inc p

met2:

cmp al,13

jne do1

jmp do3

do2:

jmp do1

do3:

cmp p,1

je pom

cmp p,2

je pom1

cmp p,3

je pom1a

cmp p,4

je pom2

cmp p,5

je fin

pom1:

jmp pom11

pom2:

jmp pom22

pom1a:

jmp pompr

fin:

jmp finn

pom:

call help

jmp do2

pom11:

call vvod

jmp do2

pompr:

call prosm

jmp do2

pom22:

call vivod

jmp do2

;****************************************************

;Просмотр файла

;****************************************************

prosm PROC near

openfile fl,handle

mov koor,13

mov ijk,0

snv:

mov ah,3Fh

mov bx,handle

mov cx,48 ;сколько читать

mov dx,offset s

int 21h

cmp ax,0 ;Пока не конец файла

je konecp

mov ijk,1

call tablout

jmp snv

konecp:

cmp ijk,1

je clos

window 28,10,50,12,4,15

gotoxy 28,10

puts error11

gotoxy 28,11

puts error12

gotoxy 28,12

puts error13

readkey

window 28,10,50,12,3,3

clos:

closefile fl,handle

window 2,4,77,24,3,3

ret

endp

;****************************************************

;Пpоцедуpа ввода данных

;****************************************************

vvod PROC near

openfile fl,handle

vvodst1:

;ramka 13,5,66,19,1,15,18

gotoxy 15,6

puts vnzalap

getnumber s.nzala,2

gotoxy 15,7

puts vkolvop

getnumber s.kolvop,2

nachv:

;window 14,8,65,18,1,15

;gotoxy 15,8

;puts vmash

;getnumber s.mash,12

gotoxy 15,9

puts otv

gotoxy 15,10

puts pr

gotoxy 15,11

puts mon

gotoxy 15,12

puts port

gotoxy 15,13

puts disk

gotoxy 15,14

puts disket

gotoxy 15,15

puts xp

gotoxy 15,16

puts pasc

gotoxy 15,17

puts delp

c0: ;есть принтер

gotoxy 48,10

getch

cmp al,'1'

ja c0

cmp al,'0'

jb c0

outch al

cmp al,'0'

je c0_1

or s.bit,00000001b

jmp c1

c0_1:

and s.bit,11111110b

c1: ; жк монитор

gotoxy 48,11

getch

cmp al,'1'

ja c1

cmp al,'0'

jb c1

outch al

cmp al,'0'

je c1_1

or s.bit,00000010b

jmp c2

c1_1:

and s.bit,11111101b

c2: ; usb порт

gotoxy 48,12

getch

cmp al,'1'

ja c2

cmp al,'0'

jb c2

outch al

cmp al,'0'

je c2_1

or s.bit,00000100b

jmp c3

c2_1:

and s.bit,11111011b

c3:

gotoxy 48,13 ; cd-rw дисковод

getch

cmp al,'1'

ja c3

cmp al,'0'

jb c3

outch al

cmp al,'0'

je c3_1

or s.bit,00001000b

jmp c4

c3_1:

and s.bit,11110111b

c4: ;дисковод для дискеты

gotoxy 48,14

getch

cmp al,'1'

ja c4

cmp al,'0'

jb c4

outch al

cmp al,'0'

je c4_1

or s.bit,00010000b

jmp c5

c4_1:

and s.bit,11101111b

c5: ; windows xp

gotoxy 48,15

getch

cmp al,'1'

ja c5

cmp al,'0'

jb c5

outch al

cmp al,'0'

je c5_1

or s.bit,00100000b

jmp c5

c5_1:

and s.bit,11011111b

c6: ; паскаль

gotoxy 48,16

getch

cmp al,'1'

ja c6

cmp al,'0'

jb c6

outch al

cmp al,'0'

je c6_1

or s.bit,01000000b

jmp c6

c6_1:

and s.bit,10111111b

c7: ; дельфи

gotoxy 48,17

getch

cmp al,'1'

ja c7

cmp al,'0'

jb c7

outch al

cmp al,'0'

je c7_1

or s.bit,10000000b

jmp s7

c7_1:

and s.bit,01111111b

jmp s7

vvodst:

jmp vvodst1

vodnotend:

jmp nachv

s7:

mov ah,42h

mov bx,handle

xor cx,cx

xor dx,dx

mov al,2h

int 21h

mov ah,40h

mov bx,handle

mov cx,48 ;сколько писать

mov dx,offset s

int 21h

gotoxy 22,18

puts ex_esc

mov ah,8h

int 21h

cmp al,1bh

jne vodnotend

gotoxy 22,18

puts ex_esc1

mov ah,8h

int 21h

cmp al,1bh

jne vvodst

closefile fl,handle

window 15,5,65,20,3,3

ret

vvod ENDP

;****************************************************

; Пpоцедуpа поиска

;****************************************************

vivod PROC near

;ramka 20,10,60,12,1,15,18

gotoxy 21,11

puts vnzala

getnumber nz,2 ;Ввод № зала

mov al,count

mov kolvo,al

mov koor,13

;ramka 20,10,60,12,4,15,18

openfile fl,handle

mov index,0

snova:

mov ah,3Fh

mov bx,handle

mov cx,48 ;сколько читать

mov dx,offset s

int 21h

cmp ax,0 ;пока не конец файла

je kons11

mov di,0

mov si,0

mov cx,0

mov di,0

mov si,0

e:

mov cl,kolvo

cyc:

mov al,s.nzala[di]

cmp nz[si],al

je el

snova1:

jmp snova

el:

inc si

inc di

loop cyc

call tablout

inc index

jmp contin

kons11:

jmp kons

contin:

jmp snova

kons:

cmp index,0

jne net

gotoxy 34,11

puts svednet

readkey

net:

closefile fl,handle

window 2,4,77,24,3,3

ret

vivod ENDP

;****************************************************

;Пpоцедуpа помощи

;****************************************************

help PROC near

;ramka 15,4,66,21,3,15,18

gotoxy 33,5

window 16,5,65,20,3,15

puts priv6

gotoxy 25,6

puts helpstr1

gotoxy 23,7

puts helpstr2

gotoxy 33,8

puts helpstr3

;// window 21,9,58,9,1,11

;// gotoxy 37,9

;// puts priv2

;// outch '.'

gotoxy 33,10

puts helpstr4

;// window 21,11,58,11,1,11

;// gotoxy 35,11

;// puts priv3

;// outch '.'

gotoxy 16,11

puts helpstr5

;// window 21,13,58,13,1,11

;// gotoxy 37,13

;// puts priv4

;// outch '.'

gotoxy 16,13

puts helpstr6

gotoxy 16,15

puts helpstr7

gotoxy 16,16

puts helpstr8

;// window 21,17,58,17,1,11

;// gotoxy 37,17

;// puts priv5

;// outch '.'

;// gotoxy 29,18

;// puts helpstr9

;// window 26,20,58,20,1,11

gotoxy 30,20

puts presskey

readkey

;// window 20,4,60,22,3,3

ret

help ENDP

;****************************************************

;Пpоцедуpа вывода шапки таблицы

;****************************************************

shapka proc near

ramka 2,4,76,23,1,15,18

gotoxy 3,5

puts tab0

gotoxy 3,6

puts tab1

gotoxy 3,7

puts tab3

gotoxy 3,8

puts tab4

gotoxy 3,9

puts tab5

gotoxy 3,10

puts tab6

gotoxy 3,11

puts tab6a

gotoxy 3,12

puts tab7

ret

endp

;****************************************************

;Пpоцедуpа вывода таблицы на экpан

;****************************************************

tablout PROC near

call shapka

gotoxy 3,13

puts tab8

gotoxy 21,7

puts s.nzala

gotoxy 49,7

puts s.kolvop

; gotoxy 5,13

;puts s.ceh

gotoxy 3,14

puts tab9

mov al,s.bit

and al,00100000b

cmp al,0

jne portk

gotoxy 68,13

puts tabnet

jmp neportk

portk:

gotoxy 68,13

puts tabest

neportk:

mov al,s.bit

and al,00010000b

cmp al,1

jge diskk

gotoxy 60,13

puts tabnet

jmp nediskk

diskk:

gotoxy 60,13

puts tabest

nediskk:

mov al,s.bit

and al,00001000b

cmp al,1

jge disketk

gotoxy 49,13

puts tabnet

jmp nedisketk

disketk:

gotoxy 49,13

puts tabest

nedisketk:

mov al,s.bit

and al,00000100b

cmp al,1

jge xpk

gotoxy 38,13

puts tabnet

jmp nexpk

xpk:

gotoxy 38,13

puts tabest

nexpk:

mov al,s.bit

and al,00000010b

cmp al,1

jge monk

gotoxy 30,13

puts tabnet

jmp nemonk

monk:

gotoxy 30,13

puts tabest

nemonk:

mov al,s.bit

and al,00000001b

cmp al,1

jge prk

gotoxy 22,13

puts tabest

jmp neprk

prk:

gotoxy 22,13

puts tabest

neprk:

gotoxy 28,22

puts presskey

readkey

ret

tablout endp

finn:

clrscr

prog_exit

END start

Подключаемый модуль maclib1.inc

************************************************************

; Ввод строки из одних чисел getnumber(string,max_len)

; Ввод строки getstr(string,max_len)

; Ввод строки из одних рус. букв getword(string, max_len)

; Вывод строки puts(str)

; Ввод символа без отображения getch

; Вывод символа outch(ch)

; Задержка пока не нажата клавиша readkey

; Выход из программы prog_exit

; Очистка экрана clrscr

; Установка курсора gotoxy(x,y)

; Выключает курсор nocursor

; Рисования окна window(x1,y1,x2,y2,c_f,c_s)

; Рисования рамки ramka(x1,y1,x2,y2,c_f,c_s,c_t)

; Открытие файла openfile(filename,handle)

; Закрытие файла closefile(filename,handle)

;*****************************************************************

;===========================

; Ввод строки из одних чисел

;===========================

getnumber macro buf,max_len

local m,mm,mmm,konecm,back,succ

pusha

mov cx,max_len

xor bx,bx

m: mov buf[bx],' ';запробеливаем строку

inc bx

loop m

xor bx,bx

mmm:

getch ;считываем символ без отображения

cmp al,8 ;если backspase

je back ;то переходим на затирку символа

jmp succ ;иначе

back:

cmp bx,0 ;если кол-во ддлина строки равна 0

je succ ; то переходим

dec bx ;иначе из длину уменьшаем на 1

outch 8 ;переход курсора на 1 влево

outch 32 ;затираем предыдущий символ(ставим пробел)

outch 8 ;смещаем курсор на 1 влево

succ:

cmp al,13 ;сравниваем введённый символ с enter

je konecm ;если равно то переход

cmp bx,max_len ;сравниваем длину строки с заданной

je mmm ;если равно то на начало ввода

cmp al,'0' ;если код меньше кода 0

jl mmm ;то на начало ввода

cmp al,'9' ;если код больше кода 9

jg mmm ;то на начало ввода

outch al ;отображаем символ

mov buf[bx],al ;записываем его в строку

inc bx ;увеличеваем длину на 1

jmp mmm ;на начало ввода

konecm:

mov buf[bx],'$' ;записываем конец строки

mov count,bl ;в count длину строки

popa

endm

;==================================

; Ввод строки из одних русских букв

;==================================

getword macro buf,max_len

local m,mm,mmm,konecm,back,succ

pusha ;ПО АНАЛОГИИ СМ. ВВОД СТРОКИ ИЗ ОДНИХ ЧИСЕЛ

mov cx,max_len

xor bx,bx

m: mov buf[bx],' ';запробеливаем строку

inc bx

loop m

xor bx,bx

mmm:

getch

cmp al,8

je back

jmp succ

back:

cmp bx,0

je succ

dec bx

outch 8

outch 32

outch 8

succ:

cmp al,13

je konecm

cmp bx,max_len

je mmm

cmp al,45

je nes

cmp al,'А' ;выкидываем из таблицы всё кроме отрезка от А до я

jl mmm

cmp al,'я'

jg mmm

cmp al,'_' ; из этого отрезка выкидываем символы псевдографики

jl nes

cmp al,'_'

jg nes

jmp mmm

nes:

outch al

mov buf[bx],al

inc bx

jmp mmm

konecm:

mov buf[bx],'$'

mov count,bl

popa

endm

;==========================================

; Ввод символа с клавиатуры без отображения

;==========================================

getch macro

;На выходе - в al введённый символ.

mov ah,08h

int 21h

endm

;==========================

; Вывод символа на экран

;==========================

outch macro ch

push ax

push dx

mov ah,02h

mov dl,ch

int 21h

pop dx

pop ax

endm

;=========================

; Вывод строки на экран

;=========================

puts macro str

pusha

lea dx,str

mov ah,9

int 21h

popa

endm

;==========================================

; Задержка экрана пока не нажата клавиша

;==========================================

readkey macro

pusha

mov ah,7 ;номер функции

int 21h ;задержка экрана

popa

endm

;========================

; Выход из программы.

;========================

prog_exit macro

pusha

mov ah,4ch

int 21h

popa

endm

;=================================================

; Очистка экрана путём установки нового режима

;=================================================

clrscr macro

pusha

mov ah,0 ;;номер функции установки режима дисплея

mov al,3 ;;код режима 80*25 2:чёрно-белого, 3:цветного

int 10h ;;очистка экрана

popa

endm

;========================================

; Установка курсора.

;========================================

gotoxy macro x,y ; Переход на указанные координаты

pusha

mov ah,02h

mov dh,y ; строка

mov dl,x ; столбец

int 10h

popa

endm

;=======================

; Выключение курсора

;=======================

nocursor macro

pusha

mov ah,01h

mov ch,4

mov cl,0

int 10h

popa

endm

;=======================

; Включение курсора

;=======================

cursor macro

push ax

push cx

mov ah,01h

mov ch,3

mov cl,4

int 10h

pop cx

pop ax

endm

;=============================

; Рисования окна без рамки

;=============================

window macro x1,y1,x2,y2,c_f,c_s

pusha

mov cl,x1 ;верхний левый угол

mov ch,y1

mov dl,x2 ;нижний правый угол

mov dh,y2

mov ax,10h

mov bl,c_f ;цвет фона

mul bl

add al,c_s ;цвет текста

mov bh,al

mov al,24

mov ah,6h

int 10h

popa

endm

;====================

; Рисование рамки

;====================

ramka macro x1,y1,x2,y2,c_f,c_s,c_t

local m1,m2,m3,m4 ;;c_f цвет заливки окна

pusha ;;c_s цвет рамки окна

window x1+1,y1+1,x2+1,y2+1,0,0 ;тень ;;c_t цвет текста

window x1,y1,x2,y2,c_f,c_s

gotoxy x1,y1

outch '+'

mov cx,x2

sub cx,x1

dec cx

push cx

m1:

outch '-'

loop m1

outch '+'

mov al,y1

add al,1

mov cx,y2

sub cx,y1

dec cx

push cx

push ax

m2:

gotoxy x1,al

inc al

outch '¦'

loop m2

pop ax

pop cx

m3:

gotoxy x2,al

inc al

outch '¦'

loop m3

gotoxy x1,y2

outch '+'

pop cx

m4:

outch '-'

loop m4

outch '+'

window x1+1,y1+1,x2-1,y2-1,c_f,c_t

popa

endm

;===================

; Открытие файла

;===================

openfile macro filename,handle

local m,m1,m2,m3,m4,m5,m6,exit

pusha

mov ah,3Dh

mov al,2h

mov dx,offset filename

int 21h

cmp ax,02h

je m1

cmp ax,03h

je m2

cmp ax,04h

je m3

jmp exit

m1:

puts error1

jmp m

m2: puts error2

jmp m

m3: puts error3

m: mov ah,3Ch

mov cx,0

mov dx,offset filename

int 21h

cmp ax,03h

je m5

cmp ax,04h

je m6

jmp exit

m5: puts error2

jmp exit

m6: puts error3

exit:

mov handle,ax

popa

endm

;===================

; Закрытие файла

;===================

closefile macro filename,handle

pusha

mov dx,offset filename

mov ah,3Eh

mov bx,handle

int 21h

popa

endm

Соседние файлы в папке doc92