C语言财务管理系统源代码.docx

上传人:b****6 文档编号:8886471 上传时间:2023-02-02 格式:DOCX 页数:20 大小:16.79KB
下载 相关 举报
C语言财务管理系统源代码.docx_第1页
第1页 / 共20页
C语言财务管理系统源代码.docx_第2页
第2页 / 共20页
C语言财务管理系统源代码.docx_第3页
第3页 / 共20页
C语言财务管理系统源代码.docx_第4页
第4页 / 共20页
C语言财务管理系统源代码.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

C语言财务管理系统源代码.docx

《C语言财务管理系统源代码.docx》由会员分享,可在线阅读,更多相关《C语言财务管理系统源代码.docx(20页珍藏版)》请在冰豆网上搜索。

C语言财务管理系统源代码.docx

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模板 > 国外设计风格

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1