个人财务管理系统
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
八、参考文献
【1】C语言程序设计教程(第二版) 李春葆 曾平 喻丹丹
九、程序清单(双列排版,小五号字)
#include<stdio.h> #include<string.h> #define null 0 #define max 20 #define ok 1 struct record{ /*结构体record*/ char date[20]; /*日期*/ char operate[20]; /*操作*/ int num; /*金额*/ }; struct list_record{ char account[20]; /*账号*/ char code[20]; /*密码*/ char name[20]; /*姓名*/ int rec_len; /*记录条*/ struct record rec[max]; /*结构体声明*/ }r[max]; int old_record( struct list_record r[]) /*结构体list record r【】*/ { int i; for(i=0;i<3;i++) r[i].rec_len=4; strcpy(r[0].account,"1001"); strcpy(r[1].account,"1002"); strcpy(r[2].account,"1003"); strcpy(r[0].code,"101"); strcpy(r[1].code,"102"); strcpy(r[2].code,"103"); strcpy(r[0].name ,"lihailong"); strcpy(r[1].name ,"lining"); strcpy(r[2].name ,"changle"); strcpy(r[0].rec[0].date,"12-06-21"); /*记录日期*/ strcpy(r[0].rec[1].date,"12-06-22"); strcpy(r[0].rec[2].date,"12-06-23"); strcpy(r[0].rec[3].date,"12-06-24"); strcpy(r[1].rec[0].date,"12-06-25");
《C语言程序设计》
题目
个人财务管理系统
指导教师: 班级:
姓名:
学号:
一、内容(个人财务管理系统)
此系统是面对用户而设计的,所以设计理念就是要方便于用户,用 户在系统中可以进行查找,添加,删除等操作,但都必须以时间输 入。如果用户输入三次账号都错误,系统就会自动退出。 (1)void save( )函数 和load( )函数。 这两个函数的功能是在系统调用了old_record( )这个函数之后,结 构体内就有了所有用户的所有信息。Save( )函数是将所有的信息都存入 文件中,Load ( )函数的作用则是把存入的文件中的信息读出来。 (2)lookup_accounts()函数和check_code( )函数: 这两个函数的功能主要是用来核对用户的身份。根据用户输入的帐 号与系统中所有的帐号进行比较,查找看是否有相同的。如果找到了, 则进行对密码进行检验,看密码与帐号是否对应。 (3)find_record( )函数: 此函数的功能是根据用户输入的时间查找当天的记录 (4)insert_record( )函数和del_record( )函数: 这两个函数的功能是增加新的记录和删除用户指定的记录 (5)sum_num( )函数: 此函数的功能是用来计算用户所有记录中的钱数的总和 (6)输出函数: 输出函数共有三个,分别是输出全部记录,输出收入记录和输出支 出记录。(7)main( )函数: main( )函数是最为重要的一个函数,因为它是所有程序执行的入 口。同时函数也是以main( )函数的结束作为结束的,由此可见main( ) 函数的重要性.
if((fp=fopen("wenjian","wb"))==null) /*如果文件存在以写模式打开*/ {printf("can not open the file.\n"); return; /*若不能打开,则返回*/ } for(i=0;i<max;i++) if(fwrite(&r[i],sizeof(struct list_record),1,fp)!=1) printf("file write error.\n"); fclose(fp); } void load( ) /*数据读取*/ {FILE *fp; /*文件类指针*/ int i; if((fp=fopen("wenjian","rb"))==null) /*如果文件存在,以读取模式打开 */ {printf("can not open infile.\n"); return; } for(i=0;i<max;i++) if(fread(&r[i],sizeof(struct list_record),1,fp)!=1) {if(feof(fp)) (fclose(fp)); return; } fclose(fp); } int lookup_accounts( struct list_record r[],char acc[]) 与系统数据进行对比,查找用户账号*/ { int i; for(i=0;i<3;i++) if(strcmp(r[i].account,acc)==0) { return ok; } /*根据输入数据,
printf("帐号不存在,请重新输入!\n"); return null; } struct list_record check_code(struct list_record r[],char acc[],char c[]) /*密 码检查*/ { int i; struct list_record a; strcpy(a.account,"0"); strcpy(a.code,"0"); a.rec_len=0; for(i=0;i<a.rec_len;i++) { strcpy(a.rec[i].date,"0"); strcpy(a.rec[i].operate,"0"); a.rec[i].num=0; } for(i=0;i<3;i++) if(strcmp(r[i].account,acc)==0) if(strcmp(r[i].code,c)==0) return r[i]; printf("the code is wrong,please input again!\n"); return a; } void print_message( struct list_record *p) /*用户基本信息*/ {printf("姓名:%s\n",p->name); printf("帐号:%s\n",(*p).account); } int find_record( struct list_record *p,char d[]) /*查找记录*/ { int i; for(i=0;i<(*p).rec_len;i++) { if(strcmp((*p).rec[i].date,d)==0)
五、算法描述或流程图(或者进行描述,或者绘 出流程图,例子见下)
图1. 登录界面数据流程图 2.关系图
六、程序运行效果图
1.程序开始执行是系统所显示的界面
2.选择退出系统
3.选择登录,账号,密码均正确。
4.用户账号输入错误。
ห้องสมุดไป่ตู้
5.用户账号输入正确,密码不正确。
6.用户具体操作。
7.用户支出
8.用户收入
四、各函数功能说明
(1)old_record( ):将所有用户信息存入系统。 (2)void save( ): 将结构体数组中的信息写入文件存储,由系统调 用。 (3)load( ):将结构体数组中写入文件的信息读出,由系统调用。 (4)lookup_accounts( ):将用户输入的帐号与系统中的所有帐 号进行对比,查看系统中是否有此帐号。 (5) check_code( ):在系统查询到了帐号之后,对用户输入的帐号 和密码进行检验,看是否相对应。 (6)print_message( )在系统检查了用户输入的帐号和密码之 后,如果用户通过了系统的检查. (7)find_record( ):根据用户输入的日期进行查找操作。 (8)insert_record( ):在记录中增加一条新的记录. (9)del_record( )根据用户的输入的位置,将相应位置的记录删 除。 (10)sum_num( ):计算所有收入和支出的总和,计算全部的收 入的总合,计算全部输出的总合。 (11)打印输出记录的函数:分别为all_print( )、acc_print( )、pay_print( )这三个函数。它们的功能依次是打印输出全部记录, 打印输出输入记录,打印输出支出记录。 (12)mian( ):在主函数中,可以根据用户的选择来操作系统允许 用户使用的功能,也可以随时退出这个系统。
strcpy(r[1].rec[1].date,"12-06-26"); strcpy(r[1].rec[2].date,"12-06-27"); strcpy(r[1].rec[3].date,"12-06-28"); strcpy(r[2].rec[0].date,"12-06-29"); strcpy(r[2].rec[1].date,"12-06-30"); strcpy(r[2].rec[2].date,"12-07-01"); strcpy(r[2].rec[3].date,"12-07-02"); strcpy(r[0].rec[0].operate,"in"); /*收入与支出*/ strcpy(r[0].rec[1].operate,"out"); strcpy(r[0].rec[2].operate,"in"); strcpy(r[0].rec[3].operate,"out"); strcpy(r[1].rec[0].operate,"in"); strcpy(r[1].rec[1].operate,"out"); strcpy(r[1].rec[2].operate,"in"); strcpy(r[1].rec[3].operate,"out"); strcpy(r[2].rec[0].operate,"in"); strcpy(r[2].rec[1].operate,"out"); strcpy(r[2].rec[2].operate,"in"); strcpy(r[2].rec[3].operate,"out"); r[0].rec[0].num=30000; /*具体数额*/ r[0].rec[1].num=-15000; r[0].rec[2].num=25000; r[0].rec[3].num=-10000; r[1].rec[0].num=30000; r[1].rec[1].num=-25000; r[1].rec[2].num=40000; r[1].rec[3].num=-20000; r[2].rec[0].num=10000; r[2].rec[1].num=-1500; r[2].rec[2].num=30000; r[2].rec[3].num=-5000; return ok; } void save( ) {FILE *fp; int i; /*写入数据*/ /*文件类指针*/
二、上机环境
操作系统:windows XP 开发工具:VC6.0
三、函数调用关系图 Main()
acc_print check_codel acc[],char c[])
del_record() find_record() insert_record() void load( ) lookup_accounts() old_record() print_message()
七、总结
回顾过去的几天,在设计,编写,运行,调试,修改,直到程序编 写成功。在这过程中遇到了很多困难,出了很多错误。但是经过仔细的 查找,都一一改正了。这不仅仅是个改错的过程,更是一个学习和巩固 知识的过程。我们通过自己给自己找错误,发现自己的不足之处。 本程序在编写时,主要就是基于用户的角度去分析该如何设计此程 序,和编写功能模块的。在编写程序时,所有的数据都是对结构体进行 的操作,在此过程中,我发现了自己在对指针操作的时候,尤其是对指 向结构体数组的指针和指向结构体的指针的操作都不够熟练。还有对函 数的运用不好,但在编写完此程序之后,我感觉自己对语法的应用,函 数的调用和认识有了明显的提高。 在这期间,我的C语言技能得到了很大的提高,这次课程设计对我 来说是一个很好的学习机会,我从中学到了很多。