分类

课内:
不限
类型:
不限 毕业设计 课程设计 小学期 大作业
汇编语言 C语言 C++ JAVA C# JSP PYTHON PHP
数据结构与算法 操作系统 编译原理 数据库 计算机网络 软件工程 VC++程序设计
游戏 PC程序 APP 网站 其他
评分:
不限 10 9 8 7 6 5 4 3 2 1
年份:
不限 2018 2019 2020 2021

资源列表

  • 基于Boostrap的响应式电影网站

    一、网站规划1.1 需求分析由于我所选择的主题为影视网站,据此得出以下需求分析:

    响应式布局:网站适应电脑、平板等设备的屏幕大小,并能够根据浏览器窗口的大小调整布局,在各种屏幕大小不一的设备上都能有效的保证网页不会错乱
    页面美观:页面美观与否在很大的程度上会影响到用户的使用体验和对网站的第一印象,两个功能相同的网站,人们更倾向于使用更美观的网站
    简约且齐全:网站设计偏向简约,这样用户更方便且更快速的找到自己所要找的内容,但简约的同时也没有缺少必要的数据,能够在我们网站提供给用户的,就不要麻烦用户再到其他网站查找

    1.2 网站结构分析HS 影院/├─css/ --存放 CSS 样式的文件夹│ ├─bootstrap.min.css --Bootstrap 框架的 CSS 样式│ ├─font-awesome.min.css --Font Awesome 图标字体库的 CSS 样式│ └─myStyle.css --自写的用于调整网页细节的 CSS 样式├─fonts/ --存放 Font Awesome 图标字体库的文件夹│ └─… --Font Awesome 图标字体库文件├─js/ --存放 js 文件的文件夹│ ├─jquery-3.5.1.min.js --Jquery 的 js 文件│ ├─bootstrap.min.js --Bootstrap 的 js 文件│ └─my-js.js --自写的 js 文件├─image/ --存放图片的文件夹│ ├─cover/ --存放电影封面图片的文件夹│ │ └─… --一些电影封面图片│ └─… --除了电影封面以外,网页上用到的其他图片├─video/ --存放视频的文件夹│ └─ndmz.mp4 --网站用上的视频├─webs/ --存放网页的文件夹│ ├─about_us.html --关于我们页面│ ├─film.html --电影分类的首页│ ├─film_info.html --电影信息介绍页面│ ├─film_search.html --电影分类中的动画分类页面│ ├─play.html --播放电影的页面│ ├─login.html --登录页面│ └─register.html --注册页面└─index.html --打开网站的第一个页面1.3 网站风格分析由于网站的主题是影视,因此选用了主体偏向黑暗风格,给用户以沉浸式体验,同时也为了突出网页中的信息、按钮和链接等,所以给它们设置了比较明亮的颜色来形成对比,使他们更为突出、显眼,且此网站为展示型网站,核心功能为展示影视信息和观影,黑暗风格的主体和对比也是为展示信息和观影而服务。
    1.4 功能模块图功能模块图如图:

    从中可以看出网站的网页类型分为 8 种,其中在以后还可以增加与电影页同类型的网站,如电视剧页、动漫页和综艺页等,可以根据影视的类型以后再增加;视频简介页又可以根据视频数据的不同来添加,但它们提供的功能都是相同的。
    二、页面详细设计2.1 欢迎页面设计在平时上网时偶尔会遇到一些网站有着自己的欢迎页或是导航页,往往都给人一种惊艳的感觉,而且一方面是因为我刚好前段时间看过一个教人如何用视频作为网页背景的视频,另一方面是我想把我做的这个网站部署到我的阿里云服务器上作为我的学习成果展示给朋友们,最后一方面是因为项目要求子网页不得少于 6 个页面,但我又不想做几个结构几乎相同,只是内容不同的相似网页来敷衍老师和自己,所以就做了少有的欢迎页。
    2.1.1 设计思路页面头部区域为导航栏组件,除去网站名称,左边是链接到“关于我们”页面的导航,仅在这个页面出现,是为了不影响其他页面的使用体验的同时下给用户一个了解作者的机会,右边是首页和各种影视的导航;底部区域是声明一点网站信息和使用了哪些框架和字体图标;页面中间是欢迎语等文字和“立即进入”按钮,链接到电影页面;整个页面的重点在视频背景,头部区域和底部区域背景色为半透明黑色,就是为了模仿影院里的电影上下的两条大黑边,给用户一种在影院看电影的感觉。
    2.1.2 主要技术导航栏、视频背景
    2.1.3 核心代码前提
    body 里的一切内容都放在一个 class=”container-fluid”的 div 中
    HTML

    导航栏并无特别之处,代码略。
    CSS

    去除 container-fluid 类的内边距,使视频能完整填充页面

    视频绝对定位,并使视频位于网页的最底图层

    根据窗口比例更改视频的大小,防止视频变形

    2.1.4 实现效果此时为视频播放了一部分后的截图

    2.2 关于我们页面设计此页面是为了介绍一下作者而已。
    2.2.1 设计思路在欢迎页除点击会在新窗口打开此页面,页面头部区域依旧是到导航栏,但不与其他网页链接,底部区域与欢迎页相同,中间区域从上到下是 3 个盒子,一个放作者信息,一个再放个视频在自动播放(为了好看),最后一个放点文字什么的;作者信息那有一些软件或网站的图标,鼠标放上去就隐藏,因为并不会让用户联系我。
    2.2.2 主要技术按钮组、视频播放
    2.2.3 核心代码HTML
    按钮组

    视频

    CSS

    2.2.4 实现效果按钮组

    视频

    2.3 电影页面设计此页面是参考了不少其他影视类网站,最终才决定样式的。
    2.3.1 设计思路头部区域导航栏与前面的网页不同,影视分类放到左边,右边再是搜索框和登录,底部区域不变,中间区域从上到下为轮播、列表组做的分类和热播电影显示。
    2.3.2 主要技术导航栏、轮播、分类列表组、栅格系统、返回顶部
    2.3.3 核心代码导航栏、轮播并无太多特别,代码略

    此代码使轮播圆角
    HTML
    分类列表组



    栅格展示电影


    后面大致相似,略
    返回顶部

    CSS
    列表组

    调整了一点细节,还使窗口宽度不都够大时,出现下方滚动条。
    栅格展示电影

    调整了一些细节,以及添加了鼠标悬浮事件。
    返回顶部

    让返回顶部按钮绝对定位在页面的右下角
    2.3.4 实现效果导航栏

    轮播

    分类列表组

    栅格系统

    返回顶部

    2.4 动画分类页面设计此页面是当用户选择分类来查找电影时,用来显示分类结果的。
    2.4.1 设计思路当用户选择一个分类进入筛选时,往往还要选择第二、第三个筛选条件,因此在此页面尽量去除其他与筛选这一过程无关的部分,因此此页面仅保留头部、底部、分类列表组和筛选结果电影展示。
    2.4.2 主要技术导航栏、分类列表组、栅格系统、返回顶部
    2.4.3 核心代码其他组件并无多大变化
    HTML
    栅格展示电影

    2.4.4 实现效果分类列表组

    栅格系统

    2.5 视频简介页面设计此页面将中间区域的内容从上到下换为电影简介、电影推荐、播放、资源下载和详细剧情 5 部分。
    2.5.1 设计思路电影简介部分由电影封面和电影信息组成;电影推荐部分是栅格系统做的显示电影推荐电影;播放部分是几个按钮样式的超链接,包含多个观看该电影的网站;资源下载部分左边是资源的名称;右边是按钮样式的超链接,链接内容为各类软件的下载链接,点击链接可以唤起软件下载;详细剧情部分主体为完整的剧情介绍。
    2.5.2 主要技术导航栏、栅格系统、返回顶部
    2.5.3 核心代码HTML
    以下部分使用了栅格
    电影简介

    资源下载部分

    2.5.4 实现效果各部分实现效果如图





    2.6 视频播放页面设计此页面也是中间区域与其他网页不同,中间区域从头到尾分别为视频播放部分、线路切换部分、评价部分和最近热播部分。
    2.6.1 设计思路与主流的视频播放网站相似,出现在用户面前的先是播放视频部分,往下就是切换线路即切换播放来源或播放网站,再到用户的评论,登录的用户点击“回复”按钮会出现模态框以输入内容回复,最后是热播视频推荐。
    2.6.2 主要技术导航栏、栅格系统、返回顶部、弹出模态框、按钮组、视频播放
    2.6.3 核心代码其他组件与前文的相似,略
    评论部分
    HTML

    弹出模态框

    2.6.4 实现效果播放视频部分(声音不可用是因为此视频为静音)

    线路切换

    评价和按钮组

    回复模态框

    最近热播

    2.7 登录页面设计观影网站能够存粹的观影固然好,但若能在观影的过程顺便交个朋友或是根据别人的评价来大致了解一个视频的水平也是挺不错的,因此加入了登录功能。
    2.7.1 设计思路单纯的用此网站注册的账号登录太单调,且不是每个用户都喜欢繁琐的注册过程,因此加入其他登录方式很重要,但它们这不能是第一选择,所以要弄个折叠面板把它们藏起来,为了方便布局,用按钮组来实现。
    2.7.2 主要技术按钮组、折叠面板
    2.7.3 核心代码HTML

    CSS

    登录按钮悬浮变大和给其他登录方式图标改颜色
    2.7.4 实现效果

    2.8 注册页面设计有了登录页面,那肯定也得有注册页面了。
    2.8.1 设计思路避免用户注册密码时输入错密码,特别加入了双重确认密码的过程。
    2.8.2 主要技术js 函数
    2.8.3 核心代码HTML
    密码输入框和再次确认密码输入框

    属性 onkeyup 为每输入数字或文本都会运行函数里的代码
    Js

    获取密码输入框的内容和再次确认密码输入框的内容,然后对比,然后根据对比结果给 id 为 tip 的 span 添加不同的样式和文字。
    2.8.4 实现效果

    三、网站测试3.1 欢迎页面测试×1080 屏幕

    Width < 960px

    Width < 540px

    3.2 关于我们页面测试×1080 屏幕

    Width < 960px

    Width < 540px

    3.3 电影页面测试×1080 屏幕

    Width < 960px

    Width < 720px

    Width < 540px

    3.4 动画分类页面测试×1080 屏幕

    Width < 960px

    Width < 540px

    3.5 视频简介页面测试×1080 屏幕

    Width < 960px

    Width < 540px

    3.6 视频播放页面测试×1080 屏幕

    Width < 960px

    Width < 540px

    3.7 登录页面测试×1080 屏幕

    Width < 960px

    Width < 540px

    3.8 注册页面测试×1080 屏幕

    Width < 960px

    Width < 540px

    总结前端框架能够显著的提升开发网站的速度,而且在很多地方给了开发人员很高的便利性,但也有很多样式和功能是框架中没有的,这时候我们就需要敢于去重写框架中的一些部分,而且还要敢于脱离框架提供的样式,加入自己的风格。这次网页设计项目我一共设计了 8 个页面,也尝试了许多组件来搭配,但花费我最多时间和精力的却并不是实现网页,而是查找各种适合的资源,如视频、轮播图的图片、电影的封面等,如果文件大小太大,还要进一步压缩文件,其次才是实现网页时的细节样式调整。如果我们平时上网的时候也顺手收集一些网站素材,那对我们以后项目开发应该会事半功倍。
    0 评论 1 下载 2021-07-20 10:06:10 下载需要13点积分
  • 基于SpringBoot+Mybatis和Mysql实现的选课管理系统

    一、引言计算机技术高度发达的今天,利用信息技术对大量复杂的信息进行有效的管理成为一种普遍而实用的手段。一方面,这极大的减少了簿记和人力的开销,另一方面,现代计算机强大的计算能力和网络的普遍部署,大大简化了大量信息的处理和流动。教务管理是大学的主要日常管理工作之一,涉及到校、系、师、生的诸多方面,随着教学体制的不断改革,尤其是学分制、选课制的展开和深入,教务日常管理工作日趋繁重、复杂。迫切需要研制开发一款基于 Web 的综合教务信息管理网站。
    而这次我们所要研发的青枣选课管理系统的定位是基于 Spring boot 和 jsp+boostrap5 前端框架开发的,使用角色主要是普通用户、教师、管理员。
    二、需求概述2.1 项目背景
    开发目的:学校管理
    应用目标及其适用范围:全体师生

    2.2 需求描述2.2.1 基本要求教务管理是高校管理的重要组成部分,对于学校和政府教育管理单位来说都至关重要,所以教务管理系统应该能够为用户提供充足的信息和快捷的查询手段。但是使用传统人工的方式管理学生学籍、档案、成绩等,效率低、保密性差,不利于查找、更新和维护。使用计算机对学生信息进行管理,能够极大地提高学生管理的效率,节约教育经费,这也是适应学校信息化建设发展趋势的重要因素。
    2.2.2 软件结构要求教务管理系统在前期的开发为了测试的准确性,采用 B/S 的结构模式,在后期会加入域网服务器采用 C/S 的模式。
    2.2.3 操作接口基本要求分为 B/S 与 C/S 两种类型,B/S 体现一种清晰,严谨之感觉。这个接口的体现是多为录入,查询与审批。C/S 提供相应的应用接口,对无使用权限的功能不在接口上显示。操作尽量简单,好用、易用。这个接口体现多为查询,统计分析。
    2.2.4 功能需求用软件的功能结构图加以说明如下:
    青枣选课管理系统的主要功能为:用户管理、学生信息管理、学生成绩管理、成绩统计与分析、选课管理、教室管理和信息查询。
    数据更新功能分为三部分:学生相关信息的添加、删除和修改。

    数据添加功能:提供便捷的录入界面将学生数据添加到数据库
    数据删除功能:将不满足要求的相相关记录从数据库中删除
    数据修改功能:允许管理员对他所指定记录的相关信息进行修改

    数据查询功能允许管理员进行两种方式的查询:记录浏览(不构造任何查询条件)和条件查询。

    记录浏览功能:可以方便快捷地浏览全部记录
    条件查询功能:允许用户构造各种组合条件来查询所需信息

    密码管理功能允许用户对密码进行修改。

    性能要求:方便快捷有效地完成学生信息管理的各项工作,录入数据合法性的校验程度高,数据查询速度快,能够快速的对学生信息进行管理。
    2.3 功能模块需求分析这里主要通过系统的主功能模块划分以及系统用例图来分析系统需求。
    2.3.1 主要功能模块划分青枣选课管理系统分为三个模块:学生模块、教师模块和管理员模块。

    学生模块的功能:个人信息的查看,修改个人资料,查看理论课成绩,选修公共课,成绩排行榜功能
    教师模块的功能:个人信息的查询,成绩的录入、修改、查看和分析,查看所负责的课程
    管理员模块的功能:对学生、教师、班级、课程的增删改查,课程的安排,系统用户的添加和删除,为学生分配班级、课程等

    对于各功能的详细介绍,如下表所示:



    权限等级
    身份
    功能菜单
    功能说明




    1
    学生
    登录
    登录系统界面


    1
    学生
    成绩查询
    通过输入自己的课程号,学期,查询自己的某个课程的相关成绩及其他信息。


    1
    学生
    个人信息
    个人信息就是学生姓名,学生的性别年龄等个人相关信息。可以上传图片


    2
    教师
    登录
    登录到教师模块


    2
    教师
    成绩录入
    教师选择要录入分数的课程,直接在输入每个人的成绩,点击保存即可。


    2
    教师
    成绩查看
    查看某门课程的所有学生的成绩;查看某一个学生的成绩


    2
    教师
    成绩分析
    教师可以查看某门课的各个分数段的人数分布,课程的及格率等,还可看最高最低分、平均分。


    2
    教师
    个人信息
    教师可以查看自己的个人信息,修改自己的个人信息,可以更换头像


    3
    管理员
    登录
    登录到管理员模块


    3
    管理员
    学生信息管理
    包括学生信息的查询、添加、修改和删除


    3
    管理员
    班级信息管理
    先进行录入班级的信息,班级号,班级名称,班级院系


    3
    管理员
    教师信息管理
    包括教师信息的查询、添加、修改和删除


    3
    管理员
    课程管理
    包括课程的管理、班级管理和课程安排


    3
    管理员
    系统用户权限管理(拓展功能)
    管理员添加或删除使用该系统的学生、教师以及管理员的账号密码权限的信息


    3
    管理员
    个人信息管理
    管理员有自己的个人信息,可以查看并修改自己的个人信息。



    2.3.2 系统用例图根据以上主功能模块分析,青枣教务管理系统包括三个参与者:学生、教师、管理员。根据不同身份的用户和系统的交互活动不同,可以画出如下用例图:

    三、软硬件及外部系统接口需求3.1 用户界面用户界面是程序中用户能看见并与之交互作用的部分,设计一个好的用户界面是非常重要的,本设计将为用户提供美观,大方,直观,操作简单的用户界面。
    3.2 硬件需求移动终端硬件配置应遵循如下原则:具有高的可靠性,可用性和安全性。【描述系统中软件和硬件每一接口的特征。这种描述可能包括支持的硬件类型、软硬件之间的交流的数据和控制信息的性质以及使用的通信协议。】
    3.3 运行环境
    Web 浏览器:0+、Chrome、Opera、Safari、Firefox 及任何支持 HTML5 标准的浏览器
    标准分辨率:1024*768、1920*1080、2K

    四、数据库的设计与实现本系统采用 MySQL 数据库,系统数据库名为 qz.数据库中有 10 张表。下面分别介绍不同的表。
    4.1 数据表的概述系统中包括:学生表(student)、教师表(teacher)、班级表(class)、课程表(course)、成绩表(score)、学生班级(student_class)、教师课程(teacher_class)、教师班级(teacher_class)、课程安排表(course_arrange)、系统用户表(user)
    4.2 数据表的结构student(学生表)
    学生表主要存取学生的学号、姓名、性别、年龄、专业、入学年份、电话、地址、照片



    序号
    字段名
    类型
    长度(字符)
    描述




    1
    studentId
    int
    11
    学号


    2
    studentName
    varchar
    255
    姓名


    3
    sex
    varchar
    255
    性别


    4
    age
    int
    20
    年龄


    5
    major
    varchar
    255
    班级


    6
    yearSchool
    int
    255
    入学年份


    7
    telephone
    varchar
    255
    电话号码


    8
    address
    varchar
    255
    地址


    9
    photo
    varchar
    255
    照片



    teacher(教师表)
    教师表主要存取教师的教师号、姓名、性别、学院、职位、学位、照片



    序号
    字段名
    类型
    长度(字符)
    描述




    1
    teacherId
    int
    11
    教师编号


    2
    teacherName
    varchar
    255
    教师姓名


    3
    sex
    varchar
    255
    性别


    4
    college
    varchar
    255
    学院


    5
    professionalTitle
    varchar
    255
    职称


    6
    degree
    varchar
    255
    学位


    7
    photo
    varchar
    255
    照片



    class(班级表)
    班级表主要存取班级号、班级名称、学院:



    序号
    字段名
    类型
    长度(字符)
    描述




    1
    classId
    int
    11
    班级编号


    2
    className
    varchar
    255
    班级名称


    3
    ofCollege
    varchar
    255
    学院



    score(成绩表)
    成绩表主要存取学生的学号、姓名、课程号、课程名、成绩



    序号
    字段名
    类型
    长度(字符)
    描述




    1
    studentId
    int
    11
    学生编号


    2
    courseId
    int
    11
    课程编号


    3
    studentName
    varchar
    255
    学生姓名


    4
    courseName
    varchar
    255
    课程名称


    5
    grade
    int
    5
    分数



    studentclass(学生\班级表)
    学生班级班级表主要存取学生学号、学生姓名、班级号、班级名



    序号
    字段名
    类型
    长度(字符)
    描述




    1
    studentId
    int
    20
    学生编号


    2
    studentName
    varchar
    255
    学生姓名


    3
    classId
    int
    11
    班级编号


    4
    className
    varchar
    255
    班级名称



    teacherclass(教师\班级表)
    教师班级表主要存取教师号、教师姓名、班级号、班级名称



    序号
    字段名
    类型
    长度(字符)
    描述




    1
    teacherId
    int
    11
    教师编号


    2
    teacherName
    varchar
    255
    教师姓名


    3
    classId
    int
    11
    班级编号


    4
    className
    varchar
    255
    班级名称



    teacher_course(教师课程表)
    教师课程表主要存取教师号、教师名称、课程号、课程名



    序号
    字段名
    类型
    长度(字符)
    描述




    1
    teacherId
    int
    11
    教师编号


    2
    teacherName
    varchar
    255
    教师姓名


    3
    courseId
    int
    11
    课程编号


    4
    courseName
    varchar
    255
    课程名称



    course_arrange(课程安排表)
    课程安排表是存取课程安排信息。主要存取教师号、教师名、课程号、课程名、班级号、班级名



    序号
    字段名
    类型
    长度(字符)
    描述




    1
    classId
    int
    11
    班级编号


    2
    className
    varchar
    255
    班级名称


    3
    courseId
    int
    11
    课程编号


    4
    courseName
    varchar
    255
    课程名称


    5
    teacherId
    int
    11
    教师编号


    6
    teacherName
    varchar
    255
    教师姓名









    course(课程表)
    课程表存取的是课程信息,包括课程号、课程名、学分



    序号
    字段名
    类型
    长度(字符)
    描述




    1
    courseId
    int
    11
    课程编号


    2
    courseName
    varchar
    255
    课程名称


    3
    credit
    float
    10
    课程学分



    user(系统用户表)
    系统用户表存取的是该系统的用户的账号密码信息



    序号
    字段名
    类型
    长度(字符)
    描述




    1
    username
    varchar
    255
    用户名


    2
    password
    varchar
    255
    密码


    3
    superuser
    varchar
    255
    超级用户



    4.3 E-R 图(实体-联系图)全局 E-R 图

    班级信息 E-R 图

    学生信息实体 E-R 图

    教师信息实体 E-R 图

    成绩信息实体 E-R 图

    课程信息实体 E-R 图

    课程安排信息实体 ER 图

    学生班级信息实体 E-R 图

    信息实体 E-R 图

    教师课程实体 E-R 图

    系统用户信息实体 E-R 图

    五、项目实现5.1 类图学生-教师类图

    管理员-教师类图

    选课类图

    登录类图

    5.2 顺序图管理员登录功能顺序图

    学生登录功能顺序图

    教师登录功能顺序图

    管理员管理公告顺序图

    管理员管理教师顺序图

    管理员管理课程顺序图

    管理员管理学生顺序图

    教师成绩管理顺序图

    学生选课顺序图

    5.3 活动图学生活动图

    教师活动图

    管理员管理学生信息活动图

    5.4 用例图学生用例图

    教师用例图

    管理员用例图

    5.5 状态图登陆模块状态图

    管理员模块状态图

    六、系统实现6.1 登录页面实现
    6.2 学生平台功能实现所有课程功能实现

    已选课程功能实现

    已修课程功能实现

    已修课程功能实现

    退出系统功能实现

    6.3 教师平台功能实现我的课程功能实现

    成绩管理功能实现

    评分功能实现

    6.4 管理员功能实现学生管理功能实现

    修改学生信息功能实现

    课程管理功能实现

    课程添加功能实现

    修改课程功能实现

    教师管理功能实现

    添加教师功能实现

    修改教师信息功能实现

    密码重置功能实现

    修改密码功能实现

    七、可靠性与可用性需求7.1 处理能力由于是在线测评系统,其处理能力主要考虑系统能承载的最大并发用户数,按照实际情况的规划,系统至少能承载的最大并发用户数要求达到全校学生总人数*φ,φ 为 0 至 1 的常数,随服务器容量而定。
    7.2 响应时间为了能够快捷地提供在线测评服务,系统应该能够快速地响应在线测评请求。用户最终得到结果的响应时间除了与系统响应速度有关外,还与网络状况有关。因此对 Web 服务器端需要较高的要求。
    总结本次课程设计工作在最初选题过后,我们小组讨论决定选择了基于 Spring boot 和 boostrap5 进行项目开发,它是真正的跨平台,实现动态功能的一种技术。它能够让人非常简单方便地构建安全高速的应用。同时可以通过 MyBatis 持久层框架实现接口,访问几乎所有数据库,并且可以使用数据库连接池技术,有效控制连接数,确保系统的正常运转。从发展的眼光来看,JSP 的前途一片光明。在数据库的选择上,我也使用近些年发展很好的 MySQL,充分实现系统的跨平台性。
    在该系统的开发过程中,我们小组成员分工明确,并且配合默契,出现问题及时沟通。我们参阅了很多相关的书籍,许多网站的帮助解决了我们许多难题。系统中所有的页面,我们都争取使页面上代码简捷、易懂、易改。
    经过多天的设计与开发,系统终于基本开发完成,各项预期功能都已得到实现。当然,该系统还具有进一步的扩展空间,将会伴随着日后的使用逐步完成,使得界面更加优美,操作更加顺畅。设计和开发过程中遇到的问题也都得到解决,学到了很多的开发经验,受益无穷。
    此次项目的设计和开发不但巩固了我们所学的书本知识,而且还学到了许多课堂上无法学到的实践知识,并且提高了我们自学能力,增强了专业技术的水平。
    0 评论 2 下载 2021-07-20 10:00:26 下载需要15点积分
  • 基于Python Web框架和MySQL的图书借阅系统

    1.需求分析1.1 系统目标利用Python web框架和MySQL开发一个仿真模拟的图书借阅系统。分为管理员和读者两个方面的功能实现。
    1.1.1 管理员方面
    增、删、改、挂失图书信息和读者信息
    查看用户信息和图书信息
    登录管理员界面
    为读者办理借书还书

    1.1.2 读者方面
    登录读者界面
    查询借书记录和个人信息

    1.2 数据流图1.2.1 读者注册
    1.2.2 图书上架
    1.2.3 图书搜索
    1.2.4 图书借阅
    1.2.5 借书记录搜索
    1.2.6 登陆
    1.2.7 图书、读者证挂失
    1.2.8 图书、读者删除
    1.3 数据字典1.3.1 数据项


    数据项名
    别名
    数据类型
    说明




    读者编号
    reader_id
    varchar(5) PK
    读者证的编号按顺序系统分配


    姓名
    reader_name
    varchar(20)
    读者姓名


    性别
    sex
    char(2)
    读者性别


    出生日期
    birthday
    date
    读者出生日期


    电话
    phone
    varchar(20)
    读者电话


    手机
    mobile
    varchar(20)
    读者手机


    证件名称
    card_name
    varchar(8)
    读者的证件可以是身份证学生证等


    证件编号
    card_id
    varchar(18)
    读者的证件号


    会员级别
    level
    varchar(6)
    有三个级别,普通银卡金卡


    办证日期
    day
    date
    即注册日期


    读者登录密码
    Password(Readers表)
    varchar(45)
    读者登录系统中时使用的密码


    图书编号
    book_id
    varchar(5)
    图书的编号系统分配


    书名
    book_name
    varchar(50)
    书的名字


    作者
    author
    varchar(20)
    书的作者


    出版社
    publishing
    varchar(20)
    书的出版社


    类别编号
    category_id
    varchar(5)
    书的类别编号


    单价
    price
    double
    书的价格


    入库日期
    date_in
    datetime
    入库的时间即图书上架时间


    库存数量
    quantity_in
    int
    上架的书的数量


    借出数量
    quantity_out
    int
    书借出去的数量


    遗失数量
    quantity_loss
    int
    书的丢失的数量


    出借日期
    date_borrow
    date
    书借出去的日期在借阅中生成


    应还日期
    date_return
    date
    根据会员的级别确定的日期


    遗失
    loss
    char(2)
    有“否”“是”区分书是否丢失了


    类别名称
    category
    varchar(20)
    类别的名字如“计算机”


    最长出借天数
    days
    smallint
    根据会员级别相应天数


    最多借书册书
    numbers
    smallint
    根据会员级别能借最多的书


    会费
    fee
    smallint
    会员级别所要的费用(单位:元)


    管理员ID
    User_ID
    Varchar(20)
    管理员登录用ID


    管理员密码
    Password(admin表)
    Varchar(20)
    管理员登录用密码



    1.3.2 数据结构
    数据结构名:读者证
    说明:定义了读者的信息
    组成

    reader_id, reader_name,sex,birthday,phone,mobile,card_name,card_id,level,day
    数据结构名:图书信息
    说明:定义了一本书的信息
    组成:

    book_id,book_name,author,publishing,category_id,price,date_in,quantity_in,quantity_out
    数据结构名:借阅信息
    说明:用户借阅书的信息
    组成:

    reader_id,book_id,date_borrow,date_return,loss
    数据结构名:会员等级
    说明:定义了会员的等级
    组成:

    level,days,numbers,fee

    2.概念设计2.1 系统ER图
    3.详细设计3.1关系模型
    会员级别:{会员级别,最长出借天数,最多借书书册,会费}
    读者:{读者编号,姓名,电话,手机,性别,办证日期,出生日期,证件名称,证件编号,会员级别,密码}
    借阅:{图书编号,读者编号,借阅日期,归还日期}
    图书:{图书编号,书名,作者,出版社,类别编号,单价,入库日期,库存数量,出借数量,遗失数量}
    读者管理:{管理员编号,读者编号,遗失日期}
    类别:{类别编号,类别名称}
    管理员:{管理员编号,密码}

    3.2 物理结构设计3.2.1 Readers表
    3.2.2 Books表
    3.2.3 Borrow表
    3.2.4 Member_level表
    3.2.5 Lost_card表
    3.2.6 Admin表
    4.系统实现4.1 程序框图4.1.1 总框图
    4.1.2 登录操作框图
    4.1.3 管理员操作框图


    4.1.4 读者操作框图
    4.2 运行界面4.2.1 登陆界面登录界面可以输入用户名和密码登录,两种不同用户组的登陆界面可以通过menu上的标签切换,在程序里是直接读取两个html文件(根目录下的member.html 和 administer.html)然后通过浏览器提出get请求完成操作。登录是提交get请求,登录信息在超链接里,后端分析登录信息做出判断。登录成功后会跳转相关界面,然后在根目录下产生一个user.txt,里面记录了登录用户的用户组和用户名,如a:root就代表管理员“root”、m:r001就代表读者“r001”。
    会员登录界面

    管理员登陆界面

    4.2.2 管理员所有操作都是通过get请求将信息返回给后端程序的。所有管理员的操作都要通过判断根目录下的登录信息文件user.txt里面的首字母来判断当前操作的用户是否拥有权限。
    图书信息表展示界面(外观模版为admin/adminBook.html)

    添加书籍界面(外观模版为admin/adminBookNew.html)

    修改书籍界面(外观模版为admin/adminBookEdit.html)

    读者信息表显示界面(外观模版为admin/adminReader.html)


    注册新读者界面(外观模版为admin/adminReaderNew.html)

    修改读者信息界面(外观模版为admin/adminReaderEdit.html)

    借书记录管理界面(外观模版为admin/adminRecord.html)

    4.2.3读者个人资料界面(外观模版为member/memberInfo.html)

    借书纪录界面(外观模版为member/memberHistory.html)

    搜索图书界面(外观模版为member/memberBorrow.html)

    4.2.4控制台开始界面

    Get请求path详情

    出错信息

    操作

    输出信息打印

    5.用户使用说明5.1 编程语言
    服务器: Python 2.7
    前端: HTML + JavaScript + CSS

    5.2 依赖库
    服务器库:BaseHTTPServer
    连接MySQL库:MySQLdb
    控制台设置库:Sys
    URL解析库:Urllib
    时间库:Time
    时间库:Datetime
    操作系统库:os

    5.3 编码方式
    前端网页:GBK
    服务器端:GBK
    数据库:UTF-8

    5.4 运行环境
    服务器:Windows7 SP1旗舰版 + Python2.7
    前端:Opera浏览器 34.0(Chrome内核)
    数据库:MySQL Server 5.5(默认端口3306)

    6.实验总结问题与解决6.1 实验总结在这个大作业实验中,我学会了很多东西,不仅更了解了数据库连接的方式和数据库的操作,还学会了使用Python搭建一个服务器和javascript语言。我也通过这次实验,深刻的考虑到了用户体验的需求,我们开发软件不仅要注重程序的完整性,更要关注界面以及操作对于用户的体验。一个好的程序必须是良好的用户体验加上完整的系统,缺一不可。我也通过这次实验了解到了web开发中前端和后端是如何交互的,比如说get请求的处理、post请求的处理,还有表单的递交、url的解析、编码的统一等等。我还学会了使用触发器来控制数据库的操作,以防非法操作,这比在程序中来判断更具有完整性,因为在程序中很有可能没有想到,而建立了触发器就可以在数据库端就把非法信息隔绝。
    6.2 遇到的问题与解决6.2.1 服务器、前端、url、数据库的编码不统一怎么办?服务器使用的是Python 2.7,这个版本的Python使用的是全局Unicode编码,前端网页使用的是GB2312的中文编码,url使用的是UTF-8编码,数据库使用的是UTF-8编码。
    解决方法
    服务器在通过转换设置为全局GBK编码,因为GBK编码包括了GB2312编码的部分,然后对于所有接收到的信息都解码然后转换为GBK编码,在服务器端统一编码。
    6.2.2 自动分配ID的机制如何实现?我们在读者和图书的添加操作的时候,如果需要用户输入编号就不太人性化,但是自动生成有可能会在删除书籍的时候重复。
    解决方法
    计算最大的编号,在最大的编号加一即可。
    6.2.3 读者证挂失怎么实现?图书证挂失的过程中,因为设计的时候没有在readers表添加挂失标记,所以挂失操作的时候不能标记为挂失,也不能直接删除这条纪录。
    解决方法
    新建一张挂失表lost_card表,凡是挂失图书证的读者就将信息复制到这个表,然后删除readers表中的相关记录,在解除挂失的时候只要反过程操作即可实现。
    3 评论 77 下载 2019-08-29 11:07:21 下载需要11点积分
  • 基于JSP和Mysql的公司员工管理系统

    摘 要随着互联网技术越来越普及,全球的经济形态也随之发生了巨大的变化,转变为以信息化技术为主的新经济形态。而企业想要应对新经济时代带来的挑战,谋求更好的发展,就需要利用信息技术将庞大的数据运用到企业的各项工作中。所以开发一款科学合理的、方便现代人使用的员工管理系统,可以提高公司的人力资源管理效率,从而增加企业的市场占有率和总体竞争力,让企业在经济全球化竞争中处于优势地位。
    关键词:信息化;新经济;提高效率;公司员工管理系统
    1 绪论1.1 设计背景企业作为一个国家经济的重要组成部分,然而随着公司的发展壮大,公司员工也随之增多,每 年公司对员工管理的成本也在增加,面临的各种问题也在增多。当公司的规模尚小时,老式的纸质 化管理方式还可以比较容易的完成对员工信息与事务的管理,但随着公司规模越来越大,人员与事 务的增多,这种老式的方法就会出现非常多弊端,例如:纸质文档非常难以保存、查询起来非常方 便、耗费了大量人力资本但工作效率却依然十分低,工作时的出错率还高等很多问题,这种方法已 经跟不上时代的发展了。所以开发一款科学合理的、方便现代人使用的员工管理系统十分有必要。
    1.2 设计意义利用计算机开发一个员工管理系统来对人力资源进行管理,具有老式的纸质化管理所无法比拟的优 点。例如:查找起来十分迅速准确、可存储数据量大、安全保密性能好、成本相对低等。这些优点 对于提高企业对员工和事务管理工作的效率,从而增加企业的市场占有率和总体竞争力,让企业在 经济全球化竞争中处于优势地位十分有帮助。并且运用信息技术将庞大的数据运用到企业的各项工 作中,是企业面对新经济形态挑战强而有力的应对手段。
    1.3 设计思路公司员工管理系统采用了经典的 M-V-C 开发模式,利用的技术有 java 语言开发、面向对象的分析和 设计思想、相关网页脚本语言,使用 Myeclipse 作为开发工具,使用 Mysql 作为数据库工具,设计出 来的系统基本可以完成公司人事部门对员工的各种管理工作。
    2 需求分析2.1 需求描述员工管理系统是一个企业内部的后台系统,所以只能供企业内部的管理员来使用,管理员通过分配 的用户名和密码就能登录系统。管理员在成功登陆系统后,就可以实现各种对员工的管理操作,比 如对职位部门信息、签到考勤信息、奖励与惩罚信息、薪金信息、员工的信息进行管理,也可以对 自己的登录信息进行修改,以及消息查询等。
    2.2 用例建模管理员在成功登录系统后,可以对企业职员相关信息、职位和部门信息、签到考勤信息、奖励与惩 罚信息、职员薪金信息、自己的登录信息及个人信息等进行管理。

    2.3 用例描述2.3.1 个人信息用例描述
    目的:管理员登陆后可以查看自己收到消息和通知,自己的基本信息并可以更改自己登陆系统的密码操作等
    事件流:管理员想要对个人信息进行操作时,本用例开始执行

    管理员登录系统成功点击个人信息板块首先会显示个人的基本信息点击查看消息按钮会显示个人收到的消息点击修改密码按钮可以进行修改密码操作用例结束
    前置条件:管理员登录系统成功
    后置条件:管理员点击个人信息板块查看自己了的基本信息、点击消息按钮,进行了更改登录密码操作

    2.3.2 员工管理用例描述
    目的:管理员在登陆系统后可以查看公司所有职员的基本信息,并可以录入相关员工、更改员工信息、开除员工操作
    事件流:管理员想要对职员的信息进行各种操作时,本用例开始执行

    管理员登录系统成功点击员工管理板块,先会列出所有的员工点击查看详细按钮会显示员工的详细信息点击删除员工按钮会将员工删除点击增添员工按钮可以录入员工信息点击编辑员工按钮可以编辑员工信息用例结束
    前置条件:管理员登录系统成功
    后置条件:管理员查点击了查看了相关职员的详细信息、并进行了录入新的员工操作、开除一个 或多个员工操作、修改员工信息操作

    2.3.3 部门管理用例描述
    目的:管理员在登陆系统后可以查看公司的各个职位部门信息,并可以设立新的部门,修改已存在 的部门,移除已存在的部门操作
    事件流:管理员想要对部门信息进行各种操作时,本用例开始执行

    管理员登录系统成功点击部门管理板块会列出所有的部门点击查看按钮会显示员工的详细信息点击移除部门按钮会将部门移除点击增添部门按钮可以新增部门点击编辑部门按钮可以编辑部门信息用例结束
    前置条件:管理员登录系统成功
    后置条件:管理员查点击了查看详细职位部门按钮、进行了移除部门操作、设立新部门操作、更 改部门信息操作

    2.3.4 考勤管理用例描述
    目的:管理员在登陆员工系统后可以查看已发布的签到考勤信息,并且可以对其进行更改操作,或 发布一条新的签到考勤信息、删除已存在考勤信息
    事件流:管理员想要对考勤信息进行管理操作时,本用例开始执行

    管理员登录系统成功点击考勤管理板块会显示考勤信息列表点击查看按钮会显示考勤的详细信息点击删除考勤按钮会将考勤信息删除点击发布考勤按钮可以新增考勤信息点击编辑考勤按钮可以编辑考勤信息用例结束
    前置条件:管理员登录系统成功
    后置条件:管理员进行了发布新的签到考勤操作、查看了已存在签到考勤、更改已存在的签到考勤操作、移除相关考勤信息操作

    2.3.5 奖惩管理用例描述
    目的:管理员在登陆系统后可以查询职员的奖励与惩罚信息、并且可以修改奖励与惩罚、增加奖励 或者惩罚、移除奖惩信息操作
    事件流:管理员想要对奖励与惩罚信息进行各种操作时,本用例开始执行

    管理员登录系统成功点击奖惩管理板块会显示奖惩列表点击查看按钮会显示奖惩的详细信息点击删除奖惩勤按钮会将奖惩信息删除点击增添奖惩按钮可以新增奖惩信息点击修改奖惩按钮可以编辑奖惩信息用例结束
    前置条件:管理员登录系统成功
    后置条件:管理员查点击了查看详细的奖励与惩罚信息、增加新的奖励或惩罚、更改奖惩信息操 作、移除奖惩信息操作

    2.3.6 工资管理用例描述
    目的: 管理员在登陆系统后可以查看每个员工对应的薪金信息、更改薪金信息、移除相关工资信息、 添加员工的薪金信息操作
    事件流:管理员想要对工资信息进行各种操作时,本用例开始执行

    管理员登录系统成功点击工资管理板块会列出所以工资信息点击查看按钮会显示工资的详细信息点击删除工资按钮会将工资信息删除点击新增工资按钮可以新增工资信息点击编辑工资按钮可以编辑工资信息用例结束
    前置条件:管理员登录系统成功
    后置条件:管理员查点击了查看详细工资信息、更新工资、发布新的工资、移除工资按钮。

    3 系统设计3.1 数据库设计3.1.1 数据库整体设计本系统采用 MySQL 数据库,数据库名为 personal,,数据库系统中包括八张数据表。分别是员工信 息表、职位信息表、奖惩信息表、薪金信息表、部门信息表、考勤信息表、个人信息表。

    3.1.2 数据库脚本




    3.2 系统架构设计公司员工管理系统采用了 M-V-C 的设计思想,所谓 MVC,即 Model-View-Controller。

    Model 层:在本系统中 com.model 包中存放了项目所有的实体类,在包 com.dao 中存放了 项目所需的所有的数据操作接口,两者共同实现了系统所需的全部的增删改查等数据操作
    Controller 层:在本系统中 com.action 包中存放了所有的对 Servlet 进行的各种请求操作
    View 层:在本系统中用根据不同功能设计的网页来表现视图部分

    3.3 模块设计3.3.1 功能模块设计
    4 产品实现4.1 登录模块的实现4.1.1 界面设计登录界面

    4.1.2 功能实现
    4.2 考勤管理模块实现4.2.1 界面设计考勤管理信息列表界面

    考勤管理增添界面

    考勤管理详细界面

    考勤管理编辑界面

    4.2.2 功能实现Com.dao / CheckonDao 主要代码


    4.3 工资管理模块实现4.3.1 界面设计工资管理列表界面

    工资管理增添界面

    工资管理详细界面

    工资管理编辑界面

    4.3.2 功能实现招聘管理 com.dao / Reward 主要代码


    4.4 部门管理模块实现4.4.1 界面设计部门管理列表界面

    部门管理增添界面

    部门管理增添界面

    部门管理编辑界面

    4.4.2 功能实现

    4.5 员工管理模块实现4.5.1 界面设计员工管理列表界面

    员工管理增添界面

    员工管理详细界面

    员工管理编辑界面

    4.5.2 功能实现

    5 产品测试5.1 测试方法与策略测试方法:黑盒测试法
    5.2 考勤管理模块测试


    序号
    测试用例
    预期结果
    实测结果
    测试状态




    1
    考勤信息查看
    系 统 会 显 示 所 有的考勤信息
    与 预 期 的 结 果相符
    1


    2
    考勤信息增添
    可 以 成 功 增 添 考勤信息
    与 预 期 的 结 果相符
    1


    3
    考勤信息编辑
    可 以 成 功 编 辑 考勤信息
    与 预 期 的 结 果相符
    1


    4
    考勤信息删除
    可 以 成 功 删 除 考勤信息
    与 预 期 结 果 相符
    1



    5.3 工资管理模块测试


    序号
    测试用例
    预期结果
    实测结果
    测试状态




    1
    工资信息查看
    系 统 会 显 示 所 有的工资信息
    与 预 期 的 结 果相符
    1


    2
    工资信息增添
    可 以 成 功 增 添 工资信息
    与 预 期 的 结 果相符
    1


    3
    工资信息编辑
    可 以 成 功 编 辑 工资信息
    与 预 期 的 结 果相符
    1


    4
    工资信息删除
    可 以 成 功 删 除 工资信息
    与 预 期 结 果 相符
    1



    5.4 部门管理模块测试


    序号
    测试用例
    预期结果
    实测结果
    测试状态




    1
    部门信息查看
    系 统 会 显 示 所 有的部门信息
    与 预 期 的 结 果相符
    1


    2
    部门信息增添
    可 以 成 功 增 添 部门信息
    与 预 期 的 结 果相符
    1


    3
    部门信息编辑
    可 以 成 功 编 辑 部门信息
    与 预 期 的 结 果相符
    1


    4
    部门信息删除
    可 以 成 功 删 除 部门信息
    与 预 期 结 果 相符
    1



    5.4 员工管理模块测试


    序号
    测试用例
    预期结果
    实测结果
    测试状态




    1
    员工信息查看
    系 统 会 显 示 所 有的员工信息
    与 预 期 的 结 果相符
    1


    2
    员工信息增添
    可 以 成 功 增 添 员工信息
    与 预 期 的 结 果相符
    1


    3
    员工信息编辑
    可 以 成 功 编 辑 员工信息
    与 预 期 的 结 果相符
    1


    4
    员工信息删除
    可 以 成 功 删 除 员工信息
    与 预 期 结 果 相符
    1



    6 结论6.1 毕业设计成果特点公司员工管理系统设计的逻辑也比较合理,加之页面设计的也比较友好,所以操作起来十分顺畅。 员工管理系统的出现,解决了老式的纸质管理方法的弊端,提高了企业在人事方面的管理效率,从 而增加企业的市场占有率和总体竞争力。
    6.2 不足之处或遗留未予解决的问题这个系统基本上是根据个人的理解来进行设计与实现的,所以在开发过程中还是有很多问题是没有 考虑全面的,同时也有许多问题自己无法解决,还有很多可以进一步完善的地方:

    由于自己对前端不是很精通,所以在页面的设计方面有点过于简单和不美观了。在设计每 个 jsp 页面的过程中,虽然参考了网上的素材模板,但由于时间和技术的局限性,很多地方未能结合 自己的代码来美观的实现,这也提醒我后面的学习需要注意到对于前端页面这一方面的提升
    有些功能设计的欠缺考虑,与实际的员工管理事务有一定差距
    对于框架的理解与运用还比较差,也是后面学习所需要注意的

    参考文献[1]胡敏.Web 系统下提高 MySQL 数据库安全性的研究与实现[D]. 北京邮电大学, 2015.
    [2]杨磊, 陈凌云. 精通 Eclipse Web 开发:Java 体系结构、工具、框架及整合应用[M]. 人民邮电 出版社, 2006.
    [3]李志峥,杨社堂. 基于 B/S 结构下的软件系统测试研究[J]. 图书情报导刊, 2006, 16(7):232-234.]
    [4] 张勇.基于 J2EE 架构的企业人事管理系统的研究与开发[D]. 电子科技大学, 2013.
    [5] 陶幸辉, 宋志刚. 软件系统测试类型及测试用例设计[J]. 科技、经济、市场, 2011(6):3-5.
    8 评论 49 下载 2020-08-26 10:31:50 下载需要11点积分
  • 基于Springboot+Mybatis和Oracle实现的医院预约挂号系统

    一、可行性分析1.1 项目开发背景在当今的医疗体系中,绝大部分农村地区中小型医疗机构内部没有实现任何信息化管理,医院临床 信息,业务流程的数据依然采取纸质记录,造成数据容易丢失,对医院造成重大损失。医院内部的挂号、收费、药房、药库、科室、病床的信息管理都存在缺漏,对患者的临床信息不能做到完整保存、高效查询,数据的容易出错、遗漏,造成换院治病难,医院不敢治,错过最佳治疗期等现状,对患者的治 疗造成严重的影响,这些问题与医院信息化管理系统的建立实施目标基本一致。
    而本项目产品更是响应社会市场的需求诞生,作为一个集医学、信息、管理等多种学科的综合系统,实现更现代化、科学化、规范化的手段来加强医院的管理、提高医院的工作效率,改进医疗质量; 它通过将人力资源、业务流程与专业技术进行有效的整合,使医院管理更有效、更高效,使患者能够得到及时的治疗和服务。医院预约挂号系统有着很好的应用前景,用它来代替医院现场挂号,实现患者看 病挂号网络化是一个必然趋势。随着计算机技术和网络技术的发展,它的功能将会得到不断的发展和完 善。
    本系统以医院为背景,在认真调研和分析了医院的现状之后,根据用户的需求和各个功能的关系,作出了积极的设计方案。在新的管理资源和管理模式上,一定能使工作质量、工作效率等得到提高,推 动医院发展的步伐。
    1.2 项目开发意义开发医院预约挂号系统,使患者就诊系统化,规范化,自动化,从而达到提高管理效率的目的。本系统开发设计思想是实现患者预约挂号的数字化。尽量采用现有软硬件环境,及先进的管理系统开发方 案,提高系统开发水平和应用效果的目的;系统应符合医院管理的规定,满足日常管理的需要,并达到 操作过程中的直观,方便,实用,安全等要求;系统采用模块化程序设计方法,这样既便于系统功能的各种组合,又便于未参与开发的技术维护人员补充,维护;系统应具备数据库维护功能,及时根据用户 需求进行数据的添加,删除,修改等操作。
    网上预约挂号系统是一种基于互联网的新型挂号系统,利用该预约挂号系统,患者就可以在家里预 约医院的医生,而无需受排队之苦。它能更好的改善就医环境,简化就医环节,节约就医时间,真正体现了一切以病人为中心,一切从方便患者出发,符合当今医院人性化服务温馨服务的理念。目前,门诊一直是阻挠医院提高服务质量的一个复杂环节,特别是医疗水平高、门诊量大的医院。而造成门诊量难 以提高的因素主要有两个方面:一是集中式挂号,就诊人员流量不均,具有不确定性,有明显的就诊高 峰和低谷。高峰期患者挂号排队长,就诊时间长,医生熟人插号现象,环境拥挤混乱,医生就诊时间
    短、不仔细、服务差。而低谷期,医生无患者可看,医院资源浪费。二是医生号难挂,特别是名医生,会出现倒号、炒号现象,严重损害患者利益,影响医院的声誉。而采用网上预约挂号,可有效解决这一现象,通过网上有效的身份验证,杜绝倒、炒医生号的现象,提高医院门诊服务质量,取得良好的社会 效益和经济效益。此外,患者到医院就诊前对医院的相关信息了解不多,对所要挂的专科医生的情况不太了解,只能凭经验和印象进行选择,具有较大的盲目性。而当医院开通网上预约挂号服务以后,求医 者只需坐在家中轻点下鼠标,就可以挂上医院医生门诊号,可以做到“足不出户选医生”。网上预约正悄 然改变着求医者的看病观念。所以,预约看病应用将越来越广泛。
    1.3 项目可行性分析1.3.1 技术可行性对系统的简要描述
    基于 Java+Eclipse 开发环境的常用框架 Springboot+Mybatis 和使用 Oracle 数据库开发的面向患者、医院管理员的网上信息管理系,系统在安装了 Windows10 操作系统的个人电脑上使用。
    系统处理流程
    患者登录该系统后,根据自己病情,查询医院内自己所需的医生信息及医生简历,选中医生后,登记患者的姓名及电话号码以及简要病历,并填写预约时间。患者预约信息反馈到医院系统管理员后,管理员对预约信息进行整理,产生挂号单。挂号单开放给医院预约挂号号码发放处和医院内各医生,医院预约挂号号码发放处根据预约清单打印并在预约当日按照预约清单发放挂号号码,医院内各医生可以进入系统根据预约清单查询预约自己的患者的数量及患者的简要病历。
    1.3.2 操作可行性操作可行性主要研究系统的操作方式在该用户组织内是否可行。在当前的社会条件下,互联网已 经在中国全面覆盖,在中国各地,均可以通过硬件设备联网。而且各商业组织也拥有属于自己的内部局 域网,所以该系统可以实现联网。该系统在联网情况下,可以通过 PC 机访问系统的数据,所以该系统的 操作方式符合该用户组织。而且本系统操作方法简单,只需掌握基本上网知识,用户即可以轻易学会使 用方法及操作流程。系统管理员需要进行简单培训。
    1.3.3 经济可行性经济可行性主要研究该系统的经济效益能否超过它的开发成本。目前在中国,到医院就医的人流 量是非常庞大的,所以人们对医院的依赖性非常强。在这样的背景下,为医院设计这样的一个系统,其 经济效益是十分可观的而且取消了人们就医挂号的烦恼。又由于通过网络传递信息可以不受距离的限 制,因此可以节省大量的人力和物力,方便管理,由此可以减少不必要的开支,同时该系统可以提高医 院的执行效率,即提高了医院的经济效益,所以从经济上完全是可行的。
    二、项目开发计划2.1 编写目的此系统在可行性分析的基础上,进一步的说明对医院预约挂号系统的要求,准确的定义出医院预约 挂号系统要完成的任务,确定该系统要完成哪些工作,使系统尽可能的满足用户的要求,尽可能的简单 方便的运行。
    2.2 项目概述医院挂号系统后台管理主要包括:用户管理、预约信息管理、医生信息管理、相关业务的查询和系统维护等

    用户管理:在数据库中存储有各角色用户的信息信息,当某个角色的信息需要变化是时,可以随时进行信息的变更包括增加、删除、修改等功能,同时数据库中信息相应变化,并保持数据的时效性和完整性
    预约信息管理主要包括:随时查询患者的预约信息,如患者姓名、病例、所属科室等,而且可及时更新数据库数据
    医生信息管理主要包括:医生信息的增、删、改、查等

    2.3 功能描述
    预约挂号:实现患者从网上直接预约挂号。预约的时候需要填写患者的姓名、预约日期、电话以及简单的病情症状
    预约查询:预约完成后患者可以查询自己的预约信息,当患者想改变医生则可取消本次预约
    取消预约:患者查询到自己的预约信息后,可以从次功能对先前的预约进行取消操作
    登录:管理员以及医生用户可以从登录功能模块进行登录而患者通过注册可以获得登录权限进而进行一系列操作
    整理医生信息:管理员登录以后可以对用户进行添加、删除和修改,实现对用户的管理
    调配医生:管理员登录后通过次模块可以查看患者预约信息,并对患者预约的医生进行调配
    医生查询:医生用户登录可以查询预约自己的患者信息。通过查询患者信息,可以对工作有一个合理的安排与准备(未实现)

    三、需求分析3.1 系统需求分析目前,门诊一直是困扰医院提高服务质量的一个复杂环节,特别是医疗水平高、门诊量大的医院,而造 成门诊质量难以提高的因素主要有两方面:

    一方面集中式挂号(现在流行的分层挂号只是相对而言一个范围较小的集中式挂号),就诊人员流量不均、具有不确定性,有明显的就诊高峰和低谷(表现在整个医院不同门诊时间段及同科室的不同时间段)。 高峰期病人挂号排队长,就诊时间长,医生熟人插号现象,环境拥挤混乱,医生问诊时间短、不仔细、态度差。而低谷期,医生无病人看、溜号,医院资源浪费
    另一方面医生号(特别是名医生号)难挂,出现倒号、炒号现象,严重损害病人利益,影响到医院的声誉。而采用网上预约挂号,可有效的解决这一现象,还通过有效的身份验证,杜绝倒、炒医生号的现象,提高医院 门诊服务质量,取得良好的社会效益和经济效益

    为了解决这一问题,我们需要一种能够方便快捷的挂号方式来满足各方面的需求,减少排队挂号的 痛苦和时间的浪费,而本课题所研究的基于 Springboot+boostrap 框架的医院网上挂号预约系统正好是为了解决这一问题而设计的方案,因此,本系统拥有很大的用户需求。
    3.2 系统流程图患者用户流程图

    管理员用户流图

    3.3 系统数据流图数据流图是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。数 据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程。
    数据流图有四种基本符号:

    正方形表示数据的源点或终点
    圆角矩形代表变换数据的处理
    开口矩形代表数据存储
    箭头表示数据流

    医院网络预约挂号系统中需要处理的信息有登录信息,医生信息以及患者预约信息,根据数据信 息的流向画出本系统的数据流图。医院预约挂号系统顶层数据流图如下图所示。

    3.4 数据库 ER 图用户 ER 图

    患者 ER 图

    医生 ER 图

    挂号表 ER 图

    科室 ER 图

    管理员 ER 图

    系统ER图

    3.5 功能需求医院预约挂号系统主要实现一下几部分功能:内部人员权限管理,预约挂号,门诊流量统计,公告 栏管理,医生信息管理。

    内部人员权限管理模块:管理员以及医生的登录以及修改密码。管理员可以从登录模块进入系统对预约信息以及医生基本信息进行整理。医生可以从登录模块进入系统查询患者预约情况
    预约挂号模块:全国各地患者可以通过此模块进行预约挂号,并填写自己的挂号信息。可以查询自己先前的预约信息,也可以通过此系统取消先前的预约
    医生信息管理:管理员可以对医院医生的信息进行增加、修改和删除

    3.6 性能需求系统应具有配置灵活、易于维护、便于扩展、性能可靠等突出优点,支持面向对象的大型数据库系 统。如:MySQL、Oracle 等,可处理大容量数据,并具有高安全性和可靠性。

    时间特性:操作响应时间一般在 1~3 秒之内,随之数据量的增大,操作的响应时间就要延长
    数据精度:各种数据的输入,输出要满足各种对数据精度的要求,严格按照系统要求的格式
    适应性:适应现有 Windows 系统的需求,并有可能适应更高级别的系统

    3.7 运行需求
    用户界面:用户界面简单直观,一目了然,给用户带来极大的便利,让用户能够简单直接的运用本系统
    硬件接口:不需要特定的硬件或硬件接口进行支撑,一般微机均可运行
    软件接口:运行于 Windows XP 或者更高版本的操作系统上

    3.8 其他需求保密需求:必须输入相关的正确的用户名和密码才能进入系统,并且不同的用户选择相应的权限才 能登录成功。

    数据要求:对于患者和医生的联系电话,必须有严格的位数限制,经过分析研究,联系电话位数必须限制 11 位
    身份证要求:为杜绝无关人员对系统进行恶意的破坏,在患者预约挂号时,必须填写自己真实的 18 位身份证号,输入的位数不对以及输入的身份证格式不对,系统则会提示身份证输入有误,不予存 到系统数据库里,预约失败
    可维护性:平时由管理人员可以维护,遇到大问题或难解决的问题由开发人员进行维护
    可扩展性:在系统使用过程中,如果有医院在预约挂号方面有新的要求,则应能在本系统中进行扩展,增加新的功能

    四、系统设计4.1 数据库设计用户信息表(tuser)



    字段名
    字段类型
    允许为空
    主键
    备注




    uid
    int(10)
    N
    Y
    用户名


    uname
    varchar(50)


    姓名


    upwd
    int(10)


    密码


    uphoto
    varchar(250)


    头像


    role
    int(10)


    判定用户权限



    患者表(patients)



    字段名
    字段类型
    允许为空
    主键
    备注




    pid
    int(10)
    N
    Y
    患者 Id


    pname
    varchar(50)


    患者名字


    psex
    int(10)


    性别(0:男,1:女)


    address
    varchar(50)


    地址


    ptel
    varchar(50)


    电话号码


    cardID
    varchar(50)


    身份证号码


    birthday
    datetime


    出生日期



    医生表(doctors)



    字段名
    字段类型
    允许为空
    主键
    备注




    did
    int(10)
    N
    Y
    医生 Id


    dname
    varchar(50)


    医生名字


    dsex
    int(10)


    性别(0:男,1:女)


    dpmtid
    int(10)


    科室 id


    dtel
    varchar(50)


    电话号码


    level
    int(10)


    岗位级别


    personalinfo
    text


    个人介绍



    科室表(departments)



    字段名
    字段类型
    允许为空
    主键
    备注




    dpmtid
    int(10)
    N
    Y
    科室 Id


    dpmtname
    varchar(50)


    科室名


    dpmtinfo
    text


    科室介绍



    级别表(tlevel)



    字段名
    字段类型
    允许为空
    主键
    备注




    lid
    int(10)
    N
    Y
    级别 Id


    level
    int(10)


    医生级别(0:普通医生,1:医生)



    挂号表(registerTable)



    字段名
    字段类型
    允许为空
    主键
    备注




    rid
    int(10)
    N
    Y
    门诊号


    pid
    int(10)


    患者 id


    rtypeid
    int(10)


    挂号类型 id


    dpmtid
    int(10)


    科室 id


    did
    int(10)


    医生 id


    registdate
    datetime


    预约挂号时间


    expenses
    int(10)


    挂号费用


    ispay
    int(10)


    是否支付(0:已支付,1:未支付)



    挂号类型表(registerType)



    字段名
    字段类型
    允许为空
    主键
    备注




    rtypeid
    int(10)
    N
    Y
    挂号类型 id


    rtypename
    varchar(50)


    挂号类型


    price
    int(10)


    挂号单价



    公告表(board)



    字段名
    字段类型
    允许为空
    主键
    备注




    bid
    int(10)
    N
    Y
    公告 id


    btitle
    varchar(250)


    公告标题


    btext
    text


    公告内容



    4.2 系统功能模块设计在需求分析的时候已经对系统的的功能进行了初步分析,在这里对系统功能进行详细的设计。
    由于系统中面向的是医院的系统管理员,医院的坐诊医生,以及广大患者,所以对系统分为两大主 功能模块,即管理、患者两大主功能模块。
    管理模块是针对管理员对系统的管理进行设计的功能模块,管理员需要进行登录系统后方可进行系 统信息管理,所以首先要有登录模块。管理员登录系统后需要对医生的信息进行增加、删除和修改,所 以在此主功能模块下设计了一个整理医生信息模块,管理员可以通过此模块对医生信息进行管理。管理 员还需要对每天患者预约的信息进行查看整理,所以设计了一个调配医生,调配医生模块用于当患者预 约的医生在预约当日临时有事不能按时坐诊的话,管理员可以通过此模块给相关患者进行医生调配,就 是给相 关预约患者调配一个与患者预约的医生同科室的医生,然后保存到数据库里,以便患者查询预约信息。在主页面有一个公告栏,来公示医院的通知以及医院的新闻动态,公告栏由管理员管理,所以在 管理主功能模块下设计了一个公告栏模块。
    患者主功能模块下设计了三个分模块:预约、查询信息和取消预约。患者从网上进行预约挂号时, 需要填写预约的各种信息,患者可以进入预约模块填写自己的预约信息,并保存,预约成功。当患者预 约成功后,患者想查询先前的预约信息,则需要一个查询模块,所以在患者主功能模块下设计了一个查 询信息模块。当患者在预约当日有事不能按时就诊,患者需要取消先前的预约,所以在患者主功能模块 下设计了一个取消预约的模块。医院预约挂号系统的功能模块如下图所示。

    4.3 功能分析
    登录:当管理员及患者用户需要进入系统时,可以从登录模块输入用户名和密码,并选择自己权限 进行登录。当输入错误的信息时系统拒绝访问
    调配医生:当患者预约的专家在预约的时间临时有事情不能给患者看病的情况下,管理员可以对此患者进行专家调配,调配为同一科室的医生
    管理医生信息:管理员通过此功能添加、修改和删除医生信息,及时更细医院里医生的信息,以方 便患者进行预约
    预约:患者进入系统后,可以查看各个科室的各个医生信息,根据自己的病情预约适合的医生
    查询信息:当患者预约完毕后,可以通过查询功能,对自己先前的预约信息进行查询、核对
    取消预约:当患者临时有事不能到医院看病时,可以通过查询信息查询到自己的预约信息,然后取消自己先前的预约

    4.4 系统后端实体层、持久层实现管理员类

    科室类

    医生类

    患者类

    挂号类


    患者控制层

    挂号控制层

    前端页面渲染(结合 Thymeleaf 模板引擎)
    遍历患者信息


    抽取公共页面
    患者登陆页面编写

    页面定制


    4.5 程序流程设计管理员使用流程图


    患者查询个人预约流程图

    五、项目展示5.1 患者用户采用了 js 特效,登陆页面实现动态,给予用户良好的体验感

    登陆后显示当前用户名字,并且首页实现日历功能

    若用户未注册需先注册再使用该系统


    页面实现侧面菜单栏

    选择挂号医生、挂号时间

    查看个人预约页面,实现取消预约功能和二次预约功能

    5.2 管理员用户登陆页面

    首页,管理患者信息

    修改患者用户信息

    新增患者用户信息

    管理医生信息

    管理科室信息

    六、项目测试6.1 测试目的测试为了发现程序中的错误而执行程序的过程通过分析错误产生的原因和错误的发生趋势可以帮助 项目管理者发现当前软件开发过程中的缺陷以便及时改进。
    测试是为了证明程序有错误,而不是证明程序没有错误。一个成功的测试是发现了至今为发现的错误的测试
    6.2 测试方案该系统主要运用的是黑盒测试,黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常 使用。在测试中,把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程。只在程序借口进行 测试,检查程序功能是否能按照正常的规定使用,程序是否能适当的接受输入数据并产生正确的输出信 息,程序运行过程中是否保持外部信息的完整性。
    6.3 项目测试登陆用例测试



    输入数据
    预期输出
    测试结果




    错误的用户名和密码
    登陆失败,且前端有提示
    与预期输出一致


    正确的用户名和密码
    登陆成功,跳转到首页
    与预期输出一致



    预约挂号测试



    输入数据
    预期输出
    测试结果




    录入信息不填姓名或身份证号码
    预约失败
    与预期输出一致


    输入的身份证号码位数不对
    预约失败
    与预期输出一致


    输入正确的身份信息
    预约成功
    与预期输出一致



    管理员管理用户信息



    操作
    预期输出
    测试结果




    添加用户信息
    添加成功
    与预期输出一致


    修改用户信息
    修改成功
    与预期输出一致


    删除用户信息
    删除成功
    与预期输出一致



    管理员管理用户信息



    操作
    预期输出
    测试结果




    添加用户信息
    添加成功
    与预期输出一致


    修改用户信息
    修改成功
    与预期输出一致


    删除用户信息
    删除成功
    与预期输出一致



    6.4 综合测试在以上测试的基础主,对系统功能进行了整体测试,依次检验系统功能是否符合系统开发的目标。 经过使用大量的数据多次进行系统测试,发现了系统存在的问题并及时改进,最终实现了网站的开发目 标。
    6.5 网站维护软件维护就是在软件已经交付使用之后,为了纠正错误或满足新的需要修改软件的过程。 软件维护可以分为四类:

    改正性维护:在程序使用期间,用户必然会发现程序错误,把遇到的错误问题报告给维护人员然后由系统维护人员进行改正错误
    适应性维护:为了和变化的环境适当的配合而进行软件修改
    完善性维护:为了满足用户使用过程中提出的新功能或着修改系统中已有功能的需求,而对软件进行的完善性维护
    预防性维护:为了改进软件未来的可维护性和可靠性,或者给软件未来的改进奠定更好的基础而对软件进行维护

    六、项目总结大学生涯转眼已到尾声,当初迈进大学校门的情景还历历在目,转而大学即将结束,我也要步入社 会实习了。在经过一个月的探索与实践中,我终于如愿以偿的完成了最后一门课程设计。
    在课程设计中,我采用了 Springboot+Mybatis+Oracle 数据库技术。由于在以前的课堂学习中,大 部分在与学习理论知识初先把课堂理论知识运用干这个完整的课程设计的实践中感觉有点吃力,但是在 通过查询网上资料和自己的努力下,终于圆满的完成了课程设计。
    在这段时间里,我学到了很多知识也有很多感受。从当初对 Java 不太了解的状态,在老师的教授下,我开始学习和试验,查看相关的资料和书籍,让自己头脑中模糊的概念逐渐洁晰,让自己非常稚嫩的设计 一步步完善起来每一次改进都是我学习的收获,每一次试验成功都会让我兴奋好一段时间。
    自己所做的这个挂号系统采用的技术也比较新颖和流行,是现在实习工作的基本要求之一,同时让 我也充分认识到医院网络预约挂号系统给患者和医院带来的极大的方便,在认真调研和分析了医院的现 状之后,根据用户的需求和各个功能的关系,作出了积极的设计方案。在新的管理资源和管理模式上, 一定能使工作质量、工作效率等得到提高,推动医院发展的步伐。
    0 评论 1 下载 2021-07-19 09:37:32 下载需要15点积分
  • 基于Jsp和SQL Server 2008实现的工资管理信息系统

    1 引言1.1 课程设计选题《工资管理信息系统》
    1.2 课程设计的目的通过数据库系统课程设计,熟悉SQL SERVER数据库管理系统的结构与组成;掌握SQL SERVER数据库管理系统的应用技术和的使用;应用Myeclipse开发工具实践《工资管理信息系统》的数据库应用系统的设计方法、开发过程和SQL SERVER数据库的管理与维护。最终达到掌握数据库管理系统的使用和开发,提高分析问题、解决问题和实践应用能力。
    1.3 本选题的设计背景为什么选择本题目?往小了说,是因为从课程设计中选择了一个比较顺眼的课题来设计;往大了说,企业的工资管理是公司管理的一个重要内容。随着企业人员数量的增加,企业的工资管理工作也变得越来越复杂。工资管理既涉及到企业劳动人事的管理,同时也是企业财务管理的重要组成部分。资金是企业生存的主要元素,资金的流动影响到企业的整体运作。企业员工的工资是企业资金管理的一个重要组成部分。早期的工资统计和发放都是使用人工方式处理纸质材料,不仅花费财务人员大量的时间,且不易保存,往往由于个人的因素抄写不慎或计算疏忽,出现工资发放错误的现象。基于以上原因,企业工资管理系统使用电脑安全保存、快速计算、全面统计,实现工资管理的系统化、规范化、自动化。因此,建立本系统有其现实意义,有其可实践应用的基石。目前社会高度信息化,过去的人工的管理已经不能满足企业公司的人事管理,而工资管理作为企业公司人事管理的一项重要工作,工作量大且繁琐,《工资管理信息系统》是每个公司不可或缺的一个系统软件。
    本选题的设计意义?借助现代信息技术和管理理论,建立企业管理信息系统是当今社会的重要趋势。对企业而言,全面开发和应用计算机管理信息系统就是近期不能回避的问题。在企业管理中,人力资源是企业最宝贵的资源,也是企业的“生命线”,因此人事管理是企业的计算机管理信息系统重要组成部分。而工资管理又是人力资源管理的重中之重。实行电子化的工资管理,可以让人力资源管理人员从繁重琐碎的案头工作解脱出来,去完成更重要的工作。工资管理信息系统的实现可以减轻比较繁琐的手工工资管理。现在应用在大中型企业的管理信息系统中,几乎都包括了工资管理模块。有些环境中是由作为大型ERP软件中的一个模块引进的,有些是作为企业的财务系统的一部分。因此,做《工资管理信息系统》是一个很好的选择。《工资管理信息系统》可以使我了解到工作时应该注意的一些事项,完成这个软件后,也可以应用到自己的计算机上,帮助自己理财、记账。同时,做这样一个课程设计,一方面是能够检查我在这一个学期中学习到的成果,另一方面也是为了让我进一步的掌握和运用它,同时也让我认清自己的不足之处和薄弱环节,加以弥补和加强。
    2 系统分析与设计2.1 功能及性能分析2.1.1 功能需求数据录入功能
    主要任务是对各种工资信息进行日常的管理,如工资信息的输入、查询、修改、增加、删除,迅速准确地完成各种工资信息的统计计算和汇总,快速打印出报表。
    数据查询功能

    员工工种情况,反映员工的工种、等级,岗位工资等信息
    员工津贴信息情况,反映员工的加班时间,加班类别、加班天数、岗位补贴等
    员工月工资情况:年,月,职工号,姓名,部门名,基本工资,病假扣款,事假扣款,应发工资,实发工资

    数据统计功能

    统计员工年终奖金
    统计每部门月工资情况

    2.1.2 性能需求该系统分为三类用户使用,即:最高权限使用者、一些被授予增删改等操作的财务管理人员、被授予查询功能的普通职员。这样可以在一定程度上使数据库具有相对的安全性。其次,数据库的备份、日志文件的备份等操作也是必不可少的,要把它们分别存储在不同位置。还有,安一款安全性高的杀毒软件。保证系统的物理安全、数据存储和存取的安全与保密、数据传输的安全与保密,做好使用人员的授权管理。至于界面,要做到简单易懂,方便操作,界面中的数据要与数据库中的数据保持一致。以上是从数据库的安全性和操作要求方面的考虑。而对于数据库的一致性,在建表时要考虑到主键、外键、约束条件、用户定义完整性,对于冗余数据,要有检查数据的功能,这样才可以尽最大努力来实现数据的一致性。要做到:时间经济性,优化逻辑设计与物理设计,使系统运行效率高,反映速度快;可靠性,能连续准确的处理业务,有较强的容错能力;可理解性,用户容易理解和使用该系统;可维护性和适应性,系统应易于修改、易于扩充、易于维护,能够适应业务不断发展变化的需要;可用性,目标系统功能齐全,能够完全满足业务需求;安全保密性,保证系统的物理安全、数据存储和存取的安全与保密、数据传输的安全与保密,做好使用人员的授权管理。
    2.1.3 数据流图表示
    解释:进入工资管理信息系统,按部门分出各个员工的基本信息和工资相关信息,因为岗位工资几乎是固定的,每月不会有变动,更改的可能性较小,所以更新量不会很大,因此放在员工信息里,这样得到了岗位工资。而通过工号使员工信息和工资实体连接,也通过工号能够得到奖金、补贴、扣款等信息,两者汇总可得到应发工资,再通过税率触发器的应用,得到实发工资。
    2.2 系统的开发运行环境
    开发平台:j2ee + sql server 2008
    运行环境:windows 7 或以上版本(安装iis5.0以上版本)

    2.3 系统总体设计员工可以查询工资情况,财会员工可以录入工资信息,最高权限用户用于系统的维护。分析前面的系统功能要求,需要一个表来存储和管理员工信息,使系统能够接受员工原始的各项数据,以实现数据录入、查询或统计员工信息等功能。员工是本系统的第1个实体;为了能实现查询和统计部门内员工情况等功能,必须有一个表来存储和管理所有部门的信息。部门是本系统的第2个实体;工资是以员工工作情况来制定的。需要建立一个表来记录各种工资、津贴、扣款的信息。它主要为各种查询和统计功能提供工资数据。因此,工资是第3个实体。所以,基本表只有三个。如果想要实现其他功能,可以通过视图的方式来实现。这样,就只需创建一些所需要的视图,并对这些视图进行授权就可以完成所需要的表,再通过编程语言来在《工资管理信息》软件上实现出来。
    总体结构图如下:

    由于岗位工资基本是固定的,为减少工作人员工作量,把它放入员工信息实体中。在这里,应发、实发工资是由数据库中函数调用完成,岗位工资已被计算在内。
    工资实体中,加班时间、加班类别、加班天数、岗位补贴等以及病假扣款、事假扣款等,应该以触发器的形式调用相关函数来自动记录在工资表中。实发工资应该由应发工资*税率而得到,也应该由触发器来实现,当然如果税率、相关函数可以更改就更好了。
    3 数据库设计3.1 数据库概念结构以下是员工实体Staff、部门实体Depart、工资实体Wage的数据描述,以表格形式表示相关字段、字段名、类型宽度、说明、备注。当然,这些只是初步的定义,在实际编程过程中,可以修改字段名和类型宽度,以使程序能够编写出来。有些类型定义的不够恰当的情况,也在实际建表中更改了过来,这些数据描述只做参考,并不一定准确。
    员工实体Staff

    工资实体Wage

    部门实体Depart

    E-R图

    3.2 数据库逻辑结构3.2.1 关系模型
    部门(部门名称,部门负责人,部门人数)
    员工(工号,姓名,性别,年龄,籍贯,身份证号,婚姻状况,学历,部门名称,工种,工龄,职务等级,岗位工资,部门负责人,部门人数)
    工资(工号,工资年月,岗位补贴,出勤天数,加班工时,加班工资,加班天数,加班类别,病假扣除,事假扣除,其它扣除,应发工资,实发工资)
    得到(工号,姓名,性别,年龄,籍贯,身份证号,婚姻状况,学历,部门名称,工种,工龄,职务等级,岗位工资,工资年月,岗位补贴,出勤天数,加班工时,加班工资,加班天数,加班类别,病假扣除,事假扣除,其它扣除,应发工资,实发工资)

    3.2.2 关系模型的优化
    部门(部门名称,部门负责人,部门人数)
    员工(工号,姓名,性别,年龄,籍贯,身份证号,婚姻状况,学历,部门名称,工种,工龄,职务等级,岗位工资)
    工资(工号,工资年月,岗位补贴,出勤天数,加班工时,加班工资,加班天数,加班类别,病假扣除,事假扣除,其它扣除,应发工资,实发工资)

    关系规范式 :工资管理信息系统∈1NF ,每个属性均不可再分。
    3.2.3 视图的设计创建员工-工资视图


    创建部门(人事部)-员工视图


    其实,公司部门不可能只有一个人事部,这里省略了其他部门,只以人事部为例。而员工-工资视图里,员工姓名是调用了员工staff表中的数据。
    代码在gongzigl.sql文件中。
    3.3 数据库的实现3.3.1表部门表数据信息定义:

    编辑:

    其中,部门名称是该表的主键,惟一标识一个部门。此表取名为“Depart”
    员工表数据信息定义:

    编辑:


    其中,“工号”是表的主键,惟一标识。“部门名称”是外键。“工号”将记录员工的编号,在员工信息表中增加这一列时,虽然增加了数据冗余,但可以在查询每个员工信息时,提高系统的性能。因为员工信息表的记录数相对固定,相比之下,增加这个冗余的列对于整个系统来说是有利的。通过它,系统将引用到工资信息。此表取名为“Staff” 。
    工资表数据信息定义:

    编辑:


    其中,“工号”作为该表的主键,唯一标识,保证客房信息表数据的参照完整性。此表表取名为“Wage”。
    这些表中的具体属性类型,要根据客户的实际需求来定义。
    3.3.2 安全性设计通过创建用户并授权的方式实现数据库安全性控制。创建了三个用户,分别授予所有权限、修改更新、查询权限,以确保数据库安全。如图:

    u1:

    u2:

    u3:

    可以通过grant ** on ** to ** with grant option;语句来完成授权,也可以通过鼠标选中来授权。
    3.3.3 一致性设计Job_number varchar(50) not null primary key foreign key references staff(Job_number),此语句中包含实体完整性(列级)primary key ,参照完整性(列级)foreign key references staff(Job_number),以及用户定义完整性not null 列值非空。这样可以对数据有着一定的约束,以确保数据的一致性。
    Gender CHAR(2)CHECK(Gender IN('男','女')),用户定义完整性,检查布尔表达式。
    ID_number VARCHAR(50) UNIQUE NOT NULL,用户定义完整性,列值唯一非空。
    为了确保数据库中数据不存在不正确的信息,所以一些表中的数据必须通过级联的方式使得不正确数据不能填入表中,这里用了一个外键,来满足员工表中工号与工资表中的工号所对应的信息是同一个人的。
    3.3.4 索引设计CREATE INDEX Job_number_name_ind--创建索引ON staff(Job_number,Name)--工号、姓名
    默认索引没有写进来,这里,在《工资管理信息系统》中,建立了一个在员工表中以工号和姓名为索引升序排列。建立了这么一个索引,可以加快查询的速度,系统在存取数据时会自动选择合适的索引作为存取路径。
    3.3.5 事务、存储过程、触发器的设计、游标定义存储过程,以:岗位补贴(@staffgongzi)、出勤天数(@staffchuqin)、加班工资(@staffjiaban)、应发工资(@staffying)、实发工资(@staffshi)为输入参数返回指定员工工资信息。
    如图:


    创建触发器staff_update:员工内部调动,当系统对员工表进行UPDATE操作后,将会自动触发它。该触发器将相应记录的部门人数、部门名称、工资更新。

    创建触发器staff_delete:员工调出:进行员工调出操作是在员工信息表中删除该员工的记录,可以为员工信息表设计一个Delete触发器,当员工信息表执行Delete操作后,工资表、部门表中的记录也将全部删除。定义这个触发器名称为staff_delete。

    创建触发器staff_insert:员工调入:进行员工新调入操作是在员工信息表中添加一条新的记录,可以为员工信息表设计一个Insert触发器,当员工信息表执行Insert操作后自动更改出部门信息表相应记录的数据。定义这个触发器名称为staff_insert。

    创建触发器t1:财会为新员工插入相关工资信息

    四个触发器,如图:

    4 详细设计与实现4.1 登录模块界面

    功能
    用于拥有相关权限的人,登陆进入工资管理信息系统。如果登陆失败则如图:

    登陆成功则进入选择界面,如图:

    通过登录模块,使数据库知道登录进来的是什么人,这里举例的是最高权限所有者的登录,因此被授予的权限较多,可以更改所有的表。而,ss用户登录,则可以更新数据,不能随意删除表中信息。s用户登录,只可以查询员工信息以及工资信息,不具备修改功能。
    4.2 职工管理模块界面

    功能
    可以查询职工相关信息以及添加职工信息。如果未找到相关职工,则显示:

    添加职工信息,则显示:

    这个模块本来是想做的复杂一些,但是程序实现困难,所以就把本来是两个模块的东西写在了一起。可以通过工号或姓名来查询职工的基本信息,不填任何数据的情况下,会显示所有的员工信息。而在添加员工的表中,可以直接添加员工的基本信息。重置按钮是将刚刚已填写的数据,在未点击确定按钮的情况下,把已填写的数据清空。
    举例说明,如图所示,我添加了一个工号为23456的信息,则显示结果如下:
    一、添加工号为23456的相关信息。

    二、添加成功。

    三、职工信息查询,输入工号23456。

    四、查询结果。

    4.3 工资管理模块界面

    功能:可以按职工编号查询职工工资的相关信息以及按职工编号添加职工工资信息。如果未找到相关职工编号,则显示:

    添加职工编号及工资的相关信息,则显示:

    可以通过工号来查询职工的基本信息,不填任何数据的情况下,会显示未找到结果!而在添加职工工资的表中,可以直接添加员工的基本信息。原计划是用触发器实现相关函数来达到自动录入信息的,可是后来程序编程无法实现,就只能手动输入了。重置按钮是将刚刚已填写的数据,在未点击确定按钮的情况下,把已填写的数据清空。
    举例,已添加完职工编号23456的工资信息。
    则查询职工编号为23456的工资信息,在职工编号输入23456:

    它的查询结果如下图所示:

    结论通过此次数据库课程设计,使我对数据库的学习与应用得到了进一步的提高。通过完成《工资管理信息系统》,我可以熟练的使用SQL server 2008软件。
    本次课程设计主要是对自建的一个工资管理系统数据库,利用在数据库中的表、存储过程、视图、约束等组合,设计出比较实用的应用软件代码;对表中的信息能够进行简单的查询,子查询,视图的创建、修改与删除,与约束的创建,存储过程与触发器的创建与删除等基本操作,加深对SQL Server数据库的进一步研究。虽然在此期间遇到过麻烦,但通过查阅资料与尝试解决问题,使我更加了解SQL的基础知识,从中学到了新知识。编程是我的弱项,编程对我来说还是很困难的。
    虽然,《工资管理信息系统》,它的基本功能都能实现。完成了《工资管理信息系统》这款小软件(算是软件吧),但在这其中仍有些许的不足。本来是想用触发器实现自动录入的,结果触发器编的有点问题与程序连接不可以,编程不行,结果改为纯手动输入,完成了基本功能。
    2 评论 37 下载 2020-11-30 15:24:11 下载需要10点积分
  • 基于Java和MySql实现的图书管理系统

    第一章 课题概述1.1 选题背景及意义图书管理系统主要用于图书馆的图书管理、读者管理、借阅信息管理。本图书管理系统以JAVA为开发语言,根据业务逻辑实现了相关功能,利用Swing开发了客户端图形界面,并使用Apache POI实现了报表生成功能。
    1.2 实验的主要工作本文就教普通用户及管理员可以使用的功能与权限进行分析,讲解图书管理系统的设计与实现。

    图书管理系统系统的需求分析。从两大角色介绍系统的业务需求,并说明接口需求以及该接口的目的
    用户和管理员与系统的交互设计。先描述系统的总体模块设计,然后从两个模块入手,分别介绍各个模块的设计
    图书管理系统相关功能的实现。从各个模块入手,介绍该模块的实现,包括用到的技术。使用MySQL技术,完成对数据的存储,查询等。使用Swing技术,完成对系统客户端的开发。使用Apache POI技术完成报表生成功能的开发
    图书管理系统的运行。根据不同的角色,按照各个角色的功能,介绍运行的结果

    1.3 实验报告的组织结构本文主要分为以下几个部分:

    第一章是绪论:主要介绍图书管理系统研究意义,研究背景,主要工作,章节安排等
    第二章是图书馆管理系统的需求分析:按总分总结构介绍系统的需求
    第三章是图书管理系统的设计:主要是对各个模块设计的分析,分析系统的功能和层次
    第四章是图书管理系统的实现:先描述数据库,接着对各个模块的实现进行介绍,主要包括其中的函数调用和接口
    第五章为系统测试:主要是图书管理系统的用例测试与接口测试

    第二章 需求分析2.1 系统总体需求本课题的目的是为高校开发一个图书管理系统。
    系统用例图

    整个系统分为2个模块。分别为:用户模块,管理员模块。主要用户分为两类,一个是普通用户,可以通过系统进行信息的填写提交、借书还书、续借缴费、个人信息查询、书籍信息查询等。另一个是管理员角色,通过系统可以帮助用户完成注册注销的功能,并能对图书进行管理(新书登记,旧书作废)。两个层次共同组成了图书管理系统。
    2.1.1 用户模块需求在该模块,涉及的主要角色是用户角色。
    用户模块用例图

    在用户模块,涉及了登录功能、图书借阅续借归还功能、书籍信息查询功能以及个人信息查询功能,对于用户角色,具体的用例说明如下表:



    用例
    功能




    登录
    通过注册的账号密码登录系统。


    基础信息填写
    填写基本信息,如:邮箱等。


    借书
    在押金足够的情况下可以借书


    还书
    还书时应判断是否超时,未超时则退还押金,超时则根据业务规则罚款


    续借
    未到归还日期时,如有需要可以续借,还书日期延长。


    查询用户信息
    用户自己查询自己的借书还书情况,押金剩余等等信息。


    查询书籍信息
    用户通过书籍名称查询书籍



    上表详细说明了在模块中,用户的需求,并针对用例图,说明了每个用例的功能。
    2.1.2 管理员模块需求管理员模块用例图




    用例
    功能




    缴费
    协助用户进行缴费


    新书登记,
    将书的相关信息记录入数据库中或从数据库中删除。


    旧书作废
    作废一定数目的旧书。


    登录
    通过管理员账号密码登录系统。


    查询书籍作者
    查询某本书的书籍作者。


    查询书籍价格
    查询某本书的书籍价格。


    查询书籍在库数量
    查询某本书的剩余数量。


    查询书籍总量
    查询某本书的总数量(含在库数量与借出数量)。


    查询书籍ISBN码
    查询某本书的国际标准书号。


    查询书籍编号
    查询某本书的图书馆内部编号,这个编号与放置的位置相关。


    借书
    在押金足够的情况下可以借书


    续借
    未到归还日期时,用户如有需要可以续借,收到信息后将还书日期延长。


    还书
    还书时应判断是否超时,未超时则退还押金,超时则根据业务规则罚款。



    上表详细说明了在模块中,管理员的作用,并针对用例图,说明了每个用例的功能。
    2.2 本章小结本章主要介绍了系统的需求分析,包括系统功能性需求,并通过使用用例图介绍了2个层次的功能,通过表格分析了用例图。
    第三章 图书管理系统系统设计本系统采用三层C/S架构,并采用了面向对象(OO)的风格。系统分为客户端(Client)和服务器端(Server)两个部分。在服务器端中,主线程负责监听端口及分配服务子线程,子线程利用面向对象中的多态,分别调用客户、管理员的处理函数,并对客户端的请求进行回复。客户端中,客户可以利用图形界面发起请求,客户端会根据服务器的返回信息进行提示,从而完成与客户的交互过程。
    3.1 总体系统功能设计本系统是基于Java开发的图书馆管理系统,用户登陆成功以后进入用户模块,可以完成用户的功能,如:借书还书续借缴费等。管理员登录成功进入管理员模块,可以协助用户完成:注销,缴费,退还押金等,同时还可以查询图书的相关信息并对图书进行管理。考虑到本系统的实际部署场景为图书馆内的自助借还电脑与管理员电脑,本系统仅需支持小规模的用户同时使用即可。本系统的总体设计如图3-1所示。
    图书管理系统模块设计图

    系统整体分为2个模块,分别是用户模块和管理员模块。用户模块主要包含登录系统,图书借阅管理、书籍信息查询、个人人信息查询功能,方便用户使用图书馆提供的服务;管理员模块主要包括登录系统、用户管理、书籍管理、书籍信息查询、个人信息查询功能;这两个模块组成了整个系统,完成了图书馆管理系统的一系列功能与服务。
    3.1.1 用户模块本项目为用户提供登陆的功能。当用户登录后,可以在界面上可以进行操作,完成图书的查询、借阅、续借、归还。除此之外,用户还可以查看书籍信息与个人信息等。模块中使用TCP Socket通信进行信息交互,将得到的字符串以约定方式解析后通过封装的前端组件进行展示。
    3.1.2 管理员模块本项目中管理员无需注册,登陆后可以协助用户进行缴费、注销等,同时管理员也可以进行借书、还书、续借、用户信息查询、书籍信息查询等操作。除此之外,管理员需要对书籍的信息进行管理,负责书籍的新书登记和旧书作废。此模块中使用TCP Socket通信进行信息交互,将得到的字符串以约定方式解析后通过封装的前端组件进行展示。
    3.2 体系结构设计本系统采用以三层C/S架构为主、面向对象为辅的混杂风格。系统分为客户端(Client)和服务器端(Server)两个部分。在服务器端中,主线程负责监听端口及分配服务子线程,子线程利用面向对象中的多态,分别调用客户、管理员的处理函数,并对客户端的请求进行回复。客户端中,客户可以利用图形界面发起请求,客户端会根据服务器的返回信息进行提示,从而完成与客户的交互过程。
    3.3 接口设计客户端与服务器端通信接口:遵循网络协议,满足局域网的通信需求。同时通过约定请求的消息类型,用于区分不同请求的解析方式与调用不同的方法。
    服务器端与MySQL数据库通信接口:利用JDBC与MySQL数据库进行通信,同时构建SQL类用于与数据库交互。SQL类中根据不同的功能提供数据库信息的增加、删除、更改、查询功能。实际调用时,使用SQL的单例化实例,传入相关数据,调用相应的API函数即可。
    3.4 本章小结本章主要介绍了该系统的设计。首先从总体出发,描述的系统的总体模块(用户和管理员),然后从2个模块详细分析他们的功能。在最后,并介绍了整体的设计风格和接口。
    第四章 图书管理系统系统的模块设计与实现4.1 数据库的设计本系统使用的数据库为MySQL,数据库名为BMS。数据库中有三个表,分别用于存储用户信息、书籍信息、借阅信息。其详细说明如下:
    4.1.1 用户信息表(user_information)

    User_account(String类型):用于存储用户账号
    Password(String类型):用于存储用户账号密码的实现
    email_address(String类型):用于存储用户的邮箱地址信息
    borrow_amount(Int类型):用于存储用户已经借阅的书本数量
    balance(Double类型):用于存储用户押金账户的余额

    4.1.2 书籍信息表(book_information)

    book_name(String类型):用于存储书籍名字
    directory_number(String类型):用于存储书籍的目录号
    ISBN(String类型):用于存储书籍的ISBN码
    Author(String类型):用于存储书籍的作者名
    amount_in_library (Int类型):用于存储书籍的在库数量
    amount(Int类型):用于存储书籍的总数
    price(Double类型):用于存储书籍的价格

    4.1.3 借阅信息表(borrow_information)

    borrow_user(String类型):用于存储本条借阅信息的借阅人
    book_name(String类型):用于存储本条借阅信息的书名
    borrow_date(Date类型):用于存储借出日期
    should_return_date(Date类型):用于存储书籍的应还日期
    renew(Boolean类型):用于存储此条借阅信息是否续借过

    4.2 用户模块的实现(侧重于服务器端的响应)
    通过主线程的start函数,启动服务器的服务,并对8080端口进行监听。当客户端尝试连接时,分配子线程进行响应。

    通过A型消息进行登录查证,并根据查证结果回复客户端并及时更新serverThread类中的currentPerson私有数据成员(currentPerson是父类person的指针,可以根据实例对象的不同进行多态调用。)服务器运行过程中会打印日志,用于监控服务器运行状态。


    功能实现举例:接受到K型消息时代表客户端发出续借请求,多态调用currentPerson.reBorrow函数即可利用SQL对象向数据库发出修改申请。同时会根据函数返回结果,回复客户端续借申请是否成功。客户端在接受到回复后,进行相应的提示。
    4.3 管理员模块的实现(侧重于服务器端的响应)
    通过主线程的start函数,启动服务器的服务,并对8080端口进行监听。当客户端尝试连接时,分配子线程进行响应。

    通过A型消息进行登录查证,并根据查证结果回复客户端并及时更新serverThread类中的currentPerson私有数据成员(currentPerson是父类person的指针,可以根据实例对象的不同进行多态调用。)服务器运行过程中会打印日志,用于监控服务器运行状态。


    功能举例:接收到L型消息时,代表管理员账户申请产生报表。多态调用urrentPerson.createReport函数,在这个函数中调用SQL类示例sql的产生报表函数。执行成功后,服务器回复客户端成功产生报表,客户端会提示管理员到服务器处查看报表。(由于报表中含有大量系统信息,出于安全考虑,我们决定不提供向客户端传送报表的API,以防止信息被简单地盗取。)
    4.4 本章小结本章主要介绍了系统的实现。介绍了实现时使用的关键性技术,并贴出了一些代码,以便理解。在介绍实现时,配上了完成的页面,与完成的页面相结合,更容易理解。
    第五章 系统测试5.1 外部界面测试 用户登录
    图书管理系统初始化界面,需要用户名和密码输入,用户和管理员可分别登录到对应个人界面。

    5.2 管理员内部界面测试管理员数据维护,首页默认为新书登记界面。
    添加书籍

    输入相应信息,点击确认上传按钮。
    旧书作废

    输入信息,点击确认按钮。
    查询用户信息

    输入用户名,键入回车,所需信息将在下面显示出来。
    查询图书信息

    输入书名,键入回车,所需信息将在下面显示出来。
    缴费

    输入用户信息和缴纳金额,点击确认按钮。
    注销

    输入要注销的用户名,键入回车,账号即注销,并显示当前余额数,进行相关操作。
    注册

    输入相应信息,点击确定注册按钮,并提示注册成功。
    报表

    点击菜单栏的报表按钮,生成报表。
    退出
    点击后显示退出成功直接返回上一层登陆界面。
    5.3 用户界面测试
    初始界面状态,用户选择操作菜单里的操作。
    借书

    用户选择一本可以借的书进行操作,否则会出现书籍被借走的情况。
    还书

    默认用户的书本还书成功,所以实际会根据实际书本的情况在数据库进行操作。
    续借

    用户选择要借的书本进行续借,这里也是和还书一个操作。
    书籍查询

    查询书籍信息,点击确认查询,返回信息。
    查询个人信息

    点击查询,将用户当前信息返回。
    第六章 实验小结本次实验中,我们设计、架构、实现、测试了图书管理系统,基本完成了实验的要求。从此次实验中我们也有了很多的收获和感悟。

    首先,我们明白了前期需求分析对项目后期实现的重大影响,前期的需求分析直接决定了架构风格、架构方式、实现技术的选择等诸多问题。从这次实验中,我们体会到了前期需求分析的重要性,了解了需求分析的基本方法和流程
    其次,我们了解到了架构设计对一个系统的重要性。好的架构应该是结构可靠、可用、安全、可修改、可变的,一个好的架构往往能降低后期实现与维护的难度和成本。由于本次的实验没有使用现成的web框架,因此需要我们自行搭建系统的框架。在我们小组成员的努力下,我们认为我们完成的系统框架基本满足具有良好延展性、高内聚低耦合的特点
    同时,此次实验中我们实践了上个学期UML课程的相关知识,使用了用例图进行用例分析,使用了包图、类图明确系统架构与接口。这些UML技术的使用,极大地方便我们展现系统的架构,也成功地帮助开发人员理解架构设计与实现方法
    最后,我们体会到了架构风格的选取对实现的重要性。我们选取的三层C/S分层架构。不同层之间的解耦合使得不同层之间可以独立开发,最后再进行统一的接口对接和集中测试。这个特点使得开发人员的工作效率极大的提高。事实上,我们的功能层开发进度是略慢于表现层的,但表现层的进度并没有被拖慢,而是提前于计划完成开发,这无疑得益于三层C/S架构层与层之间的解耦合。同时,面向对象(OO)的使用,使得我们系统更加简洁,也使得系统在日后的拓展更为方便
    6 评论 49 下载 2021-02-28 09:29:52 下载需要10点积分
  • 基于JAVA和SQL SERVER实现的图书借阅管理系统

    1 引言1.1 课程设计目的按照关系型数据库的基本原理,综合运用所学的基本知识,设计开发一个小型的管理信息系统。通过对一个实际问题的分析、设计与实现,将原理与应用相结合,使学生学会如何把书本上学到的知识用于解决实际问题,培养学生的动手能力,另一方面,使学生能深入理解和灵活掌握教学内容。
    1.2 本选题的设计背景当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。
    尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。本系统就是为了管理好图书馆信息而设计的。
    图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理,现今己有很多图书馆都配备了图书借阅管理系统(在高校图书馆尤为常见),方便读者对所需图书的查找借阅及管理员对图书的管理。据调查,在未引入图书借阅管理系统之前,图书馆对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于图书借阅情况(如借书天数、超过限定借书时间的天数)的统计和核实等往往采用对借书卡的人工检查进行,对借阅者的借阅权限、以及借阅天数等用人工计算、手抄进行。数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统,规范的信息管理手段。因此,随着技术的发展,开发适合图书馆自身情况的图书借阅管理系统便成了一种趋势。本课设就是在这样的背景下,参考多数高校的图书借阅管理系统而进行开发的。
    1.3 相关技术介绍1.3.1 数据库技术介绍数据库技术是信息系统的一个核心技术。是一种计算机辅助管理数据的方法,它研究如何组织和存储数据,如何高效地获取和处理数据。是通过研究数据库的结构、存储、设计、管理以及应用的基本理论和实现方法,并利用这些理论来实现对数据库中的数据进行处理、分析和理解的技术。即:数据库技术是研究、管理和应用数据库的一门软件科学。
    1.3.2 Java开发技术Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点,可编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等项目,是当前使用最广的计算机语言之一。
    1.3.3 面向对象编程技术面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。Java开发技术就是属于一种面向对象编程的技术。
    1.3.4 软件需求分析技术软件需求分析就是把软件计划期间建立的需求可行性分析求精和细化,分析各种可能的解法,并且分配给各个软件元素。需求分析是软件定义阶段中的最后一步,是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。
    1.4 项目开发环境与工具
    系统开发环境:Windows 10
    编程开发语言:Java
    Java JDK版本:JDK 1.7
    编译软件: Eclipse
    数据库软件:SQL Server 2014

    2 需求分析2.1 信息需求
    用户信息

    用户ID(ID)用户名(Username)用户密码(Password)用户权限(Power)
    书籍信息

    书籍ID(BookID)书名(BookName)出版社(Press)作者(Author)地址(Address)出版日期(PressDate)价格(Price)备注信息(Com)书本数目(books_count)被借数(borrowed_count)
    书籍借阅信息

    借阅序列号(ID)用户ID(ID)学生姓名(StudentName)书籍ID(BookID)书名(BookName)归还日期(ReturnDate)借书日期(BorrowDate)备注信息(Com)是否已归还(Is_Returned)

    2.2 系统需求概述设计图书馆信息管理系统要考虑的问题很多。本程序的实例对实际系统作了适当的简化。需求概述如下:

    系统能对书籍信息进行管理。书籍的信息包括:书籍名称、出版社、作者、出版社地址、出版日期、价格、书籍数量、书籍借出数量。书籍管理功能包括:添加书籍、修改书籍信息、删除书籍。添加书籍时,可设定新书数目,几本完全相同的书籍作为一条记录管理
    系统不需要管理借阅者除姓名外的信息。对每一名借阅者最多可借阅的书籍数目不做限定
    借书时,管理人员记录借书者ID、借书者姓名、书籍ID、借阅书籍名称和借阅日期
    还书时,管理人员记录还书者姓名、归还书籍名和还书日期。系统暂时不设定书籍的最长借阅时间
    操作人员可以根据书籍名称、作者、出版社三者之一或者三者的任意组合查询书籍信息。系统暂时不具备模糊查询的功能
    操作人员可以查询借阅某书籍的所有借阅者姓名;也可以查询借阅者借阅的所有书籍名称;还可以根据借阅者姓名、书籍名称查询借阅者的借书时间、还书时间
    系统由图书馆工作人员操作、图书馆工作人员分为系统管理员、书籍管理员和学生三类。系统管理员具有所有操作权限;书籍管理员具有书籍管理、查询信息权限但不具备管理借书还书事宜及管理用户权限;学生具有管理借书还书、查询信息权限,但不具备管理书籍和用户的权限
    系统管理员负责管理系统用户,可以增减用户、修改用户密码和删除用户
    所有操作人员凭账号和密码登陆系统

    2.3 功能需求
    用户管理:该功能又包含以下三项子功能:

    用户登录添加用户修改用户密码删除用户
    书籍管理:书籍管理功能包括以下三项子功能:

    添加书籍修改书籍删除书籍
    借书管理:该功能包括以下两项子功能:

    书籍出借出借信息修改
    还书管理:该功能包括以下两项子功能:

    书籍还入书籍还入信息修改信息查询:该功能包括以下三项子功能:书籍信息查询借阅信息查询系统用户列表

    2.4 安全性与完整性需求
    实体完整性约束:关系中的主属性不能为空,在数据库中使用Primary Key实现
    参照完整性约束:读者与书籍、出版社与书籍、读者与读者身份、借还情况与读者和书籍表之间采用级联更新和级联删除
    用户自定义的完整性约束:规定姓名、书名和借书日期不为空
    设计表间关系:用户表通过用户ID与表联系,书籍表通过书籍ID与表联系,借阅表通过书籍ID、读者姓名与书籍表和用户表联系
    限制的设置:只有管理员可实现对用户及书籍信息的管理,其他实体都不行,防止系统遭到管理员外的人员破坏;用户或管理员必需登录帐号才能进行操作,防止非法人员进入使用系统
    实现自主存取控制:数据库创建了两个登录名Yujie_Yang和UserLogin,用Yujie_Yang登录SQL Server,具有超级管理员权限,用UserLogin登录,则只具有部分权限。两个用户都只能对LibraryBase数据库进行操作,无法操作其他数据库,保证了其他数据库的安全性

    2.5 数据字典数据项



    数据项名
    别名
    数据 类型
    数据长度
    取值范围
    简述




    用户ID
    ID
    整型
    5位
    由不同的数字组成
    唯一标识用户身份


    用户名
    UserName
    字符型
    40位
    只能由汉字或者英文字母组成
    用户登录时的用户名


    用户密码
    Password
    字符型
    40位
    40位以内数字或英文字母
    用户登录密码,与用户账号对应使用


    用户权限
    Power
    字符型
    40位
    系统管理员、书籍管理员、学生
    标识登录用户的权限


    书籍ID
    ID
    整型
    5位
    由不同的数字组成
    书籍的唯一标识


    书名
    BookName
    字符型
    20位
    由汉字或英文字母组成
    书籍的名字


    出版社
    Press
    字符型
    20位
    由汉字或英文字母组成
    书籍的出版社信息


    作者
    Author
    字符型
    20位
    由汉字或英文字母组成
    书籍的作者名


    地址
    Address
    字符型
    20位
    由汉字或英文字母组成
    书籍的出版地址


    出版日期
    PressDate
    字符型
    10位
    日期表示
    书籍的出版日期


    价格
    Price
    字符型
    10位
    由数字和汉字组成
    书籍的价格


    备注
    Com
    字符型
    20位
    由字符,数字以及汉字组成
    书籍的备注信息


    总数量
    books_count
    字符型
    2位
    由数字组成
    每本书籍的总数量


    被借书数量
    borrow_count
    字符型
    2位
    由数字组成
    每本书籍被借阅数量


    还书日期
    ReturnDate
    字符型
    10位
    日期表示
    每本书籍被借阅时间


    借书日期
    BorrowDate
    字符型
    10位
    日期表示
    每本书籍被归还时间


    已还
    Is_Returned
    字符型
    2位
    是、否
    标识书籍是否被归还



    数据结构



    名称
    别名
    含义
    组成




    用户表
    UserTable
    用户的基本信息
    用户ID,用户名,用户密码,用户权限


    书籍表
    books
    书籍的基本信息
    书籍ID,书名,出版社,作者,地址,出版日期,价格,备注,总数量,被借书数量


    借阅表
    booksBrowse
    借阅信息
    借阅信息ID,学生姓名,书名,还书日期,借书日期,备注,已还



    数据流



    名称
    用户信息




    含义
    系统管理员、借阅管理员、学生的基本信息


    来源
    用户输入电脑的用户名、密码、用户权限


    去向
    系统主菜单


    组成
    用户名,用户密码、用户权限






    名称
    书籍信息




    含义
    管理员录入的书籍信息


    来源
    管理员在电脑上录入的书籍信息


    去向
    书籍记录


    组成
    书籍ID,书名,出版社,作者,地址,出版日期,价格,备注,总数量,被借书数量






    名称
    借阅信息




    含义
    管理员录入的借阅信息


    来源
    管理员在电脑上录入的借阅信息


    去向
    借阅记录


    组成
    ID,学生姓名,书名,还书日期,借书日期,备注,已还






    名称
    查询书籍信息




    含义
    查询图书管理系统中的书籍信息


    来源
    管理员在电脑上录入的书籍信息


    去向
    输出框中的书籍信息


    组成
    书名,出版社,作者,地址,出版日期,价格,备注






    名称
    查询借阅信息




    含义
    查询图书管理系统中的书籍借阅信息


    来源
    管理员在电脑上录入的书籍借阅信息


    去向
    输出框中的书籍借阅信息


    组成
    借阅者,书名,借阅日期,归还日期,备注






    名称
    查询用户信息




    含义
    查询该系统的所有用户信息


    来源
    数据库和系统管理员输入的信息


    去向
    输出框中的用户信息


    组成
    用户名,权限



    数据存储



    名称
    用户记录




    含义
    用户的基本信息


    组成
    用户ID,用户名,用户密码,用户权限


    关键字
    用户ID


    关联处理
    书籍借阅,书籍归还,查询用户信息






    名称
    书籍记录




    含义
    书籍的基本信息


    组成
    书籍ID,书名,出版社,作者,地址,出版日期,价格,备注,总数量,被借书数量


    关键字
    书籍ID


    关联处理
    查询书籍信息,书籍出借,书籍归还






    名称
    借阅记录




    含义
    书籍借阅信息


    组成
    ID,学生姓名,书名,还书日期,借书日期,备注,已还


    关键字
    ID


    关联处理
    查询借阅信息



    处理过程



    名称
    查询用户信息




    含义
    查询系统中的用户信息


    输入数据流
    用户信息


    处理
    在数据库中查询所有的用户信息,显示到用户信息表格


    输出数据流
    用户信息表格






    名称
    查询书籍信息




    含义
    查询系统中的书籍信息


    输入数据流
    书籍信息


    处理
    在数据库中查询所有的书籍信息,显示到书籍信息表格


    输出数据流
    书籍信息表格






    名称
    查询借阅信息




    含义
    查询系统中的书籍借阅信息


    输入数据流
    借阅信息,学生名字,书名


    处理
    在数据库中查询所有的借阅信息,显示到书籍借阅信息表格


    输出数据流
    书籍借阅信息表格






    名称
    书籍出借




    含义
    书籍出借


    输入数据流
    ID,学生姓名,书名,还书日期,借书日期,备注,已还


    处理
    将输入信息整理汇总到书籍借阅记录中


    输出数据流
    书籍借阅记录






    名称
    书籍归还




    含义
    书籍归还


    输入数据流
    还书者姓名,书名,日期,备注


    处理
    将输入信息整理汇总到书籍借阅记录中


    输出数据流
    书籍借阅记录



    3 概念结构设计3.1 概念模型:ER图实体及属性

    学生(用户ID,用户名,用户密码,权限)管理者(用户ID,用户名,用户密码,权限)图书(书籍ID,书名,作者,数量,出版社,价格,地址,出版日期)
    关系及属性:帐号管理,书籍管理,借阅(借书日期、还书日期)
    根据以上信息,编制如下的E-R模型图:
    书籍ER图

    学生ER图

    管理员ER图

    总E-R模型图

    4 逻辑结构设计4.1 关系模型:所有表结构及范式分析等采用C/S逻辑结构的设计。管理员直接通过数据库登录密码登录,其他每一个用户登录都要输入用户名和密码以验证身份。然后在后台数据库系统查询用户是否存在,返回给用户一个结果。用户根据自己的权限进行相应的操作。
    关系模型为(满足第三范式3NF):

    用户表UserTable(用户ID,用户名,用户密码,用户权限)
    书籍表books(书籍ID,书名,出版社,作者,地址,出版日期,价格,备注,总数量,已借走数量)
    借阅表booksBrowse(ID,书名,学生姓名,出版社,作者,地址,借/还书日期,价格,备注,总数量,已借走数量)
    备注:a. ID字段均被设置为“标识”,标识种子为1,增量为1。被设置为“标志”的字段的数据必须为数值类型;b. 下划线表示主键。

    4.2 用户子模式该管理系统只有一个图书借阅子模式,如下所示:

    程序中应用:

    4.3 应用程序功能模块图
    4.4 安全性(用户类别和权限)设计和实现说明
    系统管理员

    拥有系统的所有权限(即系统管理、书籍管理、借书管理、还书管理、信息查询、帮助)
    书籍管理员

    拥有管理书籍的权限(即书籍管理、信息查询、帮助)
    学生

    拥有借阅书籍的权限(借书管理、还书管理、信息查询、帮助)

    用户权限说明




    系统管理员
    书籍管理员
    学生




    用户登录





    添加用户

    ×
    ×


    修改用户密码

    ×
    ×


    删除用户

    ×
    ×


    添加书籍


    ×


    修改书籍


    ×


    删除书籍


    ×


    书籍出借

    ×



    修改书籍借阅信息

    ×



    书籍还入

    ×



    修改书籍还入信息

    ×



    书籍信息查询





    借阅信息查询





    查看用户列表

    ×
    ×



    4.5 完整性(主、外码和用户自定义的完整性约束)设计和说明
    实体完整性约束:关系中的主属性不能为空,在数据库中使用Primary Key实现
    参照完整性约束:借阅表中设置用户ID和书籍ID为外码,限制借阅表中出现非法的数据
    用户自定义的完整性约束:规定姓名、书名和借书日期不为空

    5 数据库物理设计5.1 所有索引的定义
    在用户编号上建立索引,加快查询速度:
    create unique index user_num on UserTable(ID);
    在书籍编号上建立索引,加快查询速度:
    create unique index book_num on books(BookID);

    5.2 数据的存放位置说明本地磁盘:
    C:\Program Files\Microsoft SQL Server\MSAS12.MSSQLSERVER\OLAP\Data

    5.4 模块设计(模块IPO图)
    6 数据库实施6.1 数据库备份右键数据库->任务->备份:

    将完整的数据库进行备份,选择备份磁盘路径:

    备份完成:

    7 数据库运行与维护7.1 系统使用说明管理员登陆界面

    书籍出借

    借书管理提供书籍借阅服务,借书者可通过该服务查询借阅相关书籍(还书管理与此类似,故不赘述)。
    书籍查询

    用户登录

    核心代码:
    public void actionPerformed(ActionEvent e) { if (e.getSource() == cancelBtn) { //取消按钮 mainFrame.setEnable("else"); this.dispose(); } else { char[] password = passwordTextField.getPassword(); String passwordSTR = new String(password); if (userTextField.getText().trim().equals("")){//用户名为空 JOptionPane.showMessageDialog(null, "用户名不可为空!"); return; } if (passwordSTR.equals("")) { //密码为空 JOptionPane.showMessageDialog(null, "密码不可为空!"); return; } String strSQL; strSQL = "select * from usertable where UserName='" + userTextField.getText().trim() + "'and Password='" + passwordSTR + "'"; rs = db.getResult(strSQL); boolean isExist = false; try { isExist = rs.first(); } catch (SQLException sqle) { System.out.println(sqle.toString()); } if (!isExist) { JOptionPane.showMessageDialog(null, "用户名不存在或者密码不正确!"); mainFrame.setEnable("else"); } else { try { rs.first(); mainFrame.setEnable(rs.getString("power").trim()); db.closeConnection(); this.dispose(); } catch (SQLException sqle2) { System.out.println(sqle2.toString()); } }
    借阅信息查询

    核心代码:
    public void actionPerformed(ActionEvent e) { if (e.getSource() == clearBtn) { borrowedBookStudentTextField.setText(""); borrowedBookNameTextField.setText(""); borrowedDateTextField.setText(""); borrowedCommentTextField.setText(""); } else if (e.getSource() == cancelBtn) { this.dispose(); } else if (e.getSource() == yesBtn) { try { String strSQL = "select studentName,bookName,borrowDate,com from BookBrowse where studentName='" + borrowedBookStudentTextField.getText().trim() + "'and bookName='" + borrowedBookNameTextField.getText().trim() + "'"; rs = db.getResult(strSQL); if (!rs.first()) { JOptionPane.showMessageDialog(null, "此学生没有借过书!或者没有此书!"); } else { borrowedBookStudentTextField.setText(rs.getString(1).trim()); borrowedBookNameTextField.setText(rs.getString(2).trim()); borrowedDateTextField.setText(rs.getString(3).trim()); borrowedCommentTextField.setText(rs.getString(4).trim()); updateBtn.setEnabled(true); } } catch (Exception ex) { System.out.println(ex.toString()); } } else if (e.getSource() == updateBtn) { String strSQL = "update bookBrowse set borrowDate='" + borrowedDateTextField.getText().trim() + "',com='" + borrowedCommentTextField.getText().trim() + "' where studentName='" + borrowedBookStudentTextField.getText().trim() + "'and bookName='" + borrowedBookNameTextField.getText().trim() + "'"; if (db.updateSql(strSQL)>0) { JOptionPane.showMessageDialog(null, "更新成功!"); db.closeConnection(); this.dispose(); } else { JOptionPane.showMessageDialog(null, "更新失败!"); db.closeConnection(); this.dispose(); }}
    7.2 系统测试方案和测试报告7.2.1 系统测试方案这次课设的主要目的是数据库的设计与对数据库基本操作的实现,所以采用黑盒测试,测试系统的功能实现。
    7.2.2 测试报告在数据库中有系统管理员、书籍管理员、学生三类用户,方便操作。

    管理员登录

    激活系统菜单:系统菜单全部激活,系统管理员可以进行所有操作

    添加管理员:添加小明为书籍管理员,密码初始化为0000,数据库发生对应变化


    添加书籍:添加书籍《编译原理》及相应信息,数据库对应发生变化


    借阅书籍:书籍借出,点击下拉框可以选择要借的书籍


    借阅信息查询:选择借阅信息查询,可以看到名叫张三的学生借了一本书

    归还书籍:输入还书者姓名和日期进行书籍归还,数据库发生对应变化


    用户列表:管理员可查看用户列表信息

    7.3 测试评价7.3.1 总体评价本图书借阅管理系统基本实现了一个图书馆中的基本功能。在界面上还是做得一般的,没有凸显出一个图书馆界面,但是总体上的感觉还行。各大功能模块的基本功能足够满足每一个用户的需要,能实现对数据库的增删改查功能,基本上实现了系统的总体功能。但由于自身的数据库水平和Java水平的有限,所以在开发一个图书借阅管理系统时还是显得比较乏力,在开发的过程中也凸显出许多不足,如UI设计不是很好等,以后会针对本次课设的不足和问题进行对应的学习,希望下次能开发出更好的系统出来。
    7.3.2 缺陷与不足本系统缺点也是比较多的,如UI做的不过好,精简了很多图书馆的实际管理功能,数据库设计的不够规范,数据库的逻辑结构和物理结构设计没有考虑完整。虽然只是模拟图书馆的借阅管理系统,但是实际还应该考虑更多因素,如发生故障如何处理、用户超期未归还书籍如何处理,等等。在逻辑结构优化方面做的也不够好,没有提供一个合理的逻辑结构,仍需做很多优化,这些留待以后对数据库及软件开发知识的深入学习后再继续改进。
    8 系统安装说明本系统需要在JDK环境下进行使用,建议使用MyEclipse或Eclipse进行安装使用,具体步骤如下:

    MyEclipse或Eclipse导入工程文件,查看环境是否有错,有的话进行调整
    用SQL Server导入数据库文件
    创建一个数据源,该数据源必须属于某一个数据库用户,然后通过JDK本身自带的JDBC ODBC驱动器加载驱动然后指明路径,连上数据库
    编译运行程序,弹出图书借阅管理系统界面,开始使用

    9 收获和体会这次数据库的实验可以来说是所有课程设计中最难的了,因为要设计成一个小型数据库来实现某一个现实生活中存在的工作系统,涉及到数据库知识和数据库与某一些高级语言的知识,所以要设计好一个好的小型数据库是不容易的。
    总体来说我选择的是我熟悉的Java搭配上实验课所学的SQL Server的知识来构建一个图书馆管理系统。在两个星期的设计过程中可以来说是困难重重,因为完全没用过Java的JDBC功能,所以要不断的查找Java的API文档才能了解它的工作原理,在重复无数次后最终实现了与数据库的链接。在图形界面上也就是GUI上面我用Java的图形界面功能,所以大部分时间主要是链接数据库方面,反而在图形界面上我做的不是很好,只是简单设计了一下图形界面,包括各个菜单选项的实现,比较简洁的风格。
    这次在数据库的链接方面花了很大功夫,主要是不明白JDBC如何才能连上SQL Server,通过不断的找资料和上网查资料最后明白了,我们要先创建一个数据源,该数据源必须属于某一个数据库用户,然后通过JDK本身自带的JDBC ODBC驱动器加载驱动然后指明路径,就可以连上数据库了。虽然花了两天功夫才弄明白,不过我觉得还是值得的,毕竟我以后就不会再犯同样的错误了,而且对于Java有了更深的了解了。
    最后终于成功了,还是觉得收获很大的。对于以后我们了解一个数据库软件的如何实现有很大的帮助。数据库在我们生活中到处都存在,所以要设计好一个数据库要在逻辑结构设计方面下够功夫才行,否则的话会在后面实现阶段吃很大的苦头!
    改进建议:

    改进UI界面,使界面体验更良好,交互性更强
    优化数据库,建立多几张表,使数据库功能不会过于集中在三张基本表上,加强各张表之间的联系
    优化程序,加多必要的注释,方便他人阅读时理解程序
    优化测试,解决系统潜在的漏洞

    10 附录以附录形式给出创建数据库及数据库对象的SQL脚本文件;
    use LibraryBase; CREATE TABLE UserTable( ID int, UserName char(40) not null, Password char(40) not null, Power char(40) not null, CONSTRAINT ID_User_Containt PRIMARY KEY (ID));CREATE TABLE books( BookID int, BookName char(20) not null, Press char(20), Author char(20), Address char(20), PressDate char(10), Price char(10), Com char(20), books_count char(2), borrowed_count char(2), CONSTRAINT ID_Contraint_PK PRIMARY KEY (BookID));CREATE TABLE bookBrowse( ID int identity, StudentID int, StudentName char(40), BookID int, BookName char(20), ReturnDate char(10), BorrowDate char(10), Com char(40), Is_Returned char(2), CONSTRAINT ID_BookBrowse_Containt PRIMARY KEY (ID), CONSTRAINT FK_StudentID foreign key(StudentID) references UserTable(ID), CONSTRAINT FK_BookID foreign key(BookID) references books(BookID),);create unique index user_num on UserTable(ID);create unique index book_num on books(BookID); create view Student_Borrow(ID,UserName,BookID,BookName,ReturnDate,BorrowDate,Com)as select UserTable.ID,UserTable.UserName,books.BookID,books.BookName,ReturnDate,BorrowDate,bookBrowse.Com fromUserTable,books,bookBrowse where UserTable.ID = bookBrowse.StudentID and books.BookID = bookBrowse.BookID;select * from Student_Borrow;select * from UserTable;select * from books;select * from bookBrowse;INSERT INTO UserTable values (1,'yang','123456','系统管理员');INSERT INTO UserTable values (2,'小明','1111','学生');INSERT INTO UserTable values (3,'小红','6666','学生');INSERT INTO UserTable values (4,'杨劲','6666','学生');INSERT INTO UserTable values (5,'许伟杰','6666','学生');INSERT INTO UserTable values (6,'yuan','6666','书籍管理员');INSERT INTO books values (1,'C语言','华南理工出版社','谭浩强','中国广州','2015/1/1','20元','可借出','20','0');INSERT INTO books values (2,'编译原理','清华大学出版社','王生原','中国北京','207/1/2','18元','可借出','10','0');INSERT INTO books values (3,'数据结构','华南理工出版社','张三','中国广州','2011/1/1','40元','可借出','20','0');INSERT INTO books values (4,'算法导论','电子工业出版社','李四','中国深圳','2012/1/1','30元','可借出','20','0');INSERT INTO books values (5,'Android','华南理工出版社','王五','中国广州','2014/1/1','40元','可借出','20','0');INSERT INTO books values (6,'计算机图形学','电子工业出版社','赵六','中国香港','2012/1/1','30元','可借出','20','0');INSERT INTO bookBrowse values (2,'小明',1,'C语言','2018/1/9','2018/1/8','西区','是');INSERT INTO bookBrowse values (3,'小红',1,'C语言','2018/1/9','2018/1/5','西区','是');INSERT INTO bookBrowse values (5,'许伟杰',2,'编译原理',null,'2018/1/5','西区','否');create login Yujie_Yang with password='123456', default_database=LibraryBase;create user user1 for login Yujie_Yang with default_schema=dbo;exec sp_addrolemember 'db_owner', 'user1';create login UserLogin with password='666', default_database=LibraryBase;create user user2 for login UserLogin with default_schema=dbo;GRANT INSERT, UPDATE, DELETE, SELECTON booksTO user2GOGRANT INSERT, UPDATE, DELETE, SELECTON bookBrowseTO user2GO
    23 评论 1248 下载 2018-11-05 21:12:55 下载需要15点积分
  • 基于c++的俄罗斯方块游戏

    一、基本要求
    综合实验设计可采取一人一设计,也可以组成小组,每组成员(不得超过4人)分工合作完成一个设计,每个人的任务不同
    要求利用面向对象程序设计方法以及C++的编程思想来完成系统的设计
    要求有菜单、文件操作,数据使用数组、结构体等均可,键盘操作或鼠标操作均可
    所编写的程序必须上机通过,并获得满意的结果
    完成综合实验设计报告书

    二、实验内容2.1 实验题目俄罗斯方块小游戏
    2.2 问题描述俄罗斯方块是在一个m*n 的矩形框内进行的,矩形框的顶部会随机的出现一个有四个小方块组成的砖块,每过一段时间,就会下落一格,知道他碰到底部,然后再过一个时间下落另一个砖块,依次进行,砖块是随机出现的。当发现底部砖块是满的话,则消去它从而得到相应设置的分数,当砖块到达顶部的时候,游戏结束。选择俄罗斯方块进行C++面向对象程序设计课程设计主要是在学习C++这门面向对象语言的基础上,并通过实践加深对 C++面向对象程序设计语言特点的认识与理解。同时,可以提高运用C++编程语言解决实际问题的能力;锻炼实际的编程能力;还能提高调查研究、查阅技术文献、资料以及编写软件设计文档的能力。
    2.3 功能要求
    实现方块的变形、下落、左移、右移消行等基本的功能
    实现方块暂停、判断分数以及等级设置功能
    界面窗口、以及小方块图形设计功能

    2.4 算法分析游戏中会出现6大类,19种形状类型,每种形状在游戏中都能够旋转,形成新的形状。每种形状都是由方形的色块组成的。

    程序中方法void make_tetris(struct Tetris *tetris):穷举出19中方块形状类型
    方法int if_moveable(struct Tetris *tetris)判断方块是否可以移动
    方法void get_flag(struct Tetris *tetris)随机产生19中方块形状类型的序号用于区分不同的形状
    方法void print_tetris(HANDLE hOut,struct Tetris *tetris)打印随机生成的俄罗斯方块
    方法void clear_tetris(HANDLE hOut,struct Tetris *)用于清除俄罗斯方块的痕迹
    方法void del_full(HANDLE hOut,struct Tetris *)判断方块是否满行

    三、概要设计3.1 俄罗斯方块功能设计图
    3.2 功能描述
    方块操作功能:在方块下落时,可以通过键盘左方向键← 和 右方向键→ 控制方块在下降的过程中向左移动、向右移动。方向键↑控制方块的变形
    得分功能:每消除一行得100分。以此累加
    等级提升功能:当得分为1000分时(即消除10行),等级提升一级
    方块速度控制:默认速度是400ms,每当等级提升一级时,下降时间减少20ms
    游戏控制:空格键游戏暂停,再次点击空格键,游戏继续。当点击Esc按键时退出游戏

    四、详细设计//声明俄罗斯方块的结构体struct Tetris{ int x; //中心方块的x轴坐标 int y; //中心方块的y轴坐标 int flag; //标记方块类型的序号 int next; //下一个俄罗斯方块类型的序号 int speed; //俄罗斯方块移动的速度 int count; //产生俄罗斯方块的个数 int score; //游戏的分数 int level; //游戏的等级};
    五、程序运行结果测试与分析5.1 开始游戏测试
    5.2 方块变形测试
    5.3 游戏结束

    5.4 退出游戏测试
    5.7 分析总结运行程序,方块可以产生,并通过左右方向键可以控制方块的左右移动,通过方向键↑,可以改变当前方块的旋转角度,并通过方向键可以将改变后的方块堆放在适合的位置,。当方块堆满一行时,将满行方块消除,得分加100,当得分满1000分时,等级提升1,同时下降速度提升20ms。当方块堆到顶时提示游戏结束,使用空格键可以控制游戏暂停,使用Esc键可以退出游戏。
    六、结论与心得通过本次综合设计,掌握了C++面向对象的开发思想,对于复杂的问题学会从全局思考,分解问题并将模块化、画出结构图、设置好变量、留足修改与增添的空间、设计好测试的平台。其次写一个函数就测试一个函数可很好的解决程序改错的问题、联系自己已解决的问题可减少在去写类似函数的工作量 。巩固了C++的基础知识,并熟练的应用,为以后从事c++编程开发,打下了良好的基础。
    2 评论 72 下载 2019-05-29 19:57:17 下载需要10点积分
  • 基于Android Studio实现的新闻APP

    一、作业题目实现一个安卓新闻类App,最低支持安卓系统版本为5.1(minSdkVersion 为API 16 https://developer.android.com/guide/topics/manifest/uses-sdk-element.html )
    二、作业描述互联网科技的发展让新闻的传播从报纸、广播、电视等方式发展到了网页以及最近几年兴起的手机app客户端,人们获取新闻的方式变得异常容易。手机上的新闻app让大家随时随地掏出手机即可看天下事,手机新闻app不再是一个简简单单的新闻获取工具,许多app已经利用数据挖掘构建出了新闻推荐引擎,为用户提供个性化、更有价值的新闻,例如今日头条、天天快报等。
    现在让我们也来尝试一下做一个新闻app!本次大作业的任务就是实现一款新闻获取的工具类软件,其中新闻数据采用的是腾讯网的rss,同学们根据相关rss数据和作业要求利用课上所学的Java和android开发知识实现一个新闻客户端即可。
    三、接口描述本次大作业需要开发的系统结构如图1所示,实现了新闻内容的抓取和存储;客户端从服务器拉取新闻,是学生需要完成的部分,包括新闻频道获取、展示和管理,新闻列表的获取、展示以及刷新,新闻收藏、分享等。
    中文新闻所用的rss为:http://rss.qq.com/index.html ,需要简单了解rss相关知识。
    四、具体实现4.1 新闻列表4.1.1 UIAPP主界面布局xml如下:
    <android.support.design.widget.CoordinatorLayout <android.support.design.widget.AppBarLayout <android.support.v7.widget.Toolbar/ > <android.support.design.widget.TabLayout/ > </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager/></android.support.design.widget.CoordinatorLayout>
    其中CoordinatorLayout用于协调布局中的部件的滑动,AppBarLayout用于显示标题并添加菜单,ViewPager用于显示新闻列表。
    ViewPager中包含多个Fragment,每个Fragment布局xml如下:
    <android.support.v4.widget.SwipeRefreshLayout <android.support.v7.widget.RecyclerView/></android.support.v4.widget.SwipeRefreshLayout>
    其中SwipeRefreshLayout用于添加下拉刷新操作,RecyclerView中以垂直线性布局的方式显示新闻条目。
    RecyclerView中的新闻条目布局xml如下:
    <LinearLayout android:orientation="vertical"> <TextView android:id="@+id/title"/> <LinearLayout android:orientation="horizontal"> <TextView android:id="@+id/source"/> <TextView android:id="@+id/datetime"/> </LinearLayout></LinearLayout>
    即每个条目分为两行,第一行为新闻标题,以较大字体显示,第二行为新闻来源和发布时间,分别位于第二行左侧和第二行右侧,以较小字体显示。
    4.1.2 功能实现新闻列表中主要实现了以下功能:
    下拉刷新获取新的新闻该功能通过重载SwipeRefreshLayout中的onRefresh()功能实现。用户下拉页面会自动调用onRefresh()函数,app后台向服务器申请新闻数据,并更新后台的新闻列表;随后会调用Fragment的Adapter的notifyDataSetChanged函数,更新UI界面上所显示的数据。
    上拉加载更多旧的新闻该功能通过给RecyclerView添加SrollListener监测用户下拉动作,当列表下拉至接近最下端时,会向后台申请更多新闻数据,并调用notifyDataSetChanged函数更新UI界面上的数据。
    新闻列表本地存储该功能通过使用SQLiteOpenHelper类为app添加后台数据库,并在向服务器申请更新数据时将更新的数据放入数据库中。在app开启时会从数据库中取出新闻数据加载到内存中。
    新闻是否看过的灰色标记该功能通过新闻列表中ViewHolder的onClick函数实现。当用户点击某一新闻条目时,会更改该条目的颜色为灰色。同时,阅读标记也会被更新到数据库中,下一次打开程序时灰色标记不会消失。
    新闻搜索该功能通过主页面上的Menu中的条目点击实现。点击Menu中的search条目会弹出AlertDialog搜索框。搜索功能通过对后台新闻数据进行搜索实现,并将搜索到的新闻显示在search Fragment上。









    搜索示例1
    搜索示例2



    新闻分类添加和删除操作该功能通过主页面上的Menu中的条目点击实现。点击Menu中的category条目会弹出多选框,对需要的category进行选中即可。用户选中后点击确定,调用函数对后台选中category的数据进行更新,并调用notifyDataSetChanged函数添加和清除相关页面。

    4.1.3 工作难点与亮点
    页面布局,使用了比较新的控件,需要学习的东西较多。在协调TabLayout和ViewPager中碰到较多问题,包括标题不显示,ViewPager显示空白等
    数据加载,FragmentStatePagerAdapter使用较复杂。碰到了更新后台数据前台不刷新,以及删除Fragment后页面错位的问题。通过上网查阅资料,重载getItemPosition函数得以解决。此外使用了Loader类,对数据进行加载和更新
    新闻分类和删除操作中,对Fragment的重构析构操作较多,碰到了一些问题

    4.2 分享功能4.2.1 实现方式通过调用Android自带的原生分享功能Active_Send实现。由于微信SDK的问题,在同时分享文本与图片上遇到一些问题:微信6.6.7版本以后无法再使用”Kdescription”进行图片与文本的共同分享。
    4.2.2 工作难点与亮点图片URL获得方法通过针对不同版本的android系统,重载不同的WebView的shouldInteruptRequest方法,在WebView加载网页时获取所加载资源的URL,并通过URL的所含字段判断是否为图片类型,从而直接获取图片URL。
    图片下载与选择问题通过BitmapFactory类对图片通过URL进行下载并保存。在保存过程中需要动态申请外存权限,申请过程写在了重载的onCreate函数中。
    Uri传输问题保存图片后,由于android较高版本对权限的控制,需要使用FileProvider类对图片URI进行获取并分享。
    4.3 收藏功能4.3.1 实现方法通过为每一个NewsItem类添加一个favorite成员变量,记录每一条NewsItem是否被收藏过。收藏内容记录在本地,并可以通过服务器进行同步。
    4.3.2 工作难点与亮点数据更新问题在设置收藏的时候,需要对页面进行实时刷新以便显示出最新添加的收藏。此外,需要避免数据重复的问题。
    4.4 新闻推荐4.4.1 实现方法通过对用户阅读过的新闻与收藏的新闻进行记录,为每一个阅读与收藏记录赋予不同的权重,通过加和判断出用户对各分类的喜好顺序,排序后为用户更多推荐未阅读过的喜好顺序靠前的分类的新闻。

    4.5 新闻评论4.5.1 实现方法通过获取用户手机mac地址将评论上传到服务器,服务器端判断是否登录,并决定显示mac地址或用户名。新闻评论自动与服务器同步。
    4.5.2 实现难点与亮点同步评论过程中需要对mac地址进行判断。评论显示布局需要设计。









    评论示例1
    评论示例2



    4.6 服务器设计4.6.1 实现方法在服务器端使用Java语言写了一个多线程服务器,接收用户端的不同请求,包括注册,登录,刷新新闻,收藏新闻,同步收藏,同步评论等。并实现了新闻的mac地址记录缓存,服务器端保存功能,避免了新闻的遗漏。
    注册,登录在服务器端使用mysql数据库记录用户数据,在注册时判断用户名是否存在并返回成功或失败信息;在登录时判断用户名密码是否匹配,并记录登录的mac地址以便后续使用时无需再次登录。
    刷新新闻服务器端每5分钟爬取一次各分类的rss界面获取最新的新闻信息。客户端申请更新新闻时将最近的50条新闻传送给客户端,客户端可以判断传输的新闻是否已存在,并将新的新闻更新到UI界面中。
    收藏新闻服务器端记录每一个登录用户的收藏信息。客户端登录后自动同步收藏信息,并且接收客户端新建的收藏条目。客户端刷新页面后自动再次同步收藏信息。
    4.6.2 工作难点与亮点服务器与客户端同步服务器与客户端同步时为多线程,避免了多个客户端的阻塞。
    服务器本地存储服务器本地创建mysql数据库对信息进行保存。
    mac地址获取与缓存客户端通过MacAddressFetcher类获取手机mac地址。由于android权限限制,获取方法较为复杂。

    五、总结与心得在本次新闻app项目的制作过程中,我学习到了android编程的相关知识和面向google编程的能力,也感受到了人在DDL面前的巨大潜力。7天的时间从不懂android编程到编出一个能够使用的新闻app,也让我自己很惊讶。但也由于时间关系和评分要求,所做出的app界面并不美观,也希望助教谅解。
    附注
    实验手机型号:小米6
    系统版本:MIUI10 8.8.23开发版,Android 8.0.0
    21 评论 368 下载 2020-04-07 09:57:40 下载需要15点积分
  • 基于JSP和MySQL的进销存管理系统的设计与实现

    摘 要进入21世纪以来,商业管理中需要处理的数据和信息越来越多。大量的数据和繁杂的数据使得古老的手工处理数据的方式渐渐显得力不从心。甚至有些信息处理的方式在手工处理的模式下是根本无法是实现的,只能利用计算机的高运行频率来进行迭代计算。而且最近国家正在提倡大众创业,中小型企业很多。中小企业在我国经济发展中具有重要地位,目前我国的中小企业数量多,地区分布广泛,行业分布跨度大。随着全球经济一体化的发展和电子商务的兴起,中小企业之间的竞争将越来越激烈。网络及电子商务的迅猛发展突破了时间、空间的局限性,给中小企业带来了更多的发展机会,同时也增大了企业之间的竞争强度。这就要求中小企业必须改变企业的经营管理模式,提高企业的运营效率。随着技术发展,电脑操作及管理日趋简化,电脑知识日趋普及,同时市场经济快速多变,竞争激烈,企业采用电脑管理进货、库存、销售等诸多环节也已成为必然趋势。
    关键词:进销存管理系统;B/S结构;mysql数据库;JSP;spring;springMVC;spring boot;JPA
    ABSTRACTSince twenty-first Century, more and more data and information are needed in business management. A large number of data and complex data makes the ancient way of manual processing of data gradually appear inadequate. Even some of the information processing in the manual processing mode can not be achieved at all, only the use of the computer’s high operating frequency for iterative calculation. And recently, the country is promoting public entrepreneurship, many small and medium enterprises. Small and medium-sized enterprises play an important role in China’s economic development. At present, there are a large number of small and medium-sized enterprises in china. With the development of global economic integration and the rise of e-commerce, the competition between small and medium enterprises will become more and more fierce. The rapid development of network and electronic commerce has broken through the limitation of time and space, and has brought more opportunities for the development of small and medium-sized enterprises. This requires the small and medium-sized enterprises must change the mode of operation and management of enterprises, improve the operational efficiency of enterprises. With the development of computer technology, operation and management is simplified, the growing popularity of computer knowledge, and fast changing market economy, intense competition, enterprise computer management purch asing inventory sales and many other sectors and has become an inevitable trend.
    Keywords: Purchase, sales and inventory management system; B / S structure; Mysql Database; JSP; Spring;SpringMVC;spring boot;JPA
    第一章 绪论1.1 研究背景和意义目前,许多的中小企业普遍存在一个问题:企业的决策者看到的进销存资料及相关报表都是比较繁杂,让本应该一目了然的结果因信息的分散使得产生的结果无法保持一致和完整,造成企业在进销存管理上问题很多。由此发展而来的进销存管理系统就能够很好的解决上面出现的问题,能够将数据快速转化为有效信息,为企业管理者制定生存发展决策提供了依据。
    在现今社会中,各个产品的质量都相差不大,现在顾客对个性化服务的期望值越来越高,在产品质量一样的情况下顾客更看重的是哪家的服务更好。企业的竞争已渐渐从产品的竞争这个战场转变到服务的竞争这个战场,因此企业要发展的话就必须要进一步优化业务流程来提高企业自身的竞争能力。因此,加强进销存管理是企业能适应现阶段发展的必然,通过计算机来快速准确地完成大量本来由人工手工完成的工作,这是真正达到合理和充分利用现有资源,减轻了员工的工作压力,提高了企业的生产效率。
    信息已深入到现代社会的各个行业,因此信息的管理需要有一个信息管理系统,进销存管理系统就是这样一个系统。进销存管理系统开发的市场将是非常庞大的。在这飞速发展的信息时代,这类的信息管理系统的开发为中小型企业带来了方便和有效的信息,促进了经济的发展。
    1.2 研究目标实现一个进销存管理系统,实现对企业运作过程中的进货、销售、仓储的电子化操作,可以节省大量人力物力,可以说对企业的运作带来不可限量的好处。实现一个简单实用,操作界面友好的进销存管理系统是首要解决的任务。然后一是要实现对库存数据进行分析,对接下来的进货进行一些指导;二是实现对销售数据的采集分析,对企业决策者对下一个季度或者年份的销售计划提供一个参考的功能。系统肯定要具备对进销存的一些基本的增删改查操作。
    1.3 论文结构
    第一章绪论:主要叙述了进销存管理系统开发的缘由和意义,也就是开发这个系统的背景。开发这个系统有哪些优点,开发的这个系统具备哪一些功能,或者说能开发出哪些功能,对这些功能进行了一个概述
    第二章相关技术和方法:本章节首先是概述了系统的结构,用那些技术搭建的开发环境;接下来是简单介绍了一下关键功能和是怎么实现这些关键功能;最后是介绍了用到的开发工具
    第三章系统分析:本章节的重点系统分析,主要从可行性分析和需求分析两方面入手。可行性分析从技术可行性、经济可行性、操作可行性三个方面进行综合分析,最终得出系统开发的可行;需求分析从两个方面分析:系统总体需求和用例图分析,从这两个方面确定系统是可行的
    第四章系统设计:本章节主要分为系统类设计、关键业务设计、数据库设计三个模块。系统类设计主要是用类图来呈现系统中类的一些属性和功能;关键业务设计主要是用顺序图来直观的呈现这些功能的处理流程和处理步骤;数据库设计首先是用了ER图来直观的把数据库表的一些属性表示出来,其次对涉及到的每一张表都进行了分析和介绍
    第五章系统实现:本章节主要是对核心功能介绍,首先是功能描述,然后附上实现的界面,接下来详细描述功能的实现过程并且附上实现这些功能的核心代码
    第六章系统测试:本章是说明测试目标和测试计划,对测试目标给出测试用例,并分析测试结果是否达到系统预期,如未达到提出改进的措施
    第七章总结:本章主要是对进销存系统的设计的整个过程做一个总结,说明本论文的结构组成,从绪论开始到总结结束,对每一个大的章节内容进行简单的叙述。并且阐述了自己的收获与不足,给出不足的解决方案

    1.4 本章小结本章从研究的背景开始,叙述了进销存管理系统开发的整个流程,为什么要开发这个系统,开发这个系统有啥优势。其次就是描述了本系统需要开发出什么的功能,需要具备什么样的功能,能否开发出这些功能。最后对正文的每个章节进行了一个简单的描述。
    第二章 相关技术与方法2.1 架构概述本系统设计采用的是MAVEN + SPRING BOOT+ JPA 的架构来搭建的项目。Maven是一个不错的项目管理工具,它包含了一个项目对象模型,一组标准集合,一个项目生命周期,一个依赖管理系统,和用来运行定义在生命周期阶段中插件目标的逻辑。由于 Maven 的缺省构建规则具有不错的可重用性,因此用Maven 可以快速的构建项目。Spring Boot是由Pivotal团队提供的全新框架,设计这个框架目的就是用来简化Spring应用的初始搭建以和开发过程。这个框架使用了特定的方式做配置,因此开发人员不需要和传统的Spring应用一样写大量的配置文件。Springboot具有以下优势:创建的Spring应用程序是独立的;本身嵌入了Tomcat,无需部署WAR文件;Maven配置作了简化;自动配置Spring。因此用maven加上spring boot可以让我们快速的搭建起项目来,可以省去很多繁琐的步骤。
    JPA全称为Java Persistence API,是通过注解或者XML来描述对象-关系表的映射关系,并且可以将在运行的Entity类对象存储到数据库中去。使用JPA可以打破一般简单持久化框架的局限,在我们开发企业级应用中发挥更大作用,因为JPA支持容器级事务:大数据集、事务、并发等。使用JPA创建实体非常简单,就和我们平常创建一个JAVA类一样,不存在任何的约束和限制,我们只需要在对应的实体上标注javax.persistence.Entity注解即可;开发人员很容易就可以掌握JPA,因为JPA没有特殊的规则和太多的设计模式,框架和接口都很简单。JPA采用的原则是非侵入式原则,因此对其他框架的兼容性很好,易于和其他框架集成。JPA中定义了和Hibernate HQL相似的QL:JPQL,它是EJB QL的一种拓展,操作的对象是实体,而不是关系数据库的一张表。而且能够正常的支持SQL才能够提供的高级查询特性:批量修改和更新、JOIN、GROUPBY、HAVING等,并且支持子查询功能。最重要的是JPA也支持面向对象的高级特性,这样的话开发者在开发企业级应用时能够最大化的使用面向对象的模型来设计,而不用自己来处理这些特性的持久化。
    用这三个技术搭建项目框架,可以快速完成,省去许多简单繁杂的步骤,对于我们快速开发是有非常大的优势的。
    2.2 关键技术简介作为一个进销存管理系统,其最根本的功能还是在对采购管理、销售管理和库存管理上面,其他的功能都是在这个的基础上才能够开发出来。基础功能也就是对进货、销售和库存的增删改查。其中对进货订单的添加和销售订单的添加,每个订单都含有一个或者多个商品,因此订单生成时做了跟购物车类似,我们可以把商品一个一个添加到这个购物车上,等我们商品添加完成,此时可以提交订单,这样就产生 了一个进货订单或者销售订单。跟数据库打交道肯定少不了连接数据库的技术,在本系统用到的是JPA,JPA本身有许多默认的增删改查的方法,并且不用写配置文件,而且可以自己个性化定制sql语句,只需要写一个接口继承JPARepository接口,然后在这个接口里写抽象方法,在方法上写注解就可以了,很方便。
    首先是数据分析功能,因为我们本身数据库里存有大量的销售数据库,所以我们就不用去收集数据了,直接对数据库里的数据进行分析即可。第一阶段:探索性数据分析,因为数据库里的数据是杂乱无章的,因而看不出规律。因此我们需要通过作图、表格、用各种形式的方程拟合、计算某些特征量等手段来找出某些可能的关联或某些隐含在数据中的规律。第二阶段:选定模型进行分析,接下来我们通过前面的初步操作,在探索性分析的基础上提出一种或几种可能的模型,然后通过进一步分析从里面挑选最符合当前发展的几个模型。第三阶段:推断分析,使用数理统计方法对第二阶段所定的模型做出以下判断:估计的可靠程度,精确程度作出推断。选定最终的模型。
    其次是数据备份功能,企业在运转中,系统难免会出现一些突发情况导致数据的丢失、损坏。因此当出现这些情况时,我们就需要把备份的数据恢复到数据库中去。备份数据时会占用较大的IO资源的,因此我们需要选择一个对系统影响尽可能地小的时段来进行数据的备份;对重要的数据,要保证在极端情况下的数据都可以正常恢复。在选择备份方案时要考虑到实施方案的可操作性和经济性,因此选择了逻辑备份,此方法不需要数据库运行在归档模式下,不但备份简单,而且可以不需要依赖外部存储设备。
    2.3 开发工具系统前段页面采用jsp + JavaScript + css的组合技术开发,其中JavaScript使用了jQuery和bootstrap框架,这两个前段框架让我们能更友好的使用JavaScript。省去了许多步骤,简化了我们的使用。数据库使用的是MySQL数据库,MySQL 是现阶段最流行的关系型数据库之一,因为它的体积小、运行速度快、免费,尤其是开放源码这一特点,一般中小型网站的开发都会选择MySQL作为网站数据库。考虑到系统设计的用户群体以及MySQL数据库的这些优点,于是选择了MySQL数据库作为开发数据库。开发使用的IDE工具是:Spring tool suit,这个IDE工具是Spring官网推荐的开发工具,在使用Spring体系的框架开发应用是,这个IDE工具具有很多优势。Web服务器是使用的Spring boot内置的Tomcat服务器。根据以上选择的框架、工具,选择了JDK1.8作为开发、编译环境。
    2.4 本章小结本章主要简单叙述了系统使用了的框架、用了哪些开发工具。重点介绍如何实现系统的核心功能,还有实现这些功能用到了哪些技术,对这些方面进行了阐述。
    第三章 系统分析3.1 可行性分析3.1.1 技术可行性基于本项目用到的spring boot、JPA、mysql、jQuery等技术都已经是成熟的开发技术了,完全可以满足本项目的开发需求。项目主要功能所涉及的一些技术都能是能够实现的,因此在技术上是可行的。
    3.1.2 经济可行性企业在运转过程中信息的系统化管理,运用电脑对数据进行自动化的统计,为企业在制定经营决策时提供了大量的、权威的科学数据;强大的进销存数据统计功能,大大简化了员工的日常工作,工作效率提高了很多,大大降低了人工管理过程中数据易错所带来的一系列的不良反应,提高了企业的经济效益。可以节省大量的人力物力,并且现在不会存在之前人工操作产生的人工误差的情。可以说是大大提高了企业的经济效益。因此,本系统在经济上也是可行的。
    3.1.3 操作可行性本项目因为有友好的交互界面,所以每位企业员工都能够轻松学会去操作本系统,因为操作人员只需要把数据输入进去,数据都是自动去计算的,因此可以省去以前需要手动计算的劳动,并且效率高好多。而且以前都是手动计算不仅容易出错,而且还费时费力;现在都是程序自动计算,在减小了出错的概率的同时还节省了人力物力、提高了工作效率。可以说对企业的运转是大大节省了花费,并且提高了生产效率。综合考虑本系统在操作上是可行的。
    3.2 需求分析3.2.1 系统总体需求系统需要具备以下功能:

    一般企业人员的计算机知识掌握的不多,因此要求有良好的人机交互界面,这样对操作这个系统的企业人员比较友好
    对于本系统使用对象的不同,需要给予不同的权限
    支持多条件语句查询,方便进销存数据的查询
    基础信息管理与查询(包括商品信息、客户信息、供应商信息)
    一键点击,能够直接查看仓库所有商品的库存信息
    方便、健全的账单统计功能
    图表分析年销售状况
    商品销售排行统计
    当停电、网络病毒的原因损坏本系统数据时,系统可以还原系统的数据
    各种数据的统计计算自动完成,尽可能的减少人工干预
    系统退出




    主要质量属性
    详细要求




    正确性
    按照需求正确执行任务,完成各个模块的相应要求。


    健壮性
    具有较高的容错能力和恢复能力。


    性能效率
    响应用户的请求的时间越短越好。


    易用性
    系统开发过程中应该有详细的文档,这样让别人能够更好的使用。


    安全性
    防止软件受到意外或蓄意的存取、使用、修改、毁坏或泄密导致系统的数据丢失。


    可扩展性
    能方便的进行二次开发,满足对功能的扩展或提高并能提高相应的安全机制。


    兼容性
    不易与其他软件起冲突。



    3.2.2 用例图分析系统管理用例图

    系统管理用例有配置系统、管理部门、管理员工、管理权限,这里主要介绍一下管理权限,具体说明见表3-1:

    财务用例图

    财务用例有查询应收款项、记录应收应付款项、管理发票,这里主要介绍一下记录应收应付款项,具体说明见表3-2:

    采购部分用例图

    采购部分用例有两个角色采购员和采购经理。采购员用例有采购单、管理供应商、管理商品信息;采购经理用例有审批采购单、管理商品分类。具体说明见表3-3至表3-4:
    采购单

    审批采购单

    库存部分用例图

    库存部分总共有质检员、库存管理员、仓库经理三个角色,涉及到的用例比较多,这里具体介绍一下出入库单、确认入库单、开出库单、统计库存信息、出调拨单,具体说明见表3-5至表3-9:
    出入库单

    确认入库单

    开出库单

    统计库存信息

    出调拨单

    销售部分用例图

    销售部分用例图包括销售经理和销售员两种角色,销售经理用例有统计销售信息;销售员用例有管理客户、查询商品库存、下订单、确认订单具体说明见表3-10至表3-12:
    统计销售信息

    查询商品库存

    下订单

    3.3 本章小结本章主要是进行了系统的分析,首先第一节是可行性分析,从技术可行性、经济可行性、操作可行性三个角度对系统分析是否是可行的,最终得出本系统是可行的。第二节是需求分析分析了系统所具备的一些的功能,然后重点介绍了一些特色功能。接着第二节是需求分析,第一小节阐述了系统的总需求,应该具备哪些功能;第二小节通过用例图对需求主要功能进行了具体分析。
    第四章 系统设计4.1 系统类分析经分析,该系统核心业务类见下图:

    4.1.1 MANAGER类MANAGER类用于记录系统的用户信息,并完成登陆和注销的操作。

    4.1.2 GOODS类GOODS类用于记录商品的信息,并且实现对商品的增删改查等功能。

    4.1.3 SALEORDER类SALEORDER类用于记录销售订单的信息,并且实现对销售订单的增删改查等功能。

    4.1.4 PURCHASEORDER类PURCHASEORDER类用于记录采购订单的信息,并且实现对采购订单的增删改查等功能。

    4.1.5 STOCK类STOCK类用于记录库存的信息,并且实现对库存的增删改查等功能。

    4.2 关键业务设计关键业务与用例图之间存在一定的对应关系,原则上用例图中所提出的用例应该在关键业务分析中体现,每一个用例对应一个时序图,每个时序图后面应当有一段简短的说明,时序图用WORD绘制比较难,可以借用其他工具,但复制过来时应尽量只有黑白颜色,下面以登录为例说明关键业务的说明方法。
    4.2.1 添加商品
    采购业务员通过UI界面选择添加商品菜单,此时后台controller会判断该操作用户是否有权限;权限检查通过,操作员进入到商品添加表单,输入商品信息提交,后台controller会调用service的add方法,service中的方法add在调用database中的板寸方法。成功后返回成功提示。
    4.2.2 查询商品采购业务员通过UI界面输入查询条件,此时后台controller会检查查询条件;controller会调用service里面的find方法,find方法会调用database中具体的查询方法;把查询到的结果显示到UI界面。
    4.2.3 添加库存
    库存业务员通过UI界面选择商品菜单,输入该商品的库存信息,此时后台controller检查输入商品库存信息;controller会调用service中的add方法,add方法调用database中的具体添加方法处理,添加成功返回功能提示。
    4.2.4 添加销售订单
    销售业务员通过UI界面选择添加订单菜单,输入订单信息,此时后台controller会检查订单信息;controller会调用service中的update方法,update方法会调用database中的具体更新方法,更新成功后会返回成功提示。
    4.3 数据库设计4.3.1 概念设计系统ER图

    商品ER图

    顾客ER图

    供应商ER图

    图4.10 管理员ER图

    日志用于记录用户的日常行为,通过用户编号与用户实体之间存在一对多关系。
    4.3.2 数据库表系统中使用到数据库基本如表4-1所示。
    系统数据库表



    编号
    表名
    描述




    01
    customer
    顾客表


    02
    dept
    部门表


    03
    employee
    员工表


    04
    goods
    商品表


    05
    manager
    管理员表


    06
    purchase_item
    采购单明细表


    07
    purchase_order
    采购订单表


    08
    return_item
    采购退货明细表


    09
    return_order
    采购退货表


    10
    sale_item
    销售订单明细表


    11
    sale_order
    销售订单表


    12
    sale_return_item
    退货销售明细表


    13
    sale_return_order
    销售退货表


    14
    stock
    库存表


    15
    suppliers
    供应商表



    顾客表用于记录顾客信息,顾客表的具体字段如表4-2所示。



    字段名
    字段描述
    类型/长度
    约束
    备注




    customer_id
    顾客编号
    Long
    PK



    customer_name
    顾客名称
    Varchar(20)
    NOT NULL



    address
    顾客地址
    Varchar(255)




    zip
    邮编
    Varchar(20)




    telPhone
    联系电话
    Varchar(20)




    linkMan
    联系人
    Varchar(20)




    linkTel
    联系人号码
    Varchar(20)




    bank
    开户银行
    Varchar(20)




    bankAccoount
    银行账号
    Long




    email
    邮箱
    Varchar(20)




    字段顾客编号为本表的主键,用来标识一个顾客,字段顾客名称非空字段,字段顾客地址、邮编、联系电话、联系人、联系人号码、开户银行、银行账号、邮箱是顾客的一些详细信息。
    部门表用于记录部门的信息,部门表的具体字段如表4-3所示。



    字段名
    字段描述
    类型/长度
    约束
    备注




    dept_id
    部门编号
    Long
    PK



    dept_name
    顾客名称
    Varchar(20)
    NOT NULL



    字段部门编号为本表的主键,用来标识一个部门,字段部门名称为非空字段。
    员工表
    员工表用于记录员工的信息并且用于员工登录系统,员工表的具体字段如表4-4所示。



    字段名
    字段描述
    类型/长度
    约束
    备注




    employee_id
    员工编号
    Long
    PK



    employee_name
    员工姓名
    Varchar(20)
    NOT NULL



    employee_password
    密码
    Varchar(20)
    NOT NULL
    MD5加密


    employee_gender
    性别
    Varchar(5)




    employee_age
    年龄
    Long




    employee_phonenumber
    手机号码
    Varchar(20)




    deptId
    部门ID
    Long
    FK



    字段员工编号为本表的主键,用来标识一个员工,员工名字和员工密码为非空字段,部门ID为外键,引用自部门表;字段性别、年龄和手机号码为员工的一些基本信息。
    商品表商品表用于记录商品的信息,商品表的具体字段如表4-5所示。



    字段名
    字段描述
    类型/长度
    约束
    备注




    goods_id
    商品编号
    Long
    PK



    goods_name
    商品名称
    Varchar(20)
    NOT NULL



    unit
    单位
    Varchar(20)




    space
    商品产地
    Varchar(255)




    supplierId
    供应商编号
    Varchar(20)
    FK



    approveId
    批准文号
    Varchar(20)




    batchId
    生产批号
    Varchar(20)




    字段商品编号为本表的主键,用来标识一个商品,字段商品名称不为空,字段供应商编号为外键,引用自供应商表,字段单位、商品产地、批准文号和生产批号为商品的一些属性。
    管理员表管理员表用于记录管理员的信息并且用于管理员登录系统,管理员表的具体字段如表4-6所示。



    字段名
    字段描述
    类型/长度
    约束
    备注




    manager_id
    管理员编号
    Long
    PK



    manager_name
    管理员姓名
    Varchar(20)
    NOT NULL



    manager_password
    密码
    Varchar(20)
    NOT NULL
    MD5加密


    manager_gender
    性别
    Varchar(5)




    manager_age
    年龄
    Long




    manager_phonenumber
    手机号码
    Varchar(20)




    dept_name
    部门名称
    Varchar(255)
    FK



    字段管理员编号为管理员表的主键,用来标识一个管理员,字段管理员名字和密码是不能为空的,部门编号是一个外键,引用自部门表,字段性别、年龄和手机号码是管理员的一些个人信息。
    采购单明细表用于记录采购单信息,采购单明细表的具体字段如表4-7所示。



    字段名
    字段描述
    类型/长度
    约束
    备注




    purchase_item_id
    采购单明细编号
    Long
    PK



    goods_name
    商品名称
    Varchar(20)
    FK



    purchase_order_id
    采购单编号
    Varchar(20)
    FK



    purchase_price
    单价
    Double




    purchase_count
    数量
    Long




    字段采购单明细编号为采购单明细表的主键,用来标识一个采购订单明细,其中字段采购单编号和商品名称是外键,分别引用自采购订单表和商品表,字段单价和数量是采购单明细表的属性。
    采购订单表用于记录采购单信息,采购订单细表的具体字段如表4-8所示。



    字段名
    字段描述
    类型/长度
    约束
    备注




    purchase_order_id
    采购单编号
    Long
    PK



    suppliersId
    采购商编号
    Varchar(20)
    FK



    purchase_order_pay
    支付方式
    Varchar(20)




    inDate
    采购日期
    Date




    purchase_order__total
    总金额
    Double




    字段采购单编号为采购订单表的主键,用来标识一个采购订单,其中字段采购商编号为外键,引用自采购商表,字段支付方式、采购日期和总金额为采购订单的信息。
    采购退货明细表用于记录采购退货单信息,采购退货明细表的具体字段如表4-9所示。



    字段名
    字段描述
    类型/长度
    约束
    备注




    return_item_id
    采购退货单明细编号
    Long
    PK



    returnOrderId
    采购退货单编号
    Long
    FK



    goodsName
    商品名称
    Varchar(20)
    FK



    return_item_price
    单价
    Double




    return_item_count
    数量
    Long




    字段采购退货单明细编号是采购退货明细表的主键,用来标识一个采购退货明细,其中采购退货单编号和商品名称是外键,分别引用自采购退货表和商品表。字段单价和数量为采购明细表的属性。
    采购采购退货表用于记录采购采购退货信息,采购采购退货表的具体字段如表4-10所示。



    字段名
    字段描述
    类型/长度
    约束
    备注




    return_order_id
    采购单编号
    Long
    PK



    suppliersId
    采购商编号
    Varchar(20)
    FK



    return_order_pay
    支付方式
    Varchar(20)




    return_order_outDate
    退货日期
    Date




    return_order_total
    总金额
    Double




    字段采购退货单编号是采购退货表的主键,用来标识一个采购退货,其中字段采购商编号为外键,引用自采购商表,字段支付方式、退货日期和总金额为采购退货表的属性。
    销售订单明细表用于记录销售订单明细信息,销售订单明细表的具体字段如表4-11所示。



    字段名
    字段描述
    类型/长度
    约束
    备注




    sale_item_id
    销售订单明细编号
    Long
    PK



    saleOrderId
    销售订单编号
    Long
    FK



    sale_item_name
    商品名称
    Varchar(20)
    FK



    sale_item_price
    单价
    Double




    sale_item_count
    数量
    Long




    字段销售订单明细编号是销售订单明细表的主键,用来标识一个销售明细,其中字段销售订单编号和商品名称是外键,分别引用自销售订单表和商品表,字段单价和数量是销售订单明细的属性。
    销售订单表用于记录销售订单信息,销售订单表的具体字段如表4-12所示。



    字段名
    字段描述
    类型/长度
    约束
    备注




    sale_order_id
    销售单编号
    Long
    PK



    customerId
    顾客编号
    Varchar(20)
    FK



    sale_order_pay
    支付方式
    Varchar(20)




    sale_order_saleDate
    销售日期
    Date




    sale_order_total
    总金额
    Double




    字段销售单编号是销售订单表的主键,用来标识一个销售订单,字段顾客编号是外键,引用自顾客表,字段支付方式、销售日期和总金额是销售订单表的属性。
    销售退货明细表用于记录销售退货明细信息,销售退货明细表的具体字段如表4-13所示。



    字段名
    字段描述
    类型/长度
    约束
    备注




    sale_return_item_id
    销售退货订单明细编号
    Long
    PK



    saleReturnOrderId
    销售退货订单编号
    Long
    FK



    goodsName
    商品名称
    Varchar(20)
    FK



    sale_return_item_price
    单价
    Double




    sale_return_item_count
    数量
    Long




    字段销售退货订单明细编号是销售退货明细表的主键,用哪个来标识一个销售退货明细,字段销售退货订单编号、商品名称为外键,分别引用自销售退货表和商品表,字段单价和数量为销售退货明细表的属性。
    销售退货表用于记录销售退货信息,销售退货表的具体字段如表4-14所示。



    字段名
    字段描述
    类型/长度
    约束
    备注




    sale_return_order_id
    销售退货单编号
    Long
    PK



    customerId
    顾客ID
    Varchar(20)
    FK



    sale_return_order_pay
    支付方式
    Varchar(20)




    sale_return_order_returnDate
    退货日期
    Date




    sale_return_order_total
    总金额
    Double




    库存表用于记录库存信息,库存表的具体字段如表4-15所示。



    字段名
    字段描述
    类型/长度
    约束
    备注




    stock_id
    库存编号
    Long
    PK



    goodsId
    商品编号
    Long
    FK



    stock_count
    商品库存数量
    Varchar(20)
    NOT NULL



    stock_area
    存放地方
    Varchar(255)




    字段库存编号是库存表的主键,用来标识一个库存,字段商品编号是外键,引用自商品表,字段商品库存数量不为空,字段存放地方为库存表的属性。
    供应商表用于记录供应商信息,供应商表的具体字段如表4-16所示:



    字段名
    字段描述
    类型/长度
    约束
    备注




    suppliers_id
    供应商编号
    Long
    PK



    supplier_name
    供应商名称
    Varchar(20)
    NOT NULL



    address
    顾客地址
    Varchar(255)




    zip
    邮编
    Varchar(20)




    telPhone
    联系电话
    Varchar(20)




    linkMan
    联系人
    Varchar(20)




    linkTel
    联系人号码
    Varchar(20)




    bank
    开户银行
    Varchar(20)




    bankAccoount
    银行账号
    Long




    email
    邮箱
    Varchar(20)




    字段供应商编号是供应商表的主键,用来标识一个供应商,字段供应商名称不为空,字段顾客地址、邮编、联系电话、联系人、联系人号码、开户银行、银行账号和邮箱是供应商表的属性。
    4.4 本章小结本章主要分为三个小节来介绍系统设计。第一节是系统类分析,主要是通过类图的方式来介绍系统设计到的类,介绍类里的属性和设计到的方法。第二节是关键业务设计,主要是通过顺序图的方式来介绍核心业务的设计和处理过程。第三节是数据库设计,首先是通过ER图的方式介绍设计到的模块和模块的一些字段(分为总ER图和分ER图),其次是数据库表,介绍了所设计到的表,详细的介绍了表中的字段和字段对应的关系。
    第五章 系统实现5.1 用户登录5.1.1 功能描述登录是对用户使用系统功能进行身份验证的过程,登录也是可以很好的控制用户的权限问题,登录界面要求简明易懂。每一用户都有自己的独有的账号和密码,用户在系统的每一个操作都有日志进行记载,可以有效保证数据可追溯性,做到责任到人,界面如下图。

    5.1.2 实现流程在登陆按钮添加监听事件,在用户输入账号密码点击登录后,终端先判断是否满足JS中的验证方法,此方法是防止当账号密码为空时登录的提示,如果为空跳出一个对话框来提示用户账号和密码需要填。如果不为空,后台会把接受的用户名密码与数据库数据库中用户信息比较核对,如果是一致则顺利登录到用户权限所对应的界面中,否则出现账号密码错误的提示,登录失败。登录流程如图5-12所示。实现代码如下:
    if("manager".equals(user)){ Managers managers = null; try { managers = managerService.login(name, password); } catch (ServiceException e) { e.printStackTrace(); } if(managers!=null){ logger.info(name+"登录成功!!!"); ServletContext app = req.getSession().getServletContext(); app.setAttribute("user",managers); req.getRequestDispatcher("/WEB-INF/jsp/index.jsp").forward(req, resp); }else{ logger.info("登录失败,用户名或者密码错误"); HttpSession session = req.getSession(); session.setAttribute("msg","用户名或者密码错误"); resp.sendRedirect("login.html"); }}else if("employee".equals(user)){ Employee employee = null; try { employee = managerService.employeelogin(name, password); } catch (ServiceException e) { e.printStackTrace(); } if(employee!=null){ logger.info(name+"登录成功!!!"); ServletContext app = req.getSession().getServletContext(); app.setAttribute("user",employee); req.getRequestDispatcher("/WEB-INF/jsp/index.jsp").forward(req, resp); }else{ logger.info("登录失败,用户名或者密码错误"); HttpSession session = req.getSession(); session.setAttribute("msg","用户名或者密码错误"); resp.sendRedirect("login.html"); }}

    5.2 采购管理5.2.1 功能描述采购管理是对需要采购的订单的综合管理,在这个模块里包含采购订单、收货入库、采购退货三个子模块。其中采购订单是员工用来生成采购单的,还有对采购单的一些处理;收货入库是对已经提交的采购单进行入库操作;采购退货是把我们已经提交的采购单进行退货处理的操作。主要界面如下图:

    5.2.2 实现流程点击采购订单按钮会跳转到采购订单首页,在首页可以看到所有已经提交的采购单信息;当我们想添加新的采购订单的时候,首先点击添加商品按钮,会跳转到商品添加页面,我们把商品信息输入进去之后点击提交,后台方法会把商品信息暂时存起来,当我们把所有商品添加完成,我们可以再点击添加订单按钮,此时会把我们添加的所有的商品都提交生成一个采购订单,并且把数据存进对应的数据库表中保存起来。对已经提交的订单当我们点击退货按钮时,后台会接收到要退货的订单ID,并且根据ID到数据库中订单表把数据删除,同时在退货表中把数据插进去。当我们点击入库按钮时,后台会接收到需要入库的订单的ID,并且把订单表中的flag字段的值修改为已入库,同时在库存表中会新加一条数据。主要实现代码如下:
    Long suppliersId = Long.parseLong(request.getParameter("suppliersId"));String name = request.getParameter("name");Double price = Double.parseDouble(request.getParameter("price"));Long count =Long.parseLong(request.getParameter("count")); String unit = request.getParameter("unit");String space = request.getParameter("space");Long supplierId = Long.parseLong(request.getParameter("supplierId"));String approveId = request.getParameter("approveId");String batchId = request.getParameter("batchId"); purchaseItem = new PurchaseItem();purchaseItem.setCount(count);purchaseItem.setPrice(price);purchaseItem.setName(name);purchaseItem.setSupplierId(suppliersId);list.add(purchaseItem);model.addAttribute("list", list);logger.info("成功添加商品");logger.info("提交采购订单");String pay = request.getParameter("pay");purchaseOrder = new PurchaseOrder();purchaseOrder.setPay(pay);purchaseOrder.setInDate(new Date());purchaseOrder.setFlag("未入库");try { int i = managerService.addPurchaseOrder(purchaseOrder, list); if(i==1){ list.removeAll(list); /*orderList.removeAll(orderList);*/ orderList = managerService.findPurchaseOrderByPage(0); count = managerService.findPurchaseOrderCount(); currentPage = 1L; totalPage = managerService.getTotalPage(); model.addAttribute("currentPage", currentPage); model.addAttribute("totalPage", totalPage); model.addAttribute("orderList", orderList); model.addAttribute("count", count); logger.info("提交采购订单成功"); }
    5.3 库存管理5.3.1 功能描述库存管理是对仓库里的商品的综合管理,包括商品入库、商品出库、某种商品的库存查询、商品移库和库存盘点。商品入库是对新的商品需要入库的管理;商品出库是根据销售订单到库存里拿出对应数量的商品并且库存进行相应的减少;库存查询是输入想查询的商品会返回该商品的库存数量;商品移库是输入商品ID和需要移动到的仓库号就可以更改商品的存放仓库;最后一个是库存盘点,该功能是返回仓库里所有商品的库存信息。主要界面如下图:
    商品出库

    库存查询

    商品移库

    5.3.2 实现流程首先是商品入库,点击商品入库按钮跳转到对应商品添加页面,填入对应商品信息,后台首先会判断该商品在商品表里是否已经存在,如果存在,则更新该商品的库存即可,如果不存在,则先在商品表里添加一条商品的信息,再到库存表里添加一条库存信息。商品出库,首先是输入需要出库的商品ID和该商品出库的数量,后台根据接收的商品ID和数量到数据库库存表去更新该商品的库存数量。库存查询,输入需要查询库存的商品ID,后台会根据商品的ID去库存表里查询该商品的库存数量,并且返回到对应的前台页面。商品移库,输入商品ID和移动到的仓库号,后台会根据商品ID号到数据库库存表中更新该商品的库存地方。库存盘点,这个功能是会显示所有商品的库存信息。主要实现代码如下:
    商品入库:
    public int stockAdd(Stock stock, Goods goods) throws ServiceException { Goods gods = goodsRepository.findGoodsByName(goods.getName()); if(gods==null){ gods = goodsRepository.save(goods); } stock.setGoodsId(gods.getId()); Stock stok = findStockByGoodsId(gods.getId()); if(stok==null){ stockRepository.save(stock); }else{stockRepository.updateStockCountByGoodsId(stok.getCounts()+stock.getCounts(),stock.getGoodsId()); } return 1;}
    商品出库:
    @RequestMapping("/update")public String UpdateStock(HttpServletRequest request,Model model){ logger.info("库存信息更新开始"); Long goodsId = Long.parseLong(request.getParameter("goodsId")); Long count = Long.parseLong(request.getParameter("count")); try { stockService.updateStock(goodsId,count); outList = stockService.findStockByPage(0); model.addAttribute("outList", outList); logger.info("库存信息更新完成"); } catch (ServiceException e) { e.printStackTrace(); } return "outStock"; }
    商品移库:
    @RequestMapping("updateArea")public String upDateArea(HttpServletRequest request,Model model){ logger.info("存放仓库信息更新开始"); Long goodsId = Long.parseLong(request.getParameter("goodsId")); String area = request.getParameter("area"); try { stockService.updateStockAreaByGoodsId(area,goodsId); List<Stock> list = stockService.findAllStock(); model.addAttribute("outList", list); logger.info("存放仓库信息更新完成"); } catch (ServiceException e) { e.printStackTrace(); } return "updateArea"; }
    5.4 销售管理5.4.1 功能描述销售管理对销售订单的综合管理,包含销售订单、发货出库和销售退货。销售订单,将销售的信息形成销售订单并且存入到数据库销售订单表中;发货出库,将提交的销售订单的flag状态改为已发货,并且对应的库存表中的库存数量也相应的减少;销售退货,对已经销售的订单进行退货处理。主要界面如下图:

    5.4.2 实现流程首先是销售订单,第一步是点击添加商品,然后输入对应的商品信息点击提交,后台接收到数据,会暂时将商品信息存储起来,当商品添加完毕,点击添加订单按钮,可以将刚才添加的所有订单信息提交到后台,后台在将这些订单信息持久化到数据库中去。发货出库,对提交销售的订单可以进行发货操作,后台会根据订单ID对订单表中的flag字段值修改为已发货,并且会到库存表中去,将该订单对应的商品的库存数作相应的改变。销售退货,对已经提交的订单可以进行退货操作,点击退货按钮,后台会根据订单ID到数据库销售订单表中把对应订单信息删除,并且在销售退货表中加入相应的退货记录,与此同时会根据flag字段,如果flag字段值是未发货,则不用去库存表跟新库存数据,如果flag字段的值为已发货,则需要到库存表中把订单对应的商品的库存数加回去。主要实现代码如下:
    @RequestMapping("/addSaleOrder")public String saveSaleOrder(HttpServletRequest request,Model model){ String pay = request.getParameter("pay"); SaleOrder saleOrder = new SaleOrder(); saleOrder.setFlag("未发货"); saleOrder.setPay(pay); saleOrder.setSaleDate(new Date()); try { int i = saleService.addSaleOrder(saleOrder,itemList); if(i==1){ itemList.clear(); saleorderList = saleService.findSaleOrderByPage(0); cunt = saleService.findSaleOrderCount(); crrentPage = 1L; ttalPage = saleService.getTotalPage(); model.addAttribute("crrentPage", crrentPage); model.addAttribute("ttalPage", ttalPage); model.addAttribute("saleorderList", saleorderList); model.addAttribute("cunt", cunt); } } catch (ServiceException e) { e.printStackTrace(); } return "sale";}
    5.5 备份与恢复5.5.1 功能描述备份与恢复,顾名思义就是对系统的重要数据进行备份,以备不时之需,备份是可以设定每天在一个固定的时间自动进行备份;当系统数据损坏时我们可以自由选择恢复哪一天的数据。主要界面如下图:

    5.5.2 实现流程备份功能,首先当系统启动的时候已经设定了一个自动备份的时间点,每天到这个时间点都会自动把数据库的数据备份一次,但是我们也可以手动备份,我们只需要点击数据备份就可以了;数据恢复,当某个时候系统数据损坏或者丢失的时候,此时我们就可以用到数据恢复功能了,我们可以选择恢复到一个时间点的数据文件。主要实现代码如下:
    public static void backup() { try { Runtime rt = Runtime.getRuntime(); // 调用 调用mysql的安装目录的命令 Process child = rt.exec(backuppath); // 设置导出编码为utf-8。这里必须是utf-8 // 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行 InputStream in = child.getInputStream();// 控制台的输出信息作为输入流 InputStreamReader xx = new InputStreamReader(in, "utf-8"); // 设置输出流编码为utf-8。这里必须是utf-8,否则从流中读入的是乱码 String inStr; StringBuffer sb = new StringBuffer(""); String outStr; // 组合控制台输出信息字符串 BufferedReader br = new BufferedReader(xx); while ((inStr = br.readLine()) != null) { sb.append(inStr + "\r\n"); } outStr = sb.toString(); // 要用来做导入用的sql目标文件: SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmm"); FileOutputStream fout = new FileOutputStream("D:\\jxc\\backup\\"+sdf.format(new Date())+".sql"); OutputStreamWriter writer = new OutputStreamWriter(fout, "utf-8"); writer.write(outStr); writer.flush(); in.close(); xx.close(); br.close(); writer.close(); fout.close(); } catch (Exception e) { e.printStackTrace(); }}/** * 备份数据恢复 * @param databaseName*/public static void restore(String fileName) { try { Runtime runtime = Runtime.getRuntime(); Process process = runtime .exec(restorepath); OutputStream outputStream = process.getOutputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("D:\\jcx\\backup\\"+fileName), "utf-8")); String str = null; StringBuffer sb = new StringBuffer(); while ((str = br.readLine()) != null) { sb.append(str + "\r\n"); } str = sb.toString(); // System.out.println(str); OutputStreamWriter writer = new OutputStreamWriter(outputStream, "utf-8"); writer.write(str); writer.flush(); outputStream.close(); br.close(); writer.close(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }}
    5.6 本章小结本章主要是介绍了系统实现,重点介绍了系统的用户登录、采购管理、库存管理、销售管理、备份与恢复五个模块。这五个模块首先分别介绍了他们的功能,并且附上界面图,然后再从实现流程上对这些功能进行详细的描述,最后附上实现这些功能的主要代码。
    第六章 系统测试6.1 系统测试综述系统完成后,对系统的测试是非常重要的一环。首先在系统的每个模块完成后对这个模块做的单元测试,另外一个是在系统整体完成了后对整个系统做的综合测试。
    用户登录模块,当用户输入正确的用户名和密码时,能正常登录;当用户输入错误的用户名或者错误的密码或者不存在的用户名的时候,系统应当输出响应用户名或者密码错误;当用户没有输入用户名或者没用输入密码或者两者都没有输入的时候,系统应当响应用户名、密码项是必填项。
    采购管理模块,当天如对应的商品信息时,后台新系统能够接收到商品信息,并且在提交订单的时候能够顺利把这些信息都持久化到数据库中去,并且在出错的时候能正确返回对应的错误码;对采购订单入库时,能正常的把flag标志改为已入库,并且在库存表中更新响应的商品库存信息;销售退货,后台能根据订单ID将采购订单表中的数据删除,并且把数据插入到采购退货表中去。
    库存管理模块,商品入库功能,当用户把商品信息输入正确的时候,后台能够真确的收到数据,并且正确的持久化到数据库中去;商品出库,当用户输入出库的商品和数量时,后台能够正确到数据库库存表把对应的商品的数量相应的减少;库存查询,当输入商品的ID时,后台能根据这个ID查出该商品的库存信息,并且能正确的返回到用户界面;商品移库,当输入商品ID和移库的信息后,后台能正确地更新数据库中对应商品的库存信息。
    销售管理模块,销售模块,当前段把销售订单的信息都正确输入的时候,后台能正确的接收到订单信息,并且把订单信息正确持久化到数据库中去,在产生错误时,能够返回对应的错误码;发货出库,当销售订单的信息提交之后,我们可以对这些的订单做发货操作,点击发货后,后台要把相应商品的库存信息进行更新,并且把订单表中的flag字段的值改为已发货;销售退货,点击退货按钮,后台能正常的把销售订单表中的对应订单信息删除,并且在销售退货表中把退货信息存进去,并且要把商品的数量加回到库存表中去。
    备份与恢复模块,首先是系统每天能够在固定时间产生一个备份数据库的文件,然后在我们手动点击备份按钮的时候也能够产生一个备份数据库的文件;当点击恢复按钮时,会把我们选择的数据库文件恢复到数据库中去。
    6.2 测试用例6.2.1 用户登录模块
    6.2.2 采购管理模块
    6.2.3 库存管理模块
    6.2.4 销售管理模块
    6.2.5 备份与数据恢复模块
    6.3 测试分析经过这些测试,整个系统的大部分功能都已经能够正常的运行,达到了我们预想的结果。对于采购管理、库存管理和销售管理三个模块先阶段的功能都能达到预期效果,但是还可以加入一些其他的支持(对Excel表格的支持),能够直接导入Excel表格的数据,并且可以直接导出为Excel表格,这个功能暂时还没达到预期效果,因此需要把这个功能加上;在一个就是对权限的控制方面做的不是特别完善,因此接下来,在权限方面还应该加强。对于备份和数据恢复功能,现在和预期的结果是一致的,比较符合。实力和时间的限制,在代码的编写上面,存在许多的冗余代码,因此这方面需要改进,把重复的代码封装成方法,减少冗余度。
    6.4 本章小结本章主要是对已完成的功能做系统测试,分模块的进行测试,测试这些功能是否能达到预期的结果;为什么没有达到预期。对于每一个模块都写了相应的测试用例,通过这些测试用例的分析,整个系统的功能基本上达到了预期的效果,但是还有进一步改进的地方,让整个系统更完善。
    参考文献[1] 辛运帏等. java语言程序设计[M].北京:人民邮电出版社,2009
    [2] (美)(Nicholas C.Zakas)扎卡斯. JavaScript高级程序设计[J].人民邮电出版社2006
    [3] 姜承尧. MySQL技术内幕:InnoDB存储引擎[M].机械工业出版社 2011-1
    [4] 张海藩;吕云翔.软件工程[M]. 人民邮电出版社 2013-09-01
    [5] Roger S.Pressman, 郑人杰, 马素霞等. 软件工程:实践者的研究方法(原书第7版)[M]. 北京: 机械工业出版社, 2011
    [6] 李兴华, 王月清. 名师讲坛:Java Web开发实战经典基础篇(JSP, Servlet, Struts, Ajax)[M].北京: 清华大学出版社, 2010
    [7] 成先海.数据库基础与应用[M].北京:机械工业出版社,2008.
    [8] 张艳.基于工作过程的物流信息系统与管理课程的重构[J].辽宁高职学报,2010, 12(2):45-47.
    [9] 李小娜,董绍华.物流信息技术在现代物流中的应用[J].中国科技信息,2008,(21):140-143.
    [10] 隋英琴.供应链管理环境下的物流管理创新[J].科技创业,2008,14(03):123-125.
    [11] 陈雄华 Spring 企业级应用开发详解[M] 北京:电子工业出版社 2009
    [12] 王寅田. 基于Hadoop的交通物流大数据处理系统设计与实现[D]. 上海交通大学 2014
    [13] 李海峰. MVC模式架构的应用研究[J]. 自动化与仪器仪表. 2013(01)
    [14] 陈凤琴.基于B/S模式的中小饲料企业进销存系统设计与实现[D].南昌大学2014
    [15] 黄沙.企业物流成本管理存在问题及对策[J].物流技术与应用,2011,13(2):101-102.
    20 评论 123 下载 2020-07-31 11:34:36 下载需要13点积分
  • 基于C#和SQL SERVER数据库实现的餐饮收银系统

    1 需求分析分析思维导图

    2 部分原型设计图登录

    管理员主页面

    3 实际实现界面注册界面

    登录界面

    管理员主页面

    添加食物界面

    服务员订单界面

    修改食物详情界面

    未完成订单界面

    支付成功并找零界面

    已完成订单界面

    4 程序使用说明
    管理员账号和密码:admin, admin
    服务员账号和密码: test, test

    注:可自行注册账号并登录,但是只能注册服务员账号
    5 总结这次写C#作业还是挺累的。我按照正常的软件开发流程写这个作业。借用思维导图,花了大概两个小时进行需求分析和原型设计。当然,在分析的过程中,始终无法对整个项目进行细致入微地考虑,所以总有考虑不周的地方,比如进行原型设计的时候没有考虑到实现的难度,或者说考虑地不够,导致在项目进行时对原型进行了些许微调。
    整个分析的过程是非常有效的,尤其是数据库,在实施过程中只进行了很少的微调。由于C#语言基础知识掌握不够,只花一个小时看完教科书就上手干,其中走了不少弯路。比如在连接数据库的时候总是连接不上(花了一整天连接Sql Server,可还是不行),后来才知道是Visual Studio缺少组件,后来改用比较熟悉的MySQL才将数据库问题解决。
    另外一个需要值得反思的是把大把时间花在UI上是否值得。虽然项目写出来非常好看,但是功能模块并不多,只是够用。这次作业大概花了三天的时间才做完,是远超出预期的,但是在这过程中确实学到了很多,踩了很多坑,比如把项目写残了一次,不过幸好用版本控制工具git给回滚回来了。
    期间解决了很多问题,对C#的掌握更深了,总的来说还是比较满意的。
    5 评论 111 下载 2018-11-06 10:39:08 下载需要11点积分
  • 基于java和Sql Server数据库的停车场管理系统

    一、实验内容:实现停车场管理系统,应用于车辆的出、入管理。
    二、功能要求:包括车辆进出管理与系统管理等功能模块,可根据车辆停放时间及收费标准自动收费。用户需要事先办理停车卡并充值,停车卡分优惠卡和普通卡两类。

    车场管理:车辆入场、车辆出场
    信息查询:某时间段的出入场信息,当前在场信息,车辆历史停车记录及收费信息
    信息维护:用户及停车卡信息维护、充值等
    系统管理:车位信息,计费标准等

    系统包含两类用户:管理员用户和普通用户。
    管理员可以使用系统所有功能,普通用户只能查询车辆历史记录、用户信息、停车卡充值,查询计费标准。
    三、实验环境:
    Windows XP
    JDK 1.6
    Eclipse
    SQL Server
    备注:

    在XP平台开发DK(JavaDevelopment Kit)是Sun Microsystems针对Java开发员的产品Eclipse进行前台和程序设计,开发图形用户界面和停车收费功能实施
    SQL建立数据库

    四、需求分析与设计:4.1 需求分析:本软件具有如下主要功能:

    本系统包括两类用户:管理员用户和普通用户。管理员可以使用系统所有功能,普通用户只能查询车辆历史记录、用户信息(只限于个人信息)、查询计费标准、查询当前在场信息、查询出入场信息、当前可用车位信息、口令修改。具体模块划分为如下模块:车场管理模块、信息查询模块、信息维护模块、系统管理模块。
    车场管理模块:(应该分为车辆入场和车辆出场两部分)

    车辆入场功能描述:车辆进入停车场时进行登记,记录入场时间并指定车位。只有具有停车卡的车辆才可进场,没有办理停车卡的车辆,应先办理车卡。如果没有相应车位,不能入场;如果卡中余额低于100元,应先充值后再入场。满足条件的车辆,为其指定车位并记录入场时间。车卡分两种类型普通型和优惠型。车辆出场功能描述:车辆开出停车场时进行登记,记录出场的时间并进行自动收费(从卡上扣除)。根据车辆进场时间,出场时间及收费标准自动计算车主应该缴纳的费用。如果停车时间包含不足一小时的时间,超过30分钟按一小时计算,不足三十分钟不计算。如果卡上余额足够则直接扣除;如果卡上余额不足,则应先充值后再扣除相应费用。
    信息查询模块功能描述:在这个模块里用户可以查询出入场信息、当前在场信息、用户个人信息、用户历史记录、收费标准以及当前可用车位信息
    查询出入场信息功能描述: 查询当前在场信息户可以在这里查询到两种车位的总量及当前可有的车位数量。
    查询用户个人信息功能描述:登录的管理员可以根据卡号和名字查询用户信息。登陆的普通用户只可以查到自己的信息。
    查询用户历史记录功能描述:用户可以输入卡号查询相应卡号的历史记录,包括车位号、开始停车时间、结束停车时间、停车总时间、相应收取的费用。
    收费标准功能描述:用户可以在这里查询不同种类的车位和不同卡的计费标准。
    当前在场信息功能描述:用户可以在这里查询到当前在场的车辆信息,包括卡号,车位号,开始停车时间。
    当前可用车位信息功能描述:在这里用户可以查询当前可用的车位的信息,包括车位号、车位类型。
    信息维护模块在这个模块里用户可以实现用户注册、用户修改及用户充值
    用户注册功能描述:在这里管理员可添加新的用户(普通用户)。
    用户修改管理员在这里可以修改用户。这里会以表的形式显示所有的用户信息,包括用户的停车卡信息维护,充值信息等。管理员点击相应的一行用户信息,这行信息会自动填充到表下的面板里,用户可以在面板里修改用户信息,面板下面有两个按钮,修改、删除,点击相应的按钮可以实现相应的功能。
    用户充值功能描述:用户可以再这里查到自己的余额,并且可以在这里完成充值。
    系统管理模块功能描述:在这个模块里可以修改相应的车位信息计费标准、注册管理员、更改用户口令以及查看系统声明信息。
    管理员注册功能描述:管理员可以在这里添加新的管理员。
    更改口令功能描述:用户可以在这里更该自己的密码。注:操作员只可以修改自己的密码。
    计费标准管理功能描述:管理员可以在这里不同车位类型、不同车卡类型的收费标准。
    关于功能描述:用户可以在这里看到系统声明。

    4.2 界面设计登陆界面

    管理员主界面

    普通用户主界面

    车辆入场界面

    车辆出场界面

    计费标准界面

    当场在场信息界面

    用户历史信息界面

    用户个人信息界面

    普通用户个人信息界面

    出入场信息界面

    当前可用车位信息界面

    用户注册界面

    用户修改界面

    用户充值界面

    管理员注册界面

    更改口令界面

    计费标准管理界面

    关于界面

    五、数据库设计5.1 数据库关系图
    5.2 数据表的结构设计


    用户表:users








    字段名称
    数据类型
    可空
    默认值
    说明


    cardid
    int
    不可

    主键,用户的停车卡号


    name
    Nvarchar(20)
    不可

    用户姓名


    password
    Nvarchar(20)


    用户密码


    cardtype
    Nvarchar(20)


    停车卡类型


    userstype
    Nvarchar(20)


    用户类型


    carid
    int


    用户车牌号


    tel
    int


    用户电话号码


    overage
    int


    用户余额






    车位信息表:sit_infor








    字段名称
    数据类型
    可空
    默认值
    说明


    stationid
    int
    不可

    主键,车位号


    stationtype
    Nvarchar(20)
    不可

    车位类型






    停车收费卡收费表:charger








    字段名称
    数据类型
    可空
    默认值
    说明


    cardtype
    Nvarchar(6)


    车卡类型


    stationtype
    Nvarchar(20)


    车位类型(车卡类型与车位类型一起作为主键)


    charge
    int


    价格






    停车表:park








    字段名称
    数据类型
    可空
    默认值
    说明


    cardid
    int


    车卡号(外键)


    stationid
    int


    车位号(外键)


    parkid
    int

    1,每次增加一
    停车号,主键


    startpark
    datetime


    停车开始时间


    endpark
    datetime


    停车结束时间


    fee
    int


    停车的收费


    sumpark
    int


    停车总时间



    六、关键技术介绍6.1 在其他类中得到当前登录用户对象 实现方法:在LoginFrame类中设置两个静态方法,在其他类中只需要引入LoginFrame类,然后调用他的静态方法即可。方法体如下:
    public static users getUser() { return user; } public static void setUser(users user) { LoginFrame.user = user; }
    6.2 实现用户类型不同,主界面不同的功能 可以定义静态方法disMenu().当用户是普通用户时,调用disMenu()方法即可。具体实现如下
    public void disMenu() { mnuPark.setEnabled(false); mnuSever.setEnabled(false); mnuManZhuCe.setEnabled(false); mnuManCharge.setEnabled(false); } if(user.getUserstype().equals("管理员")) { MdiFrame frame1 = new MdiFrame();//创建一个主窗体 frame1.setVisible(true);//设置其可见 LoginFrame.this.setVisible(false);//设置登录窗体为不显示 } else {//判断用户名是否为null MdiFrame frame = new MdiFrame();//创建一个主窗体 frame.disMenu(); frame.setVisible(true);//设置其可见 LoginFrame.this.setVisible(false);//设置登录窗体为不显示 }
    6.3 怎么得到系统时间 SimpleDateFormat myfmt=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String a4 = myfmt.format(new java.util.Date()).toString();
    6.4 怎么计算时间差值 try { java.util.Date now = myfmt.parse(a3);//a3是系统当前时间(即出场时间) java.util.Date date=myfmt.parse(a7);//a7是入场时间 int l=(int) (now.getTime()-date.getTime());//计算毫秒差值 day=l/(24*60*60*1000);//获取天数 hour=(l/(60*60*1000)-day*24);//获得小时 min=((l/(60*1000))-day*24*60-hour*60);//获得分钟 } catch (Exception e1) { JOptionPane.showMessageDialog(null,"消费计算错误"); } if(min < 30)//如果分钟小于30分钟 a8 = day*24+hour; else //如果分钟大于30分钟 a8 = day*24+hour+1;
    6.5 怎么让布局更优美 使用布局管理器; GridBagLayout,以更改密码界面为例:
    getContentPane().setLayout(new GridBagLayout()); setBounds(234, 129, 285, 223); final JLabel label_5 = new JLabel(); label_5.setText("登 录 名:"); final GridBagConstraints gridBagConstraints_11 = new GridBagConstraints(); gridBagConstraints_11.gridy = 2; gridBagConstraints_11.gridx = 0; getContentPane().add(label_5, gridBagConstraints_11);
    七、系统实现功能结构图
    61 评论 1718 下载 2018-11-19 09:32:08 下载需要13点积分
  • 基于winform实现的仿windows画板绘图程序

    1、设计目标和要求
    用面向对象技术实现一个类似于Windows画板的程序
    要求实现生成图形的位图文件和JPEG文件保存和打开功能

    2、编译与运行说明
    Windows操作系统
    VS2008下编译
    装有.Net FrameWork 3.5及以上版本运行库
    运行时exe文件需与光标文件getcolor.cur、paint.cur、pen.cur在同一目录下,否则会报错

    3、算法原理介绍本程序图形界面采用.net framework 3.5中的winform制作而成,用bitmap类对象存储图像,用picturebox控件显示图像,用Graphics类对象修改图像,用鼠标事件响应鼠标操作,用绘图事件进行即时反馈(绘图交互)。
    实现了:调整颜色、打开保存(支持bmp、gif、exif、jpg、png、tiff格式)、铅笔、画刷、线段、圆形、矩形、取色器、油漆桶、橡皮等功能。其中,线段、圆形、矩形带有画图即时反馈,圆形、矩形支持空心于实心两种模式;油漆桶采用种子填充算法;画刷、橡皮支持调整大小;铅笔、画刷、橡皮由于鼠标事件MouseMove的响应频率不足使得取到的点断断续续,采用将相邻的点用直线联接起来,实际测试效果良好;所有工具均用光标自定义或绘图事件的方式实现了,光标在绘图区内的变化。
    4、系统设计和实现//Form1.h#pragma oncenamespace 关键计算机图形学课程设计{ using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void);//构造函数 protected: /// <summary> /// 清理所有正在使用的资源。 /// </summary> ~Form1()//析构函数//以下是各控件、对象及用到变量声明 private: System::Windows::Forms::ToolStripPanel^ BottomToolStripPanel; protected: private: System::Windows::Forms::ToolStripPanel^ TopToolStripPanel; private: System::Windows::Forms::ToolStripPanel^ RightToolStripPanel; private: System::Windows::Forms::ToolStripPanel^ LeftToolStripPanel; private: System::Windows::Forms::ToolStripContentPanel^ ContentPanel; private: System::Windows::Forms::MenuStrip^ menuStrip1; private: System::Windows::Forms::ToolStrip^ toolStrip1; private: System::Windows::Forms::ToolStripButton^ brush; private: System::Windows::Forms::ToolStripMenuItem^ 文件ToolStripMenuItem; private: System::Windows::Forms::ToolStripMenuItem^ 新建ToolStripMenuItem; private: System::Windows::Forms::ToolStripMenuItem^ 打开ToolStripMenuItem; private: System::Windows::Forms::ToolStripMenuItem^ 保存ToolStripMenuItem; private: System::Windows::Forms::PictureBox^ pictureBox1; private: System::Windows::Forms::ColorDialog^ colorDialog1; private: System::Windows::Forms::OpenFileDialog^ openFileDialog1; private: System::Windows::Forms::SaveFileDialog^ saveFileDialog1; private: System::Windows::Forms::ToolStrip^ toolStrip2; private: System::Windows::Forms::ToolStripButton^ circle; private: array<Bitmap^> ^b; private: Graphics ^gra; private: System::Windows::Forms::Panel^ panel1; private: System::Windows::Forms::TableLayoutPanel^ tableLayoutPanel1; private: System::Windows::Forms::PictureBox^ pictureBox2; private: Bitmap ^pre; private: Graphics ^gp; private: Pen ^p; private: Color ^c1,^c2; private: int fx,fy,tx,ty,no,f,t,size; static const int mo=100; bool ld,rd,cv; array<Int32> ^lx,^ly; private: System::Windows::Forms::ToolStripMenuItem^ 编辑ToolStripMenuItem; private: System::Windows::Forms::ToolStripMenuItem^ 撤销ToolStripMenuItem; private: System::Windows::Forms::ToolStripMenuItem^ 重复ToolStripMenuItem; private: System::Windows::Forms::ToolStripButton^ sqare; private: System::Windows::Forms::FlowLayoutPanel^ flowLayoutPanel1; private: System::Windows::Forms::PictureBox^ color2; private: System::Windows::Forms::PictureBox^ color1; private: System::Drawing::Printing::PrintDocument^ printDocument1; private: System::Windows::Forms::PictureBox^ pictureBox3; private: System::Windows::Forms::PictureBox^ pictureBox4; private: System::Windows::Forms::PictureBox^ pictureBox5; private: System::Windows::Forms::PictureBox^ pictureBox6; private: System::Windows::Forms::PictureBox^ pictureBox7; private: System::Windows::Forms::PictureBox^ pictureBox8; private: System::Windows::Forms::PictureBox^ pictureBox9; private: System::Windows::Forms::PictureBox^ pictureBox10; private: System::Windows::Forms::PictureBox^ pictureBox11; private: System::Windows::Forms::PictureBox^ pictureBox12; private: System::Windows::Forms::PictureBox^ pictureBox13; private: System::Windows::Forms::PictureBox^ pictureBox14; private: System::Windows::Forms::PictureBox^ pictureBox15; private: System::Windows::Forms::PictureBox^ pictureBox16; private: System::Windows::Forms::PictureBox^ pictureBox17; private: System::Windows::Forms::PictureBox^ pictureBox18; private: System::Windows::Forms::PictureBox^ pictureBox19; private: System::Windows::Forms::PictureBox^ pictureBox20; private: System::Windows::Forms::PictureBox^ pictureBox21; private: System::Windows::Forms::PictureBox^ pictureBox22; private: System::Windows::Forms::PictureBox^ pictureBox23; private: System::Windows::Forms::PictureBox^ pictureBox24; private: System::Windows::Forms::PictureBox^ pictureBox25; private: System::Windows::Forms::PictureBox^ pictureBox26; private: System::Windows::Forms::PictureBox^ pictureBox27; private: System::Windows::Forms::PictureBox^ pictureBox28; private: System::Windows::Forms::PictureBox^ pictureBox29; private: System::Windows::Forms::PictureBox^ pictureBox30; private: System::Windows::Forms::PictureBox^ pictureBox31; private: System::Windows::Forms::PictureBox^ pictureBox32; private: System::Windows::Forms::PictureBox^ pictureBox33; private: System::Windows::Forms::PictureBox^ pictureBox34; private: System::Windows::Forms::PictureBox^ pictureBox35; private: System::Windows::Forms::PictureBox^ pictureBox36; private: System::Windows::Forms::PictureBox^ pictureBox37; private: System::Windows::Forms::PictureBox^ pictureBox38; private: System::Windows::Forms::PictureBox^ pictureBox39; private: System::Windows::Forms::PictureBox^ pictureBox40; private: System::Windows::Forms::PictureBox^ pictureBox41; private: System::Windows::Forms::PictureBox^ pictureBox42; private: System::Windows::Forms::PictureBox^ pictureBox43; private: System::Windows::Forms::PictureBox^ pictureBox44; private: System::Windows::Forms::PictureBox^ pictureBox45; private: System::Windows::Forms::PictureBox^ pictureBox46;private: System::Windows::Forms::ToolStripButton^ pen;private: System::Windows::Forms::Panel^ panel2;private: System::Windows::Forms::Panel^ panel3;private: System::Windows::Forms::PictureBox^ pictureBox47;private: System::Windows::Forms::PictureBox^ pictureBox48;private: System::Windows::Forms::PictureBox^ pictureBox49;private: System::Windows::Forms::PictureBox^ pictureBox50;private: System::Windows::Forms::PictureBox^ pictureBox51;private: System::Windows::Forms::ToolStripMenuItem^ 清除ToolStripMenuItem; ToolStripButton ^mod1,^mod2;private: System::Windows::Forms::ToolStripButton^ fillin;private: System::Windows::Forms::ToolStripButton^ line;private: System::Windows::Forms::ToolStripButton^ erazer;private: System::Windows::Forms::ToolStripButton^ getcolor;private: System::Windows::Forms::ToolStripButton^ empty;private: System::Windows::Forms::ToolStripButton^ ssub;private: System::Windows::Forms::ToolStripButton^ filled;private: System::Windows::Forms::ToolStripButton^ sadd;private: System::Windows::Forms::ToolStripMenuItem^ 另存为ToolStripMenuItem; System::ComponentModel::Container ^components;void InitializeComponent(void)//各控件初始化private: System::Int32 add1(int x);private:System::Int32 sub1(int x);private:System::Void next();//重复的实现private:System::Void last();//撤销的实现private:System::Void update()//对pictureBox1上显示的图像进行更新private:System::Void newb()//创建新bitmap来保存修改(用来实现撤销与重复功能)private:System::Void newb(int x,int y)//在创建bitmap同时改变图象大小(可实现缩放)private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) //窗体加载事件各变量初始化private: System::Void pictureBox2_MouseUp(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)//用来响应拖动右下角小白块时缩放的鼠标操作private: System::Void 撤销ToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) //撤销菜单private: System::Void 重复ToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) //重复菜单private: System::Void setcolor(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) //用来设置前景色或后景色private: System::Void pictureBox3_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) 以下是个眼色框的鼠标事件,用来调整颜色private: System::Void pictureBox4_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox5_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox6_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox7_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)private: System::Void pictureBox8_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox9_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox10_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox11_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox12_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)private: System::Void pictureBox13_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)private: System::Void pictureBox14_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox15_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox16_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox17_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox18_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox19_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox20_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox21_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox22_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)private: System::Void pictureBox23_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox24_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox25_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)private: System::Void pictureBox26_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox27_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox28_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox29_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox30_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)private: System::Void pictureBox31_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox32_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox33_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox34_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)private: System::Void pictureBox35_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox36_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)private: System::Void pictureBox37_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)private: System::Void pictureBox38_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox39_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)private: System::Void pictureBox40_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox41_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox42_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)private: System::Void pictureBox43_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox44_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox45_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox46_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox47_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox48_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)private: System::Void pictureBox49_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void pictureBox50_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) private: System::Void color1_DoubleClick(System::Object^ sender, System::EventArgs^ e)//用来双击调出颜色选择对话框private: System::Void color2_DoubleClick(System::Object^ sender, System::EventArgs^ e) //用来双击调出颜色选择对话框private: System::Void 清除ToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) //清除菜单实现private: System::Void pen_Click(System::Object^ sender, System::EventArgs^ e)//实现了铅笔按钮private: System::Void brush_Click(System::Object^ sender, System::EventArgs^ e) //刷子按钮private: System::Void circle_Click(System::Object^ sender, System::EventArgs^ e)//圆形工具private: System::Void sqare_Click(System::Object^ sender, System::EventArgs^ e)//矩形工具private: System::Void fillin_Click(System::Object^ sender, System::EventArgs^ e)油漆桶工具private: System::Void line_Click(System::Object^ sender, System::EventArgs^ e) //线段工具private: System::Void getcolor_Click(System::Object^ sender, System::EventArgs^ e) //取色器工具private: System::Void erazer_Click(System::Object^ sender, System::EventArgs^ e) //橡皮工具private: System::Void filled_Click(System::Object^ sender, System::EventArgs^ e) //实心模式private: System::Void empty_Click(System::Object^ sender, System::EventArgs^ e) //空心模式private: System::Int32 fitx(int x)//检查x坐标是否在范围内private: System::Int32 fity(int y) //检查y坐标是否在范围内private: System::Boolean fit(int x,int y) //检查x、y坐标是否在范围内private: System::Void mmove(System::Windows::Forms::MouseEventArgs^ e)//实现了各工具拖动鼠标时的响应private: System::Void pictureBox1_MouseMove(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)//鼠标移动事件调用了mmove()private: System::Void pictureBox1_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) //鼠标按下事件实现了各工具按下鼠标时的响应private: System::Void pictureBox1_MouseUp(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) //鼠标放开事件实现了各工具放开鼠标时的相应private: System::Void pictureBox1_MouseEnter(System::Object^ sender, System::EventArgs^ e) //鼠标进入事件用来配合光标的改变(自己绘制光标时将光标隐藏)private: System::Void sadd_Click(System::Object^ sender, System::EventArgs^ e) //尺寸增大按钮的实现private: System::Void ssub_Click(System::Object^ sender, System::EventArgs^ e) //尺寸缩小按钮的实现private: System::Void pictureBox1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) //绘图事件用来绘制部分工具光标及绘制绘画即时响应private: System::Void pictureBox1_MouseLeave(System::Object^ sender, System::EventArgs^ e) //鼠标离开事件用来配合部分光标的绘制private: System::Void tchong(int ix,int iy,Color c)//4邻域种子填充private: System::Void 打开ToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e)// 打开菜单的实现private: System::Void 另存为ToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e)//另存为菜单的实现private: System::Void openFileDialog1_FileOk(System::Object^ sender, System::ComponentModel::CancelEventArgs^ e) //打开对话框确定的实现private: System::Void saveFileDialog1_FileOk(System::Object^ sender, System::ComponentModel::CancelEventArgs^ e) //保存对话框确定的实现}
    5、运行结果程序界面

    铅笔演示

    油漆桶演示

    矩形(实心)演示

    圆形(空心)演示

    各种尺寸的刷子、橡皮

    保存对话框

    6、设计总结这次设计令我受益匪浅,使我更加熟练的掌握了winform中有关图形和鼠标处理的部分,设计历时10天虽然比较累但是也充满了趣味和成就感,相信在这次设计中我获得的经验必然能在以后派上更大的用处。
    3 评论 52 下载 2019-03-20 16:12:18 下载需要12点积分
  • 基于JSP和SQL Server的网上花店销售系统的设计与实现

    摘 要随着时代的快速发展,我们的生活已经离不开计算机网络,而电子商务的快速发展正在改变着人们的生活方式。随着各种网上购物平台的不断兴起,人们早已习惯了不用出门就买到自己需要的东西。但是针对鲜花销售这方面的网络平台还很少,因此设计一个网上花店销售系统很有前景。
    网上花店销售系统采用JSP+Servlet+JavaBean的MVC模式,将数据对象、业务逻辑以及用户界面分离。该系统分为用户和管理员两个角色。用户注册登录后可以浏览鲜花,浏览公告,购买鲜花,管理员登录后可以对系统进行管理和维护。
    网上花店销售系统对于用户来说操作方便,满足了用户随时随地购买鲜花的需求,不仅为用户节省了时间,还提高了用户的购买效率。对于花店老板而言,不仅提高了销售效率还降低了时间和人工成本。
    关键词:销售系统;JSP;MVC;网上花店
    AbstractWith the rapid development of the times, our lives have been inseparable from the computer network, and the rapid development of e-commerce is changing people’s way of life. With the continuous rise of a variety of online shopping platform, people have long been accustomed to buy their own needs do not have to go out. But for the sale of flowers on the network platform is still very small, so the design of an online florist sales system is promising.
    Online flower florist system using JSP + Servlet + Javabean MVC model, the data object, business logic and user interface are separate. The system includes two roles: user and administrator. After registering, user can browse the flowers, browse the announcement, buy flowers, Administrators can manage and maintain the system after logging.
    Online florist sales system for the user is easy to operate, It fulfills the needs of users to buy flowers anytime and anywhere.This system not only saves user’s time, but also improve the user’s purchasing efficiency. For the flower shop owner, this system not only improve the sales efficiency but also reduce the time and labor costs.
    Key words: sales system; JSP; MVC; online florist
    1 绪论1.1 现状分析鲜花销售行业最初是鲜花销售商个体进行实体销售,后来经过发展形成了鲜花进入批发市场再进行分销的形式。传统的鲜花销售模式是以实体花店为主体,直到后来由于网络的迅速发展,电子商务的介入使鲜花销售发生了很大的变化。随着人们生活水平的提高以及对生活品质的要求,鲜花销售行业发展的前景也越来越好。目前,很多大的鲜花销售品牌已经开始了鲜花的网上销售,方便了消费者购买鲜花的需求,节约了大量的时间。但很多个体鲜花销售商的鲜花销售依然不够景气,还停留在传统花店的状态。这样不仅消费者必须亲自进入花店进行购买,再加上鲜花包装等一系列工序,浪费了大量的时间,而且鲜花销售商也会由于实体销售的缺陷降低销售额。另外,传统花店销售由于地域性的约束和客户范围的划分,使得传统花店的客户受到限制。因此发展网上花店销售系统就显得比较重要,也比较有前景。这样能扩展鲜花消费市场,实现利润增长。网上花店销售系统的实现不仅缩短了鲜花上市时间,节约了成本,方便了消费者购买,方便管理员管理,节约了大量时间和大量的人力物力,还增强了人们之间的感情交流等。
    1.2 研究意义传统的实体鲜花销售存在很多的限制,该系统致力于满足用户随时随地在网上挑选购买鲜花的需求。对于花店老板而言,可以提高工作效率,使网上鲜花管理工作系统化、规范化、自动化,提高整个购买鲜花流程的效率,使总体水平上升到一个新的高度。与传统花店相比,网上花店有其不可比拟的优势。首先网上花店的运营成本较低,职员人数较少,也不需要很大的运营场地。其次网上花店有传播信息迅速、容量大、范围广、可交互等特点。不仅如此,网上花店的建立,可以更好的满足消费者的需求。通过这种网络工具为消费者带来方便,同时促进浏览此网站用户的购买欲,提高销售效率。
    网上花店系统给用户提供了一整套完整的网上鲜花订购流程,使用户足不出户直接进行网上购物,给消费者带来了很大的方便。随着人类社会的发展,人际交往变得越来越重要。在这个繁忙的社会,人们很少有时间能见面交流感情,在特殊的日子里送给好友一束鲜花是用于联络感情的很好方式,因此受到广大消费者的欢迎。与此同时,商家也不再需要在商店里被动的等待顾客,完全可以坐在家里就轻松的卖出自己的商品,获得利润。计算机的存储与快速查询功能大大提高了网上花店管理的效率,并且还提高了查询并购买鲜花的精确度。方便快速的操作,不仅可减少从前的漏洞,还可以减少因工作的冗余出现的错误,更重要的是该系统的操作非常简单,推广起来比较容易。
    1.3 研究方法网上花店销售系统将采用瀑布模型的方式,先对目前鲜花销售的情况进行概述,然后对开发系统的环境以及技术进行简要介绍,之后对开发网上花店销售系统进行可行性分析、需求分析、总体设计、详细设计、编程实现以及测试直到实现最终理想的效果。本文将详细阐述整个实现过程。
    2 系统的开发环境及技术简介2.1 系统开发环境简介2.1.1 MyEclipse简介MyEclipse企业级工作平台作为对Eclipse IDE的扩展,它的功能体现在可以在数据库和JavaEE的开发、发布、应用程序服务器的整合方面极大的提高工作效率。MyEclipse几乎包括了目前所有主流开源产品的专属Eclipse开发工具,它作为功能丰富的JavaEE集成开发环境,在功能方面包括了完备的编码、调试、测试和发布,十分完整地支持HTML、Struts 2、Spring、JSP、CSS、JavaScript、Servlet、Hibernate、JDBC数据库链接工具等。JavaEE模型;Web开发工具;EJB开发工具;应用程序服务器的连接器;JavaEE项目部署服务;数据库服务;MyEclipse整合帮助是MyEclipse的7类特征。在Eclipse中,对于以上每一种功能上的类别都存在相应的功能部件,以及一系列可以用来实现它们的插件。MyEclipse这种结构上的模块化为它带来了很多优势,可以让开发人员在基本不影响其他模块的前提下,可以单独的扩展和升级任一模块。
    2.1.2 Tomcat简介Tomcat服务器是一个免费的开放源代码的Web应用服务器。运行时占用的系统资源小;扩展性好;支持负载平衡与邮件服务等开发应用系统常用的功能这几个特点使得其很受编程人员的喜欢。任何一个编程人员都可以更改它或在其中加入新的功能,因此Tomcat服务器还在不断的改进和完善中。 Tomcat是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是调试和开发JSP程序的第一选择。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache服务器,可利用它响应对HTML页面的访问请求。实际上Tomcat部分是Apache服务器的扩展,但它是独立运行的,所以当你运行Tomcat时,它实际上是作为一个与Apache独立的进程单独运行的。
    2.1.3 SQL Server简介SQL Server 是一个关系数据库管理系统,常用的有SQL Server 2000,SQL Server 2005,SQL Server 2008等版本。SQL Server 2008是微软公司2008年推出的数据库产品。它紧密结合了微软公司的各类主要产品,与Windows操作系统、Office办公软件、Visual Studio开发平台的最新技术进行了衔接。其各项指标在同类产品中都堪称优秀,而且图形化的管理界面十分便于学习与使用。SQL Server 2008具有很多新的特点,它是可信任的,使得公司可以以很高的安全性、可靠性和可扩展性来运行他们最关键任务的应用程序。它是高效的,使得公司可以降低开发和管理他们的数据基础设施的时间和成本。它是智能的,提供了一个全面的平台,可以在你的用户需要的时候给他发送观察和信息。
    2.2 系统开发技术简介2.2.1 JSP简介JSP全称Java Server Pages,是一种动态网页开发技术。JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Servlet和JSP配合才能完成。JSP具备了Java技术简单易用的特点,完全地面向对象,具有平台无关性、主要面向因特网且安全可靠。简单的理解,JSP就是HTML页面+Java代码,但是JSP中能写的内容还不止这些,可以包含HTML标签,CSS,JavaScript,JAVA代码,EL表达式,引入并使用其他标签库,例如JSTL标签库、Struts 2标签库等。浏览器可以直接运行HTML页面,但是不能直接运行JSP页面,JSP是需要在拥有JSP引擎的服务器中运行的,例如Tomcat服务器。所以JSP是运行在服务器端的,运行完之后,把动态生成的HTML页面再使用IO流写回给浏览器,浏览器接收并且解析后再呈现出来效果。JSP的生命周期分为编译阶段,初始化阶段,执行阶段,销毁阶段。
    2.2.2 Javabean简介JavaBean 是一种Java语言写成的可重用组件。为了编写JavaBean,类必须是特定的和公共的,并且具有无参数的构造器。JavaBean通过提供一个符合一致设计模式的公共方法公开内部域的成员属性。众所周知,属性名与此模式相一致,其他java类可以通过自省机制发现和操纵这些JavaBean的属性。用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。JavaBean可分为两种:一种是有用户界面的JavaBean;还有一种是没有用户界面,主要负责处理事务(如数据运算,操纵数据库)的JavaBean。JSP通常访问的是后一种JavaBean。JavaBean是可复用的平台独立的软件组件,开发者可以在软件构造器工具中对其直接进行可视化操作。一个JavaBean由3部分组成:属性、方法、事件。
    2.2.3 Servlet简介Servlet是一个基于JAVA技术的Web组件,运行在服务器端,由Servlet容器所管理,用于生成动态的内容,Servlet是平台独立的Java类,编写一个Servlet实际上就是按照Servlet规范编写一个Java类,Servlet被编译为平台独立的字节码,可以被动态地加载到支持 Java技术的Web服务器中运行。Servlet容器也叫Servlet引擎,是Web服务器或者应用服务器的一部分,用户在发送请求和响应之上提供网络服务,Servlet不能独立运行,必须被部署到Servlet容器中,由容器实例化和调用Servlet的方法,Servlet容器在Servlet的生命周期内包含和管理Servlet。Servlet是单实例多线程的运行方式,每个请求在一个独立的线程中运行,提供服务的Servlet实例只有一个Servlet 具有可升级性,能响应更多的请求,因为Servlet容器使用一个线程而不是操作系统进程,线程占用的资源要小,Servlet使用标准的API,被更多的Web服务器所支持。Servlet使用Java语言编写,拥有更多的Java程序语言的优点,Servlet可以访问Java平台丰富的类库,使得各种应用的开发更为容易,Servlet容器给Servlet提供额外的功能。
    2.2.4 JDBC简介对系统来说数据库连接应该说是最为重要的部分,Java中连接数据库的技术是JDBC。JDBC作为一种用于执行SQL语句的Java API,具备为多种关系数据库提供统一访问的功能,JDBC是由一组用Java语言编写的类和接口组成的。为了达到可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序的目的,JDBC提供了一种基准。众所周知,JDBC API、JDBC驱动程序和JDBC驱动程序管理器是JDBC的三个部分,即可以通过Java.sql包来提供JDBC API,JDBC API上仅仅设计为了利用数据库而提供的类的接口,提供JDBC驱动的软件商来实际完成这个接口。当JDBC API制作的程序进行数据调用时,JDBC驱动发挥它的作用,实际连接数据库并且进行相应的处理, JDBC API的接口类也由JDBC驱动提供。
    两层模型(C/S)和三层模型(B/S)同样都是JDBC API支持数据库访问的。在两层模型(C/S)中,Java Applet或应用程序与数据库会直接进行对话,与所访问的特定数据库管理系统进行通讯时需要一个JDBC驱动程序,数据库收到被用户送来的SQL语句,而用户将会收到其被送回的结果。客户机/服务器配置指的是数据库可以位于另一台计算机上,用户通过网络连接到上面。其中客户机就是我们平时常说的用户的计算机,而服务器是我们常说的提供数据库的计算机,网络是Internet。在三层模型(B/S)中,服务的”中间层”先是收到命令,然后由服务的“中间层”将SQL语句交给数据库,数据库需要对SQL语句进行处理并将所得结果送回到中间层,最后用户将会收到中间层所得的结果。JDBC是用于直接调用SQL命令的“低级”接口。它在这方面的功能极佳,相比其它的数据库,它连接API易于使用,与此同时它也被设计成为了一种基础接口,高级接口和工具可以建立在它之上。很明显,JDBC具有如下优点:JDBC支持不同的关系数据库,JDBC使得开发人员不需要再使用复杂的驱动器调用命令和函数,可以将常用的JDBC数据库连接封装成一个类等。
    2.2.5 SQL语言简介SQL全称是结构化查询语言(Structured Query Language),SQL语言结构简洁,功能强大,简单易学。SQL语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。SQL语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。SQL语言不仅是一个功能强大的通用的关系数据库标准语言,而且还是一种介于关系演算和代数之间的语言,其功能之强大体现在查询、操纵、定义和控制这四个方面。SQL语言包含以下六个部分:

    数据查询语言
    数据操作语言
    事务处理语言
    数据控制语言
    数据定义语言
    指针控制语言

    作为非过程化的语言,SQL一次只对一个记录进行处理,自动对数据提供导航。SQL不对单个记录进行操作,它不仅可对记录集进行操作,还允许用户在高层的数据结构上工作。对于所有SQL语句,输入的是接受集合,输出的是返回集合。SQL的集合特性允许一条SQL语句的结果作为另一条SQL语句的输入。SQL可用于所有用户的DB活动模型,这里所指的用户包括系统管理员、数据库管理员、 应用程序员、决策支持系统人员以及许多其它类型的终端用户等。基本的SQL命令简单易学,一般情况下只需很少时间就能学会,即使是高级的命令在几天也内便可掌握。SQL语言则将所有任务统一在了一种语言中。用户之所以可将使用SQL的技能从一个关系数据库管理系统转到另一个,是因为所有主要的关系数据库管理系统都支持SQL语言。
    3 可行性研究3.1 经济可行性经济可行性,主要考虑的是系统开发涉及到的一些相关费用问题,企业是否可以支撑这些费用,通常来分析,软件系统开发主要包括的费用有设备购买费用,人员开发成本,设备维护更新成本,以及其他零散费用等,这些费用中,人员开发费用相对较高,但是本次系统开发规模小,周期短,所设计的开发费用不高,因此企业不必担心此方面问题。再则就是设备购买费用,一般保持电脑,交换机,网络,服务器等,这些都是一次性购买,费用也不高。因此,对于企业来讲,问题不大,经济上可以接受。通过对现已存在的相关系统进行调查,开发该系统所需的相关资料可以由此采集。同时所需的应用软件、系统硬件也便于获得,因此该系统开发成本不高。在引进该系统之后,不可否认,与传统方式相比可以节省不少人力、物力及财力,因为它的确具有效率高、质量高、成本低以及实用性高的特点。所以,站在经济的角度来讲,网上花店销售系统被认定为是可行的。
    3.2 技术可行性技术可行性主要分析技术条件能否顺利完成开发工作,硬、软件能否满足开发者的需要等。首先,系统采用的是JAVA开发技术,这项技术比较全面,实用广泛,没有实现不了的功能需求;其次该网站采用了SQL Server2008数据库,它能够处理大量数据,同时保持数据的完整性并提供许多高级管理功能,它的灵活性、安全性和易用性为数据库编程提供了良好的条件;最后开发工具,采用的是MyEclipse,工具中具有框架函数等,可以直接引用。因此,系统的软件开发平台已成熟可行。硬件方面,科技飞速发展的今天,硬件更新的速度越来越快,容量越来越大,可靠性越来越高,价格越来越低,其硬件平台完全能满足此系统的需要。
    3.3 操作可行性操作可行性主要是考虑系统完成后,用户使用的是否便利,是否可以达到用户的操作要求。该系统界面设计充分考虑浏览用户的习惯,鲜花信息浏览,公告浏览,鲜花搜索,用户注册,用户登录,用户挑选鲜花加入购物车,用户将购物车的鲜花生成订单,用户查看订单,用户管理个人信息等功能操作方便。除此之外,对于管理员而言,管理界面一目了然,对于系统的管理和维护也很容易。更重要的是所有网页设计清新、简洁、合理,不会让用户感到视觉疲劳,可操作性强。
    3.4 法律可行性法律可行性主要是看新系统的开发会不会在社会上或政治上引起侵权,有无违法问题。网上花店销售系统开发过程中所有技术资料都是合法的;在开发过程中是不存在知识产权问题的;未抄袭其他系统,故不存在侵犯版权问题;开发过程中不会涉及任何法律责任。
    4 需求分析4.1 数据描述4.1.1 数据流图数据流图简称DFD,它从数据传递和加工角度,以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。网上花店销售系统的数据流图如图4-1所示。

    在该数据流图中方框表示数据的原点或终点,原点和终点是系统之外的实体。椭圆表示变换数据的处理,也称之为加工,它对数据流进行某些操作或变换。箭头表示数据流,数据流是数据在系统中的运行方向。双杠表示数据存储文件,是用来暂时存储数据的。网上花店销售系统的实体有两个,分别为用户和管理员,用户对应于在网上购买鲜花的顾客,管理员对应于网上花店的老板。此系统中的加工对于用户来说有浏览鲜花、查看分类、管理用户信息、管理购物车、生成并查看订单、查看公告,对管理员来说有鲜花管理、分类管理、用户管理、订单管理、公告管理。此系统中的数据存储包括鲜花信息、分类信息、用户信息、购物车信息、订单信息和公告信息,在实际的实现中应该将这些信息存储在对应的表里,虽然鲜花信息、分类信息、用户信息、订单信息和公告信息是用户和管理员共享的,但是由于权限的不同用户对于鲜花信息、分类信息以及公告信息只有查看的权限,管理员对于这些信息有增、删、改的权限。在数据流图中反映为加工的不同。
    用户在系统中可以浏览鲜花、查看分类、管理用户信息、管理购物车、生成并查看订单、查看公告,本系统中用户数据流图如图4-2所示。

    管理员在系统中可以进行鲜花管理、分类管理、用户管理、订单管理、公告管理,其中管理员可以对鲜花、分类和公告进行添加、修改、查看和删除,对用户进行查看和删除,对订单进行查看和处理。本系统中管理员数据流图如图4-3所示。

    4.1.2 数据字典数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑、外部实体等进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明。图4-1中数据流条目如下所示:

    用户信息=用户ID+用户名+密码+姓名+角色+手机号+地址
    鲜花信息=鲜花ID+鲜花名+鲜花图片+上架时间+分类ID+分类名+价格+是否推荐+点击数+鲜花销量+鲜花描述
    公告信息=公告ID+标题+内容+添加时间
    分类信息=分类ID+分类名称
    购物车信息=购物车ID+用户ID+鲜花ID+鲜花名+价格+购买数量
    订单信息=订单ID+订单状态+用户ID+用户姓名+用户手机+收货地址+订单详情+订单号+备注+生成时间+总价

    根据数据流条目得到数据项条目如表4-1所示。



    名称
    类型
    长度
    别名




    id
    int
    11
    用户ID


    username
    varchar
    255
    用户名


    password
    varchar
    255
    密码


    xingming
    varchar
    255
    姓名


    role
    int
    11
    角色


    dianhua
    varchar
    255
    手机号


    dizhi
    varchar
    255
    地址


    id
    int
    11
    鲜花ID


    pname
    varchar
    255
    鲜花名


    imgpath
    varchar
    255
    鲜花图片


    createtime
    varchar
    255
    上架时间


    fname
    varchar
    255
    分类名


    jiage
    double

    价格


    tuijian
    varchar
    255
    是否推荐


    dianjishu
    int
    11
    点击数


    xiaoliang
    int
    11
    鲜花销量


    miaoshu
    text

    鲜花描述


    id
    int
    11
    公告ID


    biaoti
    varchar
    255
    标题


    neirong
    text

    内容


    shijian
    varchar
    255
    添加时间


    id
    int
    11
    分类ID


    fname
    varchar
    255
    分类名称


    id
    int
    11
    购物车ID


    shuliang
    int
    11
    购买数量


    id
    int
    11
    订单ID


    status
    varchar
    255
    订单状态


    xiangqing
    text

    订单详情


    orderid
    varchar
    255
    订单号


    beizhu
    varchar
    255
    备注


    shijian
    varchar
    255
    生成时间


    zongjia
    double

    总价



    4.1.3 系统IPO图IPO图是输入—处理—输出图(Input-Process-Output)的简称。基本形式是画三个方框,在左边框中列出有关输入数据,在中间框内列出主要处理,在右边框中列出产生的输出数据。网上花店销售系统的输入数据主要是用户信息以及鲜花信息,处理主要针对用户、鲜花分类、鲜花详情、购物车以及订单,输出数据对应于处理过程。该系统IPO图如图4-4所示。

    4.2 功能需求4.2.1 功能划分本网上花店销售系统主要分为前台操作和后台管理两部分。

    前台操作

    前台作为与用户直接交互的界面,在考虑功能的同时,也考虑了操作的简洁和方便性,目的是让大多数不太懂电脑操作的用户也能轻松的享受该系统带来的便利前台主要功能包括:首页(主界面)、鲜花搜索、鲜花分类、花店公告、鲜花浏览、用户注册、用户登录、订购鲜花、查看购物车、查看订单等
    后台管理

    后台管理考虑了花店管理的操作简单方便后台主要功能包括:分类管理、鲜花管理、公告管理、订单管理、用户管理

    4.2.2 功能描述
    首页(主界面):提供简洁美观的主界面,界面陈列系统提供功能,用户和管理员通过选择各个功能来达到自己所需的目的
    用户注册:新用户通过填写注册表单,将自己的详细信息输入并提交系统,系统会通过与数据库的连接以及表单限定的格式来检查合法性。注册成功后可以进行订购等其他功能
    用户登录:用户通过输入“用户名”和“密码”进行登录,系统会通过与数据库的连接来检查合法性,如果存在则登录成功继续接下来的功能,如果不存在则返回登录界面
    鲜花浏览:用户可以通过选择该功能看到本系统鲜花的详细介绍
    加入购物车:用户可以通过该功能选择自己要购买的鲜花并放入购物车,在购物车也可以进行数量的修改并且生成订单。但要首先登录才可以实现该功能
    生成订单:用户可以把购物车里的鲜花下订单
    查看订单:用户可以查询自己的订单,但首先必须登录
    修改个人信息:用户可以修改个人资料
    管理员分类管理:管理员可以对系统首页的分类进行增加、查看、修改、删除
    管理员鲜花管理:管理员可以对系统首页的鲜花进行增加、查看、修改、删除
    管理员公告管理:管理员可以对系统首页的公告进行增加、查看、修改、删除
    管理员订单管理:管理员可以对用户的订单进行查看、处理
    管理员用户管理:管理员可以对系统已经注册的用户进行查看、删除

    4.3 性能需求网上花店销售系统在日常处理中的响应速度为秒级,达到实时要求,以及时反馈信息。在进行统计分析时,根据所需数据量的不同而从秒级到分钟级,原则是保证操作人员不会因为速度问题而影响工作效率。系统处理的准确性和及时性是系统的必要性能。在系统设计和开发过程中,要充分考虑系统当前和将来可能承受的工作量,使系统的处理能力和响应时间能够满足用户对信息处理的求。由于网上花店销售系统的查询功能对于整个系统的功能和性能完成举足轻重,作为系统的很多数据源,其准确性很大程度上决定了网上花店销售系统的成败。在系统开发过程中,必须采用一定的方法保证系统的准确性。用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用Java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。当操作发生变化时,一些功能同样能够实现。因为在实现各项功能时了,把功能划分成了不同的模块,各模块之间互不干扰,而且JavaBean都采用类的形式,每个功能都封装成一个类,当运行环境发生变化时,对程序会有一些影响,但打上补丁就可以继续运行了。总体上讲,本系统具有一定的自适应性。
    4.4 运行需求
    硬件条件:英特尔酷睿2 CPU、1GB 内存、20GB以上硬盘的PC机
    软件条件:Windows 7操作系统

    当系统遇到问题时,首先查看运行环境是否更改;如果更改,只修复运行环境即可;若未更改,查看系统中各个模块之间的接口是否有问题,可通过调试改正错误。数据库最严重的问题是数据库损坏,此时最好是从备份恢复数据库。如果是由于存储问题导致部分数据库文件损坏,但数据库还可以连接,这种情况采用导出数据库的表结果和数据的方法来恢复数据库。解决数据库的性能问题,可以从以下方面入手,检查数据库的配置,如缓冲池,排序堆等是否处理;检查数据库是否收集过统计信息,准确的统计信息对语句优化起着重要的作用;对sql语句进行优化;查看是否有系统资源瓶颈。
    4.5 其他需求网上花店销售系统是直接面对使用人员的,而使用人员往往对计算机并不是非常熟悉。这就要求系统能够提供良好的用户接口,易用的人机交互界面。要实现这一点,就要求系统应该尽量使用用户熟悉的术语和中文信息的界面。针对用户可能出现的使用问题,要提供足够的在线帮助,缩短用户对系统熟悉的过程。网上花店系统中涉及到的数据是相当重要的信息,系统要提供方便的手段供系统维护人员进行数据的备份,日常的安全管理,系统意外崩溃时数据的恢复等工作。
    5 总体设计5.1 系统功能模块设计网上花店销售系统一共分为前台和后台两大模块,两个模块之间虽然在表面上是相互独立的,但是在对数据库的访问上是紧密相连的,各个模块访问的是同一个数据库,只是所访问的表不同。
    网上花店销售系统的前台功能模块分为:

    鲜花展示模块:鲜花展示模块主要是向用户展示网上花店的鲜花,主要分为鲜花搜索和鲜花分类两个子模块。用户可以通过鲜花搜索直接查询自己想要了解的鲜花,也可以通过鲜花分类查找某一类的鲜花
    公告展示模块:公告展示模块是管理员发布的与网上花店系统相关的公告信息,可以包括系统的使用或者最新的优惠活动等。用户登录系统后,可以查看公告信息,以此来最快的了解系统
    购买鲜花模块:购买鲜花模块主要是完成用户在网上的购物的流程。购买鲜花模块分为加入购物车和生成订单两个子模块
    用户管理模块:用户管理模块分为用户注册、用户登录、用户修改信息三个子模块

    网上花店销售系统前台功能模块图如图5-1所示。

    用户进行购买鲜花时,先进行注册,然后进行登录,登录系统后用户可以浏览鲜花,把需要购买的鲜花加入购物车,把购物车的鲜花生成订单。用户购买鲜花时序图如图5-2所示。

    网上花店销售系统的后台功能模块分为:

    分类管理模块:分类管理模块主要是实现管理员对系统分类的管理,使得用户可以按照分类挑选鲜花,方便了用户的挑选,管理员通过这个模块可以向系统添加新的分类,查看已有的分类,修改已有的分类,删除旧的分类
    鲜花管理模块:鲜花管理模块主要是实现管理员对系统鲜花的管理,该模块对整个系统至关重要。管理员通过这个模块可以向系统添加新的鲜花,查看已有的鲜花,修改已有的鲜花,删除旧的鲜花
    订单管理模块:订单管理模块主要是实现管理员对系统订单的管理,管理员通过这个模块可以查看用户下的订单并对订单做出相应的处理
    公告管理模块:公告管理模块主要是实现管理员对系统公告的管理,这样用户进入系统后可以通过浏览公告获取网上花店销售系统的最新资讯,并且可以在最短的时间内对系统有基本的了解。管理员通过这个模块可以向系统添加新的公告,查看已有的公告,修改已有的公告,删除旧的公告
    用户管理模块:用户管理模块主要是实现管理员对已注册用户的管理,管理员通过这个模块可以查看用户的信息或者删除用户

    网上花店销售系统后台功能模块图如图5-3所示。

    5.2 数据库设计5.2.1 概念结构设计描述概念模型的有力工具是E-R模型,E-R模型是用E-R图来描述现实世界的概念模型。E-R模型包括实体、属性、实体之间的联系等。接下来将用E-R图对网上花店销售系统进行概念结构设计,包括各实体间的E-R图及各实体的详细属性E-R图。其中实体型用矩形表示,矩形框内写明实体名。属性用椭圆形表示,并用无向边将其与相应的实体型连接起来。联系用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁标上联系的类型。
    本网上花店销售系统的实体有管理员,用户,公告,订单,分类,鲜花。下面将分别设计各实体的E-R图。
    用户E-R图如图5-4所示。

    在该E-R图中,对于用户实体,用户可以浏览公告,因此用户实体和公告实体是浏览关系,用户可以选购鲜花,因此用户实体和鲜花实体是选购关系,用户可以查看分类,因此用户实体和分类实体是查看关系,用户可以管理自己的购物车,因此用户实体和购物车实体是管理关系,用户可以查看自己的订单,因此用户实体和订单实体是查看关系,用户在系统中是被管理员管理的,因此用户和管理员是被管理的关系。
    管理员E-R图如图5-5所示。

    在该E-R图中,对于管理员实体,管理员可以对系统的公告、订单、分类、鲜花进行管理,对已注册的用户进行管理,因此它与其他实体的关系都是管理关系。
    用户实体的属性有ID、用户名、密码、姓名、角色、手机号、地址。用户详细属性E-R图如图5-6所示。

    鲜花实体的属性有ID、鲜花名、鲜花图片、上架时间、分类ID、分类名、价格、是否推荐、点击数、鲜花销量、鲜花描述。鲜花详细属性E-R图如图5-7所示。

    公告实体的属性有ID、标题、内容、添加时间。公告详细属性E-R图如图5-8所示。

    分类实体的属性有ID、分类名称。分类详细属性E-R图如图5-9所示。

    购物车实体的属性有ID、用户ID、鲜花ID、鲜花名、价格、购买数量。购物车详细属性E-R图如图5-10所示。

    订单实体的属性有ID、订单状态、用户ID、用户姓名、用户手机、收货地址、订单详情、订单号、备注、生成时间、总价。订单详细属性E-R图如图5-11所示。

    5.2.2 逻辑结构设计逻辑结构设计的任务就是把概念结构设计阶段设计好的基本E-R图转换为与选用数据库管理系统产品所支持的数据模型相符合的逻辑结构。数据库设计时注意保证在整个系统运行和业务操作过程中,数据库都能便于访问和查询,同时还需要考虑到要尽量节省数据库操作时的响应时间,尽可能的提高数据库对程序和业务请求的响应速度。
    根据概念结构设计阶段的E-R图,设计数据库表结构如下。
    t_Fenlei分类表
    该表存放分类ID及分类名称。t_Fenlei分类表如表5-1所示。



    名称
    类型
    长度
    备注




    id
    int
    11
    主键


    fname
    varchar
    255
    分类名称



    t_Product鲜花表
    该表存放鲜花信息,主要包括鲜花名、鲜花图片、上架时间、价格、鲜花销量、鲜花描述等信息。分类表和该表相关联,因此表中还包含了分类ID以及分类名。t_Product鲜花表如表5-2所示。



    名称
    类型
    长度
    备注




    id
    int
    11
    主键


    pname
    varchar
    255
    鲜花名


    imgpath
    varchar
    255
    鲜花图片


    createtime
    varchar
    255
    上架时间


    fenleiid
    varchar
    255
    分类ID,外键


    fname
    varchar
    255
    分类名


    jiage
    double

    价格


    tuijian
    varchar
    255
    是否推荐


    dianjishu
    int
    11
    点击数


    xiaoliang
    int
    11
    鲜花销量


    miaoshu
    text

    鲜花描述



    t_Gonggao公告表
    该表存放公告信息,主要包括标题、内容、添加时间。t_Gonggao公告表如表5-3所示。



    名称
    类型
    长度
    备注




    id
    int
    11
    主键


    biaoti
    varchar
    255
    标题


    neirong
    text

    内容


    shijian
    varchar
    255
    添加时间



    t_Gouwuche购物车表
    该表存放购物车ID、以及用户ID、鲜花ID、鲜花名、价格、购买数量。t_Gouwuche购物车表如表5-4所示。



    名称
    类型
    长度
    备注




    id
    int
    11
    主键


    userid
    int
    11
    用户ID,外键


    pid
    int
    11
    鲜花ID,外键


    pname
    varchar
    255
    鲜花名


    jiage
    double

    价格


    shuliang
    int
    11
    购买数量



    t_User用户表
    该表中存放用户的基本信息,普通用户和管理员共用此表,主要包括用户ID、用户名、密码、姓名、角色、手机号、地址信息。普通用户和管理员通过角色的值进行区分, 0表示普通用户,1表示系统管理员。t_User用户表如表5-5所示。



    名称
    类型
    长度
    备注




    id
    int
    11
    主键


    username
    varchar
    255
    用户名


    password
    varchar
    255
    密码


    xingming
    varchar
    255
    姓名


    role
    int
    11
    角色


    dianhua
    varchar
    255
    手机号


    dizhi
    varchar
    255
    地址



    t_Dingdan订单表
    该表存放订单ID、订单状态、以及关联表里的用户ID、用户姓名等信息。t_Dingdan订单表如表5-6所示。



    名称
    类型
    长度
    备注




    id
    int
    11
    主键


    status
    varchar
    255
    订单状态


    userid
    int
    11
    用户ID 外键


    xingming
    varchar
    255
    用户姓名


    dianhua
    varchar
    255
    用户手机


    dizhi
    varchar
    255
    收货地址


    xiangqing
    text

    订单详情


    orderid
    varchar
    255
    订单号


    beizhu
    varchar
    255
    备注


    shijian
    varchar
    255
    生成时间


    zongjia
    double

    总价



    6 详细设计与实现根据总体设计部分对于功能模块的划分,在详细设计中采用JSP+Servlet+Javabean的MVC模式,其中系统的显示由JSP页面完成,用Javabean封装对象,业务的逻辑处理由Servlet完成,对于数据库的操作写在dao包的文件里。
    6.1 系统对象的设计与实现系统中总共包括七个对象,分别为用户,管理员,公告,鲜花,类别,购物车和订单。系统的类图如图6-1所示。

    在实现过程中将这七个对象封装成bean对象,其中管理员和用户的封装对象内容相同,故二者共用一个对象,用属性role进行区分,0表示用户,1表示系统管理员。六个对象对应于代码中的Dingdan.java,Fenlei.java,Gonggao.java,Gouwuche.java,Product.java,User.java。以User.java为例,关键代码如下:
    public class User { private int id;//主键 private String username;//用户名 private String password;//密码 private String xingming;//姓名 private int role;//用户角色 0表示用户,1表示系统管理员 private String dianhua;//手机 private String dizhi;//收货地址}
    6.2 系统首页的设计与实现该系统首页页面风格简单明了,上边横条可以选择注册和登录,左侧有鲜花搜索,鲜花分类,销量排行榜以及花店公告,用户可以根据自己的需求浏览相关内容。页面右侧是鲜花列表,用户可以通过点击相应的链接查看详情或者加入购物车。首页页面的设计如图6-2所示。

    具体的实现过程是:index.jsp文件主要包括鲜花列表部分,在index.jsp页面引入黄色横条的head.jsp以及左侧的left.jsp。
    6.3 系统前台功能的设计与实现6.3.1 用户注册模块的设计与实现用户注册需要填写相应的信息,主要包括用户名、密码、确认密码、姓名、收货地址以及手机号码。用户注册页面的设计如图6-3所示。

    该页面对应代码中的register.jsp,该页面对输入的每一个数据都有格式上的要求,用户名不能为空且必须是数字,字母或者下划线,密码不能为空且至少6位,确认密码要和密码一致,姓名,收货地址以及手机号都不能为空,手机号码还要符合正确的格式。当用户进行注册时,页面首先会对输入的数据格式进行检验,若输入错误会有相应的提示。除此之外,当用户输入正确的格式的数据之后,点击了注册按钮,系统会在数据库进行比对,若用户名已经被注册,系统也会弹出相应的提示,若用户名还未注册则将数据插入数据库,提示注册成功并跳转到首页。具体的实现过程是在IndexServlet.java中对注册进行逻辑处理,在UserDao.java中对数据库进行操作。
    该页面关键代码如下:
    <form action="indexServlet/register" method="post" onsubmit="return checkform()"> <label>用户名:</label> <input type="text" class="form_input" name="username" id="usernameid" /> <label>密码:</label> <input type="password" class="form_input" name="password" id="passwordid"/> <label>确认密码:</label> <input type="password" class="form_input" name="password2" id="password2id"/> <label>姓名:</label> <input type="text" class="form_input" name="xingming" id="xingmingid"/> <label>收货地址:</label> <input type="text" class="form_input" name="dizhi" id="dizhiid"/> <label>手机:</label> <input type="text" class="form_input" name="dianhua" id="dianhuaid"/> <input type="submit" class="form_submit" value="注册" /></form>
    用户在注册时,第一不能有空值,第二两次密码的输入要一致,第三各项数据的格式要正确。除此之外,用户名不可以是已经注册过的。用户注册程序流程图如图6-4所示。

    6.3.2 用户登录模块的设计与实现用户登录需要填写用户名以及密码,登录页面的设计如图6-5所示:

    该页面对应代码中的login.jsp,用户名和密码都不能为空,否则页面会进行相应的提示,当输入用户名和密码点击登录之后,系统会在数据库中查找,若有匹配的数据则提示登录成功并跳转到首页,否则提示用户名或密码不正确。具体的实现过程是在IndexServlet.java中对登录进行逻辑处理,在UserDao.java中对数据库进行操作。
    该页面关键代码如下:
    <form action="indexServlet/login" method="post" onsubmit="return checkform()"><label>用户名:</label><input type="text" class="form_input" name="username" id="usernameid" /><label>密码:</label><input type="password" class="form_input" name="password" id="passwordid"/><input type="submit" class="form_submit" value="登录" /></form>
    用户在登录时,用户名和密码要一致,如果正确才可以登录成功,否则登录失败需要重新输入登录信息。用户登录程序流程图如图6-6所示。

    6.3.3 公告浏览模块的设计与实现用户在首页可以浏览花店公告,通过点击花店公告的标题可以查看花店公告的详细信息。花店公告页面以及公告详情页面设计如图6-7以及6-8所示。
    花店公告页面

    公告详情页面

    具体的实现过程是,当用户点击花店公告的标题时,通过IndexServlet.java的gonggaoupdate方法获取对象,然后通过GonggaoDao.java对数据库进行操作,最后将对象传到gonggao.jsp页面。
    公告详情页面关键代码如下:
    <form action="${url }" method="post" onsubmit="return checkform()"><div class="form"><div class="form_row"><label>公告标题:</label>${bean.biaoti }</div><div class="form_row"><label>内容:</label>${bean.neirong }</div><div class="form_row"><label>发布时间:</label>${bean.shijian }</div><div class="form_row"><input type="button" class="form_submit" value="返回" onclick="javascript:history.go(-1);"/> </div> <div class="clear"></div></div></form>
    6.3.4 鲜花列表模块的设计与实现用户在系统首页的鲜花列表可以浏览鲜花,鲜花列表包括鲜花名,图片,分类名,鲜花价格,以及查看详情和加入购物车两种操作。点击查看详情后页面会跳转到鲜花信息详情页面。鲜花列表页面以及鲜花信息详情页面如图6-9以及6-10所示。
    鲜花列表页面

    鲜花信息详情页面

    鲜花列表页面对应代码中的index.jsp,鲜花信息详情页面对应代码中的product.jsp,具体实现方式是当用户点击查看详情时,在IndexServlet.java中用productupdate方法进行具体处理,之后把对象传到product.jsp页面。当用户点击鲜花列表或鲜花信息详情页面的加入购物车时,如果用户已经登录,那么系统跳转到我的购物车页面。否则,系统会提示用户先登录并跳转到登录页面。
    6.3.5 用户购物车模块的设计与实现我的购物车页面,包括鲜花名,单价,购买时间,小计。用户可以修改购买数量或者删除购物车里的东西,也可以点击链接跳转到订单页面。我的购物车页面设计如图6-11所示。

    我的购物车页面对应代码中的gouwuchelist.jsp,当用户点击鲜花列表或鲜花信息详情页面的加入购物车时,在IndexServlet.java中用gouwucheadd2方法进行添加商品到购物车操作,在GouwucheDao.java里对数据库进行操作,将所选鲜花数据插入数据库。我的购物车页面的变更删除分别用IndexServlet.java的gouwucheupdate2方法和gouwuchedelete方法实现。
    6.3.6 用户订单模块的设计与实现我的订单页面,包括订单号,收货人姓名,订单状态,生成时间,总价,以及查看订单详情的操作。用户也可以查看和搜索自己的订单。我的订单页面如图6-12所示。

    我的订单页面对应代码中的orderlist.jsp,查询订单的操作在indexServlet/orderlist中实现,查看订单详情的操作在indexServlet/dingdanupdate3中实现,其中对数据库的操作在DingdanDao.java中完成。
    6.3.7 用户信息管理模块的设计与实现用户可以在个人信息页面对自己的信息进行管理,主要是对姓名,手机号以及收货地址的更改,可以在修改密码页面进行密码的修改。用户信息页面的设计与修改密码的设计如图6-13以及6-14所示。
    个人信息页面

    修改密码页面

    个人信息页面对应代码中的userupdate.jsp,修改密码页面对应代码中的passwordupdate.jsp,修改个人信息在是在indexServlet/userupdate2中完成的,修改密码是在indexSe rvlet/passwordupdate2中完成的,操作数据库的部分在UserDao.java中完成。
    6.4 系统后台功能的设计与实现6.4.1 系统后台页面的设计与实现管理员登录成功后会进入系统后台页面,主要包括左侧的主菜单以及中间的欢迎页面。主菜单包括,分类管理,鲜花管理,公告管理,订单管理,用户管理。系统后台页面如图6-15所示。

    管理员在此页面可以通过点击左侧主菜单进行相应的管理。关键代码如下:
    <ul> <li><a href="<%=basePath2 %>manageServlet/fenleilist" >分类管理</a></li> <li><a href="<%=basePath2 %>manageServlet/productlist" >鲜花管理</a></li> <li><a href="<%=basePath2 %>manageServlet/gonggaolist" >公告管理</a></li> <li><a href="<%=basePath2 %>manageServlet/dingdanlist" >订单管理</a></li> <li><a href="<%=basePath2 %>manageServlet/userlist" >用户管理</a></li></ul>
    6.4.2 分类管理功能的设计与实现管理员通过此功能可以查看、修改、删除已经存在的分类,也可以增加新的分类。该系统分类管理页面如图6-16所示。

    分类管理页面对应代码中的fenleilist.jsp,添加新分类以及查看和修改分别对应fenl eiadd.jsp,fenleiupdate3.jsp,fenleiupdate.jsp,管理员进行操作时,系统通过在ManageSer vlet.java中的方法实现,对数据库的操作在FenleiDao.java中实现。
    6.4.3 鲜花管理功能的设计与实现管理员通过此功能可以查看、修改、删除已经存在的鲜花,也可以增加新的鲜花。该系统鲜花管理页面如图6-17所示。

    鲜花管理页面对应代码中的productlist.jsp,添加新商品对应productadd.jsp,上传图片对应productupdate5.jsp,查看和修改分别对应productupdate3.jsp,productupdate.jsp,管理员进行操作时,系统通过在ManageServlet.java中的方法实现,对数据库的操作在ProductDao.java中实现。
    6.4.4 公告管理功能的设计与实现管理员通过此功能可以查看、修改、删除已经存在的公告,也可以增加新的公告。该系统公告管理页面如图6-18所示。

    公告管理页面对应代码中的gonggaolist.jsp,添加新公告对应gonggaoadd.jsp,查看和修改分别对应gonggaoupdate3.jsp,gonggaoupdate.jsp,管理员进行操作时,系统通过在ManageServlet.java中的方法实现,对数据库的操作在GonggaoDao.java中实现。
    6.4.5 订单管理功能的设计与实现管理员通过此功能可以查看和处理订单。该系统订单管理页面如图6-19所示。

    订单管理页面对应代码中的dingdanlist.jsp,查看订单详情对应dingdanupdate3.jsp,管理员进行操作时,系统通过在ManageServlet.java中的方法实现,对数据库的操作在DingdanDao.java中实现。
    6.4.6 用户管理功能的设计与实现管理员通过此功能可以查看和删除用户。该系统用户管理页面如图6-20所示。

    用户管理页面对应代码中的userlist.jsp,管理员进行查询用户和删除用户操作的时候,系统通过在ManageServlet.java中的方法实现,对数据库的操作在UserDao.java中实现。
    7 系统的调试与测试7.1 程序调试调试是在测试发现错误之后排除错误的过程。调试的目的是为了解决存在的错误,即对错误定位、分析并找出原因改正错误,因此调试也称为纠错。软件调试是一项具有很强技巧性的工作,调试是一个通过外部表现找出原因的思维分析过程。常用的调试技术是消去原因法,即通过思考,分析列出发生错误的所有可能原因,逐个排除,最后找出真正的原因。试探法、归纳法、折半查找法、演绎法都属于消去原因法。
    7.2 程序测试7.2.1 测试的内容功能测试:用户注册登录后进行鲜花选购、查看公告等功能,与此同时查看数据库内容是否同步更改,若更改成功则说明程序正确,反之说明程序错误。同理以管理员身份进行登录,对公告、用户等进行查看更改,查看数据库的变化。

    链接测试:在点击菜单按钮之后,查看跳转的页面是否正确
    极限测式:可以通过频繁登录与退出数据库这类频繁的操作来对系统进行测试等

    7.2.2 测试用例根据系统的功能,测试用例为以下几方面:

    用户的注册和登录以及退出,管理员的登录以及退出
    用户浏览鲜花,将鲜花加入购物车,对购物车的鲜花数量进行更改,生成订单,提交订单,查看订单,修改个人信息
    管理员对分类、鲜花、公告进行增、删、改、查,对订单和用户进行查、删

    具体的测试细节为:

    用户注册测试:用户注册时,填写各项信息,首先是各项信息空值的测试,其次是各项数据的数据格式的测试
    用户及管理员登录测试:用户及管理员登录时只需填写用户名和密码,因此测试时主要对用户名和密码的匹配性进行测试
    用户及管理员退出测试:用户和管理员的退出主要是通过点击“退出系统”按钮,因此实际测试中只需测试用户点击按钮后是否能够正确跳转
    浏览鲜花测试:浏览鲜花时用户可以点击查看详情去获取鲜花的详细信息,因此实际测试中只需测试用户点击按钮后是否能够正确跳转到相应的鲜花详情页面
    加入购物车测试:鲜花列表以及鲜花详情页面都有包含加入购物车功能,因此实际测试中需要在两个页面都测试用户点击按钮后是否能够正确跳转到购物车页面
    管理购物车测试:在购物车页面,用户可以对购物车里的鲜花数量进行更改,可以删除购物车里的鲜花,因此实际测试中需对这两方面进行测试
    生成订单测试:用户点击生成订单页面会跳转到确认订单收货信息页面,因此实际测试中要测试用户点击链接后能否正确跳转
    提交订单测试:用户提交订单后会跳转到订单页面,因此实际测试中要测试用户点击提交按钮后页面能否正确跳转以及数据库信息是否相应改变
    用户管理个人信息测试:用户可以更改自己的姓名、收货地址和手机,更改后数据库数据会有相应改变,因此实际测试中要测试用户点击提交按钮后页面能否正确弹出更改成功的信息以及数据库信息是否相应改变
    管理员分类管理测试:管理员在网上花店后台对于分类的管理主要是对分类的增加、修改、查询和删除,因此实际测试中要测试管理员进行查询操作时是否能正确显示查询信息,管理员进行增加、修改和删除操作时前台显示的分类是否改变以及数据库中的分类数据是否相应的改变
    管理员鲜花管理测试:管理员在网上花店后台对于鲜花的管理主要是对鲜花的增加、修改、查询和删除,因此实际测试中要测试管理员进行查询操作时是否能正确显示查询信息,管理员进行增加、修改和删除操作时前台显示的鲜花是否改变以及数据库中的鲜花数据是否相应的改变
    管理员公告管理测试:管理员在网上花店后台对于鲜花的管理主要是对公告的增加、修改、查询和删除,因此实际测试中要测试管理员进行查询操作时是否能正确显示查询信息,管理员进行增加、修改和删除操作时前台显示的公告是否改变以及数据库中的公告数据是否相应的改变
    管理员订单管理测试:管理员在网上花店后台对于订单的管理主要是对订单的查询和处理,因此实际测试中要测试管理员进行查询操作时是否能正确显示查询信息,管理员进行处理操作时订单是否显示已处理并且数据库中的订单数据是否相应的改变
    管理员用户管理测试:管理员在网上花店后台对于用户的管理主要是对用户的查询和删除,因此实际测试中要测试管理员进行查询操作时是否能正确显示查询信息,管理员进行删除操作时数据库中的用户数据是否相应的删除

    7.2.3 测试结果通过上一小节对测试细节的分析,对系统进行相应的测试,具体的测试结果如表7-1、表7-2以及表7-3所示。
    在表中有四项内容:

    名称:指测试的对象
    操作:指测试过程中进行的操作方法
    预期结果:指对测试操作产生结果的预测
    实际结果:指实际对系统进行测试时产生的结果

    登录注册测试结果



    名称
    操作
    预期结果
    实际结果




    用户注册测试
    在注册表单输入各种格式的数据
    格式正确则注册成功,反之失败
    同预期


    用户登录测试
    在登录表单输入未注册和已注册数据
    与数据库数据一致则登录成功,反之失败
    同预期


    管理员登录测试
    在登录表单输入正确数据及错误数据
    与数据库数据一致则登录成功,反之失败
    同预期


    用户退出测试
    点击退出系统
    正确退出
    同预期


    管理员退出测试
    点击退出系统
    正确退出
    同预期



    用户操作测试结果



    名称
    操作
    预期结果
    实际结果




    浏览鲜花测试
    点击首页的鲜花列表相应链接
    跳转到相应鲜花界面
    同预期


    加入购物车测试
    点击加入购物车按钮
    跳转正确并且数据库相应改变
    同预期


    管理购物车测试
    对购物车内容进行增、删
    跳转正确并且数据库相应改变
    同预期


    生成订单测试
    点击生成订单按钮
    跳转正确
    同预期


    提交订单测试
    点击提交订单按钮
    跳转正确并且数据库相应改变
    同预期


    管理个人信息测试
    修改个人信息并提交
    跳转正确并且数据库相应改变
    同预期



    管理员操作测试结果



    名称
    操作
    预期结果
    实际结果




    分类管理测试
    在分类管理界面进行增删改查
    跳转正确并且数据库相应改变
    同预期


    鲜花管理测试
    在鲜花管理界面进行增删改查
    跳转正确并且数据库相应改变
    同预期


    公告管理测试
    在公告管理界面进行增删改查
    跳转正确并且数据库相应改变
    同预期


    订单管理测试
    在订单管理界面进行查看和处理
    跳转正确并且数据库相应改变
    同预期


    用户管理测试
    在用户管理界面查看和删除用户
    跳转正确并且数据库相应改变
    同预期



    结论完成了网上花店销售系统的设计,系统前台实现了用户在线浏览所有鲜花,按需求搜索相关鲜花,浏览系统公告以及注册登录后对鲜花选购的操作和购物结束后对订单信息的查看。系统后台实现了管理员对鲜花、分类、公告、订单、用户的管理。
    所设计系统中有一些优点,第一系统安全性高,本系统使用者分为管理员和用户两个角色,当其登录系统时,对其身份进行严格认证;第二采用隔离与访问控制,本系统根据用户的工作需求来分析,对用户权限进行了严格的控制,比如,用户只能浏览鲜花信息而不能修改,系统管理员就可以添加、删除、修改鲜花信息;第三操作简便,该系统本着方便易用的目的进行设计,无论是管理员还是用户都不需要具备专业的计算机知识,只要懂得计算机的一些基本操作,就可以轻松的对花店进行使用,这样做更加贴近用户,使用户使用方便,提高用户的体验。
    但本系统也有一些不足,比如界面相对比较简单,功能相对有限。所以该系统还可以继续完善。
    参考文献[1] 万常选,刘云生. 电子商务的技术及其应用[J]. 计算机工程与应用. 2002(07) .
    [2] 王知强,郑炜. 基于UML的动态企业建模的研究与实现[J]. 哈尔滨商业大学学报(自然科学版). 2005(02) .
    [3] 文灿华,张伟. 基于JSP的网上商城的设计与实现[J]. 电脑知识与技术. 2010(31) .
    [4] 鲁晓东,李育龙,杨健编著.JSP软件工程案例精解[M]. 电子工业出版社, 2005.
    [5] 杨学瑜等编著.JSP入门与提高[M]. 清华大学出版社, 2002.
    [6] 张琳. 网上购物系统的设计与开发[J]. 科技信息(学术研究). 2007(24).
    [7] 陈春蓉. 网上购物系统的设计与开发[J]. 软件导刊. 2009(08).
    [8] 万华. 基于JSP的网上购物系统的实现[J]. 现代计算机(专业版). 2002(10).
    [9] Enhancing Java server availability with JAS. Reinhard Klemm,Navjot Singh. Software. Practice \& Experience . 2001.
    [10] D.C.Ghita.JavaScript Generators. Studia Universitatis Babes-Bolyai:Series Informatica . 2010.
    [11] Jeffrey A Hoffer,Joey F. George.Modern SystemsAnalysis and Design. 2003.
    28 评论 352 下载 2020-08-03 19:01:00 下载需要13点积分
显示 30 到 45 ,共 15 条
eject