Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -----------------------------------------------------------------------------
- --
- -- Module : Main
- -- Copyright :
- -- License : AllRightsReserved
- --
- -- Maintainer : José Hugo Elsas
- -- Stability : Unstable
- -- Portability :
- --
- -- |
- --
- -----------------------------------------------------------------------------
- module Main (
- ) where
- import IO
- -------------------------------------------------------------------------
- {-Definicao dos tipos basicos-}
- data Nome = Nome {preNome :: String, sobreNome :: String} deriving (Eq,Show,Read)
- data TipoEmail = EmailPessoal | EmailTrabalho | EmailComercial deriving (Eq,Show,Read)
- data Email = Email {servicoEmail :: String,
- emailEmail :: String,
- tipoEmail :: TipoEmail} deriving (Eq,Show,Read)
- data TipoTelefone = TeleResidencial | TeleTrabalho | TeleCelular deriving (Eq,Show,Read)
- data Telefone = Telefone{ ddiTelefone :: Maybe String,
- dddTelefone :: Maybe String,
- numeroTelefone :: String,
- tipoTelefone :: TipoTelefone} deriving (Eq,Show,Read)
- data Endereco = Endereco { cidadeEndereco :: String,
- bairroEndereco :: String,
- ruaEndereco :: String,
- numeroEndereco :: String,
- apartamentoEndereco :: Maybe String,
- complementoEndereco :: Maybe String } deriving (Eq,Show,Read)
- data Contato = Contato { nomeContato :: Nome,
- telefoneContato :: [Telefone],
- enderecoContato :: Endereco,
- emailContato :: [Email],
- mensageiroContato :: [Email]} deriving (Eq,Show,Read)
- class Pretty a where
- pretty :: a → String
- prettyNome (Nome p s) = p++" "++s
- prettyEmail (Email s e _) = e++"("++s++")"
- prettyTelefone (Telefone Nothing Nothing t _) = (take 4 t)++"-"++(drop 4 t)
- prettyTelefone (Telefone Nothing (Just d) t _) = "("++d++") "++(take 4 t)++"-"++(drop 4 t)
- prettyTelefone (Telefone (Just i) Nothing t _) = "("++i++") "++(take 4 t)++"-"++(drop 4 t)
- prettyTelefone (Telefone (Just i) (Just d) t _) = "("++i++"-"++d++") "++(take 4 t)++"-"++(drop 4 t)
- prettyEndereco (Endereco ci ba ru nu ap co) = "Rua "++ru++", #"++nu⊕(l ap co ba ci)
- where
- l (Just a) (Just b) c d = ", "++b++" apto "++a++", "++c++"-"++d
- l Nothing (Just b) c d = ", "++b++", "++c++"-"++d
- l (Just a) Nothing c d = " apto "++a++", "++c++"-"++d
- l Nothing Nothing c d = ", "++c++"-"++d
- prettyContato (Contato no te en em me) = "Nome: "++(pretty no)++"\n"++
- tels++
- "Endereço: "++(pretty en)++"\n"++
- ems++
- mes
- where
- tels = concat ["Telefone "++(show i)++" ("++(drop 4 $ show $ tipoTelefone $ t)++")"++": "++(pretty t)++"\n"|(i,t) ← zip [1..] te]
- ems = concat ["Email "++(show i)++" ("++(drop 5 $ show $ tipoEmail $ e)++")"++": "++(pretty e)++"\n"|(i,e) ← zip [1..] em]
- mes = concat ["Mensageiro "++(show i)++" ("++(drop 5 $ show $ tipoEmail $ m)++")"++": "++(pretty m)++"\n"|(i,m) ← zip [1..] me]
- instance Pretty Nome where
- pretty = prettyNome
- instance Pretty Email where
- pretty = prettyEmail
- instance Pretty Telefone where
- pretty = prettyTelefone
- instance Pretty Endereco where
- pretty = prettyEndereco
- instance Pretty Contato where
- pretty = prettyContato
- ------------------------------------------------------------------------
- {- Parte de IO -}
- loadContatos :: Handle → IO (Maybe [Contato])
- loadContatos inh = do x ← hGetContents inh
- return (Just (map read (lines x))) :: IO (Maybe [Contato])
- getNomeIO :: IO Nome
- getNomeIO = do putStrLn "Digite o 1o ome do novo contato"
- prenome ← getLine
- putStrLn "Digite o sobrenome do novo contato"
- sobrenome ← getLine
- return (Nome prenome sobrenome)
- ---------------------------------------------
- getTelefoneLoopIO :: [Telefone] → IO [Telefone]
- getTelefoneLoopIO listaTel = do putStrLn "Deseja adicionar um telefone? Se sim digite (s) se não digite (n)"
- c ← getLine
- if(c=="n") then (return listaTel)
- else do putStrLn "Digite o número do novo telefone a ser posto na agenda"
- tel ← getLine
- putStrLn "Digite se o número é residencial(r), de trabalho(t) ou celular(c)"
- c ← getLine
- putStrLn "Digite o DDD do contato. Se não quiser nenhum, simplesmente clique ENTER"
- ddd ← getLine
- putStrLn "Digite o DDI do contato. Se não quiser nenhum, simplesmente clique ENTER"
- ddi ← getLine
- let tipoTel = if(c=="r") then TeleResidencial else if (c=="t") then TeleTrabalho else TeleCelular
- let dddTel = if(ddd=="") then Nothing else (Just ddd)
- let ddiTel = if(ddi=="") then Nothing else (Just ddi)
- getTelefoneLoopIO (listaTel⊕[(Telefone ddiTel dddTel tel tipoTel)])
- getTelefoneIO = getTelefoneLoopIO []
- -------------------------------------------------------
- getEmailLoopIO :: [Email] → IO [Email]
- getEmailLoopIO listaEmail = do putStrLn "Deseja adicionar um e-mail? Se sim digite (s) se não digite (n)"
- c ← getLine
- if(c=="n") then (return listaEmail)
- else do putStrLn "Digite o novo e-mail a ser posto na agenda"
- email ← getLine
- putStrLn "Digite se o e-mail é Pessoal(p), de Trabalho(t) ou Comercial(c)"
- c ← getLine
- putStrLn "Digite o Serviço do seu e-mail(e.g. gmail,hotmail,...)."
- serv ← getLine
- let tipoEmail = if(c=="p") then EmailPessoal else if (c=="t") then EmailTrabalho else EmailComercial
- getEmailLoopIO (listaEmail⊕[(Email serv email tipoEmail)])
- getEmailIO = getEmailLoopIO []
- -------------------------------------
- {-getEndereco-}
- ------------------------------------------------------------------------
- testeEndereco1 = Endereco "Rio de Janeiro" "Botafogo" "Voluntários da Pátria" "374" (Just "202") Nothing
- testeEmail11 = Email "gmail" "euclydesgaspar@gmail.com" EmailPessoal
- testeEmail12 = Email "yahoo" "gasparelsas@yahoo.com.br" EmailPessoal
- testeNome1 = Nome "Euclydes" "Duarte Gaspar"
- testeTelefone11 = Telefone (Just "55") (Just "21") "25398374" TeleResidencial
- testeTelefone12 = Telefone (Just "55") (Just "21") "25355537" TeleResidencial
- testeTelefone13 = Telefone (Just "55") (Just "21") "97054096" TeleCelular
- testeContato1 = Contato testeNome1 [testeTelefone11,testeTelefone12,testeTelefone13] testeEndereco1 [testeEmail11,testeEmail12] []
- testeEndereco2 = Endereco "Rio de Janeiro" "Botafogo" "Voluntários da Pátria" "374" (Just "802") Nothing
- testeEmail21 = Email "hotmail" "raquel-capella@hotmail.com" EmailPessoal
- testeEmail22 = Email "yahoo" "raquel.capella@yahoo.com.br" EmailPessoal
- testeMens12 = testeEmail21
- testeMens22 = Email "skype" "raquel" EmailPessoal
- testeNome2 = Nome "Raquel" "Capella Gaspar Nepomuceno"
- testeTelefone21 = Telefone (Just "55") (Just "21") "25262343" TeleResidencial
- testeTelefone22 = Telefone (Just "55") (Just "21") "98580665" TeleCelular
- testeContato2 = Contato testeNome2 [testeTelefone21,testeTelefone22] testeEndereco2 [testeEmail21,testeEmail22] [testeMens12,testeMens22]
- main = do x ← getTelefoneIO
- mapM_ putStrLn (map pretty x)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement