个人账簿管理系统源代码
- 格式:doc
- 大小:24.50 KB
- 文档页数:4
程序设计报告( 2013 /2014 学年第 1 学期)题目:个人账本管理系统个人账本管理系统一、课题内容和要求本案例是一个简单的个人账本管理系统该系统要求实现一个简单、实用的个人帐本管理程序,主要功能包括帐务收支明细数据的录入、查找、修改、删除、统计、排序等。
所有帐务数据都要利用文件系统保存,以备系统下次运行时使用。
通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些基本算法思想的应用。
二、需求分析个人账本管理系统的功能框架图如图1所示(图1 功能框架图)(1)新增帐务明细数据。
(2)查找帐务数据(可按序号、日期(年、月、日)、名称、金额等查找)。
(3)修改帐务明细条目(先查找,再修改。
若查找出多个条目,则进一步提示用户选择条目的序号,再修改)。
(4)删除帐务明细条目(请参考上面修改的处理)。
(5)对帐务数据排序(可按日期、名称、金额等排序。
要求排序后,记录的序号也要重新编排)。
(6)显示当前所有帐务数据列表。
(7)帐务统计(根据日期范围,可分别按年、月或日统计收、支、结余总金额,并显示)(8)保存帐务数据到文件中、从文件中读入帐务数据。
三、概要设计1、主要结构体struct SJLX{int num;int year;int month;int day;char type[25];char fname[25];float amount;}pro[200];2、主要函数流程图(1)装载函数:从文本中载入信息,函数流程图如图2所示(2)输入信息函数:输入信息,可以保存到文本,如图3(图3 输入信息函数)(3)数据查询函数:查询用户数据,如图4(图4 数据查询函数)(4)修改信息函数:修改已存档文本数据,并保存到文本,如图5(图5 信息修改函数)(5)删除信息函数:查询已存档数据,删除并存档,如图6(图6 删除信息函数)(6)数据统计函数:对数据进行汇总统计,如图7(图7 数据统计函数)(7)排序函数:对数据进行分类汇总,按照一定顺序进行排列,如图88 排序函数)四、源程序代码#include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>#include<ctype.h>#include<cstdlib>int changshujv;FILE *fp;//打开文件struct SJLX//定义数据类型{int num;int year;int month;int day;char type[25];char fname[25];float amount;}pro[200];typedef struct yuedutongji//月度统计函数{int paixvy;int paixvm;double count;struct yuedutongji *next;}YDTJ,*YDTJP;YDTJ ydtj[200];YDTJP head;void zhucaidan();//主菜单函数,功能:数据处理、数据查询、数据统计、退出void shujvchaxun();//数据查询函数,功能:查询所有数据、按年月日查询、按名称查询、返回void shujvtongji();//数据统计,功能:课按年、月、日分别统计收入、支出、结余金额void yeartongji();//按年统计函数void monthtongji();//按月统计函数void daytongji();//按日统计函数void suoyouxinxi();//查询所有信息void annianchaxun();//按年查询函数void anyuechaxun();//按月查询函数void anrichaxun();//按日查询函数void annamechaxun();//名称查询void anshouzhichaxun();//按收支查询函数void paixv();//排序函数,功能:可按日期、名称、金额排序void xvhaopaixv();//序号排序void datepaixv();//日期排序void namepaixv();//名称排序void amountpaixv();//金额排序void shuruxinxi();//输入信息函数void xiugaixinxi();//修改信息函数void shanchuxinxi();//删除信息函数int readfile();//读取帐务信息void writefile(int x);//记录帐务信息char shuru();//判断输入是否为数字void zhucaidan()//主菜单函数,功能:数据处理、数据查询、数据统计、退出{char input;printf("\t********************个人财务系统******************\n");printf("\t\t*\t1.数据录入\t\t*\n");printf("\t\t*\t2.数据查询\t\t*\n");printf("\t\t*\t3.数据修改\t\t*\n");printf("\t\t*\t4.数据删除\t\t*\n");printf("\t\t*\t5.数据统计\t\t*\n");printf("\t\t*\t6.数据排序\t\t*\n");printf("\t\t*\t0.退出\t\t\t*\n");printf("\t***************************************************\n");printf("请输入选择:");input = shuru();switch(input){case '1': shuruxinxi();break;case '2': shujvchaxun();break;case '3': xiugaixinxi();break;case '4': shanchuxinxi();break;case '5': shujvtongji();break;case '6': paixv();break;case '0': exit(0);break;}}void shujvtongji()//数据统计{char input;system("cls");printf("\t\t*********数据统计*********\n\n");printf("\t\t1.按年统计\n");printf("\t\t2.按月统计\n");printf("\t\t3.按日统计\n");printf("\t\t0.返回\n");printf("#请选择#\n");input = shuru();switch(input){case '1': yeartongji();zhucaidan();break;case '2': monthtongji();zhucaidan();break;case '3': daytongji();zhucaidan();break;case '0': zhucaidan();break;}}void yeartongji()//按年统计函数{char input;int y;int i;double sum=0;system("cls");printf("\t\t********年度统计*********\n\n");printf("\t\t1.收入统计\n");printf("\t\t2.支出统计\n");printf("\t\t3.结余金额\n");printf("\t\t0.返回\n");printf("请选择统计类型:");input = shuru();printf("请输入年份");scanf("%d",&y);switch(input){case '1':{for(i=0;i < changshujv;i++){if(pro[i].year==y&&!(strcmp(pro[i].type,"收入")))sum+=pro[i].amount;}printf("本年度总收入金额:%f\n",sum);};break;case '2': {for(i = 0;i < changshujv;i++){if(pro[i].year==y&&!(strcmp(pro[i].type,"支出"))){sum+=pro[i].amount;}}printf("本年度总支出金额:%f\n",sum);};break;case'3':{for(i = 0;i < changshujv;i++){if(pro[i].year==y)sum+=pro[i].amount;}printf("本年度总结余金额:%f\n",sum);};break;case '0': zhucaidan();break;}}void monthtongji()//按月统计函数{char input;int y,m;int i;double sum=0;system("cls");printf("\t\t*********月度统计********\n\n");printf("\t\t1.收入统计\n");printf("\t\t2.支出统计\n");printf("\t\t3.结余金额\n");printf("\t\t0.返回\n");printf("请选择统计类型:");input = shuru();printf("请输入年份");scanf("%d",&y);printf("请输入月份");scanf("%d",&m);switch(input){case '1':{for(i = 0;i < changshujv;i++){if(pro[i].year==y&&pro[i].month==m&&!(strcmp(pro[i].type,"收入"))){sum+=pro[i].amount;}}printf("本月度总收入金额:%f\n",sum);};break;case '2': {for(i = 0;i < changshujv;i++){if(pro[i].year==y&&pro[i].month==m&&!(strcmp(pro[i].type,"支出"))){sum+=pro[i].amount;}}printf("本月度总支出金额:%f\n",sum);};break;case'3':{for(i = 0;i < changshujv;i++){if(pro[i].year==y&&pro[i].month==m)sum+=pro[i].amount;}printf("本月度总结余金额:%f\n",sum);};break;case '0': zhucaidan();break;}}void daytongji()//按日统计函数{char input;int y,m,n;int i;double sum=0;system("cls");printf("\t\t*********每日统计*********\n\n");printf("\t1.收入统计\n");printf("\t2.支出统计\n");printf("\t3.结余金额\n");printf("\t0.返回\n");printf("请选择统计类型:");printf("请输入年份");scanf("%d",&y);printf("请输入月份");scanf("%d",&m);printf("请输入日");scanf("%d",&n);input = shuru();switch(input){case '1':{for(i = 0;i < changshujv;i++){if(pro[i].year==y&&pro[i].month==m&&pro[i].day==n&&!(strcmp(pro[i].type,"收入"))){sum+=pro[i].amount;}}printf("该日总收入金额:%f\n",sum);};break;case '2': {for(i = 0;i < changshujv;i++){if(pro[i].year==y&&pro[i].month==m&&pro[i].day==n&&!(strcmp(pro[i].type,"支出"))){sum+=pro[i].amount;}}printf("该日总支出金额:%f\n",sum);};break;case'3':{for(i = 0;i < changshujv;i++){if(pro[i].year==y&&pro[i].month==m&&pro[i].day==n)sum+=pro[i].amount;}printf("本日总结余金额:%f\n",sum);};break;case '0': zhucaidan();break;}}void shujvchaxun()//数据查询函数,功能:查询所有数据、按年月日查询、按收入和支出查询、返回{char input;system("cls");printf("\t\t********数据查询*********\n\n");printf("\t1.所有数据\n");printf("\t2.按年查询\n");printf("\t3.按月查询\n");printf("\t4.按日查询\n");printf("\t5.按收支查询\n");printf("\t6.按名称查询\n");printf("\t0.返回\n");printf("请输入选择:");input = shuru();switch(input){case '1': suoyouxinxi();zhucaidan();break;case '2': annianchaxun();zhucaidan();break;case '3': anyuechaxun();zhucaidan();break;case '4': anrichaxun();zhucaidan();break;case '5': anshouzhichaxun();zhucaidan();break;case '6': annamechaxun();zhucaidan();break;case '0': zhucaidan();break;}}void suoyouxinxi()//查询所有信息{int i;printf("编号\t 年\t月\t日\t 收支类型\t收支项名称\t金额\n");for(i = 0;i < changshujv;i++){printf("%-10d%-9d%-5d%-5d%-15s%-15s%-.2f\n",pro[i].num,pro[i].year,pro[i].month,pro[i] .day,pro[i].type,pro[i].fname,pro[i].amount);}}void annianchaxun()//按年查询函数{int y=0,m=0,i=0;printf("请输入年份");scanf("%d",&y);printf("编号\t 年\t月\t日\t 收支类型\t收支项名称\t金额\n");for(i = 0;i < changshujv;i++){if(pro[i].year == y){printf("%-10d%-9d%-5d%-5d%-15s%-15s%-.2f\n",pro[i].num,pro[i].year,pro[i].month,pro[i] .day,pro[i].type,pro[i].fname,pro[i].amount);}}}void anyuechaxun()//按月查询函数{int y,m,i;printf("请输入年份");scanf("%d",&y);printf("请输入月份");scanf("%d",&m);printf("编号\t 年\t月\t日\t 收支类型\t收支项名称\t金额\n");for(i = 0;i < changshujv;i++){if(pro[i].year == y && pro[i].month == m){printf("%-10d%-9d%-5d%-5d%-15s%-15s%-.2f\n",pro[i].num,pro[i].year,pro[i].month,pro[i] .day,pro[i].type,pro[i].fname,pro[i].amount);}}}void anrichaxun()//按日查询函数{int y,m,n,i;printf("请输入年份");scanf("%d",&y);printf("请输入月份");scanf("%d",&m);printf("请输入日");scanf("%d",&n);printf("编号\t 年\t月\t日\t 收支类型\t收支项名称\t金额\n");for(i=0;i<changshujv;i++){if(pro[i].year == y && pro[i].month == m&&pro[i].day==n){printf("%-10d%-9d%-5d%-5d%-15s%-15s%-.2f\n",pro[i].num,pro[i].year,pro[i].month,pro[i] .day,pro[i].type,pro[i].fname,pro[i].amount);}}}void anshouzhichaxun()//按收支查询函数{char ch;int i;printf("\t\t\t1.收入\n\t\t\t2.支出\n请选择:");ch = shuru();switch(ch){case '1':{printf("编号\t 年\t月\t日\t收支类型\t金额\n");for(i = 0;i < changshujv;i++){if(!(strcmp(pro[i].type,"收入"))){printf("%-10d%-9d%-5d%-5d%-15s%-.2f\n",pro[i].num,pro[i].year,pro[i].month,pro[i].day,p ro[i].fname,pro[i].amount);}}};break;case '2':{printf("编号\t 年\t月\t日\t收支类型\t金额\n");for(i = 0;i < changshujv;i++){if(!(strcmp(pro[i].type,"支出"))){printf("%-10d%-9d%-5d%-5d%-15s%-15s%-.2f\n",pro[i].num,pro[i].year,pro[i].month,pro[i] .day,pro[i].type,pro[i].fname,pro[i].amount);}}};break;}}void annamechaxun()//名称查询函数{ int i;char k[50];printf("请输入待查询的收支项目名称\n");scanf("%s",&k);for(i = 0;i < changshujv;i++){if(!(strcmp(pro[i].fname,k)))printf("%-10d%-9d%-5d%-5d%-15s%-15s%-.2f\n",pro[i].num,pro[i].year,pro[i].month,pro[i].day, pro[i].type,pro[i].fname,pro[i].amount);}}void shuruxinxi()//输入信息函数{int i,word=1,x,k=0;for(;changshujv<200 && word==1;changshujv++){printf("请输入编号:\n");scanf("%d",&pro[changshujv].num);printf("请输入年:\n");scanf("%d",&pro[changshujv].year);printf("请输入月:\n");scanf("%d",&pro[changshujv].month);printf("请输入日:\n");scanf("%d",&pro[changshujv].day);printf("请输入收支类型:\n");scanf("%s",pro[changshujv].type);printf("请输入收支项目名称:\n");scanf("%s",pro[changshujv].fname);printf("请输入收支金额:\n");scanf("%f",&pro[changshujv].amount);printf("要继续吗?\n1.是 2.退出\n");scanf("%d",&word);}for(i = 0;i < changshujv;i++){printf("%-5d%-5d%-5d%-5d%-10s%-10s%-.2f\n",pro[i].num,pro[i].year,pro[i].month,pro[i]. day,pro[i].type,pro[i].fname,pro[i].amount);}printf("\n新建的账目需要存档吗?\t1.是 2.否\n");scanf("%d",&x);writefile(x);}void xiugaixinxi()//修改信息函数{int ch,i;char input;system("cls");printf("******请查询要修改信息*****\n");printf("\t1.所有数据\n");printf("\t2.按年查询\n");printf("\t3.按月查询\n");printf("\t4.按日查询\n");printf("\t5.按收支查询\n");printf("\t6.按名称查询\n");printf("请输入选择:");input = shuru();switch(input){case '1': suoyouxinxi();break;case '2': annianchaxun();break;case '3': anyuechaxun();break;case '4': anrichaxun();break;case '5': anshouzhichaxun();break;case '6': annamechaxun();break;default:exit(0);}printf("请输入要修改的收支编号:\n");scanf("%d",&ch);for(i = 0;i < changshujv;i ++){if(pro[i].num == ch){printf("请输入修改信息:\n");printf("请输入编号:\n");scanf("%d",&pro[i].num);printf("请输入年:\n");scanf("%d",&pro[i].year);printf("请输入月:\n");scanf("%d",&pro[i].month);printf("请输入日:\n");scanf("%d",&pro[i].day);printf("请输入收支类型:\n");scanf("%s",pro[changshujv].type);printf("请输入收支项目名称:\n");scanf("%s",pro[i].fname);printf("请输入收支金额:\n");scanf("%f",&pro[i].amount);writefile(1);}}}void shanchuxinxi()//删除信息函数{int ch,i;char input;system("cls");printf("*****请查询要删除信息*****\n");printf("\t1.所有数据\n");printf("\t2.按年查询\n");printf("\t3.按月查询\n");printf("\t4.按日查询\n");printf("\t5.按收支查询\n");printf("\t6.按名称查询\n");printf("请输入选择:");input = shuru();switch(input){case '1': suoyouxinxi();break;case '2': annianchaxun();break;case '3': anyuechaxun();break;case '4': anrichaxun();break;case '5': anshouzhichaxun();break;case '6': annamechaxun();break;default:exit(0);}printf("请输入要删除的收支编号:\n");scanf("%d",&ch);for(i = 0;i < changshujv + 1;i ++){if(pro[i].num == ch){pro[i].num = pro[i+1].num;pro[i].year = pro[i+1].year;pro[i].month = pro[i+1].month;pro[i].day = pro[i+1].day;strcpy(pro[i].fname,pro[i+1].fname);pro[i].amount = pro[i+1].amount;changshujv = changshujv - 1;writefile(1);}}}void paixv()//排序函数{char input;system("cls");printf("\t\t********数据排序********\n\n");printf("\t1.按名称\n");printf("\t2.按金额\n");printf("\t3.按日期\n");printf("\t0.返回\n");printf("请输入选择:");input = shuru();switch(input){case '1': namepaixv();zhucaidan();break;case '2': amountpaixv();zhucaidan();break;case '3': datepaixv();zhucaidan();break;case '0': zhucaidan();break;}}void xvhaopaixv()//序号排序函数{int i,j,temp,noswap,n=0;for(i = 0;i < changshujv;i++){if(pro[i].num!=NULL)n++;}for(i=0;i<n-1;i++){noswap=1;for(j=n-1;j>i;j--)if(pro[j].num <pro[j-1].num ){temp=pro[j-1].num;pro[j-1].num =pro[j].num ;pro[j].num =temp;noswap=0;}if(noswap==1)return;}}void datepaixv()//日期排序{int i,j,n=0;SJLX temp;for(i = 0;i < changshujv;i++){if(pro[i].day!=NULL)n++;}for(i=0;i<n;i++){for(j=0;j<i;j++)if(pro[i].year<pro[j].year ){temp=pro[i];pro[i] =pro[j];pro[j]=temp;}}for(i=0;i<n;i++){for(j=0;j<i;j++)if(pro[i].year<=pro[j].year&&pro[i].month<pro[j].month ){temp=pro[i];pro[i] =pro[j];pro[j]=temp;}}for(i=0;i<n;i++){for(j=0;j<i;j++)if(pro[i].year<=pro[j].year&&pro[i].month<=pro[j].month&&pro[i].day<pro[j].day){temp=pro[i];pro[i] =pro[j];pro[j]=temp;}}xvhaopaixv();printf("编号\t 年\t月\t日\t 收支类型\t收支项名称\t金额\n");for(i = 0;i < changshujv;i++)printf("%-10d%-9d%-5d%-5d%-15s%-15s%-5lf\n",pro[i].num,pro[i].year,pro[i].month,pro[i].day, pro[i].type,pro[i].fname,pro[i].amount);}void namepaixv()//名称排序{int i,j,n=0;SJLX temp;for(i = 0;i < changshujv;i++){if(pro[i].fname!=NULL)n++;}for(i=0;i<n;i++){for(j=0;j<i;j++)if((strcmp(pro[i].fname,pro[j].fname))<0){temp=pro[i];pro[i] =pro[j];pro[j]=temp;}}xvhaopaixv();printf("编号\t 年\t月\t日\t 收支类型\t收支项名称\t金额\n");for(i = 0;i < changshujv;i++)printf("%-10d%-9d%-5d%-5d%-15s%-15s%-5lf\n",pro[i].num,pro[i].year,pro[i].month,pro[i].day, pro[i].type,pro[i].fname,pro[i].amount);}void amountpaixv()//金额排序{int i,j,n=0;SJLX temp;for(i = 0;i < changshujv;i++){if(pro[i].fname!=NULL)n++;}for(i=0;i<n;i++){for(j=0;j<i;j++)if((pro[i].amount<pro[j].amount)){temp=pro[i];pro[i] =pro[j];pro[j]=temp;};}printf("编号\t 年\t月\t日\t 收支类型\t收支项名称\t金额\n");for(i = 0;i < changshujv;i++)printf("%-10d%-9d%-5d%-5d%-15s%-15s%-5lf\n",pro[i].num,pro[i].year,pro[i].month,pro[i].day, pro[i].type,pro[i].fname,pro[i].amount);}int readfile()//读取帐务信息{int k = 0;if((fp=fopen("data.txt","r"))==NULL){printf("初始化时未发现文件,已建立。
#include"stdio.h"#include"stdlib.h"#define MAX_NAME 11#define MAX_DETAIL 21#define MENU_COUNT 9#define DATA_FILE "fa.dat" typedef wnum_fi_type ( income=1,payout=-1}fi_type;typedef struct_fi_info (int year;int month;fi_type type;char name[MAX_NAME];float money;char detail[MAX_DETAIL];}fi_info;typedef struct_fi_data (fi_info info;struct_fi_data *next;}fi_data;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[],int count);fi_data *head;char menu[]=" ------------------------------------------------ ==\n""|家庭财务管理系统|\n""+ --------------------------------------- +\n""|收入管理|\n""| 1添加收入|\n""| 2查询收入明细|\n""| 3删除收入|\n""| 4修改收入|\n""|支出管理|\n""| 5添加支出|\n""| 6查询支出明细|\n""| 7删除支出|\n""| 8修改支出|\n""|统计|\n""| 9统计总收入总支出|\n"" --------------------------------------- +\n""| 0退出系统|\n""==============================================+\n"; void(*menu_fun[])()= ( quit,add_income, search_income, delete_income, update_income, add_payout, search_payout, delete_payout, update_payout, count_total };int main() (int selected=0;initialize();while(selected>=0 && selected<=MENU_COUNT) ( system("cls");printf(menu);printf("> 请选择要进行的操作(%d - %d):",0,MENU_COUNT);if(scanf("%d”,&selected)!=1llselected<0llselected>MENU_COUNT) (printf(">输入错误!请选择[%d - %d]之间的数字!按任意键重试…",0,MENU_COUNT);fflush(stdin);getchar();) else(menu_fun[selected]();)selected=0;))void add_income()(fi_data *p=(fi_data *)malloc(sizeof(fi_data));memset(p,0,sizeof(fi_data));p->next=NULL;input_info(&(p->info));p->info.type=income;if(head==NULL)( head=p;) else(get_last(head)->next=p;))void search_income()(search_data(income);)void delete_income()(delete_data(income);)void update_income()(update_data(income);)void add_payout() (fi_data *p=(fi_data*)malloc(sizeof(fi_data)); memset(p,0,sizeof(fi_data));input_info(&(p->info));p->info.type=payout;if(head==NULL)( head=p;) else(get_last(head)->next=p;))void search_payout()(search_data(payout);)void delete_payout()(delete_data(payout);)void update_payout()(update_data(payout);)void count_total()(float total_income=0.0;float total_payout=0.0;fi_data *p=head;while(p!=NULL)(if(p->info.type==income)(total_income+=p->info.money;) else(total_payout+=p->info.money;)p=p->next;)printf("+ ------- + ------- + -------- +\n");printf("|合计收入|合计支出| 结余printf("+|\n");---------------- + ------- + -------- +\n");printf("l%12.2fl%12.2fl%12.2fl\n", total_income, total_payout,total_income - total_payout); printf("+ ------- + -------- + ------- +\n");printfC、按任意键继续返回主菜单…) fflush(stdin);getchar();)void search_data(fi_type type) (int year=0;int month=0;fi_data *p=NULL;fi_data *result[9]={NULL}; int count=0; char input='';while(1) {printfC、请输入要查询的年月(例如:2009/1)"); if(scanf("%d/%d”,&year,&month)!=2) { printf(">输入错误。
用C语言编写个人财务管理程序青岛理工大学《C语言程序设计》题目个人财务管理程序一、内容个人财务管理程序主要实现对每次财务收支的管理,具有输入收支信息、按天查询信息、按月查询信息、按年查询信息、查询全部信息、删除全部收支信息、按天删除部分收支信息、退出等功能。
本系统操作十分简单用户只需按提示选择所需要执行的功能或输入相应信息即可。
在主功能区中有1、2、3、0四种选择。
选主功能区中的 1 是输入收支信息。
选择主功能区中的2 是进入查询收支信息功能区,在查询功能区有五个子功能选择1、2、3、4、0;选择1 是按天查询收支信息;选择2 是按月查询收支信息,选择3 是按年查询收支信息,选择4是查询全部收支信息,其中2、3、4查询方式还可以显示总收入、总支出和总余额;选择0 是退出查询功能区。
选择主功能区中的3是进入删除收支信息功能区,在删除功能区中有1、2、0三种子功能选择,选择1 是按日期删除某天的收支信息,选择2 是删除所有的收支信息;选择0是退出删除功能区。
选择主功能区的0是退出个人财务管理系统。
二、上机环境操作系统:Windows XP开发工具:VC6.0三、函数调用关系图四、各函数功能说明1、void main() 主函数2、void input() 输入收支信息函数3、void Output() 查询收支信息函数4、void Dateput() 按天查询收支信息函数5、void Monput() 按月查询收支信息函数6、void Yearput() 按年查询收支信息函数7、void Allput() 查询所有收支信息8、void Delete() 删除收支信息函数9、void Delpart() 按日期删除部分信息函数 10、void Delall() 删除所有信息函数五、算法描述或流程图算法描述:函数一:void input() /*输入收支信息函数*/ {FILE *ap;printf("\t输入收入:"); /*输入收入*/scanf("%g",&RMB.shou);printf("\t收入来源:"); /*输入收入来源*/scanf("%s",RMB.a);printf("\t输入支出:");scanf("%g",&RMB.zhi); /*输入支出*/printf("\t支出去向:");scanf("%s",RMB.b); /*输入支出去向*/RMB.yu=RMB.shou-RMB.zhi;printf("\t输入年月日:");scanf("%d",&RMB.year); /*输入年月日*/scanf("%d",&RMB.mon);scanf("%d",&RMB.day);if((ap=fopen("money.txt","ab"))==NULL) /*打开文件*/printf("不能建立文件money.txt\n");elsefwrite(&RMB,sizeof(struct money),1,ap); /*将收支信息记录在money.txt文件*/fclose(ap); /*关闭文件*/printf("************************************************************ **********\n");}函数二:void Output() /*查询收支信息函数*/ {int i;while(1){printf("\n 1 按天查询部分收支信息\n");printf(" 2 按月查询部分收支信息\n");printf(" 3 按年查询部分收支信息\n");printf(" 4 查询全部收支信息\n");printf(" 0 退出查询\n");printf(" 请选择查询方式:"); /*输入选择*/scanf("%d",&i);if(i==1){Dateput(); /*调用按日期查询收支信息函数*/}else if(i==2)Monput();else if(i==3)Yearput();else if(i==4){Allput(); /*调用查询全部收支信息函数*/}else if(i==0){printf("************************************************************ *****\n");break; /*退出查询收支信息函数*/}else{printf(" 输入错误!\n");printf("************************************************************ ******\n");break; /*用户输入错误时退出*/}}}函数三:void Dateput() /*按日期查询收支信息函数*/ {FILE *ap;int y,m,d,n=0;float zs=0,zz=0,s=0;printf("\t输入要查询的年月日:"); /*输入要查询的年、月、日*/scanf("%d%d%d",&y,&m,&d);if((ap=fopen("money.txt","r"))==NULL)printf("不能读取money.txt文件\n");while(1){if(fread(&RMB,sizeof(struct money),1,ap)>0) /*从文件读取信息*/{if(y==RMB.year&&m==RMB.mon&&d==RMB.day) /*查找用户查询的收支信息并将其输出*/{printf("\t收入:%g\n\t收入来源:%s\n",RMB.shou,RMB.a);printf("\t支出:%g\n\t支出去向:%s\n",RMB.zhi,RMB.b);printf("\t余额:%g\n\n",RMB.yu);zs+=RMB.shou; /*统计该天的总收入、总支出、总余额*/zz+=RMB.zhi;s+=RMB.yu;n++; /*统计该天的收支次数*/}}else break;}fclose(ap); /*关闭文件*/if(n==0) printf("\t无该日期的收支信息!\n");if(n>=2) /*若该天收支次数大于1则输出该天的总收入、总支出、总余额*/ {printf("\n\t该天有%d次收支信息\n",n);printf("\t该天总收入:%g\n",zs);printf("\t该天总支出:%g\n",zz);printf("\t该天总余额:%g\n",s);}printf("************************************************************ ***********\n");}函数四:void Monput() /*按月查询收支信息函数*/{FILE *ap;int y,m;float zs=0,zz=0,s=0;printf("输入要查询的年月:");scanf("%d%d",&y,&m);if((ap=fopen("money.txt","r"))==NULL)printf("不能打开money.txt文件!\n");while(fread(&RMB,sizeof(struct money),1,ap)>0){if(y==RMB.year&&m==RMB.mon) /*在文件中查找符合条件的信息并输出*/{printf("\t%d年%d月%d日\n",RMB.year,RMB.mon,RMB.day);printf("\t收入:%g\n\t收入来源:%s\n",RMB.shou,RMB.a);printf("\t支出:%g\n\t支出去向:%s\n",RMB.zhi,RMB.b);printf("\t余额:%g\n\n",RMB.yu);zs+=RMB.shou; /*统计查询月份的总收入、总支出、总余额*/zz+=RMB.zhi;s+=RMB.yu;}}fclose(ap);printf("\t%d年%d月总收入:%g\n",y,m,zs); /*输出所查询月份的总收入、总支出、总余额*/printf("\t%d年%d月总支出:%g\n",y,m,zz);printf("\t%d年%d月总余额:%g\n",y,m,s);printf("************************************************************ ******************");}函数五:void Yearput() /*按年查询收支信息函数*/{FILE *ap;int y;float zs=0,zz=0,s=0;printf("输入要查询的年份:");scanf("%d",&y);if((ap=fopen("money.txt","r"))==NULL)printf("不能打开money.txt文件!\n");while(fread(&RMB,sizeof(struct money),1,ap)>0){if(y==RMB.year) /*输出符合条件的信息*/{printf("\t%d年%d月%d日\n",RMB.year,RMB.mon,RMB.day);printf("\t收入:%g\n\t收入来源:%s\n",RMB.shou,RMB.a);printf("\t支出:%g\n\t支出去向:%s\n",RMB.zhi,RMB.b);printf("\t余额:%g\n\n",RMB.yu);zs+=RMB.shou; /*统计查询年份的总收入、总支出、总余额*/zz+=RMB.zhi;s+=RMB.yu;}}fclose(ap);printf("\t%d年总收入:%g\n",y,zs); /*输出年度总收入、总支出、总余额*/ printf("\t%d年总支出:%g\n",y,zz);printf("\t%d年总余额:%g\n",y,s);printf("******************************************************************************\n");}函数六:void Allput() /*查询全部收支信息函数*/{FILE *ap;float s=0,zs=0,zz=0;if((ap=fopen("money.txt","r"))==NULL)printf("不能读取money.txt文件\n");while(1){if(fread(&RMB,sizeof(struct money),1,ap)>0) /*在money.txt文件中读取信息*/{printf("\t日期:%d %d %d\n",RMB.year,RMB.mon,RMB.day); /*输出年、月、日*/printf("\t收入:%g\n\t收入来源:%s\n",RMB.shou,RMB.a); /*输出查询的收入、收入来源*/printf("\t支出:%g\n\t支出去向:%s\n",RMB.zhi,RMB.b); /*输出查询的支出、支出去向*/printf("\t余额:%g\n\n",RMB.yu); /*输出余额*/zs+=RMB.shou; /*统计总收入*/zz+=RMB.zhi; /*统计总支出*/s+=RMB.yu; /*统计总余额*/}else break;}printf("************************************************************ ***********\n");printf("\t总收入:%g\n\t总支出:%g\n\t总余额:%g\n",zs,zz,s); /*输出总收入、总支出、总余额*/printf("************************************************************ ***********\n");fclose(ap); /*关闭文件*/}函数七:void Delete() /*删除收支信息函数*/{int i;while(1){printf("\n 1 按日期部分删除\n");printf(" 2 全部删除\n");printf(" 0 退出删除\n");printf(" 请选择删除方式:");scanf("%d",&i); /*收受用户输入的删除方式*/if(i==1) /*按日期删除部分收支信息*/{Delpart(); /*调用按日期删除部分收支信息函数*/}else if(i==2) /*删除全部信息*/{Delall(); /*调用删除全部收支信息函数*/}else if(i==0) /*退出删除*/{printf("************************************************************ *****\n");break;}else /*用户输入的信息错误*/{printf(" 输入错误!\n");printf("************************************************************ ***\n");break;}}}函数八:void Delpart() /*按日期删除部分收支信息函数*/ {FILE *ap;List *head,*r,*s,*pb;int n=0,y,m,d;head=(List *)malloc(sizeof(List)); /*创建头节点*/head->next=NULL;r=head;if((ap=fopen("money.txt","r"))==NULL)printf("不能打开money.txt文件!\n");printf(" 输入要删除的年月日:");scanf("%d%d%d",&y,&m,&d);while(fread(&RMB,sizeof(struct money),1,ap)>0) /*在文件中读取信息查找要删除的信息*/{if(y==RMB.year&&m==RMB.mon&&d==RMB.day)n++;else{s=(List *)malloc(sizeof(List)); /*尾插入法创建链表并将不需要删除的信息存在数据域*/s->data=RMB;r->next=s;r=s;}}r->next=NULL; /*为节点的next置为NULL*/fclose(ap); /*关闭文件*/if(n) /*要删除的信息存在*/{ap=fopen("money.txt","wb"); /*重新打开文件并删除原全部记录*/pb=head->next;while(pb!=NULL){fwrite(&pb->data,sizeof(struct money),1,ap); /*将链表数据域中的数据读入文件得到删除后的新文件*/pb=pb->next;}fclose(ap); /*删除成功,关闭文件*/printf(" \n 成功删除%d年%d月%d日的收支信息!\n",y,m,d);printf("************************************************************ ****\n");}else /*要删除的信息部存在*/{printf(" \n 无%d年%d月%d日的收支信息!\n",y,m,d);printf("************************************************************ ****\n");}}函数九:void Delall() /*删除全部收支信息函数*/{FILE *ap;ap=fopen("money.txt","wb");fclose(ap);printf(" \n 成功删除全部收支信息!\n");printf("************************************************************ *\n");}函数函数十:void main(){int i;printf("**********************^_^欢迎进入个人财务管理程序^_^*************************\n");printf(" 1 输入收支信息\n");printf(" 2 查询收支信息\n");printf(" 3 删除收支信息\n");printf(" 0 退出\n");printf(" 请选择要执行的功能:");scanf("%d",&i);while(i!=0){if(i==1){input(); /*调用输入收支信息函数*/printf(" 1 输入收支信息\n");printf(" 2 查询收支信息\n");printf(" 3 删除收支信息\n");printf(" 0 退出\n");printf(" 请选择要执行的功能:");scanf("%d",&i);}else if(i==2){Output(); /*调用查询收支信息函数*/ printf(" 1 输入收支信息\n");printf(" 2 查询收支信息\n");printf(" 3 删除收支信息\n");printf(" 0 退出\n");printf(" 请选择要执行的功能:");scanf("%d",&i);}else if(i==3) /*调用删除收支信息函数*/ {Delete();printf(" 1 输入收支信息\n");printf(" 2 查询收支信息\n");printf(" 3 删除收支信息\n");printf(" 0 退出\n");printf(" 请选择要执行的功能:");scanf("%d",&i);}else /*用户输入错误时提示*/{printf("\n 只能输入1或2或3或0!\n");printf(" 请重新选择要执行的功能:");scanf("%d",&i);}}printf("========================^_^ 谢谢您的使用!^_^============================\n");}六、程序运行效果图七、总结通过做个人财务管理程序这课程设计,我意识到逻辑分析能力理清问题的思路以及函数间的相互调用关系很重要。
《数据结构》课程设计报告专业计算机科学与技术班级(1)姓名学号指导教师起止时间2011.10~2011.12课程设计:个人账簿管理一、任务描述个人帐簿管理系统记录某人每月的全部收入及各项开支情况,包括食品消费,房租,子女教育费用,水电费,医疗费,储蓄等。
进入系统后可以输入和修改某月的收支情况,可以对每月的开支从小到大进行排序,可以根据输入的月份查询每月的收支情况。
要求:根据以上任务说明,设计程序完成功能。
二、问题分析1、功能分析分析设计课题的要求,要求编程实现以下功能:(1)记录某人每月的全部收入及各项开支情况,包括食品消费,房租,子女教育费用,水电费,医疗费,储蓄等(2)输入和修改某月的收支情况(3);对每月的开支从小到大进行排序(4)根据输入的月份查询每月的收支情况。
2、数据对象分析食品消费,房租,子女教育费用,水电费,医疗费,储蓄三、数据结构设计#include "linklist.h"#include"calculate.h"void menu(){printf("----------------------------------------\n");printf(" ---欢迎使用个人帐簿管理系统---\n");printf("----------------------------------------\n");printf("\n");printf(" ======菜单======\n");printf(" 1-程序说明\n");printf(" 2-建立个人账簿管理表\n");printf(" 3-插入记录\n");printf(" 4-查询记录\n");printf(" 5-修改记录\n");printf(" 6-支出排序\n");printf(" 7-遍历表中内容\n");printf(" 0-保存文件并退出\n");printf("\n");printf("----------------------------------------\n");printf("请选择...");}void title(int a){printf("==========个人帐簿管理系统==============\n");printf("----------------------------------------\n");switch(a){case 1:printf(" 程序说明\n");break;case 2:printf(" 建立个人账簿管理表\n");break;case 3:printf(" 插入记录\n");break;case 4:printf(" 查询记录\n");break;case 5:printf(" 修改记录\n");break;case 6:printf(" 按照支出升序排序\n");break;case 7:printf(" 当前表中内容\n");break;case 0:printf(" 保存表并退出\n");break;}printf("\n");}void tail(){printf("----------\n");printf("按Enter键继续...\n");getchar();}void instruction()//程序说明函数{printf(" 本程序为个人账簿管理系统。
CC++实现个⼈收⽀系统的⽰例代码昨天朋友委托我做⼀个基于C++的课程⼩设计,题⽬如下:设计⼀个简单的个⼈收⽀管理系统,⾄少包括如下功能:1、逐笔输⼊个⼈收⼊或⽀出的明细,写⼊到⽂件保存,可不断进⾏输⼊和追加。
输⼊的明细数据包括:收⽀明细类别编码、发⽣⽇期、⾦额、备注。
1)为了简化⽤户的输⼊,类别编码由字母和数字构成:“a”表⽰收⼊、“b”表⽰⽀出,数字是⼤类下的编号。
类别编码及类别名称的对应由⾃⼰定义、组织在程序中并输出展⽰。
⽐如 a1 表⽰收⼊类的⽣活费,b1 表⽰⽀出类的学习,编号依次递增,类别的数量和名称根据⽇常需要⾃拟。
例如:收⼊类:a1‐⽣活费,a2‐奖学⾦,a3‐稿费⽀出类:b1‐学习⽤品,b2‐⽣活⽤品,b3‐游戏2)⽤户输⼊收⽀明细,具体的输⼊格式如下(各数据⽤⼀个或多个连续空格分隔,直接输⼊回车表⽰输⼊结束):请逐笔输⼊类别编码、发⽣⽇期、⾦额、备注:输⼊收⽀明细:a1 2020‐1‐26 2000.0 1 ⽉⽣活费输⼊收⽀明细:b1 2020‐3‐9 52.5 买书…输⼊收⽀明细:b2 2020‐5‐9 78.00 购买台灯3)将输⼊的明细数据写⼊到⼀个⽂件中进⾏保存,便于以后进⾏追加和处理。
2、根据⽇常对个⼈收⽀管理的需要,完成汇总,进⾏功能设计和编码实现。
需要统计并输出⽤户所输⼊⽉份各收⽀类别的汇总情况,输出后,再次询问⽤户是否输出该⽉的各笔明细,⽤户回答是,则按明细类别的升序输出;回答否,则不输出。
输⼊和输出结果如下:请输⼊对收⽀类别数据进⾏汇总的⽉份:2020‐32020 年 3 ⽉收⽀类别数据的汇总收⼊/⽀出明细类别⾦额收⼊⽣活费 2000…⽀出学习⽤品 200…2020 年 3 ⽉的总收⼊为:1500,总⽀出为:1200是否输出该⽉的各笔明细(y 为输出,其他为不输出):y2020 年 3 ⽉收⽀类别数据的明细类别收⼊/⽀出发⽣⽇期⾦额备注⽣活费收⼊ 2020‐03‐01 2000.0 3 ⽉⽣活费学习⽤品⽀出 2020‐03‐03 10.0 买钢笔…⾃⼰敲了⼀遍,具体实现如下:#include <iostream>#include <stdlib.h>#include <string.h>#define MAX_MARK 100using namespace std;struct Pay{char payment[2];int inout;int year;int month;int day;int money;char mark[MAX_MARK];}ioi;/*⽇期,收⼊/⽀出⾦额收⼊来源/⽀出⽬的*/void displayMenu(){cout <<"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;cout <<"+ 个⼈收⽀管理系统 +"<<endl;cout <<"+ 1. 添加收⽀ +"<<endl;cout <<"+ 2. 查找收⽀ +"<<endl;cout <<"+ 3. 统计收⽀ +"<<endl;cout <<"+ 4. 输出⽂件 +"<<endl;cout <<"+ 5. 结束程序 +"<<endl;cout <<"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;}int addPayment(Pay ioi[],int num){char tempPayment[3];cout <<"请逐笔输⼊类别编码、发⽣⽇期、⾦额、备注"<<endl;cout <<"输⼊收⽀明细:";scanf("%s %d-%d-%d %d %s",ioi[num].payment,&ioi[num].year,&ioi[num].month,&ioi[num].day,&ioi[num].money,ioi[num].mark); if(ioi[num].payment[0]=='a'){ioi[num].inout = 1;}else{ioi[num].inout = 0;}num++;return num;};void findPayment(Pay ioi[],int num){int kind;int i;int flag=0;int tempMonth=0,tempYear=0;cout <<"请输⼊想要查找的⽬标(1为年⽉,2为类别):"<<endl;cin >> kind;if(kind == 1){cout << "请输⼊查找的年⽉(XXXX-XX):";scanf("%d-%d",&tempYear,&tempMonth);for(i=0;i<num;i++){if(ioi[i].year==tempYear && ioi[i].month== tempMonth){cout << "找到了!";if(ioi[i].inout == 1){cout <<"收⼊ ";}if(ioi[i].inout == 0){cout <<"⽀出 ";}cout <<ioi[i].money;cout << '\t';cout <<ioi[i].mark<<endl;}}}char tempPayment[2];if(kind == 2){cout <<"请输⼊查找的类别:";cin >> tempPayment;for(i=0;i<num;i++){if(ioi[i].payment[0] == tempPayment[0] && ioi[i].payment[1] == tempPayment[1]){cout <<"找到了!";if(ioi[i].inout == 1){cout <<"收⼊ ";}if(ioi[i].inout == 0){cout <<"⽀出 ";}cout <<ioi[i].money;cout << '\t';cout <<ioi[i].mark<<endl;}}}};void sumPayment(Pay ioi[],int num){int i;int sumYear=0;int sumMonth=0;int judge=0;cout <<"请输⼊对收⽀类别数据进⾏汇总的⽉份:";scanf("%d-%d",&sumYear,&sumMonth);printf("%d年%d⽉收⽀类别数据的汇总:\n",sumYear,sumMonth);cout << "收⽀\t明细\t⾦额" <<endl;for(i=0;i<num;i++){if(ioi[i].year==sumYear && ioi[i].month==sumMonth){if(ioi[i].inout == 1){cout <<"收⼊ ";}if(ioi[i].inout == 0){cout <<"⽀出 ";}cout <<ioi[i].money;cout << '\t';cout <<ioi[i].mark<<endl;}}int sumIn=0,sumOut=0;for(i=0;i<num;i++){if(ioi[i].inout == 1){sumIn+= ioi[i].money;}if(ioi[i].inout == 0){sumOut+= ioi[i].money;}}printf("%d年%d⽉的总收⼊为:%d 总⽀出为:%d\n",sumYear,sumMonth,sumIn,sumOut); cout <<"是否输出各笔明细:(是1否0):";cin >>judge;if(judge==1){printf("%d年%d⽉收⽀类别数据的明细:\n",sumYear,sumMonth);cout <<"类别\t收⼊\t⽀出\t发⽣⽇期\t⾦额\t备注"<<endl;for(i=0;i<num;i++){if(ioi[i].payment[0] == 'a' &&ioi[i].payment[0] == '1')cout <<"⽣活费 ";if(ioi[i].payment[0] == 'a' &&ioi[i].payment[0] == '2')cout <<"奖学⾦ ";if(ioi[i].payment[0] == 'a' &&ioi[i].payment[0] == '3')cout <<"稿费 ";if(ioi[i].payment[0] == 'b' &&ioi[i].payment[0] == '1')cout <<"学习⽤品 ";if(ioi[i].payment[0] == 'b' &&ioi[i].payment[0] == '2')cout <<"⽣活⽤品 ";if(ioi[i].payment[0] == 'b' &&ioi[i].payment[0] == '3')cout <<"游戏 ";if(ioi[i].inout == 1){cout <<"收⼊\t";}if(ioi[i].inout == 0){cout <<"⽀出\t";}cout <<ioi[i].money;cout << '\t';cout <<ioi[i].mark<<endl;}}};void writeFile(Pay ioi[]){FILE *fp=NULL;int i=0;fp=fopen("payment.txt","wb");if(fp==NULL){cout <<"打开⽂件出错!"<<endl;exit(0);}fwrite(&ioi,sizeof(struct Pay),1,fp);cout <<"信息已保存到⽂payment.txt中"<<endl;fclose(fp);};void sortMoney(Pay ioi[],int length) //冒泡排序{int i=0,j=0,k=0;Pay temp;for(i=0;i<length;i++){k=i;for(j=i+1;j<length;j++)if(ioi[j].money>ioi[k].money)k=j;temp=ioi[k];ioi[k]=ioi[i];ioi[i]=temp;}}int main(){int allNum=0;int choice=0;struct Pay ioi[50];while(1){displayMenu();cout<<"请选择您的操作(1,2,3,4,5)"<<endl;cin>>choice;switch(choice){case 1:allNum = addPayment(ioi,allNum);break;case 2:findPayment(ioi,allNum);break;case 3:sortMoney(ioi,allNum);sumPayment(ioi,allNum);break;case 4:writeFile(ioi);break;case 5:exit(0);break;default:cout<<"输⼊不合法,重新输⼊"<<endl;break;}}}总结到此这篇关于C/C++实现个⼈收⽀系统的⽰例代码的⽂章就介绍到这了,更多相关c++ 个⼈收⽀系统内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
界面:package个人收支管理系统;import java.util.Scanner;public class Test {public static void main(String[] args) {Manager b = new Manager();boolean bRun = true;while (bRun) {System.out.println("***********************************");System.out.println("***********个人收支管理*************");System.out.println(" ");System.out.println("************1.注册*****************");System.out.println("************2.登录******************");System.out.println("************3.收入*****************");System.out.println("************4.支出*****************");System.out.println("************5.查询与统计************");System.out.println("************6.写读取文件*************");System.out.println("************7.注销用户*******************");System.out.println("************8.退出******************");Scanner s = new Scanner(System.in);int userPrint = s.nextInt();switch (userPrint) {case 1:b.register();break;case 2:b.login();break;case 3:b.save();break;case 4:b.get();break;case 5:b.find();break;case 6:b.f();break;/*case 7:b.读出();break;*/case 7:b.exit();break;case 8:bRun = false;break;default:}}}}主方法:package个人收支管理系统;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.Reader;import java.io.Writer;import java.util.ArrayList;import java.util.Date;import java.util.LinkedList;import java.util.Scanner;import java.util.Vector;public class Manager {LinkedList<String> list = new LinkedList<String>();ArrayList<Vector<Object>> allUser = null;Vector<Object> currentUser = null;Date date= new Date();/***声明Vector<Object>*第1个元素存储卡号,下标为[0]*第2个元素存储密码,下标为[1]*第3个元素存储用户的余额,下标为[2]**/public Manager() {allUser = new ArrayList<Vector<Object>>();}public void register() {System.out.println("请输入注册信息,格式为卡号-密码-开卡额");Scanner s = new Scanner(System.in);String information = s.next();String[] infos = information.split("-");//实例化一个Vector表示新的用户Vector<Object> v = new Vector<Object>();v.add(infos[0]);v.add(infos[1]);v.add(infos[2]);allUser.add(v);}public void login() {System.out.println("请输入您要登录的帐号:");Scanner s = new Scanner(System.in);int userPrintCode = s.nextInt();for (int i = 0; i < allUser.size(); i++) {Vector<Object> findUser = allUser.get(i);Object findCodeObj = findUser.get(0);String findCodeStr = findCodeObj.toString();int findCodeInt = Integer.parseInt(findCodeStr);if (findCodeInt == userPrintCode) {boolean bLogin = validatePassword(findUser.get(1));if (bLogin) {System.out.println("登录成功");//如果登录成功,将成员变量currentUser赋值为findUser(卡号和密码都校验成功的用户)currentUser = findUser;} else {System.out.println("登录失败");}}}}/***该方法用于校验*[已经查到的卡号]的密码是否正确*参数password已经查到的用户存储的密码**/public boolean validatePassword(Object password) {//用户输入密码System.out.println("请输入密码");Scanner s = new Scanner(System.in);int userPrintPw = s.nextInt();String passwordStr = password.toString();int passwordInt = Integer.parseInt(passwordStr);//如果用户输入的密码,和刚才传入的对应卡号的密码一致if (userPrintPw == passwordInt) {return true;} else {return false;}}public void save() {if (currentUser == null) {System.out.println("请先登录");} else {//卡中余额(在执行收入之前的卡中的钱)Object beforeMoney = currentUser.get(2);//请输入您要收入的额度Scanner s = new Scanner(System.in);System.out.println(date.toLocaleString());System.out.println("请输入顺序号:");String a=s.next();list.add(a);System.out.println("请输入日期");String data=s.next();list.add(data);System.out.println("请输入摘要内容:");String zaiyao=s.next();list.add(zaiyao);System.out.println("请输入收入额度:");int userPrintMoney = s.nextInt();int before = Integer.parseInt(beforeMoney.toString());//总额= 之前的余额+ 用户这次的收入额度int sum = before + userPrintMoney;//把总额再存储到当前的用户信息中(位置是第3个,下标为2)currentUser.set(2, sum);System.out.println("当前额度:"+currentUser.set(2, sum));}}public void get() {if (currentUser == null) {System.out.println("请先登录");} else {System.out.println("请输入您要支出的额度");Scanner s = new Scanner(System.in);int userPrintMoney = s.nextInt();Object beforeMoney = currentUser.get(2);int before = Integer.parseInt(beforeMoney.toString());if (before < userPrintMoney) {System.out.println("余额不足");} else {System.out.println(date.toLocaleString());System.out.println("请输入顺序号:");String a1=s.next();list.add(a1);System.out.println("请输入日期");String data1=s.next();list.add(data1);System.out.println("请输入摘要内容:");String zaiyao1=s.next();list.add(zaiyao1);//支出后的余额= 原卡中金额- 这次支出金额int sub = before - userPrintMoney;System.out.println("序号为:"+list.get(0));System.out.println("日期为:"+list.get(1));System.out.println("摘要内容"+list.get(2));/*System.out.println(list.get(3));*/currentUser.set(2, sub);System.out.println("支出成功!您的当前余额为:" + sub);list.add(date.toLocaleString());}}}public void find() {if (currentUser == null) {System.out.println("请先登录");} else {System.out.println("-----收入时的详细记录----");System.out.println(date.toLocaleString());System.out.println("序号为:"+list.get(0));System.out.println("日期为:"+list.get(1));System.out.println("摘要内容:"+list.get(2));System.out.println("您当前额度为:");System.out.println("-----支出时的详细记录----");System.out.println(list.get(6));System.out.println("序号为:"+list.get(3));System.out.println("日期为:"+list.get(4));System.out.println("摘要内容:"+list.get(5));System.out.println("您当前的余额为:" + currentUser.get(2));}}public void f(){S ystem.out.println("友情提示您想记录文件请copy查询结果paste到a文件中");F ile f1=new File("G:\\ab\\a.txt");F ile f2=new File("G:\\ab\\b.txt");try {R eader input=new FileReader(f1);B ufferedReader br=new BufferedReader(input);W riter wt = new FileWriter(f2);B ufferedWriter bw=new BufferedWriter(wt);S tring s= "";while((s=br.readLine())!=null){bw.write(s);bw.newLine();System.out.println(s);}br.close();bw.close();} catch (IOException e) {e.printStackTrace();}}public void exit() {currentUser = null;}}运行结果:主界面1.注册与登入功能:2.收入功能:支出功能:查询与统计:写入与读出功能:退出功能如有侵权请联系告知删除,感谢你们的配合!。
个人帐簿管理系统设计五、程序运行结果1、原文件内容#include <stdio.h>#include <stdlib.h>#include <memory.h>#include <windows.h>//文件保存路径#define FilePath1 "Myinfor.dat"#define FilePath2 "Myinfor.txt"//查询用声明#define Status int#define OK 1#define Error 0#define NotFound 2typedef struct {int month;//月份int spxf;//食品消费int fzfy;//房租费用int znjy;//子女教育费用int sdfy;//水电费用int ylfy;//医疗费用int cxfy;//储蓄费用int srfy;//收入费用} Infor;typedef struct {// 查询用自定义数据类型int no;int data;}pType;void menu(void); //菜单void input(Infor *newI); //接收键盘输入void writeinfor(Infor *newI);//向文件内写入内容void changeFormat(void );//将dat格式文件转换为txt文件Status search(Infor *a);//查询函数[返回查询的结果及查询的状态] void paixu(Infor *a);//对查询据结果排序void modify(Infor *a,int mon);//修改数据void delRecord(int mon);//删除数据void main(){while(1){menu();}}void menu(void){int item;int mon;Infor *a;a=(Infor *)malloc(sizeof(Infor));do{printf("\n******个人帐簿管理系统设计*****\n\n");printf("1.录入数据\n");printf("2.查看数据\n");printf("3.修改数据\n");printf("4.查询数据\n");printf("5.排序数据\n");printf("6.删除数据\n");printf("0.退出系统\n\n");printf("请输入要进行的操作: " );scanf("%d",&item);}while(item>6 || item<-1);switch(item){ //退出程序case 0: getchar();getchar();exit(1);break;//录入数据case 1: input(a);writeinfor(a);break;//查看数据case 2: changeFormat();break;//修改数据case 3: item=search(a);mon=a->month;if (item!=OK) printf("\n没有符合条件的记录!\n");else{printf("\n记录月份食品消费房租费用子女费用水电费用医疗费用储蓄费用本月收入\n");printf("----------------------------------------------------------------------- \n");printf("%7d %8d %8d %8d %8d %8d %8d %8d\n",a->month,a->spxf,a->fzfy,a->znjy,a->sdfy,a->ylfy, a->cxfy,a->srfy);input(a);modify(a,mon);}break;//查询数据case 4: item=search(a);if (item!=OK) printf("\n没有符合条件的记录!\n");else{printf("\n记录月份食品消费房租费用子女费用水电费用医疗费用储蓄费用本月收入\n");printf("----------------------------------------------------------------------- \n");printf("%7d %8d %8d %8d %8d %8d %8d %8d\n",a->month,a->spxf,a->fzfy,a->znjy,a->sdfy,a->ylfy, a->cxfy,a->srfy);}break;//排序数据case 5: item=search(a);if (item!=OK) printf("\n没有符合条件的记录!\n");elsepaixu(a);break;//删除数据case 6:item=search(a);mon=a->month;if (item!=OK) printf("\n没有符合条件的记录!\n");else{printf("\n记录月份食品消费房租费用子女费用水电费用医疗费用储蓄费用本月收入\n");printf("----------------------------------------------------------------------- \n");printf("%7d %8d %8d %8d %8d %8d %8d %8d\n",a->month,a->spxf,a->fzfy,a->znjy,a->sdfy,a->ylfy, a->cxfy,a->srfy);delRecord(mon);}break;}free(a);//释放内存空间}void input(Infor *newI){printf("\n请依次输入数据(中间以空格符隔开):\n(本月月份食品消费房租费用子女费用水电费用医疗费用储蓄费用收入费用)\n");scanf("%d%d%d%d%d%d%d%d",&newI->month,&newI->spxf,&newI->fzfy,&newI->znjy,&newI->s dfy,&newI->ylfy,&newI->cxfy,&newI->srfy);fflush(stdin);}void writeinfor(Infor *newI){FILE *fp;fp=fopen(FilePath1,"ab+");if(fp==NULL){printf("无法创建文件:%s",FilePath1);exit(0);}fwrite(newI,sizeof(Infor),1,fp);//这里可以做特别处理可防止存在同一月份有2条以上的记录问题。
个人账簿管理系统
源程序(带简要注释)
自定义头文件中内容:
;
Sleep(80);
}
入数据。
\n");
printf("\t\t 2.查看数据。
\n");
printf("\t\t 3.修改数据。
\n");
printf("\t\t 4.查找数据。
\n");
printf("\t\t 5.排序数据。
\n");
printf("\t\t 6.删除数据。
\n");
printf("\t\t 7.说明文件。
\n");
printf("\t\t 0.退出系统。
\n");
printf("\t\t*****************************************\n");
printf("请选择要进行的操作:");
scanf("%d",&choice);
}while((choice < 0) || (choice > 7));
确查找。
\n");
printf("\t\t 2.按用户查找。
\n");
printf("\t\t 3.按月份查找。
\n");
printf("\t\t 0.返回主菜单。
\n");
printf("\t\t*****************************************\n");
printf("请选择要进行的操作:");
scanf("%d",&choice);
}while((choice < 0) || (choice > 3));
switch(choice)
{
case 0:
flag = 0;
system("cls");
break;
case 1:
choice = search(q);
if(choice != TRUE)
{
printf("没有符合条件的记录!\n");
}
else
{
printf("\n用户名月份食品费房租子女教育费水电费医疗费当月储
蓄当月收入月总消费\n");
printf("--------------------------------------------------------------------------------\n");
printf("%s %-5d%-9d%-8d%-10d%-8d%-7d%-7d%-8d%-8d\n",\
q->username,q->month,q->food,q->rent,q->education,q->water,q->medicine,q->saving, q->income,q->TotalExpenses);
}
flag = 1;
break;
case 2:
SearchUser(q);
flag = 1;
break;
case 3:
SearchMonth(q);
flag = 1;
break;
}
return flag;
}
at中读数据写入显示文件.txt
while(!feof(fp1))
{
printf("%s %-5d%-9d%-8d%-10d%-8d%-7d%-9d%-8d%-8d\n",\
q->username,q->month,q->food,q->rent,q->education,q->water,q->medicine,q->saving, q->income,q->TotalExpenses);
fprintf(fp2,"%s %-5d%-9d%-8d%-10d%-8d%-7d%-9d%-8d%-8d\n",\
q->username,q->month,q->food,q->rent,q->education,q->water,q->medicine,q->saving, q->income,q->TotalExpenses);
fread(q,sizeof(Bill),1,fp1);
}
fputs("---------------------------------------------------------------------------------\n",fp2);
fputs("关闭该界面继续主程序!\n",fp2);
fclose(fp1);
fclose(fp2);
system(FilePath2); o = i;
}
r[1].data = q->month;
r[2].data = q->food;
r[3].data = q->rent;
r[4].data = q->education;
r[5].data = q->water;
r[6].data = q->medicine;
r[7].data = q->saving;
r[8].data = q->income;
r[9].data = q->TotalExpenses;
ata > r[j+1].data)
{
t = r[j].data;
r[j].data = r[j+1].data;
r[j+1].data = t;
t = r[j].no;
r[j].no = r[j+1].no;
r[j+1].no = t;
}
else
{
flag = 0;
}
j--;
}
}
o]);
}
printf("\n");
printf("-----------------------------------------------------------------------------\n");
printf("%s ",q->username);
for(i = 1; i < 10; i++)
{
printf("%-8d",r[i].data);
}
printf("\n");
return;
}
...................个人帐簿管理系统说明书.....................\n\n",fp);
fputs(" 一.录入数据:供用户添加并保存相关数据。
\n",fp);
fputs(" 二.查看数据:供用户查看该系统存储的所有用户的所有信息。
\n",fp);
fputs(" 三.修改数据:供用户修改相关数据,需输入用户名及月份。
\n",fp);
fputs(" 四.查找数据:给用户提供了三种查找方式:\n",fp);
fputs(" 1.精确查找:供用户精确查看特定用户在某月内收支情况。
\n",fp);
fputs(" 2.按用户查找:供用户查看并提取特定用户的全部数据。
\n",fp);
fputs(" 3.按月份查找:供用户查看并提取所有用户在某月内的数据。
\n",fp);
fputs(" 五.排序数据:供用户查看某月收支升序排列后的结果。
\n",fp);
fputs(" 六.删除数据:供用户删除无用的数据。
\n",fp);
fputs(" 零.退出系统:供用户退出该系统。
\n\n",fp);
fputs(" 制作者:杨帅帅。
\n\n",fp);
fputs(" 辅导老师:张永。
\n\n",fp);
fputs(" 制作时间:2011年6-7月。
\n\n",fp);
fputs(" 制作地点:兰州理工大学。
\n\n",fp);
fputs(".................................................................\n\n",fp);
fputs("关闭该界面返回到主界面!\n\n",fp);
fclose(fp);
system(FilePath7);
return;
}。