个人财政支出管理 ——Visusal C++课程设计报告 0716120246 杨波 一、程序功能简介:将个人财物的目标及当前存款、支出保存下来,
可随时更新查看,比较盈余与目标的差距。
二、程序主要设计思想:通过链表形式保存数据。
三、课程设计要求及解决方法:
1.将收支的数据及相应的函数封装到类中,使程序结构化。 解决:写好函数,并且增加一个Record类,在main中运用类的对象来调用,使程序结构化。 2.增加日期录入并保存,可查看,将记录放到文件夹中。
解决:通过链表,将数据顺序保存在节点中,并通过循环结构保存到文件中,可保证数据不被覆盖,可按日期查看。关键代码如下:
void CList::Insert(CNode *pnode) //按日期的升序插入结点 {
CNode *p,*q; if(pHead==0) {
pHead=pnode; pHead->pNext=0; return; }
if(pHead->pData->Compare(*(pnode->pData))==1) {
pnode->pNext=pHead; pHead=pnode; return; }
p=pHead;
while(p&&p->pData->Compare(*(pnode->pData))==-1) {
q=p;
p=p->pNext; }
q->pNext=pnode; pnode->pNext=p; }
CNode *CList::LookUp(CFinance& finance) //根据日期查找记录
{
if(pHead==0)return 0; CNode *pn=pHead; while(pn) {
if(pn->pData->Compare(finance)==0)return pn; pn=pn->pNext; }
return 0; }
void CRecord::SaveToFile() //把数据写进文本文档 { ofstream outfile1(\); if(!outfile1) {
  cout<<\文件写入失败!\<     outfile1<  ofstream outfile(\);  if(!outfile)  {    cout<<\文件写入失败!\<  int year,month,day;  double income,output;  char purpose[20];     CNode *p=list.GetListHead();  while(p)  {    p->GetData()->SetVal(year,month,day,income,output,purpose);    outfile<   p=list.GetListNextNode(p);  } }  3. 补充一个函数,计算盈余并且重新统计当前财目。  解决代码:void CList::CalBalance()               //计算Blance {   if(!pHead)return;  double temp=0;  CNode *p=pHead;  while(p)   {    p->pData->Calculate(temp);   temp=p->pData->GetBalance();   p=p->pNext;  } }  4i若出现输入时间格式或数据有误,提出警告。 解决方法:设计两个函数,用来判断是否有错。  bool IsDateRight(int year,int month,int day)                //判断日期是否正确 {   if(year<1980||year>2100)return false;  if(month<0||month>12)return false;     int DaysInMonth;  switch(month)  {   case 1:  case 3:  case 5:  case 7:  case 8:  case 10:   case 12:DaysInMonth=31;break;  case 4:  case 6:  case 9:   case 11:DaysInMonth=30;break;  case 2:   {     if(year%4==0&&year@0!=0)DaysInMonth=29;    else DaysInMonth=28;    break;   }    }   if(day<0||day>DaysInMonth)return false;  return true; }  bool CFinance::IsDateEqual(int year,int month,int day)        {   if(nYear==year&&nMonth==month&&nDay==day)  {    return true;  }  //判断日期是否存在