家庭财务管理系统c语言,C语言家庭财务管理系统 统计功能出错了 怎么改

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include

#include

#include

#include

#define MAXNAME 11 //家庭成员姓名的最大长度

#define MAXDETAIL 21 //注最大长度

//自定义枚举类型fi_type,用来表示收入与支出

typedef enum _fi_type

{

income=1,//收入

payout =-1 //支出

}fi_type;

// 家庭财务信息结构体

typedef struct _fi_info

{

int year;

int month;

fi_type type;

char name[9];

float money;

char detail[11];

}fi_info;

//存储财务数据结构的结构体

typedef struct _fi_data

{

fi_info info;

struct _fi_data* next;

}fi_data;

fi_data *head;//财务数据的头结点

void menu();//菜单函数

void add_income();

void search_income();

void delete_income();

void update_income();

void add_payout();

void search_payout();

void delete_payout();

void update_payout();

void count_total();

void quit();

//

void search_data(fi_type type);

void delete_data(fi_type type);

void update_data(fi_type type);

//

void initialize();

void save_to_file();

void clear_data();

fi_data *get_last();

fi_data *get_previous(fi_data *p);

void input_info(fi_info *info);

void show_info(fi_data *p);

void menu()

{

printf("\n");

printf("-\n");

printf("\t\t——————————————————\n");

printf("\t\t 家庭财务管理系统 \n");

printf("\t\t——————————————————\n");

printf("\t\t*******************************************\n");

printf("\t\t收入管理:");

printf("1.添加收入");

printf(" 2.查询收入明细\n");

printf("\t\t\t 3.删除收入");

printf(" 4.修改收入\n");

printf("\t\t-\n");

printf("\t\t支出管理:");

printf("5.添加支出");

printf(" 6.查询支出明细\n");

printf("\t\t\t 7.删除支出");

printf(" 8.修改支出\n");

printf("\t\t*******************************************\n");

printf("\t\t统计:");

printf("9.统计总收入/总支出\n");

printf("\t\t-\n");

printf("\t\t0.退出系统");

}

intmain()

{

int selected=0;

initialize();

while(selected>=0&&selected<=9)

{

system("cls");

menu();

printf(">请选择要进行的操作(0-9)");

if(scanf("%d",&selected)!=1||selected<0||selected>9)

{

printf(">输入有误!请选择(0-9)之间的数字!按任意键重试...");

getchar();

}

else

{

switch(selected)

{

case 0:exit(0);clear_data();break;

case 1:add_income();save_to_file();break;

case 2:search_income();break;

case 3:delete_income();save_to_file();break;

case 4:update_income();save_to_file();break;

case 5:add_payout();save_to_file();break;

case 6:search_payout();break;

case 7:delete_payout();save_to_file();break;

case 8:update_payout();save_to_file();break;

case 9:count_total();break;

}

}

}

}

void add_income()//添加收入

{

fi_data *p=(fi_data *)malloc(sizeof(fi_data));

p->next=NULL;

input_info(&(p->info));

p->info.type=income;

if(head==NULL)

head=p;

else

get_last()->next=p;

}

void add_payout()//添加收入

{

fi_data *p=(fi_data *)malloc(sizeof(fi_data));

p->next=NULL;

input_info(&(p->info));

p->info.type=payout;

if(head==NULL)

head=p;

else

get_last()->next=p;

}

//输入函数

void input_info(fi_info *info)

