C语言编写“超市结账系统”急急急!!!

Python018

C语言编写“超市结账系统”急急急!!!,第1张

#include

<stdio.h>

#include

<fstream>

#include

<iostream>

#include

<string>

#include

<vector>

#include

<assert.h>

using

namespace

std

//

Item

info

base

class

class

ItemInfo{

public:

ItemInfo(){}

ItemInfo(string

barcode,

string

name,

float

price)

{

this->barcode

=

barcode

this->name

=

name

this->price

=

price

}

ItemInfo(string

barcode)

{

this->barcode

=

barcode

}

void

Display()

{

cout

<<

barcode

<<"\t"<<name<<"\t"<<price<<

endl

}

void

Input()

{

cout

<<

"输入条形码:"

<<

endl

cin

>>

barcode

cout

<<

"输入名称:"

<<

endl

cin

>>

name

cout

<<

"输入价格:"

<<

endl

cin

>>

price

}

void

Modify()

{

cout

<<

"输入名称:"

<<

endl

cin

>>

name

cout

<<

"输入价格:"

<<

endl

cin

>>

price

}

friend

ostream&

operator<<(ostream&

stream,

ItemInfo&

item){

stream

<<

item.barcode

<<'\t'<<

item.price

<<'\t'<<

item.name<<endl

return

stream

}

friend

istream&

operator>>(istream&

stream,

ItemInfo&

item){

stream

>>

item.barcode

>>

item.price

>>

item.name

return

stream

}

public:

string

barcode

string

name

float

price

}

//

Interface

class

class

DataProvider{

public:

virtual

void

GetFullData(string

barcode,

string&

name,

float&

price)

=

0

}

//

Purchase

item

class

class

ItemPurchaseInfo

:

public

ItemInfo{

public:

ItemPurchaseInfo():ItemInfo(){}

ItemPurchaseInfo(string

barcode,

int

count=1)

:

ItemInfo(barcode)

{

this->count

=

count

}

//

Rember

to

call

this

when

barcode

set

void

GetFullData(DataProvider&

aPro)

{

aPro.GetFullData(barcode,

name,

price)

}

void

Input()

{

cout

<<

"输入条形码:"

<<

endl

cin

>>

barcode

cout

<<

"输入数量:"

<<

endl

cin

>>

count

}

void

Display()

{

cout

<<

barcode

<<"\t"<<name<<"\t"<<price<<"\t"<<count<<

endl

}

public:

string

barcode

int

count

}

//

Item

list

class

class

ItemList

{

public:

ItemList(){items.clear()}

friend

ostream&

operator<<(ostream&

stream,

ItemList&

list){

unsigned

int

count

=

list.items.size()

stream

<<count<<endl

for(unsigned

int

i(0)i<counti++)

stream<<

list.items.at(i)

return

stream

}

friend

istream&

operator>>(istream&

stream,

ItemList&

list){

unsigned

int

count(0)

stream

>>count

list.items.clear()

for(unsigned

int

i(0)i<counti++){

ItemInfo

item

stream

>>

item

list.items.insert(list.items.end(),

item)

}

return

stream

}

void

Add(ItemInfo

item)

{

items.insert(items.end(),

item)

}

void

Modify()

{

string

barcode

cout

<<

"输入条形码:"

<<

endl

cin

>>

barcode

for(unsigned

int

i(0)i<items.size()i++)

{

if(items.at(i).barcode

==

barcode

)

{

items.at(i).Modify()

}

}

}

public:

vector<ItemInfo>

items

}

//

Purchase

item

list

class

class

PurchaseItemList

{

public:

PurchaseItemList(){items.clear()}

void

Add(ItemPurchaseInfo

item)

{items.insert(items.end(),

item)}

public:

vector<ItemPurchaseInfo>

items

}

//

Implements

the

interface

class

class

Cashier

:

public

DataProvider

