利用8086设计超市收银系统程序,输入购买的货物数目可以适量减少,譬如总数限为10件,系统 输入就可以用键盘数字0-9表示,屏幕显示收费项目名称可以用英 文或汉语拼音显示,如pen或gangbi,单价可简化为整数金额
时间: 2024-03-03 09:47:02 浏览: 20
以下是一个基于8086的简单超市收银系统程序示例,支持输入购买的货物数量和货物名称,限制最大数量为10件,支持英文和汉语拼音显示,单价为整数金额:
```assembly
; 8086超市收银系统程序
.MODEL SMALL
.STACK 100H
.DATA
MAX_ITEMS DB 10 ; 最大数量为10
ITEM_COUNT DB ? ; 购买的货物数量
ITEM_NAME DB 10, ?, 10 DUP ('$') ; 购买的货物名称,最多10个字符
ITEM_PRICE DW 0 ; 购买的货物单价,单位为分
MSG_PROMPT DB '请输入购买的货物数量(最多10件):$', 0
MSG_INVALID DB '无效的输入,请重新输入!$', 0
MSG_NAME_PROMPT DB '请输入购买的货物名称(最多10个字符):$', 0
MSG_PRICE_PROMPT DB '请输入购买的货物单价(单位为分):$', 0
MSG_TOTAL DB '总价为:%d 分$', 0
.CODE
MAIN PROC
MOV AX, @DATA ; 初始化数据段寄存器
MOV DS, AX
; 输入购买的货物数量
CALL INPUT_ITEM_COUNT
; 输入购买的货物名称
CALL INPUT_ITEM_NAME
; 输入购买的货物单价
CALL INPUT_ITEM_PRICE
; 计算总价并输出
CALL CALC_TOTAL_PRICE
; 结束程序
MOV AH, 4CH
INT 21H
MAIN ENDP
; 输入购买的货物数量
INPUT_ITEM_COUNT PROC
MOV DX, OFFSET MSG_PROMPT
MOV AH, 09H
INT 21H ; 显示提示消息
MOV AH, 01H ; 读取键盘输入
INPUT_ITEM_COUNT_LOOP:
INT 21H
CMP AL, 0DH ; 回车键
JE INPUT_ITEM_COUNT_DONE
CMP AL, '0'
JB INPUT_ITEM_COUNT_LOOP
CMP AL, '9'
JA INPUT_ITEM_COUNT_LOOP
SUB AL, '0'
MOV ITEM_COUNT, AL ; 保存输入的数量
INC DX
MOV AH, 02H
MOV DL, AL
INT 21H ; 回显输入的数字
JMP INPUT_ITEM_COUNT_LOOP
INPUT_ITEM_COUNT_DONE:
INC DX
MOV AH, 02H
MOV DL, 0DH
INT 21H ; 换行
RET
INPUT_ITEM_COUNT ENDP
; 输入购买的货物名称
INPUT_ITEM_NAME PROC
MOV DX, OFFSET MSG_NAME_PROMPT
MOV AH, 09H
INT 21H ; 显示提示消息
MOV SI, OFFSET ITEM_NAME + 2 ; 货物名称的偏移量
MOV CX, 10 ; 最多输入10个字符
INPUT_ITEM_NAME_LOOP:
MOV AH, 01H ; 读取键盘输入
INT 21H
CMP AL, 0DH ; 回车键
JE INPUT_ITEM_NAME_DONE
CMP AL, ' '
JB INPUT_ITEM_NAME_LOOP
CMP AL, 'z'
JA INPUT_ITEM_NAME_LOOP
CMP AL, 'Z'
JB INPUT_ITEM_NAME_SAVE
CMP AL, 'a'
JA INPUT_ITEM_NAME_LOOP
SUB AL, 20H ; 将小写字母转换为大写字母
INPUT_ITEM_NAME_SAVE:
MOV [SI], AL ; 保存输入的字符
INC SI
LOOP INPUT_ITEM_NAME_LOOP
INPUT_ITEM_NAME_DONE:
MOV BYTE PTR [SI], 0 ; 结束字符串
INC DX
MOV AH, 09H
INT 21H ; 换行
RET
INPUT_ITEM_NAME ENDP
; 输入购买的货物单价
INPUT_ITEM_PRICE PROC
MOV DX, OFFSET MSG_PRICE_PROMPT
MOV AH, 09H
INT 21H ; 显示提示消息
MOV AH, 01H ; 读取键盘输入
INPUT_ITEM_PRICE_LOOP:
INT 21H
CMP AL, 0DH ; 回车键
JE INPUT_ITEM_PRICE_DONE
CMP AL, '0'
JB INPUT_ITEM_PRICE_LOOP
CMP AL, '9'
JA INPUT_ITEM_PRICE_LOOP
SUB AL, '0'
MOV ITEM_PRICE, AX ; 保存输入的单价
SHL AX, 1 ; 将单价乘以2,因为输入的是分
JMP INPUT_ITEM_PRICE_LOOP
INPUT_ITEM_PRICE_DONE:
INC DX
MOV AH, 02H
MOV DL, 0DH
INT 21H ; 换行
RET
INPUT_ITEM_PRICE ENDP
; 计算总价并输出
CALC_TOTAL_PRICE PROC
MOV AX, ITEM_PRICE ; AX = 单价 * 2
MOV BX, ITEM_COUNT ; BX = 数量
MUL BX ; AX = 单价 * 2 * 数量
SHR AX, 1 ; AX = 单价 * 数量
MOV DX, OFFSET MSG_TOTAL
MOV AH, 09H
INT 21H ; 显示提示消息
MOV AX, DX
MOV DX, 0
MOV CX, 10 ; 除以10,逐位输出
CALC_TOTAL_PRICE_LOOP:
DIV CX
ADD DL, '0'
MOV AH, 02H
INT 21H ; 输出余数
CMP AX, 0
JNE CALC_TOTAL_PRICE_LOOP
RET
CALC_TOTAL_PRICE ENDP
END MAIN
```
上述程序实现了一个简单的超市收银系统,支持输入购买的货物数量、名称、单价,计算总价并输出。需要注意的是,该程序仅仅是一个示例,实际应用中还需要考虑更多的因素,如数据存储、界面设计、异常处理等。