写在前边

前言

我终于对学校的内容开始下手了[手动捂脸.jpg]

因为是一个最终内容的复述,可能会存在部分描述不清的部分。

如果哪里有不清楚的或者是错误的欢迎小可爱们留言,我会及时订正的。

提示

本篇内容及其不走心,只是为了记录这个漫长的制作过程。

产生原因

本部分内容为一个叫做信息系统设计的课程的一个项目总结,包含了大概的设计过程和部分的数据库描述。

说人话就是一个实验报告,因此有一些可能看起来很硬(不可爱)的部分。

所以,接下来就是正文部分啦!

正文部分

该系统的设计与开发意义

传统的书店管理系统其日常管理工作都是人工操作,存在着许多缺点,如:效率低下、保密性差,另外时间一长,将产生大量的文件和数据,这对于数据的查找、更新和维护都带来了不少的困难,并且浪费了许多人力和物力。特别是中小型书店、个体书店,由于其规模小,硬件投入不大,管理人员水平有限,如果没有一个好的书店管理系统,对于书店的经营是非常不利的。在信息时代,传统的书店管理方式必然被计算机为基础的信息管理系统所取代。因为作为计算机应用的一部分,使用计算机对图书信息进行管理,具有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高书店管理的效率。因此,开发这样一套书店管理软件成为很有必要的事情。针对上述这种情况,我们小组计划开发一个面向中小型书店、个体书店的书店管理系统,实现对人员、物流的全面管理,以帮助这些书店早日实现书店管理信息化。

开发的任务及目标

1.设计一个书店销售管理系统(BookStore Sales System),基本能够实现书店销售的一些流程,做好信息记录。

2.功能模块包括:销售员登录系统(设置不同人员的登录身份(销售员和管理员),以防有人恶意对数据进行更改),仓库管理系统(即图书入库系统,对所有书籍的信息做好记录,以便查找),销售系统(对书的销售量进行统计,以便做出更好的规划,哪些书畅销,哪些书很少有人买),会员管理系统(对于办理会员的用户给予一定的优惠额度),书籍信息管理系统(管理总店所有可以提供书籍的信息,包括书籍的各种信息)。

3.总体目标设计一套软件能够合理有序的对书店进行信息化的管理。最终目地当然是为商家带来利润了。

系统分析与设计

系统分析需求

分析电脑图书销售管理系统功能及其系统架构,运用UML建模原理对系统设计部分建立模型。

系统目标任务

主要实现的三大功能模块

(1) 登录端

  • 销售员登录
  • 管理员登录
  • 记住密码
  • 从记住的密码中读取保存的密码

(2) 管理员端

  • 书籍信息管理
  • 图书库存管理
  • 销售员账户管理
  • 锁定系统

(3) 销售员端

  • 结账模块
  • 库存信息查询
  • 销售记录查询
  • 锁定系统模块
系统功能需求
  • 统一登录界面 使用相同登录界面,采用隐藏的键盘控制键登录不同模块。允许销售员记住密码,管理员账户不允许记住密码。
  • 书籍信息管理 可以按照书籍ID或者书籍ISBN号查询已有书籍,修改对应书籍的所有信息。添加新的书籍信息。
  • 书籍库存管理 可以按照书籍ID或者书籍ISBN号查询已有书籍在库情况,可以修改选中的在库书籍信息(包括库存数量和售价),以及增加(入库)和删除在库信息。
  • 员工账户管理 可以按照员工账户进行查找员工账户条目,可以对于员工账户进行增删改查。
  • 锁定系统模块 退出当前的账户登录,提供重新登录的入口。
  • 结账系统模块 提供可触控屏幕键盘,收银区域顾客屏幕,收银区域主界面,可以通过扫码枪扫描书籍条形码自动进行结算,无需手动输入。
  • 书籍库存查询 可以通过书籍ISBN查询库存情况
  • 销售记录查询 可以通过销售的订单编号查询具体订单信息

数据流图

图2.1 总体数据流图

数据字典

