• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Guest tsenart

[Resolvido] gGest (Gestão de Saldo)

16 mensagens neste tópico

Olá pessoal.

Fiz esta aplicação de gestão de saldo em interface gráfica.

Já tinha feito isto em C mas nao era gráfico.

Aqui vai em anexo...

EDIT: Novo arquivo. Passwords já são cifradas.

EDIT: Novo arquivo. FormatException tratada.

EDIT: Minor bugs tratados e código postado.

/***********************************************************************************************
* Name-> gGest                                                                                *
* Author-> Tomás Senart a.k.a. S@m0t                                                          *
* Description-> Programa de gestão de saldo com interface gráfica.                            *
* Date-> 04/02/07                                                                             *
* Copyright-> Podem ver o código e distribui-lo sobre a minha autoria. Não podem alterá-lo.   *
***********************************************************************************************/





using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace GEST
{
    public partial class Form1 : Form
    {
        public string n_conta;
        
        public Form1()
        {
            InitializeComponent();
        }

        private void label_sair_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }


        private void label_login_Click(object sender, EventArgs e)
        {
            if (this.label_estado.Text == "Logged off")
            {
                if (File.Exists(this.text_n_conta.Text) && (this.text_n_conta.Text != String.Empty))
                {
                    StreamReader filer = new StreamReader(this.text_n_conta.Text);
                    if (this.text_password.Text.GetHashCode() == int.Parse(filer.ReadLine()))
                    {
                        this.n_conta = this.text_n_conta.Text;
                        this.label_estado.ForeColor = Color.Cyan;
                        this.label_estado.Text = "Logged in";
                        this.label_login.Text = "Log off";
                        this.text_n_conta.Clear();
                        this.text_password.Clear();
                        this.richTextBox1.Clear();
                    }

                    else
                        this.text_password.Clear();

                    filer.Close();
                }

                else if (this.text_n_conta.Text != string.Empty)
                {
                    DialogResult res = MessageBox.Show("Este número de conta não existe.\nCriar?", "Nova conta", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                    switch (res)
                    {
                        case DialogResult.Yes:
                                if (this.text_password.Text.Length != 0)
                                {
                                    StreamWriter filew = new StreamWriter(this.text_n_conta.Text);
                                    StreamWriter file_ms = new StreamWriter(this.text_n_conta.Text + "ms");
                                    this.n_conta = this.text_n_conta.Text;
                                    int tmp_pass_hash = this.text_password.Text.GetHashCode();
                                    filew.WriteLine(tmp_pass_hash);
                                    tmp_pass_hash = 0;
                                    file_ms.WriteLine(0);
                                    file_ms.WriteLine("");
                                    this.label_estado.ForeColor = Color.Cyan;
                                    this.label_estado.Text = "Logged in";
                                    this.label_login.Text = "Log off";
                                    this.text_n_conta.Clear();
                                    this.text_password.Clear();
                                    this.richTextBox1.Clear();
                                    filew.Close();
                                    file_ms.Close();
                                }
                                else
                                    MessageBox.Show("Password inválida.");

                                break;


                       case DialogResult.No:
                            this.text_n_conta.Clear();
                            this.text_password.Clear();
                            break;
                       
                       

                    }
                }

            }

            else
            {
                this.txt_insaldo.Text = "0";
                this.label_login.Text = "Login";
                this.label_estado.Text = "Logged off";
                this.label_estado.ForeColor = Color.Red;
                this.text_n_conta.Clear();
                this.text_password.Clear();
                this.richTextBox1.Clear();
            }
        }

        private void label_creditar_Click(object sender, EventArgs e)
        {
            if (this.label_estado.Text == "Logged in")
            {
                if (txt_insaldo.Text == "0" || txt_insaldo.Text.Contains("."))
                {
                    if(txt_insaldo.Text.Contains("."))
                    {
                        richTextBox1.Text = "Valor não aceite.\n\nDica: Utilize a virgula e não um ponto antes das casas decimais.";
                        return;
                
                    }   
                    
                    return;
                }
                StreamReader filer = new StreamReader(this.n_conta + "ms");
                double tmp_saldo = new double();
                double tmp_valor = new double();
                string tmp_movs;
                tmp_saldo = double.Parse(filer.ReadLine());
                tmp_movs = filer.ReadToEnd();
                this.richTextBox1.Clear();
                try
                {
                    tmp_valor = double.Parse(this.txt_insaldo.Text);
                }

                catch
                {
                    this.txt_insaldo.Text = "0";
                }
                if (this.txt_insaldo.Text == "0") return;
                tmp_saldo += tmp_valor;
                this.richTextBox1.Text = "Novo saldo-> €" + tmp_saldo.ToString();
                filer.Close();
                StreamWriter filew = new StreamWriter(this.n_conta + "ms");
                filew.WriteLine(tmp_saldo);
                filew.WriteLine(tmp_movs + "Tipo de movimento: Crédito\nData: {0}   Valor: {1}\n", DateTime.Now, tmp_valor);
                filew.Close();
                this.txt_insaldo.Text = "0";
            }

            else
            {
                MessageBox.Show("Nenhuma conta está ligada.", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.txt_insaldo.Text = "0";
            }


        }

        private void label_consultar_s_Click(object sender, EventArgs e)
        {
            if (this.label_estado.Text == "Logged in")
            {
                StreamReader file = new StreamReader(this.n_conta + "ms");
                this.richTextBox1.Text = "Saldo actual-> €" + file.ReadLine();
                file.Close();
            }

            else
                MessageBox.Show("Nenhuma conta está ligada.", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            
        }

        private void label_debitar_Click(object sender, EventArgs e)
        {
            if (this.label_estado.Text == "Logged in")
            {
                if (txt_insaldo.Text == "0" || txt_insaldo.Text.Contains("."))
                {
                    if(txt_insaldo.Text.Contains("."))
                    {
                        richTextBox1.Text = "Valor não aceite.\n\nDica: Utilize a virgula e não um ponto antes das casas decimais.";
                        return;
                
                    }   
                    
                    return;
                }

                StreamReader filer = new StreamReader(this.n_conta + "ms");
                double tmp_saldo = new double();
                double tmp_valor = new double();
                string tmp_movs;
                tmp_saldo = double.Parse(filer.ReadLine());
                tmp_movs = filer.ReadToEnd();
                this.richTextBox1.Clear();
                if (this.txt_insaldo.Text == "0") return; ;
                try
                {
                    tmp_valor = double.Parse(this.txt_insaldo.Text);
                }

                catch
                {
                    this.txt_insaldo.Text = "0";
                }
                if (this.txt_insaldo.Text == "0") return;
                tmp_saldo -= tmp_valor;
                this.richTextBox1.Text = "Novo saldo-> €" + tmp_saldo.ToString();
                filer.Close();
                StreamWriter filew = new StreamWriter(this.n_conta + "ms");
                filew.WriteLine(tmp_saldo);
                filew.WriteLine(tmp_movs + "Tipo de movimento: Débito\nData: {0}   Valor: {1}\n", DateTime.Now, tmp_valor);
                filew.Close();
                this.txt_insaldo.Text = "0";

            }

            else
            {
                MessageBox.Show("Nenhuma conta está ligada.", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.txt_insaldo.Text = "0";
            }
        }

        private void label_consultar_m_Click(object sender, EventArgs e)
        {
            if (this.label_estado.Text == "Logged in")
            {
                StreamReader filer = new StreamReader(this.n_conta + "ms");
                this.richTextBox1.Clear();
                filer.ReadLine();
                filer.ReadLine();
                this.richTextBox1.Text = String.Format("\t\tMovimentos\n\n{0}", filer.ReadToEnd());
                filer.Close();
            }

            else
                MessageBox.Show("Nenhuma conta está ligada.", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);

        }

        private void label_limpar_c_Click(object sender, EventArgs e)
        {
            if (this.label_estado.Text == "Logged in")
            {
                DialogResult ans = MessageBox.Show("Tem a certeza que quer apagar os dados da sua conta?", "Apagar?", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                switch (ans)
                {
                    case DialogResult.Yes:
                        File.Delete(this.n_conta + "ms");
                        StreamWriter filew = new StreamWriter(this.n_conta + "ms");
                        filew.WriteLine(0);
                        filew.WriteLine();
                        filew.Close();
                        this.richTextBox1.Text = "Saldo e movimentos apagados!";
                        break;
                    case DialogResult.No:
                        break;
                }
            }

            else
                MessageBox.Show("Nenhuma conta está ligada.", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);


        }

        private void label_apagar_c_Click(object sender, EventArgs e)
        {
            if (this.label_estado.Text == "Logged in")
            {
                DialogResult ans = MessageBox.Show("Tem a certeza que quer apagar a sua conta?", "Apagar?", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                switch (ans)
                {
                    case DialogResult.Yes:
                        File.Delete(this.n_conta + "ms");
                        File.Delete(this.n_conta);
                        this.richTextBox1.Text = "Conta apagada!";
                        this.label_login_Click(sender, e);
                        break;
                    
                    case DialogResult.No:
                        break;
                }
            }

            else
                MessageBox.Show("Nenhuma conta está ligada.", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);

        }

        private void text_n_conta_MouseHover(object sender, EventArgs e)
        {
            if (this.label_estado.Text == "Logged off")
                this.richTextBox1.Text = "Se não tiver uma conta insira um número de conta e uma password.\nUma nova conta será criada...";
            else
                return;
        }

     }

  
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Está bom, apenas não gosto daquele aviso típico de quando o Windows dá um erro. :confused:

De resto acho que os ficheiros criados quando fazes uma nova conta podias organizar isso numa pasta para não ficar com 1000 ficheiros se criares 500 contas. E isso é outro problema, acho que não precisas de criar só um ficheiro só com o nome e a password, podias meter isso no outro. Se quiseres implementar isso podias também cifrar a password, para ninguém a poder ver.

Fica...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

So tem um "bug", mesmo quando o valor é 0, e se carregarmos num dos botoes, de creditar ou debitar, ele poe isso nos movimentos de conta

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Afixa aí uns screenshots e dá mais info sobre o projecto.

Que toolkit usaste, se já está compilado, em que plataformas é que isso corre, afixa tambem uns screenshots, etc.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só agora reparei, isto havia de estar em pessoais e não no armazém de código. Ou então havias de ter postado só o código aqui...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ups.... Nao sabia que era assim.

Já corrigi aquele bug que o karva denunciou... Já está no site o novo arquivo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Afixa aí uns screenshots e dá mais info sobre o projecto.

Que toolkit usaste, se já está compilado, em que plataformas é que isso corre, afixa tambem uns screenshots, etc.

Usei o Microsoft Visual C# Express para fazer este programa. Corre em Windows XP que eu saiba. E sim já está compilado.

Screenshots não tenho nenhuma ferramenta para os tirar...

Hasta

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Afixa aí uns screenshots e dá mais info sobre o projecto.

Que toolkit usaste, se já está compilado, em que plataformas é que isso corre, afixa tambem uns screenshots, etc.

Usei o Microsoft Visual C# Express para fazer este programa. Corre em Windows XP que eu saiba. E sim já está compilado.

Screenshots não tenho nenhuma ferramenta para os tirar...

Hasta

Para que serve a tecla Print Screen e o Paint? :biggrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Man não sei usar essa tecla. Explicas-me.

Outra coisa.

Hipnoted, tens razão sobre os dois ficheiros em vez de um mas o C# que eu saiba não permite ler e escrever em ficheiros de texto no mesmo stream... Por isso quando queria alterar dados no ficheiro nao podia fazer file.ReadLine();.... Ou seja não podia andar linhas para a frente.

Se alguém souber como fazer isso que me diga.

Sobre a password cifrada...How?

Hasta

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então faz só um ficheiro com todas as passwords... :confused:

A cifra foi uma ideia, por se quisesses implementar e assim ficavas a saber mais umas coisitas... ;) Assim como tens, se tivesses de fazer um software para alguém não podias enviar, tinhas de cifrar os dados. Qualquer um podia abrir o ficheiro e ver a password. Google it sobre o tema que vais ver que há muitas coisas sobre isso... :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Man não sei usar essa tecla. Explicas-me.

Pressionas a tecla Print Screen. De seguida vais ao Paint, menu Editar -> Colar. Se quiseres cortas a imagem, depois gravas. :confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Cool!

Que toolkit é que isto usa?

já agora... que complicação para calcular um hash md5.... que tal

"blablabla uma cool string" | md5sum

na shell? mais prático nao?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Novo arquivo.

Passwords já são cifradas. Para o comum usuario e muito dificil adivinhar a password por tras daquele numero... :confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora