c++课程设计答案 下载本文

个人财政支出管理 ——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; }

//判断日期是否存在