名字别名描述定义位置
销售员账户信息账户信息定义销售员的账户信息,储存在tb_staff表中,可以对表中的账户和密码进行增删改查操作销售员账户信息=销售员账户名称+销售员账户密码null
书籍详细信息书籍信息定义总店所有书籍的全部详细信息,储存在tb_books_information表中,对所有书籍的详细信息进行修改,可以删除或增加条目。书籍详细信息=书籍id+书籍名null
书籍库存信息库存信息定义总店所有书籍的库存详细信息,储存在tb_book_stock_recording表中,可以对所有书籍的库存信息进行修改,可以删除或增加条目。书籍库存信息=书籍id+书籍库存信息+书籍售价null
顾客详细信息顾客信息定义总店所有顾客的详细信息,储存在tb_customer_list表中,可以查询顾客等级和折扣价格。顾客信息=顾客id+姓名+手机号+身份证号+会员等级顾客信息管理模块
最大可购书数量null为保证公平销售,定义顾客可以购买同一书籍的最大购书数量。最大购书数量=用户等级*最大购书数量系数书籍销售模块
用户等级折扣折扣列表定义不同等级对应折扣列表,方便后期进行修改,只需要修改一个数据库即可,便于系统维护。null书籍销售模块
书籍售价售价书籍售价根据商店的销售价格和用户折扣等多方面因素共同决定售价=售价*会员等级对应折扣书籍销售模块
书籍库存信息书籍最大库存信息定义书籍的库存信息,并且根据实时的销售情况进行更新。null书籍销售模块
售价订单记录信息订单信息定义销售记录信息。信息=记录id+顾客id+总价+日期书籍销售模块
订单详细记录信息订单清单定义书籍的销售详细信息列表,并且根据实时的销售情况进行更新。详细信息=记录id+书籍id+售出价格+书籍售出数量书籍销售模块

数据库概念结构设计

局部E-R图如下所示:

图2.2 顾客E-R图

图2.3 销售员E-R图

图2.4 管理员E-R图

图2.5 顾客购书E-R图

图2.6 书籍E-R图

图2.7 库存E-R图

图2.8 销售记录E-R图

图2.9 销售记录 (2) E-R图

总体E-R图如下所示

图2.10 总体E-R图

数据库逻辑结构设计

关系模式

关系模式(下划线为关系的主键)

(1)

  • A. 书籍信息(书籍编号, 书籍题目, 书籍国际索书号, 书籍基础价格, 书籍出版社, 书籍分类)
  • B. tb_books_information(book_id, book_title, book_ISBN, book_basic_price, book_publisher, book_classification)

(2)

  • A. 书籍库存信息(书籍编号, 书籍库存量, 书籍售价)
  • B.tb_book_stock_recording(book_id, book_inventory, book_selling_price)

(3)

  • A. 用户信息表(会员编号, 姓名, 电话号码, 身份证号, 用户等级)
  • B.tb_customer_list(customer_member_id, customer_name, customer_phone_number, customer_ID, customer_member_level)

(4)

  • A. 会员等级表(等级,折扣)
  • B. tb_customer_membership_levels(customer_membership_level, customer_dis)

(5)

  • A. 销售记录(记录编号, 书籍编号, 售出价格, 书籍数量)
  • B.tb_sales_recordings(recording_id, book_id, selled_price, book_count)

(6)

  • A. 记录详细信息(记录编号, 用户编号, 订单总价, 订单日期)
  • B. tb_sales_recordings_date(recording_id, customer_id, total_price, date)

(7)

  • A. 销售员账户(用户名, 密码)
  • B.tb_staff(username, password)

(8)

  • A. 管理员账户(用户名, 密码)
  • B.tb_suppere_manager (username, password)
