| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 528 人关注过本帖
标题:[求助]有没有更好的方法设计这个类
只看楼主 加入收藏
wangxiang
Rank: 2
等 级:新手上路
威 望:5
帖 子:376
专家分:0
注 册:2006-3-28
收藏
 问题点数:0 回复次数:5 
[求助]有没有更好的方法设计这个类

这道题,我想了很久,但是因为没答案,所以没办法确定是不是正确的,假如你们来做这个题,你们会怎么设计呢?
题完整如下:(计帐)假设你是一个金融家,你在每年的一月,四月,和九月购买X公司100股股票,每年六月和十一月卖掉100股。这些月份中每一股的价格是:
Jan Apr Jun Sep Nov
$10 $30 $20 $50 $30
确定你的资金收益或损失总量。要求使用队列(先进先出)。你在本年结束时拥有的100股不要参与计算。
我的设计是这样的:
const int maxqueue = 12;
typedef int Queue_entry;
enum Error_code { success,overflow,underflow };
class Queue
{
public:
Queue();
bool empty() const;
virtual Error_code append(const Queue_entry &x);//添加一个元素的引用
virtual Error_code serve();//删除第一个元素
Error_code retrieve(Queue_entry &x) const;//对第一个元素进行引用(x)
protected:
int count;
int front,rear;
Queue_entry entry[maxqueue];
};
........
#include "queue.h"
#include <iostream>
using namespace std;
int main()
{
Queue q;
q.append(10);//添加一月的股价
q.append(30);//添加四月的股价
int i;//为了对 队列第一个元素的引用定义了次变量
q.retrieve(i);//引用一月的股价
i = (20 -i)*100;//将卖掉的股价减去购买的股价,即为收益
q.serve();//删除第一个元素
q.append(50);//添加九月的股价
int j;//为了对 队列第一个元素的引用定义了次变量
q.retrieve(j);//引用一月的股价
q.serve();//删除第一个元素
j = (30-j)*100;//同上
int sum = i + j;//两次收益的和,即为收益总量
cout<<sum<<endl;
return 0;
}
我感觉这个不大合理的原因是:如果每一月都有卖掉,那我就要定义十二个变量,如上面的(i,j.....),这样好象麻烦?
不知道大家有没有更好的设计方法?

[此贴子已经被作者于2006-6-8 18:31:32编辑过]

搜索更多相关主题的帖子: 设计 
2006-06-08 16:12
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 

能不能说详细点,还有什么其它要求吗?我看不出有用队列的必要,如果我来设计的话我会直接把买卖都设计为类中的方法
[CODE]class CStock
{
int m_iPrice[12];
int m_iStockNum;
int m_iIncome;
public:
CStock();
void SetMonthPrice(int iMonth, int iPrice);
void Buy(int iMonth, int iStockNum);//m_iIncome = m_iIncome - m_iPrice[iMonth] * iStockNum;保存买的股票数到m_iStockNum
int sell(int iMonth, int iStockNum); //重新计算m_iStockNum,m_iIncome = m_iIncome - m_iPrice[iMonth] * iStockNum;
int GetIncome();//返回m_iIncome
}[/CODE]


世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-06-08 17:31
wangxiang
Rank: 2
等 级:新手上路
威 望:5
帖 子:376
专家分:0
注 册:2006-3-28
收藏
得分:0 
你的类设计是可以的。
就比如上面那个题:一月购买时把信息放进队列。四月购买时把信息再放进队列。到了六月要卖掉时,就把队列第一个位置放的100股卖掉。九月又购买把股票放进队列。到十一月时,就把队列的第一个位置的股票拿出来卖掉(这时的股票是第二次放进,因为第一次的股票已经被拿出卖掉了)。最后这个队列里还有九月购买的股票100股。(因为他没被拿出卖掉)
1月 :100股 进队
4月 :100股 进队
6月 :取出对中100股卖掉
9月 :100股 进队
11月:取出对中100股卖掉
----------最后队列中还存有的100股不用参与计算

2006-06-08 18:01
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
为什么要这样麻烦?
为什么要设计类?
int Jan = 10,Apr = 30,Jun = -20,Sep = 50,Nov = -30;
int Answer=(Jan + Apr + Jun + Sep + Nov)*100;

这样就够了撒

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-06-08 18:14
wangxiang
Rank: 2
等 级:新手上路
威 望:5
帖 子:376
专家分:0
注 册:2006-3-28
收藏
得分:0 

我要的是用队列的思想

2006-06-08 18:20
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
以下是引用wfpb在2006-6-8 18:14:23的发言:
为什么要这样麻烦?
为什么要设计类?
int Jan = 10,Apr = 30,Jun = -20,Sep = 50,Nov = -30;
int Answer=(Jan + Apr + Jun + Sep + Nov)*100;

这样就够了撒 怎么这么象 论坛????????
能不能查一下ID

LZ,没明白,太乱了


嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-06-08 19:29
快速回复:[求助]有没有更好的方法设计这个类
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037948 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved