×
Ir ao conteúdo
  • Cadastre-se

C crud função modificar projeto c


Posts recomendados

 

Olá rapaziada, preciso de uma ajuda. estou programando para um projeto, e so preciso finalizar a parte de alterar, so que to tendo muita dificuldade.

preciso alterar no .txt uma linha especifica, tipo: Nome ou idade

preciso de alguma forma que va dentro do switch

 

 

 

 

 

 

 

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <locale.h>


int main(){
    
    FILE *lista_cliente;
    FILE *lista_produtos;
    FILE *lista_transacoes;
    FILE *lista_vendas;
    
    int num, num2;
    
    
system("COLOR 71");
setlocale(LC_ALL, "Portuguese");
//////////////////////////////// CLIENTE //////////////////////////////////
        
        
     while(num!=4){
         system("cls");
         printf("\t\t\tLOJA HOLISTER\n\n\n");
         printf("1-CLIENTE\n2-PRODUTO\n3-COMPRA/VENDA\n");
         printf("\t\t\tQUAL OPÇÃO O SENHOR DESEJA? ");
        scanf("%d", &num);
    
         switch(num){
             case 1:
             system("cls");
             printf("1-CRIAR UM CLIENTE\n2-BUSCAR UM CLIENTE NA LISTA\n3-ATUALIZAR UM CLIENTE\n4-DELETAR UM CLIENTE");
             scanf("%d", &num2);
             
             switch(num2){
                 case 1:
                     system("cls");
                     printf("\t\tCLIENTE\n\n");
                     lista_cliente = fopen("Lista_Cliente.txt", "a");
                     
                     struct dados_cliente{
                         char nome[50];
                         char idade[50];
                         char cpf[50];
                     };
                     
                     struct dados_cliente cliente;
                     
                     printf("NOME DO CLIENTE: ");
                     scanf("%s", &cliente.nome);
                
                     
                     printf("\nIDADE: ");
                     scanf("%s", &cliente.idade);
                     getchar();
                    
                     printf("\nCPF:  ");
                     scanf("%s", &cliente.cpf);
                     
                     
                     fprintf(lista_cliente, "%s\n %s\n %s  ", cliente.nome, cliente.idade, cliente.cpf);
                     fclose(lista_cliente);
                     
                     system("pause");
                     
                     break;
                     
                     
                     case 2:
                         system("cls");
                         printf("\t\tEXIBINDO CADASTRO...\n");
                         lista_cliente = fopen ("Lista_Cliente.txt", "r");
                         
                         
                         while(fscanf(lista_cliente, "%s%s%s", cliente.nome, cliente.idade, cliente.cpf)!= -1){
                             printf("NOME DO CLIENTE: %s\nIDADE: %s\nCPF: %s\n", cliente.nome, cliente.idade, cliente.cpf);
                             system("Pause");
                             getchar();
                             
                         }
                         
                         
                         fclose(lista_cliente);
                         break;
                         
                    case 3:
                        system("cls");
                    
                        
                       fclose(lista_cliente);

                        break;
                    case 4:
                        system("cls");
                        int op;
                        printf("DESEJA REALMENTE EXCLUIR TUDO? \n1 - EXCLUIR TUDO\n 2 - NÃO EXCLUIR");
                        scanf("%d", &op);
                        if(op == 1){
                            struct midia;
                            lista_cliente = fopen("Lista_Cliente.txt", "w");
                            printf("TODOS DADOS FORAM EXCLUIDOS...\n");
                            fclose(lista_cliente);
                            getchar();    
                            
                        }
                        
                        break;
                        
                        /////////////////////////////// PRODUTO /////////////////////////////////////////
                        
                break;
             }
             
            break;
                case 2:
                    system("cls");
                    printf("1 - CRIAR UM PRODUTO\n");
                    printf("2 - BUSCAR UM PRODUTO\n");
                    printf("3 - ATUALIZAR UM PRODUTO\n");
                    printf("4 - DELETAR UM PRODUTO\n");
                    scanf("%d", &num2);
                    
                    switch(num2){
                        case 1:
                            system("cls");
                            printf("\tPRODUTO...\n");
                            lista_produtos = fopen("Lista_Produto.txt", "a");
                            
                            struct dados_produtos{
                                char produtoD[50];
                                char codigoD[50];
                            };
                            
                            struct dados_produtos produtos;
                            
                            printf("\nNOME DO PRODUTO: ");
                            scanf("%s", &produtos.produtoD);
                            
                            printf("\nCODIGO DO PRODUTO: ");
                            scanf("%s", &produtos.codigoD);
                            
                            fprintf(lista_produtos, "%s\n%s\n", produtos.produtoD, produtos.codigoD);
                            fclose(lista_produtos);
                    break;    
                    
                    break;
                    case 2:
                        system("cls");
                        printf("\tEXIBINDO CADASTRO...\n");
                        lista_produtos = fopen("Lista_Produto.txt", "r");
                        
                        while(fscanf(lista_produtos, "%s\n%s\n", produtos.produtoD, produtos.codigoD)!= -1){
                            printf("NOME DO PRODUTO: %s\nCODIGO DO PRODUTO: %s\n", produtos.produtoD, produtos.codigoD);
                            system("pause");
                        }
                        
                        fclose(lista_produtos);
                        
                        break;
                        break;
                        
                    case 3:
                        system("cls");
                
                        break;
                        
                        
                        
                    case 4:
                    system("cls"); 
                    int op2;
                    printf("DESEJA REALMENTE EXCLUIR TUDO?\n1 - EXCLUIR TUDO\n2 - NÃO EXCLUIR");
                    scanf("%d", &op2);
                    if(op2 == 1){
                        struct midia;
                        lista_produtos = fopen("Lista_Produto.txt", "w");
                        printf("TODOS DADOS FORAM EXCLUIDOS...");
                        fclose(lista_produtos);
                    }
                    
                    break;
                    }
                    break;
                    break;
                    //////////////////////////////////////// COMPRA/VENDAS ////////////////////
                    case 3:
                        system("cls");
                        printf("ESCOLHA:\n1- COMPRA\n2 - VENDA");
                        scanf("%d", &num2);
                        
                        switch(num2){
                            case 1:
                                system("cls");
                                printf("COMPRA...\n");
                                printf("1 - CRIAR UMA COMPRA\n2 - BUSCAR UMA COMPRA NA LISTA\n3 - MODIFICAR UMA COMPRA\n4 - DELETAR UMA COMPRA");
                                scanf("%d", &num2);
                                
                                
                                switch(num2){
                                    case 1:
                                        system("cls");
                                        printf("\tCOMPRA...\n");
                                        lista_transacoes = fopen("Lista_Transacoes.txt", "a");
                                        
                                        struct dados_compras{
                                            char modeloC[50];
                                            char unidadeC[50];
                                            char pagamentoC[50];
                                        };
                                        
                                        struct dados_compras compras;
                                        
                                        printf("MODELO DO PRODUTO: ");
                                        scanf("%s", &compras.modeloC);
                                        
                                        printf("QUANTAS UNIDADES DESEJA: ");
                                        scanf("%s", &compras.unidadeC);
                                        
                                        printf("FORMA DE PAGAMENTO: ");
                                        scanf("%s", &compras.pagamentoC);
                                        
                                        fprintf(lista_transacoes, "%s %s %s", compras.modeloC, compras.unidadeC, compras.pagamentoC);
                                        fclose(lista_transacoes);
                                        
                                        break;
                                        
                                        
                                    case 2:
                                        system("cls");
                                        printf("\tEXIBINDO COMPRAS...\n");
                                        lista_transacoes = fopen("Lista_Transacoes.txt", "r");
                                        
                                        while(fscanf(lista_transacoes, "%s%s%s", compras.modeloC, compras.unidadeC, compras.pagamentoC)!= -1){
                                            printf("MODELO DO PRODUTO: %s\nQUANTAS UNIDADES DESEJA: %s\nFORMA DE PAGAMENTO: %s\n", compras.modeloC, compras.unidadeC, compras.pagamentoC);
                                            system("pause");
                                        }
                                        
                                        fclose(lista_transacoes);
                                        
                                        break;
                                        
                                        
                                    //case 3:
                                    
                                    case 4:
                                        system("cls");
                                        int op3;
                                        printf("DESEJA REALMENTE EXCLUIR TUDO? 1 - EXCLUIR TUDO 2 - NÃO EXCLUIR");
                                        scanf("%d", &op3);
                                        if(op3 == 1){
                                            struct midia;
                                            lista_transacoes = fopen("Lista_Transacoes.txt", "w");
                                            printf("TODOS DADOS FORAM EXCLUIDOS...\n");
                                            system("pause");
                                            fclose(lista_transacoes);
                                            
                                        }
                                        
                                        break;
                                    
                                }
                        break;
                                   case 2:
                                       system("cls");
                                       printf("\tVENDAS...\n");
                                       printf("1 - CRIAR UMA VENDA\n2 - BUSCAR UMA VENDA NA LISTA\n3 - MODIFICAR UMA VENDA\n4 - DELETAR UMA VENDA\n");
                                       scanf("%d", &num2);
                                       
                                       switch(num2){
                                           case 1:
                                               system("cls");
                                               printf("\tVENDAS...\n");
                                               
                                               lista_vendas = fopen("Lista_Vendas.txt", "a");
                                               
                                               struct dados_vendas{
                                                   char nome[50];
                                                   char modeloV[50];
                                                   char unidadesV[50];
                                                   char pagamentoV[50];
                                               };
                                               
                                               struct dados_vendas vendas;
                                               
                                               printf("SEU NOME: ");
                                               scanf("%s", &vendas.nome);
                                               
                                               printf("MODELO: ");
                                               scanf("%s", &vendas.modeloV);
                                               
                                               printf("UNIDADES A VENDER: ");
                                               scanf("%s", &vendas.unidadesV);
                                               
                                               printf("FORMAS DE PAGAMENTO: ");
                                               scanf("%s", &vendas.pagamentoV);
                                               
                                               fprintf(lista_vendas, "%s\n%s\n%s\n%s\n", vendas.nome, vendas.modeloV, vendas.unidadesV, vendas.pagamentoV);
                                               fclose(lista_vendas);
                                               
                                               break;
                                               
                                        case 2:
                                            system("cls");
                                            printf("EXIBINDO VENDAS...");
                                            lista_vendas = fopen("Lista_Vendas.txt", "r");
                                            
                                            while(fscanf(lista_vendas, "%s\n%s\n%s\n%s", vendas.nome, vendas.modeloV, vendas.unidadesV, vendas.pagamentoV)!= -1){
                                                printf("SEU NOME: %s\nMODELO: %s\nUNIDADES A VENDER: %s\nFORMAS DE PAGAMENTO: %s\n", vendas.nome, vendas.modeloV, vendas.unidadesV, vendas.pagamentoV);
                                                system("pause");
                                            }
                                            fclose(lista_vendas);
                                            
                                            break;
                                            
                                            
                                        //case 3:    
                                        
                                        case 4:
                                            system("cls");
                                            int op4;
                                            printf("DESEJA REALMENTE EXCLUIR TODOS DADOS? 1 - EXCLUIR TUDO 2 - NÃO EXCLUIR");
                                            scanf("%d", &op4);
                                            if(op4 == 1){
                                                struct midia;
                                                lista_vendas = fopen("Lista_Vendas.txt", "w");
                                                printf("TODOS DADOS FORAM EXCLUIDOS...");
                                                system("pause");
                                                fclose(lista_vendas);
                                            }
                                            
                                            break;
                                       }
                                       break;
                        }
                        
                        
                 }
                
                    
                
                               }
                            
                                
                    }
        
                    
    
        
 
       
     
     

    
    
    
    
    
    
    
    
    
    
    <>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Gabriel213412 Poste o enunciado e utilize o botão code para postar o código.

 

