一、工程目的:
做一个简单微商平台,考研TCP/IP编程和插件式编程的能力。
要求:
1,两个服务器平台,分别销售不同类型的商品。
2,有基本的商品展示,购买收费等功能。
3,在一个服务器出现故障时,可以将自己的商品转到另一个服务器上。
4,服务器今后可能添加新的商品,需要代码为插件式,以便有良好的复用性。
二、工程内容:
代码结构如下:
各个文件功能如下:
Commodity.h : 商品基类,虚类。
Beer.cpp Wine.cpp Lipstick.cpp Mask.cpp : 保存四种商品类,是commodity的继承,编译成动态链接库分别放在两个文件夹下。
Shop.h : 商店基类,虚类。
Shop1.h Shop2.h : 两个商店类,继承shop,分别读取两个文件夹下所有商品动态链接库,并提供商品展示服务show()和商品购买服务sell()。
Server1.cpp Server2.cpp :构建两台服务器,分别读取两个Shop文件,为客户提供服务。
Serializer.h : 序列化文件,当服务器需要转移商品至另外一条服务器时提供序列化和反序列化服务。
data1,data2 : 序列化时用于存取商品信息的文件。
两个动态链接库文件分别保存两台服务器的商品(alcohol-plugin : wine,beer cosmetic-plugin:lipstick,mask )
Client.cpp : 客户端,顾客可以在此输入想购买的商品和数目。
三、功能展示:
功能展示:
功能1:
平台需要支持业务双活,拟搭建S1、S2两台服务器,其中S1服务器主要业务为口红、面膜等化妆品商品的销售,S2服务器主要业务为红酒、啤酒等酒类商品的销售;
展示:
客户端:
两个服务器端:
功能2:
支持客户在线选购商品和结算。
展示:
服务器端提示商品购买情况:
服务器二:
客户端根据服务器端的提示输入购买的物品id和数目:
服务器一操作同上:
客户端:
客户端输入购买id为0时结束购买,关闭客户端和服务器端:
功能3:
当S1或S2其中一台服务器异常时,其业务可以快速迁移至另一台正常的服务器,保持业务不中断;
展示:
服务器1,2退出时,提供将服务器功能(及所有商品)转移至另一台服务器的操作,输入1进行转移,输入2进行撤销:
输入1转移后,打开服务器2,此时进行购买可以购买所有商品:
依次购买:
退出服务器2,重新登陆服务器1,撤销功能:
再次登陆服务器2,发现服务器1的商品已经撤销:
功能4:
根据业务发展,希望未来还可以快速、灵活的在该平台上支持辣条、豆腐干等休闲食品商品的销售业务;
程序的商品都是动态链接库的插件式编程,需要在服务器下增加新的商品时,只需要在新增辣条,豆腐干的cpp文件继承commodity,并放入对应shop的文件夹下即可,无需重新编译。
代码链接:
https://github.com/AlphaKasa/MyProjects/tree/c++%E7%BC%96%E5%86%99%E7%9A%84%E5%9F%BA%E4%BA%8Elinux%E7%9A%84socket%E7%A8%8B%E5%BA%8F%EF%BC%8C%E6%A8%A1%E6%8B%9F%E7%AE%80%E5%8D%95%E7%9A%84%E7%BD%91%E8%B4%AD%E6%93%8D%E4%BD%9C