C语言家庭财务管理

时间:2024.4.20

宁波大红鹰学院

信息工程学院

课程设计报告

项目名称:家庭财务管理系统设计

项目组长:何洁

项目成员:何洁,潘昇琳,王树康

班级名称:10信管4

专业名称:信息管理与信息系统

完成时间:20##年5月30日

信息工程学院制

一 案例描述

1.总体描述

家庭财务管理系统主要是对家庭成员的收入,支出,进行添加,删除,查询等操作,并能统计总收入和总支出。该软件给家庭成员提供了一个管理家庭财务的平台。

2.模块描述

1)菜单设计:本系统提供简单易操作的界面。有提示,帮助用户根据需要对家庭财务管理系统进行操作。

2)添加模块:根据实际的收入或支出,添加相应的记录,条数不限。

3)查询模块:可以选择不同关键字输入,查找该条记录。

4)删除模块:若某条记录错误或者不需要则可以删除。

5)显示模块:按照添加的先后顺序依次把记录显示在屏幕上,并显示总收入和总支出以及余额。

6)退出模块:退出财务管理系统并保存文件。

二 界面设计

界面有相应的选择,根据自己的需要对该管理系统进行添加,查找,删除,显示功能操作。

本软件界面友好,不难操作,用户可根据自己的需要按提示进行。

三 模块化设计方案

1.系统主要函数及功能

1)  DataInit函数:功能为数据初始化

                将数据从硬盘传到内存。                                                                          

2)  add函数:功能为添加收入或支出的记录

3)  search函数:功能为查找联系人

               输入关键字,从文件中搜索相应的记录并显示出来。

4)  delete_rec函数:功能为删除记录

                  若某条记录错误或者不需要则可以删除。

5)show函数:功能为显示记录

              将添加的记录显示在屏幕上。

6)quit函数:功能为保存信息退出系统

2.主函数调用各功能函数流程

四.数据结构描述

struct F_Data

{

       int year;        //年

       int month;      //月

       int data;        //日期

       float amout;     //金额

    char name[20];   //姓名

    int type;         //收入或支出类型

       char comment[100];    //备注

       struct F_Data*next;    //定义一个指针

};   

该数据结构为链表,是一种动态进行存储分配的结构。链表的每一个一个节点中包含了一个指针变量,用它存放下一个结点的地址,环环相扣,中间决不能断开,该指针指向一个struct F_Data类型的数据。链表中各元素在内存中可以不是连续存放的。

五.算法设计

添加

在主菜单选择添加选项后,系统会依次让用户输入年月日,并且限定月份输入时要在1至12内,如果符合要求则继续执行,输完整条记录。动态链表会根据用户的使用情况动态调整内存大小。插入一个结点到已有链表后,head指向插入的结点,该结点指向head原来所指的结点。每添加一条记录后接点随即加一。

查询

在主菜单选择查询选项后,选择查询方式,1.按姓名查 2.按备注查。然后按提示输入相应的信息姓名(或备注),系统会根据信息用一个指针从这个链表的第一个结点依次往后开始查询,若某个结点符合则输出该记录的信息,若指向NULL即最后一个结点也查询完毕依然没找到,则返回主菜单。

删除

输入需要删除的姓名和金额,系统会根据信息用一个q指针从这个链表的第一个结点依次往后开始查询,并将已查询过的结点赋给另一个p指针。若某个结点符合则显示该记录的信息,并让用户再次确认是否删除。若指向NULL即最后一个结点也查询完毕依然没找到,则则返回主菜单。如果确定删除该结点,则q所指的结点的前一个结点(即p所指的结点)指向该接点所指向的下一个结点,也就是将q所指的结点从原来的链表中分离出来。每删除一条记录后接点随即减一。

六. 程序运行结果

1.添加联系人

添加记录时限定月份在1~12月之间,否则无法添加,每添加一条记录后就返回主菜单,链表中插入了该结点。

2查询联系人

查询记录时,可以选择备注或者姓名进行查找。若选择按姓名查找,则在输入名字后,系统会根据添加的先后顺序,在屏幕上依次显示出该联系人的全部记录。

3 删除联系人