Já pensou em refazer novamente e tentar fazer de outro modo?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Gabriel213412 Não tá ruim, só está meio desorganizado.

no caso de editar só uma linha. você pode fazer outro arquivo com a linha nova já editada pegando tudo do arquivo anterior.

depois você apaga o arquivo velho é renomeia o arquivo novo para o nome do arquivo velho.

 

Se você tiver replit entra na sala

https://replit.com/join/reyknuezzm-kgin

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

3 horas atrás, Gabriel213412 disse:

preciso alterar no .txt uma linha especifica, tipo: Nome ou idade

preciso de alguma forma que va dentro do switch

 

Seria muito mais simples

  • acessar o arquivo em modo binário e calcular a posição no disco em que precisa alterar, ou
  • usar uma estrutura de dados e carregar os dados para a memória, no todo ou em parte. Num programa de estudante simplesmente carregue tudo. No início verifique se já tem dados e carregue pra memória. No final mude a extensão do arquivo para algo como .bak. E salve os dados com o nome original.

Seu programa não está bom. Tem quase todos os problemas comuns. E recortar e colar uma série de menus iguais dentro de um loop imenso que incorposa o programa todo não vai ajudar nadinha na hora de testar isso, como está vendo.

 

Mais palpites: navegar por menus em um programa de 500 linhas não acrescenta quase nada. Nem esses 4 ponteiros globais para arquivos. Estruture os dados ANTES de escrever o programa. Escrever assim só atrasa, apesar de ser o modo comum de escrever, ao menos pelo que vemos nos forums e escolas;

 

