版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C++電商交易平臺(tái)設(shè)計(jì)
一.實(shí)驗(yàn)?zāi)康?/p>
1.鍛煉我們用C++編程的能力
2.培養(yǎng)我們考慮問(wèn)題是否全面的能力
3.訓(xùn)練我們的代碼優(yōu)化能力
二.根本內(nèi)容
題目一:銀行門(mén)戶(hù)的設(shè)計(jì)
該門(mén)戶(hù)是一個(gè)單獨(dú)的程序,程序要求至少支持以卜功能:
1)注冊(cè)銀行卡,銀行可選:
2)修改銀行卡密碼;
3)存款取款:
銀行卡至少需要行卡號(hào),密碼,所屬銀行名稱(chēng),持卡人身份證號(hào),卡內(nèi)金額等內(nèi)容。
要求1:請(qǐng)把所有的銀行名寫(xiě)入文件(或數(shù)據(jù)庫(kù)),注冊(cè)銀行卡的時(shí)候,要求只能選擇已經(jīng)存在的銀行進(jìn)行注冊(cè)。
要求2:請(qǐng)做好錯(cuò)誤場(chǎng)景的處理,例如讀銀行文件錯(cuò)誤,輸入數(shù)據(jù)不合法等等。
題目二:電商平臺(tái)的設(shè)計(jì)
該平臺(tái)是銀行門(mén)戶(hù)之外的一個(gè)單獨(dú)的程序,程序要求至少支持以下功能:
1)注冊(cè)&登錄:支持新用戶(hù)注冊(cè)平臺(tái)賬號(hào),已注冊(cè)用戶(hù)用平臺(tái)賬號(hào)登錄平臺(tái)。(要求已注冊(cè)用戶(hù)的信息長(zhǎng)久保存。)
2)瀏覽平臺(tái)產(chǎn)品信息“
3)優(yōu)惠活動(dòng):支持對(duì)同?品類(lèi)下所有產(chǎn)品打折的活動(dòng),支持單筆訂單滿(mǎn)X減Y的活動(dòng)。
4)購(gòu)置產(chǎn)品:支持用戶(hù)添加產(chǎn)品到購(gòu)物車(chē),查看實(shí)際應(yīng)付的產(chǎn)品價(jià)格,提交訂單。
在題目二我們暫時(shí)不考慮提交訂單后支付等后續(xù)需求。
要求1:電商平臺(tái)上至少有三類(lèi)產(chǎn)品:如食物、服裝、圖書(shū)等,每類(lèi)產(chǎn)品中至少有三個(gè)具體的產(chǎn)品(如圖書(shū)中可以有《C++Primer》、
(EffortivcC+O等),每個(gè)具體的產(chǎn)品請(qǐng)至少包含產(chǎn)品描述,產(chǎn)品原價(jià),產(chǎn)品剩余量等數(shù)據(jù)。所有的產(chǎn)品信息需要存儲(chǔ)在數(shù)據(jù)庫(kù)
或文件中,不能寫(xiě)在代碼中,平臺(tái)管理員通過(guò)直接修改數(shù)據(jù)庫(kù)或文件,管理本平分,的產(chǎn)品,包拈產(chǎn)品的增加和刑除,修改數(shù)量以
及具體產(chǎn)品的屬性信息等。
要求2:請(qǐng)至少設(shè)計(jì)一層繼承體系(產(chǎn)品基類(lèi)-產(chǎn)品子類(lèi)),設(shè)計(jì)一個(gè)產(chǎn)品基類(lèi),然后讓圖書(shū)類(lèi)、電子產(chǎn)品類(lèi)和服裝類(lèi)等產(chǎn)品子類(lèi)類(lèi)
繼承它,具體的產(chǎn)品是產(chǎn)品了類(lèi)的實(shí)例對(duì)蒙(《C++Primer>>是圖書(shū)類(lèi)的實(shí)例對(duì)象)。產(chǎn)品基類(lèi)請(qǐng)至少具有一個(gè)虛函數(shù)getBriceO
用于計(jì)算具體產(chǎn)品的價(jià)格。
要求3:請(qǐng)通過(guò)為每個(gè)產(chǎn)品子類(lèi)定義“品類(lèi)折扣系數(shù)"來(lái)支持對(duì)同產(chǎn)品子類(lèi)下所有產(chǎn)品打折扣的活動(dòng)(如圖書(shū)全場(chǎng)5折,則圖書(shū)類(lèi)
這一產(chǎn)品子類(lèi)的折扣系數(shù)為0.5)。
要求4:請(qǐng)做好錯(cuò)誤場(chǎng)景的處理。
題目三:網(wǎng)上支付的設(shè)計(jì)
實(shí)現(xiàn)題目三會(huì)讓你設(shè)計(jì)的平臺(tái)像個(gè)真正的運(yùn)行在網(wǎng)絡(luò)上的平臺(tái)。題目三要求在題目一、二的基礎(chǔ)上支持通過(guò)網(wǎng)上支付在電商平
臺(tái)上購(gòu)物,造至少實(shí)現(xiàn)以卜.功能,
1)綁定銀行卡:支持電商平臺(tái)賬號(hào)綁定銀行卡。同一賬號(hào)可以綁定多張銀行卡,而且銀行卡可以屬于不同銀行。
2)網(wǎng)上支付:選擇綁定的任一銀行卡支付電商平臺(tái)上的訂單。
要求1:綁定銀行卡和選擇銀行卡進(jìn)行支付時(shí)都要求提供對(duì)應(yīng)的銀行卡密碼。
要求2:當(dāng)在電商平臺(tái)上綁定銀行卡或者進(jìn)行網(wǎng)上支付的時(shí)候,請(qǐng)不要直接翻開(kāi)某個(gè)文件查找銀行卡的信息,因?yàn)殂y行卡信息文件
是銀行門(mén)戶(hù)系統(tǒng)私有的,電商平臺(tái)系統(tǒng)無(wú)法直接訪(fǎng)問(wèn),而應(yīng)該由電商平臺(tái)系統(tǒng)去向銀行門(mén)戶(hù)系統(tǒng)對(duì)接數(shù)據(jù)。請(qǐng)用socket通信來(lái)傳
送數(shù)據(jù)。
要求3:請(qǐng)做好錯(cuò)誤場(chǎng)景的處理,如綁定銀行卡失敗,支付失敗等。
三.實(shí)驗(yàn)方法
題目一:
創(chuàng)立了銀行卡類(lèi)、銀行門(mén)戶(hù)類(lèi),銀行卡里包含了卡號(hào)、姓名、密碼、身份證號(hào)、銀行名稱(chēng)、余額幾個(gè)屬性。
銀行門(mén)戶(hù)有操作銀行卡,注冊(cè)銀行卡兩個(gè)功能,操作銀行卡又包括存取款,修改密碼等功能,賬戶(hù)信息和銀
行名稱(chēng)保存在文件里,銀行卡用vector類(lèi)型保存。
題目二:
創(chuàng)立了電商平臺(tái)類(lèi)、賬戶(hù)類(lèi)、商品類(lèi)(商品類(lèi)有3個(gè)派生類(lèi))、綁定銀行卡類(lèi)、購(gòu)物車(chē)工程類(lèi)。其中賬戶(hù)類(lèi)
中包含了用戶(hù)名、密碼、手機(jī)號(hào)、購(gòu)物車(chē)、應(yīng)付款、綁定銀行卡、綁定銀行卡數(shù)量這幾個(gè)屬性,其中購(gòu)物車(chē)?yán)锏?/p>
工程用vector類(lèi)型保存。
電商平臺(tái)中的賬戶(hù)也用vector類(lèi)型保存,平臺(tái)的功能有:登錄、注冊(cè),登錄后可以綁定銀行卡、查看商品
并添加購(gòu)物車(chē)、查看購(gòu)物車(chē)和應(yīng)付金額、結(jié)算購(gòu)物車(chē)、退出登錄等功能。
題目三:
在綁定銀行卡和付款時(shí)用socket通信來(lái)傳送數(shù)據(jù)。
綁定銀行卡時(shí),先向銀行門(mén)戶(hù)發(fā)送綁定銀行卡標(biāo)志位表示綁定功能,然后發(fā)送卡號(hào)密碼,驗(yàn)證通過(guò)后返【口I成
功標(biāo)志位,電商平臺(tái)收到后綁定成功。
付款時(shí),先向銀行門(mén)戶(hù)發(fā)送付款標(biāo)志位表示付款功能,,然后發(fā)送卡號(hào)密碼,驗(yàn)證通過(guò)后返回成功標(biāo)忐位,
電商平臺(tái)收到后發(fā)送應(yīng)付金額,銀行門(mén)戶(hù)收到后調(diào)用付款函數(shù),余額缺乏返回余額缺乏標(biāo)志位,余額夠則返回付
款成功標(biāo)志位。
四.源代碼
銀行門(mén)戶(hù)代碼:
#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;
進(jìn)入銀行門(mén)戶(hù)系統(tǒng)2:進(jìn)入監(jiān)聽(tīng)模式,請(qǐng)輸入您的選擇:";
intChoice:
stringSelect;
while(!(cin?Select)11(Select[0]!='1’&&Select[0]!='2'))
cout?"輸入錯(cuò)誤,請(qǐng)重新輸入:”《endl;
cout?endl;
Choice=std::atoi(Select,cstr());
if(Choice==2)
BindO;
while(true){
cout<<endl:
cout?"================歡送來(lái)到銀行門(mén)戶(hù)================="?endl;
cout<<H======================================*<<end1;
cout?"================您想進(jìn)行什么操作?==============="?cndl;
cout?"================1:操作賬戶(hù)===============*?endl;
cout?"===============2:注冊(cè)銀行卡=============="?endl;
cout?"=================3:退出================*?endl;
cout<<"==========================================="?endl?endl;
cout?"請(qǐng)輸入您要進(jìn)行的操作;”;
intselect;
stringSelect;
while(!(cin?Select)11Select[0]<T'11Select[0]>'3')
cout?"輸入錯(cuò)誤,請(qǐng)重新輸入:"?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?〃請(qǐng)選擇你要注冊(cè)的銀行:"?endl;
for(unsignedinti=0;i<vBankN.size();i++){
if(i%4==3)
cout?*<<i?":"?vBankN[i]?endl;
else
cout?"<<i?vBankN[i];
cout<<endl<<”請(qǐng)輸入您的選朽:
unsignedintnum;
wii1e(!(cin>>num)||num<0&&num>=vBankN.sizeO)
cout?endl?"輸入錯(cuò)誤,請(qǐng)重新輸入:”;
cout?end1;
stringbank=vBankN[num];
intcardnum;
strstreamt;
stringcard;
stringpassword;
stringtemp;
stringnnmc;
stringID;
inti;
cout?"姓名:
cin?name;
cout?”身份證號(hào):”;
cin?ID;
srand((int)time(O));
do{
cardnum=1000+(rand()%9000);
t?cardnum;
t?card;
}
wiile(check(card));
do{
cout?”設(shè)置密碼:”;
cin?password;
cout?”再次確認(rèn)密碼:”;
cin?temp;
}
wiile(password!=temp&&cout?end!<<”前后輸入的密碼不司,請(qǐng)重新輸入!"<<endl);
cout<<end1;
bankcardbeard(card,password,bank,name,ID,0.0);
v3ankC.push_back(beard);
cout?”注冊(cè)銀行賬號(hào)成功!"?endl;
cout<<“卡號(hào)為:*?card?endl;
}
voidBankPortal::loginBankCO{
stringcardnum;
stringpassword;
unsignedintnum;
do{
ccut<,請(qǐng)輸入要操作的銀行三號(hào):"<<endl:
cin?cardnum;
}
wnile((num=match(cardnum))>=vBankC.size()&&cout<〈”賬號(hào)輸入錯(cuò)誤!"<<cndl);
wnile(true){
cout?*========================*?vBankC[num].getNameO?”先生/女士=================="?endl;
cout?"====================卡內(nèi)余額共*?vBankC[nun].getRemainder()<<〃RMB================"<<
endl;
cout<<"------------------------------------------------------------"?end1;
cout?"===================請(qǐng)選擇您的操作:================"?endl:
cout?=================l:存款===============*?endl;
cout?"=================2:取款===============*?endl:
cout?"===================3:修改銀行卡密碼================="?endl;
cout?"=================4:返回上一級(jí)菜單==============="?endl;
cout?"==================================================="?endl?endl;
cout?”請(qǐng)選擇您的操作:”;
intselect;
stringSelect;
while(!(cin?Select)11Select[0]<'1'11Select[0]>'4')
coui<<"輸入錯(cuò)誤,請(qǐng)竟新輸入:"?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<<"請(qǐng)輸入您要存入的金額:"<<endl;
cin?money;
v3ankC[num].addRemainder(moneyI;
}
voidBankPorta1::withdraw(intnum)I
doublemoney;
cout<<”請(qǐng)輸入您要取出的金額;*?cndl;
cin?money;
if(vBankC[num].getRemainder()>=money){
vBankC[:)um].subRemainder(money);
)
elsecout<<”對(duì)不起,余額缺乏!"<<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<<“請(qǐng)輸入新密碼:"<<endl;
cin?password;
cout?"再次確認(rèn)新密碼:*?cndl;
cin?temp;
}
wiile(password!=temp&&cout?"前后輸入的密碼不同,請(qǐng)重新輸入!"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){//把字符串轉(zhuǎn)化成double類(lèi)型
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("嵌套字未翻開(kāi)!”);
return;
}
〃創(chuàng)立套接字
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!");
}
//開(kāi)始監(jiān)聽(tīng)
if(listen(slisten,5)==SOCKETERROR)
(
printf("listenerror!”);
return;
}
//循環(huán)接收數(shù)據(jù)
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("接受到一個(gè)連接:%s\r\n”,inet_ntoa(rcmotcAddr.sin_addr));
recv(sClient,receiveChoice,2,0);〃監(jiān)聽(tīng)選擇
choice=(receiveChoice[01-'0');
if(choice==l)
{
charrcceivcCard[5];
charreccivcPassword[30];
recv(sClient,receiveCard,5,0)://接受賬號(hào)密碼
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);〃發(fā)送綁定成功
sprintf(sendBuf,vBankC[index].geiBanknameO.c_str());〃發(fā)送銀行類(lèi)型
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);〃接受賬號(hào)密碼
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);//發(fā)送驗(yàn)證成功
recv(sClient,receiveShouldpay,20,0);
doubIeshouIdpay:
shou1dpay=std::atof(receiveShou1dpay);
if(pay(cardnum,shou1dpay)){
sprintf(sendBuf,"l");
send(sClient,sendBuf,strlen(sendBuf)+1,0);//發(fā)送付款成功
output();
)
else{
cout?”余額缺乏!”:
sprintf(sendBuf,^O*);
send(sClicnt,sendBuf,strlen(sendBuf)+1,0);〃發(fā)送付款成功
)
}
else{
sprintf(sendBuf,"0");
send(sClient,sendBuf,strlen(sendBuf)+1,0);〃發(fā)送驗(yàn)證失敗
}
)
}
closesocket(siisten);
VSACleanupO;
}
電商平臺(tái)代碼:
#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.查看現(xiàn)有商品{1.查看哪一類(lèi)商品(記得顯示產(chǎn)品描述,產(chǎn)品原價(jià),產(chǎn)品剩余量,優(yōu)惠信息)}|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用戶(hù)名:"<<username;
ofs?"密碼:”"password;
ofs?z/手機(jī)號(hào):"<<phonenum;
ofs<<"銀行卡數(shù)量:"<<cardnum<<endl;
//ofs?*購(gòu)物車(chē):”;
//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名稱(chēng):"<<name;
c「s<<"描述:"〈〈dcscription;
ofs?"原價(jià):"<<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。{〃登錄前,登錄注冊(cè)退出
initO;
wiile(true){
cout?endl;
cout?〃=============歡送來(lái)到MY電商平臺(tái)==============="?endl;
cout?*=================================================="?endl;
cout?"==============?您想進(jìn)行什么操作?=============="?endl:
cout?"===============1:登錄賬號(hào)==============="?endl;
cout?"================2:注冊(cè)賬號(hào)=============="?endl;
cout?"===============3:退出==============*?endl;
cout?*==================================================*?endl?endl;
cout?”請(qǐng)輸入您要進(jìn)行的操作:";
intselect;
stringSelect;
while(!(cin?Select)11Select[0]<'1'11Select[0]>'3')
coui<<"輸入錯(cuò)誤,請(qǐng)新輸入:"?endl:
cout?endl;
select=std::atoi(Select,cstr());
switch(select.)
case1:
if(!loginAccount())
cout<〈”輸入密碼超次數(shù)限制!"<<endl;
break:
case2:
registerAccount();
break;
case3:
output():
return;
default:
break;
)
)
}
doublePlatform::StrToDouble(stringstr,intstart,intend){〃把字符串轉(zhuǎn)化成double類(lèi)型
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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 靜脈治療知識(shí)考試題及解析
- 房地產(chǎn)經(jīng)紀(jì)人培訓(xùn)題及答案參考
- 網(wǎng)絡(luò)安全行業(yè)解決方案顧問(wèn)面試題
- 建筑設(shè)計(jì)師招聘面試題集及答案詳解
- 2025年智能化社區(qū)服務(wù)中心建設(shè)項(xiàng)目可行性研究報(bào)告
- 2025年城市社區(qū)綜合服務(wù)平臺(tái)建設(shè)項(xiàng)目可行性研究報(bào)告
- 2025年在線(xiàn)新零售平臺(tái)項(xiàng)目可行性研究報(bào)告
- 2025年低碳生活示范社區(qū)建設(shè)項(xiàng)目可行性研究報(bào)告
- 2025年?yáng)|南沿海海洋牧場(chǎng)項(xiàng)目可行性研究報(bào)告
- 2026年資陽(yáng)口腔職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性考試題庫(kù)含答案詳解
- 全域土地綜合整治項(xiàng)目社會(huì)穩(wěn)定風(fēng)險(xiǎn)評(píng)估報(bào)告
- 2024-2025學(xué)年廣東省深圳市福田區(qū)七年級(jí)(上)期末英語(yǔ)試卷
- 《證券投資學(xué)》吳曉求課后習(xí)題答案
- 消防員心理測(cè)試題目及答案大全2025
- 住院醫(yī)師規(guī)范化培訓(xùn)急診科模擬試題及答案
- 2025國(guó)考國(guó)資委申論高分筆記
- 2025年高級(jí)經(jīng)濟(jì)師《人力資源》考試真題及答案
- 礦山項(xiàng)目經(jīng)理崗位職責(zé)與考核標(biāo)準(zhǔn)
- 2025年鄉(xiāng)村旅游民宿業(yè)發(fā)展現(xiàn)狀與前景可行性研究報(bào)告
- 國(guó)家安全生產(chǎn)公眾號(hào)
- 2025年中國(guó)多深度土壤水分傳感器行業(yè)市場(chǎng)全景分析及前景機(jī)遇研判報(bào)告
評(píng)論
0/150
提交評(píng)論