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
Comments NOTHING