Tire essa conio.h daí. Isso era antigo nos anos ´80. Não é possível que se precise disso ainda, 40 anos depois, portado do sw da Apple nos tempos do Apple II, depois portado para o sw da Borland que vinha em dois disketes de 5.25"  😉  

 

E seu programa não tem uma única função. Só dificulta muito as coisas.

  • use funções e argumentos
  • programe em torno dos dados
  • não misture entrada e saída com o código. Só complica pra você mesmo.
  • Nunca escreva um programa interativo. Mais problema. Coloque isso DEPOIS.

 

USE o botão code como explicado no primeiro post do forum. 

 

Veja a diferença

 

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <locale.h>

int main() {

  FILE *lista_cliente;
  FILE *lista_produtos;
  FILE *lista_transacoes;
  FILE *lista_vendas;

  int num, num2;

  system("COLOR 71");
  setlocale(LC_ALL, "Portuguese");
  //////////////////////////////// CLIENTE //////////////////////////////////

  while (num != 4) {
    system("cls");
    printf("\t\t\tLOJA HOLISTER\n\n\n");
    printf("1-CLIENTE\n2-PRODUTO\n3-COMPRA/VENDA\n");
    printf("\t\t\tQUAL OPÇÃO O SENHOR DESEJA? ");
    scanf("%d", &num);

    switch (num) {
    case 1:
      system("cls");
      printf("1-CRIAR UM CLIENTE\n2-BUSCAR UM CLIENTE NA LISTA\n3-ATUALIZAR UM "
             "CLIENTE\n4-DELETAR UM CLIENTE");
      scanf("%d", &num2);

      switch (num2) {
      case 1:
        system("cls");
        printf("\t\tCLIENTE\n\n");
        lista_cliente = fopen("Lista_Cliente.txt", "a");

        struct dados_cliente {
          char nome[50];
          char idade[50];
          char cpf[50];
        };

        struct dados_cliente cliente;

        printf("NOME DO CLIENTE: ");
        scanf("%s", &cliente.nome);

        printf("\nIDADE: ");
        scanf("%s", &cliente.idade);
        getchar();

        printf("\nCPF:  ");
        scanf("%s", &cliente.cpf);

        fprintf(lista_cliente, "%s\n %s\n %s  ", cliente.nome, cliente.idade,
                cliente.cpf);
        fclose(lista_cliente);

        system("pause");

        break;

      case 2:
        system("cls");
        printf("\t\tEXIBINDO CADASTRO...\n");
        lista_cliente = fopen("Lista_Cliente.txt", "r");

        while (fscanf(lista_cliente, "%s%s%s", cliente.nome, cliente.idade,
                      cliente.cpf) != -1) {
          printf("NOME DO CLIENTE: %s\nIDADE: %s\nCPF: %s\n", cliente.nome,
                 cliente.idade, cliente.cpf);
          system("Pause");
          getchar();
        }

        fclose(lista_cliente);
        break;

      case 3:
        system("cls");

        fclose(lista_cliente);

        break;
      case 4:
        system("cls");
        int op;
        printf("DESEJA REALMENTE EXCLUIR TUDO? \n1 - EXCLUIR TUDO\n 2 - NÃO "
               "EXCLUIR");
        scanf("%d", &op);
        if (op == 1) {
          struct midia;
          lista_cliente = fopen("Lista_Cliente.txt", "w");
          printf("TODOS DADOS FORAM EXCLUIDOS...\n");
          fclose(lista_cliente);
          getchar();
        }

        break;

        /////////////////////////////// PRODUTO
        ////////////////////////////////////////////

        break;
      }

      break;
    case 2:
      system("cls");
      printf("1 - CRIAR UM PRODUTO\n");
      printf("2 - BUSCAR UM PRODUTO\n");
      printf("3 - ATUALIZAR UM PRODUTO\n");
      printf("4 - DELETAR UM PRODUTO\n");
      scanf("%d", &num2);

      switch (num2) {
      case 1:
        system("cls");
        printf("\tPRODUTO...\n");
        lista_produtos = fopen("Lista_Produto.txt", "a");

        struct dados_produtos {
          char produtoD[50];
          char codigoD[50];
        };

        struct dados_produtos produtos;

        printf("\nNOME DO PRODUTO: ");
        scanf("%s", &produtos.produtoD);

        printf("\nCODIGO DO PRODUTO: ");
        scanf("%s", &produtos.codigoD);

        fprintf(lista_produtos, "%s\n%s\n", produtos.produtoD,
                produtos.codigoD);
        fclose(lista_produtos);
        break;

        break;
      case 2:
        system("cls");
        printf("\tEXIBINDO CADASTRO...\n");
        lista_produtos = fopen("Lista_Produto.txt", "r");

        while (fscanf(lista_produtos, "%s\n%s\n", produtos.produtoD,
                      produtos.codigoD) != -1) {
          printf("NOME DO PRODUTO: %s\nCODIGO DO PRODUTO: %s\n",
                 produtos.produtoD, produtos.codigoD);
          system("pause");
        }

        fclose(lista_produtos);

        break;
        break;

      case 3:
        system("cls");

        break;

      case 4:
        system("cls");
        int op2;
        printf("DESEJA REALMENTE EXCLUIR TUDO?\n1 - EXCLUIR TUDO\n2 - NÃO "
               "EXCLUIR");
        scanf("%d", &op2);
        if (op2 == 1) {
          struct midia;
          lista_produtos = fopen("Lista_Produto.txt", "w");
          printf("TODOS DADOS FORAM EXCLUIDOS...");
          fclose(lista_produtos);
        }

        break;
      }
      break;
      break;
    //////////////////////////////////////// COMPRA/VENDAS ////////////////////
    case 3:
      system("cls");
      printf("ESCOLHA:\n1- COMPRA\n2 - VENDA");
      scanf("%d", &num2);

      switch (num2) {
      case 1:
        system("cls");
        printf("COMPRA...\n");
        printf("1 - CRIAR UMA COMPRA\n2 - BUSCAR UMA COMPRA NA LISTA\n3 - "
               "MODIFICAR UMA COMPRA\n4 - DELETAR UMA COMPRA");
        scanf("%d", &num2);

        switch (num2) {
        case 1:
          system("cls");
          printf("\tCOMPRA...\n");
          lista_transacoes = fopen("Lista_Transacoes.txt", "a");

          struct dados_compras {
            char modeloC[50];
            char unidadeC[50];
            char pagamentoC[50];
          };

          struct dados_compras compras;

          printf("MODELO DO PRODUTO: ");
          scanf("%s", &compras.modeloC);

          printf("QUANTAS UNIDADES DESEJA: ");
          scanf("%s", &compras.unidadeC);

          printf("FORMA DE PAGAMENTO: ");
          scanf("%s", &compras.pagamentoC);

          fprintf(lista_transacoes, "%s %s %s", compras.modeloC,
                  compras.unidadeC, compras.pagamentoC);
          fclose(lista_transacoes);

          break;

        case 2:
          system("cls");
          printf("\tEXIBINDO COMPRAS...\n");
          lista_transacoes = fopen("Lista_Transacoes.txt", "r");

          while (fscanf(lista_transacoes, "%s%s%s", compras.modeloC,
                        compras.unidadeC, compras.pagamentoC) != -1) {
            printf("MODELO DO PRODUTO: %s\nQUANTAS UNIDADES DESEJA: %s\nFORMA "
                   "DE PAGAMENTO: %s\n",
                   compras.modeloC, compras.unidadeC, compras.pagamentoC);
            system("pause");
          }

          fclose(lista_transacoes);

          break;

        // case 3:

        case 4:
          system("cls");
          int op3;
          printf("DESEJA REALMENTE EXCLUIR TUDO? 1 - EXCLUIR TUDO 2 - NÃO "
                 "EXCLUIR");
          scanf("%d", &op3);
          if (op3 == 1) {
            struct midia;
            lista_transacoes = fopen("Lista_Transacoes.txt", "w");
            printf("TODOS DADOS FORAM EXCLUIDOS...\n");
            system("pause");
            fclose(lista_transacoes);
          }

          break;
        }
        break;
      case 2:
        system("cls");
        printf("\tVENDAS...\n");
        printf("1 - CRIAR UMA VENDA\n2 - BUSCAR UMA VENDA NA LISTA\n3 - "
               "MODIFICAR UMA VENDA\n4 - DELETAR UMA VENDA\n");
        scanf("%d", &num2);

        switch (num2) {
        case 1:
          system("cls");
          printf("\tVENDAS...\n");

          lista_vendas = fopen("Lista_Vendas.txt", "a");

          struct dados_vendas {
            char nome[50];
            char modeloV[50];
            char unidadesV[50];
            char pagamentoV[50];
          };

          struct dados_vendas vendas;

          printf("SEU NOME: ");
          scanf("%s", &vendas.nome);

          printf("MODELO: ");
          scanf("%s", &vendas.modeloV);

          printf("UNIDADES A VENDER: ");
          scanf("%s", &vendas.unidadesV);

          printf("FORMAS DE PAGAMENTO: ");
          scanf("%s", &vendas.pagamentoV);

          fprintf(lista_vendas, "%s\n%s\n%s\n%s\n", vendas.nome, vendas.modeloV,
                  vendas.unidadesV, vendas.pagamentoV);
          fclose(lista_vendas);

          break;

        case 2:
          system("cls");
          printf("EXIBINDO VENDAS...");
          lista_vendas = fopen("Lista_Vendas.txt", "r");

          while (fscanf(lista_vendas, "%s\n%s\n%s\n%s", vendas.nome,
                        vendas.modeloV, vendas.unidadesV,
                        vendas.pagamentoV) != -1) {
            printf("SEU NOME: %s\nMODELO: %s\nUNIDADES A VENDER: %s\nFORMAS DE "
                   "PAGAMENTO: %s\n",
                   vendas.nome, vendas.modeloV, vendas.unidadesV,
                   vendas.pagamentoV);
            system("pause");
          }
          fclose(lista_vendas);

          break;

        // case 3:

        case 4:
          system("cls");
          int op4;
          printf("DESEJA REALMENTE EXCLUIR TODOS DADOS? 1 - EXCLUIR TUDO 2 - "
                 "NÃO EXCLUIR");
          scanf("%d", &op4);
          if (op4 == 1) {
            struct midia;
            lista_vendas = fopen("Lista_Vendas.txt", "w");
            printf("TODOS DADOS FORAM EXCLUIDOS...");
            system("pause");
            fclose(lista_vendas);
          }

          break;
        }
        break;
      }
    }
  }
}

 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!