选择删除选项后,界面会让使用者输入要删除者的姓名及金额,并根据输入的信息显示该条记录,并且为了防止意外删除而有提示是否删除,经使用者再三确认后便删除该记录。

4 显示联系人

在菜单中选择显示选项后,系统会把所有的记录按照先后顺序依次逐条显示在界面上,并且还计算出了一共的收入,一共的支出及当前余额。

5退出

在菜单中选中该选项后,系统会把所有的资料都保存到文件中,然后关闭该系统。

七. 总结

1.工作时间

通讯录界面——1星期

添加的实现——1星期

查询的实现——1星期

删除的实现——1星期

显示实现——1星期

退出的实现——1星期

程序初步完成——3星期

整理修改程序——1星期

报告的制作——1星期

2.  分工情况

何洁:设计程序的整个框架,编写add函数,delete_rec函数,并对初步完成的整个程序做调试修改。制作报告的案例描述,模块设计方案,数据结构描述,总结。

潘昇琳:编写search函数,quit函数,制作报告的封面,流程图,界面设计。

王树康:编写DataInit函数,show函数,算法设计,程序运行结果。

3.   心得体会

本次对家庭财务管理系统的编写,我遇到了许多困难。主要原因不怎么擅长使用“指针”。在添加模块中,由于没有很好的理解指针中插入的专用句子,所以脱离书本的时候根本不知怎么开始,自己想了很久也没想出来,后面翻了书,把相关的句子抄上去后死记硬背了下来。p->next=head;head=p;在写删除模块是也遇到了类似的问题。看了书上的一个例题,里面有两个指针,可是我的代码中只有一个,怎么办呢?模仿了书上的写法,第一次以失败告终,经过很多种修改后总结出失败的原因是该指针定义错误,针对该错误,经过很多的尝试终成功了。在显示函数中,自我感觉没有错误了,可是每次在“一共收入,一共支出,当前余额”后面都显示了一长串数字,在快放弃时终于发现自己犯了一个很可笑的错,printf语言中居然用了取地址符,真是苦笑不得。在保存函数中叶犯了一些常见的错,在写入文件中居然用了fscanf语句,因此,一开始打开该系统时总是什么记录也没有,后来老师给我指出了这个错误,在修改之后还是不能显示之前的记录,请教其他同学后才发现主函数中没有调用数据导入函数,在修改之后,一个系统就完成了。

我们也有了一些感慨:我们平时的一些基础学习真的很重要.总而言之,这次的报告让我们获益匪浅。

附页(源代码附加注释)

   以下是添加模块代码  

void add()

{

    system("cls");              /*清屏*/

    struct F_Data *p=NULL;     /*定义pNode为struct F_Data类型指针*/

    p=(struct F_Data*)malloc(sizeof(struct F_Data));   /*运行时动态调整所占内存                    的大小*/

    printf("请输入年份:");

    scanf("%d",&p->year);

    printf("请输入月份:");

    scanf("%d",&p->month);

if((p->month>0)&&(p->month<13))     /*限定月份为1~12 */

    printf("请输入日期:");

    scanf("%d",&p->data);

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

    scanf("%f",&p->amout);

    printf("请输入姓名:");

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

    printf("收入按1,支出按0:");

    scanf("%d",&p->type);

    printf("请输入类型:");

    scanf("%s",p->comment);

    p->next=head;           /*插入一个结点 */

        head=p;

    Recordcount++;          /*结点数加一 */

}

 system("PAUSE");            /*停顿*/

}

 在菜单界面选择“添加”选项,界面会依次显示年份,月份,且限定月份为1~12,再显示日期,金额,姓名,type,类型逐个填写,然后返回到菜单界面。

  

以下是查询模块代码

void search()

