用8086语言实现超市收银系统,商品名称固定为pen和book,要求商品最大件数为10,单价为整数。
时间: 2024-03-03 13:53:28 浏览: 20
以下是一个用8086汇编语言实现的简单超市收银系统,商品名称固定为pen和book,商品最大件数为10,单价为整数。
```
.model small
.stack 100h
.data
prompt1 db '请输入商品名(pen或book):$'
prompt2 db '请输入商品件数:$'
prompt3 db '请支付:$'
prompt4 db '找零:$'
pen_price db 5
book_price db 10
goods_count db ?
payment db ?
change db ?
total_price db ?
.code
mov ax, @data
mov ds, ax
; 获取商品名
mov ah, 9
lea dx, prompt1
int 21h
; 读取输入的字符串
mov ah, 0Ah
lea dx, goods_count
int 21h
; 将输入的字符串转换为商品件数
mov bl, goods_count+1
mov bh, 0
mov cx, 10
xor ax, ax
convert_loop:
mov al, goods_count+2[bx]
cmp al, 0Dh
je convert_exit
sub al, 30h
mul cx
add bx, 1
jmp convert_loop
convert_exit:
div cx
mov goods_count, al
; 根据商品名计算总价
cmp byte ptr goods_count, 'p'
je pen_selected
cmp byte ptr goods_count, 'b'
je book_selected
; 商品名错误
mov ah, 9
lea dx, prompt1
int 21h
jmp end_program
pen_selected:
mov al, pen_price
mul goods_count
mov total_price, al
jmp get_payment
book_selected:
mov al, book_price
mul goods_count
mov total_price, al
jmp get_payment
get_payment:
; 获取支付金额
mov ah, 9
lea dx, prompt3
int 21h
mov ah, 1
int 21h
sub al, 30h
mov payment, al
; 计算找零
mov al, payment
sub al, total_price
mov change, al
; 输出找零金额
mov ah, 9
lea dx, prompt4
int 21h
mov ah, 2
mov dl, change
add dl, 30h
int 21h
end_program:
mov ah, 4ch
int 21h
end
```
该程序通过 int 21h 中断调用来实现屏幕输入和输出,通过比较输入的商品名来计算总价,通过乘法运算来计算总价,通过减法运算来计算找零。由于使用了简单的命令行界面,所以程序比较简单,但可以满足基本的超市收银系统需求。程序中可以根据需要进行修改和扩展,例如添加商品列表、优惠活动等功能。