表格描述关系模式
表2.1 书籍全部信息表
列名数据类型宽度字段描述
book_idvarchar11书籍编号,设为主键
book_titlevarchar255书籍题目,不许为空值
book_ISBNvarchar255国际索书号,不许为空值
book_basic_pricedecimal10书籍定价,不许为空值
book_publishervarchar255书籍出版社,可以为空值
book_classificationvarchar255书籍分类信息,可以为空值
表2.2 库存信息表
列名数据类型宽度字段描述
book_idvarchar11书籍编号,设为主键
book_inventoryInt11书籍库存数量,不许为空值
book_selling_pricedecimal10书籍售价,不许为空值
表2.3 用户信息表
列名数据类型宽度字段描述
customer_member_idvarchar11成员编号,设为主键
customer_namevarchar255姓名,不许为空值
customer_phone_numbervarchar11用户手机号,不许为空值
customer_IDvarchar18身份证号,不许为空值
customer_member_levelInt10成员等级,可以为空值
表2.4 会员等级表
列名数据类型宽度字段描述
customer_membership_levelInt10用户等级,设为主键
customer_discountFloat3折扣,不许为空值
表2.5 销售记录表(1)
列名数据类型宽度字段描述
recording_idvarchar11记录编号,不许为空值
book_idvarchar13书籍编号,不许为空值
selled_pricedecimal10书籍售价,不许为空值
book_countint10售出数量,不许为空值
表2.6 销售记录表(2)
列名数据类型宽度字段描述
recording_idvarchar11记录编号,设为主键
customer_idvarchar13用户编号,允许为空值
total_pricedecimal10订单总价,不许为空值
dateint10订单日期,不许为空值
表2.7 销售员账户表
列名数据类型宽度字段描述
usernamevarchar20用户名,设为主键
passwordvarchar10密码,不许为空值
表2.8 管理员账户表
列名数据类型宽度字段描述
usernamevarchar20用户名,设为主键
passwordvarchar10密码,不许为空值

数据库物理结构设计

确定数据的存储结构

MySQL数据库表

给出要创建的索引

  • (1)书籍信息表tb_books_information:创建外键自动创建book_ISBN索引
  • (2)书籍库存表tb_book_stock_recording:创建外键自动创建fk_book_id索引
  • (3)用户信息表tb_customer_list:创建外键自动创建fk_member_level索引
  • (4)销售记录表tb_sales_recordings:创建外键自动创建fk_book_id1索引
  • (5)销售记录详细表tb_sales_recordings_date:创建外键创建fk_customer_id索引

数据库创建

创建数据库IS_DESIGN

创建一个名为IS_Design的数据库

图2.11 创建IS_Design数据库

在’‘‘IS_DESIGN’’'数据库中建表

创建书籍信息表tb_books_information

图2.12 创建书籍信息表tb_books_information

创建书籍库存信息表tb_book_stock_recording

(1)创建表

图2.13.1 创建书籍库存信息表tb_book_stock_recording

(2)创建外键

图2.13.2 创建书籍库存信息表tb_book_stock_recording外键

创建用户信息表tb_customer_list

(1)创建表

图2.14.1 创建用户信息表tb_customer_list

(2) 创建外键

图2.14.2 创建用户信息表tb_customer_list外键

创建用户等级表tb_customer_membership_levels

图2.15 创建用户等级表tb_customer_membership_levels

创建销售记录信息表tb_sales_recordings

(1) 创建表

图2.16.1 创建销售记录信息表tb_sales_recordings

(2) 创建外键

图2.16.2 创建销售记录信息表tb_sales_recordings外键

创建销售记录日期表tb_sales_recordings_date

(1) 创建表

图2.17.1 创建销售记录日期表

(2) 创建外键

图2.17.2 创建销售记录日期表外键

创建销售员账户信息表tb_staff

图2.18 创建销售账户信息表

创建超级管理员账户信息表tb_suppere_manager

图2.19 创建超级管理员信息表tb_suppere_manager

数据

关于书籍信息的数据,我采用了python爬虫爬取当当网的信息,在这里有一篇详细介绍的文章。

传送门

系统总体结构设计

总体结构图

https://img.cha.moe/img/blog/article/isdesign/AllStructure.png

图2.20 创建总体结构图

系统开发及实现

开发技术简述

Client使用C#控制台应用程序实现的可视化窗口,使用MySQL作为后台数据库。

登录模块

实现功能

登录

根据用户是否按下快捷键,查询身份登录到对应的界面。

记住密码

记住销售员的账户和密码。

退出