{

    system("cls");                          /*清屏*/

char name[20];

int type;

int choice;

struct F_Data*p=NULL;                      /*定义pNode为struct F_Data类型指针*/

   printf("1按姓名查找\n2按备注查找\n ");

    printf("请输入你的选择:");

    scanf("%d",&choice);

    if(choice==1)

    {

        printf("请输入姓名:");

        scanf("%s",name);

        for(p=head;p!=NULL;p=p->next)  /*从链表的第一个结点到尾结点 */

        if(strcmp(p->name,name)==0)     /*如果输入的name和结点中的name一样 */

        {  

            printf("%d\t",p->year);    

            printf("%d\t",p->month);

            printf("%d\t",p->data);

            printf("%.2f\t",p->amout);

            printf("%s\t",p->name);

            printf("%d\t",p->type);

            printf("%s\n",p->comment);

        }

    }

    if(choice==2)

    {

        printf("请输入类型:1收入 0支出\n ");

        scanf("%d",&type);

        for(p=head;p!=NULL;p=p->next)

        if(p->type==type)            /*如果输入的type和结点中的type一样 */

        {

            printf("%d\t",p->year);

            printf("%d\t",p->month);

            printf("%d\t",p->data);

            printf("%.2f\t",p->amout);

            printf("%s\t",p->name);

            printf("%d\t",p->type);

            printf("%s\n",p->comment);

        }

    }

    system("PAUSE");                  /*停顿*/

}

 在菜单界面选择“查询”选项,界面会让你选择查找的方式 :1按姓名查找2按类型查找,用户可以根据自己的需要进行选择,按1就输入联系人的姓名,按2就输入类型,系统会进行查询,如果有就显示该条记录。

以下是删除模块代码     

void delete_rec()

{

system("cls");                           /*清屏*/

char name[20];

float amout;

int choice;

struct F_Data *p=NULL,*q=NULL;   /*定义p和q都为struct F_Data类型指针*/

p=head;      /*p指向第一个结点 */

q=head;      /*q指向第一个结点 */

printf("请输入要删除者的姓名:");

scanf("%s",name);  

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

scanf("%f",&amout);

for(;q!=NULL;q=q->next)   /*q指针从链表的第一个结点到尾结点 */

{

if((head->amout==amout)&&(strcmp(head->name,name)==0)) /*如果头结点符合要求 */

  {

            printf("%d\t",q->year);

            printf("%d\t",q->month);

            printf("%d\t",q->data);

            printf("%.2f\t",q->amout);

            printf("%s\t",q->name);

            printf("%d\t",q->type);

            printf("%s\n",q->comment);

            printf("确认删除?\n 1是\n 2否\n");

            scanf("%d",&choice);

            if(choice==1)

            {

                head=q->next;    /*删除头结点 */

                Recordcount--;   /*结点数减一*/

            }

            else break;

   }

else

   {

      if((q->amout==amout)&&(strcmp(q->name,name)==0))  /*如果结点符合要求 */

     {

           {

           printf("%d\t",q->year);

            printf("%d\t",q->month);

            printf("%d\t",q->data);

            printf("%.2f\t",q->amout);

            printf("%s\t",q->name);

            printf("%d\t",q->type);

            printf("%s\n",q->comment);

            }

            printf("确认删除?\n 1是\n 2否\n");

            scanf("%d",&choice);

            if(choice==1)

            {

             p->next=q->next;  /*删除一个结点*/

            Recordcount--;       /*结点数减一*/

            }

            else break;

      }

     else   

     {

     p=q;   /*p后移一 个位子*/

     }

                   

   }

}

system("PAUSE");                /*停顿*/

}

选择删除选项后,界面会让使用者输入要删除者的姓名及金额,并根据输入的信息显示该条记录,并且为了防止意外删除而有提示是否删除,经使用者再三确认后便删除该记录。

以下是显示模块

void show()

{

system("cls");                        /*清屏*/

struct F_Data*p=NULL;              /*定义p和q都为struct F_Data类型指针*/

float j=0.0,i=0.0,w=0.0;

for(p=head;p!=NULL;p=p->next)    /*从链表的第一个结点到尾结点 */

{  

    printf("%d\t",p->year);

    printf("%d\t",p->month);

    printf("%d\t",p->data);

    printf("%.2f\t",p->amout);

    printf("%s\t",p->name);

    printf("%d\t",p->type);

    printf("%s\n",p->comment);

 if(p->type==1)    

    j+=p->amout;  /*把type=1记录中的金额全部加给j*/

 else

   i+=p->amout;

}

    printf("一共收入:%.2f\n",j); 

printf("一共支出:%.2f\n",i);

w=j-i;

printf("当前余额:%.2f\n",w);

    system("PAUSE");               /*停顿*/

}

