if(pHead==0)return 0; CNode *pn=pHead; while(pn) { if(pn->pData->Compare(finance)==0)return pn; pn=pn->pNext;
} return 0;
}
//打印整个链表
void CList::ShowList() { if(!pHead) { cout<<\链表为空\ return;
}
CNode *p=pHead; while(p) { p->ShowNode(); p=p->pNext;
}
}
//删除整个链表
void CList::DeleteList() { if(pHead==0)return; CNode *p,*q; p=pHead; while(p) { delete p->pData; q=p; p=p->pNext; delete q; } pHead=0;
}
//返回链表首结点
CNode *CList::GetListHead()
第 16 页 共 28 页
{ }
//返回链表指定结点的下一个结点
CNode *CList::GetListNextNode(CNode *pnode) { }
//据日期插入结点,并按日期的升序排序
void CList::Insert(CNode *pnode) { }
//返回最后一个结点
CNode *CList::GetLastNode() {
if(!pHead) { }
CNode *p=pHead;
return 0; CNode *p,*q; if(pHead==0) { }
if(pHead->pData->Compare(*(pnode->pData))==1) { } p=pHead;
while(p&&p->pData->Compare(*(pnode->pData))==-1) { }
q->pNext=pnode; pnode->pNext=p;
q=p; p=p->pNext; pnode->pNext=pHead; pHead=pnode; return; pHead=pnode; pHead->pNext=0; return;
return pnode->pNext; return pHead;
第 17 页 共 28 页
}
//逐个结点计算盈余
void CList::CalBalance() { }
//定义处理记录类
class CRecord {
if(!pHead)return; double temp=0; CNode *p=pHead; while(p) { }
p->pData->Calculate(temp); temp=p->pData->GetBalance(); p=p->pNext; while(p->pNext) { } return p;
p=p->pNext;
CList list; //把CList的对象list作为CRecord的成员 void ReadFromFile(); //从文件中读取数据 void SaveToFile(); //把数据保存在文件中 void Deposit(); //输入收入数据 void Withdraw(); //输入支出数据 void ViewDepositRecord(); //查看收入记录 void ViewWithdrawRecord(); //查看支出记录
void ViewBalance(); //查看收支平衡情况 void LookUpRecord(); //根据日期查找记录 void DeleteRecord(); //根据日期删除记录 void setgoal(double); //设定目标
public:
void EditRecord(); //根据日期修改记录
}; //从文件中读取数据 void CRecord::ReadFromFile()
{ ifstream infile1(\将infile1对象与dlPurpose.txt文件相联系,即以后程序对infile1对象的操作均是对该文件的操作
if(!infile1) {
第 18 页 共 28 页
}
//把数据保存在文件中
void CRecord::SaveToFile() { ofstream outfile1(\
if(!outfile1) { }
ofstream outfile(\if(!outfile) { }
int year,month,day; double income,output; char purpose[20];
cout<<\文件写入失败!\exit(1);
cout<<\文件写入失败!\exit(1); }
infile1>>dlPurpose; //将文件dlPurpose.txt中的数据输入到已定义好的ifstream infile(\将infile对象与finance.txt文件相联系,即以后if(!infile) { }
int year,month,day; double income,output; char purpose[20];
while(infile>>year>>month>>day>>income>>output>>purpose) { }
CFinance *pfinance=new CFinance;
pfinance->SetFinance(year,month,day,income,output,purpose); CNode *pnode=new CNode; pnode->InputData(pfinance); list.AddNode(pnode);
cout<<\文件读取失败!\exit(1);
cout<<\文件读取失败!\
exit(1); //终止程序的执行
变量dlPurpose中
程序对infile对象的操作均是对该文件的操作
list.CalBalance();
outfile1< 第 19 页 共 28 页 CNode *p=list.GetListHead(); while(p) { p->GetData()->SetVal(year,month,day,income,output,purpose); //实outfile< p=list.GetListNextNode(p); } } //输入收入数据 void CRecord::Deposit() { int year,month,day; double income; char purpose[20]; cout<<\请输入日期:\ cin>>year>>month>>day; while(!IsDateRight(year,month,day)) { cout<<\日期不正确!请重新输入:\ cin>>year>>month>>day; } cout<<\请输入收入金额:\ cin>>income; cout<<\请输入收入来源:\ cin>>purpose; CFinance *pfinance=new CFinance; pfinance->SetFinance(year,month,day,income,0,purpose); // CNode *pnode=new CNode; pnode->InputData(pfinance); list.Insert(pnode); cout<<\添加成功!\ list.CalBalance(); } //输入支出数据 void CRecord::Withdraw() { int year,month,day; double output; char purpose[20]; cout<<\请输入日期:\ cin>>year>>month>>day; 第 20 页 共 28 页 对象赋值