<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=SuperMarket%2F%EC%9D%B8%EC%88%98</id>
	<title>SuperMarket/인수 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=SuperMarket%2F%EC%9D%B8%EC%88%98"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=SuperMarket/%EC%9D%B8%EC%88%98&amp;action=history"/>
	<updated>2026-05-14T22:46:52Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=SuperMarket/%EC%9D%B8%EC%88%98&amp;diff=39493&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:28, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=SuperMarket/%EC%9D%B8%EC%88%98&amp;diff=39493&amp;oldid=prev"/>
		<updated>2021-02-07T05:28:09Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt; // 캬오옷.. 졸라 심심하다 ㅠ.ㅠ 학교 와서 노닥거리다가 걍 해봤음. 파서 만드는데 80프로 이상의 시간을..--;&lt;br /&gt;
 // 대강의 예외처리도 된거 같고.. 고칠거 있음 말해주길&lt;br /&gt;
 // DeleteMe 헉 이 미완의 컬러링 비밀 기능을 .. 어떻게 알고.. &lt;br /&gt;
 &lt;br /&gt;
 // 문제의 코드 부분&lt;br /&gt;
 // 아래로 이어지는 if/else-if는 코드 중복이라고 봅니다. 이걸 어떻게 제거할 수 있을까요? Command Pattern? Polymorphism? 혹은 그냥 Table Lookup? --JuNe&lt;br /&gt;
 &lt;br /&gt;
 		if(command == &amp;quot;help&amp;quot;)&lt;br /&gt;
 		{&lt;br /&gt;
 			Helper::showCommand();			&lt;br /&gt;
 		}&lt;br /&gt;
 		else if(command == &amp;quot;mymoney&amp;quot;)&lt;br /&gt;
 		{&lt;br /&gt;
 			cout &amp;amp;lt;&amp;amp;lt; sm.getRestMoney() &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 		}&lt;br /&gt;
 		else if(command == &amp;quot;inventory&amp;quot;)&lt;br /&gt;
 		{&lt;br /&gt;
 			user.showBuyedGoods();&lt;br /&gt;
 		}&lt;br /&gt;
 		else if(command == &amp;quot;ask&amp;quot;)&lt;br /&gt;
 		{&lt;br /&gt;
 			string good(&amp;amp;amp;str[token+1], &amp;amp;amp;str[str.size()]);&lt;br /&gt;
 			sm.answerCost(good);&lt;br /&gt;
 		}&lt;br /&gt;
 		else if(command == &amp;quot;deposit&amp;quot;)&lt;br /&gt;
 		{&lt;br /&gt;
 			string m(&amp;amp;amp;str[token+1], &amp;amp;amp;str[str.size()]);&lt;br /&gt;
 			int money = StringConvertToInt(m);&lt;br /&gt;
 			user.depositMoney(sm, money);&lt;br /&gt;
 		}&lt;br /&gt;
 		else if(command == &amp;quot;exit&amp;quot;)&lt;br /&gt;
 		{&lt;br /&gt;
 			exit(0);&lt;br /&gt;
 		}&lt;br /&gt;
 		else if(command == &amp;quot;menu&amp;quot;)&lt;br /&gt;
 		{&lt;br /&gt;
 			sm.showMenu();&lt;br /&gt;
 		}&lt;br /&gt;
 		else if(command == &amp;quot;buy&amp;quot;)&lt;br /&gt;
 		{&lt;br /&gt;
 			int token2 = getToken(str,2);&lt;br /&gt;
 			string good(&amp;amp;amp;str[token+1], &amp;amp;amp;str[token2]);&lt;br /&gt;
 			&lt;br /&gt;
 			string cnt(&amp;amp;amp;str[token2+1], &amp;amp;amp;str[str.size()]);&lt;br /&gt;
 			int count = StringConvertToInt(cnt);&lt;br /&gt;
 			&lt;br /&gt;
 			user.buyGoods(sm, sm.findGoods(good), count);&lt;br /&gt;
 		}&lt;br /&gt;
 		else if(command == &amp;quot;cancel&amp;quot;)&lt;br /&gt;
 		{&lt;br /&gt;
 			int token2 = getToken(str,2);&lt;br /&gt;
 			string good(&amp;amp;amp;str[token+1], &amp;amp;amp;str[token2]);&lt;br /&gt;
 			&lt;br /&gt;
 			string cnt(&amp;amp;amp;str[token2+1], &amp;amp;amp;str[str.size()]);&lt;br /&gt;
 			int count = StringConvertToInt(cnt);&lt;br /&gt;
 			&lt;br /&gt;
 			user.cancleGoods(sm, sm.findGoods(good), count);&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 // 어떻게 하면 if/else if 중복을 없앨수 있을까 고민하다가 폴리모피즘을 이용하기로 했습니다.(근데 이거 폴리모피즘이 맞나?--;) &lt;br /&gt;
 // map&amp;amp;lt;string, Cmd*&amp;amp;gt; 이런식으로 string에는 커맨드를,Cmd 클래스는 HelpCmd클래스, Deposit클래스 등등의 부모 클래스, 즉 명령 클래스들의 &lt;br /&gt;
 // 조상 클래스를 포인터로 넣어줬습니다. 동적 바인딩을 하기 위해서..--; Parser생성할때 map 테이블에다 명령들을 넣어주면서 그 명령에 &lt;br /&gt;
 // 해당하는 클래스를 동적 할당해주면서 넣었습니다. 소멸자에서는 해제하는 것도 잊지 않았구요. 나름대로 상당히 고민을 했지만..--; &lt;br /&gt;
 // 이것밖엔 답이 안나오네요.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 // 그래서 나름대로 고쳐본 것&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;amp;lt;iostream&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;vector&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;cassert&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;map&amp;amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 &lt;br /&gt;
 class SuperMarket;&lt;br /&gt;
 class User;&lt;br /&gt;
 class Parser;&lt;br /&gt;
 class Helper;&lt;br /&gt;
 class Goods;&lt;br /&gt;
 class Packages;&lt;br /&gt;
 class Cmd;&lt;br /&gt;
 &lt;br /&gt;
 class Goods&lt;br /&gt;
 {&lt;br /&gt;
 private :&lt;br /&gt;
 	string _name;&lt;br /&gt;
 	int _cost;&lt;br /&gt;
 public :&lt;br /&gt;
 	Goods(const string&amp;amp;amp; name, int cost) : _name(name), _cost(cost) {}&lt;br /&gt;
 &lt;br /&gt;
 	const string&amp;amp;amp; getName() const&lt;br /&gt;
 	{&lt;br /&gt;
 		return _name;&lt;br /&gt;
 	}&lt;br /&gt;
 	int getCost() const&lt;br /&gt;
 	{&lt;br /&gt;
 		return _cost;&lt;br /&gt;
 	}&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class Packages&lt;br /&gt;
 {&lt;br /&gt;
 private :&lt;br /&gt;
 	Goods _good;&lt;br /&gt;
 	int _count;&lt;br /&gt;
 public :&lt;br /&gt;
 	Packages(const Goods&amp;amp;amp; good, int count) : _good(good), _count(count) {}&lt;br /&gt;
 	&lt;br /&gt;
 	const Goods&amp;amp;amp; getGoods() const&lt;br /&gt;
 	{&lt;br /&gt;
 		return _good;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	int getCount() const&lt;br /&gt;
 	{&lt;br /&gt;
 		return _count;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	void setCount(int n)&lt;br /&gt;
 	{&lt;br /&gt;
 		_count = n;&lt;br /&gt;
 	}&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class SuperMarket&lt;br /&gt;
 {&lt;br /&gt;
 private :&lt;br /&gt;
 	int _receivedMoney;&lt;br /&gt;
 	vector&amp;amp;lt;Goods&amp;amp;gt; _havingGoods;&lt;br /&gt;
 public :&lt;br /&gt;
 	SuperMarket()&lt;br /&gt;
 	{&lt;br /&gt;
 		Goods g1(&amp;quot;candy&amp;quot;,1000);&lt;br /&gt;
 		_havingGoods.push_back(g1);&lt;br /&gt;
 		Goods g2(&amp;quot;diskette&amp;quot;,1200);&lt;br /&gt;
 		_havingGoods.push_back(g2);&lt;br /&gt;
 		Goods g3(&amp;quot;mouse&amp;quot;,5000);&lt;br /&gt;
 		_havingGoods.push_back(g3);&lt;br /&gt;
 		_receivedMoney = 0;&lt;br /&gt;
 	}&lt;br /&gt;
 	void receiveMoney(int money)&lt;br /&gt;
 	{&lt;br /&gt;
 		_receivedMoney = money;&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; &amp;quot;OK&amp;quot; &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 	}&lt;br /&gt;
 	void showMenu() const&lt;br /&gt;
 	{&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; &amp;quot; 메뉴 &amp;quot; &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 		for(int i = 0 ; i &amp;amp;lt; _havingGoods.size() ; ++i)&lt;br /&gt;
 		{&lt;br /&gt;
 			cout &amp;amp;lt;&amp;amp;lt; _havingGoods[i].getName() &amp;amp;lt;&amp;amp;lt; &amp;quot; &amp;quot; &amp;amp;lt;&amp;amp;lt; _havingGoods[i].getCost() &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	void sellGoods(const Goods&amp;amp;amp; goods, int count) &lt;br /&gt;
 	{&lt;br /&gt;
 		_receivedMoney -= goods.getCost() * count;&lt;br /&gt;
 	}&lt;br /&gt;
 	int getRestMoney() const&lt;br /&gt;
 	{&lt;br /&gt;
 		return _receivedMoney;&lt;br /&gt;
 	}&lt;br /&gt;
 	const vector&amp;amp;lt;Goods&amp;amp;gt;&amp;amp;amp; getGoods() const&lt;br /&gt;
 	{&lt;br /&gt;
 		return _havingGoods;&lt;br /&gt;
 	}&lt;br /&gt;
 	void answerCost(const string&amp;amp;amp; goodsName) const&lt;br /&gt;
 	{&lt;br /&gt;
 		bool isFind = false;&lt;br /&gt;
 		for(int i = 0 ; i &amp;amp;lt; _havingGoods.size() ; ++i)&lt;br /&gt;
 		{&lt;br /&gt;
 			if(_havingGoods[i].getName() == goodsName)&lt;br /&gt;
 			{&lt;br /&gt;
 				cout &amp;amp;lt;&amp;amp;lt; _havingGoods[i].getCost() &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 				isFind = true;&lt;br /&gt;
 				break;&lt;br /&gt;
 			}&lt;br /&gt;
 		}		&lt;br /&gt;
 		if(!isFind)&lt;br /&gt;
 		{&lt;br /&gt;
 			cout &amp;amp;lt;&amp;amp;lt; &amp;quot;그런 물건 없음!&amp;quot; &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	const Goods&amp;amp;amp; findGoods(const string&amp;amp;amp; goodsName) const&lt;br /&gt;
 	{&lt;br /&gt;
 		for(int i = 0 ; i &amp;amp;lt; _havingGoods.size() ; ++i)&lt;br /&gt;
 		{&lt;br /&gt;
 			if(_havingGoods[i].getName() == goodsName)&lt;br /&gt;
 			{&lt;br /&gt;
 				return _havingGoods[i];&lt;br /&gt;
 			}&lt;br /&gt;
 		}				&lt;br /&gt;
 	}&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class User&lt;br /&gt;
 {&lt;br /&gt;
 private :&lt;br /&gt;
 	vector&amp;amp;lt;Packages&amp;amp;gt; _buyedGoods;&lt;br /&gt;
 public :&lt;br /&gt;
 	void depositMoney(SuperMarket&amp;amp;amp; sm, int money) const&lt;br /&gt;
 	{&lt;br /&gt;
 		sm.receiveMoney(money);&lt;br /&gt;
 	}&lt;br /&gt;
 	void showBuyedGoods()&lt;br /&gt;
 	{&lt;br /&gt;
 		if(_buyedGoods.size() == 0)&lt;br /&gt;
 			cout &amp;amp;lt;&amp;amp;lt; &amp;quot;None&amp;quot; &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 		else&lt;br /&gt;
 		{&lt;br /&gt;
 			for(int i = 0 ; i &amp;amp;lt; _buyedGoods.size() ; ++i)&lt;br /&gt;
 			{&lt;br /&gt;
 				cout &amp;amp;lt;&amp;amp;lt; _buyedGoods[i].getGoods().getName() &amp;amp;lt;&amp;amp;lt; &amp;quot; &amp;quot; &amp;amp;lt;&amp;amp;lt; _buyedGoods[i].getCount() &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	void buyGoods(SuperMarket&amp;amp;amp; sm, const Goods&amp;amp;amp; goods, int count)&lt;br /&gt;
 	{&lt;br /&gt;
 		if(sm.getRestMoney() &amp;amp;lt; goods.getCost() * count)&lt;br /&gt;
 			cout &amp;amp;lt;&amp;amp;lt; &amp;quot;can&amp;#039;t buy&amp;quot; &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 		else&lt;br /&gt;
 		{&lt;br /&gt;
 			sm.sellGoods(goods, count);&lt;br /&gt;
 			Packages p(goods, count);&lt;br /&gt;
 			_buyedGoods.push_back(p);&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	void cancleGoods(SuperMarket&amp;amp;amp; sm, const Goods&amp;amp;amp; goods, int count)&lt;br /&gt;
 	{&lt;br /&gt;
 		bool isFind = false;		&lt;br /&gt;
 		int nth = 0;&lt;br /&gt;
 		for(int i = 0 ; i &amp;amp;lt; _buyedGoods.size() ; ++i)&lt;br /&gt;
 		{&lt;br /&gt;
 			if(goods.getName() == _buyedGoods[i].getGoods().getName())&lt;br /&gt;
 			{&lt;br /&gt;
 				isFind = true;&lt;br /&gt;
 				nth = i;&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 		if(!isFind)&lt;br /&gt;
 			cout &amp;amp;lt;&amp;amp;lt; &amp;quot;그 물건 안샀어요.&amp;quot; &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 		else&lt;br /&gt;
 		{&lt;br /&gt;
 			if(_buyedGoods[nth].getCount() &amp;amp;lt; count)&lt;br /&gt;
 			{&lt;br /&gt;
 				cout &amp;amp;lt;&amp;amp;lt; &amp;quot;산 것보다 더 많이 취소 못합니다.&amp;quot; &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 			}&lt;br /&gt;
 			else if(_buyedGoods[nth].getCount() == count)&lt;br /&gt;
 			{&lt;br /&gt;
 				if(_buyedGoods[nth].getCount() == 0)&lt;br /&gt;
 				{&lt;br /&gt;
 					_buyedGoods.erase(_buyedGoods.begin() + nth);&lt;br /&gt;
 				}&lt;br /&gt;
 			}&lt;br /&gt;
 			else&lt;br /&gt;
 			{&lt;br /&gt;
 				_buyedGoods[nth].setCount( _buyedGoods[nth].getCount() - count );&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class Helper&lt;br /&gt;
 {&lt;br /&gt;
 public :&lt;br /&gt;
 	static void showCommand()&lt;br /&gt;
 	{&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; &amp;quot;* deposit &amp;amp;lt;money&amp;amp;gt; -- 돈을 money만큼 예금한다. &amp;quot; &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; &amp;quot;* mymoney -- 남은 돈을 보여준다.&amp;quot; &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; &amp;quot;* buy &amp;amp;lt;product&amp;amp;gt; &amp;amp;lt;count&amp;amp;gt; -- product 물건을 count 만큼 산다.&amp;quot; &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; &amp;quot;* inventory -- 산 물건의 목록을 보여준다 .&amp;quot; &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; &amp;quot;* cancel &amp;amp;lt;product&amp;amp;gt; &amp;amp;lt;count&amp;amp;gt; -- 산 product 물건을 count개만큼 취소한다 .&amp;quot; &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; &amp;quot;* ask &amp;amp;lt;product&amp;amp;gt; -- procuct 물건의 가격을 묻는다 .&amp;quot; &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; &amp;quot;* menu -- 구매 가능한 물건의 목록을 보여준다 .&amp;quot; &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; &amp;quot;* exit -- 가게를 나간다 .&amp;quot; &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 	}&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class Cmd&lt;br /&gt;
 {&lt;br /&gt;
 public :&lt;br /&gt;
 	virtual void executeCommand(SuperMarket&amp;amp;amp; sm, User&amp;amp;amp; user, const string&amp;amp;amp; str) = 0;&lt;br /&gt;
 	static int getToken(const string&amp;amp;amp; str, int nth) &lt;br /&gt;
 	{&lt;br /&gt;
 		int ret = str.size();&lt;br /&gt;
 		int count = 0;&lt;br /&gt;
 		for(int i = 0 ; i &amp;amp;lt; str.size() ; ++i)&lt;br /&gt;
 		{&lt;br /&gt;
 			if(str[i] == &amp;#039; &amp;#039;)&lt;br /&gt;
 			{&lt;br /&gt;
 				ret = i;&lt;br /&gt;
 				++count;&lt;br /&gt;
 				if(count == nth)&lt;br /&gt;
 					return ret;&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 		return ret;&lt;br /&gt;
 	}&lt;br /&gt;
 	int StringConvertToInt(string&amp;amp;amp; str) &lt;br /&gt;
 	{ &lt;br /&gt;
 		int ret = 0; &lt;br /&gt;
 		for(int i = 0 ; i &amp;amp;lt; str.length() ; ++i) &lt;br /&gt;
 		{ &lt;br /&gt;
 			ret += CharToInt(str[i]) * Power(10,(str.length() - i)); &lt;br /&gt;
 		} &lt;br /&gt;
 		return ret; &lt;br /&gt;
 	} &lt;br /&gt;
  &lt;br /&gt;
 	int CharToInt(char ch) &lt;br /&gt;
 	{ &lt;br /&gt;
 		return ch - 48; &lt;br /&gt;
 	} &lt;br /&gt;
  &lt;br /&gt;
 	int Power(int c, int e) &lt;br /&gt;
 	{ &lt;br /&gt;
 		int ret = 1; &lt;br /&gt;
 		for(int i = 0 ; i &amp;amp;lt; e - 1 ; ++i) &lt;br /&gt;
 		{ &lt;br /&gt;
 			ret *= c; &lt;br /&gt;
 		} &lt;br /&gt;
 		return ret; &lt;br /&gt;
 	} &lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class HelpCmd : public Cmd&lt;br /&gt;
 {&lt;br /&gt;
 public :&lt;br /&gt;
 	void executeCommand(SuperMarket&amp;amp;amp; sm, User&amp;amp;amp; user, const string&amp;amp;amp; str)&lt;br /&gt;
 	{&lt;br /&gt;
 		Helper::showCommand();&lt;br /&gt;
 	}&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class MyMoneyCmd : public Cmd&lt;br /&gt;
 {&lt;br /&gt;
 public :&lt;br /&gt;
 	void executeCommand(SuperMarket&amp;amp;amp; sm, User&amp;amp;amp; user, const string&amp;amp;amp; str)&lt;br /&gt;
 	{&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; sm.getRestMoney() &amp;amp;lt;&amp;amp;lt; endl;				&lt;br /&gt;
 	}&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class InventoryCmd : public Cmd&lt;br /&gt;
 {&lt;br /&gt;
 public :&lt;br /&gt;
 	void executeCommand(SuperMarket&amp;amp;amp; sm, User&amp;amp;amp; user, const string&amp;amp;amp; str)&lt;br /&gt;
 	{&lt;br /&gt;
 		user.showBuyedGoods();&lt;br /&gt;
 	}&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class AskCmd : public Cmd&lt;br /&gt;
 {&lt;br /&gt;
 public :&lt;br /&gt;
 	void executeCommand(SuperMarket&amp;amp;amp; sm, User&amp;amp;amp; user, const string&amp;amp;amp; str)&lt;br /&gt;
 	{&lt;br /&gt;
 		int token = getToken(str, 1);&lt;br /&gt;
 		string good(&amp;amp;amp;str[token+1], &amp;amp;amp;str[str.size()]);&lt;br /&gt;
 		sm.answerCost(good);		&lt;br /&gt;
 	}&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class DepositCmd : public Cmd&lt;br /&gt;
 {&lt;br /&gt;
 public :&lt;br /&gt;
 	void executeCommand(SuperMarket&amp;amp;amp; sm, User&amp;amp;amp; user, const string&amp;amp;amp; str)&lt;br /&gt;
 	{&lt;br /&gt;
 		int token = getToken(str, 1);&lt;br /&gt;
 		string m(&amp;amp;amp;str[token+1], &amp;amp;amp;str[str.size()]);&lt;br /&gt;
 		int money = StringConvertToInt(m);&lt;br /&gt;
 		user.depositMoney(sm, money);		&lt;br /&gt;
 	}&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class ExitCmd : public Cmd&lt;br /&gt;
 {&lt;br /&gt;
 public :&lt;br /&gt;
 	void executeCommand(SuperMarket&amp;amp;amp; sm, User&amp;amp;amp; user, const string&amp;amp;amp; str)&lt;br /&gt;
 	{&lt;br /&gt;
 		exit(0);	&lt;br /&gt;
 	}&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class MenuCmd : public Cmd&lt;br /&gt;
 {&lt;br /&gt;
 public :&lt;br /&gt;
 	void executeCommand(SuperMarket&amp;amp;amp; sm, User&amp;amp;amp; user, const string&amp;amp;amp; str)&lt;br /&gt;
 	{&lt;br /&gt;
 		sm.showMenu();&lt;br /&gt;
 	}&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class BuyCmd : public Cmd&lt;br /&gt;
 {&lt;br /&gt;
 public :&lt;br /&gt;
 	void executeCommand(SuperMarket&amp;amp;amp; sm, User&amp;amp;amp; user, const string&amp;amp;amp; str)&lt;br /&gt;
 	{&lt;br /&gt;
 		int token = getToken(str,1);&lt;br /&gt;
 		int token2 = getToken(str,2);&lt;br /&gt;
 		string good(&amp;amp;amp;str[token+1], &amp;amp;amp;str[token2]);&lt;br /&gt;
 		&lt;br /&gt;
 		string cnt(&amp;amp;amp;str[token2+1], &amp;amp;amp;str[str.size()]);&lt;br /&gt;
 		int count = StringConvertToInt(cnt);&lt;br /&gt;
 		&lt;br /&gt;
 		user.buyGoods(sm, sm.findGoods(good), count);&lt;br /&gt;
 	}&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class CancleCmd : public Cmd&lt;br /&gt;
 {&lt;br /&gt;
 public :&lt;br /&gt;
 	void executeCommand(SuperMarket&amp;amp;amp; sm, User&amp;amp;amp; user, const string&amp;amp;amp; str)&lt;br /&gt;
 	{&lt;br /&gt;
 		int token = getToken(str,1);&lt;br /&gt;
 		int token2 = getToken(str,2);&lt;br /&gt;
 		string good(&amp;amp;amp;str[token+1], &amp;amp;amp;str[token2]);&lt;br /&gt;
 		&lt;br /&gt;
 		string cnt(&amp;amp;amp;str[token2+1], &amp;amp;amp;str[str.size()]);&lt;br /&gt;
 		int count = StringConvertToInt(cnt);&lt;br /&gt;
 		&lt;br /&gt;
 		user.cancleGoods(sm, sm.findGoods(good), count);	&lt;br /&gt;
 	}&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class Parser&lt;br /&gt;
 {&lt;br /&gt;
 private :&lt;br /&gt;
 	map&amp;amp;lt;string, Cmd*&amp;amp;gt; _tableCmd;&lt;br /&gt;
 public :&lt;br /&gt;
 	Parser()&lt;br /&gt;
 	{&lt;br /&gt;
 		_tableCmd[&amp;quot;help&amp;quot;] = new HelpCmd();&lt;br /&gt;
 		_tableCmd[&amp;quot;mymoney&amp;quot;] = new MyMoneyCmd();&lt;br /&gt;
 		_tableCmd[&amp;quot;inventory&amp;quot;] = new InventoryCmd();&lt;br /&gt;
 		_tableCmd[&amp;quot;ask&amp;quot;] = new AskCmd();&lt;br /&gt;
 		_tableCmd[&amp;quot;deposit&amp;quot;] = new DepositCmd();&lt;br /&gt;
 		_tableCmd[&amp;quot;exit&amp;quot;] = new ExitCmd();&lt;br /&gt;
 		_tableCmd[&amp;quot;menu&amp;quot;] = new MenuCmd();&lt;br /&gt;
 		_tableCmd[&amp;quot;buy&amp;quot;] = new BuyCmd();&lt;br /&gt;
 		_tableCmd[&amp;quot;cancle&amp;quot;] = new CancleCmd();&lt;br /&gt;
 	}&lt;br /&gt;
 	void translateCommand(SuperMarket&amp;amp;amp; sm, User&amp;amp;amp; user, const string&amp;amp;amp; str) &lt;br /&gt;
 	{&lt;br /&gt;
 		int token = Cmd::getToken(str,1);&lt;br /&gt;
 		string command(&amp;amp;amp;str[0], &amp;amp;amp;str[token]);&lt;br /&gt;
 &lt;br /&gt;
 		_tableCmd[command]-&amp;amp;gt;executeCommand(sm, user, str);		&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	virtual ~Parser()&lt;br /&gt;
 	{&lt;br /&gt;
 		map&amp;amp;lt;string, Cmd*&amp;amp;gt; :: iterator i;&lt;br /&gt;
 		for(i = _tableCmd.begin() ; i != _tableCmd.end() ; ++i)&lt;br /&gt;
 		{&lt;br /&gt;
 			delete &amp;amp;amp;(i-&amp;amp;gt;second);&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
 	User user;&lt;br /&gt;
 	SuperMarket superMarket;&lt;br /&gt;
 	Parser parser;&lt;br /&gt;
 &lt;br /&gt;
 	char command[30];&lt;br /&gt;
 	&lt;br /&gt;
 	while(1)&lt;br /&gt;
 	{&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; endl &amp;amp;lt;&amp;amp;lt; &amp;quot;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt; &amp;quot; ;&lt;br /&gt;
 		cin.getline(command, 30);		&lt;br /&gt;
 &lt;br /&gt;
 		parser.translateCommand(superMarket, user, command);&lt;br /&gt;
 	}&lt;br /&gt;
 	return 0;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>