quarta-feira, 22 de setembro de 2010

Protegendo Páginas em PHP

Então,
Agora que o Blog não é mais exclusivo JAVA, vou começar com uma aplicação de Login (todos já fizemos), com páginas diferentes para Administrador e Funcionários (nem todos já fiseram), protegidas para que não se possa acessar nenhuma URL além da tela inicial (quase ninguém faz).

------------------------------------------------------------------------------------------
config.php - Serve para configurar a conexão com o banco de dados.
------------------------------------------------------------------------------------------
<?php
$host = "localhost"; //Servidor do mysql
$user = "root"; //Usuario do banco de dados
$senha = ""; //senha do banco de dados
$db = "user"; //banco de dados
$nome_site = "login.php"; //Nome do site
$email = "email@host.com"; //E-mail do administrador
$site = "http://www.meusite.com"; //Seu site n se esuqece de bota o http://

mysql_connect($host, $user, $senha) or die (mysql_error());
mysql_select_db($db) or die (mysql_error());
?>

------------------------------------------------------------------------------------------

login.php - Página Principal
------------------------------------------------------------------------------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans titre</title>
<style type="text/css">
<!--
.Style6 {font-size: 13px}
-->
</style>
</head>

<body>
<form id="form1" name="form1" method="post" action="../login/logar.php">
  <table width="41%" border="0">
    <tr>
      <td colspan="2"><div align="center"><strong>Usuario</strong></div></td>
    </tr>
    <tr>
      <td><span class="Style6">Login:</span></td>
      <td><span class="Style6">
        <label>
        <input name="login" type="text" id="login" />
        </label>
      </span></td>
    </tr>
    <tr>
      <td><span class="Style6">Senha:</span></td>
      <td><span class="Style6">
        <label>
        <input name="senha" type="password" id="senha" />
        </label>
      </span></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><span class="Style6">
        <label>
        <input type="submit" name="Submit" value="OK" />
        </label>
      </span></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><span class="Style6"><a href="../login/esquece_senha.php">Esquece senha </a></span></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><span class="Style6"><a href="../login/cadastro.php">Cadastro</a></span></td>
    </tr>
  </table>
</form>
</body>
</html>

------------------------------------------------------------------------------------------

logar.php - Página que irá trabalhar os dados do Login
------------------------------------------------------------------------------------------
<?php
require("bloquear.php");
trancar_pagina("logar.php");
?>
<?php
include("config.php");

$login = $_POST['login'];
$senha = $_POST['senha'];

/* Verifica se existe usuario, o segredo ta aqui quando ele procupa uma
linha q contenha o login e a senha digitada */
$sql_logar = "SELECT * FROM user WHERE login = '$login' && senha = '$senha'";
$exe_logar = mysql_query($sql_logar) or die (mysql_error());
$fet_logar = mysql_fetch_assoc($exe_logar);
$num_logar = mysql_num_rows($exe_logar);

//Verifica se n existe uma linha com o login e a senha digitado
if ($num_logar == 0){
   echo "Login ou senha invalido.";
   echo "<br><a href='javascript:window.history.go(-1)'>Clique aqui para volta.</a>";  
}
elseif($fet_logar['activo'] == "N"){
   echo "Usuario não ativado, verifique seu e-mail para ativa a conta.";
   echo "<br><a href='javascript:window.history.go(-1)'>Clique aqui para volta.</a>";
}
else{
   //Cria a sessão e manda pra pagina principal.php
   session_start();
   $_SESSION['login'] = $login;
   $_SESSION['senha'] = $senha;
  
    if ($fet_logar['Tipo'] == "A"){
        header("Location:administrador.php");
    }
    else{
        header("Location:funcionario.php");
    }
}
?>
------------------------------------------------------------------------------------------

Cadastro.php - Cadastro de novo funcionário no banco
------------------------------------------------------------------------------------------
<?php
require("bloquear.php");
trancar_pagina("cadastro.php");
?>
<?php

include("config.php");

