一、概要
作为《学生食堂信息管理系统》项目开发组的程序员,按要求完成:
数据库的创建;
数据表的创建;
数据的操作。
二、实施步骤和内容
学生食堂信息管理系统的 E-R 图如图 2.16 所示,逻辑数据模型如图 2.17 所示,物理数据模型如图 2.18 所示,数据表字段名定义见表 2.8。请按以下设计完成数据库创建、数据表创建和数据操作任务:
三、代码
-- 2.1、创建数据库CardDB
CREATE DATABASE CardDB
USE CardDB
-- 2.2、创建表
CREATE TABLE IF NOT EXISTS T_card(
Card_id CHAR(50) NOT NULL,
Student_id CHAR(50) NOT NULL,
Student_name CHAR(50) NOT NULL,
Curr_money DECIMAL(8,2),
Register_date DATETIME,
PRIMARY KEY(Card_id)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
SELECT * FROM T_card
CREATE TABLE IF NOT EXISTS T_add_money(
Add_id CHAR(50) NOT NULL,
T_c_Card_id CHAR(50) NOT NULL,
Student_name CHAR(50) NOT NULL,
The_money DECIMAL(8,2),
Register_date DATETIME,
PRIMARY KEY(Add_id)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
SELECT * FROM T_add_money
CREATE TABLE IF NOT EXISTS T_consume_money(
Consume_id CHAR(50) NOT NULL,
T_c_Card_id CHAR(50) NOT NULL,
Student_name CHAR(50) NOT NULL,
The_money DECIMAL(8,2),
Register_date DATETIME,
PRIMARY KEY(Consume_id)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
SELECT * FROM T_consume_money
-- 2.3、查询所有饭卡信息
SELECT * FROM T_card
-- 2.4、查询所有饭卡的余额之和
SELECT SUM(Curr_money) AS '所有饭卡余额' FROM T_card
-- 2.5、-查询某日所有饭卡的充值金额之和(比如 2011 年 6 月 1 号总共充值金额是多少元)
SELECT SUM(The_money) FROM T_add_money WHERE
CONVERT(DATE_FORMAT(Register_date,'%Y-%m-%d'),CHAR)='2022-10-10'
SELECT CONVERT(DATE_FORMAT(Register_date,'%Y-%m-%d'),CHAR) FROM T_add_money
SELECT DATE_FORMAT(Register_date,'%y-%m-%d') FROM T_add_money
-- 错误的 select date_format(Register_date,'YYYY mm dd') from T_add_money
-- 2.6、查询某饭卡在 2011 年 3 月到 2011 年 6 月之间的消费金额
SELECT SUM(The_money) FROM T_consume_money WHERE
YEAR(Register_date)=2022 AND
MONTH(Register_date) BETWEEN 10 AND 12 AND T_c_Card_id=001
SELECT YEAR(Register_date) FROM T_consume_money
SELECT DATE_FORMAT(Register_date,'%Y') FROM T_consume_money
SELECT DATE_FORMAT('2022-10-10','%Y')
-- 2.7、存储过程
DELIMITER $$
CREATE PROCEDURE IsAbleToCosume(IN cardId INT,IN thisCosume DECIMAL(8,2))
BEGIN
DECLARE curMoney INT;
DECLARE result CHAR(10);
SET curMoney=(SELECT Curr_money FROM T_card WHERE Card_id=cardId);
IF(curMoney >= thisCosume) THEN
SET result='true';
ELSE
SET result='false';
END IF;
END $$
DELIMITER ;
CALL IsAbleToCosume(001,100)
SELECT @result
DELIMITER $$
CREATE PROCEDURE IsAbleToCosume2(IN cardId INT,IN thisCosume DECIMAL(8,2),OUT result CHAR(10))
BEGIN
DECLARE curMoney INT;
SET curMoney=(SELECT Curr_money FROM T_card WHERE Card_id=cardId);
IF(curMoney >= thisCosume) THEN
SET result='true';
ELSE
SET result='false';
END IF;
END $$
DELIMITER ;
SET @temp='massimo'
CALL IsAbleToCosume2(001,1000,@temp)
SELECT @temp
SELECT * FROM T_card