TYPE aluno :: p_nome:nome p_curso:curso p_idade:idade; bd = numero -> aluno; numero = INT; nome = STR; curso = STR; idade = INT; ENDTYPE FUNC inic() : bd STATE BD <- []; ; ------------------- Criacao da 'form' Aluno ------------------- FUNC f2() : nil STATE let ( ; top = rtl(".","top","Ficha de Informacao do Aluno") top = rtl(".","top","Ficha de Informacao do Aluno",600,400), ; num_alu = rgve2(top, INT,"Numero do aluno") frame = rf(top,"frame1") ) in ALUNO <- ric_state(top,frame); ; ------------------- Criacao da 'form' Aluno ------------------- FUNC f1() : nil STATE let ( top = rtl(".","top","Ficha de Informacao do Aluno"), ; top = rtl(".","top","Ficha de Informacao do Aluno",600,400), frame = rf(top,"frame1"), num_alu = rgve2(frame, INT,"Numero do aluno"), nome_alu = rgve2(frame, 50,STR,"Nome"), curso_alu = rgve2(frame, 25,STR,"Curso"), idade_alu = rgve2(frame, 3,INT,"Idade") ) in ALUNO <- ric_state(top,num_alu,nome_alu,curso_alu,idade_alu); ; ----------------- Funcao para inserir um aluno ---------------------- ; (usando ao 'form' criada pela funcao acima) FUNC insere() : bd STATE let ( ecran = activa(ALUNO), new = BD + [le(num_alu) -> aluno(le(nome_alu),le(curso_alu),le(idade_alu))], ecran = desactiva(ALUNO) ) in BD <- new; ; ----------------- Funcao para consulta ('form' aluno) -------------- FUNC consulta() : nil RETURN let ( ecran = activa(ALUNO), info_aluno = BD[le(num_alu)], c = p_curso(info_aluno), i = p_idade(info_aluno), ; como se ve 'escreve' pode ter como segundo parametro uma 'sexp' ou um simbolo ecran = escreve(nome_alu,p_nome(info_aluno)), ecran = escreve(curso_alu,c), ecran = escreve(idade_alu,i), consulta_b = rmb(ALUNO,"Ok"), lixo = ric_state(NULL,consulta_b), ecran = activa(consulta_b), ; ecran = rab(consulta_b,desactiva(ALUNO)) ecran = rab(consulta_b,kill_em_all()) ) in info_aluno; FUNC kill_em_all() : nil RETURN let ( ecran = destroi(consulta_b), ecran = desactiva(ALUNO) ) in nil; ; -------------- Funcoes usando botoes ------------- FUNC b() : nil STATE let ( botao = rmb(".","Insere aluno") ) in BOTAO <- ric_state(botao); FUNC b2() : nil RETURN let ( ecran = activa(BOTAO) ) in rab(BOTAO,insere()); ; ------------- Funcao experimental para listboxes --------------------- FUNC lb() : nil RETURN let ( top = rtl(".","top3","Lista de alunos"), frame = rf(top,"frame"), listbox = rlbx(frame,"Lista","subtitulo") ) in LISTBOX <- ric_state(top,listbox); FUNC todos(): STR-list RETURN let ( ecran = activa(LISTBOX) ) in todos_aux(BD); FUNC todos_aux(base:bd) : STR-list RETURN if base == [] then <> else let ( e = choice(dom(base)), nome = p_nome(base[e]), new_base = base\{e}, ecran = rwlb(listbox,e), ; ecran = rwlb(listbox,nome) ; pode receber uma sexp ecran = rwlb(listbox,p_nome(BD[e])) ) in todos_aux(new_base); ; -------------------- Funcao experimental para menus -------------- FUNC menu1() : nil STATE let ( menu_principal = ric_menu(".","Menu Principal"), m_aluno = ric_submenu(menu_principal,"ALUNO"), m_insere = ric_opcao(m_aluno,"INSERE ALUNO",insere()), m_consulta = ric_opcao(m_aluno,"CONSULTA ALUNO",consulta()), m_docente = ric_submenu(menu_principal,"DOCENTE"), d_insere = ric_opcao(m_docente,"INSERE DOC") ) in MENU <- ric_state(menu_principal); ; ----------------- Parte Executavel ----------------- make()= do(inic(), print('inic), f1(), print('f1)); run() = do (BD <- BD + [1 -> aluno("Mario Ricardo","Mcc",23)], BD <- BD + [2 -> aluno("Fernando Cuesta","malha",23)], BD <- BD + [3 -> aluno("Derrete Se Em","sebo",24)], BD <- BD + [4 -> aluno("Tir Ana","sei la",53)]); ; --------- EOF --------- ; rab(nome_var_camila_associada,Estado,Funcao_bind)