Smalltalk 语言 药店管理系统开发实战

Smalltalk阿木 发布于 2025-05-29 7 次阅读


Smalltalk【1】 语言药店管理系统【2】开发实战

Smalltalk 是一种面向对象的编程语言,以其简洁、直观和强大的对象模型而闻名。我们将通过一个药店管理系统的开发实战,展示如何使用 Smalltalk 语言来实现一个实用的系统。本文将涵盖系统的需求分析【3】、设计、实现和测试等环节。

系统需求分析

功能需求【4】

1. 药品【5】信息管理:包括药品的添加、修改、删除和查询。
2. 库存【6】管理:包括药品库存的添加、修改、删除和查询。
3. 销售【7】管理:包括销售记录的添加、修改、删除和查询。
4. 用户管理【8】:包括用户信息的添加、修改、删除和查询。
5. 报表生成【9】:生成药品销售报表、库存报表等。

非功能需求【10】

1. 易用性:界面友好,操作简单。
2. 可靠性:系统稳定,数据安全。
3. 可扩展性:易于添加新功能。

系统设计

类设计【11】

根据需求分析,我们可以设计以下类:

- 药品(Medicine):包含药品名称、规格、价格、库存等信息。
- 库存(Inventory):管理药品库存,包含药品列表。
- 销售(Sale):记录销售信息,包含药品、数量、价格、销售日期等。
- 用户(User):管理用户信息,包含用户名、密码、角色等。
- 报表(Report):生成报表,包含销售报表、库存报表等。

数据库设计【12】

由于 Smalltalk 本身不包含数据库支持,我们可以使用外部数据库,如 SQLite【13】。以下是数据库的设计:

- 药品表(medicines):包含药品ID、名称、规格、价格、库存等字段。
- 销售表(sales):包含销售ID、药品ID、数量、价格、销售日期等字段。
- 用户表(users):包含用户ID、用户名、密码、角色等字段。

系统实现

药品信息管理

smalltalk
Medicine new
name: '阿莫西林';
specification: '0.5g';
price: 10;
inventory: 100.

Medicine new
name: '维生素C';
specification: '100mg';
price: 5;
inventory: 200.

库存管理

smalltalk
Inventory new
medicines: [Medicine new, Medicine new].

Inventory at: 1
inventory: 90.

Inventory at: 2
inventory: 190.

销售管理

smalltalk
Sale new
medicine: Medicine at: 1;
quantity: 10;
price: 100;
date: Date today.

Sale new
medicine: Medicine at: 2;
quantity: 20;
price: 100;
date: Date today.

用户管理

smalltalk
User new
username: 'admin';
password: 'admin';
role: 'admin'.

User new
username: 'user';
password: 'user';
role: 'user'.

报表生成

smalltalk
Report new
sales: Sale allSales.

Report at: 1
totalSales: 1000.

Report at: 2
totalSales: 2000.

系统测试

在 Smalltalk 中,我们可以使用测试框架如 SUnit【14】 来进行单元测试。以下是部分测试代码:

```smalltalk
| medicine inventory sale report |

medicine := Medicine new
name: '阿莫西林';
specification: '0.5g';
price: 10;
inventory: 100.

inventory := Inventory new
medicines: [medicine].

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory at: 1
inventory: 90.

inventory