Chinaunix首页 | 论坛 | 博客
  • 博客访问: 413878
  • 博文数量: 116
  • 博客积分: 7087
  • 博客等级: 少将
  • 技术积分: 1175
  • 用 户 组: 普通用户
  • 注册时间: 2005-02-19 23:32
文章分类

全部博文(116)

文章存档

2012年(1)

2011年(2)

2010年(10)

2009年(21)

2008年(18)

2007年(12)

2006年(21)

2005年(31)

我的朋友

分类:

2005-08-30 10:26:10

老是要设计报表,干脆写个类,自动替我考虑表格线。

#include
#include
#include
namespace std {} using namespace std;

struct s_frame
{
 string left_upper_conner;
 string right_upper_conner;
 string left_bottom_conner;
 string right_bottom_conner;
 string vertical_bar;
 string horizontal_bar;
 string cross;
 string up_t_bar;
 string down_t_bar;
 string left_t_bar;
 string right_t_bar;
};

class report
{
 private:
  string  header;
  string  footer;
  string  date;
  string  institute;
  s_frame frame_for_report;
  list columndef;
  list < list >  row;
  void setFrame();
  
 public:
  report();
  report(s_frame f);
  ~report();
  void setColumn(list col);
  string getHeader();
  void   setHeader(string h);
  void   setDate(string rdate);
  void   setInstitute(string inst);
  string mkUpperFrame();
  string mkBottomFrame();
  string mkMiddleFrame();
  void addRow(list content);
  string mkRow( list field);
  string genReport();
  int tableWidth();
  
};

-------------------------------------------------------------------------------------------------------------------------

#include "report.h"

report::report()
{
 header="代收明细报表";
 footer="制表人:科技部";
 setFrame();
 list col;
 col.push_back(10);
 col.push_back(20);
 col.push_back(10);
 col.push_back(16);
 col.push_back(16);
 col.push_back(16);
 setColumn(col);
}

report::~report()
{

}

void report::setFrame()
{
 frame_for_report.left_upper_conner="┌";
 frame_for_report.right_upper_conner="┐";
 frame_for_report.left_bottom_conner="└";
 frame_for_report.right_bottom_conner="┘";
 frame_for_report.vertical_bar="│";
 frame_for_report.horizontal_bar="─";
 frame_for_report.cross="┼";
 frame_for_report.up_t_bar="┬";
 frame_for_report.down_t_bar="┴";
 frame_for_report.left_t_bar="├";
 frame_for_report.right_t_bar="┤";
}

void report::setColumn( list col)
{
 columndef=col;
}

string report::getHeader()
{
 return header;
}

void report::setHeader(string h)
{
 header=h;
}

void report::setDate(string rdate)
{
 date=rdate; 
}

void report::setInstitute(string inst)
{
 institute=inst;
}

string report::mkUpperFrame()
{
 string frame;
 list::iterator columnIterator;

 frame+=frame_for_report.left_upper_conner;
 
 for (columnIterator=columndef.begin();   columnIterator!=columndef.end();     ++columnIterator)
      {         
  for(int i=0;i<(*columnIterator)/2;i++)
   frame+=frame_for_report.horizontal_bar;
  frame+=frame_for_report.up_t_bar;
      }                   
 frame.erase(frame.length() -2 ,2);
 frame+=frame_for_report.right_upper_conner;
 return frame;

}

string report::mkBottomFrame()
{
 string frame;
 list::iterator columnIterator;

 frame+=frame_for_report.left_bottom_conner;
 
 for (columnIterator=columndef.begin();   columnIterator!=columndef.end();     ++columnIterator)
      {         
  for(int i=0;i<(*columnIterator)/2;i++)
   frame+=frame_for_report.horizontal_bar;
  frame+=frame_for_report.down_t_bar;
      }                   
 frame.erase(frame.length() -2 ,2);
 frame+=frame_for_report.right_bottom_conner;
 return frame;

}

string report::mkMiddleFrame()
{
 string frame;
 list::iterator columnIterator;

 frame+=frame_for_report.left_t_bar;
 
 for (columnIterator=columndef.begin();   columnIterator!=columndef.end();     ++columnIterator)
      {         
  for(int i=0;i<(*columnIterator)/2;i++)
   frame+=frame_for_report.horizontal_bar;
  frame+=frame_for_report.cross;
      }                   
 frame.erase(frame.length() -2 ,2);
 frame+=frame_for_report.right_t_bar;
 return frame;

}

string report::mkRow( list field)
{
 list::iterator fieldIter;
 list::iterator columnIterator;
 
 string content; 
 
 for(fieldIter=field.begin(), columnIterator=columndef.begin();
  fieldIter!=field.end() && columnIterator!=columndef.end();
   ++fieldIter,++columnIterator)
 {
  
  content += frame_for_report.vertical_bar;
  content += string(*columnIterator > (*fieldIter).length() ? *columnIterator - (*fieldIter).length():0,' ');
  content += *fieldIter;
  
 }
 
 content += frame_for_report.vertical_bar;
 
 return content;
 
}
string report::genReport()
{
  list< list >::iterator rowIter;
  list::iterator fieldIter;
  string report;  
  
  report += string((tableWidth() - header.length())/2,' ');
  report += header;
  report += ' ';
  report += institute;
  report += string(tableWidth() - 10 - institute.length() ,' ');
  report += date;
  report += ' ';
  report += mkUpperFrame();
  report += ' ';
  for(rowIter=row.begin(); rowIter!=row.end();++rowIter)
  { 
   
   
   report += mkRow( *rowIter );
   report += ' ';
   report += mkMiddleFrame();
   report += ' ';
   
  }
  
  report.erase(report.length() - mkMiddleFrame().length() - 1 ,mkMiddleFrame().length()+1);
  report+=mkBottomFrame();
  report+=' ';
  return report;
}

void report::addRow(list content)
{
 list t;
 t=content;
 row.push_back(t);
}

int report::tableWidth()
{
 list::iterator columnIterator; 
 int width=0;
 
 for (columnIterator=columndef.begin();   columnIterator!=columndef.end();     ++columnIterator)
      {         
  width+=*columnIterator;
  width+=2;  
      }   
      
      return width;
}

阅读(1055) | 评论(0) | 转发(0) |
0

上一篇:Bluetooth 研究

下一篇:用.net 存储img字段

给主人留下些什么吧!~~