在界面选择显示选项后,屏幕上会把每条记录依次显示出来,并把总收入和总支出及目前余额也统计并显示出来。

更多相关推荐:
分公司财务管理秘籍

分公司财务管理秘籍分公司是企业在外地经营业务的分支机构目前中国很多大型企业都在全国各地设立了分公司分公司通常是总公司支柱业务或核心业务的经营者在一定程度上起到了巩固产品市场扩大销售渠道减轻库存积压获取最新市场情...

100句管理名言

100句管理名言1宁可小才大用不可大材小用2尺有所短寸有所长用人之长不挑人之短善用人者无不可用之人3灵活要有原则原则不可灵活4不能有活无人做也不可有人无活做更可怕的是一件事许多人在做遇责任则无人承担遇功劳则人人...

财务管理制度

高庄小学财务一财务工作指导思想任务基本职能学校财务工作是整个学校工作的重要组成部分也是整个国家财政工作的一个有机组成部分学校各项资金的安排使用要贯彻执行党和国家的有关方针政策要为学校各项工作广大师生员工的学习生...

公司财务管理制度与规定2

财务部管理手册中国家装培训财务部管理手册设计名家建筑设计名家工程有限责任公司经理人系统资料版权汇众所有财务部管理手册国家装培训目录目录设计名家公司财务管理制度与规定一关于财务人员二会计工作三财务部工作职责及行为...

财务管理对策

摘要中小企业是我国国民经济的重要力量但由于宏观经济环境和企业自身的问题中小企业的财务管理工作存在很多问题严重影响了企业的经济效益在分析中小企业财务管理问题的基础上提出了加强其管理的相关对策关键字中小企业财务管理...

富爸爸财务自由之路 名言

富爸爸財務自由之路1現金流象限EEmployee追求保障福利SSelfemployed完美主義獨立性強不願被干涉BBusinessowner喜歡分配工作領導力經商技能IInvestor用錢來賺錢2B的座右銘如果...

财务管理

关键词财务风险成因表现形式防范对策摘要在市场经济条件下几乎所有的财务活动都有风险财务管理的每一个环节都不可避免的要面对大小不同的风险狭义的企业财务风险也称筹资风险主要是指在筹资活动中利用财务杠杆可能导致企业股权...

财务管理调查报告

第1页财务管理调查报告安徽农业大学经济管理学院11级财务管理2班11财管2班吴顺志陈亮方玉勇郑衡第2页一实习任务专业调查是财务管理专业的必修课是财务管理专业实践教学环节的重要组成部分安排学生在第六学期暑假完成通...

初级财务管理综合案例分析

会计学院专业班级11级财务管理班姓名学号实验指导老师会计学院学生实验报告实验一财务管理目标协调与环节分析可口可乐决胜奥运案例分析4课时实验目的通过对案例进行分析使学生领会企业理财的目标及理财环节以便明确理财方向...

刘彦斌51条理财名言

刘彦斌51条理财名言1一个人一生离不开三件事健康法律和财务我们学校教育中缺乏财商教育现在许多孩子都习惯于看到一件满意的东西就朝爸爸妈妈开口我要买但是钱是哪里来的如何去衡量价格和价值等都不知道我们要从小学就倡导财...

刘彦斌51条理财名言

1一个人一生离不开三件事健康法律1一个人一生离不开三件事健康法律和财务一个人一生离不开三件事健康法律财务我们学校教育中缺乏财商教育现在许多孩子都习惯于看到一件满意的东西就朝爸爸妈妈开口我要买但是钱是哪里来的如何...

理财名言

刘彦斌的51条理财名言1一个人一生离不开三件事健康法律和财务我们学校教育中缺乏财商教育现在许多孩子都习惯于看到一件满意的东西就朝爸爸妈妈开口我要买但是钱是哪里来的如何去衡量价格和价值等都不知道我们要从小学就倡导...

财务管理名言(19篇)