19269
UTILITAIRE -> Diverstypeins
© Amstrad Computer User (1991)
 
 
 
Shopping Master
cpc
 
 
screenshot
screenshot
screenshot
screenshot
screenshot
screenshot
 

screenshot
CTM644 Colour Monitor
screenshot
GT65 Green Monitor
 

Mots Clefs

INFOS

- CATEGORIES -
UTILITAIRE -> Divers               
- DESCRIPTION -
After last month's (sic) little confusion, here's a little something Mr Kennedy's put together to help you out before you set off for the supermarkets. Just enter the amount of money you've got to spend, check off each item you need and this excellent routine will allow you to print out an itemised shopping list, prices and all, as well as showing you if you've got a little something left over for some goodies on top. Try it, it's not bad at all.

- STAFF -
Paru sous forme de listing dans le magazine Amstrad Computer User Issue 79 : June 1991.
Auteur : Alan KENNEDY

- BUGS -
* Si des articles sont ajoutés à la liste d'achats et l'utilisateur revient au menu et sélectionne l'option pour permettre d'ajouter de nouveau des articles, au lieu d'ajouter les articles à la liste existante, le programme écrase les articles existants, en commençant à partir du premier article de la liste. Ce bug peut être corrigé en modifiant la ligne 110 :

AVANT :
110 FOR d=1 TO 50

APRES :
110 FOR d=y+1 TO 50


* Le même problème se produit lorsqu'une liste d'achats précédemment sauvegardée est chargée. Ce bug peut être corrigé en modifiant la ligne 355 :
AVANT :
355 CLOSEIN

APRES :
355 CLOSEIN:FOR d=1 TO 50:IF it$(d)="" THEN y=d-1 ELSE NEXT:y=50


* Lors de la saisie d'articles dans la liste d'achats, si un prix négatif est saisi pour un article, le programme l'accepte. Ce bug peut être corrigé en modifiant la ligne 114 :
AVANT :
114 CLEAR INPUT:PEN 1:LOCATE 2,8:INPUT " ITEM PRICE ";ip(d):a=a-ip(d):y=y+1:IF a=0 THEN 107:CLS:FOR t=1 TO 38:LOCATE 1+(t),1:PEN 2:PRINT "#":NEXT:FOR t=1 TO 38:LOCATE 1+(t),25:PEN 2:PRINT "#":NEXT

APRES :
114 CLEAR INPUT:PEN 1:LOCATE 2,8:INPUT " ITEM PRICE ";ip(d):IF ip(d)<0 THEN 112 ELSE a=a-ip(d):y=y+1:IF a=0 THEN 107:CLS:FOR t=1 TO 38:LOCATE 1+(t),1:PEN 2:PRINT "#":NEXT:FOR t=1 TO 38:LOCATE 1+(t),25:PEN 2:PRINT "#":NEXT


* Lors de l'affichage des détails d'une liste d'achats, s'il contient entre 11 et 20 articles, le programme se termine avec l'erreur "Syntax error in 280" car il y a un mot-clé THEN supplémentaire dans cette ligne. Ce bug peut être corrigé en l'effaçant.

