财务管理
当前位置:首页 > 论文范文 > 财务管理 > 列表页

c语言课程设计家庭财务管理

小草范文网  发布于:2017-05-04  分类: 财务管理 手机版

篇一:c语言课程设计报告(答辩上交)

青岛理工大学

题目 《C语言程序设计》

家庭财务管理系统

指导教师: 王金龙 姓名: 吴玮 学号:

班级: 网络102

专业: 地点: 多媒体楼207

时间:

一、内容

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

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

2)添加模块:根据实际的收入或支出,添加相应的记录,条数不限。 3)查询模块:可以选择不同关键字输入,查找该条记录。 4)删除模块:若某条记录错误或者不需要则可以删除。

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

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

二、上机环境

操作系统:windows XP 开发工具:VC6.0++

三、函数调用关系图

四、各函数功能说明

1.系统主要函数及功能。 1.)add函数:功能为添加收入或支出的记录 2.)search函数:功能为查找联系人

输入关键字,从文件中搜索相应的记录并显示出来。 3.)delete_rec函数:功能为删除记录

若某条记录错误或者不需要则可以删除。 4.)show函数:功能为显示记录,将添加的记录显示在屏幕上。 5.)quit函数:功能为保存信息退出系统。

五、算法描述

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

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

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

六、程序运行效果图

1.添加联系人

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

2查询联系人

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

3 删除联系人

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

4 显示联系人

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

5退出

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

七、总结

本次对家庭财务管理系统的编写,我遇到了许多困难。主要原因不怎么擅长使用“指针”。在添加模块中,由于没有很好的理解指针中插入的专用句子,所以脱离书本的时候根本不知怎么开始,自己想了很久也没想出来,后面翻了书,把相关的句子抄上去后死记硬背了下来。p->next=head;head=p;在添加节点数是,未强调Recordcount数据类型。在写删除模块是也遇到了类似的问题。看了书上的一个例题,里面有两个指针,可是我的代码中只有一个,怎么办呢?模仿了书上的写法,第一次以失败告终,经过很多种修改后总结出失败的原因是该指针定义错误,针对该错误,经过很多的尝试终成功了。在显示函数中,自我感觉没有错误

了,可是每次在“一共收入,一共支出,当前余额”后面都显示了一长串数字,在快放弃时终于发现自己犯了一个很可笑的错,printf语言中居然用了取地址符。在保存函数中也犯了一些常见的错,在写入文件中居然用了fscanf语句。

八、参考文献

谭浩强.C程序设计(第四版).清华大学出版社。

九、程序清单(双列排版,小五号字)

#include <stdio.h> #include<stdlib.h> #include<string.h> struct F_Data { int year; //年 int month;//月int data; //日期

float amout; //金额

char name[20];//姓名

int type;//收入或支出类型 char comment[100]; //备注struct F_Data*next; //定义一个指针

};

void main() {

int i,w=1; void add(); void search(); void delete_rec(); void show();do{

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

printf("欢迎使用家庭财务管理系统\n&qu

c语言课程设计家庭财务管理

ot;); printf("1:添加记录\n"); printf("2:查询记录\n"); printf("3:删除记录\n"); printf("4:显示所有记录\n"); printf("0:退出\n"); scanf("%d",&i);switch(i)

{

case 1:add();break;case 2:search();break;case 3:delete_rec();break;case 4:show();break;}

}while(w==1);

}void add() { system("cls");/*清屏*/int Recordcount; struct F_Data*head;

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; /*插入一个结点 */

篇二:家庭财务管理课程设计报告

信息工程学院

项目名称:

项目组长:

项目成员:

班级名称:

专业名称:

完成时间: 家庭财务管理系统的分析和设计 叶 杨 刘 11信管3(本) 信管管理和信息系统 2012年5月21日

信息工程学院制

一、 案例描述(小四号字体,段前断后0.5行)

1.、总体描述

家庭财务管理系统是一个典型的管理信息系统,主要运用添加、删除、修改、查询、显示等操作,给用户提供了一个在计算机上实现家庭的各项财务收支管理的平台,能够为每一

个家庭的管理者提供充足的信息和快捷的查询手段,极大地提高家庭财务管理的效率,方便家庭管理者的合理理财。

2、模块描述

1)菜单设计

