C语言编写家庭收支管理程序
<p>C语言编写家庭收支管理程序</p><p><img src="http://img.baidu.com/img/iknow/icn_point.gif"> 悬赏分:50 -</p>
<p>解决时间:2010-1-30 14:07</p>
<p>要求可以增加、修改、删除、查看家庭的各项收支信息。收入信息至少要包含收入人员的姓名、来源、收入发生的日期和金额,支出信息至少要包含人员的姓名、去向、日期和金额。而且要求能够对某一段时间的收支情况进行统计。</p>
<p>步骤:1.定义一个收支信息的结构体,至少包含收支入人员的姓名、收入来源和去向、收支的日期和收支的数目;</p>
<p>l2.用文件来记录收入和支出的具体记录,可以添加一个收入和支出,可以修改已有的记录,删除记录;</p>
<p>l3.可以根据用户输入的条件,查看收支信息,查询的条件可以是收支人员、来源和去向、收支的时间或者数目等;</p>
<p>l4.根据用户的输入,可以对一段时间里的收支数据进行统计汇总。</p>
<p>最好程序不要太复杂....要是完美的话加钱</p>
<p>提问者: L_this_ - 三级</p>
<p>最佳答案</p>
<p>给你写了个,不过没写好,你自己给改改吧!将就着,还能用,统计信息和退出时保存有点问题,自己给改改吧!英语不好本人,用拼音写的!</p>
<p>#include"stdio.h"</p>
<p>#include"string.h"</p>
<p>#include"stdlib.h"</p>
<p>#include"math.h"</p>
<p>#define TIAOSHU 100</p>
<p>#define CHENGGONG 1</p>
<p>#define SHIBAI 0</p>
<p>#define SHOURU 1</p>
<p>#define ZHICHU 2</p>
<p>#define ZENGJIA 1</p>
<p>#define SHANCHU 2</p>
<p>#define XIUGAI 3</p>
<p>#define CHAXUN 4</p>
<p>#define TONGJI 5</p>
<p>#define TUICHU 6</p>
<p>/*以下定义全局变量*/</p>
<p>struct shouzhixinxi</p>
<p>{</p>
<p>char xingming;</p>
<p>char laiyuan;</p>
<p>char riqi;</p>
<p>char shumu; /*用double貌似读不出来*/</p>
<p>}jilu;</p>
<p>/*定义收支情况结构体,TIAOSHU表示最大的容量,可自行更改*/</p>
<p>char xuanze;</p>
<p>/*该数据用于接收选择信息*/</p>
<p>int tishi;</p>
<p>/*用于接收各函数返回的提示信息*/</p>
<p>int dijitiao=0;</p>
<p>/*用于表示当前是第几条信息*/</p>
<p>int i;</p>
<p>/*用于存放临时的条数,相当于零食的dijitiao*/</p>
<p>char linshi;</p>
<p>double linshi2;</p>
<p>/*用于存放一些临时信息*/</p>
<p>/*代码*/</p>
<p>/*用于保存信息*/</p>
<p>void baocun()</p>
<p>{</p>
<p>FILE *fp;</p>
<p>fp=fopen("shouzhiguanli.txt","w+");</p>
<p>for(i=0;i<dijitiao;i++)</p>
<p>{</p>
<p>fprintf(fp,"%s ",*jilu.xingming);</p>
<p>fprintf(fp,"%s ",*jilu.laiyuan);</p>
<p>fprintf(fp,"%s ",*jilu.riqi);</p>
<p>fprintf(fp,"%s ",*jilu.shumu);</p>
<p>}</p>
<p>fclose(fp);</p>
<p>}</p>
<p>/*用于输出查询到的信息*/</p>
<p>int shuchu(int i)</p>
<p>{</p>
<p>printf("\n\n \37~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\37\n");</p>
<p>printf(" \23 \3.收 支 人 员 姓 名:%-20s\23\n",jilu.xingming);</p>
<p>printf(" \23 \3.收 支 来 源 或 去 向:%-17s\23\n",jilu.laiyuan);</p>
<p>printf(" \23 \3.收 支 日 期:%-26s\23\n",jilu.riqi);</p>
<p>printf(" \23 \3.收 支 数 目:%-26s\23\n",jilu.shumu);</p>
<p>printf(" \36~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\36\n");</p>
<p>return CHENGGONG;</p>
<p>}</p>
<p>/*用于新建*/</p>
<p>void xinzeng(int dijitiao)</p>
<p>{</p>
<p>while(1)</p>
<p>{</p>
<p>printf("\n请输入收入或支出人员的姓名:");</p>
<p>scanf("%s",jilu.xingming);</p>
<p>printf("\n请输入收入来源或支出去向:");</p>
<p>scanf("%s",jilu.laiyuan);</p>
<p>printf("\n请输入收入或支出的日期:");</p>
<p>scanf("%s",jilu.riqi);</p>
<p>printf("\n请输入收入或支出的数目:");</p>
<p>scanf("%s",jilu.shumu);</p>
<p>printf("是否保存这条信息? <Y/N>\n");</p>
<p>xuanze=getch();</p>
<p>if(xuanze==\'Y\' II xuanze==\'y\')</p>
<p>{</p>
<p>dijitiao++;</p>
<p>printf("保存成功\n");</p>
<p>}</p>
<p>printf("是否继续添加新记录? <Y/N>\n");</p>
<p>xuanze=getch();</p>
<p>printf("\n");</p>
<p>if(xuanze==\'N\' II xuanze==\'n\')</p>
<p>break;</p>
<p>}</p>
<p>}</p>
<p>/*用于删除*/</p>
<p>void shanchu()</p>
<p>{</p>
<p>int xuhao=0,biaoshi={-1};</p>
<p>while(1)</p>
<p>{</p>
<p>printf("\n请选择查询要删除的记录的方式: 1.姓名2.来源或去向 3.日期 4.数目\n");</p>
<p>xuanze=getch();</p>
<p>xuanze=xuanze-48;</p>
<p>switch(xuanze)</p>
<p>{</p>
<p>case 1:</p>
<p>printf("请输入要查询的姓名:");</p>
<p>scanf("%s",linshi);</p>
<p>for(i=0;i<dijitiao;i++)</p>
<p>if(strcmp(jilu.xingming,linshi)==0) /*查询*/</p>
<p>{</p>
<p>xuhao++;</p>
<p>biaoshi=i;</p>
<p>printf("\n\n%10d.->",xuhao);</p>
<p>tishi=shuchu(i);</p>
<p>}</p>
<p>if(tishi!=CHENGGONG)</p>
<p>printf("未找到相关记录\n");</p>
<p>break;</p>
<p>case 2:</p>
<p>printf("请输入要查询的来源或去向:");</p>
<p>scanf("%s",linshi);</p>
<p>for(i=0;i<dijitiao;i++)</p>
<p>if(strcmp(jilu.laiyuan,linshi)==0) /*查询*/</p>
<p>{</p>
<p>xuhao++;</p>
<p>biaoshi=i;</p>
<p>printf("\n\n%10d.->",xuhao);</p>
<p>tishi=shuchu(i);</p>
<p>}</p>
<p>if(tishi!=CHENGGONG)</p>
<p>printf("未找到相关记录\n");</p>
<p>break;</p>
<p>case 3:</p>
<p>printf("请输入要查询的日期:");</p>
<p>scanf("%s",linshi);</p>
<p>for(i=0;i<dijitiao;i++)</p>
<p>if(strcmp(jilu.riqi,linshi)==0) /*查询*/</p>
<p>{</p>
<p>xuhao++;</p>
<p>biaoshi=i;</p>
<p>printf("\n\n%10d.->",xuhao);</p>
<p>tishi=shuchu(i);</p>
<p>}</p>
<p>if(tishi!=CHENGGONG)</p>
<p>printf("未找到相关记录\n");</p>
<p>break;</p>
<p>case 4:</p>
<p>printf("请输入要查询的数目:");</p>
<p>scanf("%s",linshi);</p>
<p>for(i=0;i<dijitiao;i++)</p>
<p>if(strcmp(jilu.shumu,linshi)==0)</p>
<p>{</p>
<p>xuhao++;</p>
<p>biaoshi=i;</p>
<p>printf("\n\n%10d.->",xuhao);</p>
<p>tishi=shuchu(i);</p>
<p>}</p>
<p>if(tishi!=CHENGGONG)</p>
<p>printf("未找到相关记录\n");</p>
<p>break;</p>
<p>default:printf("输入错误\n");</p>
<p>}</p>
<p>printf("请输入记录左上角对应的序号:");</p>
<p>xuanze=getch();</p>
<p>printf("\n");</p>
<p>xuanze=xuanze-48;</p>
<p>if(biaoshi!=-1 && xuanze<=xuhao && xuanze>0)</p>
<p>{</p>
<p>biaoshi=biaoshi;</p>
<p>printf("确认删除? <Y/N> \n");</p>
<p>xuanze=getch();</p>
<p>if(xuanze==\'Y\' II xuanze==\'y\')</p>
<p>{</p>
<p>strcpy(jilu].xingming,"\0");</p>
<p>strcpy(jilu].laiyuan,"\0");</p>
<p>strcpy(jilu].riqi,"\0");</p>
<p>strcpy(jilu].shumu,"\0");</p>
<p>printf("删除成功\n");</p>
<p>}</p>
<p>}</p>
<p>else printf("输入错误.\n");</p>
<p>printf("是否继续删除? <Y/N>\n");</p>
<p>xuanze=getch();</p>
<p>printf("\n");</p>
<p>if(xuanze==\'N\' II xuanze==\'n\')</p>
<p>break;</p>
<p>}</p>
<p>}</p>
<p>/*用于修改*/</p>
<p>void xiugai()</p>
<p>{</p>
<p>struct shouzhixinxi linshijilu;</p>
<p>int xuhao=0,biaoshi={-1};</p>
<p>while(1)</p>
<p>{</p>
<p>printf("\n请选择查询要修改的记录的方式: 1.姓名2.来源或去向 3.日期 4.数目\n");</p>
<p>xuanze=getch();</p>
<p>xuanze=xuanze-48;</p>
<p>switch(xuanze)</p>
<p>{</p>
<p>case 1:</p>
<p>printf("请输入要查询的姓名:");</p>
<p>scanf("%s",linshi);</p>
<p>for(i=0;i<dijitiao;i++)</p>
<p>if(strcmp(jilu.xingming,linshi)==0) /*查询*/</p>
<p>{</p>
<p>xuhao++;</p>
<p>biaoshi=i;</p>
<p>printf("\n\n%10d.->",xuhao);</p>
<p>tishi=shuchu(i);</p>
<p>}</p>
<p>if(tishi!=CHENGGONG)</p>
<p>printf("未找到相关记录\n");</p>
<p>break;</p>
<p>case 2:</p>
<p>printf("请输入要查询的来源或去向:");</p>
<p>scanf("%s",linshi);</p>
<p>for(i=0;i<dijitiao;i++)</p>
<p>if(strcmp(jilu.laiyuan,linshi)==0) /*查询*/</p>
<p>{</p>
<p>xuhao++;</p>
<p>biaoshi=i;</p>
<p>printf("\n\n%10d.->",xuhao);</p>
<p>tishi=shuchu(i);</p>
<p>}</p>
<p>if(tishi!=CHENGGONG)</p>
<p>printf("未找到相关记录\n");</p>
<p>break;</p>
<p>case 3:</p>
<p>printf("请输入要查询的日期:");</p>
<p>scanf("%s",linshi);</p>
<p>for(i=0;i<dijitiao;i++)</p>
<p>if(strcmp(jilu.riqi,linshi)==0) /*查询*/</p>
<p>{</p>
<p>xuhao++;</p>
<p>biaoshi=i;</p>
<p>printf("\n\n%10d.->",xuhao);</p>
<p>tishi=shuchu(i);</p>
<p>}</p>
<p>if(tishi!=CHENGGONG)</p>
<p>printf("未找到相关记录\n");</p>
<p>break;</p>
<p>case 4:</p>
<p>printf("请输入要查询的数目:");</p>
<p>scanf("%s",linshi);</p>
<p>for(i=0;i<dijitiao;i++)</p>
<p>if(strcmp(jilu.shumu,linshi)==0)</p>
<p>{</p>
<p>xuhao++;</p>
<p>biaoshi=i;</p>
<p>printf("\n\n%10d.->",xuhao);</p>
<p>tishi=shuchu(i);</p>
<p>}</p>
<p>if(tishi!=CHENGGONG)</p>
<p>printf("未找到相关记录\n");</p>
<p>break;</p>
<p>default:printf("输入错误\n");</p>
<p>}</p>
<p>printf("请输入记录左上角对应的序号:");</p>
<p>xuanze=getch();</p>
<p>xuanze=xuanze-48;</p>
<p>if(biaoshi!=-1 && xuanze<=xuhao && xuanze>0)</p>
<p>{</p>
<p>biaoshi=biaoshi;</p>
<p>printf("\n请输入新姓名:");</p>
<p>scanf("%s",linshijilu.xingming);</p>
<p>printf("\n请输入新收入来源或支出去向:");</p>
<p>scanf("%s",linshijilu.laiyuan);</p>
<p>printf("\n请输入新收入或支出的日期:");</p>
<p>scanf("%s",linshijilu.riqi);</p>
<p>printf("\n请输入新收入或支出的数目:");</p>
<p>scanf("%s",linshijilu.shumu);</p>
<p>printf("确认修改? <Y/N> \n");</p>
<p>xuanze=getch();</p>
<p>if(xuanze==\'Y\' II xuanze==\'y\')</p>
<p>{</p>
<p>strcpy(jilu].xingming,linshijilu.xingming);</p>
<p>strcpy(jilu].laiyuan,linshijilu.laiyuan);</p>
<p>strcpy(jilu].riqi,linshijilu.riqi);</p>
<p>strcpy(jilu].shumu,linshijilu.shumu);</p>
<p>printf("修改成功\n");</p>
<p>}</p>
<p>}</p>
<p>else printf("输入错误.\n");</p>
<p>printf("是否继续修改? <Y/N>\n");</p>
<p>xuanze=getch();</p>
<p>printf("\n");</p>
<p>if(xuanze==\'N\' II xuanze==\'n\')</p>
<p>break;</p>
<p>}</p>
<p>}</p>
<p>/*用于查询*/</p>
<p>void chaxun(void)</p>
<p>{</p>
<p>while(1)</p>
<p>{</p>
<p>printf("\n请选择查询方式: 1.姓名2.来源或去向 3.日期 4.数目\n");</p>
<p>xuanze=getch();</p>
<p>xuanze=xuanze-48;</p>
<p>switch(xuanze)</p>
<p>{</p>
<p>case 1:</p>
<p>printf("请输入要查询的姓名:");</p>
<p>scanf("%s",linshi);</p>
<p>for(i=0;i<dijitiao;i++)</p>
<p>if(strcmp(jilu.xingming,linshi)==0) /*查询*/</p>
<p>tishi=shuchu(i);</p>
<p>if(tishi!=CHENGGONG)</p>
<p>printf("未找到相关记录\n");</p>
<p>break;</p>
<p>case 2:</p>
<p>printf("请输入要查询的来源或去向:");</p>
<p>scanf("%s",linshi);</p>
<p>for(i=0;i<dijitiao;i++)</p>
<p>if(strcmp(jilu.laiyuan,linshi)==0) /*查询*/</p>
<p>tishi=shuchu(i);</p>
<p>if(tishi!=CHENGGONG)</p>
<p>printf("未找到相关记录\n");</p>
<p>break;</p>
<p>case 3:</p>
<p>printf("请输入要查询的日期:");</p>
<p>scanf("%s",linshi);</p>
<p>for(i=0;i<dijitiao;i++)</p>
<p>if(strcmp(jilu.riqi,linshi)==0) /*查询*/</p>
<p>tishi=shuchu(i);</p>
<p>if(tishi!=CHENGGONG)</p>
<p>printf("未找到相关记录\n");</p>
<p>break;</p>
<p>case 4:</p>
<p>printf("请输入要查询的数目:");</p>
<p>scanf("%s",linshi);</p>
<p>for(i=0;i<dijitiao;i++)</p>
<p>if(strcmp(jilu.shumu,linshi)==0)</p>
<p>tishi=shuchu(i);</p>
<p>if(tishi!=CHENGGONG)</p>
<p>printf("未找到相关记录\n");</p>
<p>break;</p>
<p>default:printf("输入错误\n");</p>
<p>}</p>
<p>printf("是否继续查询? <Y/N>");</p>
<p>xuanze=getch();</p>
<p>if(xuanze==\'N\' II xuanze==\'n\')</p>
<p>break;</p>
<p>}</p>
<p>}</p>
<p>/*将字符串转换为浮点数*/</p>
<p>double zhuanhuan(char *str)</p>
<p>{</p>
<p>int zhengshu=0,xiaoshu=0,neixing=1,zhishu,zhengfu=1;</p>
<p>double jieguo=0;</p>
<p>zhengshu=strlen(str);</p>
<p>switch(str)</p>
<p>{</p>
<p>case \'-\':</p>
<p>str=\'0\';</p>
<p>zhengfu=-1;</p>
<p>break;</p>
<p>case \'+\':</p>
<p>str=\'0\';</p>
<p>zhengfu=1;</p>
<p>break;</p>
<p>}</p>
<p>for(i=0;str!=\'\0\';i++)</p>
<p>if(str=\'.\')</p>
<p>{</p>
<p>zhengshu=i;</p>
<p>break;</p>
<p>}</p>
<p>for(i=0;str!=\'\0\';i++)</p>
<p>{</p>
<p>if(str!=\'.\' && neixing==1)</p>
<p>{</p>
<p>zhishu=zhengshu-i-1;</p>
<p>jieguo=jieguo+(str-48)*pow(10,zhishu);</p>
<p>}</p>
<p>else</p>
<p>{</p>
<p>if(str==\'.\')</p>
<p>neixing=0;</p>
<p>else</p>
<p>{</p>
<p>zhishu=i-zhengshu-1;</p>
<p>jieguo=jieguo+(str-48)*pow(10,zhishu);</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>if(zhengfu==-1)</p>
<p>return -jieguo;</p>
<p>return jieguo;</p>
<p>}</p>
<p>/*用于统计*/</p>
<p>void tongji(void)</p>
<p>{</p>
<p>double shumu=0,shumu2;</p>
<p>char riqi1,riqi2;</p>
<p>while(1)</p>
<p>{</p>
<p>printf("\n请输入起始日期(含该日,年四位,月日两位):");</p>
<p>scanf("%s",riqi1);</p>
<p>printf("\n请输入截止日期(含该日,年四位,月日两位):");</p>
<p>scanf("%s",riqi2);</p>
<p>if(strcmp(riqi1,riqi2)<0)</p>
<p>for(i=0;i<dijitiao;i++)</p>
<p>if(strcmp(riqi1,jilu.riqi)<=0&& strcmp(riqi2,jilu.riqi)>=0)</p>
<p>{</p>
<p>shumu2=zhuanhuan(jilu.shumu);</p>
<p>shumu=shumu+shumu2;</p>
<p>}</p>
<p>else printf("输入有误.\n");</p>
<p>printf("\n该时间段内总收支情况为:%.2f\n",shumu);</p>
<p>printf("\n是否继续统计? <Y/N>");</p>
<p>xuanze=getch();</p>
<p>printf("\n");</p>
<p>if(xuanze==\'N\' II xuanze==\'n\')</p>
<p>break;</p>
<p>}</p>
<p>}</p>
<p>/*导入文件上的信息,相当于初始化*/</p>
<p>int daoruxinxi()</p>
<p>{</p>
<p>FILE *fp;</p>
<p>if((fp=fopen("shouzhiguanli.txt","r+"))==NULL)</p>
<p>{</p>
<p>printf("当前收支情况文件不存在.\n");</p>
<p>if((fp=fopen("shouzhiguanli.txt","w+"))==NULL)</p>
<p>{</p>
<p>printf("未知错误导致未能建立新文件,按任意键结束程序.\n");</p>
<p>getch();</p>
<p>exit(0);</p>
<p>}</p>
<p>else</p>
<p>{</p>
<p>fclose(fp);</p>
<p>printf("建立新文件成功,是否开始新建记录. <Y\\N>\n");</p>
<p>xuanze=getch();</p>
<p>if(xuanze==\'Y\' II xuanze==\'y\')</p>
<p>xinzeng(dijitiao);</p>
<p>}</p>
<p>}</p>
<p>else</p>
<p>{</p>
<p>for(dijitiao=0;(dijitiao<TIAOSHU && !feof(fp));dijitiao++)</p>
<p>{</p>
<p>fscanf(fp,"%s ",jilu.xingming);</p>
<p>fscanf(fp,"%s ",jilu.laiyuan);</p>
<p>fscanf(fp,"%s ",jilu.riqi);</p>
<p>fscanf(fp,"%s ",jilu.shumu);</p>
<p>}</p>
<p>fclose(fp);</p>
<p>return CHENGGONG;</p>
<p>}</p>
<p>return SHIBAI;</p>
<p>}</p>
<p>/*主函数*/</p>
<p>void main()</p>
<p>{</p>
<p>if(daoruxinxi()==CHENGGONG) /*若导入成则开始主菜单*/</p>
<p>{</p>
<p>int xunhuan=1; /*用于控制循环*/</p>
<p>while(xunhuan)</p>
<p>{</p>
<p>printf("\n\n\n \37~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\37\n");/*以下输出提示信息*/</p>
<p>printf(" \23 导 入 收 支 情 况 成 功. \23\n");</p>
<p>printf(" \23~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\23\n");</p>
<p>printf(" \23 \1 1. 增 加 新 记 录 \23\n");</p>
<p>printf(" \23 \1 2. 删 除 已 有 记 录 \23\n");</p>
<p>printf(" \23 \1 3. 修 改 已 有 记 录 \23\n");</p>
<p>printf(" \23 \1 4. 查 询 已 有 记 录 \23\n");</p>
<p>printf(" \23 \1 5. 统 计 一 段 时 间 内 的 数 据 \23\n");</p>
<p>printf(" \23 \1 6. 退 出 该 系 统 \23\n");</p>
<p>printf(" \36~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\36\n\n");</p>
<p>printf("请选择要执行的操作:");</p>
<p>xuanze=getch(); /*选择操作*/</p>
<p>xuanze=xuanze-48; /*前面接收的是1的ASC码实际上是49而不是1,转换一下*/</p>
<p>switch(xuanze)</p>
<p>{</p>
<p>case ZENGJIA:xinzeng(dijitiao);break;</p>
<p>case SHANCHU:shanchu();break;</p>
<p>case XIUGAI:xiugai();break;</p>
<p>case CHAXUN:chaxun();break;</p>
<p>case TONGJI:tongji();break;</p>
<p>case TUICHU:xunhuan=0;break;</p>
<p>default:printf("输入错误.\n");</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>baocun(); /*保存更改*/</p>
<p>}</p>
<p>0</p>
<p>回答者:</p>
<p>█╬卍╬█ - 四级 2010-1-28 22:22</p>
<p>我来评论>></p>
<p>提问者对于答案的评价:</p>
<p>虽然回答得太迟...不过朋友一定是很认真写的代码.50分你应得的</p>
页:
[1]