* Lors de l'affichage des détails d'une liste d'achats, s'il y a plus de 20 articles dans la liste, le montant total s'affiche à la place où devrait figurer le sous-total des articles 21 à 30. S'il y a 30 articles ou moins, la ligne où le montant total devrait être affiché est vide, et au lieu de revenir au menu, le programme tentera d'afficher les articles 31 à 50, même s'ils sont vides (ce qui échouera en raison d'un autre bug expliqué ci-dessous). Ces bugs peuvent être corrigés en modifiant la ligne 286 et en déplaçant quelques commandes dans une nouvelle ligne.

* Lors de l'affichage des détails d'une liste d'achats, s'il contient entre 31 et 40 articles, le programme se termine avec l'erreur "Syntax error in 294" car il manque un deux-points dans cette ligne. Ce bug peut être corrigé en ajoutant le deux-points manquant.

* Une fois le bug ci-dessus lié au deux-points manquant corrigé, d'autres bugs se produisent : le montant total s'affiche à la place où devrait figurer le sous-total des articles 31 à 40, le programme n'attend pas qu'une touche soit appuyée s'il y a 40 articles ou moins dans la liste, et s'il y a plus de 40 articles dans la liste, le programme revient au menu au lieu d'afficher les articles 41 à 50. Ces bugs peuvent être corrigés en modifiant la ligne 294 et en déplaçant quelques commandes à la ligne 293.

* Lors de l'affichage des détails d'une liste d'achats, le montant total est mal formaté si la liste contient entre 1 et 20 articles (p.ex. 5,00 £ s'affiche comme « 5 » ; 6,20 £ s'affiche comme « 6,2 »). Ce problème peut être corrigé en ajoutant des commandes USING aux lignes 255 et 280.

* Lorsqu'il est demandé à l'utilisateur d'indiquer s'il souhaite quitter le programme, si une valeur autre que Y ou N est saisie, le programme se termine tout de même. Ce bug peut être corrigé en modifiant la ligne 650 :
AVANT :
650 IF l$="N" OR l$="n" THEN 10

APRES :
650 IF l$="N" OR l$="n" THEN 10 ELSE 620


* Lors de l'impression d'une liste d'achats vers l'imprimante, si la liste contient entre 1 et 49 articles, le programme imprime la liste sur l'imprimante, mais affiche également le message "<<No Data To Print To Printer>>" à l'écran. Ce bug peut être corrigé en modifiant la ligne 740.

* Lors de l'impression d'une liste d'achats vers l'imprimante, le montant total s'affiche comme étant égal à zéro. Ce bug peut être corrigé en modifiant les lignes 730 et 750 afin que la variable P6 soit calculée correctement.

* Lors de l'impression d'une liste d'achats vers l'imprimante, si la liste contient 50 articles, le montant total n'est pas imprimé au bas de la liste et aucun message n'est affiché pour demander à l'utilisateur d'appuyer sur une touche pour revenir au menu. Ce bug peut être corrigé en modifiant les lignes 730 à 750 et en réarranger le code dans ces lignes.

Une fois tous les bugs ci-dessus corrigés, les lignes modifiées devraient ressembler à ceci :
AVANT :
255 IF it$(11)="" THEN PEN 1:LOCATE 10,24:PRINT "TOTAL AMOUNT ";P1:PEN 2:LOCATE 10,20:PRINT " <<PRESS ANY KEY>> ":CALL &BB18:GOTO 10: ELSE PEN 2:LOCATE 10,20:PRINT " <<PRESS ANY KEY>> ":CALL &BB18:GOTO 260
280 IF it$(21)="" THEN PEN 1:LOCATE 10,24:PRINT "TOTAL AMOUNT ";P1+P2: THEN PEN 2:LOCATE 10,20:PRINT " <<PRESS ANY KEY>> ":CALL &BB18:GOTO 10: ELSE PEN 2:LOCATE 10,20:PRINT " <<PRESS A KEY>> ":CALL &BB18:CLS:GOTO 281
286 LOCATE 12,22:PRINT"SUB TOTAL ";USING "£###.##";P1+P2+P3:LOCATE 10,20:PRINT " <<PRESS A KEY>> ":CALL &BB18:CLS:LOCATE 5,4:PRINT " ITEM NAME ":LOCATE 20,4:PRINT " ITEM PRICE "
293 LOCATE 12,22:PRINT"SUB TOTAL";USING "£###.##";P1+P2+P3+P4
294 IF it$(41)="" THEN PEN 1:LOCATE 10,24:PRINT "TOTAL AMOUNT";P1+P2+P3PEN 1:LOCATE 10,24:PRINT "TOTAL AMOUNT ";P1+P2+P3+P4: ELSE 299:LOCATE 10,20:PRINT "":CALL &BB18:CLS:LOCATE 5,4:PRINT " ITEM NAME ":LOCATE 20,4:PRINT " ITEM PRICE":GOTO 295
730 FOR d=1 TO 50
740 IF it$(d)="" THEN PRINT #8,TAB(1);"_________________________":PRINT #8,TAB(12) " TOTAL AMOUNT > ";USING "£###.##";P6:PEN 1:LOCATE 4,8:PRINT "<<No Data To Print To Printer>>":PEN 2:LOCATE 12,20:PRINT "<<Press any key>>":CALL &BB18:GOTO 10 ELSE 750
750 PRINT #8,d,it$(d)," ";USING "£###.##";ip(d):NEXT


APRES :
255 IF it$(11)="" THEN PEN 1:LOCATE 10,24:PRINT "TOTAL AMOUNT ";USING "£###.##";P1:PEN 2:LOCATE 10,20:PRINT " <<PRESS ANY KEY>> ":CALL &BB18:GOTO 10: ELSE PEN 2:LOCATE 10,20:PRINT " <<PRESS A KEY>> ":CALL &BB18:GOTO 260
280 IF it$(21)="" THEN PEN 1:LOCATE 10,24:PRINT "TOTAL AMOUNT ";USING "£###.##";P1+P2: PEN 2:LOCATE 10,20:PRINT " <<PRESS ANY KEY>> ":CALL &BB18:GOTO 10: ELSE PEN 2:LOCATE 10,20:PRINT " <<PRESS ANY KEY>> ":CALL &BB18:CLS:GOTO 281
286 LOCATE 12,22:PRINT"SUB TOTAL ";USING "£###.##";P3:IF it$(31)="" THEN LOCATE 10,24:PRINT "TOTAL AMOUNT ";USING "£###.##";P1+P2+P3
287 LOCATE 10,20:PRINT " <<PRESS A KEY>> ":CALL &BB18:IF it$(31)="" THEN 10 ELSE CLS:LOCATE 5,4:PRINT " ITEM NAME ":LOCATE 20,4:PRINT " ITEM PRICE "
293 LOCATE 12,22:PRINT"SUB TOTAL";USING "£###.##";P4:IF it$(41)="" THEN PEN 1:LOCATE 10,24:PRINT "TOTAL AMOUNT ";USING "£###.##";P1+P2+P3+P4
294 LOCATE 10,20:PRINT "":CALL &BB18:IF it$(41)="" THEN 10 ELSE CLS:LOCATE 5,4:PRINT " ITEM NAME ":LOCATE 20,4:PRINT " ITEM PRICE":GOTO 295
730 P6=0:FOR d=1 TO y
740 PRINT #8,d,it$(d)," ";USING "£###.##";ip(d):P6=P6+ip(d):NEXT
750 PRINT #8,TAB(1);"_________________________":PRINT #8,TAB(12) " TOTAL AMOUNT > ";USING "£###.##";P6:PEN 2:LOCATE 12,20:PRINT "<<Press any key>>":CALL &BB18:GOTO 10


* Le programme ne fonctionne qu'avec du BASIC 1.1 parce qu'il utilise des commandes CLEAR INPUT, mais il est possible de le modifier afin de faire fonctionner avec du BASIC 1.0 (suivant la correction des autres bugs ci-dessus) :
AVANT :
112 CLEAR INPUT:PEN 1:LOCATE 2,6:INPUT" ITEM NAME ";it$(d)
114 CLEAR INPUT:PEN 1:LOCATE 2,8:INPUT " ITEM PRICE ";ip(d):IF ip(d)<0 THEN 112 ELSE a=a-ip(d):y=y+1:IF a=0 THEN 107:CLS:FOR t=1 TO 38:LOCATE 1+(t),1:PEN 2:PRINT "#":NEXT:FOR t=1 TO 38:LOCATE 1+(t),25:PEN 2:PRINT "#":NEXT


APRES :
112 WHILE INKEY$<>"":WEND:PEN 1:LOCATE 2,6:INPUT" ITEM NAME ";it$(d)
114 WHILE INKEY$<>"":WEND:PEN 1:LOCATE 2,8:INPUT " ITEM PRICE ";ip(d):IF ip(d)<0 THEN 112 ELSE a=a-ip(d):y=y+1:IF a=0 THEN 107:CLS:FOR t=1 TO 38:LOCATE 1+(t),1:PEN 2:PRINT "#":NEXT:FOR t=1 TO 38:LOCATE 1+(t),25:PEN 2:PRINT "#":NEXT

 

Goto Top
CPC-POWER/CPCSOFTS, programmation par Kukulcan © 2007-2025 tous droits réservés.
Reproduction sans autorisation interdite. Tous les titres utilisés appartiennent à leurs propriétaires respectifs.
Hébergement Web, Mail et serveurs de jeux haute performance