主界面由封面图案、收入管理、支出管理、统计四大部分组成。其中,收入管理和支出管理两部分中各包含添加、查询、删除、修改、显示五大功能,而统计部分则包含统计总收入(总支出)的功能。封面主要利用ptintf函数,摆出各式各样的图形,又用上了system()更改了页面的背景颜色、字体颜色、家庭财务管理系统的标题,以求达到美化封面的作用,而其余六大功能则是完善该家庭财务管理系统。

2)load模块

通过创建链表完成初始化。链表创建完成后,把读取的资料先放在linshi中。该模块的创建为实现接下来的一系列功能打下坚实基础。

3)cover模块

作为程序的封面,对主界面的颜色、尺寸、图案进行设置,起到美化作用。同时,把程序里的每一项主要功能的名称显示到主界面上,使界面更加亲近、友好,方便用户进入并进行使用,在不知不觉中提升了程序的档次。

4)add模块:

用于添加用户的信息。创建用户信息,依次输入家庭成员的姓名、收入(支出)的具体日期(可根据系统已有时间添加)、收入(支出)金额、收入(支出)备注等详细信息,完善用户的资料,并将其保存在文件记录中。添加完一人信息后,界面提示用户“是否继续添加?(Y or N)”。若选择继续添加,则重复上述步骤,添加用户信息,并将其详细信息一并保存到文件记录中,文件记录加1。其中,用type判断是收入还是支出。

5)search模块

用于查询已添加的用户的信息。以日期、姓名、金额等其中任意一项为关键词进行搜索并显示用户的详细信息。若输入的关键词不存在,则提示用户“选择错误,请重新输入”。若输入关键词正确,则显示该联系人的所有相关信息。

6)delete模块

用于删除用户不需要或输入错误的用户的相关信息。首先,以姓名为关键词进行搜索并显示该联系人的所有已输入的信息。然后,提示用户需要删除该联系人的第几条信息,删除该条完毕后,提示用户“是否继续删除?(Y or N)”。若当前家庭成员所有信息均已删除,则再继续删除时,提示“家庭财务管理内无任何信息!”。

7)show模块

用于显示已输入的相关信息。该模块建立后,用户通过点击该模块的名称,系统先提示用户选择以同月、同日、姓名、全部信息等其中一项关键词为显示依据,选择所需要显示的同一类型的详细信息,以便使所有信息一目了然,有利于用户核对之前所输入的信息,方便用户使用。

8)save模块

用于保存之前用户输入的所有用户的有用信息。该模块建立后,用户之前所输入的所有用户的详细信息皆可保存到指定文件中,方便用户在下一次使用时仍能轻松、便捷地找到其所需的有用信息。

9)修改模块

用于重新输入用户需要却输入错误的用户的相关信息。先以姓名为关键词查找到需要修改的用户的所有相关信息。然后删除该条输入错误的信息,并重新输入正确有效的信息,最后保存。

二、 界面设计

菜单:

序号1~5:进行收入管理

序号6~10:进行支出管理

序号11~12:进行统计

本软件界面友好,不难操作,根据页面提示进行操作即可。

三、 模块化设计方案

1、系统主要函数及功能(五号黑体)

1)load函数: 创建链表,打开并读取文件,保存相关资料,起到一定的储存功能。

2)添加功能: 添加用户的相关收支信息,用户可根据选项选择是用系统时间还是自己添加时间,然后再输入相关用户姓名、金额、备注等基本信息,之后可自行选择是否继续添加,最后系统会自动保存用户信息,返回系统用户界面。

3)删除功能:用户输入需要删除的姓名后系统根据用户输入信息删除,之后还可自行选择是否继续删除,待所有删除完毕后,返回系统用户界面。

4)修改功能:用户根据系统提示输入需要修改的姓名,

然后根据用户输入信息进行

删除、重新添加,之后自行选择是否继续,在全部修改成功之后,返回系统用户界面。

5)查询功能:用户根据系统提示输入判断资料,系统根据用户输入的信息进行查询,在查询成功之后,之后自行选择是否继续,否,则返回系统用户界面。