if (isset($_POST['login'])){

   //pega a sessão id do usuario
   session_start();
   $sessao = session_id();
   $login = $_POST['login'];
   $senha = $_POST['senha'];
   $nome  = $_POST['nome'];
   $email = $_POST['email'];

   $sql_busca = "SELECT * FROM user WHERE login = '$login'";
   $exe_busca = mysql_query($sql_busca) or die (mysql_error());
   $num_busca = mysql_num_rows($exe_busca);

   $sql_busca2 = "SELECT * FROM user WHERE email = '$email'";
   $exe_busca2 = mysql_query($sql_busca2) or die (mysql_error());
   $num_busca2 = mysql_num_rows($exe_busca2);

   //Verifica se os campos estão preenchidos
   if ($_POST['login'] == "" || $_POST['senha'] == "" || $_POST['senha2'] == "" || $_POST['nome'] == "" || $_POST['email'] == "" || $_POST['Tipo'] == ""){
      $ac[] = "Por favou preencha todos os campos corretamente.";
   }
   //Verifica se ja existe o login
   if ($num_busca > 0){
      $ac[] = "Esse login já esta sendo usado por outro usuario.";
   }
   //Verifica se ja existe o e-mail
   if ($num_busca2 > 0){
      $ac[] = "Esse e-mail já esta sendo usado por outro usuario.";
   }
   //Verifica se o e-mail esta correto
   if (!ereg("@.", $_POST['email'])){
      $ac[] = "E-mail invalido.";
   }
   //Verifica se as duas senha são diferente
   if ($_POST['senha'] != $_POST['senha2']){
      $ac[] = "Verifique se as duas senha estão correta.";
   }
   //Verifica se todas estão corretas
   if (!isset($ac)){
      //Inclui o cadastro no mysql
      $sql_inclu = "INSERT INTO user(login, senha, email, sessao) VALUES
                    ('$login', '$senha', '$email', '$sessao')";
      $exe_inclu = mysql_query($sql_inclu) or die (mysql_error());
        $sql_inclui = "INSERT INTO nome(nome) VALUES('$nome')";
      $exe_inclui = mysql_query($sql_inclui) or die (mysql_error());
     
      $topico = "Cadastro $nome_site";
      $mensagem = "<html>";
      $mensagem .= "<body>";
      $mensagem .= "Olá $login\r\n";
      $mensagem .= "<br>Você efetuou um cadastro no $nome_site.</br>";
      $mensagem .=    "<br>Login: $login";
      $mensagem .=    "<br>Senha: $senha";
      $mensagem .=    "<br>Ativar conta <a href='$site/active.php?ac=$sessao'>$site/active.php?ac=$sessao</a></br>";
      $mensagem .=    "</body>";
      $mensagem .=    "</html>";
      $headers = "MIME-Version: 1.0\r\n";
      $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
      $headers .= "From: $nome_site <$email>\r\n";
      $ac[] = "Cadastro efetuado com sucesso, verifique seu e-mail para ativa a conta.";
      //enviar para o email o login, senha e o codigo de ativação
      mail($email, $topico, $mensagem, $headers);
   }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans titre</title>
<style type="text/css">
<!--
.Style2 {font-size: 13px}
-->
</style>
</head>
<body>
<?php
if (isset($ac)){
   for($i=0;$i<count($ac);$i++){
      echo "<li>".$ac[$i];
   }
}
?>
<form id="form1" name="form1" method="post" action="<? $_SERVER['file:///C|/DOCUME~1/admin/CONFIG~1/Temp/Rar$DI05.687/PHP_SELF']?>">
  <table width="100%" border="0">
    <tr>
      <td colspan="2"><div align="center"><strong>Cadastro</strong></div></td>
    </tr>
    <tr>
      <td width="13%"><span class="Style2">Login:</span></td>
      <td width="87%"><span class="Style2">
        <label>
        <input name="login" type="text" id="login" />
        </label>
      </span></td>
    </tr>
    <tr>
      <td><span class="Style2">Senha:</span></td>
      <td><span class="Style2">
        <label>
        <input name="senha" type="password" id="senha" />
        </label>
      </span></td>
    </tr>
    <tr>
      <td><span class="Style2">Repetir senha: </span></td>
      <td><span class="Style2">
        <label>
        <input name="senha2" type="password" id="senha2" />
        </label>
      </span></td>
    </tr>
    <tr>
      <td><span class="Style2">Nome: </span></td>
      <td><span class="Style2">
        <label>
        <input name="Nome" type="text" id="nome" />
        </label>
      </span></td>
    </tr>   
    <tr>
      <td><span class="Style2">E-mail:</span></td>
      <td><span class="Style2">
        <label>
        <input name="email" type="text" id="email" />
        </label>
      </span></td>
    </tr>
    <tr>
    <td><span class="Style2">Tipo:</span></td>
      <td><label>
      <input type="radio" name="Tipo" id="af" value="A" />
      Administrador
      <input type="radio" name="Tipo" id="af" value="F" />
      Funcionário</label></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><span class="Style2">
        <label>
        <input type="submit" name="Submit" value="Enviar" />
        </label>
      </span></td>
    </tr>
  </table>
  <p>&nbsp;</p>
</form>
</body>
</html>

------------------------------------------------------------------------------------------

esquece_senha.php - Recuperação de Senha
------------------------------------------------------------------------------------------
<?php
include("config.php");

if (isset($_POST['login'])){
   $login = $_POST['login'];
   //Verifica se existe usuario
   $sql_busca = "SELECT * FROM user WHERE login = '$login'";
   $exe_busca = mysql_query($sql_busca) or die (mysql_error());
   $fet_busca = mysql_fetch_assoc($exe_busca);
   $num_busca = mysql_num_rows($exe_busca);
   //verifica se existe uma linha com o login digitado
   if ($num_busca > 0){
      $email = $fet_busca['email'];
      $senha = $fet_busca['senha'];
      $topico = "Esquece senha";
      $mensagem = "<html>";
      $mensagem .= "<body>";
      $mensagem .= "<br>Você efetuou um pedido de recuperação de senha no $nome_site.</br>";
      $mensagem .=    "<br>Login: $login";
      $mensagem .=    "<br>Senha: $senha</br>";
      $mensagem .= "<br>Site oficial do $nome_site";
      $mensagem .=    "<br><a href='$site'>$site</a></br>";
      $mensagem .=    "</body>";
      $mensagem .=    "</html>";
      $headers = "MIME-Version: 1.0\r\n";
      $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
      $headers .= "From: $nome_site <$email>\r\n";
     
      //enviar para o email o login e a senha
      mail($email, $topico, $mensagem, $headers);
      $ac[] = "Sua senha foi enviado para seu e-mail.";
   }
   else {
      $ac[] = "Esse login não existe.";
   }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans titre</title>
<style type="text/css">
<!--
.Style2 {font-size: 13px}
-->
</style>
</head>

<body>
<?php
if (isset($ac)){
   for($i=0;$i<count($ac);$i++){
      echo "<li>".$ac[$i];
   }
}
?>
<form id="form1" name="form1" method="post" action="<? $_SERVER['file:///C|/DOCUME~1/admin/CONFIG~1/Temp/Rar$DI57.031/PHP_SELF']?>">
  <table width="33%" border="0">
    <tr>
      <td colspan="2"><div align="center"><strong>Esquece senha </strong></div></td>
    </tr>
    <tr>
      <td width="22%"><span class="Style2">Login:</span></td>
      <td width="78%"><span class="Style2">
        <label>
        <input name="login" type="text" id="login" />
        </label>
      </span></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><span class="Style2">
        <label>
        <input type="submit" name="Submit" value="Enviar" />
        </label>
      </span></td>
    </tr>
  </table>
</form>
</body>
</html>

------------------------------------------------------------------------------------------

restrito.php - faz a sessão ser restrita a usuários
------------------------------------------------------------------------------------------
<?php
@session_start();
if (isset($_SESSION['login']) && isset($_SESSION['senha'])){
   $login_usuario = $_SESSION['login'];
}
else {
   header("Location:login.php");
   exit();
}
?>

------------------------------------------------------------------------------------------

bloquear.php - Impede que seja acessada qualquer URL diretamente.
------------------------------------------------------------------------------------------
<?php
function trancar_pagina($nome){
    if (eregi("$nome", $_SERVER['SCRIPT_NAME'])){
        header("Location:login.php");
    }
}
?>
------------------------------------------------------------------------------------------

administrador.php - Trata os direitos do Administrador
------------------------------------------------------------------------------------------
<?php
require("bloquear.php");
trancar_pagina("administrador.php");
?>
<?php
include('config.php');

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  mysql_select_db($db);
  $login = $_POST['login'];
  $v2      = $_POST['email'];
  $v3      = $_POST['radio1'];
  $v4      = $_POST['Pontos'];
  
  $updateSQL = "UPDATE user SET email='$v2', activo='$v3', Pontos='$v4' WHERE login = '$login'";

  $Result1 = mysql_query($updateSQL) or die(mysql_error());
 
  echo "Dados alterados com sucesso! <br>";
}

mysql_select_db($db);
$query_manu1 = "SELECT * FROM user";
$manu1 = mysql_query($query_manu1) or die(mysql_error());
$row_manu1 = mysql_fetch_assoc($manu1);
$totalRows_manu1 = mysql_num_rows($manu1);
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>

Olá <?php
include("config.php");
include("restrito.php");

$sql_busca = "SELECT * FROM user WHERE login = '$login_usuario'";
$exe_busca = mysql_query($sql_busca) or die (mysql_error());
$fet_busca = mysql_fetch_assoc($exe_busca);
$qtd_registros = mysql_num_rows($exe_busca); // retorna a quantidade registros encontrados na consulta acima
$nome = array();

 for($i=0;$i<$qtd_registros;$i++)
{
     $nome[$i] = mysql_result($exe_busca,$i,"login"); // a função mysql_result tem 3 parâmetros: 1º aponta para a variável da consulta; 2º aponta para a linha do registro que você quer pegar; 3º aponta para a coluna que você quer pegar na tabela
    echo $nome[$i]."<br>";   
}
?>
<br>
Você Possui  <?php
include("config.php");
include("restrito.php");

$sql_busca = "SELECT * FROM user WHERE login = '$login_usuario'";
$exe_busca = mysql_query($sql_busca) or die (mysql_error());
$fet_busca = mysql_fetch_assoc($exe_busca);
$qtd_registros = mysql_num_rows($exe_busca); // retorna a quantidade registros encontrados na consulta acima
$nome = array();

 for($i=0;$i<$qtd_registros;$i++)
{
     $nome[$i] = mysql_result($exe_busca,$i,"pontos"); // a função mysql_result tem 3 parâmetros: 1º aponta para a variável da consulta; 2º aponta para a linha do registro que você quer pegar; 3º aponta para a coluna que você quer pegar na tabela
    echo $nome[$i]." pontos! <br>";   
}
?> 
<br>
Alteração de Pontos:
<br><br>

<form action="<?php echo $editFormAction; ?>" method="post" name="form1" id="form1">
  <table>
    <tr valign="baseline">
      <td nowrap="nowrap" align="right">Login:</td>
      <td><select name="login">
        <?php
do { 
?>
        <option value="<?php echo $row_manu1['login']?>" ><?php echo $row_manu1['login']?></option>
        <?php
} while ($row_manu1 = mysql_fetch_assoc($manu1));
?>
  </select></td>
    </tr>
    <tr> </tr>
    <tr valign="baseline">
      <td nowrap="nowrap" align="right">Email:</td>
      <td><input type="text" name="email" value="" size="32" /></td>
    </tr>
    <tr valign="baseline">
      <td nowrap="nowrap" align="right">Activo:</td>
      <td><label>
      <input type="radio" name="radio1" id="sn" value="S" />
      Sim
      <input type="radio" name="radio1" id="sn" value="N" />
      Não</label></td>
    </tr>
    <tr valign="baseline">
      <td nowrap="nowrap" align="right">Novos Pontos:</td>
      <td><input type="text" name="Pontos" value="" size="32" /></td>
    </tr>
    <tr valign="baseline">
      <td nowrap="nowrap" align="right">Tipo:</td>
      <td><label>
      <input type="radio" name="radio2" id="af" value="A" />
      Administrador
      <input type="radio" name="radio2" id="af" value="F" />
      Funcionário</label></td>
    </tr>
    <tr valign="baseline">
      <td nowrap="nowrap" align="right">&nbsp;</td>
      <td><input type="submit" value="Alterar" /></td>
    </tr>
  </table>
  <input type="hidden" name="MM_insert" value="form1" />
</form>
<br><br>
  <table width="41%" border="0">
    <tr>
      <td>&nbsp;</td>
      <td><span class="Style6"><a href="../login/login.php">Sair </a></span></td>
    </tr>
  </table>

<p>&nbsp;</p>
</body>
</html>
<?php
mysql_free_result($manu1);
?> 
------------------------------------------------------------------------------------------

funcionario.php - Trata os direitos dos Funcionarios
------------------------------------------------------------------------------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>

<?php
require("bloquear.php");
trancar_pagina("funcionario.php");
?>


Olá <?php
include("config.php");
include("restrito.php");

$sql_busca = "SELECT * FROM user WHERE login = '$login_usuario'";
$exe_busca = mysql_query($sql_busca) or die (mysql_error());
$fet_busca = mysql_fetch_assoc($exe_busca);
$qtd_registros = mysql_num_rows($exe_busca); // retorna a quantidade registros encontrados na consulta acima
$nome = array();

 for($i=0;$i<$qtd_registros;$i++)
{
     $nome[$i] = mysql_result($exe_busca,$i,"login");
/*     a função mysql_result tem 3 parâmetros:
        1º aponta para a variável da consulta;
     2º aponta para a linha do registro que você quer pegar;
     3º aponta para a coluna que você quer pegar na tabela */
    echo $nome[$i]."<br>";   
}
?>
<br>
Você Possui  <?php
include("config.php");
include("restrito.php");

$sql_busca = "SELECT * FROM user WHERE login = '$login_usuario'";
$exe_busca = mysql_query($sql_busca) or die (mysql_error());
$fet_busca = mysql_fetch_assoc($exe_busca);
$qtd_registros = mysql_num_rows($exe_busca); // retorna a quantidade registros encontrados na consulta acima
$nome = array();

 for($i=0;$i<$qtd_registros;$i++)
{
     $nome[$i] = mysql_result($exe_busca,$i,"pontos"); // a função mysql_result tem 3 parâmetros: 1º aponta para a variável da consulta; 2º aponta para a linha do registro que você quer pegar; 3º aponta para a coluna que você quer pegar na tabela
    echo $nome[$i]." pontos! <br><br>";   
}

?>
  <table width="41%" border="0">
    <tr>
      <td>&nbsp;</td>
      <td><span class="Style6"><a href="../login/login.php">Sair </a></span></td>
    </tr>
  </table>
</body>
</html>

sexta-feira, 10 de setembro de 2010

Geração de Preços

Programa bobo, que calcula o preço final de venda de qualquer produto, partindo de informações básicas sobre o mesmo.

------------------------------------------------------------------------------------------------------------

/**
 * @(#)esse.java
 *
 * esse application
 *
 * @author Arthur Tavares
 * @version 1.00 2010/3/12
 */

import javax.swing.*;

public class esse {

    public static void main(String[] args) {
               
        //Variáveis Auxiliares e De controle
        String aux="", aux2="";
        int i=0;
       
        //Variáveis de armazenamento temporário de informações
        //case1
        int precop=0, qtdp=0;
       
        //case2
        int valcon=0;
       
        //case3
        int lucro=0, qtdprodvend=0;
       
        //case4
        int med=0;
       
        //Variáveis de cálculo
        double total=0;
              
        aux+="Escolha uma opção: \n\n";
        aux+="1 - Inserir Valor de compra \n";
        aux+="2 - Inserir Valor total das Contas \n";
        aux+="3 - Inserir Porcentagem de Lucro \n";
        aux+="4 - Calcular Valor de Venda \n";
        aux+="5 - Sair \n\n";
       
        while(i!=5){
            aux2 = JOptionPane.showInputDialog(aux);
            i = Integer.parseInt(aux2);
       
       
            switch(i){
                //esse case controla a primeira opção do menu principal
                case 1:
                    aux2 = JOptionPane.showInputDialog("Digite o valor de compra do Produto:");
                    precop = Integer.parseInt(aux2);
                    aux2 = JOptionPane.showInputDialog("Digite a quantidade a ser adquirida:");
                    qtdp = Integer.parseInt(aux2);
                   break;
                case 2:
                    aux2 = JOptionPane.showInputDialog("Digite o valor total de todas as contas \nda última semana:");
                    valcon = Integer.parseInt(aux2);
                break;
                case 3:
                    aux2 = JOptionPane.showInputDialog("Digite a porcentagem de lucro esperado:");
                    lucro = Integer.parseInt(aux2);
                    aux2 = JOptionPane.showInputDialog("Digite quantidade de produtos oferecidos \npara venda:");
                    qtdprodvend = Integer.parseInt(aux2);
                break;
                case 4:
                    aux2 = JOptionPane.showInputDialog("Média de vendas das últimas semanas:");
                    med = Integer.parseInt(aux2);
                   
                    if (precop==0){
                        JOptionPane.showMessageDialog(null, "Você Não Informou o preço do produto");
                        break;
                    }
                    if (qtdp==0){
                        JOptionPane.showMessageDialog(null, "Você Não Informou a quantidade adquirida do produto");
                        break;
                    }
                    if (valcon==0){
                        JOptionPane.showMessageDialog(null, "Você Não Informou o valor das contas fixas");
                        break;
                    }
                    if (lucro==0){
                        JOptionPane.showMessageDialog(null, "Você Não Informou a margem de lucro esperada");
                        break;
                    }
                    if (qtdprodvend==0){
                        JOptionPane.showMessageDialog(null, "Você Não Informou o número de produtos oferecidos ao cliente");
                        break;
                    }
                   
                    double a =((precop*qtdp)+(valcon/qtdprodvend));
                    double b =(lucro*10);
                                       
                    total = (a+(a/b))/med;
                   
                    JOptionPane.showMessageDialog(null, "O valor de venda recomendado para o produto é \nR$"+total);
                break;
               }
        }
        JOptionPane.showMessageDialog(null, "Obrigado por usar o Programa!");
       
        System.exit(0);
    }   
}

Ler e salvar em Arquivo TXT

 Pequeno programa para redigir, ler, salvar e inverter Strings em JAVA:

--------------------------------------------------------------------------------------------------------
/**
 * @(#)ls.java
 *
 * ls application
 *
 * @author
 * @version 1.00 2010/9/6
 */

import java.io.*;
import java.util.Scanner; 

public class ls {
   
    public static void main(String[] args) {
       
        ls ls = new ls();
        Scanner entra = new Scanner(System.in);
       
        int i=0, w=0;
       
        String line="", text="", caminhonome="";
        String aux = "";
        aux += "Digite a opção desejada: \n";
        aux += "1 - Digitar texto; \n";
        aux += "2 - Salvar texto; \n";
        aux += "3 - Abrir texto; \n";
        aux += "4 - Inverter segunda linha do texto; \n";
        aux += "5 - Fechar aplicativo \n";
               
        while (i != 5){
            System.out.println(aux);
            i = entra.nextInt();
           
            switch(i){
                case 1: //DIGITA FRASES
                    System.out.println("Quando acabar o texto, digite 'S' e dê enter");
                    while (w==0){
                        line = entra.nextLine();
                        if(line.equals("S")){
                            w=1;
                        }
                        line+="P";
                        text+=line+"\n";
                    }
                    break;
                case 2: // salva texto
                    System.out.println("Digite o caminho completo e o nome do arquivo a ser salvo:");
                    caminhonome = entra.next();                   
                    ls.salvar(text, caminhonome);
                    break;
                case 3: // abre texto
                    System.out.println("Digite o caminho completo e o nome do arquivo a ser aberto:");
                    caminhonome = entra.next();
                    text = ls.abrir(caminhonome, 1);
                    System.out.println(text);
                    break;
                case 4: // inverte texto
                    System.out.println("Digite o caminho completo e o nome do arquivo a ser invertido:");
                    caminhonome = entra.next();
                    text = ls.abrir(caminhonome, 0);
                    System.out.println(text);
                    break;
                case 5: // fecha programa
                    i=5;
                    break;
                default:
                    System.out.println("Opção não Encontrada.");
                    break;
            }
        }
        System.exit(0);
    }
   
    public String abrir(String caminhonome, int abre){
        FileInputStream fis;
        String retorno=""; 
        try { 
            fis = new FileInputStream(caminhonome); 
            DataInputStream dis = new DataInputStream(fis);
            int c=0; 
            while (dis.available() != 0) {
                String line = dis.readLine();
                c++;
               
                if(abre==1){
                    if (line.equals(" P")){
                        retorno += "\n";
                    }
                    else{
                        retorno += line;
                    }
                }
                else{
                    if (line.equals(" P")){
                        retorno += "\n";
                    }
                    else{
                        retorno += process(line, c);
                    }                     
                }
            } 
        }
        catch (FileNotFoundException e) { 
            System.out.println("Arquivo não encontrado."); 
        }
        catch (IOException e) { 
            System.out.println("Erro ao utilizar o arquivo."); 
        }
        return retorno;
    }
    public void salvar(String line, String caminhonome){
        try {
            BufferedWriter out = new BufferedWriter(new FileWriter(caminhonome));
            out.write(line);
            out.close();
        }
        catch(IOException e){
            System.out.println("Erro ao salvar o arquivo.");
        }
   
        System.out.println("Arquivo sobreescrito com sucesso");
    }
   
    public String process(String line, int c){
        String text="";
        if(c%2==0){
            StringBuffer sb = new StringBuffer(line);
            text += sb.reverse() +"\n";
            return text;               
        }
        else{
            return line;
        }
    }
}

Aventura no Deserto

Essa aplicação foi desenvolvida durante a aula do professor Rafael, de Programação II, no SENAC.

É composta por duas classes, na ordem: Aplicacoes_no_Deserto e Aventura_no_Deserto.
A primeira classe é só um depósito de métodos.
A segunda classe, por sua vez, possui apenas o main, executando o programa.

O objetivo deste programa é gerar um jogo onde o jogador deve atravessar o deserto com o Veículo. São 10 unidades de distância entre o início e o fim da viagem, e o veículo só possui autonomia para 7 unidades.

Para completar o percurso, é necessário que o jogador deposite combustível no percurso, a fim de reabastecer quando necessário.

Primeira classe:
-----------------------------------------------------------------------------------------------

class Aplicacoes_no_Deserto {
    public int var[] = new int[15];
   
    /* Método para zerar o vetor público que guarda
    *  a quantidade de combustível nas posições do deserto
    */
    public void zera(){
        for(int w=15; w==0; w--){
            var[w]=0;
            System.out.println(var[w]);
        }
    }
   
    /* @see      -> Método contrutor do cenário
    *  @param  p -> recebe a posição indicada do veículo
    *  @param  c -> recebe o combustível que há no veículo
    *  @return a -> String com o cenário construído   
    */
    public String cenario(int p, int c){
         
          //String de construção
          String a ="";
         
        switch (p){
            case 0:
            a  = "  "+c+" |\\ \n";
            a += " ---|-| \n";
            a += "  O  O  \n";
            a += "-------------------------------------------------------------------------------------\n";
            a += "|Início|  "+var[1]+"   |  "+var[2]+"   |  "+var[3]+"   |  "+var[4]+"   |  "+var[5]+"   |  "+var[6]+"   |  "+var[7]+"   |  "+var[8]+"   |  "+var[9]+"   |  "+var[10]+"   | FIM  |\n";
            a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
            a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";   
            break;
            case 1:
            a  = "         "+c+" |\\ \n";
            a += "        ---|-| \n";
            a += "         O  O  \n";
            a += "-------------------------------------------------------------------------------------\n";
            a += "|Início|  "+var[1]+"   |  "+var[2]+"   |  "+var[3]+"   |  "+var[4]+"   |  "+var[5]+"   |  "+var[6]+"   |  "+var[7]+"   |  "+var[8]+"   |  "+var[9]+"   |  "+var[10]+"   | FIM  |\n";
            a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
            a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";               
            break;
            case 2:
            a  = "                "+c+" |\\ \n";
            a += "               ---|-| \n";
            a += "                O  O  \n";
            a += "-------------------------------------------------------------------------------------\n";
            a += "|Início|  "+var[1]+"   |  "+var[2]+"   |  "+var[3]+"   |  "+var[4]+"   |  "+var[5]+"   |  "+var[6]+"   |  "+var[7]+"   |  "+var[8]+"   |  "+var[9]+"   |  "+var[10]+"   | FIM  |\n";
            a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
            a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";               
            break;               
            case 3:
            a  = "                       "+c+" |\\ \n";
            a += "                      ---|-| \n";
            a += "                       O  O  \n";
            a += "-------------------------------------------------------------------------------------\n";
            a += "|Início|  "+var[1]+"   |  "+var[2]+"   |  "+var[3]+"   |  "+var[4]+"   |  "+var[5]+"   |  "+var[6]+"   |  "+var[7]+"   |  "+var[8]+"   |  "+var[9]+"   |  "+var[10]+"   | FIM  |\n";
            a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
            a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";               
            break;               
            case 4:
            a  = "                              "+c+" |\\ \n";
            a += "                             ---|-| \n";
            a += "                              O  O  \n";
            a += "-------------------------------------------------------------------------------------\n";
            a += "|Início|  "+var[1]+"   |  "+var[2]+"   |  "+var[3]+"   |  "+var[4]+"   |  "+var[5]+"   |  "+var[6]+"   |  "+var[7]+"   |  "+var[8]+"   |  "+var[9]+"   |  "+var[10]+"   | FIM  |\n";
            a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
            a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";               
            break;               
            case 5:
            a  = "                                     "+c+" |\\ \n";
            a += "                                    ---|-| \n";
            a += "                                     O  O  \n";
            a += "-------------------------------------------------------------------------------------\n";
            a += "|Início|  "+var[1]+"   |  "+var[2]+"   |  "+var[3]+"   |  "+var[4]+"   |  "+var[5]+"   |  "+var[6]+"   |  "+var[7]+"   |  "+var[8]+"   |  "+var[9]+"   |  "+var[10]+"   | FIM  |\n";
            a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
            a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";               
            break;               
            case 6:
            a  = "                                            "+c+" |\\ \n";
            a += "                                           ---|-| \n";
            a += "                                            O  O  \n";
            a += "-------------------------------------------------------------------------------------\n";
            a += "|Início|  "+var[1]+"   |  "+var[2]+"   |  "+var[3]+"   |  "+var[4]+"   |  "+var[5]+"   |  "+var[6]+"   |  "+var[7]+"   |  "+var[8]+"   |  "+var[9]+"   |  "+var[10]+"   | FIM  |\n";
            a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
            a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";               
            break;               
            case 7:
            a  = "                                                   "+c+" |\\ \n";
            a += "                                                  ---|-| \n";
            a += "                                                   O  O  \n";
            a += "-------------------------------------------------------------------------------------\n";
            a += "|Início|  "+var[1]+"   |  "+var[2]+"   |  "+var[3]+"   |  "+var[4]+"   |  "+var[5]+"   |  "+var[6]+"   |  "+var[7]+"   |  "+var[8]+"   |  "+var[9]+"   |  "+var[10]+"   | FIM  |\n";
            a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
            a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";               
            break;               
            case 8:
            a  = "                                                          "+c+" |\\ \n";
            a += "                                                         ---|-| \n";
            a += "                                                          O  O  \n";
            a += "-------------------------------------------------------------------------------------\n";
            a += "|Início|  "+var[1]+"   |  "+var[2]+"   |  "+var[3]+"   |  "+var[4]+"   |  "+var[5]+"   |  "+var[6]+"   |  "+var[7]+"   |  "+var[8]+"   |  "+var[9]+"   |  "+var[10]+"   | FIM  |\n";
            a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
            a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";               
            break;               
            case 9:
            a  = "                                                                 "+c+" |\\ \n";
            a += "                                                                ---|-| \n";
            a += "                                                                 O  O  \n";
            a += "-------------------------------------------------------------------------------------\n";
            a += "|Início|  "+var[1]+"   |  "+var[2]+"   |  "+var[3]+"   |  "+var[4]+"   |  "+var[5]+"   |  "+var[6]+"   |  "+var[7]+"   |  "+var[8]+"   |  "+var[9]+"   |  "+var[10]+"   | FIM  |\n";
            a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
            a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";               
            break;               
            case 10:
            a  = "                                                                        "+c+" |\\ \n";
            a += "                                                                       ---|-| \n";
            a += "                                                                        O  O  \n";
            a += "-------------------------------------------------------------------------------------\n";
            a += "|Início|  "+var[1]+"   |  "+var[2]+"   |  "+var[3]+"   |  "+var[4]+"   |  "+var[5]+"   |  "+var[6]+"   |  "+var[7]+"   |  "+var[8]+"   |  "+var[9]+"   |  "+var[10]+"   | FIM  |\n";
            a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
            a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";               
            break;               
            case 11:
            a  = "                                                                               "+c+" |\\ \n";
            a += "                                                                              ---|-| \n";
            a += "                                                                               O  O  \n";
            a += "-------------------------------------------------------------------------------------\n";
            a += "|Início|  "+var[1]+"   |  "+var[2]+"   |  "+var[3]+"   |  "+var[4]+"   |  "+var[5]+"   |  "+var[6]+"   |  "+var[7]+"   |  "+var[8]+"   |  "+var[9]+"   |  "+var[10]+"   | FIM  |\n";
            a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
            a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";               
            break;
        }
        return a;       
    }
   
    /* @see      -> Método para carregar cobustível em qualquer lugar no mapa.
    *  @param  p -> recebe a posição indicada do veículo
    *  @param  c -> recebe o combustível que há no veículo
    *  @return c -> int com a nova quantidade de combustível no veículo    
    */
    public int carregar(int p, int c){
        // se a posição não for o Início e estiver sem combustíveis previamente descarregados,
        // informa que não há combustível e retorna a mesma quantidade que existia antes.
        if(p!=0){
            if(var[p]==0){
                System.out.println("Não há combustível nesse ponto do Deserto! \n");
                return c;
            }
            // se a posição do deserto posuir combustível,
            // decrementa o combustível do local, aumenta do veículo
            // e retorna a nva quantidade de combustível.
            else{
                var[p]=var[p]-1;
                c=c+1;
                return c;
            }
        }
        // se for o início, carrega sempre o máximo (7)
        else{
            return 7;
        }
    }
   
    /*  @see      -> Método para descarregar cobustível em qualquer lugar do mapa.
    *   @param  c -> recebe o combustível que há no veículo
    *   @param  p -> recebe a posição indicada do veículo
    **  @return c -> int com a nova quantidade de combustível no veículo   
    */
    public int descarregar(int c, int p){
        // se for o início, não pode descarregar cobustível
        if(p==0){
            System.out.println("Você não pode descarregar combustível na cidade! \n");
            return c;
        }
        // no trajeto, só pode descarregar combustível se tiver algum para descarregar
        else{
            if(c>0){
                var[p]=var[p]+1;
                c=c-1;
                return c;
            }
            // se não tiver combustível para descarregar,
            // o sistema avisa e retorna a mesma quantidade que havia antes.
            else{
                System.out.println("Você não possui combustível para descarregar! \n");
                return c;
            }
        }       
    }

    /** @see       -> Método para calcular o consumo de combustivel durante o deslocamento.
    *   @param  p  -> recebe a posição indicada do veículo
    *   @param  pa -> recebe a posição anterior do veículo
    *   @param  c  -> recebe o combustível que há no veículo
    *   @return c  -> int com a nova quantidade de combustível no veículo
    **/
    public int deslocamento(int p, int pa, int c){
        int v = Math.abs(pa-p);
        while(Math.abs(v)!=0){
            c=c-1;
            v=v-1;
        }
        return c;
    }
       
    /** @see       -> Método para calcular as regras do jogo.
    *   @param  p  -> recebe a posição indicada do veículo
    *   @param  pa -> recebe a posição anterior do veículo
    *   @param  c  -> recebe o combustível que há no veículo
    *   @return r  -> 0 -> jogo prossegue
    *                 1 -> impede o deslocamento até o ponto inicado, mas o jogo prossegue
    *                 2 -> Veículo sem combustível e sem possibilidade de reabastecer. 
    ***/
     public int regras(int p, int pa, int c){
         
          // Veículo sem combustível durante o trajeto
          if(c==0){
             if(pa!=0){
                 if(var[p]==0){
                     System.out.println("Você ficou sem combustível! \n");
                     return 2;
                 }
             }           
         }
         // Veículo não pode se deslocar até o ponto indicado       
         if(Math.abs(pa-p)>c){
             System.out.println("Você não possui combustível suficiente para cobrir essa distância! \n");
             return 1;
         }
       
        // Se passou por todas as regras, está tudo ok e o jogo prossegue
         return 0;        
     }
}

-----------------------------------------------------------------------------------------------
Segunda classe:

-----------------------------------------------------------------------------------------------
 /**
 * @(#)Aventura_no_Deserto.java
 *
 * Aventura_no_Deserto application
 *
 * @author Arthur Tavares
 * @version 1.00 2010/8/28
 */

import java.util.Scanner;

public class Aventura_no_Deserto{

    // @see      -> Método para buscar as opções dos usuários e chamar os demais métodos do jogo.
    public static void main(String[] args) {
      
        // Instanciando variáveis literais:
        // a   -> variável para recebimento da tela de comando
        // aux -> auxiliar para tratamento de entradas do teclado
        String a="", aux="";
        // Instanciando variáveis inteiras:
        // p   -> variável para guardar a nova posição do veículo
        // pa  -> variável para guardar a antiga posição do veículo  
        // i   -> variável para comandar o laço de repetição básico do jogo
        // c   -> variável para guardar a quantidade de combustível do veículo
        // r   -> variável para guardar a resposta das regras do jogo      
        int p=0, pa=0, i=1, c=7, r=0;
      
        // objeto entra para utilizar os métodos da classe Scanner
        Scanner entra = new Scanner(System.in);
        // objeto AD para utilizar os métodos da classe Aventura_no_Deserto
        Aplicacoes_no_Deserto AD = new Aplicacoes_no_Deserto();  
        // Chama o método que zera as posições do vetor publico que guarda a quantidade de combustível nas posições  
        AD.zera();
      
        // construção da primeira Tela
        a  = "  "+c+" |\\ \n";
        a += " ---|-| \n";
        a += "  O  O  \n";
        a += "-------------------------------------------------------------------------------------\n";
        a += "|Início|  "+0+"   |  "+0+"   |  "+0+"   |  "+0+"   |  "+0+"   |  "+0+"   |  "+0+"   |  "+0+"   |  "+0+"   |  "+0+"   | FIM  |\n";
        a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
        a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";
          
        System.out.println(a);
      
        // laço básico do jogo, para que este só termine com a opção do usuário ou com o "Game Over"
        while(i!=0){
          
            System.out.println("Digite o número da posição ou a letra da ação desejada: \n");
            aux = entra.next();
          
            //transforma a variável String auxiliar em int, caso seja uma posição, para utilização em métodos.
            //caso não consiga, a posição é mantida como a última posição válida.
            try{
                p = Integer.parseInt(aux);
            }
            catch(Exception e){
                p=pa;
            }
            //valida a opção tomada pelo usuário seguindo as regras do jogo.
            r = AD.regras(p, pa, c);
            //se a resposta das regras do jogo for 2 (veículo sem combustível) sai do laço e o jogo acaba.
            if(r==2){
                i=0;
                break;
            }
            //se a resposta das regras do jogo for 0, a opção do usuário é válida e o jogo prossegue.          
            if(r==0){
                if(aux.equals("0")){
                    c = AD.deslocamento(p, pa, c);
                    pa= p;
                    a = AD.cenario(p, c);          
                    System.out.println(a);
                }
                if (aux.equals("1")){
                    c = AD.deslocamento(p, pa, c);
                    pa= p;
                    a = AD.cenario(p, c);          
                    System.out.println(a);
                }
                if(aux.equals("2")){
                    c = AD.deslocamento(p, pa, c);
                    pa= p;
                    a = AD.cenario(p, c);          
                    System.out.println(a);
                }
                if(aux.equals("3")){
                    c = AD.deslocamento(p, pa, c);
                    pa= p;
                    a = AD.cenario(p, c);          
                    System.out.println(a);
                }
                if(aux.equals("4")){
                    c = AD.deslocamento(p, pa, c);
                    pa= p;
                    a = AD.cenario(p, c);          
                    System.out.println(a);
                }
                if(aux.equals("5")){
                    c = AD.deslocamento(p, pa, c);
                    pa= p;
                    a = AD.cenario(p, c);          
                    System.out.println(a);
                }
                if(aux.equals("6")){
                    c = AD.deslocamento(p, pa, c);
                    pa= p;
                    a = AD.cenario(p, c);          
                    System.out.println(a);
                }
                if(aux.equals("7")){
                    c = AD.deslocamento(p, pa, c);
                    pa= p;
                    a = AD.cenario(p, c);          
                    System.out.println(a);
                }
                if(aux.equals("8")){
                    c = AD.deslocamento(p, pa, c);
                    pa= p;
                    a = AD.cenario(p, c);          
                    System.out.println(a);
                }
                if(aux.equals("9")){
                    c = AD.deslocamento(p, pa, c);
                    pa= p;
                    a = AD.cenario(p, c);          
                    System.out.println(a);
                }
                if(aux.equals("10")){
                    c = AD.deslocamento(p, pa, c);
                    pa= p;
                    a = AD.cenario(p, c);          
                    System.out.println(a);
                }
                if(aux.equals("11")){
                    c = AD.deslocamento(p, pa, c);
                    pa= p;
                    a = AD.cenario(p, c);          
                    System.out.println(a);
                }
                if(aux.equals("D")){
                    c = AD.descarregar(c, p);
                    a = AD.cenario(p, c);
                    System.out.println(a);
                }
                if(aux.equals("C")){
                    c = AD.carregar(p, c);
                    a = AD.cenario(p, c);
                    System.out.println(a);
                }
                if(aux.equals("S")){
                    i=0;
                }
            }
        }
        System.out.println("Obrigado por testar a Aventura no Deserto!");  
        System.exit(0);
    }
}