小组成员:李靖 李凤莲

 

课程设计报告

学        号           201610411111       

姓        名           李  靖                    

班        级           2016计科1班         

题        目           小郡肝点餐系统     

授课 老师            袁  飞                    

 

目录

第1章 概述  1

1.1 课程设计的核心任务   1

1.2 课程设计工作进程       1

1.3 系统简单介绍  1

第2章 需求分析  1

2.1 用户需求       1

2.1.1 业务需求    2

2.1.2 商业需求    2

2.1.3 特殊需求    2

2.2 可行性分析   2

2.2.1 技术可行性 2

2.2.2 经济可行性 2

2.3 系统功能       2

第3章 概要设计  3

3.1 系统设计思想       3

3.2 系统(或网络)总体结构   5

3.3 数据库设计  

第4章 详细设计7     

第5章 课程设计总结  9

第1章概述

1.1课程设计的核心任务

       (1)     需求分析、可行性分析、E-R图、关系图、系统架构图等的编写

       (2)     总体设计、详细设计、代码实现

       (3)     代码测试

1.2课程设计工作进程

总体阶段时间分布:4月15号——6月19号

       第一阶段(4月15号——5月8号):

       编写项目文档其中包括:需求分析、可行性分析、E-R图、实体图、关系图、用例图、系统架构图。

第二阶段(5月8号——5月29号):

       编写代码,实现基本功能

第三阶段(5月29——6月19):

       测试代码以及发布代码于服务器和博客上;提交整体项目于老师邮箱。

1.3系统简单介绍

       小郡肝点餐系统是实现用户在线进行用户注册、用户登录、用户根据自身需求进行在线点餐、网上结账等功能;采用Java语言实现功能,使用mysql实现数据库管理。

第2章需求分析

2.1用户需求

2.1.1业务需求

点餐业务

       点餐管理是餐饮企业经营活动的及其重要的一环,它关系到是否能为用户提供可靠的点餐环境、点餐是否能够顺利进行以及菜品的时效性。 将传统的人工点餐转为使用餐厅点餐系统,系统可以为顾客提供以下服务:浏览最新菜谱、自助点菜(下单)、进行催单、查询订单的排队情况以及结账申请。

2.1.2特殊需求

       菜谱是以网页形式显示并且及时的更新,顾客通过自己的联网设备查看菜谱。必须使用户能准确快速地进行信息输入,从而使得用户与系统之间的通信时间尽可能地缩短。系统必须能准确快速地打印出各类清单。

2.2可行性分析

2.2.1技术可行性

  基于相对成熟的前台开发工具eclipse,使用java 语言进行后台编码,运用面向对象的思想和设计模式进行开发,后台使用简捷的mysql数据库,运用tomcatglassfish来部署整个程序。这些技术在当今时代都趋与=于成熟,并且运用广泛,所以,本系统的实现在技术上是可行的。

2.2.2经济可行性

       由于开发设备于人员都已聚齐,开发所用的成本主要是人力资源的支出。并且系统所发挥的作用是科学地管理数据,大大的提高了管理效率,降低了工作人员的负担,节省了管理时间,所以,本系统的实现在经济方面是可行的。

2.3系统功能

  本系统的主要功能分为:餐厅前台端系统(客户端)、服务器后台端系统(服务端)。以下分别对各个端的系统功能做一个功能概述。

  餐厅前台端系统:

  1.从服务端获取最新的菜谱;

  2.在本地系统中进行点单,并将订单传送到服务器后台系统;

  3.催单,向服务器后台端系统发送信息,要求系统尽快处理本订单;

  4. 结账,向服务器后台端系统发送结账请求。

  服务器后台端系统:

  1. 更新本地系统中的菜谱信息;

  2.接收订单,并保存订单信息;

  3.将订单传送到厨房端系统;

  4.对催单请求进行处理;

  5.对订单进行结账处理,并将信息反馈到餐厅前台端系统;

  6.管理当前系统中等待厨房处理的订单队列;

  7.处理订单信息队列;

       8.将已处理的订单进行处理(写入数据库),以便日后做账;

第3章概要设计

3.1系统设计模式                              

 

流程图

 

关系图

 

E-R图:                                                                  

 

3.2系统总体结构:

系统功能图:

 

前台功能图:

系统架构图:

 

 

 

 

用例图:

 

 

3.3持久层设计

 

第4章
详细设计与系统实现

4.1业务逻辑设计与实现

        顾客注册后需要登录系统才能进行点餐服务;点餐之后提交订单,订单由后台管理员确认后上菜。

4.2表现层设计与实现

        首页是登录注册页面,首先注册之后跳转到登录页面进入主页,进行点餐,并提交订单。

        主要采用html和css

界面展示如下:

        登录注册页面

   

        点餐页面

       

        订单页面

   

  

4.3项目难点及解决方案

        难点:将数据从后台提取实现前后台交互,以及菜品的上传到后台.

        解决:在慢慢学习ajax和json后一步步实现

4.4典型代码片段与设计过程

         访问数据库部分代码

         先建立数据库的连接,将查询的数据封装到List对象中,在通过主键id或其他进行查找

         Dao层

  

package dao.daoImpl;



import bean.Food;

import util.C3P0Util;

import dao.FoodDao;



import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.ArrayList;

import java.util.List;



public class FoodDaoImpl implements FoodDao{

    @Override