退出该系统。

界面设计效果

图3.1 登录界面

实现方法

登录

在登录按钮被单击之前,根据预设隐藏快捷键,决定是否登录管理员账户,如果隐藏组合键没有被按下,系统自动查询tb_staff表,如果被按下,系统自动查询tb_super_manager表,对应是否应该登录对应界面。

记住密码

登录之前检测账户类型,如果账户类型为销售员,则如果登陆成功,自动保存密码到本地文件userInfo.exe中进行加密二进制处理,如下图所示

图3.2 用户信息保存的文件

退出

使用Application.Exit();退出该系统。

管理员端口

实现功能

信息管理

(1)书籍信息管理模块 在该模块中,管理员可以向书籍信息表中添加新书籍,删除某些书籍条目,更改书籍的基本信息(基准价、出版社、分类、题目允许被修改,但是书籍编号和ISBN编号不允许被修改),在书籍编号和ISBN中的文本框任选一个进行查询。即可查询寻对应信息。

(2)库存信息管理模块 在该模块中,管理员可以向书籍库存管理表中增加新的库存信息,更新某些库存信息。

账户管理

(1)员工账户管理 在该模块中,管理员可以向员工账户信息表中添加新的书籍信息,删除某些员工账户,修改某些员工账户的账户名和密码。

锁定

返回登录模块

退出

退出该系统。

页脚

显示登陆用户,管理员admin

界面设计效果

管理员登录界面

(1) 登陆 账号:admin,密码:admin,按下隐藏加你cmd+opt+s按键

图3.3 管理员登录

(2) 超级管理员身份登录进入管理端

图3.4 超级管理员界面

数据管理

(1) 书籍信息管理 增删改查以及重新写书籍详细信息

图3.5 书籍信息管理界面

(2) 库存管理 更新管理书籍库存信息

图3.6 书籍库存管理界面

销售员账户管理

(1) 员工账户管理模块 增删改查员工账户

图3.7 员工账户信息管理信息

锁定 返回登录模块

图3.8 锁定按钮

退出 退出整个程序

图3.9 退出按钮

页脚 显示登录用户,超级管理员:admin

图3.10 页脚信息

实现方法

数据管理

(1) 书籍信息管理

  • 连接书籍基本信息表进行增删改查。
  • 所有数据在listview中显示
  • 在点击某一条目之后,在对应文本框中显示,可以修改相应条目的信息。
  • 遍历清空文本框、listview信息进行刷新。
  • 在书籍编号查询的时候执行语句进行查询
1
"select * from tb_books_information where book_id = "BookIDtextBox.Text";
  • 在在书籍国际索书号查询的时候执行语句
1
select * from tb_books_information where book_ISBN = ' ISBNtextBox.Text';

(2) 书籍库存管理

  • 连接书籍库存信息表进行增删改查。
  • 所有数据在listview中显示
  • 在点击某一条目之后,在对应文本框中显示,可以修改相应条目的信息。
  • 遍历清空文本框、listview信息进行刷新。
  • 进行查询时执行
1
select * from tb_books_information where book_id = 'BookIDtextBox.Text';
账户管理

(1) 员工账户管理模块

  • 连接员工账户信息表进行增删改查。
  • 可以根据输入的员工账户进行查询。
  • 在点击某一条目之后,在对应文本框中显示,可以修改相应条目的信息。
  • 进行查询时执行
1
Insert tb_name Values ('AccounttextBox.Text', 'PasswordtextBox.Text');
锁定

(1) 执行语句Application.Restart();

退出

(1) 执行语句Application.Exit();

页脚