6)显示功能:系统将根据用户的选择显示家庭财务管理系统中的相关信息。

7)统计功能:系统将根据用户需要统计出总收入或总支出。

8)退出功能:完成所有操作后,用户可以退出家庭财务管理系统。

9)main函数:主函数提供用户操作界面(主菜单),供用户选择相应的功能模块。

2、主函数调用各功能函数流程图

四、 数据结构描述

#include<stdio.h> #include<stdlib.h> #include<malloc.h>

#include<string.h> #include<conio.h>

#define len sizeof(struct manage)

struct massage

{ int year;int month;int day;int type; //1表示收入,-1表示支出 char name[20];float money; char beizhu[100];};

struct manage

{struct massage info; struct manage*next; };

int n,a=0; //计算结点数struct manage*head=NULL; /使首结点为空 ,全局变量

五、 算法设计

篇三:518家庭财务管理系统

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

#include "conio.h"

struct node{

int sign;

int num;

float year_total[10000][2];

float mon_total[10000][13][2];

float time_money[10000][13][32][2];

char user[50];

char name[50];

char password[50];

char memo[20][1000];

char mt[20][20];

struct node *next;

};

struct ft{

float f_y[10000][2];

float f_m[10000][13][2];

};

int year,mon;

int in_cmp(const void *_a,const void *_b){

struct node *a=(struct node*)_a,*b=(struct node*)_b;

if(a->mon_total[year][mon][0] != b->mon_total[year][mon][0])

return (int)(b->mon_total[year][mon][0] - a->mon_total[year][mon][0]+0.5); return (int)(a->num - b->num+0.5);

}

int out_cmp(const void *_a,const void *_b){

struct node *a=(struct node*)_a,*b=(struct node*)_b;

if(a->mon_total[year][mon][1] != b->mon_total[year][mon][1])

return (int)(a->mon_total[year][mon][1] - b->mon_total[year][mon][1]+0.5); return (int)(a->num - b->num+0.5);

}

int in_out_cmp(const void *_a,const void *_b){

struct node *a=(struct node*)_a,*b=(struct node*)_b;

if((b->mon_total[year][mon][0] - b->mon_total[year][mon][1]) (a->mon_total[year][mon][0] - a->mon_total[year][mon][1]))

return (int)((b->mon_total[year][mon][0] - b->mon_total[year][mon][1]) (a->mon_total[year][mon][0] - a->mon_total[year][mon][1])+0.5); - !=

return (int)(a->num - b->num+0.5);

}

int is_leap(int n){

if((n%4==0 && n%100) || (n%100==0 && n%400==0))

}

void All_tot(struct node *p);

void P_info(struct node *p);

void Rank(struct node* p);

void Add_user(struct node* pp);

void Del_user(struct node* pp);

void Input_info(struct node* p);

void Login();

void Ord_user(struct node* p);

void Memo(struct node *p);

void Fhead_user(struct node* p);

int Wellcom();

void Start();

void Load();

void P_info(struct node *p){

int i,j,k,avr;

char s[100];

printf(" 查看个人信息\n");

printf("88888888888888888888888888888888888888888888888888888888888888888888888888888888\n");

printf(" 1.基本信息\n");

printf(" 2.收支信息\n");

printf(" 3.所有信息\n");

printf(" 4.返回\n"); printf(" 5.退出\n\n"); for(i=0;i<31;i++) putchar(8); return 1; else return 0; printf(" 请选择 (输入数字代号,按回车确定)");

for(fgets(s,50,stdin);strlen(s)>2 || strlen(s)<1 || s[0]<'1' || s[0]>'5';fgets(s,50,stdin)){

printf("输入格式错误,请重新输入:(输入数字1-5中的一个,按回车确定)");

} for(i=0;i<38;i++) putchar(8);

if(s[0]=='1'){

char sel[100];

system("cls");

printf(" 基本信息\n");

printf("888888888888888888888888888888888888\n\n");

if(p->sign) printf(" 家长用户\n");

else printf(" 普通用户\n");

printf(" 编号:%d\n",p->num);

printf(" 用户名:%s\n",p->user);

printf(" 姓名:%s\n",p->name);

printf(" 密码:%s\n\n",p->password);

printf("888888888888888888888888888888888888\n");

printf("\n1.修改\n");

printf("2.返回\n");

printf("3.退出\n\n");

printf("请选择(输入数字代号,按回车确定)");

for(i=0;i<30;i++) putchar(8);

for(fgets(sel,50,stdin);strlen(sel)>2 || strlen(sel)<1 || sel[0]<'1' || sel[0]>'3';fgets(sel,50,stdin)){

printf("\n输入格式错误,请重新输:(输入1,2,3或4,按回车确定)");

} for(i=0;i<31;i++) putchar(8);

if(sel[0]=='1'){

FILE *fp=fopen("data","rb");

int sum;

char sl[100];

struct node *p1,*head;

struct ft *f_t=(struct ft*)malloc(sizeof(struct ft));

p1=head=(struct node *)malloc(sizeof(struct node));

fread(&sum,sizeof(int),1,fp);

for(i=0;i<sum;i++){

fread(p1,sizeof(struct node),1,fp);

p1->next=(struct node*)malloc(sizeof(struct node));

p1=p1->next;

p1->next=NULL;

}

fread(f_t,sizeof(struct ft),1,fp);

fclose(fp);

system("cls");

printf("修改信息\n");

printf("88888888888888888888888888888888888888\n\n");

printf(" 1.修改用户名\n");

printf(" 2.修改密码\n");

printf(" 3.修改姓名\n");

printf(" 4.返回\n");

printf(" 5.退出\n\n");

printf("请选择(输入数字代号,按回车确定)");

for(i=0;i<30;i++) putchar(8);

for(fgets(sl,50,stdin);strlen(sl)>2 || strlen(sl)<1 || sl[0]<'1' || sl[0]>'5';fgets(sl,50,stdin)){

printf("\n输入格式错误,请重新输入:(输入1,2,3,4或5,按回车确定):");

for(i=0;i<35;i++) putchar(8);

}

if(sl[0]=='1'){

int ok=1;

char user[100];

system("cls");

printf("旧用户名:%s\n",p->user);

printf("\n请输入新用户名:");

for(;;){ fgets(user,45,stdin);

user[strlen(user)-1]='\0';

if(strlen(user)>20||strlen(user)<1||user[0]=='\n') {printf("\n用户名长度必须在1-15位之间,请重新输入:");continue;}

ok=1; for(i=0,p1=head;i<sum;i++,p1=p1->next){ if(strcmp(user,p1->user)==0){ ok=0; break; } } if(ok) {ok=1;break;} else printf("\n对不起,该用户名已存在,请重新输入:"); } fp=fopen("data","wb"); fwrite(&sum,sizeof(int),1,fp); for(p1=head,i=0;i<sum;i++,p1=p1->next){ if(strcmp(p->user,p1->user)==0){ strcpy(p->user,user); strcpy(p1->user,user);

}

fwrite(p1,sizeof(struct node),1,fp);

} fclose(fp); printf("\n修改成功!\n"); fwrite(f_t,sizeof(struct ft),1,fp);

_sleep(1500);

system("cls");

P_info(p);

}

else if(sl[0]=='2'){

char password[25],c;

printf("\n请输入旧密码:");

for(;;){ for(i=0;;){ c=getch();} if(strcmp(p->password,password)==0) break; else printf("\n密码错误,请重新输入:"); if(c==13){password[i++]=0;break;} if(c != 8) password[i++]=c; if(c==8){ } password[i?i--:0]=0; if(strlen(password)>0){ } putchar( c ); putchar( ' ' ); putchar( c ); else putchar('*'); } printf("\n请输入新密码:"); for(;;){ for(i=0;;){} if(strlen(p->password)>20) printf("\n密码长度超过20位,请重新输入:"); else if(p->password[0]=='\0') printf("\n密码不能为空,请重新输入:"); c=getch(); if(c==13){p->password[i++]=0;break;} if(c != 8) p->password[i++]=c; if(c==8){ p->password[i?i--:0]=0;if(strlen(p->password)>0){ putchar( c );} putchar( ' ' ); putchar( c ); } else putchar('*');

本文已影响