Agenda de compromissos
Publicado por Alexis Huf 04/09/2006
[ Hits: 10.864 ]
Esse script armazena compromissos usando arquivos texto como banco de dados. Ele permite pesquisar, listar, remover e visualizar entradas. A função 3 só funciona em POSIX e Windows.
#!/usr/bin/python # -*- coding: utf-8 -*- #Programa que grava os compromissos, usa um arquivo de texto como 'bd' ### --- imports --- ### import os import time from sys import exit ### --- defs --- ### def adi(): if OS == 'posix' or OS == 'nt': os.system(clear) nome = raw_input('Nome do compromisso: ') if nome == '': opc = raw_input('Não é recomendável deixar o nome do compromisso em branco, tem certeza de que deseja fazer isso? (s/N) ') if opc == 'S': time.sleep(0.5) elif opc == 's': time.sleep(0.5) else: menu() descr = raw_input('Descrição do compromisso: ') data = raw_input('Data do compromisso (dd/mm/aaaa): ') if len(data) != 10: print 'Você forneceu uma data inválida, use o formato "dd/mm/aaa" !' time.sleep(1.5) menu() dd = data[0:2] mm = data[3:5] aaaa = data[6:10] arqnome = dd + '-' + mm + '-' + aaaa + ' - ' + nome entradas = os.listdir(dir_dados) if arqnome in entradas: opc = raw_input('ATENÇÃO!!! Já existe uma entrada %s deseja sobreescreve-la? (s/N) ' % arqnome) if opc == 'S': time.sleep(0.5) elif opc == 's': time.sleep(0.5) else: adi() arq = open(arqnome,'a') arq.write(descr) arq.close() print '---' print 'Entrada adicionada com sucesso!' enter = raw_input('(Pressione ENTER para continuar)') menu() # def rem(): # if OS == 'posix' or OS == 'nt': # os.system(clear) # f = 0 # entradas = os.listdir(dir_dados) # n_entradas = len(entradas) # if n_entradas < 1: # print 'Você não tem nenhuma entrada de compromisso gravada.' # menu() # elif n_entradas > 1: # print 'Compromissos:\n' # entradas.sort() # for n in entradas: # print n # print '\n' # nome = raw_input('Digite o nome por completo do compromisso que você deseja remover: ') # # elif n_entradas == 1: # nome = entradas[0] # print 'Só há o compromisso %s' % nome # opc = raw_input('Tem certeza que deseja remover o compromisso %s? (s/N)' % nome) # if opc == 'S' or opc == 's': # try: # os.remove(nome) # except OSError: # print 'A entrada %s não existe' % nome # f = 1 # if f == 0: # print ' ' # print 'A entrada foi removida com sucesso' # else: # time.sleep(0.5) # enter = raw_input('(Pressione ENTER para continuar)') # f = 0 # menu() def listar(): f = 0 if OS == 'posix' or OS == 'nt': os.system(clear) entradas = os.listdir(dir_dados) entradas.sort() if entradas == []: print 'Não há nenhuma entrada armazenada!' time.sleep(1.5) menu() print 'Compromissos:' for n in entradas: print n print '---' nome = raw_input('Qual é a entrada que você deseja ver ou remover? ') entradas = os.listdir(dir_dados) nomes = [] nomesc = [] for n in entradas: no = n n = n[13:] if n == nome: nomes.append(n) nomesc.append(no) vezes = nomes.count(nome) if vezes == 0: print 'Ops, a entrada que você forneceu não é válida' enter = raw_input('(Pressione ENTER para continuar)') menu() elif vezes == 1: nome = nomesc[0] print nome else: for n in nomesc: print n print '---' vr = raw_input('Deseja ver ou remover essas entradas? (V/r) ') if vr == 'R' or vr == 'r': try: for n in nomesc: os.remove(n) except OSError: print 'As entradas não existem' f = 1 if f == 0: print ' ' print 'As entradas foram removidas com sucesso!' else: try: arq = open(nome,'r') descr = arq.read() except IOError: print 'Ops, a entrada que você forneceu não é válida' enter = raw_input('(Pressione ENTER para continuar)') menu() print ' ' print '--- %s ---' % nome print '%s' % descr print '--- %s ---' % nome print ' ' enter = raw_input('(Pressione ENTER para continuar)') menu() def proc(): f = 0 if OS == 'posix' or OS == 'nt': os.system(clear) os.chdir(dir_dados) if OS == 'posix' or OS == 'nt': string = raw_input('Digite algo para pesquisar: ') if string == '': print 'Você DEVE digitar algo se quer fazer uma pesquisa!' time.sleep(2) menu() elif OS == 'posix': com = 'ls | grep ' + string + ' &> listagem-compromissos.tmp' erro = '' elif OS == 'nt': com = 'dir /B' + ' | find "' + string + '" > listagem-compromissos.tmp' erro = '' os.system(com) resultadoa = open('listagem-compromissos.tmp','r') resultados = resultadoa.read() resultadoa.close() resultadoa = open('listagem-compromissos.tmp','r') resultado = resultadoa.readlines() if resultados == erro: resultadoa.close() os.remove('listagem-compromissos.tmp') print 'Sua busca não retornou nenhum resultado' enter = raw_input('(Pressione ENTER para continuar)') proc() else: resultadoa.close() os.remove('listagem-compromissos.tmp') print ' ' for n in resultado: print n ent = raw_input('Qual é a entrada que deseja ver? ') ent = ent + '\n' ents = [] entsc = [] for n in resultado: no = n[:-1] n = n[13:] if n == ent: ents.append(n) entsc.append(no) vezes = ents.count(ent) if vezes == 0: print 'Ops, a entrada que você forneceu não é válida' enter = raw_input('(Pressione ENTER para continuar)') menu() elif vezes == 1: ent = entsc[0] else: for n in entsc: print n ent = raw_input('Escolha uma entrada digitando-a por completo: ') vr = raw_input('Você deseja ver a descrição do compromisso ou remove-lo? (V/r) ') if vr == 'r' or vr == 'R': try: os.remove(ent) except OSError: print 'A entrada %s não existe' % ent f = 1 if f == 0: print ' ' print 'A entrada foi removida com sucesso' else: try: arq = open(ent,'r') descr = arq.read() arq.close except IOError: print 'Ops, a entrada que você forneceu não é válida' enter = raw_input('(Pressione ENTER para continuar)') menu() print ' ' print '--- %s ---' % ent print descr print '--- %s ---' % ent else: print 'Desculpe, mas essa função só está disponível para sistemas posix e nt, você vai ter que usar a opção "Listar Todas as Entradas"' print ' ' enter = raw_input('(Pressione ENTER para continuar)') menu() def ajuda(): if OS == 'posix' or OS == 'nt': os.system(clear) print ' --- Ajuda --- ' print '''Sobre o que você gostaria de obter ajuda? 1. Adicionar uma entrada 2. Listar Todas as entradas 3. Pesquisar Uma entrada 0. Voltar ao menu principal''' opc = raw_input(' >> ') if opc == '1': if OS == 'posix' or OS == 'nt': os.system(clear) print ''' Essa função vai adicionar uma entrada ao "banco de dados", ou seja, ela vai criar um arquivo correspondente a entrada na pasta "dados-compromissos". Esse arquivo vai ter como nome a data do compromisso seguida do nome do mesmo (dd-mm-aaaa - nome). O nome do compromisso pode conter quaisquer carecteres que você usaria para dar nomes de arquivos no sistema operacional que você está usando, no windows você não deve usar caracteres como \ / : * ? " " < > | e em sistemas posix não há restrições, mas em ambos não é recomendável usar esses caracteres e outros como ; & % $ # [] etc. Em ambos os sistemas você pode usar espaços e acentos sem maiores preocupações. O campo de descrição não é de preenchimento obrigatório, seu conteúdo será gravado dentro do arquivo, e você pde usar qualquer caractere. O campo da data deve ser obrigatoriamente preenchido, e no formato dd/mm/aaaa, você pode trocar a barra por qualquer outro caractere como - + = ou até letras comuns, mas deve ser usado UM caractere como separa dor e sempre dois digitos para dia e mês e quatro para o ano, o 0 deve ser usado no caso de números menores de 10.''' print ' ' enter = raw_input('(Pressione ENTER para continuar)') ajuda() elif opc == '2': if OS == 'nt' or OS == 'posix': os.system(clear) print ''' Essa função vai ler todas as entradas armazenadas e mostrar uma lista. Você pode escolher qualquer opção digitando o nome do compromisso (sem a data precedendo) e a função vai procurar todos os nomes exatamente iguais, ou seja a função é CaSeSeNsItIvE e dd é diferente de DD e de ddd! Uma vez exibidas as entradas combinadas, você será questionado se quer ver todas as entradas exibidas ou se quer remove-las. Tome cuidado com a ultima opção, ela é irreversível. Caso você selecione "Ver", todas as entradas serão exibidas sequêncialmente no seguinte formato: --- entrada --- descrição da entrada --- entrada --- Se você selecionar a opção remover as entradas serão apagadas para sempre.''' print ' ' enter = raw_input('(Pressione ENTER para continuar)') ajuda() elif opc == '3': if OS == 'nt' or OS == 'posix': os.system(clear) print ''' Essa função está disponível apenas para sistemas Windows (tm) e posix, ela vai usar os utilitários de listagem "DIR" no Windows e "ls" nos de padrão posix. Ao escolher essa opção você deverá digitar alguyma coisa para pesquisar, essa função é CaSeSeNsItIvE e irá procurar por ocorrências do valor digitado em qualquer lugar do nome do arquivo da entrada, que é composto por "data - nome". Depois ela irá exibir uma lista das entradas que contém o valor digitado. Caso haja mais de um resultado, você terá de informar a entrada desejada digitand-a por completo, incuisive a data, caso haja apenas uma entrada, isso não será necessário. Depois você será questionado se deseja ver o conteúdo da entrada ou se deseja remove-la. Caso você selecione "Ver", todas aentrada será exibida no seguinte formato: --- entrada --- descrição da entrada --- entrada --- Se você selecionar a opção remover a entrada será apagada para sempre.''' print ' ' enter = raw_input('(Pressione ENTER para continuar)') ajuda() elif opc == '0': menu() else: print 'Opção inválida' time.sleep(1.5) ajuda() def menu(): if OS == 'posix' or OS == 'nt': os.system(clear) print '''Escolha uma opção: 1. Adicionar uma entrada 2. Listar Todas as entradas 3. Pesquisar Uma entrada 4. Ajuda 0. Sair''' opc = raw_input('>> ') if opc == '1': adi() elif opc == '2': listar() elif opc == '3': proc() elif opc == '4': ajuda() elif opc == '0': if OS == 'posix' or OS == 'nt': os.system(clear) exit() else: while opc != '1' and opc != '0': print 'Você digitou uma opção inválida!' time.sleep(1.5) menu() ### --- nucleo --- ### cont = 0 dir_prin = os.getcwd() OS = os.name if OS == 'nt': clear = 'cls' elif OS == 'posix': clear = 'clear' try: os.chdir('dados-compromissos') except OSError: os.mkdir('dados-compromissos') os.chdir('dados-compromissos') dir_dados = os.getcwd() menu()
Agenda de cadastros com tratamento de erros
Descobrir HOME do usuario e criar arquivo de configuração
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Toda vez que tento atualizar o clamav me deparo com erros ao atualizar... (0)
Meu notebook não está funcionando no monitor secundário (2)
Queria saber se existe alguma forma de desistalar programa no ubuntu s... (2)
Quero saber sobre os melhores aplicativos de office para usar em 2024 ... (1)