自助餐管理系统(数据库课设)

1.课设要求描述

语义如下:某公司为了提高职工的福利待遇,规定每个员工每天可以在职工食堂用餐两次,可以中午用餐一次,下午用餐一次;也可以集中到中午或下午一次用餐两次。月底进行核算,如果用餐次数不足,餐费不退还职工。公司根据实际的用餐次数支付食堂餐费。

要求如下:

●创建一个能满足上述要求的数据库;

●定义视图查询2005年1月份没有用过餐的员工信息;

●创建存储过程统计每个员工指定月份的用餐次数;

●创建存储过程统计指定月 份公司应支付给食堂的费用;

●建立数据库相关表之间的参照完整性约束。

2.制作思路及基础讲解

此项目主要是用于完成大二下半学期的数据库课设,随手记录。技术面大二下之前只学过Java,MySQL/SQLServer。所以此项目没有前端界面,只通过命令行的形式来操作该系统,制作思路:首先是数据库作为存储数据的地方,编写根据课设要求编写好对应的建表语句和存储过程,视图,触发器等。然后编写好对应系统的Java代码,最后通过JDBC将Java代码与数据库连接起来。

  部分学生可能学的比较浅,不理解mysql,sqlserver,java,c等一堆名词之间的含义。之前有同学找我做过这类似的课设。问的问题都比较抽象,例如用mysql做一个系统之类的。在此简单说一下我对于这些的理解,mysql,sqlserver都是数据库的一种,只不过是外国的所以都是用英文表示,大部分上课不听的同学看到这一堆英文都会比较懵,其实只需简单把数据库(mysql,SQLServer)理解成存储数据的地方,而java,c等语言是用来编写系统逻辑功能的代码。当然在数据库中的存储过程或者触发器什么的,这些功能也能在代码编程语言中通过特定的逻辑实现类似的功能,只不过我们在数据库中写好的话,免去了Java中代码的编写量,并且查询时速度会更快。

3.使用工具及语言详解

 不同的学校要求不同,有的是sqlserver,有的是mysql,但其实这两者的区别在我看来区别不大,大部分的语句格式都是一样的,所以我选择了我熟悉的一种,mysql来进行编写。在语言方面,我大一的时候学过c,但是当时没有认真听,后来也慢慢都忘了,大二时学了Java,并且之后又系统性的学了一遍,所以选择来用Java语言编写。对于编译器我使用的是IDEA,版本随意,这个不影响,但需要注意IDEA不是免费的,可以去试用30天,也可以自行网上找方法安装破解版。数据库可视化工具使用的是Navicat,这个工具同样也不是免费的,但提供14天试用期,有长期需求也需要各位自行找破解版。

PS:这里又提到两个新名词,IDEA和Navicat,这不是编程语言,而是工具的名字,大家需要慢慢熟悉这些名词,简单来说就是他能让你的编程之路变得更顺畅,提供了可视化的界面,不需要一直在黑窗口中输入代码。

4.数据库建表代码

-- 创建员工表
CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    Name VARCHAR(100),
    Department VARCHAR(100),
    Position VARCHAR(100)
);

-- 创建用餐记录表
CREATE TABLE MealRecords (
    RecordID INT PRIMARY KEY,
    EmployeeID INT,
    Date DATE,
    MealTime ENUM('Midday', 'Afternoon'),
    MealCount INT,
    FOREIGN KEY (EmployeeID) REFERENCES Employees(EmployeeID)
);

-- 创建食堂信息表
CREATE TABLE canteencosts (
    CanteenID INT PRIMARY KEY,
    CanteenName VARCHAR(100),
    Location VARCHAR(100),
    Capacity INT
);

-- 创建视图查询2005年1月份没有用过餐的员工信息

CREATE VIEW EmployeesWithoutMealsIn2005January AS
SELECT e.EmployeeID, e.Name, e.Department, e.Position
FROM Employees e
LEFT JOIN MealRecords m ON e.EmployeeID = m.EmployeeID AND YEAR(m.Date) = 2005 AND MONTH(m.Date) = 1
WHERE m.RecordID IS NULL;

-- 创建存储过程统计每个员工指定年月的用餐次数;

CREATE PROCEDURE `CalculateCanteenCosts`(IN targetMonth INT, IN targetYear INT)
BEGIN
    DECLARE totalCost DECIMAL(10, 2);

    SELECT SUM(MR.Times * CC.CostPerMeal) INTO totalCost
    FROM MealRecords MR
    JOIN CanteenCosts CC ON MR.MealTime = CC.MealType
    WHERE MONTH(MR.Date) = targetMonth AND YEAR(MR.Date) = targetYear;

    SELECT totalCost AS TotalCost;
END

-- 创建存储过程计算统计指定年月每位员工的用餐次数。
CREATE PROCEDURE `CountEmployeeMeals`(IN targetMonth INT, IN targetYear INT)
BEGIN
    SELECT E.EmployeeID, E.Name, E.Department, COUNT(MR.RecordID) AS MealCount
    FROM Employees E
    LEFT JOIN MealRecords MR ON E.EmployeeID = MR.EmployeeID
    WHERE MONTH(MR.Date) = targetMonth AND YEAR(MR.Date) = targetYear
    GROUP BY E.EmployeeID, E.Name, E.Department;
END

5.Java代码思路及结构

此处只放部分代码截图

 6.效果运行实例 

附带说明书,任务书,需要源码后台私信 

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-06-12 01:16:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-12 01:16:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-12 01:16:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-12 01:16:01       18 阅读

热门阅读

  1. 数据结构-哈希表

    2024-06-12 01:16:01       8 阅读
  2. C++的预处理器

    2024-06-12 01:16:01       8 阅读
  3. 数据结构篇其六-串

    2024-06-12 01:16:01       8 阅读
  4. Web前端评价:深入剖析与全面审视

    2024-06-12 01:16:01       5 阅读
  5. 云计算——武汉理工期末复习

    2024-06-12 01:16:01       8 阅读
  6. python将一个图片雕刻镂空成二维码

    2024-06-12 01:16:01       9 阅读
  7. Redis缓存技术详解与实战

    2024-06-12 01:16:01       7 阅读
  8. Git如何拉取远程仓库的其他分支

    2024-06-12 01:16:01       6 阅读