北邮C银行门户与电商平台.docx_第1页
北邮C银行门户与电商平台.docx_第2页
北邮C银行门户与电商平台.docx_第3页
北邮C银行门户与电商平台.docx_第4页
北邮C银行门户与电商平台.docx_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C+电商交易平台设计班级:2013211306 姓名:严浩 学 号:2013211321一 实验目的1. 锻炼我们用c+编程的能力2. 培养我们考虑问题是否全面的能力3. 训练我们的代码优化能力二 基本内容题目一:银行门户的设计该门户是一个单独的程序,程序要求至少支持以下功能:1) 注册银行卡,银行可选;2) 修改银行卡密码;3) 存款取款;银行卡至少需要有卡号,密码,所属银行名称,持卡人身份证号,卡内金额等内容。要求1:请把所有的银行名写入文件(或数据库),注册银行卡的时候,要求只能选择已经存在的银行进行注册。要求2:请做好错误场景的处理,例如读银行文件错误,输入数据不合法等等。题目二:电商平台的设计该平台是银行门户之外的一个单独的程序,程序要求至少支持以下功能:1) 注册&登录:支持新用户注册平台账号,已注册用户用平台账号登录平台。(要求已注册用户的信息长久保留。)2) 浏览平台产品信息。3) 优惠活动:支持对同一品类下所有产品打折的活动,支持单笔订单满X减Y的活动。4) 购买产品:支持用户添加产品到购物车,查看实际应付的产品价格,提交订单。在题目二我们暂时不考虑提交订单后支付等后续需求。要求1:电商平台上至少有三类产品:如食物、服装、图书等,每类产品中至少有三个具体的产品(如图书中可以有C+ Primer、Effertive C+等),每个具体的产品请至少包含产品描述,产品原价,产品剩余量等数据。所有的产品信息需要存储在数据库或文件中,不能写在代码中,平台管理员通过直接修改数据库或文件,管理本平台上的产品,包括产品的增加和删除,修改数量以及具体产品的属性信息等。要求2:请至少设计一层继承体系(产品基类-产品子类),设计一个产品基类,然后让图书类、电子产品类和服装类等产品子类类继承它,具体的产品是产品子类的实例对象( 是图书类的实例对象) 。产品基类请至少具有一个虚函数getPrice()用于计算具体产品的价格。要求3:请通过为每个产品子类定义“品类折扣系数”来支持对同产品子类下所有产品打折扣的活动(如图书全场5折,则图书类这一产品子类的折扣系数为0.5)。要求4:请做好错误场景的处理。题目三:网上支付的设计实现题目三会让你设计的平台像个真正的运行在网络上的平台。题目三要求在题目一、二的基础上支持通过网上支付在电商平台上购物,请至少实现以下功能:1) 绑定银行卡:支持电商平台账号绑定银行卡。同一账号可以绑定多张银行卡,而且银行卡可以属于不同银行。2) 网上支付:选择绑定的任一银行卡支付电商平台上的订单。要求1:绑定银行卡和选择银行卡进行支付时都要求提供对应的银行卡密码。要求2:当在电商平台上绑定银行卡或者进行网上支付的时候,请不要直接打开某个文件查找银行卡的信息,因为银行卡信息文件是银行门户系统私有的,电商平台系统无法直接访问,而应该由电商平台系统去向银行门户系统对接数据。请用socket通信来传送数据。要求3:请做好错误场景的处理,如绑定银行卡失败,支付失败等。三 实验方法题目一:创建了银行卡类、银行门户类,银行卡里包含了卡号、姓名、密码、身份证号、银行名称、余额几个属性。银行门户有操作银行卡,注册银行卡两个功能,操作银行卡又包括存取款,修改密码等功能,账户信息和银行名称保存在文件里,银行卡用vector类型保存。题目二:创建了电商平台类、账户类、商品类(商品类有3个派生类)、绑定银行卡类、购物车项目类。其中账户类中包含了用户名、密码、手机号、购物车、应付款、绑定银行卡、绑定银行卡数量这几个属性,其中购物车里的项目用vector类型保存。电商平台中的账户也用vector类型保存,平台的功能有:登录、注册,登录后可以绑定银行卡、查看商品并添加购物车、查看购物车和应付金额、结算购物车、退出登录等功能。题目三:在绑定银行卡和付款时用socket通信来传送数据。绑定银行卡时,先向银行门户发送绑定银行卡标志位表示绑定功能,然后发送卡号密码,验证通过后返回成功标志位,电商平台收到后绑定成功。付款时,先向银行门户发送付款标志位表示付款功能,然后发送卡号密码,验证通过后返回成功标志位,电商平台收到后发送应付金额,银行门户收到后调用付款函数,余额不足返回余额不足标志位,余额够则返回付款成功标志位。四 源代码 银行门户代码: #ifndef _BANKCARD_H_#define _BANKCARD_H_#include#includeusing namespace std;class bankcardprivate: string cardnum; string password; string bankname; string name; string ID; double remainder; public: bankcard() bankcard(string num,string password,string bankname,string name,string ID,double remainder); void setPassword(string password); void addRemainder(double money); void subRemainder(double money); string getCardnum(); string getPassword(); string getBankname(); string getName(); string getID(); double getRemainder(); bool matchPassport(string password); ofstream& operator cardnum=cardnum;this-password=passport;this-bankname=bankname;this-name=name;this-ID=ID;this-remainder=remainder;void bankcard:setPassword(string newpassport)this-password=newpassport;void bankcard:addRemainder(double money)this-remainder+=money;void bankcard:subRemainder(double money)this-remainder=this-remainder-money;string bankcard:getCardnum()return cardnum;string bankcard:getPassword()return password;string bankcard:getBankname()return bankname;string bankcard:getName()return name;string bankcard:getID() return ID; double bankcard:getRemainder()return remainder;bool bankcard:matchPassport(string password)if(this-password=password) return true; else return false;ofstream& bankcard:operator (ofstream& ofs)ofs 卡号:cardnum;ofs 密码:password;ofs 银行:bankname;ofs 姓名:name;ofs 身份证号:ID;ofs 余额:decremainderendl; return ofs;#ifndef BANKPORTAL_H#define BANKPORTAL_H#include #include #pragma comment(lib,ws2_32.lib)#include #include #include bankcard.husing std:vector;class BankPortalprivate:vector vBankN;vector vBankC;void init();void registerBankC();void loginBankC();void changePassword(int index);void deposit(int index);void withdraw(int index);int match(string cardnum);bool check(string cardnum);void output();void bankNaming();double StrToDouble(string str, int start, int end);void Bind();bool pay(string num,double money);int Match(string username,string password);public:BankPortal(); #endif#include #include #include #include #include #include #include bankportal.hconst string bankname_file = bankname.txt;const string output_file = output.txt;BankPortal:BankPortal()init();cout Select) | (Select0 != 1 & Select0 != 2)cout 输入错误,请重新输入: endl;cout endl; Choice=std:atoi(Select.c_str();if(Choice=2) Bind();while(true)cout endl;cout =欢迎来到银行门户= endl;cout = endl;cout =您想进行什么操作?= endl;cout =1:操作账户 = endl;cout =2:注册银行卡 = endl;cout =3:退出 = endl;cout = endl endl;cout Select) | Select0 3)cout 输入错误,请重新输入: endl;cout endl; select=std:atoi(Select.c_str();switch(select)case 1:loginBankC();break;case 2:registerBankC();break;case 3:output();return;default:break;void BankPortal:registerBankC()cout 请选择你要注册的银行: endl;for(unsigned int i=0;ivBankN.size();i+)if(i % 4 = 3)cout i : vBankNi endl;elsecout i : vBankNi;cout endl num) | num = vBankN.size()cout endl 输入错误,请重新输入:;cout endl; string bank = vBankNnum;int cardnum;strstream t;string card;string password;string temp;string name;string ID;int i;cout name; cout ID;srand(int)time(0);docardnum=1000+(rand()%9000);tcard;while(check(card);docout password;cout temp;while(password != temp & cout endl 前后输入的密码不同,请重新输入! endl);cout endl;bankcard bcard(card, password, bank, name, ID,0.0);vBankC.push_back(bcard);cout 注册银行账号成功! endl; cout 卡号为:cardendl;void BankPortal:loginBankC()string cardnum;string password;unsigned int num;docout请输入要操作的银行卡号:cardnum;while(num=match(cardnum)=vBankC.size()&cout账号输入错误!endl);while(true)cout = vBankCnum.getName() 先生/女士= endl;cout =卡内余额共 vBankCnum.getRemainder() RMB= endl;cout = endl;cout =请选择您的操作:= endl;cout =1:存款 = endl;cout =2:取款 = endl;cout =3:修改银行卡密码= endl;cout =4:返回上一级菜单= endl;cout = endl endl;cout Select) | Select0 4)cout 输入错误,请重新输入: endl;select=std:atoi(Select.c_str();cout endl;switch(select)case 1:deposit(num); break;case 2:withdraw(num);break;case 3:changePassword(num);break;case 4:return;default:break;void BankPortal:deposit(int num)double money;cout请输入您要存入的金额:money;vBankCnum.addRemainder(money);void BankPortal:withdraw(int num)double money; cout请输入您要取出的金额:money;if(vBankCnum.getRemainder()=money) vBankCnum.subRemainder(money);else cout对不起,余额不足!=money) vBankCindex.subRemainder(money);return true;else return false;void BankPortal:changePassword(int num)string password;string temp;docout请输入新密码:password;cout再次确认新密码:temp;while(password!=temp&cout 前后输入的密码不同,请重新输入! endl);vBankCnum.setPassword(password);int BankPortal:match(string cardnum)unsigned int i=0;for(;ivBankC.size();i+)if(vBankCi.getCardnum()=cardnum) return i;return i;bool BankPortal:check(string cardnum)unsigned int i=0;for(;ivBankC.size();i+)if(vBankCi.getCardnum()=cardnum) return true;return false;void BankPortal:output()ofstream fout(output_file.c_str();for(unsigned int i=0;ivBankC.size();i+)vBankCi(fout);fout.close();void BankPortal:bankNaming()ifstream fin(bankname_file.c_str();string input;while(getline(fin,input)vBankN.push_back(input);fin.close();double BankPortal:StrToDouble(string str, int start, int end)/把字符串转化成double类型 int state = 0;int i = 0;double num = 0;for(; start cardnum) cardnum=cardnum.substr(6); finpassword; password=password.substr(6); finbankname; bankname=bankname.substr(6); finname; name=name.substr(6); finID; ID=ID.substr(10); finremainders; remainder=StrToDouble(remainders,6,remainders.size(); bankcard bankc(cardnum,password,bankname,name,ID,remainder); vBankC.push_back(bankc);fin.close();bankNaming();int BankPortal:Match(string cardnum,string password)unsigned int i=0;for(;ivBankC.size();i+)if(vBankCi.getCardnum()=cardnum&vBankCi.getPassword()=password)return i;return i; void BankPortal:Bind() WORD sockVersion = MAKEWORD(2,2); WSADATA wsaData; if(WSAStartup(sockVersion, &wsaData)!=0) printf(嵌套字未打开!); return; /创建套接字 SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(slisten = INVALID_SOCKET) printf(socket error !); return; /绑定IP和端口 sockaddr_in sin; sin.sin_family = AF_INET; sin.sin_port = htons(8888); sin.sin_addr.S_un.S_addr = INADDR_ANY; if(bind(slisten, (LPSOCKADDR)&sin, sizeof(sin) = SOCKET_ERROR) printf(bind error !); /开始监听 if(listen(slisten, 5) = SOCKET_ERROR) printf(listen error !); return; /循环接收数据 SOCKET sClient; sockaddr_in remoteAddr; int nAddrlen = sizeof(remoteAddr); char sendBuf2; char receiveChoice2; int choice; while (true) printf(等待连接.n); sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen); if(sClient = INVALID_SOCKET) printf(accept error !); continue; printf(接受到一个连接:%s rn, inet_ntoa(remoteAddr.sin_addr); recv(sClient,receiveChoice,2,0); /监听选择 choice=(receiveChoice0-0); if(choice=1) char receiveCard5; char receivePassword30; recv(sClient,receiveCard,5,0); /接受账号密码 recv(sClient,receivePassword,30,0); string cardnum; cardnum=receiveCard; string password; password=receivePassword; int index; if(index=Match(cardnum,password)vBankC.size() sprintf(sendBuf,1); send(sClient,sendBuf,strlen(sendBuf)+1,0); /发送绑定成功 sprintf(sendBuf,vBankCindex.getBankname().c_str();/发送银行类型 send(sClient,sendBuf,strlen(sendBuf)+1,0); else sprintf(sendBuf,0); send(sClient,sendBuf,strlen(sendBuf)+1,0); else if(choice=2) char receiveCard5; char receiveShouldpay20; char receivePassword30; int index; recv(sClient,receiveCard,5,0); /接受账号密码 recv(sClient,receivePassword,30,0); string cardnum; cardnum=receiveCard; string password; password=receivePassword; index=Match(cardnum,password); if(indexvBankC.size() sprintf(sendBuf,1); send(sClient,sendBuf,strlen(sendBuf)+1,0); /发送验证成功 recv(sClient,receiveShouldpay,20,0); double shouldpay; shouldpay=std:atof(receiveShouldpay); if(pay(cardnum,shouldpay) sprintf(sendBuf,1); send(sClient,sendBuf,strlen(sendBuf)+1,0); /发送付款成功 output(); else cout余额不足!; sprintf(sendBuf,0); send(sClient,sendBuf,strlen(sendBuf)+1,0); /发送付款成功 elsesprintf(sendBuf,0); send(sClient,sendBuf,strlen(sendBuf)+1,0); /发送验证失败 closesocket(slisten); WSACleanup(); 电商平台代码:#ifndef _ACOUNT_H_#define _ACOUNT_H_#include#include#include#include item.h#include bankcard.husing namespace std;class Accountprivate:string username;string password;string phonenum;double shouldpay;int cardnum;public:vector vBank;vector vItem;double getShouldpay() return shouldpay;int getCardnum()return cardnum;void addCardnum(int num) cardnum+=num;void clshouldpay()shouldpay=0.0;void addShouldpay(double price) shouldpay+=price;void subShouldpay(double price) shouldpay-=price; Account();Account(string username,string password,string phonenum,vector scart,double shouldpay,int cardnum);void setPassword(string password);void setPhone(string phonenum);string getUsername();string getPassword();string getPhonenum();ofstream& operator (ofstream& ofs);#endif#ifndef _BANKCARD_H_#define _BANKCARD_H_#include#includeusing namespace std;class bankcardprivate: string cardnum; string bankname; public: bankcard() bankcard(string cardnum,string bankname) this-cardnum=cardnum; this-bankname=bankname; string getCardnum() return cardnum; string getBankname() return bankname; ;#endif#ifndef _GOODS_H_#define _GOODS_H_#include#includeusing namespace std;/登录后,1.查看现有商品1.查看哪一类商品(记得显示产品描述,产品原价,产品剩余量,优惠信息)|2.回退class goodsprotected:string name;string description;double originalPrice;int remainder;double discount;/折扣public:goods()goods(string name,string description,double originalPrice,int remainder,double discount) this-name=name; this-description=description; this-originalPrice=originalPrice; this-remainder=remainder; this-discount=discount; string getName();string getDescription();double getOriginalPrice();int getRemainder();bool subRemainder(int num)if(remainder=num)remainder=remainder-num;return true;return false;double getDiscount();virtual double getPrice()return discount*originalPrice;ofstream& goods:operator (ofstream& ofs);class food : public goodspublic:virtual double getPrice();food(string name,string description,double originalPrice,int remainder,double discount):goods(name,description,originalPrice,remainder,discount);class clothing : public goodspublic:virtual double getPrice();clothing(string name,string description,double originalPrice,int remainder,double discount):goods(name,description,originalPrice,remainder,discount);class book : public goodspublic:virtual double getPrice();book(string name,string description,double originalPrice,int remainder,double discount):goods(name,description,originalPrice,remainder,discount);#endif#ifndef _ITEM_H_#define _ITEM_H_#includeusing namespace std;class itemprotected:string name;int num;double price;public:item(string name,int num,double price) this-name=name;this-num=num;this-price=price;string getName() return name;int getNum() return num;double getPrice()return price;#endif#ifndef _PLATFO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论