C++電商交易平臺(tái)設(shè)計(jì)_第1頁(yè)
C++電商交易平臺(tái)設(shè)計(jì)_第2頁(yè)
C++電商交易平臺(tái)設(shè)計(jì)_第3頁(yè)
C++電商交易平臺(tái)設(shè)計(jì)_第4頁(yè)
C++電商交易平臺(tái)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論