版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、程序设计工程训练报告C语言程序设计个人财务管理系统课程名称 C语言程序设计工程训练姓 名 院(系) 信息科学与技术学院专业班级 学 号 指导教师 教务处制目 录1.需求分析12系统总框图和功能模块说明12.1系统总框图12.2功能模块说明13系统设计23.1主要结构体23.2主要功能函数24系统调试34.1、程序开始执行时系统的所显示的页面:34.2、选择退出系统:34.3、选择登陆,并且输入的帐号和密码都正确:34.4、用户输入的帐号不正确:44.5、用户输入的帐号正确,密码不正确:44.6、用户进行具体操作:55总结66源程序清单61.需求分析编写一个个人财政支出管理系统,主要解决的问题是
2、作为一个系统而言,它所要面对不只是某一个人而言,而是要面对很多的用户。那么想要解决这一问题,就必须要求这个系统能够存储许多用户的基本信息和记录。同时也要求系统能够对不同的用户的身份进行查找和验证。在验证通过之后,在对其进行用户所要求的操作。作为一个财政支出系统,那么就要求对于用户关于金钱的每一项操作都要有相应的记录,同时并允许用户对于每一条整体的记录进行操作,例如可以根据时间来查找某一确定日期是否进行了收入或者支出的操作,也可以根据特定的需要来删除某一条整体的记录。但不允许对每条记录的单项数据进行更改,因为不管是收入还是支出,所涉及的金额都是固定的,时间也是固定的,所以系统不允许用户对其进行操
3、作。除此之外,还必须有足够大的空间来存储新的记录。所以此程序就是基于这个思想而编写出来的,基本满足了用户对于一个财政支出管理系统所要求的相关功能。2系统总框图和功能模块说明2.1系统总框图个人财务管理系统输入个人信息比对个人信息修改账户资料查询账户信息输出账户清单2.2功能模块说明(1)old_record( ):此函数由系统自行调用,作用是将所有用户信息存入系统。(2)void save( ): 此函数的作用是将结构体数组中的信息写入文件存储,由系统调用。(3)load( ):此函数的作用是将结构体数组中写入文件的信息读出,由系统调用。(4)lookup_accounts( ):此函数的作用
4、是将用户输入的帐号与系统中的所有帐号进行对比,查看系统中是否有此帐号。(5) check_code( ):此函数是作用是在系统查询到了帐号之后,对用户输入的帐号和密码进行检验,看是否相对应。(6)print_message( ):此函数的功能是在系统检查了用户输入的帐号和密码之后,如果用户通过了系统的检查,在此显示用户可见的基本信息。(7)find_record( ):此函数的作用是根据用户输入的日期进行查找操作。(8)insert_record( ):此函数的功能是在记录中增加一条新的记录,这个记录由用户输入。(9)del_record( ):此函数的功能是根据用户的输入的位置,将相应位置的
5、记录删除。(10)sum_num( ):此函数的功能是计算所有收入和支出的总和,计算全部的收入的总合,计算全部输出的总合。(11)打印输出记录的函数:在本程序中一共有三个打印输出记录的函数,分别为all_print( )、acc_print( )、pay_print( )这三个函数。它们的功能依次是打印输出全部记录,打印输出输入记录,打印输出支出记录。(12)mian( ):在主函数中,可以根据用户的选择来操作系统允许用户使用的功能,也可以随时退出这个系统。3系统设计3.1主要结构体个人信息账户信息3.2主要功能函数old_record( ) /将所有用户信息存入系统print_message
6、( ) /显示用户可见的基本信息sum_num( ) /计算所有收入和支出的总和all_print( )、acc_print( )、pay_print( ) /打印输出全部记录,打印输出输入记录,打印输出支出记录4系统调试4.1、程序开始执行时系统的所显示的页面:4.2、选择退出系统:4.3、选择登陆,并且输入的帐号和密码都正确:4.4、用户输入的帐号不正确:4.5、用户输入的帐号正确,密码不正确:4.6、用户进行具体操作:5总结本程序在编写是,主要就是基于用户的角度去分析该如何设计此程序,和编写功能模块的。在编写程序时,所有的数据都是对结构体进行的操作,在此过程中,我发现了自己在对指针操作的
7、时候,尤其是对指向结构体数组的指针和指向结构体的指针的操作都不够熟练。但在编写完此程序之后,我感觉自己对语法的应用有了明显的提高。6源程序清单#include<stdio.h>#include<string.h>#define null 0#define max 20#define ok 1 struct record char date20; char operate20; int num; struct list_record char account20; char code20; char name20; int rec_len; struct record r
8、ecmax;rmax; /系统原有数据,用户不可知int old_record( struct list_record r) int i; for(i=0;i<3;i+) ri.rec_len=4; strcpy(r0.account,"1001"); strcpy(r1.account,"1002"); strcpy(r2.account,"1003"); strcpy(r0.code,"111111"); strcpy(r1.code,"222222"); strcpy(r2.code
9、,"333333"); strcpy( ,"wang"); strcpy( ,"li"); strcpy( ,"zhang"); strcpy(r0.rec0.date,"07-01-01"); strcpy(r0.rec1.date,"07-02-01"); strcpy(r0.rec2.date,"07-03-01"); strcpy(r0.rec3.date,"07-04-01"); st
10、rcpy(r1.rec0.date,"07-01-02"); strcpy(r1.rec1.date,"07-02-02"); strcpy(r1.rec2.date,"07-03-02"); strcpy(r1.rec3.date,"07-04-02"); strcpy(r2.rec0.date,"07-01-03"); strcpy(r2.rec1.date,"07-02-03"); strcpy(r2.rec2.date,"07-03-03"); s
11、trcpy(r2.rec3.date,"07-04-03"); strcpy(r0.rec0.operate,"in"); strcpy(r0.rec1.operate,"out"); strcpy(r0.rec2.operate,"in"); strcpy(r0.rec3.operate,"out"); strcpy(r1.rec0.operate,"out"); strcpy(r1.rec1.operate,"in"); strcpy(r1.rec2.
12、operate,"out"); strcpy(r1.rec3.operate,"in"); strcpy(r2.rec0.operate,"in"); strcpy(r2.rec1.operate,"out"); strcpy(r2.rec2.operate,"in"); strcpy(r2.rec3.operate,"out"); r0.rec0.num=3000; r0.rec1.num=-1500; r0.rec2.num=2500; r0.rec3.num=-1000
13、; r1.rec0.num=-3000; r1.rec1.num=5000; r1.rec2.num=-1000; r1.rec2.num=2000; r2.rec0.num=1000; r2.rec1.num=-1500; r2.rec2.num=3000; r2.rec2.num=-500; return ok;/将数据写入文件void save( )FILE *fp; int i; if(fp=fopen("wenjian","wb")=null) printf("can not open the file.n"); retur
14、n; for(i=0;i<max;i+) if(fwrite(&ri,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(&
15、amp;ri,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(ri.account,acc)=0) return ok; printf("帐号不存在,请重新输入!n"); return null; /检查密码函数 struct list_
16、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.reci.date,"0"); strcpy(a.reci.operate,"0"); a.reci.num=0; for(i=0;i<3;i+) if(str
17、cmp(ri.account,acc)=0) if(strcmp(ri.code,c)=0) return ri; printf("the code is wrong,please input again!n"); return a; /显示用户基本信息void print_message( struct list_record *p)printf("姓名:%sn",p->name); printf("帐号:%sn",(*p).account); /根据用户输入的日期,查找记录int find_record( struct li
18、st_record *p,char d) int i; for(i=0;i<(*p).rec_len;i+) if(strcmp(*p).reci.date,d)=0) printf("date operate moneyn"); printf("%s ",(*p).reci.date); printf("%s ",(*p).reci.operate); printf("%d n",(*p).reci.num); return ok; if(i=(*p).rec_len) printf("the d
19、ate is not exit!n"); return null; /插入函数,根据用户输入的信息,增加记录int insert_record( struct list_record *p,struct record *p1,int lop) int i; if(lop<1)|(lop>(*p).rec_len+1) printf("the position is wrong.n"); return 0; else for(i=(*p).rec_len;i>lop-1;i-) strcpy(*p).reci.date,(*p).reci-1.da
20、te); strcpy(*p).reci.operate,(*p).reci-1.operate); (*p).reci.num=(*p).reci-1.num; strcpy(p->reci.date,p1->date); strcpy(*p).reci.operate,(*p1).operate); (*p).reci.num=(*p1).num; (*p).rec_len+; return ok;/ 删除记录函数int del_record( struct list_record *p,int lop2) int i; if(lop2<1)|(lop2>(*p).
21、rec_len) printf("the position is wrong.n"); return null; else for(i=lop2-1;i<(*p).rec_len-1;i+) strcpy(*p).reci.date,(*p).reci+1.date); strcpy(*p).reci.operate,(*p).reci+1.operate); (*p).reci.num=(*p).reci+1.num; (*p).rec_len-; return ok; /输出全部记录函数 void all_print( struct list_record *p)
22、 int i; printf("date operate numn"); for(i=0;i<(*p).rec_len;i+) printf("%s ",(*p).reci.date); printf("%s ",(*p).reci.operate); printf("%d ",(*p).reci.num); printf("n"); /计算总的钱数int sum_num( struct list_record *p) int i; int sum=0; int sum_in=0; int
23、 sum_out=0; for(i=0;i<(*p).rec_len;i+) sum+=(*p).reci.num; if(*p).reci.num>0) sum_in+=(*p).reci.num; if(*p).reci.num<0) sum_out+=(*p).reci.num; printf("总金额为: %dn",sum); printf("总收入为: %dn",sum_in); printf("总支出为: %dn",sum_out); return ok;/输出收入记录int acc_print( str
24、uct list_record *p) int i; int sum_acc=0; printf("date operate numn"); for(i=0;i<(*p).rec_len;i+) if(*p).reci.num>0) sum_acc+=(*p).reci.num; printf("%s ",(*p).reci.date); printf("%s ",(*p).reci.operate);printf("%d ",(*p).reci.num); printf("n");
25、 printf("总收入金额为: %dn",sum_acc); return ok; if(sum_acc=0) printf("there is no account.n"); return null;/输出支出记录 int pay_print( struct list_record *p)int i; int sum_pay=0; printf("date operate numn"); for(i=0;i<p->rec_len;i+) if(*p).reci.num<0) sum_pay+=(*p).reci.
26、num; printf("%s ",(*p).reci.date); printf("%s ",(*p).reci.operate);printf("%d ",(*p).reci.num); printf("n"); printf("总的支出为: %dn",sum_pay); return ok; if(sum_pay=0) printf("there is no payout.n"); return null; void main( ) int j=0,n=0; int x
27、,k,lop1,lop2; char data120; char accou20,cod20; struct record *p0; struct record a; struct list_record b; struct list_record *p; b.rec_len=0; p0=&a; old_record(r); save( ); load( ); printf(" 欢迎使用个人财政支出管理系统!n"); printf("-n"); printf("| |n"); printf("| 1、登陆系统 |n&
28、quot;); printf("| 2、退出系统 |n"); printf("| |n"); printf("-n"); scanf("%d",&x); if(x=0) printf(" 感谢您使用本系统,再见!n"); else do printf("请输入帐号:"); /while(j<3); scanf("%s",accou); if(lookup_accounts(r,accou) printf("请输入密码:")
29、; /while(j<3); scanf("%s",cod); b=check_code(r,accou,cod); if(b.rec_len=0) do b=check_code(r,accou,cod); /while(n>3) scanf("%s",cod); n+; while(n<3); if(n=3) printf("您的密码不正确,请退出系统,谢谢使用,再见!n"); break; else printf("-请选择您要进行的操作-n"); printf("| |n&quo
30、t;); /while(j<3); printf("| 2、查找记录 |n"); printf("| 3、增加记录 |n"); printf("| 4、删除记录 |n"); printf("| 5、输出所有记录 |n"); printf("| 6、输出所有收入记录 |n"); printf("| 7、输出所有支出记录 |n"); printf("| |n"); printf("-|n"); p=&b; print_message(p); do scanf("%d",&k); /whi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 外观设计的著作权保护、商业标识保护及案例分析
- 典型生产案例酒精等课件
- 《秘书职业技能大赛》课件
- 四年级上册科学教科版课件第6课 运动的小车
- 《A公司提案技巧》课件
- 学生请假安全协议书
- 大学高层次人才聘用协议书(2篇)
- 2024年内蒙古自治区鄂尔多斯市公开招聘警务辅助人员(辅警)笔试经典自测卷(1)含答案
- 2024年四川省遂宁市公开招聘警务辅助人员(辅警)笔试摸底备战测试(1)卷含答案
- 2021年四川省阿坝自治州公开招聘警务辅助人员(辅警)笔试专项训练题试卷(1)含答案
- 突发事件及自救互救学习通超星期末考试答案章节答案2024年
- 2024秋期国家开放大学《政治学原理》一平台在线形考(形考任务四)试题及答案
- 成都市温江区殡葬设施布局专项规划2021-2035年
- 伟大的《红楼梦》智慧树知到期末考试答案章节答案2024年北京大学
- 2024-2029年中国物业管理行业发展分析及发展战略研究报告
- 2024年中储粮集团招聘笔试参考题库附带答案详解
- 国开《Windows网络操作系统管理》形考任务6-配置Web服务实训
- 《质量管理体系文件》风险和机遇评估分析表
- 食品安全约谈通知书
- 舒尔特方格A4直接打印版
- 淬火感应器的选用设计与制造
评论
0/150
提交评论