(1) 显示登录用户,超级管理员admin。即将登录页面中的账号传到全局变量```GlobalClass.cs``中。

(2) 使用代码如下

1
2
GlobalClass.user.strUsrId = comboBox1.Text;
GlobalClass.user.strUsrName = textBox2.Text;

销售员端口

实现功能

结账

(1) 用户屏幕 用户可以看到实时结算信息。

(2) 操作用屏幕键盘 销售员为用户结算时操作的键盘。

(3) 结算界面 实时自动计算当前扫描过的书籍的价格。

信息查询

(1) 书籍库存查询 在该模块中,销售员可以通过ISBN进行库存查询。

(2) 销售记录查询 在该模块中,销售员可以通过订单编号进行订单查询。

锁定

返回登录模块

退出

退出整个程序

页脚

显示登陆用户,销售员staff

界面设计效果

员工登陆界面

(1) 登陆 账号:staff,密码:staff,选择保存密码,点击登录按钮。

图3.11 员工登录

(2) 销售员(员工)身份登录进入管理端

图3.12 员工界面

结账

(1) 用户屏幕 显示实时扫描的书籍名称和单本价格,以及总价格。

图3.13 用户屏幕

(2) 销售键盘 显示部分快捷操作

图3.14 销售人员键盘

(3) 查询价格 (单本书籍)

图3.14.2 单本书籍价格查询

(4) 结算界面(收银台) 实时显示当前所有扫描待结算的书籍信息。

图3.15 收银台结算界面

信息查询

(1) 库存查询 根据ISBN号查询库存量

图3.16 查询库存记录

(2) 订单查询 根据订单编号查询订单信息

图3.17 查订单记录

锁定 返回登录模块

图3.18 锁定按钮

退出 退出整个程序

图3.19 退出按钮

页脚 显示登录用户,超级管理员:admin()

注:这里应该是销售员:staff

但是截图错了,懒得改了

图3.17 页脚信息

实现方法

结账

(1) 屏幕

  • 在非结算的时候,显示欢迎光临。
  • 结算的时候显示当前书籍名称和书籍单价,在下方显示总价。

(2) 键盘

  • 点击会员按钮可以输入或扫描会员编号,识别会员身份。
  • 点击查价格可以弹出查询价格窗口进行ISBN价格查询。
  • 点击扫描按钮可以自动定位到ISBN输入框进行输入或者扫描。
  • 键盘提供数字键盘便于ISBN号输入
  • 键盘提供了上下选择按钮,便于快速选择已经扫描的书籍进行删除或修改本数。

(3) 收银台

  • 可以输入会员编号
  • 可以修改每本书籍的价格
  • 拥有打印购物小票按钮
信息查询

(1) 书籍库存查询

  • 连接书籍库存信息表进行查询。
  • 所有数据在listview中显示
  • 在书籍编号查询的时候执行语句进行查询
1
select * from tb_books_information where book_id = 'BookIDtextBox.Text';

(2) 书籍订单查询

  • 连接书籍库存信息表进行增删改查。
  • 所有数据在listview中显示
  • 在点击某一条目之后,在对应文本框中显示,可以修改相应条目的信息。
  • 遍历清空文本框、listview信息进行刷新。
  • 进行查询时执行下述代码进行表两个表的查询和拼接。
1
select * from tb_sales_recordings_date where recording_id = 'RecordingID.Text';和select * from tb_sales_recordings where recording_id = ' RecordingID.Text';进行tb_sales_recordings_date表和tb_sales_recordings
锁定

(1) 执行语句Application.Restart();

退出

(1) 执行语句Application.Exit();

页脚

(1) 显示登录用户,员工:staff。即将登录页面中的账号传到全局变量GlobalClass.cs中。

(2) 使用代码如下

1
2
GlobalClass.user.strUsrId = comboBox1.Text;
GlobalClass.user.strUsrName = textBox2.Text;

总结

对题目进行系统需求分析。(进行简单的描述目标、画出数据流图、构造数据字典)、设计系统总体结构(画出系统总体结构图)、设计数据库的概念结构(同时绘制E-R图)、设计数据库的逻辑结构(用表格描述关系模式的属性名、类型和完整性约束等等内容)、设计数据库的物理结构(即需要创建的索引)、创建数据库等多步骤。

使用E-R图表示抽象概念,之后转换成关系模式,如上述内容,使用表格表述命令、约束条件和索引等信息。使用基于MySQL的Navicat可视化方式和进行构建所需要的数据库相关信息。

代码部分

鉴于这个系统我写了好多好多代码,所以就不放在这个页面了。

传送门在这里。