技术开发 频道

基于C# winfrom的水果店结账系统实现

  【IT168技术】 现实生活中,结账系统无处不在,屡见不鲜,各种结账系统 例如:订餐结账系统,超市购物结账系统,酒店客房结账系统等.其实结账原理都大同小异,即将所有购买项的价格都相加,当然 那些复杂的系统 所考虑的方面和功能就很多了. 我们这里不考虑.

  那么,今天我们这里简单的写个基于C# winform 平台的水果店结账系统.

  原理

  这里用到了一个主窗体类和一个构造函数类(用于存取物品的属性). 还有一个写有物品属性的文本文件(目的是方便后期更改物品的价格,折扣等属性)

  首先,通过FileStream 的OpenRead方法 来打开并读取文本文件, 然后调用 StreamReader来 读取FileStream的字符 并将里面的字节转换成字符串。具体FileStream 和 StreamReader的用法可以参考这里. 从文本里获取到物品的属性之后 将其存到一个具有物品属性的数据结构的泛型list里.

  然后在各个物品按钮下调用 不同物品 其在泛型list里的索引也是不一样的. 然后在用一个整型 数组来存 每个物品按钮的点击次数,即为每个物品的购买次数,还用到一个泛型list 来装载每个物品的价格, 在计算总价的时候 遍历 相加, 得到一个总价.

  这里还用到了一个优惠价,即每个物品都有不同的打折方式(代码里有详细注释), 用到了 一些简单的算法. 并且在结账的时候 自动计算 每项物品最终优惠了多少.

  最后用总价-优惠价=最终我们应该支付的价格. 当然这里也实现了物品清空的功能.

  界面设计

  fruits.txt文本内容

  代码如下

  ProductAttribute.cs 类里的代码

1 using System;
2 using System.Collections.Generic; 3 using System.Linq;
4 using System.Text;
5  
6 namespace 水果店结账系统
7 ...{
8     //这里用到了 一个构造函数 即方法与类同名 9     class ProductAttribute
10     ...{
11         //初始化各值
12         string name = "";
13         float price = 0;
14         int code1 = 0;15         int code2 = 0;
16         //构造方法
17         public ProductAttribute(string n, float p, int c1, int c2)
18         ...{
19             //实现ProductAttribute的数据结构 20             //里面可以传入如下参数21             name = n;
22             price = p;
23             code1 = c1;
24             code2 = c2;
25         }
26         //可以读取ProductAttribute里的Name 属性
27         public string Name28         ...{
29             get ...{ return name; }
30         }
31         //可以读取ProductAttribute里的Price 属性
32         public float Price33         ...{
34             get ...{ return price; }35         }
36         // 一个save方法 用于判断 不同的折扣方式 并返回一个减去的钱数
37         public float save(int n)38         ...{39             float m = 0;  //m用于获取 打折后的 价格 符合的物品数量
40             switch (code1)
41             ...{
42                 case 0: //code1为0 的时候 43                     m = n;  //买多少斤 最终价格还是 按多少斤算
44                     break;
45                 case 1: //code1为1的时候 有2种情况
46                     if (code2 == 0)  //code2为0  买1斤 第2斤免费 即买一送一 47                         m = (float)((n / 2) + (n % 2));  //买1斤 第2斤免费  但买3斤 还是1斤免费 48                     else if (code2 == 1) //code2为1  这里是买1斤 第2斤半价 即买2斤 1斤半的钱  买4斤 3斤的钱
49                         m = (float)(1.5 * (n / 2) + (n % 2));
50                     break;
51                 case 2:   //code1 为2的时候 也有2种方法
52                     if (code2 == 0)  //code1为2 code2 为0 买2斤 第3斤免费
53                         m = (float)(n - (n / 3));
54                     else if (code2 == 1) //code1为2  code2为1 即买2斤 第3斤半价
55                         m = (float)(n - 0.5 * (n / 3));
56                     break;
57             }
58
59             float save = (n - m) * price; //计算出一个最终的价格
60             return save;  //返回省去的钱数
61         }
62     }
63 }
0
相关文章