版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、c+电商交易平台设计班级:2013211306 姓名:严浩 学 号:2013211321一 实验目的1. 锻炼我们用c+编程的能力2. 培养我们考虑问题是否全面的能力3. 训练我们的代码优化能力二 基本内容题目一:银行门户的设计该门户是一个单独的程序,程序要求至少支持以下功能:1) 注册银行卡,银行可选;2) 修改银行卡密码;3) 存款取款;银行卡至少需要有卡号,密码,所属银行名称,持卡人身份证号,卡内金额等内容。要求1:请把所有的银行名写入文件(或数据库),注册银行卡的时候,要求只能选择已经存在的银行进行注册。要求2:请做好错误场景的处理,例如读银行文件错误,输入数据不合法等等。题目二:电商
2、平台的设计该平台是银行门户之外的一个单独的程序,程序要求至少支持以下功能:1) 注册&登录:支持新用户注册平台账号,已注册用户用平台账号登录平台。(要求已注册用户的信息长久保留。)2) 浏览平台产品信息。3) 优惠活动:支持对同一品类下所有产品打折的活动,支持单笔订单满x减y的活动。4) 购买产品:支持用户添加产品到购物车,查看实际应付的产品价格,提交订单。在题目二我们暂时不考虑提交订单后支付等后续需求。要求1:电商平台上至少有三类产品:如食物、服装、图书等,每类产品中至少有三个具体的产品(如图书中可以有c+ primer、effertive c+等),每个具体的产品请至少包含产品描述
3、,产品原价,产品剩余量等数据。所有的产品信息需要存储在数据库或文件中,不能写在代码中,平台管理员通过直接修改数据库或文件,管理本平台上的产品,包括产品的增加和删除,修改数量以及具体产品的属性信息等。要求2:请至少设计一层继承体系(产品基类-产品子类),设计一个产品基类,然后让图书类、电子产品类和服装类等产品子类类继承它,具体的产品是产品子类的实例对象(<<c+ primer >> 是图书类的实例对象) 。产品基类请至少具有一个虚函数getprice()用于计算具体产品的价格。要求3:请通过为每个产品子类定义“品类折扣系数”来支持对同产品子类下所有产品打折扣的活动(如图书
4、全场5折,则图书类这一产品子类的折扣系数为0.5)。要求4:请做好错误场景的处理。题目三:网上支付的设计实现题目三会让你设计的平台像个真正的运行在网络上的平台。题目三要求在题目一、二的基础上支持通过网上支付在电商平台上购物,请至少实现以下功能:1) 绑定银行卡:支持电商平台账号绑定银行卡。同一账号可以绑定多张银行卡,而且银行卡可以属于不同银行。2) 网上支付:选择绑定的任一银行卡支付电商平台上的订单。要求1:绑定银行卡和选择银行卡进行支付时都要求提供对应的银行卡密码。要求2:当在电商平台上绑定银行卡或者进行网上支付的时候,请不要直接打开某个文件查找银行卡的信息,因为银行卡信息文件是银行门户系统
5、私有的,电商平台系统无法直接访问,而应该由电商平台系统去向银行门户系统对接数据。请用socket通信来传送数据。要求3:请做好错误场景的处理,如绑定银行卡失败,支付失败等。三 实验方法题目一:创建了银行卡类、银行门户类,银行卡里包含了卡号、姓名、密码、身份证号、银行名称、余额几个属性。银行门户有操作银行卡,注册银行卡两个功能,操作银行卡又包括存取款,修改密码等功能,账户信息和银行名称保存在文件里,银行卡用vector类型保存。题目二:创建了电商平台类、账户类、商品类(商品类有3个派生类)、绑定银行卡类、购物车项目类。其中账户类中包含了用户名、密码、手机号、购物车、应付款、绑定银行卡、绑定银行卡
6、数量这几个属性,其中购物车里的项目用vector类型保存。电商平台中的账户也用vector类型保存,平台的功能有:登录、注册,登录后可以绑定银行卡、查看商品并添加购物车、查看购物车和应付金额、结算购物车、退出登录等功能。题目三:在绑定银行卡和付款时用socket通信来传送数据。绑定银行卡时,先向银行门户发送绑定银行卡标志位表示绑定功能,然后发送卡号密码,验证通过后返回成功标志位,电商平台收到后绑定成功。付款时,先向银行门户发送付款标志位表示付款功能,然后发送卡号密码,验证通过后返回成功标志位,电商平台收到后发送应付金额,银行门户收到后调用付款函数,余额不足返回余额不足标志位,余额够则返回付款成
7、功标志位。四 源代码 银行门户代码: #ifndef _bankcard_h_#define _bankcard_h_#include<string>#include<fstream>using namespace std;class bankcardprivate: string cardnum; string password; string bankname; string name; string id; double remainder; public: bankcard() bankcard(string num,string password,string
8、 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
9、password); ofstream& operator <<(ofstream& ofs);#endif#include "bankcard.h"using std:string;bankcard:bankcard(string cardnum,string passport,string bankname,string name,string id,double remainder)this->cardnum=cardnum;this->password=passport;this->bankname=bankname;t
10、his->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 bankca
11、rd: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->passw
12、ord=password) return true; else return false;ofstream& bankcard:operator <<(ofstream& ofs)ofs<<" 卡号:"<<cardnum;ofs<<" 密码:"<<password;ofs<<" 银行:"<<bankname;ofs<<" 姓名:"<<name;ofs<<" 身份证号:&q
13、uot;<<id;ofs<<" 余额:"<<dec<<remainder<<endl; return ofs;#ifndef bankportal_h#define bankportal_h#include <winsock2.h> #include <stdio.h> #pragma comment(lib,"ws2_32.lib")#include <vector>#include <string>#include "bankcard
14、.h"using std:vector;class bankportalprivate:vector<string> vbankn;vector<bankcard> 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 outp
15、ut();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 <iostream>#include <fstream>#include <string>#include <strstream>#include <
16、;cmath>#include <time.h>#include "bankportal.h"const string bankname_file = "bankname.txt"const string output_file = "output.txt"bankportal:bankportal()init();cout<<"1:进入银行门户系统 2:进入监听模式,请输入您的选择:"int choice;string select;while(!(cin >> sele
17、ct) | (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 << "=" <&
18、lt; endl;cout << "=您想进行什么操作?=" << endl;cout << "=1:操作账户 =" << endl;cout << "=2:注册银行卡 =" << endl;cout << "=3:退出 =" << endl;cout << "=" << endl <<endl;cout << "请输入您要进行的操作:&quo
19、t;int select;string select;while(!(cin >> select) | select0 < '1' | 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();ret
20、urn;default:break;void bankportal:registerbankc()cout << "请选择你要注册的银行:" << endl;for(unsigned int i=0;i<vbankn.size();i+)if(i % 4 = 3)cout << "" << i << ":" << vbankni << endl;elsecout << "" << i <<
21、":" << vbankni;cout << endl << "请输入您的选择:"unsigned int num;while(!(cin >> num) | num < 0 && num >= vbankn.size()cout << endl << "输入错误,请重新输入:"cout << endl; string bank = vbanknnum;int cardnum;strstream t;string card;
22、string password;string temp;string name;string id;int i;cout << "姓名:" cin >> name; cout << "身份证号:"cin >> id;srand(int)time(0);docardnum=1000+(rand()%9000);t<<cardnum;t>>card;while(check(card);docout << "设置密码:"cin >> passwo
23、rd;cout << "再次确认密码:"cin >> temp;while(password != temp && cout << endl << "前后输入的密码不同,请重新输入!" << endl);cout << endl;bankcard bcard(card, password, bank, name, id,0.0);vbankc.push_back(bcard);cout << "注册银行账号成功!" <<en
24、dl; cout <<"卡号为:"<<card<<endl;void bankportal:loginbankc()string cardnum;string password;unsigned int num;docout<<"请输入要操作的银行卡号:"<<endl; cin>>cardnum;while(num=match(cardnum)>=vbankc.size()&&cout<<"账号输入错误!"<<endl
25、);while(true)cout << "=" << vbankcnum.getname() << "先生/女士=" << endl;cout << "=卡内余额共 " << vbankcnum.getremainder() << "rmb=" << endl;cout << "=" << endl;cout << "=请选择您的操作:=" &
26、lt;< endl;cout << "=1:存款 =" << endl;cout << "=2:取款 =" << endl;cout << "=3:修改银行卡密码=" << endl;cout << "=4:返回上一级菜单=" << endl;cout << "=" << endl << endl;cout << "请选择您的操作:&qu
27、ot;int select;string select;while(!(cin >> select) | select0 < '1' | 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:changepasswor
28、d(num);break;case 4:return;default:break;void bankportal:deposit(int num)double money;cout<<"请输入您要存入的金额:"<<endl;cin>>money;vbankcnum.addremainder(money);void bankportal:withdraw(int num)double money; cout<<"请输入您要取出的金额:"<<endl;cin>>money;if(vban
29、kcnum.getremainder()>=money) vbankcnum.subremainder(money);else cout<<"对不起,余额不足!"<<endl;bool bankportal:pay(string num,double money)int index;index=match(num);if(vbankcindex.getremainder()>=money) vbankcindex.subremainder(money);return true;else return false;void bankport
30、al:changepassword(int num)string password;string temp;docout<<"请输入新密码:"<<endl;cin>>password;cout<<"再次确认新密码:"<<endl;cin>>temp;while(password!=temp&&cout << "前后输入的密码不同,请重新输入!" << endl);vbankcnum.setpassword(password)
31、;int bankportal:match(string cardnum)unsigned int i=0;for(;i<vbankc.size();i+)if(vbankci.getcardnum()=cardnum) return i;return i;bool bankportal:check(string cardnum)unsigned int i=0;for(;i<vbankc.size();i+)if(vbankci.getcardnum()=cardnum) return true;return false;void bankportal:output()ofstr
32、eam fout(output_file.c_str();for(unsigned int i=0;i<vbankc.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
33、end)/把字符串转化成double类型 int state = 0;int i = 0;double num = 0;for(; start < end; +start)if(state = 0 && strstart != '.' && isdigit(strstart)num = num * 10 + strstart - '0'else if(state = 0 && strstart = '.')state = 1;else if(state = 1 && isdig
34、it(strstart)num = num * 10 + strstart - '0'+i;return num/pow(10, i);void bankportal:init()ifstream fin(output_file.c_str();string cardnum;string password;string bankname;string name;string id;string remainders;double remainder; while(fin>>cardnum) cardnum=cardnum.substr(6); fin>>
35、password; password=password.substr(6); fin>>bankname; bankname=bankname.substr(6); fin>>name; name=name.substr(6); fin>>id; id=id.substr(10); fin>>remainders; remainder=strtodouble(remainders,6,remainders.size(); bankcard bankc(cardnum,password,bankname,name,id,remainder); vb
36、ankc.push_back(bankc);fin.close();banknaming();int bankportal:match(string cardnum,string password)unsigned int i=0;for(;i<vbankc.size();i+)if(vbankci.getcardnum()=cardnum&&vbankci.getpassword()=password)return i;return i; void bankportal:bind() word sockversion = makeword(2,2); wsadata w
37、sadata; 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 = hto
38、ns(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 =
39、 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(
40、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=receivep
41、assword; 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(scli
42、ent,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(ca
43、rdnum,password); if(index<vbankc.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,st
44、rlen(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 _acoun
45、t_h_#define _acount_h_#include<string>#include<fstream>#include<vector>#include "item.h"#include "bankcard.h"using namespace std;class accountprivate:string username;string password;string phonenum;double shouldpay;int cardnum;public:vector<bankcard> vbank
46、;vector<item> 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,s
47、tring password,string phonenum,vector<item> 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 _
48、bankcard_h_#include<string>#include<fstream>using 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
49、() return bankname; ;#endif#ifndef _goods_h_#define _goods_h_#include<string>#include<fstream>using namespace std;/登录后,1.查看现有商品1.查看哪一类商品(记得显示产品描述,产品原价,产品剩余量,优惠信息)|2.回退class goodsprotected:string name;string description;double originalprice;int remainder;double discount;/折扣public:goods()g
50、oods(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 getoriginalpri
51、ce();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
52、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
53、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_#include<string>using 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 nu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 跨平台的jQuery插件迁移至区块链方案探讨
- 红绿灯路口课程设计
- 2024至2030年中国金针穿入成型机数据监测研究报告
- 2024至2030年中国螺旋藻南瓜荞麦糊行业投资前景及策略咨询研究报告
- 2024至2030年中国矿用隔爆水银限位开关数据监测研究报告
- 2024至2030年中国枣子酊行业投资前景及策略咨询研究报告
- 2024至2030年霍尔电路陶瓷外壳项目投资价值分析报告
- 2024至2030年醋酐项目投资价值分析报告
- 2024至2030年清洗系统项目投资价值分析报告
- 2024至2030年油桶支架项目投资价值分析报告
- 2023年国家公务员录用考试《行测》行政执法卷-解析
- 建筑物修复行业市场深度分析报告
- 西欧庄园教学设计 统编版九年级历史上册
- 2021年四川乐山中考满分作文《把诗情写进青春里》
- 2024新版七年级英语单词表
- 2024年移动网格经理(认证考试)备考试题库大全-上单选、多选题汇
- 江苏省徐州市2023-2024学年八年级上学期期中英语试题
- 牙体牙髓病学-关于牙齿的故事智慧树知到答案2024年南昌大学
- 【导学案】在奉献中成就精彩人生 2024-2025学年七年级道德与法治上册(统编版2024)
- 期中试卷(1-4单元)(试题)-2024-2025学年六年级上册数学人教版
- SLT824-2024 水利工程建设项目文件收集与归档规范
评论
0/150
提交评论