版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C++电商交易平台设计
一.实验目的
1.锻炼我们用C++编程的能力
2.培养我们考虑问题是否全面的能力
3.训练我们的代码优化能力
二.根本内容
题目一:银行门户的设计
该门户是一个单独的程序,程序要求至少支持以卜功能:
1)注册银行卡,银行可选:
2)修改银行卡密码;
3)存款取款:
银行卡至少需要行卡号,密码,所属银行名称,持卡人身份证号,卡内金额等内容。
要求1:请把所有的银行名写入文件(或数据库),注册银行卡的时候,要求只能选择已经存在的银行进行注册。
要求2:请做好错误场景的处理,例如读银行文件错误,输入数据不合法等等。
题目二:电商平台的设计
该平台是银行门户之外的一个单独的程序,程序要求至少支持以下功能:
1)注册&登录:支持新用户注册平台账号,已注册用户用平台账号登录平台。(要求已注册用户的信息长久保存。)
2)浏览平台产品信息“
3)优惠活动:支持对同•品类下所有产品打折的活动,支持单笔订单满X减Y的活动。
4)购置产品:支持用户添加产品到购物车,查看实际应付的产品价格,提交订单。
在题目二我们暂时不考虑提交订单后支付等后续需求。
要求1:电商平台上至少有三类产品:如食物、服装、图书等,每类产品中至少有三个具体的产品(如图书中可以有《C++Primer》、
(EffortivcC+O等),每个具体的产品请至少包含产品描述,产品原价,产品剩余量等数据。所有的产品信息需要存储在数据库
或文件中,不能写在代码中,平台管理员通过直接修改数据库或文件,管理本平分,的产品,包拈产品的增加和刑除,修改数量以
及具体产品的属性信息等。
要求2:请至少设计一层继承体系(产品基类-产品子类),设计一个产品基类,然后让图书类、电子产品类和服装类等产品子类类
继承它,具体的产品是产品了类的实例对蒙(《C++Primer>>是图书类的实例对象)。产品基类请至少具有一个虚函数getBriceO
用于计算具体产品的价格。
要求3:请通过为每个产品子类定义“品类折扣系数"来支持对同产品子类下所有产品打折扣的活动(如图书全场5折,则图书类
这一产品子类的折扣系数为0.5)。
要求4:请做好错误场景的处理。
题目三:网上支付的设计
实现题目三会让你设计的平台像个真正的运行在网络上的平台。题目三要求在题目一、二的基础上支持通过网上支付在电商平
台上购物,造至少实现以卜.功能,
1)绑定银行卡:支持电商平台账号绑定银行卡。同一账号可以绑定多张银行卡,而且银行卡可以属于不同银行。
2)网上支付:选择绑定的任一银行卡支付电商平台上的订单。
要求1:绑定银行卡和选择银行卡进行支付时都要求提供对应的银行卡密码。
要求2:当在电商平台上绑定银行卡或者进行网上支付的时候,请不要直接翻开某个文件查找银行卡的信息,因为银行卡信息文件
是银行门户系统私有的,电商平台系统无法直接访问,而应该由电商平台系统去向银行门户系统对接数据。请用socket通信来传
送数据。
要求3:请做好错误场景的处理,如绑定银行卡失败,支付失败等。
三.实验方法
题目一:
创立了银行卡类、银行门户类,银行卡里包含了卡号、姓名、密码、身份证号、银行名称、余额几个属性。
银行门户有操作银行卡,注册银行卡两个功能,操作银行卡又包括存取款,修改密码等功能,账户信息和银
行名称保存在文件里,银行卡用vector类型保存。
题目二:
创立了电商平台类、账户类、商品类(商品类有3个派生类)、绑定银行卡类、购物车工程类。其中账户类
中包含了用户名、密码、手机号、购物车、应付款、绑定银行卡、绑定银行卡数量这几个属性,其中购物车里的
工程用vector类型保存。
电商平台中的账户也用vector类型保存,平台的功能有:登录、注册,登录后可以绑定银行卡、查看商品
并添加购物车、查看购物车和应付金额、结算购物车、退出登录等功能。
题目三:
在绑定银行卡和付款时用socket通信来传送数据。
绑定银行卡时,先向银行门户发送绑定银行卡标志位表示绑定功能,然后发送卡号密码,验证通过后返【口I成
功标志位,电商平台收到后绑定成功。
付款时,先向银行门户发送付款标志位表示付款功能,,然后发送卡号密码,验证通过后返回成功标忐位,
电商平台收到后发送应付金额,银行门户收到后调用付款函数,余额缺乏返回余额缺乏标志位,余额够则返回付
款成功标志位。
四.源代码
银行门户代码:
#ifndef_BANKCARD_H_
#defineBANKCARD_H_
#include<string>
#include<fstream>
usingnamespacestd;
classbankcard{
private:
stringcardnum;
stringpassword;
stringbankname;
stringname;
stringID;
doubleremainder;
pjblic:
bankcard(){}
bankcard(stringnum,stringpassword,stringbankname,stringname,stringID,doubleremainder);
voidsetPassword(stringpassword);
voidaddRemainder(doub1emoney);
voidsubRemainder(doubIemonay):
stringgetCardnumO;
stringgetPassword();
siringgctBanknamc();
stringgetNameO;
stringgetIDO;
doublegetRemainder();
boolmatchPassport(stringpassword):
ofstrearnftoperator«(ofstream&ofs);
);
#endif
#include"bankcard,h”
usingstd::string;
bankcard::bankcard(stringcardnum,stringpassport,stringbanknarnc,siringname,siringID,doubleremainder){
tiis->cardnum=cardnum;
tnis->password=passport;
tiis->bankname=bankname;
tnis->name=name;
this->ID=ID;
tnis->remainder=remainder:
}
voidbankcard::setPassword(stringncwpassport){
tais->password=newpassport;
}
voidbankcard::addRemainder(doublemoney)■
tiis->remainder+=money;
}
voidbankcard::subRemainder(doublemoney)
tnis->remainder=this->remainder-moncy;
}
siringbankcard::getCardnumO{
returncardnum;
}
stringbankcard::getPassword(){
returnpassword;
}
stringbankcard::getBankname()(
voidinit();
voidregisterBankCO:
voidloginBankCO;
voidchangePassword(iniindex);
voiddeposit(intindex);
voidwithdraw(intindex);
intmatch(stringcardnum);
boolcheck(stringcardnum);
voidoutput();
voidbankNamingO:
doubleStrToDouble(stringstr,intstart,intend);
voidBind。;
boolpay(stringnum,doublemoney);
intMatch(stringusername,stringpassword);
pjblic:
BankPortal();
};
#endif
"include<iostream>
^include<fstream>
#include<string>
#include<strstream>
#include<cmath>
#include<time.h>
#include"bankporlal.h*
conststringbanknamefile="bankname.txt”;
conststringoutput_file="output.txt”;
BankPortal::BankPortal(){
initO;
进入银行门户系统2:进入监听模式,请输入您的选择:";
intChoice:
stringSelect;
while(!(cin»Select)11(Select[0]!='1’&&Select[0]!='2'))
cout«"输入错误,请重新输入:”《endl;
cout«endl;
Choice=std::atoi(Select,cstr());
if(Choice==2)
BindO;
while(true){
cout<<endl:
cout«"================欢送来到银行门户================="«endl;
cout<<H======================================*<<end1;
cout«"================您想进行什么操作?==============="«cndl;
cout«"================1:操作账户===============*«endl;
cout«"===============2:注册银行卡=============="«endl;
cout«"=================3:退出================*«endl;
cout<<"==========================================="«endl«endl;
cout«"请输入您要进行的操作;”;
intselect;
stringSelect;
while(!(cin»Select)11Select[0]<T'11Select[0]>'3')
cout«"输入错误,请重新输入:"«endl;
cout<<endl;
select=std::atoi(Select.c_str());
switch(select)
(
case1:
loginBankCO;
break;
case2:
registerBankCO;
break;
case3:
output();
return;
default:
break;
)
)
}
voidBankPorta1::registerBankCO{
cout«〃请选择你要注册的银行:"«endl;
for(unsignedinti=0;i<vBankN.size();i++){
if(i%4==3)
cout«*<<i«":"«vBankN[i]«endl;
else
cout«"<<i«vBankN[i];
cout<<endl<<”请输入您的选朽:
unsignedintnum;
wii1e(!(cin>>num)||num<0&&num>=vBankN.sizeO)
cout«endl«"输入错误,请重新输入:”;
cout«end1;
stringbank=vBankN[num];
intcardnum;
strstreamt;
stringcard;
stringpassword;
stringtemp;
stringnnmc;
stringID;
inti;
cout«"姓名:
cin»name;
cout«”身份证号:”;
cin»ID;
srand((int)time(O));
do{
cardnum=1000+(rand()%9000);
t«cardnum;
t»card;
}
wiile(check(card));
do{
cout«”设置密码:”;
cin»password;
cout«”再次确认密码:”;
cin»temp;
}
wiile(password!=temp&&cout«end!<<”前后输入的密码不司,请重新输入!"<<endl);
cout<<end1;
bankcardbeard(card,password,bank,name,ID,0.0);
v3ankC.push_back(beard);
cout«”注册银行账号成功!"«endl;
cout<<“卡号为:*«card«endl;
}
voidBankPortal::loginBankCO{
stringcardnum;
stringpassword;
unsignedintnum;
do{
ccut<,请输入要操作的银行三号:"<<endl:
cin»cardnum;
}
wnile((num=match(cardnum))>=vBankC.size()&&cout<〈”账号输入错误!"<<cndl);
wnile(true){
cout«*========================*«vBankC[num].getNameO«”先生/女士=================="«endl;
cout«"====================卡内余额共*«vBankC[nun].getRemainder()<<〃RMB================"<<
endl;
cout<<"------------------------------------------------------------"«end1;
cout«"===================请选择您的操作:================"«endl:
cout«=================l:存款===============*«endl;
cout«"=================2:取款===============*«endl:
cout«"===================3:修改银行卡密码================="«endl;
cout«"=================4:返回上一级菜单==============="«endl;
cout«"==================================================="«endl«endl;
cout«”请选择您的操作:”;
intselect;
stringSelect;
while(!(cin»Select)11Select[0]<'1'11Select[0]>'4')
coui<<"输入错误,请竟新输入:"«endl;
select=std::atoi(Select.c_str());
cout«endl;
swilch(sclect)
(
case1:
deposit(num);
break:
case2:
withdraw(num);
break;
case3:
changePassword(num);
break;
case4:
return;
default:
break;
)
voidBankPortal::deposit(intnum){
doublemoney;
CDUt<<"请输入您要存入的金额:"<<endl;
cin»money;
v3ankC[num].addRemainder(moneyI;
}
voidBankPorta1::withdraw(intnum)I
doublemoney;
cout<<”请输入您要取出的金额;*«cndl;
cin»money;
if(vBankC[num].getRemainder()>=money){
vBankC[:)um].subRemainder(money);
)
elsecout<<”对不起,余额缺乏!"<<en(H;
}
boolBankPortaI::pay(stringnum,doublemoney){
intindex;
Lndex=match(nurii);
if(vBankC〔index].getRemainder()>=money){
vBankCtindex].subRemainder(nioney);
returntrue;
)
elsereturnfalse;
}
voidBankPortal::changePassword(intnum){
stringpassword;
stringtemp;
do{
sut<<“请输入新密码:"<<endl;
cin»password;
cout«"再次确认新密码:*«cndl;
cin»temp;
}
wiile(password!=temp&&cout«"前后输入的密码不同,请重新输入!"endl);
v3ankC[num],setPassword(password);
intBankPortal::match(stringcardnum){
unsignedinti=0;
for(;i<vBankC.size();i++){
if(vBankC[i].getCardnum()==cardnuni){
returni;
)
}
returni;
}
boolBankPortal::check(stringcardrium){
unsignedinti=0;
for(;i<vBankC.sizeO;i++){
if(vBankC[i].getCardnum()==cardnum){
returntrue;
)
}
returnfalse;
}
voidBankPortal::output(){
ofstreamfout(output_0);
for(unsignedinti=0;i<vBankC.sizeO;i++){
vBankC[i]«(fout);
}
fout.closeO;
}
voidBankPortal::bankNaming(){
i('streamfin(bankname_());
stringinput;
w-iilc(gctlinc(fin,input)){
vBankN.pushback(input);
)
fin.closeO;
}
doub1eBankl^rtal::StrToDouble(stringstr,intstart,intend){//把字符串转化成double类型
intstate=0;
inti=0;
doublenum=0;
for(;start<end;++start){
if(state==0&&str[start]&&isdigit(str[starl]))
num=num*10+str[start]-'0';
elseif(stale==0&&str[start]==
state=1;
elseif(state==1&&isdigit(str[start])){
num=num*10+str[start]-'O';
++i;
)
)
returnnum/pow(10,i);
}
voidBankPortal::init(){
ifstreamfin(output_0);
stringcardnum;
stringpassword;
stringbankname;
stringnnmc;
stringID;
stringremainders;
doubleremainder;
wii1e(fin>>cardnum){
cardnum=cardnum.substr(6);
fin>>password;
password=password.substr(6);
fin>>bankname;
banknaine=bankname.substr(6);
fin»name;
name=name.substr(6);
fin»ID;
ID=ID.substr(10);
fin»remainders;
remainder=StrToI)oub1e(remainders,6,remainders,size。);
bankcardbankc(cardnum,password,bankname,name,ID,remainder);
vBankC.pushback(bankc);
}
fin.close();
bankNamingO;
}
intBankPortal::Match(stringcardnum,stringpassword){
unsignedinti=0;
for(;i<vBankC.size();i++){
if(vBankC⑴.getCardnum()==cardnu:n&&vBankC[i].getPassword()==password)
returni;
}
returni;
voidBankPortal::Bind()
WORDsockVersion=MAKEWORD(2.2):
WS.ADATAwsaData;
if(WS?\Startup(sockVersion,&ws£Data)!=0)
(
printf("嵌套字未翻开!”);
return;
}
〃创立套接字
SOCKETslistcn-socket(AE_INET,SOCK_STREAM»IPPROTO_TCP);
if(slisten==INVALID_SOCKET)
(
printf(*socketerror!");
return;
)
//绑定IP和端口
sockaddrinsin;
sin.sinfamily=AFINET;
sin.sin_port=htons(8888);
sin.sinaddr.Sun.Saddr=INADDRANY;
if(bind(slisten,(LPSOCKADDR)&sin,sizeof(sin))==SOCKET_EEROR)
|
printf("binderror!");
}
//开始监听
if(listen(slisten,5)==SOCKETERROR)
(
printf("listenerror!”);
return;
}
//循环接收数据
SOCKETsClient;
sockaddrinremotcAddr;
intn?\ddrlen=sizeof(remoteAddr);
charsendBuf[2];
charreceiveChoice[2];
intchoice;
while(true)
{
printf("等待连接...\n"):
sClient=accept(siisten,(SOCKADDR*)&remoteAddr,&nAdcrlen);
if(sClient==INVALID_SOCKET)
printf(^accepterror!"):
continue;
)
prinlf("接受到一个连接:%s\r\n”,inet_ntoa(rcmotcAddr.sin_addr));
recv(sClient,receiveChoice,2,0);〃监听选择
choice=(receiveChoice[01-'0');
if(choice==l)
{
charrcceivcCard[5];
charreccivcPassword[30];
recv(sClient,receiveCard,5,0)://接受账号密码
recv(sClient,receivePassword,30,0);
stringcardnum;
cardnum=receiveCard;
stringpassword;
password=receivePassword;
intindex;
if((index=Match(cardnum,password))<vBankC.sizeO){
sprintf(sendBuf,"X")",
send(sClient,sendBuf,strlen(sendBuf)+1,0);〃发送绑定成功
sprintf(sendBuf,vBankC[index].geiBanknameO.c_str());〃发送银行类型
send(sClient,sendBuf,strlen(sendBuf)+1,0);
)
else{
sprintf(sendBuf,"0");
scnd(sClicnt,sendBuf,strlcn(scndBuf)+l,0);
elseif(choice==2){
charreceiveCard[5]:
charreceiveShou1dpay[20]:
charrcceivePassword[30];
intindex;
recv(sClient,receiveCard,5,0);〃接受账号密码
recv(sClient,receivePassword,30,0);
stringcardnum;
cardnum=receivcCard;
stringpassword;
password=receivePassword;
index=Match(cardnum,password);
if(index<vBankC.sizeO){
sprintf(sendBuf,"1");
send[Client,sendBuf,strlen(sendBuf)+1,0);//发送验证成功
recv(sClient,receiveShouldpay,20,0);
doubIeshouIdpay:
shou1dpay=std::atof(receiveShou1dpay);
if(pay(cardnum,shou1dpay)){
sprintf(sendBuf,"l");
send(sClient,sendBuf,strlen(sendBuf)+1,0);//发送付款成功
output();
)
else{
cout«”余额缺乏!”:
sprintf(sendBuf,^O*);
send(sClicnt,sendBuf,strlen(sendBuf)+1,0);〃发送付款成功
)
}
else{
sprintf(sendBuf,"0");
send(sClient,sendBuf,strlen(sendBuf)+1,0);〃发送验证失败
}
)
}
closesocket(siisten);
VSACleanupO;
}
电商平台代码:
#ifndef_ACOUNT_H_
在define_AC()UNT_H_
#include<string>
#include<fstream>
#include<vector>
#include"item,h”
#include“bankcard.h"
usingnamespacestd;
classAccount{
private:
stringusername;
stringpassword;
stringphonenum;
doubleshou1dpay;
Litcardnum;
public:
v?ctor<bankcard>vBank;
vactor<item>vItern;
doublegetShouldpay0{
returnshouldpay:
intgetCardnumO{
returncardnum;
}
voidaddCardnum(intnum)
(
cardnum+=num;
)
voidclshouldpay(){
shou1dpay=0.0;
}
voidaddShou1dpay(doub1eprice){
shouldpay+=price;
)
voidsubShou1dpay(doub1eprice){
shou1dpay-=price;
)
Account();
Azcount(stringusername,stringpassword,stringphonenum,vector<item>scart,doubleshouldpay,intcardnum);
voidsetPassword(stringpassword);
voidsetPhone(stringphonenum);
stringgetUsernameO;
stringgetPasswordO;
stringgetPhonenumO;
ofstream&operator«(ofslrcariAofs);
);
#endif
#ifnclef_BANKCARD_H_
配efineBANKCARD_H_
#include<string>
#include<fstream>
usingnamespacestd;
classbankcard{
private:
stringcardnum;
stringbankname;
pjblic:
bankcardO[}
bankcard(stringcardnum,stringbanknamc){
t.his->cardnum=(ardnum:
this->bankname=bcinkn<inic;
)
stringgctCardnumO{
returncardnum;
)
stringgetBanknameO(
returnbankname;
)
};
#endif
#ifndef.GOODSH_
配efine_GOODSJI_
#include<string>
#include<fstreani>
usingnamespacestd;
〃登录后,1.查看现有商品{1.查看哪一类商品(记得显示产品描述,产品原价,产品剩余量,优惠信息)}|2.回退
classgoods(
protected:
stringname;
stringdescription;
doubleoriginalPrice:
intremainder;
doublediscount;〃折扣
public:
goods(){}
goods(stringname,stringdescription,doubleoriginalPrice,intremainder,doublediscount){
this->name=name;
this->description=description;
this->originalPrice=original?rice;
this->remainder=rcmaindcr;
this->discount=discount;
)
stringgetNameO;
stringgetDcscription();
doublegetOriginalPriceO;
intgetRemainder();
boolsubRemainder(intnum){
if(remainder>=nuin)
remainder=remairider-num:
returntrue;
)
returnfalse;
)
doublegetDiscount();
virtualdoublegetPriceO{
returndiscount*originalPrice;
)
ofGtroam&goodn::operator<<(ofstroam&ofn);
};
classfood:publicgoods{
public:
virtualdoublegetPriceO:
food(sttingname,stringdescription,doubleoriginalPrice,intremainder,double
discount):goods(narit',description,oriL;it:;i1Pri(-(>,ieii!;iin(l('r,discourt){}
};
classclothing:publicgoods{
public:
virtualdoublegetPriceO;
clothing(stringname,stringdescription,doubleoriginalPrice,intremainder,double
discount):goods(naiiit',(l('scription,originalPrice,remainder,discourt){}
};
classbook:publicgoods{
public:
virtualdoublegetPriceO:
book(slringname,stringdescription,doubleoriginalPrice,intremainder,double
discount):goods(name,description,originalPii<?,iI'n.iiu(ici,(:i:-;:i){}
};
Sendif
#ifndef_ITEM_H_
^defineITEMH
#include<string>
usingnamespacesld;
classitem{
protected:
stringname;
intnum;
doubleprice:
public:
item(sitingname,intnum,doubleprice){
this->name=name;
this->num=iium;
this->price=price;
}
stringgetNameO{
returnname;
}
iitgetNumO{
returnnum;
}
doublegetPriceO{
returnprice;
}
};
Sendif
#ifndef_PLATFORM_H_
^definePLATFORMH
^include<WINSOCK2.H>
^include<stdio.h>
ftpragnacomment(lib,z,ws2.32.lib*)
#include<vector>
★include<string>
#include"Account,h”
#include“goods.h"
usingstd::vector;
class14atform{
private:
V3ctor</\ccount>vAccount;
vector<food>vFood;
v?clor<clothing>vClothing;
V2ctor<book>vBook;
voidinit();//初始化
voidregisterAccount();
boolloginAccount();
//voidchangePhone(stringphonenum);
voidoutput();
boolcheck(stringusername);
intmatch(s1ringusername,siringpassword):
voidcheckgoods(intaccount);
doubleStrToDoub1e(stringstr,intstart,intend);
booladdshoppingcart(intchoice,intindex,intnum,intaccount);
voidcheckScart(intaccount);
voidBand(intindex,siringcardnum,stringpassword);
boolPay(intindex,stringcard);
public:
PlatformO;
};
#endif
#include"Account,h”
usingstd::string;
Account::Account(siringusername,string-s-.'.nitl,stringphonenum,veclor<item>scart,doubleshouldpay,int
cardnum){
tnis->username=usernamc;
t.iis->password=password;
tnis->phonenum=phonenum;
t.iis->vltem=scart;
tiis->shou1dpay=shouIdpay;
t.iis->cardnum=Ccirdnum;
}
voidAccount::setPassword(stringptssword){
tiis->password=password;
}
voidAccount::setPhone(stringphonenum){
tiis->phonenum=phonenum;
}
sitingAccount::getUsernamc(){
returnusername;
}
stringAccount::getPassword(){
rsturnpassword;
stringAccount::getPhonenum(){
returnphonenum;
ofstreanift.Account::operator«(ofstream&()is)(
ofs«,z用户名:"<<username;
ofs«"密码:”"password;
ofs«z/手机号:"<<phonenum;
ofs<<"银行卡数量:"<<cardnum<<endl;
//ofs«*购物车:”;
//for(unsignedi=0:i<scart.getvItemO.sizeO;i++){
//ofs«scart.getvItemO[i].getName()<<""<<scart.getvItemO[i].getnum()«w
*«scart.getvItemO[i].gctPricc()«cndl;
//)
returnofs:
}
#include"goods,h”
usingstd::string;
//goods::goods(stringname,stringdescription,doubleoriginalPrice,intremainder,doubledisccunt)
stringgoods::getName(){
returnname;
)
stringgoods::getl)escription()(
returndescription:
)
doublegoods::getOriginalPrice(){
returnoriginalPrice;
)
intgoods::gciRcmaindcr(){
returnremainder;
}
doublegoods::getDiscount(){
returndiscount;
)
doublefood::getPrice(){
returndiscounl*originalPrice;
doubleclothing::getPrice(){
returndiscount*origirialPrice:
}
doublebook::gctPricc(){
returndiscount*originalPrice;
}
ofstreamftgoods::operator«(ofstream&ofs){
ofs«,z名称:"<<name;
c「s<<"描述:"〈〈dcscription;
ofs«"原价:"<<originalPrice;
ofs<<"剩余量:"<<remainder;
ofs<<"折扣:"<<discount<<endl;
returnofs:
}
^include"Platform,h"
4include<iostream?
在include<cstdlib>
#include<cmath>
conststringAccount_file="Account.txt”;
conststringgoods_file=,/goods.txt";
conststringbankcard_file="bankcard.txt”;
Platform::Platform。{〃登录前,登录注册退出
initO;
wiile(true){
cout«endl;
cout«〃=============欢送来到MY电商平台==============="«endl;
cout«*=================================================="«endl;
cout«"==============♦您想进行什么操作?=============="«endl:
cout«"===============1:登录账号==============="«endl;
cout«"================2:注册账号=============="«endl;
cout«"===============3:退出==============*«endl;
cout«*==================================================*«endl«endl;
cout«”请输入您要进行的操作:";
intselect;
stringSelect;
while(!(cin»Select)11Select[0]<'1'11Select[0]>'3')
coui<<"输入错误,请新输入:"«endl:
cout«endl;
select=std::atoi(Select,cstr());
switch(select.)
case1:
if(!loginAccount())
cout<〈”输入密码超次数限制!"<<endl;
break:
case2:
registerAccount();
break;
case3:
output():
return;
default:
break;
)
)
}
doublePlatform::StrToDouble(stringstr,intstart,intend){〃把字符串转化成double类型
intstate=0:
inti=0;
doublenum=0;
for(;start<end;++start){
if(state==0&&str[start]'&&isdigit(str[start]))
num=num*10+str[start]-'O';
elseif(state==0&&str[slart]==
state=1;
elseif(state==1&&isdigit(str[start])){
num=num*10+str[start]-'O';
++i;
)
}
returnnum/pow(10,i);
}
voidPlatform::init(){
ifslreamfin(Account_0);
stringusername;
stringpassword;
stringphonenum;
v3ctor<item>scart;
stringcardnums;
intcardnum;
wiile(fin>>username){
username=username.substr(8);
fin»password;
password=password.substr(6);
fin»phonenum;
phonenum=phonenuin.substr(8);
fin»cardnums;
cardnums=cardnums.substr(12);
cardnum=std::atoi(cardnums.c_str());
Accountaccount(username,password,phonenum,scart,0.0,cardnum);
vAccounl.push_back(account);
}
fin.close();
ifstreamfingood(goods_());
stringname;
stringdescription:
stringoriginalPrices;
doubleoriginalPrice;
stringremainders;
iatremainder;
stringdiscounts;
doub1ediscount;
stringgoodsnums;
intgoodsnum;
fingood»goodsnums;
goodsnums=goodsnums.substr(16);
goodsnum=std::atoi(goodsnums.cstr());
wiile(goodsnum>0){
fingood»name;
name=name.substr(6);
fingood»dcscription;
description=description.substr(6);
fingood»originalPrices:
originalPrice=St
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 京东物流三管轮职责与执行方案
- 供应链物流运输协调方案
- 京东物流管理优化方案及面试问题指南
- 2026年初一英语专项训练题含答案
- 航空业市场部经理应聘问题详解
- 中考语文预测题河南答案
- 小学生社团考勤制度
- 2028年春季学期期末社团活动成果展示汇报方案
- 河北衡水市桃城区2025-2026学年七年级上学期期末生物学试题(无答案)
- 安徽省安庆市宿松县部分学校联考2025-2026学年上学期八年级2月期末地理试卷(无答案)
- (2026)三八妇女节女职工劳动保护特别规定知识竞赛题库及答案
- 2026届云南省普通高中学业水平选择性考试调研测试地理试题
- 2025年江苏省无锡市中考物理真题卷含答案解析
- 人工智能新名词百科
- (正式版)DB34∕T 5309-2025 《城镇燃气管道直流杂散电流干扰检测规程》
- 阀门井模板施工方案
- 刷单协议书合同范本
- 代持车牌协议书
- (新教材)2026年人教版八年级下册数学 22.1 函数的概念 课件
- 居民自治课件
- 2026年兰考三农职业学院单招职业技能考试必刷测试卷及答案1套
评论
0/150
提交评论