个人财政支出管理 ——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; } //判断日期是否存在