{

public:

Cashier()

:

purchase(),

stock(){}

~Cashier(){}

public:

//

User

funcs

void

CheckIn(){

purchase.items.clear()

int

opt(0)

do

{

unsigned

int

i(0)

ItemPurchaseInfo

ipi

ipi.Input()

purchase.Add(ipi)

cout

<<

"按0退出,任意键继续"

<<

endl

cin

>>

opt

}

while(opt)

}

void

CheckOut(){

for(unsigned

int

i(0)

i

<

purchase.items.size()

i++)

{

purchase.items.at(i).GetFullData(

*this

)

}

float

checkin(0)

cout

<<

"输入收款数:"

<<

endl

cin

>>

checkin

DisplayList(checkin)

}

void

Display()

{

cout

<<

endl<<"商品清单

"<<

stock.items.size()

<<

endl

cout

<<"--------------------------------------"

<<

endl

for(unsigned

int

i(0)i<

stock.items.size()

i++){

stock.items.at(i).Display()

}

cout

<<"--------------------------------------"

<<

endl

}

void

DisplayList(float

checkin)

{

cout

<<

endl<<"购物小票清单"

<<

endl

cout

<<"--------------------------------------"

<<

endl

float

total(0.0)

for(unsigned

int

i(0)

i

<

purchase.items.size()

i++)

{

purchase.items.at(i).Display()

total

+=

purchase.items.at(i).price

*

purchase.items.at(i).count

}

cout

<<"--------------------------------------"

<<

endl

cout

<<"货款合计:"<<

total

<<

"元"

<<

endl

cout

<<"收款数:"<<

checkin

<<

"元"

<<

endl

float

change(checkin-total)

assert(

change

>=

0.0)

cout

<<"找零:"<<

change

<<

"元"

<<

endl<<

endl

}

friend

ostream&

operator<<(ostream&

stream,

Cashier&

c){

stream

<<

c.stock

return

stream

}

friend

istream&

operator>>(istream&

stream,

Cashier&

c){

c.stock.items.clear()

stream

>>

c.stock

return

stream

}

public:

//

interface

func

void

GetFullData(string

barcode,

string&

name,

float&price)

{

//

go

through

stock

and

find

the

item

by

barcode

matching

for(unsigned

int

i(0)

i

<

stock.items.size()

i++)

{

if(stock.items.at(i).barcode

==

barcode)

{

name

=

stock.items.at(i).name

price

=

stock.items.at(i).price

}

}

}

public:

PurchaseItemList

purchase

ItemList

stock

}

int

main()

{

int

opt(0)

Cashier

cashier

ifstream

fin("data.bin",

ios::in

|

ios::binary)

fin.seekg(0,

ios::beg)

//cashier.stock.Load(fin)

fin

>>

cashier

fin.close()

ofstream

fout

ItemInfo

item

do{

cout

<<

"1.

新购买"

<<

endl

cout

<<

"2.

输入新商品信息"

<<

endl

cout

<<

"3.

修改商品信息"

<<

endl

cout

<<

"4.

显示商品信息"

<<

endl

cout

<<

"0.

退出"

<<

endl

cin

>>

opt

switch(opt)

{

case

1:

cashier.CheckIn()

cashier.CheckOut()

break

case

2:

item.Input()

cashier.stock.Add(item)

fout.open("data.bin",

ios::out|

ios::binary)

fout.seekp(0,ios::beg)

fout

<<

cashier

fout.close()

break

case

3:

cashier.stock.Modify()

fout.open("data.bin",

ios::out|

ios::app

|

ios::binary)

fout

<<

cashier

fout.close()

break

case

4:

cashier.Display()

break

default:

break

}

}

while(opt)

return

0

}

因为C++兼容C语言的,所以在VisualStudio2010新建一个C++项目就可以实现编写一个C语言程序方法如下:1、电脑上安装微软公司的VS2010,可以从dreamspark上下载正版或通过其他途径获得,安装即可。2、打开VS20103、可以通过点击文件--新建--项目建立工程或者点击欢迎页的“新建项目”建立工程。4、弹出对话框,勾选“空项目”建立工程,工程名可任意填英文字符,如project1,其他不用填。5、建立工程后,在右侧有一个“解决方案资源管理器”,找到源文件,右击,再左击添加--新建项--C++文件,这样就在工程project1下建立了一个源文件,名称比如为源.cpp,就可以编辑代码了。如果你已经用其他字符编辑软件写好了C++源程序,也可以右击源文件,左击--现有项,在文件夹中找到你的源程序添加到工程下。6、编辑好了源文件,就可以运行或调试了,初学者是写简单的程序,所以只用一个源文件就行了。点击调试--开始运行(不调试)就直接编译运行,有错误的话系统会提示。7、如果要调试,可以点击调试--逐语句(F10)或逐过程(F11)8、调试前点击调试--窗口(也就是watch)可以选择不同的显示结果,可以显示出变量的变化过程,方便调试。点击“继续”结束调试。