{

printf("

scanf("%d/%d",&(info->year),&(info->month));

printf("

scanf("%s",info->name);

printf(">输入金额:");

scanf("%f",&(info->money));

printf(">请输入备注(最大长度为%d):",20);

scanf("%s",info->detail);

}

//查找数据函数

void search_data(fi_type type)

{

int year=0;

int month=0;

fi_data *p=NULL;

int count=0;

char input=' ';

while(1)

{

printf(">请输入要查询的年月(例如:2009/1)");

if(scanf("%d/%d",&year,&month)!=2)

{

printf(">输入有误\n");

}

else

{

p=head;

count=0;

while(p!=NULL)

{

if((p->info.year==year)&&(p->info.month==month)&&(p->info.type==type))

{

show_info(p);

system("PAUSE");

count++;

}

p=p->next;

}

if(count==0)

{

printf(">没有找到数据\n");

}

printf(">继续查找其他数据?(y or n)");

input=getchar();

if(input=='y'||input=='Y')

continue;

else

break;

}

}

}

//初始化函数,读取文本数据

void initialize()

{

FILE * fp=NULL;

fi_data *p=NULL;

fi_data *last=NULL;

intcount=0;

fp=fopen("data.txt","rb");

if(fp==NULL)

{

fp=fopen("data.txt","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);

}

//显示信息函数

void show_info(fi_data *p)

{

inti=0;

printf("|\t\t|\t\t|\t\t|\t\t|\t\t|\t\t|\n");

printf("|NO.\t |年/月\t|类型\t|姓名\t|金额\t|备注\t|\n");

printf("|%5d\t|%4d/%02d|%4s\t|%10s|%10.2f|%20s|\n",i+1,

p->info.year,p->info.month,p->info.type==income?"收入":"支出",

p->info.name,p->info.money,p->info.detail);

printf("|\t\t|\t\t|\t\t|\t\t|\t\t|\t\t|\n");

}

//统计总收入、总支出

void count_total()

{

float total_income=0.0;

float total_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("\t\t+\t\t+\t\t+\n");

printf("|合计收入\t|合计支出\t|结余\t|\n");

//printf("\t\t+\t\t+\t\t+\n");

printf("%12.2f|%12.2f|%12.2f|\n",total_income,total_payout,total_income-total_payout);

printf("\t\t+\t\t+\t\t+\n");

printf(">按任意键返回主菜单。。。");

getchar();

}

//保存到文件

void save_to_file()

{

FILE *fp=fopen("data.txt","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);

}

//修改信息函数

void update_data(fi_type type)

{ int year=0;

int month=0;

fi_data *p=NULL;

fi_data *pre=NULL;

char input;

int count=0;

int i=0;

while(1)

{ printf(">请输入要查询的年月(例如:2009/1)");

if(scanf("%d/%d",&year,&month)!=2)

{

printf(">输入有误\n");

}

else

{

p=head;

count=0;

while(p!=NULL)

{

if((p->info.year==year)&&(p->info.month==month)&&(p->info.type==type))

{

count++;

show_info(p);

input_info(&(p->info));

printf("修改成功\n");

p=get_previous(p);

}

p=p->next;

}

if(count==0)

printf(">没有找到数据\n");

printf(">继续查找其他数据?(y or n)");

input=getchar();

if(input=='y'||input=='Y')

continue;

else

break;

}

}

}

void delete_data(fi_type type)//删除数据函数

{

int year=0;

int month=0;

fi_data *p=NULL;

fi_data *pre=NULL;

int count=0;

char input=' ';

int i=0;

while(1)

{ printf(">请输入要查询的年月(例如:2009/1)");

if(scanf("%d/%d",&year,&month)!=2)

{

printf(">输入有误\n");

}

else

{

p=head;

count=0;

while(p!=NULL)

{

if((p->info.year==year)&&(p->info.month==month)&&(p->info.type==type))

{

count++;

show_info(p);

pre=get_previous(p);

if(pre==NULL)

head=head->next;

else

pre->next=p->next;

free(p);

printf(">删除成功\n");

}

p=p->next;

}

if(count==0)

printf(">没有找到数据\n");

printf(">继续查找其他数据?(y or n)");

input=getchar();

if(input=='y'||input=='Y')

continue;

else

break;

}

}

}

void clear_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->next!=NULL))

p=p->next;

return p;

}

fi_data *get_previous(fi_data *p)

{

fi_data *previous=head;

while(previous!=NULL)

{

if(previous->next==p)

break;

previous=previous->next;

}

return previous;

}

void search_payout()

{

search_data(payout);

}

void delete_payout()

{

delete_data(payout);

}

void update_payout()

{

update_data(payout);

}

void search_income()

{

search_data(income);

}

void delete_income()

{

delete_data(income);

}

void update_income()

{

update_data(income);}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
家庭财务管理系统是一个通过编程实现的系统,它能够通过菜单提供功能选择,实现家庭财务收入和财务支出的添加、查询、删除、修功能,并且能够对家庭财务数据进行统计。在C语言中,为了更好地储存信息并保证信息的完整性和可读性,可以使用结构体来实现家庭财务管理系统,而不是使用数组。结构体可以提供一连串连续的空间来存储信息。 在编写家庭财务管理系统的过程中,需要掌握C语言的基础语法,包括数据类型、运算符与表达式、流程控制等内容。此外,还需要了解预处理命令、数组、指针、函数、结构体、链表、文件操作等知识点。这些基础语法和知识点是实现家庭财务管理系统的基础。 通过合作完成项目,可以更深入地了解C语言工程的实施步骤。在项目中,需要注意函数的划分,各个部分之间的衔接与汇总。同时,为了方便管理和汇总,可以将声明、函数和主函数存储在不同的文件夹中,并以不同的文件夹来存储。这样可以更好地进行管理和维护。 综上所述,家庭财务管理系统是一个通过C语言编程实现的系统,它可以提供功能选择、实现财务数据的增删查和统计功能。在编写过程中需要掌握C语言的基础语法,并且可以使用结构体来存储信息。此外,通过合作项目可以更好地理解C语言工程的实施步骤,并注意函数的划分和文件的管理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [C语言专题 ⑥项目实训-家庭财务管理系统](https://blog.csdn.net/qq_44263261/article/details/95222343)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值