使用存储函数或存储过程设计一个加减乘除四则运算程序; 用户可多次输入运算符opr和两个数字n1、n2求得运算结果; 当opr=‘1且n2=0时,程序结束; 要求程序的输出格式:n1 opr n2 等于xx.
时间: 2024-10-15 14:19:28 浏览: 32
一个简单的日历代码 (For: FF1+ IE5+ Opr7+)测试
在MySQL中,我们可以创建一个存储函数来实现这个功能,因为它更适合直接返回值而不是执行复杂的控制流。以下是创建存储函数的示例:
```sql
DELIMITER //
CREATE FUNCTION Calculator(n1 DECIMAL(10,2), op VARCHAR(1), n2 DECIMAL(10,2))
RETURNS DECIMAL(10,2)
BEGIN
DECLARE result DECIMAL(10,2);
CASE op
WHEN '+', '-' THEN
SET result = n1 OP n2;
WHEN '*', '/' WHEN n2 > 0 THEN
SET result = n1 OP n2;
ELSE
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Invalid operator or division by zero';
END CASE;
RETURN result;
END //
DELIMITER ;
```
在这个函数中,我们使用CASE语句根据运算符执行加法、减法、乘法或除法运算。如果用户试图除以零,函数会抛出错误。
为了满足用户多次输入的需求并保持输出格式,你可以创建一个循环,让用户不断输入直到他们选择退出。这通常需要一个外部应用或程序来完成,因为MySQL本身并不提供交互式的用户界面。外部程序可以像下面这样调用函数:
```sql
WHILE 1 DO
SET @input = CONCAT('请输入n1, opr, n2 (例如:1.5 + 2.3): ');
SET @query = CONCAT('SELECT ', LPAD(Calculator(str_to_real(SUBSTRING_INDEX(@input, ' ', 1)), 10, 2), 10, 2), ' ', SUBSTRING_INDEX(@input, ' ', -1), ' = ', LPAD(Calculator(str_to_real(SUBSTRING_INDEX(@input, ' ', -2)), 10, 2), 10, 2));
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
IF SUBSTRING_INDEX(@input, ' ', -2) = '1' AND SUBSTRING_INDEX(@input, ' ', -3) = '0' THEN
LEAVE;
END IF;
END WHILE;
```
这个外部循环允许用户反复输入,直到他们指定`1`和`0`作为结束标志。
阅读全文