文档库 最新最全的文档下载
当前位置:文档库 › C语言课程设计——家庭财务管理系统

C语言课程设计——家庭财务管理系统

C语言课程设计——家庭财务管理系统
C语言课程设计——家庭财务管理系统

课程设计报告课程设计题目:家庭财务管理系统

学生姓名:

专业: 信息工程

班级:

指导教师:

2018年1月8日

1.需求分析

根据家庭账务管理的需要,建立一个“家庭账务管理系统”,以方便对家庭日常收入及支出进行记录和管理。该系统要求:①家庭月收入管理②家庭月支出管理③统计家庭总收入/总支出④系统提供收入/支出的添加、删除和修改功能。

2. 总体设计

根据以上分析,本家庭账务管理系统主要包括:

①从键盘键入家庭月收入、月支出数据;

②查询月收入、月支出明细;

③删除收入、支出数据;

④修改收入、支出数据;

⑤统计总收入/总支出;

⑥退出系统。

除main()函数之外,系统还定义了以下函数来实现各部分内容:

①add_income():添加收入数据函数。

②add_payout():添加支出数据函数。

③search_data():查找数据函数。

④initialize():初始化函数,读取文本数据。

⑤show_info():显示数据函数。

⑥count_total():统计函数,统计总收入、总支出。

⑦update_data():修改信息函数。

⑧delete_data():删除数据函数。

⑨quit():退出函数。

程序结构功能图如下:

3.详细设计3.1收入管理

3.2支出管理

4.测试结果

4.1 程序运行主菜单

4.2 添加收入测试

4.3 查询收入明细测试

4.4 删除收入测试

4.5 修改收入测试

4.6 添加支出测试

4.7 查询支出明细测试

4.8 删除支出测试

4.9 修改支出测试

4.10 统计总收入/支出测试

4.11 退出系统测试

5.软件操作使用说明书

本系统采用命令行对话方式进行操作,运行后出现主界面(如下图所示),然后按照主界面菜单指引操作即可。

6.总结

编写程序之前要有一个整体的思路,不能写到哪里算哪里。这样很容易遗漏,连续性也不好。通过本次的课程设计让我对于数组、文件的存放、循环结构等知识有了更加透彻的理解。希望在以后的课程设计中对于知识的运用能够更加的熟练。

代码:

#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("\t\t ~~~~~~~~~~~~~~~~~~~~~~\n");

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

printf("\t\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\t退出:0.退出系统\n");

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

}

void main()

{

int selected=0;

initialize();

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

{

system("cls");

menu();

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

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

{

printf("\t\t>输入有误!请选择(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("\t\t>请输入年月(YYYY/M)");

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

printf("\t\t>请输入家庭成员姓名(最大长度为%d):",MAXNAME-1);

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

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

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

printf("\t\t>请输入备注(最大长度为%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("\t\t>请输入要查询的年月(YYYY/M)");

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

{

printf("\t\t>输入有误\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("\t\t>没有找到数据\n");

}

printf("\t\t>继续查找其他数据?(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;

int count=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;

相关文档