Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
MovimentiProdotti - Es1.cbl

Es1.cbl

Caricato da: Netarrow
Scarica il programma completo

  1. * Dato il file sequenziale Movimenti, contenente:
  2. * codice-prodotto, quantità e tipo-movimento (entrata, uscita);
  3. * e dato il file a indici Prodotti, contenente:
  4. * codice-prodotto (chiave primaria), descrizione, prezzo, scorta-minima
  5. *
  6. * Si chiede l'esecuzione dei seguenti punti:
  7. * 1) Visualizzare i dati degli articoli compresi fra due codici-prodotto specificati dall'utente
  8. * 2) Visualizzare l'elenco di tutti i prodotti con la relativa descrizione
  9. * 3) Visualizzare la giacenza in magazzino segnando i prodotti sottoscorta
  10. *
  11.        identification division.
  12.        program-id. Esercizio1.
  13.        author. Matteo "netarrow" Tomasulo.
  14.        date-written.  2-10-2007.
  15.        date-compiled. 2-10-2007.
  16.        
  17.        environment division.
  18.        input-output section.
  19.        file-control.
  20.            select Movimenti assign to disk
  21.            file status is movimenti-status.
  22.            
  23.            select Prodotti assign to disk
  24.                   organization is indexed
  25.                   access mode is dynamic
  26.                   record key is codice-prodotto
  27.                   file status is prodotti-status.
  28.          
  29.        data division.
  30.        file section.
  31.        
  32.        fd  Movimenti
  33.            value of file-id is "Movimenti.dat"
  34.            label record is standard.
  35.          
  36.        01  Movimento.
  37.            02  cod-prodotto    pic x(5).
  38.            02  qta             pic 999.
  39.            02  tipo-movimento  pic x.
  40.            
  41.        fd  Prodotti
  42.            value of file-id is "Prodotti.dat"
  43.            label record is standard.
  44.          
  45.        01  Prodotto.
  46.            02  codice-prodotto pic x(5).
  47.            02  descrizione     pic x(30).
  48.            02  prezzo          pic 9(6)V99.
  49.            02  scorta-minima   pic 999.
  50.            
  51.        working-storage section.
  52.      
  53.        77  movimenti-status    pic xx.
  54.        77  prodotti-status     pic xx.
  55.        77  operazione          pic 9.
  56.        77  codice-partenza     pic x(5).
  57.        77  codice-arrivo       pic x(5).
  58.        77  superato-limite     pic xx      value is "no".
  59.        77  movimenti-finiti    pic xx.
  60.        77  prodotti-finiti     pic xx.
  61.        77  cod-prodotto-bak    pic x(5).
  62.        77  giacenza-parziale   pic S999.
  63.        77  file-esistenti      pic x.
  64.        77  dev                 pic 9.
  65.        77  ancora              pic xx      value is "si".
  66.        
  67.        procedure division.
  68.        
  69.        begin.
  70.            display "I file esistono gia'?s/n"
  71.            accept file-esistenti.
  72.            
  73.            if file-esistenti = "n" then
  74.                         perform CreaFile
  75.            end-if.
  76.        
  77.            perform ShowMenu.
  78.            
  79.        ShowMenu.      
  80.            display " ".      
  81.            display "Scegliere l'operazione da fare: ".
  82.            display "1) Visualizza intervallo fra due codici".
  83.            display "2) Visualizza tutto l'elenco dei prodotti".
  84.            display "3) Visualizza la giacenza e indica le sottoscorte".
  85.            display "4) Esci".
  86.            accept operazione.
  87.            
  88.            evaluate operazione
  89.                     when 1          perform ShowInterval
  90.                     when 2      perform ShowAll
  91.                     when 3      perform ShowStock
  92.                     when 4      stop run
  93.                     when other  display "Scelta non valida"
  94.                                 perform ShowMenu
  95.            end-evaluate.
  96.            
  97.        CreaFile.
  98.            open output Prodotti.
  99.        
  100.            display " ".
  101.            display "-----------------------------------------".
  102.            display "|         Inserire i Prodotti            |".
  103.            display "-----------------------------------------".
  104.              
  105.            perform ScriviProdotti until ancora = "no".
  106.                                            
  107.            close Prodotti.  
  108.            
  109.            move "si" to ancora.                                      
  110.        
  111.            open output Movimenti.
  112.            move "si" to ancora.
  113.              
  114.            display " ".
  115.            display "-----------------------------------------".
  116.            display "|         Inserire i Movimenti          |".
  117.            display "-----------------------------------------".
  118.            
  119.            perform ScriviMovimenti until ancora = "no".
  120.                                            
  121.            close Movimenti.                              
  122.                  
  123.        ScriviMovimenti.
  124.            display " ".
  125.            display "Inserire il codice-prodotto: ".
  126.            accept cod-prodotto.
  127.            display "Inserire quantita':".
  128.            accept qta.
  129.            display "Inserire tipo movimento'".
  130.            accept tipo-movimento.
  131.              
  132.            write Movimento.
  133.          
  134.            display "Fare un altro inserimento?(si/no)".
  135.            accept ancora.
  136.  
  137.                      
  138.        ScriviProdotti.
  139.            display " ".
  140.            display "Inserire il codice-prodotto".
  141.            accept codice-prodotto.
  142.            display "Inserire descrizione".
  143.            accept descrizione.
  144.            display "Inserire prezzo".
  145.            accept prezzo.
  146.            display "Inserire scorta minima".
  147.            accept scorta-minima.
  148.            
  149.            write Prodotto
  150.                    invalid key
  151.                 display "Si e' verificato un errore in scrittura"
  152.                 stop 2
  153.            end-write.
  154.                    
  155.            display "Fare un altro inserimento?(si/no)".
  156.            accept ancora.
  157.        
  158.        LeggiMovimenti.
  159.            read Movimenti
  160.              at end
  161.               move "si" to movimenti-finiti
  162.              not at end
  163.               move "no" to movimenti-finiti
  164.            end-read.
  165.        
  166.        LeggiProdotti.
  167.            read Prodotti next record
  168.               at end
  169.                 move "si" to prodotti-finiti
  170.               not at end
  171.                 move "no" to prodotti-finiti
  172.            end-read.  
  173.            
  174.        ShowInterval.
  175.            open input Movimenti.
  176.            open input Prodotti.          
  177.            
  178.            perform LeggiMovimenti.
  179.            
  180.            display "Inserire il codice del prodotto da cui partire:".
  181.            accept codice-partenza.
  182.            display "Inserire il codice del prodotto a cui arrivare:".
  183.            accept codice-arrivo.          
  184.            perform until (superato-limite = "si")
  185.                     or   (movimenti-finiti = "si")
  186.                if cod-prodotto < codice-partenza then
  187.                   perform LeggiMovimenti
  188.                else
  189.                if cod-prodotto > codice-arrivo then
  190.                   move "si" to superato-limite
  191.                else
  192.                if cod-prodotto >= codice-partenza and
  193.                                <= codice-arrivo then
  194.                   move cod-prodotto to codice-prodotto
  195.                   read Prodotti
  196.                   invalid key
  197.                     display "Errore non ho trovato il codice-prodotto"
  198.                   not invalid key
  199.                   display Prodotto
  200.                perform LeggiMovimenti
  201.                end-if
  202.                end-if
  203.            end-perform.
  204.            close Movimenti.
  205.            close Prodotti.          
  206.            perform ShowMenu.            
  207.            
  208.        ShowAll.
  209.            open input Prodotti.
  210.            
  211.            perform LeggiProdotti.
  212.          
  213.            perform until prodotti-finiti = "si"
  214.                display codice-prodotto " " descrizione
  215.                perform LeggiProdotti
  216.            end-perform.
  217.            
  218.            close Prodotti.
  219.            
  220.            perform ShowMenu.
  221.            
  222.        ShowStock.
  223.            open input Movimenti.
  224.            open input Prodotti.
  225.            set dev to 0.
  226.                set giacenza-parziale to 0.
  227.                perform LeggiMovimenti.
  228.  
  229.            perform until movimenti-finiti = "si"
  230.                 if dev = 0 then
  231.                    set dev to 1
  232.                  else
  233.                    if cod-prodotto-bak <> cod-prodotto then
  234.                       perform Aggiorna
  235.                     end-if  
  236.                 end-if
  237.                 move cod-prodotto to cod-prodotto-bak
  238.                 if tipo-movimento = "e" then
  239.                    add qta to giacenza-parziale
  240.                 else
  241.                    subtract qta from giacenza-parziale
  242.                 end-if
  243.                 perform LeggiMovimenti
  244.                end-perform.
  245.            
  246.                perform Aggiorna.          
  247.  
  248.            close Movimenti.
  249.            close Prodotti.
  250.            
  251.            perform ShowMenu.
  252.  
  253.        Aggiorna.
  254.            move cod-prodotto to codice-prodotto.
  255.                read Prodotti
  256.                 invalid key display "Errore"
  257.                 not invalid key
  258.                  display "Giacenza " cod-prodotto-bak ": "
  259.                  giacenza-parziale
  260.                 if giacenza-parziale < scorta-minima then
  261.                  display cod-prodotto-bak " sotto scorta!"
  262.                 end-if
  263.                end-read.
  264.                set giacenza-parziale to 0.