C语言财务管理系统源代码.docx
- 文档编号:8886471
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:20
- 大小:16.79KB
C语言财务管理系统源代码.docx
《C语言财务管理系统源代码.docx》由会员分享,可在线阅读,更多相关《C语言财务管理系统源代码.docx(20页珍藏版)》请在冰豆网上搜索。
C语言财务管理系统源代码
#include"stdio.h"
#include"stdlib.h"
#defineMAX_NAME11
#defineMAX_DETAIL21
#defineMENU_COUNT9
#defineDATA_FILE"fa.dat"
typedefwnum_fi_type
{
income=1,
payout=-1
}fi_type;
typedefstruct_fi_info
{
intyear;
intmonth;
fi_typetype;
charname[MAX_NAME];
floatmoney;
chardetail[MAX_DETAIL];
}fi_info;
typedefstruct_fi_data
{
fi_infoinfo;
struct_fi_data*next;
}fi_data;
voidadd_income();
voidsearch_income();
voiddelete_income();
voidupdate_income();
voidadd_payout();
voidsearch_payout();
voiddelete_payout();
voidupdate_payout();
voidcount_total();
voidquit();
voidsearch_data(fi_typetype);
voiddelete_data(fi_typetype);
voidupdate_data(fi_typetype);
voidinitialize();
voidsave_to_file();
voidclear_data();
fi_data*get_last();
fi_data*get_previous(fi_data*p);
voidinput_info(fi_info*info);
voidshow_info(fi_data*p[],intcount);
fi_data*head;
charmenu[]=
"===============================================\n"
"|家庭财务管理系统|\n"
"+---------------------------------------------+\n"
"|收入管理|\n"
"|1添加收入|\n"
"|2查询收入明细|\n"
"|3删除收入|\n"
"|4修改收入|\n"
"|支出管理|\n"
"|5添加支出|\n"
"|6查询支出明细|\n"
"|7删除支出|\n"
"|8修改支出|\n"
"|统计|\n"
"|9统计总收入总支出|\n"
"----------------------------------------------+\n"
"|0退出系统|\n"
"==============================================+\n";
void(*menu_fun[])()=
{
quit,
add_income,
search_income,
delete_income,
update_income,
add_payout,
search_payout,
delete_payout,
update_payout,
count_total
};
intmain()
{
intselected=0;
initialize();
while(selected>=0&&selected<=MENU_COUNT)
{
system("cls");
printf(menu);
printf(">请选择要进行的操作(%d-%d):
",0,MENU_COUNT);
if(scanf("%d",&selected)!
=1||selected<0||selected>MENU_COUNT)
{
printf(">输入错误!
请选择[%d-%d]之间的数字!
按任意键重试...",0,MENU_COUNT);
fflush(stdin);
getchar();
}
else
{
menu_fun[selected]();
}
selected=0;
}
}
voidadd_income()
{
fi_data*p=(fi_data*)malloc(sizeof(fi_data));
memset(p,0,sizeof(fi_data));
p->next=NULL;
input_info(&(p->info));
p->info.type=income;
if(head==NULL)
{
head=p;
}
else
{
get_last(head)->next=p;
}
}
voidsearch_income()
{
search_data(income);
}
voiddelete_income()
{
delete_data(income);
}
voidupdate_income()
{
update_data(income);
}
voidadd_payout()
{
fi_data*p=(fi_data*)malloc(sizeof(fi_data));
memset(p,0,sizeof(fi_data));
input_info(&(p->info));
p->info.type=payout;
if(head==NULL)
{
head=p;
}
else
{
get_last(head)->next=p;
}
}
voidsearch_payout()
{
search_data(payout);
}
voiddelete_payout()
{
delete_data(payout);
}
voidupdate_payout()
{
update_data(payout);
}
voidcount_total()
{
floattotal_income=0.0;
floattotal_payout=0.0;
fi_data*p=head;
while(p!
=NULL)
{
if(p->info.type==income)
{
total_income+=p->info.money;
}
else
{
total_payout+=p->info.money;
}
p=p->next;
}
printf("+---------+---------+---------+\n");
printf("|合计收入|合计支出|结余|\n");
printf("+---------+---------+---------+\n");
printf("|%12.2f|%12.2f|%12.2f|\n",total_income,total_payout,total_income-total_payout);
printf("+---------+---------+---------+\n");
printf(">按任意键继续返回主菜单...");
fflush(stdin);
getchar();
}
voidsearch_data(fi_typetype)
{
intyear=0;
intmonth=0;
fi_data*p=NULL;
fi_data*result[9]={NULL};
intcount=0;
charinput='';
while
(1)
{
printf(">请输入要查询的年月(例如:
2009/1)");
if(scanf("%d/%d",&year,&month)!
=2)
{
printf(">输入错误。
\n");
}
else
{
p=head;
count=0;
memset(result,0,sizeof(fi_data*));
while(p!
=NULL)
{
if(p->info.year==year&&p->info.month==month&&p->info.type==type)
{
if(count<9)
{
result[count]=p;
count++;
}
else
{
show_info(result,count);
printf(">输入空格并回车翻页。
其他键退出。
");
fflush(stdin);
input=getchar();
if(input=='')
{
memset(result,0,sizeof(fi_data*));
count=0;
result[count]=p;
count++;
}
else
{
break;
}
}
}
p=p->next;
}
if(count!
=0)
{
show_info(result,count);
}
else
{
printf(">没有找到数据。
\n");
}
printf(">继续查找其他数据?
(yorn)");
fflush(stdin);
input=getchar();
if(input=='y'||input=='Y')
{
continue;
}
else
{
break;
}
}
}
}
voiddelete_data(fi_typetype)
{
intyear=0;
intmonth=0;
fi_data*p=NULL;
fi_data*pre=NULL;
fi_data*result[9]={NULL};
intcount=0;
charinput='';
inti=0;
while
(1)
{
printf(">请输入要查询的年月(例如:
2009/1)");
if(scanf("%d/%d",&year,&month)!
=2)
{
printf(">输入错误。
\n");
}
else
{
p=head;
count=0;
memset(result,0,sizeof(fi_data*));
while(p!
=NULL)
{
if(p->info.year==year&&p->info.month&&p->info.type)
{
if(count=9)
{
result[count]=p;
count++;
}
else
{
show_info(result,count);
printf(">请输入空格并回车翻页。
输入对应的序号删除。
其他键退出:
");
fflush(stdin)
input=getchar();
if(input=='')
{
memset(result,0,sizeof(fi_data*));
count=0;
result[count]=p;
count++;
}
elseif(input=='1'&&input<=48+count)
{
i=input-49;
pre=get_previous(result[i]);
if(pre==NULL)
{
head=head->next;
}
else
{
pre->next=result[i]->next;
}
free(result[i]);
for(;i { result[i]=result[i+1]; } result[i]=p; printf(">删除成功。 \n"); } else { break; } } } p=p->next; } if(count! =0) { show_info(result,count); printf(">输入对应的序号删除。 其他键退出。 "); fflush(stdin); input=getchar(); if(input>='1'&&input<=48+count) { i=input-49; pre=get_previous(result[i]); if(pre==NULL) { head=head->next; } else { pre->next=result[i]->next; } free(result[i]); for(;i { result[i]=result[i+1]; } result[i]=NULL; count--; printf(">删除成功.\n"); } } else { printf(">没有找到数据。 \n"); } printf(">继续查找数据? (yorn)"); fflush(stdin); input=getchar(); if(input=='y'||input=='Y') { continue; } else { break; } } } } voidupdate_data(fi_typetype) { intyear=0; intmonth=0; fi_data*p=NULL; fi_data*pre=NULL; fi_data*result[9]={NULL}; intcount=0; charinput=''; inti=0; while (1) { printf(">请输入要查询的年月(例如: 2009/1)"); if(scanf("%d/%d",&year,&month)! =2) { printf(">输入错误。 \n"); } else { p=head; count=0; memset(result,0,sizeof(fi_data*)); while(p! =NULL) { if(p->info.year==year&&p->info.month==month&&p->info.type==type) { if(count<9) { result[count]=p; count++; } else { show_info(result,count); printf(">输入空格并回车翻页。 输入对应的序号修改。 其他键退出。 "); fflush(stdin); input=getchar(); if(input=='') { memset(result,0,sizeof(fi-data*)); count=0; result[count]=p; count++; } elseif(input>='1'&&input<=48+count) { i=input-49; input_info(&(result[i]->info)); printf(">修改成功。 \n"); p=get_previous(p); } else { break; } } } p=p->next; } if(count! =0) { show_info(result,count); printf(">输入对应的序号修改。 其他键退出。 "); fflush(stdin); input=getchar(); if(input>='1'&&input<=48+count) { i=input-49; input_info(&(result[i]->info)); show_info(result,count); printf(">修改成功。 \n"); } } else { printf(">没有找到数据。 \n"); } printf(">继续查找数据? (yorn)"); fflush(stdin); input=getchar(); if(input=='y'||input=='Y') { continue; } else { break; } } } } voidinitialize() { FILE*fp=NULL; fi_data*p=NULL; fi_data*last=NULL; intcount=0; fp=fopen(DATA_FILE,"rb"); if(fp==NULL) { fp=fopen(DATA_FILE,"w"); fclose(fp); return; } p=(fi_data*)malloc(sizeof(fi_data)); memset(p,0,sizeof(fi_data)); p->next=NULL; while(fread(&(p->info),sizeof(fi_info),1,fp)==1) { if(head==NULL) { head=p; } else { last=get_last(); last->next=p; } count++; fseek(fp,count*sizeof(fi_info),SEEK_SET); p=(fi_data*)malloc(sizeof(fi_data)); memset(p,0,sizeof(fi_data)); p->next=NULL; } free(p); p=NULL; fclose(fp); } voidsave_to_file() { FILE*fp=fopen(DATA_FILE,"wb"); fi_data*p=head; while(p! =NULL) { fwrite(&(p->info),sizeof(fi_info),1,fp); fseek(fp,0,SEEK_END); p=p->next; } fclose(fp); } voidclear_data() { fi_data*p=NULL; while(head! =NULL) { if(head->next! =NULL) { p=head; head=head->next; free(p); p=NULL; } else { free(head); head=NULL; } } } fi_data*get_last() { fi_data*p=head; if(p==NULL) { returnp; } while((p! =NULL)&&(p->nezt! =NULL)) { p=p->next; } returnp; } fi_data*get_previous(fi_data*p) { fi_data*previous=head; while(previous! =NULL) { if(previous->next==p) { break; } previous=previous->next; } returnprevious; } voidinput_info(fi_info*info) { printf(">请输入年月(YYYY/M): "); scanf("%d/%d",*(info->year),&(info->month)); printf(">请输入家庭成员姓名(最大长度为%d): ",MAX_NAME-1); scanf("%s",info->name); printf(">请输入金额: "); scanf("%f",&(info->money)); printf(">请输入备注(最大长度为%d): ",MAX_DETAIL-1); scanf("%s",info->detail); } voidshow_info(fi_data*p[],intcount) { inti=0; printf("+---+--------+-------+-------------+-------------+--------------------+\n"); printf("|No.|年-月|类型|姓名|金额|备注|\n"); printf("+---+--------+-------+-------------+-------------+--------------------+\n"); for(i=0;i { printf("|%3d|%4d-%02d|%4s|%-10s|%10.2f|%-20s|\n", i+1, p[i]->info.year,p[i]->info.month, p[i]->info.type==income? "收入": "支出", p[i]->info.name, p[i]->info.money, p[i]->info.detail); printf("+---+--------+-------+-------------+-------------+---------------------+\n"); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 财务管理 系统 源代码