    public void addFood(Food food) throws Exception{

        String sql = "INSERT INTO `xiaojungan`.`t_food`(`foodname`,`type_id`,`descript`,`price`,`saling`,`img`) VALUES (?,?,?,?,?,?)";



        try(

                Connection conn = C3P0Util.getConnection();

                PreparedStatement ps = conn.prepareStatement(sql);

        ) {

            ps.setString(1,food.getFoodname());

            ps.setInt(2, food.getType_id());

            ps.setString(3,food.getDescript());

            ps.setBigDecimal(4, food.getPrice());

            ps.setInt(5,food.getSaling());

            ps.setString(6, food.getImg());



            ps.executeUpdate();

        } catch (Exception e) {

            e.printStackTrace();

            throw new RuntimeException("添加失败!");

        }

    }

    @Override

    public List<Food> findSalingFoods() throws Exception{

        String sql = "select * from t_food where saling=?";

        List<Food> foodList = new ArrayList<>();

        try(

                Connection conn = C3P0Util.getConnection();

                PreparedStatement ps = conn.prepareStatement(sql)

        ) {

            ps.setInt(1, 1);

            try (

                    ResultSet rs = ps.executeQuery()

            ) {



                //将查询出的结果数据封装到List对象中

                while(rs.next()){

                    Food b = new Food();

                    b.setId(rs.getInt("id"));

                    b.setFoodname(rs.getString("foodname"));

                    b.setType_id(rs.getInt("type_id"));

                    b.setDescript(rs.getString("descript"));

                    b.setPrice(rs.getBigDecimal("price"));

                    b.setImg(rs.getString("img"));

                    b.setSaling(rs.getInt("saling"));

                    foodList.add(b);

                }

            } catch (Exception e) {

                e.printStackTrace();

            }

        }catch (Exception e){

            e.printStackTrace();

        }

        return foodList;

    }



    @Override

    public  Food findFood_id(int id) throws Exception {

        String sql = "select * from t_food where id=?";

       Food b = null;



        try(

                Connection conn = C3P0Util.getConnection();

                PreparedStatement ps = conn.prepareStatement(sql)

        ) {

            ps.setInt(1, id);



            try (

                    ResultSet rs = ps.executeQuery()

            ) {

                //将查询出的结果数据封装到Food对象中

                if(rs.next()){

                    b = new Food();

                    b.setId(rs.getInt("id"));

                    b.setFoodname(rs.getString("foodname"));

                    b.setType_id(rs.getInt("type_id"));

                    b.setDescript(rs.getString("descript"));

                    b.setPrice(rs.getBigDecimal("price"));

                    b.setSaling(rs.getInt("saling"));

                    b.setImg(rs.getString("img"));



                    return b;

                }

            } catch (Exception e) {

                e.printStackTrace();

            }

        }catch (Exception e){

            e.printStackTrace();

        }

        return b;

    }

}

 

  终于大功告成了,我们的点餐系统,不过做的功能比较简陋,但是都是自己慢慢一步一步做的,以后还会来完善它。

  下面是我组的服务器地址:http://47.101.175.159:8080/  欢迎访问哦!

 

测试与部署

5.1系统测试

        我们做了以下测试

        对功能的测试:是系统测试中最基本的测试。功能上基本可行,可用性一般,后期会加强并且改善系统功能。

        数据转换测试:目标是验证已存在数据的转换并载入一个新的数据库是否有效。用户输入的数据可以保存到后台,载入新的数据库也有效。

5.2系统部署

部署javaweb环境

        我们组用的jdk1.8;mysql8.0和tomcat8.5;所以先安装和配置这三个的环境变量。

        将三个下载安装后配置其环境变量

        Jdk1.8配置请参考:https://blog.csdn.net/crossing2012/article/details/81292547

        Tomcat配置参考:https://blog.csdn.net/qq_34197553/article/details/77597196

        Mysql8.0安装配置参考:https://blog.csdn.net/qq_33144861/article/details/80267462

 

项目打包成war包并上传运行:

        项目打包参考:https://blog.csdn.net/pporyy/article/details/87526807

        War包上传到服务器,这个war包直接放在tomcat安装目录下的webapp下就可以直接访问了; 其中遇到的问题是云服务器无法复制文件进去,百度各个方法安装其他软件,花了很久时间发现自己白费功夫,也有很多人遇到和我一样的坑。最后发现用自己电脑远程桌面连接到自己的云服务器上就可以直接复制上去。

        电脑远程桌面连接参考:https://blog.csdn.net/ZhenMing_Ma/article/details/71425536

外网访问项目

        如果有域名:域名加上项目名称就可以访问了

        没有域名:服务器的公有ip:8080/ 项目名就可以访问了 ;

        如果访问不成功,可能是你的服务器的安全组没有配置。

        我是配置阿里云服务器,参考:https://www.jianshu.com/p/3801393a323a

        最后就可以成功访问。

第6章课程设计总结

6.1系统基本软件度量数据

 

6.2课程设计项目的收获与展望

        本次的小郡肝点餐系统课程设计让我了解到现在市面上有太多的餐饮系统,种类也非常多,餐饮行业竞争也变的十分的激烈,如今是互联网时代不得不跟随市场的脚步,那该如何选择成了非常的头疼的事,首先我们要知道点餐系统能带来的好处:降低运营成本,节省人力资源 ;提高餐厅顾客消费率,提高营业额 (如:智能化运营会员,充值、消费、积分);全新就餐模式,提升顾客体验;大数据进行分析,能够重新定位等等。

        如今顾客群体中年轻人的比例越来越大,80后、90后成为主力军。高档连锁的消费餐厅是你在朋友聚会时的选择,但你仍然在吃,中式快餐,老妈做的饭菜和外卖,只有周末或者是朋友小聚时才会考虑“吃顿好的”。而承包了年轻顾客每天最多用餐时间的,永远是中小餐馆的食物,因为这些食物,才是真正意义上的刚需。帮助中小餐饮消费餐厅做好服务升级,眼下这个市场,明显是很有前景的。