c语言个人账簿管理系统代码
- 格式:doc
- 大小:196.50 KB
- 文档页数:9
#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(">输入错误。
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++ 个⼈收⽀系统内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
#include <stdio.h>#include <stdlib.h>#include <string.h>struct Data{char name[20];char riqi[8];float money;char beizhu[50];};struct list{struct Data info;struct list *next;};struct list *Inhead=NULL;struct list *Intail=NULL;struct list *zhichuhead=NULL;struct list *zhichutail=NULL;struct list *temp=NULL;void chaxun_income();void chaxun_zhichu();void xiugai_income();void xiugai_zhichu();void Save_income(){FILE *fp;fp=fopen("D:\家庭财务管理.txt","w");struct list *p = Inhead;while(p != NULL){fwrite(&p->info, sizeof(struct Data), 1, fp);p = p->next;}fclose(fp);}void Save_zhichu(){FILE *fp;fp=fopen("D:\家庭财务管理支出.txt","w");struct list *p = zhichuhead;while(p != NULL){fwrite(&p->info, sizeof(struct Data), 1, fp);p = p->next;}fclose(fp);}void Open(){FILE *fp;fp=fopen("D:\家庭财务管理.txt","r");if(fp!=NULL){struct Data linshi;while(fread(&linshi, sizeof(struct Data), 1, fp) == 1){temp=(struct list*)malloc(sizeof(struct list));temp->info=linshi;temp->next=NULL;if(Inhead == NULL){Inhead = temp;Intail = temp;}else{Intail->next = temp;Intail = temp;}}fclose(fp);}}void Menu(){ system("cls");printf("\n");printf("\n");printf("\n");printf("\n");printf("******************\n");printf("欢迎使用家庭财务管理系统\n");printf("******************\n");printf(" \n");printf(" 1:收入操作\n");printf(" 2:支出操作\n");printf(" 3:统计操作\n");printf(" 0:退出\n");}void Openzhichu(){FILE *fp;fp=fopen("D:\家庭财务管理支出.txt","r");if(fp!=NULL){struct Data linshi;while(fread(&linshi, sizeof(struct Data), 1, fp) == 1){temp=(struct list*)malloc(sizeof(struct list));temp->info=linshi;temp->next=NULL;if(zhichuhead == NULL){zhichuhead = temp;zhichutail = temp;}else{zhichutail->next = temp;zhichutail = temp;}}fclose(fp);}}void mingzi (){char chazhao[20];printf("请输入查询的名字");gets(chazhao);struct list *p = Inhead;while(p != NULL){if(strcmp(p->,chazhao)==0){printf("姓名:");puts(p->);printf("日期:");puts(p->info.riqi);printf("收入:");printf("%.4f\n",p->info.money);printf("备注:");puts(p->info.beizhu);system("PAUSE");}p = p->next;}if(Inhead!=NULL){char panduan;printf("是否继续查询(Y/N)");panduan=getchar();fflush(stdin);if(panduan=='Y'||panduan=='y'){chaxun_income();}}}void mingzi_zhichu (){char chazhao[20];printf("请输入查询的名字");gets(chazhao);struct list *p = zhichuhead;while(p != NULL){if(strcmp(p->,chazhao)==0){printf("姓名:");puts(p->);printf("日期:");puts(p->info.riqi);printf("收入:");printf("%.4f\n",p->info.money);printf("备注:");puts(p->info.beizhu);system("PAUSE");}p = p->next;}if(zhichuhead!=NULL){char panduan;printf("是否继续查询(Y/N)");panduan=getchar();fflush(stdin);if(panduan=='Y'||panduan=='y'){chaxun_zhichu();}}}void mingzi_xiugai_income(){char xiugai[20];printf("请输入修改的名字");fflush(stdin);gets(xiugai);struct list *p = Inhead;while(p != NULL){if(strcmp(p->,xiugai)==0){fflush(stdin);printf("姓名:");gets(p->);fflush(stdin);printf("日期:");gets(p->info.riqi);fflush(stdin);printf("支出: ");scanf("%f",&p->info.money);fflush(stdin);printf("备注:");gets(p->info.beizhu);fflush(stdin);//------}p = p->next;}Save_income();if(Inhead!=NULL){char panduan;printf("是否继续修改(Y/N)");panduan=getchar();fflush(stdin);if(panduan=='Y'||panduan=='y'){xiugai_income();}}}void mingzi_xiugai_zhichu(){char xiugai[20];printf("请输入修改的名字");fflush(stdin);gets(xiugai);struct list *p = zhichuhead;while(p != NULL){if(strcmp(p->,xiugai)==0){fflush(stdin);printf("姓名:");gets(p->);fflush(stdin);printf("日期:");gets(p->info.riqi);fflush(stdin);printf("支出: ");scanf("%f",&p->info.money);fflush(stdin);printf("备注:");gets(p->info.beizhu);fflush(stdin);//------}p = p->next;}Save_zhichu();if(zhichuhead!=NULL){char panduan;printf("是否继续修改(Y/N)");panduan=getchar();fflush(stdin);if(panduan=='Y'||panduan=='y'){xiugai_zhichu();}}}void riqi(){char chazhao[20];printf("请输入查询的日期");gets(chazhao);struct list *p = Inhead;while(p != NULL){if(strcmp(p->info.riqi,chazhao)==0){printf("姓名:");puts(p->);printf("日期:");puts(p->info.riqi);printf("收入:");printf("%.4f\n",p->info.money);printf("备注:");puts(p->info.beizhu);system("PAUSE");}p = p->next;}if(Inhead!=NULL){char panduan;printf("是否继续查询(Y/N)");panduan=getchar();fflush(stdin);if(panduan=='Y'||panduan=='y'){chaxun_income();}}}void riqi_zhichu(){char chazhao[20];printf("请输入查询的日期");gets(chazhao);struct list *p = zhichuhead;while(p != NULL){if(strcmp(p->info.riqi,chazhao)==0){printf("姓名:");puts(p->);printf("日期:");puts(p->info.riqi);printf("收入:");printf("%.4f\n",p->info.money);printf("备注:");puts(p->info.beizhu);system("PAUSE");}p = p->next;}if(zhichuhead!=NULL){char panduan;printf("是否继续查询(Y/N)");panduan=getchar();fflush(stdin);if(panduan=='Y'||panduan=='y'){chaxun_zhichu();}}}void riqi_xiugai_income(){char xiugai[20];printf("请输入修改的日期");fflush(stdin);gets(xiugai);struct list *p = Inhead;while(p != NULL){if(strcmp(p->info.riqi,xiugai)==0){fflush(stdin);printf("姓名:");gets(p->);fflush(stdin);printf("日期:");gets(p->info.riqi);fflush(stdin);printf("支出: ");scanf("%f",&p->info.money);fflush(stdin);printf("备注:");gets(p->info.beizhu);fflush(stdin);//------}p = p->next;}Save_income();if(Inhead!=NULL){char panduan;printf("是否继续修改(Y/N)");panduan=getchar();fflush(stdin);if(panduan=='Y'||panduan=='y'){xiugai_income();}}}void riqi_xiugai_zhichu(){char xiugai[20];printf("请输入修改的日期");fflush(stdin);gets(xiugai);struct list *p = zhichuhead;while(p != NULL){if(strcmp(p->info.riqi,xiugai)==0){fflush(stdin);printf("姓名:");gets(p->);fflush(stdin);printf("日期:");gets(p->info.riqi);fflush(stdin);printf("支出: ");scanf("%f",&p->info.money);fflush(stdin);printf("备注:");gets(p->info.beizhu);fflush(stdin);//------}p = p->next;}Save_zhichu();if(zhichuhead!=NULL){char panduan;printf("是否继续修改(Y/N)");panduan=getchar();fflush(stdin);if(panduan=='Y'||panduan=='y'){xiugai_zhichu();}}}void money (){float chazhao;printf("请输入查询的money");scanf("%f",&chazhao);fflush(stdin);struct list *p = Inhead;while(p != NULL){if(p->info.money==chazhao){printf("姓名:");puts(p->);printf("日期:");puts(p->info.riqi);printf("收入:");printf("%.4f\n",p->info.money);printf("备注:");puts(p->info.beizhu);system("PAUSE");}p = p->next;}if(Inhead!=NULL){char panduan;printf("是否继续查询(Y/N)");panduan=getchar();fflush(stdin);if(panduan=='Y'||panduan=='y'){chaxun_income();}}}void money_zhichu (){float chazhao;printf("请输入查询的money");scanf("%f",&chazhao);fflush(stdin);struct list *p = zhichuhead;while(p != NULL){if(p->info.money==chazhao){printf("姓名:");puts(p->);printf("日期:");puts(p->info.riqi);printf("收入:");printf("%.4f\n",p->info.money);printf("备注:");puts(p->info.beizhu);system("PAUSE");}p = p->next;}if(zhichuhead!=NULL){char panduan;printf("是否继续查询(Y/N)");panduan=getchar();fflush(stdin);if(panduan=='Y'||panduan=='y'){chaxun_zhichu();}}}void money_xiugai_income(){float xiugai;printf("请输入修改的money");scanf("%f",&xiugai);fflush(stdin);struct list *p = Inhead;while(p != NULL){if(p->info.money==xiugai){fflush(stdin);printf("姓名:");gets(p->);fflush(stdin);printf("日期:");gets(p->info.riqi);fflush(stdin);printf("支出: ");scanf("%f",&p->info.money);fflush(stdin);printf("备注:");gets(p->info.beizhu);fflush(stdin);//------}p = p->next;}Save_income();if(Inhead!=NULL){char panduan;printf("是否继续修改(Y/N)");panduan=getchar();fflush(stdin);if(panduan=='Y'||panduan=='y'){xiugai_income();}}}void money_xiugai_zhichu(){float xiugai;printf("请输入修改的money");scanf("%f",&xiugai);fflush(stdin);struct list *p = zhichuhead;while(p != NULL){if(p->info.money==xiugai){fflush(stdin);printf("姓名:");gets(p->);fflush(stdin);printf("日期:");gets(p->info.riqi);fflush(stdin);printf("支出: ");scanf("%f",&p->info.money);fflush(stdin);printf("备注:");gets(p->info.beizhu);fflush(stdin);//------}p = p->next;}Save_zhichu();if(zhichuhead!=NULL){char panduan;printf("是否继续修改(Y/N)");panduan=getchar();fflush(stdin);if(panduan=='Y'||panduan=='y'){xiugai_zhichu();}}}void beizhu(){char chazhao[20];printf("请输入查询的备注");gets(chazhao);struct list *p = Inhead;while(p != NULL){if(strcmp(p->info.beizhu,chazhao)==0){printf("姓名:");puts(p->);printf("日期:");puts(p->info.riqi);printf("收入:");printf("%.4f\n",p->info.money);printf("备注:");puts(p->info.beizhu);system("PAUSE");}p = p->next;}if(Inhead!=NULL){char panduan;printf("是否继续查询(Y/N)");panduan=getchar();fflush(stdin);if(panduan=='Y'||panduan=='y'){chaxun_income();}}}void beizhu_zhichu(){char chazhao[20];printf("请输入查询的备注");gets(chazhao);struct list *p = zhichuhead;while(p != NULL){if(strcmp(p->info.beizhu,chazhao)==0){printf("姓名:");puts(p->);printf("日期:");puts(p->info.riqi);printf("收入:");printf("%.4f\n",p->info.money);printf("备注:");puts(p->info.beizhu);system("PAUSE");}p = p->next;}if(zhichuhead!=NULL){char panduan;printf("是否继续查询(Y/N)");panduan=getchar();fflush(stdin);if(panduan=='Y'||panduan=='y'){chaxun_zhichu();}}}void beizhu_xiugai_income(){char xiugai[20];printf("请输入修改的备注");fflush(stdin);gets(xiugai);struct list *p = Inhead;while(p != NULL){if(strcmp(p->info.beizhu,xiugai)==0){fflush(stdin);printf("姓名:");gets(p->);fflush(stdin);printf("日期:");gets(p->info.riqi);fflush(stdin);printf("支出: ");scanf("%f",&p->info.money);fflush(stdin);printf("备注:");gets(p->info.beizhu);fflush(stdin);//------}p = p->next;}Save_income();if(Inhead!=NULL){char panduan;printf("是否继续修改(Y/N)");panduan=getchar();fflush(stdin);if(panduan=='Y'||panduan=='y'){xiugai_income();}}}void beizhu_xiugai_zhichu(){char xiugai[20];printf("请输入修改的备注");fflush(stdin);gets(xiugai);fflush(stdin);struct list *p = zhichuhead;while(p != NULL){if(strcmp(p->info.beizhu,xiugai)==0){fflush(stdin);printf("姓名:");gets(p->);fflush(stdin);printf("日期:");gets(p->info.riqi);fflush(stdin);printf("支出: ");scanf("%f",&p->info.money);fflush(stdin);printf("备注:");gets(p->info.beizhu);fflush(stdin);//------}p = p->next;}Save_zhichu();if(zhichuhead!=NULL){char panduan;printf("是否继续修改(Y/N)");panduan=getchar();fflush(stdin);if(panduan=='Y'||panduan=='y'){xiugai_zhichu();}}}void Income_menu(){system("cls");printf("\n");printf("\n");printf("\n");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(" 0.返回上一级\n");}void zhichu_menu(){system("cls");printf("\n");printf("\n");printf("\n");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(" 0.返回上一级\n");}void chaxun_menu(){system("cls");printf("\n");printf("\n");printf("\n");printf("\n");printf("******************\n");printf("欢迎使用家庭财务管理系统\n");printf("******************\n");printf(" \n");printf(" 1.按名字查询\n");printf(" 2.按日期查询\n");printf(" 3.按money询\n");printf(" 4.按备注查询\n");printf(" 0.返回上一级\n"); }void xiugai_menu(){system("cls");printf("\n");printf("\n");printf("\n");printf("\n");printf("******************\n");printf("欢迎使用家庭财务管理系统\n");printf("******************\n");printf(" \n");printf(" 1.按名字修改\n");printf(" 2.按日期修改\n");printf(" 3.按money修改\n");printf(" 4.按备注修改\n");printf(" 0.返回上一级\n");}void Add_income(){char panduan;do{temp=(struct list*)malloc(sizeof(struct list));printf("姓名");gets(temp->);fflush(stdin);printf("日期(XX年XX月XX日)");gets(temp->info.riqi);fflush(stdin);printf("收入");scanf("%f",&temp->info.money);fflush(stdin);printf("备注");gets(temp->info.beizhu);fflush(stdin);printf("\n");//------自己添加temp->next=NULL;if(Inhead == NULL){Inhead = temp;Intail = temp;}else{Intail->next = temp;Intail = temp;}Save_income();//后面可以添加“继续添加功能”printf("是否(Y/N)继续添加信息\n");panduan=getchar();fflush(stdin);}while(panduan=='Y'||panduan=='y');system("PAUSE");}void Add_zhichu(){char panduan;do{temp=(struct list*)malloc(sizeof(struct list));printf("姓名");gets(temp->);fflush(stdin);printf("日期(XX年XX月XX日)");gets(temp->info.riqi);fflush(stdin);printf("支出");scanf("%f",&temp->info.money);fflush(stdin);printf("备注");gets(temp->info.beizhu);fflush(stdin);printf("\n");//------自己添加temp->next=NULL;if(zhichuhead == NULL){zhichuhead = temp;zhichutail = temp;}else{zhichutail->next = temp;zhichutail = temp;}Save_zhichu();//后面可以添加“继续添加功能”printf("是否(Y/N)继续添加信息\n");panduan=getchar();fflush(stdin);}while(panduan=='Y'||panduan=='y');system("PAUSE");}void Del_income(){char shanchu[20];struct list *p=NULL;struct list *m =NULL;struct list *n =NULL;p=Inhead;printf("请输入删除姓名");gets(shanchu);if(strcmp(Inhead->,shanchu)==0){while(Inhead!=NULL && strcmp(Inhead->,shanchu)==0) {char ch;printf("找到一个数据名字为%s,确认删除Y/N?",shanchu);ch=getchar();fflush(stdin);if(ch=='y'||ch=='Y') Inhead=Inhead->next;else break;}}else{if(strcmp(Intail->,shanchu)==0){do{ m=p;p=p->next;}while(p!=Intail);m->next=NULL;}//删除尾巴else{do{m=p;p=p->next;n=p->next;}while(strcmp(p->,shanchu)!=0&&n->next!=NULL);if(strcmp(p->,shanchu)==0)m->next=n;}}//删除除头节点之外的节点,自己课后完成Save_income();if(Inhead!=NULL){char panduan;printf("是否继续删除(Y/N)");panduan=getchar();fflush(stdin);if(panduan=='Y'||panduan=='y'){Del_income();}}}void Del_zhichu(){char shanchu[20];struct list *p=NULL;struct list *m =NULL;struct list *n =NULL;p=zhichuhead;printf("请输入删除姓名");gets(shanchu);if(strcmp(zhichuhead->,shanchu)==0){while(zhichuhead!=NULL && strcmp(zhichuhead->,shanchu)==0) {char ch;printf("找到一个数据名字为%s,确认删除Y/N?",shanchu);ch=getchar();fflush(stdin);if(ch=='y'||ch=='Y') zhichuhead=zhichuhead->next;else break;}}else{if(strcmp(zhichutail->,shanchu)==0){do{ m=p;p=p->next;}while(p!=zhichutail);m->next=NULL;}//删除尾巴else{do{m=p;p=p->next;n=p->next;}while(strcmp(p->,shanchu)!=0&&n->next!=NULL);if(strcmp(p->,shanchu)==0)m->next=n;}}Save_zhichu();//删除除头节点之外的节点,自己课后完成if(zhichuhead!=NULL){char panduan;printf("是否继续删除(Y/N)");panduan=getchar();fflush(stdin);if(panduan=='Y'||panduan=='y'){Del_zhichu();}}}void xiugai_income(){xiugai_menu();int choice;printf(" 请输入你的选择:");scanf("%d",&choice);fflush(stdin);switch(choice){case 1: mingzi_xiugai_income();break;case 2: riqi_xiugai_income();break;case 3: money_xiugai_income();break;case 4: beizhu_xiugai_income();break;default: printf("输入错误");break;}}void xiugai_zhichu(){xiugai_menu();int choice;printf(" 请输入你的选择:");scanf("%d",&choice);fflush(stdin);switch(choice){case 1: mingzi_xiugai_zhichu();break;case 2: riqi_xiugai_zhichu();break;case 3: money_xiugai_zhichu();break;case 4: beizhu_xiugai_zhichu();break;default: printf("输入错误");break;}}void chaxun_income(){chaxun_menu();int choice;printf(" 请输入你的选择:");scanf("%d",&choice);fflush(stdin);switch(choice){case 1: mingzi();break;case 2: riqi();break;case 3: money();break;case 4: beizhu();break;default: printf("输入错误");break;}}void chaxun_zhichu(){chaxun_menu();int choice;printf(" 请输入你的选择:");scanf("%d",&choice);fflush(stdin);switch(choice){case 1: mingzi_zhichu();break;case 2: riqi_zhichu();break;case 3: money_zhichu();break;case 4: beizhu_zhichu();break;default: printf("输入错误");break;}}void Sho_income(){struct list *p = Inhead;while(p != NULL){printf("姓名:");puts(p->);printf("日期:");puts(p->info.riqi);printf("收入:");printf("%.4f\n",p->info.money);printf("备注:");puts(p->info.beizhu);p = p->next;}system("PAUSE");}void Sho_zhichu(){struct list *p = zhichuhead;while(p != NULL){fflush(stdin);printf("姓名:");puts(p->);printf("日期:");puts(p->info.riqi);printf("支出:");printf("%.4f\n",p->info.money);printf("备注:");puts(p->info.beizhu);p = p->next;}system("PAUSE");}void Income(){int choice;while(1){Income_menu();printf("请输入选择");scanf("%d",&choice);fflush(stdin);if(choice==0){break;}elseswitch(choice){case 1: Add_income(); Save_income();break;case 2: Del_income(); Save_income();break;case 3: chaxun_income(); Save_income();break;case 4: Sho_income(); Save_income();break;case 5: xiugai_income(); Save_income();break;}}}void zhichu(){int choice;while(1){zhichu_menu();printf("请输入选择");scanf("%d",&choice);fflush(stdin);if(choice==0){break;}elseswitch(choice){case 1: Add_zhichu(); Save_zhichu();break;case 2: Del_zhichu(); Save_zhichu();break;case 3: chaxun_zhichu(); Save_zhichu();break;case 4: Sho_zhichu(); Save_zhichu();break;case 5: xiugai_zhichu(); Save_zhichu();break;}}}void tongji_menu(){system("cls");printf("\n");printf("\n");printf("\n");printf("\n");printf("******************\n");printf("欢迎使用家庭财务管理系统\n");printf("******************\n");printf(" \n");printf(" 1.总收入\n");printf(" 2.总支出\n");printf(" 3.总资金\n");printf(" 0.返回上一级\n");}void zongshouru(){float shouru=0;struct list *linshi;linshi=Inhead;if(linshi!=NULL){do{shouru=linshi->info.money+shouru;linshi=linshi->next;}while(linshi!=NULL);printf("%.4f",shouru);system("PAUSE");}}void zongzhichu(){float zhichu=0;struct list *linshi;linshi=zhichuhead;if(linshi!=NULL){do{zhichu=linshi->info.money+zhichu;linshi=linshi->next;}while(linshi!=NULL);printf("%.4f",zhichu);system("PAUSE");}}void zongzijin(){float zhichu=0;float zongzijin;struct list *linshi;linshi=zhichuhead;if(linshi!=NULL){do{zhichu=linshi->info.money+zhichu;linshi=linshi->next;}while(linshi!=NULL);}float shouru=0;linshi=Inhead;if(linshi!=NULL){do{shouru=linshi->info.money+shouru;linshi=linshi->next;}while(linshi!=NULL);printf("%.4f",shouru-zhichu);system("PAUSE");}}void Tongji(){while(1){tongji_menu();int choice;printf(" 请输入你的选择:");scanf("%d",&choice);if(choice==0){break;}switch(choice){case 1: zongshouru();break;case 2: zongzhichu();break;case 3: zongzijin();break;default: printf("输入错误");break;}}}void Quit(){char panduan;printf("确认退出(Y/N)");panduan=getchar();fflush(stdin);if(panduan=='Y'||panduan=='y'){exit(0);}}int main(){Open();Openzhichu();system("color 72");while(1){Menu();int choice;printf(" 请输入你的选择:");scanf("%d",&choice);fflush(stdin);switch(choice){case 1: Income();break;case 2: zhichu();break;case 3: Tongji();break;case 0: Quit();break;default: printf("输入错误");break;}}return 0;}。
#include"stdio.h"#include "string.h"#define M 100struct stu{char user[10]; //用户名char cipher[10]; //密码struct Income;struct Expense;};struct Income{float gongzi;float jiangjin;float jintie;float zhongjiang;float total1;};struct Expense{float shuidian;float tongxun;float huoshi;float jiaoji;float lvyou;float fangzu;float total2;};char user[][10]={"liwenjian", "wangsiyao"," wuchao"},cipher[][6]={"123","456" ,"789"};int index=0;int enter(struct stu s[],struct Income I[],struct Expense E[]);void print(struct stu s[],int a,struct Income I[],int b,struct Expense E[], int c); void search(struct stu s[],int a,struct Income I[],int b,struct Expense E[], int c); int insert(struct stu s[],int a,struct Income I[],int b,struct Expense E[], int c); int del(struct stu s[],int a,struct Income I[],int b,struct Expense E[], int c); void save(struct stu s[],int a,struct Income I[],int b,struct Expense E[], int c); int load(struct stu s[],int a,struct Income I[],int b,struct Expense E[], int c); void modify(struct stu s[],int a,struct Income I[],int b,struct Expense E[], int c); void sort(struct stu s[],int a,struct Income I[],int b,struct Expense E[], int c); int menu();int main(){struct stu person[M];int length;for(;;)switch(menu()) //调用主菜单函数,返回值为整数,作开关语句的条件 {case 1: length=enter(person);break; //输入记录case 2: print(person,length); break; //显示全部记录case 3: search(person,length); break; //查找记录case 4: length=insert(person,length); break; //插入记录 case 5: length=del(person,length); break; //删除记录case 6: save(person,length); break; //保存文件case 7: length=load(person); break; //读文件case 8: sort(person,length); break; //排序case 9: modify(person,length); break; //修改记录信息case 10: return 0; //如果菜单返回值为10,则程序结束 }}int menu(){int choice;printf(" MENU\n");printf(" *********************************\n");printf(" 1. 输入有户名及密码\n"); //输入记录printf(" 2. 显示所有记录\n" ); // 显示所有记录 printf(" 3. 按用户名查找记录\n"); //按用户名查找记录printf(" 4. 插入记录\n"); //插入记录到数组中printf(" 5. 删除记录");printf(" 6. 保存文件\n"); //将数组中的记录保存到文件中 printf(" 7. 从文件中读文件\n"); //从文件中读入记录printf(" 8. 排序\n"); //排序printf(" 9. 修改记录信息\n"); //修改记录信息printf(" 10.退出\n"); //退出printf(" *********************************\n");do{printf("\n 输入选项(1-10):");scanf("%d",&choice); //以整型数的形式保存选择号}while(choice<1 || choice>10); //选择项不在1~10之间,重新选择return choice; //返回选择项,主程序根据该返回值调用相应的函数}int enter(struct stu s[]){ int i=0,n=0,j;//char user[][10]={"liwenjian", "wangsiyao"," wuchao"},cipher[][6]={"123","456" ,"789"};do{printf("请输入用户名及密码:\n");scanf("%s%s",s[index].user,s[index].cipher);for(j=0;j<3;j++)if(strcmp(s[index].user,user[j])==0 && strcmp(s[index].cipher,cipher[j])==0) break;if(j==3){printf("用户名及密码错误!\n");n++;}}while(n<3);if(n==3)return 0;//input other termprintf("收入信息");printf("工资");scanf("%f",struct Income I[i].gongzi);printf("奖金");scanf("%f",struct Income I[i].jiangjin);printf("津贴");scanf("%f",struct Income I[i].jintie);printf("中奖");scanf("%f",struct Income I[i].zhongjiang);printf("支出信息");printf("水电");scanf("%f",struct Expense E[i].shuidian);printf("通讯");scanf("%f",struct Expense E[i].tongxun);printf("伙食");scanf("%f",struct Expense E[i].huoshi);printf("交际");scanf("%f",struct Expense E[i].jiaoji);printf("旅游");scanf("%f",struct Expense E[i].lvyou);printf("房租");scanf("%f",struct Expense E[i].fangzu);struct I;[i]total1==struct Income I[i].gongzi+struct Income I[i].jiangjin+struct Income I[i].jintie+struct Income I[i].zhongjiang;struct E;[i]total2==struct Expense E[index].shuidian+struct Expense E[index].tongxun+struct Expense E[index].huoshi+struct Expense E[index].jiaoji+struct Expense E[index].lvyou+struct Expense E[index].fangzu;index++;return index;}//显示信息void print(struct stu s[],int a,struct Income I[],int b,struct Expense E[], int c);{int i;printf(" 用户信息");printf("\n******************************************************************************\n ");printf(" | 用户 |工资|奖金|津贴|中奖|收入总和|水电|通讯|伙食|交际|旅游|房租|支出总和|\n");printf("|-------|----|----|----|----|--------|----|----|----|----|----|----|--------|\n" );printf("|%-8s|%-8f|%-8f|%-4f|%-4f|%-8f|%-8f|%-8f|%-4f|%-4f|%-8f|%-4f|%-8f|",s[i].user,I[ i].jiangjin,I[i].jintie,I[i].zhongjiang,I[i].total1I[i].jiangjin,I[i].jintie,I[i].zhongjiang,I[i].total1E[i].shuidian,E[i].tongxun,E[i].huoshi,E[i].jiaoji,E[i].lvyou,E[i].fangzu,E[i].total2printf("******************************************************************************\n ");getchar();}/*按用户查找记录信息*/void search(struct stu s[],int a,struct Income I[],int b,struct Expense E[], int c); {char user[]; //存放姓名的字符数组int i;printf("请输入用户名:");scanf("%s",urer); //输入待查找的姓名for(i=0;i<n;i++) //查找从第一条记录开始,直到最后一条记录为止 if(strcmp(user,s[i].user)==0) //待查找的姓名与数组中的记录姓名比较,相等则显示找到的记录信息{printf( "\n 找到的记录信息");printf( "\n ******************************************************************************\n ");printf(" | 用户 |工资|奖金|津贴|中奖|收入总和|水电|通讯|伙食|交际|旅游|房租|支出总和|\n");printf("|-------|----|----|----|----|--------|----|----|----|----|----|----|--------|\n" );printf("|%-8s|%-8f|%-8f|%-4f|%-4f|%-8f|%-8f|%-8f|%-4f|%-4f|%-8f|%-4f|%-8f|",s[i].user,I[ i].jiangjin,I[i].jintie,I[i].zhongjiang,I[i].total1I[i].jiangjin,I[i].jintie,I[i].zhongjiang,I[i].total1E[i].shuidian,E[i].tongxun,E[i].huoshi,E[i].jiaoji,E[i].lvyou,E[i].fangzu,E[i].total2printf (" *******************************end********************************************\n ");}elseprintf("没找到!"); //显示没有该用户}/*按用户删除记录信息*/int del(struct stu s[],int a,struct Income I[],int b,struct Expense E[], int c); {char user[10]; //存放要删除记录的学号int i,j;printf("请输入要删除的用户:");scanf ("%s",user); //输入要删除记录的学号for(i=0;i<3;i++){if(strcmp(user,s[i].user)==0){for(j=i+1;j<n;j++) //从i+1位置记录开始到最后一个记录为止依次前移,删除i位置记录{strcpy(s[j-1].user,s[j].user);strcpy(I[j-1].gongzi,I[j].gongzi);strcpy(I[j-1].jiangjin,I[j].jiangjin);strcpy(I[j-1].jintie,I[j].jintie);strcpy(I[j-1].zhongjiang,I[j].zhongjiang) :strcpy(I[j-1].total1,I[j].tatol1);strcpy(E[j-1].shuidian,E[j].shuidian);strcpy(E[j-1].tongxun,E[j].tongxun);strcpy(E[j-1].huoshi,E[j].huoshi);strcpy(E[j-1].jiaoji,E[j].jiaoji);strcpy(E[j-1].lvyou,E[j].lvyou);strcpy(E[j-1].fangzu,E[j].fangzu)strcpy(E[j-1].total2,E[j]total2);}break;}}n--; //记录数减1return (n);}/*将记录信息保存到磁盘文件中*/void save(struct stu s[],int a,struct Income I[],int b,struct Expense E[], int c); {FILE *fp; //定义指向文件的指针int i;char outfile[20]; //保存输出文件名printf("Enter outfile name. for example c:\\cfile\\inf.tex\n");//提示输入文件名格式信息scanf("%s",outfile);if((fp=fopen(outfile, "wb"))==NULL) //为输出打开一个二进制文件,如果没有则建立 {printf("can not open file\n"); //如果不能打开,则结束程序return;}else{for(i=0;i<n;i++)fwrite(&s[i],sizeof(struct stu),1,fp); //写入一条记录 fclose(fp); //关闭文件printf("------ 保存成功! !------\n"); //显示保存成功}}。
#include"stdio.h"#include"windows.h"#include"stdlib.h"#include"conio.h"#include"iostream.h"#define pe "%2d%8d%6d%9d%10d%11d%8d%7d%8d\n" struct Checkbook{int mon;int income;int food;int house;int education;int wat_ele;int treat;int save;int out;Checkbook *next;};int count=0;int flag=0;Checkbook *Head,*Total;void init_Head(){Head=new Checkbook;Head=NULL;}void init_Total(){Total=new Checkbook;Total->income=0;Total->food=0;Total->house=0;Total->education=0;Total->wat_ele=0;Total->treat=0;Total->save=0;Total->out=0;}void TOTAL(Checkbook *h){Checkbook *p=h;while(p!=NULL){p->out=p->food+p->house+p->education+p->wat_ele+p->treat;Total->income=Total->income+p->income;Total->food=Total->food+p->food;Total->house=Total->house+p->house;Total->education=Total->education+p->education;Total->wat_ele=Total->wat_ele+p->wat_ele;Total->treat=Total->treat+p->treat;Total->save=Total->save+p->save;Total->out=Total->out+p->out;p=p->next;}}int insert(){Checkbook *p,*q;int i; int ch;while(1){system("cls");for(i=0;i<15;i++)printf(" *");printf("记录每月收支情况");for(i=0;i<15;i++)printf(" *");p=new Checkbook;printf("\n\n请输入:\n\n");printf("月份收入食品消费房租子女教育费用水电费医疗费储蓄\n");cin>>p->mon>>p->income>>p->food>>p->house>>p->education>>p->wat_ele>>p->treat>>p->s ave;count++;if(flag==0){if(count==1)Head=p;elseq->next=p;q=p;}if(flag==1){q=Head;while(q->next!=NULL)q=q->next;q->next=p;q=p;}q->next=NULL;printf("\n\n\n\n\n\n\t\t\t\1 继续请按1, 返回请按0 ! ");scanf("%d",&ch);getchar();if(ch==0){flag=1;init_Total();TOTAL(Head);return 0;}}}Display(Checkbook *p){Checkbook *q=p;int i;system("cls");for(i=0;i<15;i++)printf(" *");printf("每月收支状况");for(i=0;i<15;i++)printf(" *");printf("\n\n月份收入食品消费房租子女教育费用水电费医疗费储蓄支出\n\n");while(q!=NULL){printf(pe,q->mon,q->income,q->food,q->house,q->education,q->wat_ele,q->treat,q->save,q->out);q=q->next;}printf("\n合计:%5d%6d%9d%10d%11d%8d%7d%8d",Total->income,Total->food,Total->house,Total->educa tion,Total->wat_ele,Total->treat,Total->save,Total->out);printf("\n\n\n\n\n\t\t\t\1 请按0返回!");getchar();getchar();return 1;}Checkbook *q[12];selectsort_1(Checkbook *q[],int n){int i,j,min;Checkbook *t;for(i=0;i<n;i++){min=i;for(j=i+1;j<n;j++)if(q[j]->out<q[min]->out)min=j;if(min!=i){t=q[i];q[i]=q[min];q[min]=t;}}return 1;}SORT_out(Checkbook *h){Checkbook *p=h;int i=0,j;system("cls");printf("\t\t\t\t开支递增排列\n");for(j=0;j<=39;j++)printf(" *");while(p!=NULL){q[i]=p;i++;p=p->next;}selectsort_1(q,i);printf("\n\n月份收入食品消费房租子女教育费用水电费医疗费储蓄支出\n\n");for(j=0;j<i;j++)printf(pe,q[j]->mon,q[j]->income,q[j]->food,q[j]->house,q[j]->education,q[j]->wat_ele,q[j]->treat, q[j]->save,q[j]->out);printf("\n\n\n\n\n\t\1 请按0返回!");getchar();return 1;}selectsort_2(Checkbook *s[],int n){int i,j,min;Checkbook *t;for(i=0;i<n-1;i++){min=i;for(j=i+1;j<n;j++)if(s[j]->income<s[min]->income)min=j;if(min!=i){t=s[i];s[i]=s[min];s[min]=t;}}return 1;}SORT_income(Checkbook *h){Checkbook *p=h,*q[12];int i=0,j;system("cls");printf("\t\t\t\t收入递增排列\n");for(j=0;j<=39;j++)printf(" *");while(p!=NULL){q[i]=p;i++;p=p->next;}selectsort_2(q,i);printf("\n\n月份收入支出\n\n");for(j=0;j<i;j++)printf("%2d%9d%9d\n",q[j]->mon,q[j]->income,q[j]->out); printf("\n\n\n\n\t\1 请按0返回!");getchar();getchar();}Checkbook *Find(int m){Checkbook *p=Head;while(p!=NULL){if(p->mon==m) break;p=p->next;}return p;}CONSULT(){Checkbook *C;int i,c,p;do{system("cls");for(i=0;i<13;i++)printf(" \1"); printf(" 查询某月收支情况");for(i=0;i<13;i++)printf(" \1");printf("\n\n \1 请输入要查询的月份:");scanf("%d",&c);C=Find(c);if(C!=NULL){printf("\n\n月份收入食品消费房租子女教育费用水电费医疗费储蓄支出\n\n");printf(pe,C->mon,C->income,C->food,C->house,C->education,C->wat_ele,C->treat,C->save,C-> out);}elseprintf("\n\n\1 对不起,找不到你要查询的月份!"); //如果返回的结点点为空则显示提示printf("\n\n\n\n\n\t\t\t\1 继续查询请按1 ,返回请0 !");scanf("%d",&p); getchar();if(p==0)return 1;}while(p==1);return 1;}DELETE_Data(){Checkbook *p,*q,*s;int i,c,d;do{system("cls");for(i=0;i<13;i++)printf(" \1");printf(" 删除某月收支数据");for(i=0;i<13;i++)printf(" \1");printf("\n\n \1 请输入要删除的月份:");scanf("%d",&c);q=Find(c);if(q!=NULL){p=Head;while(p!=NULL&&p!=q){s=p;p=p->next;}if(q==Head)Head=Head->next;elseif(p->next==NULL) s->next=NULL;else s->next=p->next;printf("\n\n\n\t\t%d月份的数据已删除成功!",c);}elseprintf("\n\n\1 对不起,找不到你要删除的月份!");printf("\n\n\n\n\n\t\t\1 继续删除请按1,返回请按0!");scanf("%d",&d); getchar();if(d==0){init_Total();TOTAL(Head);return 1;}}while(d==1);return 1;}Modify_Data(){Checkbook *p,*q,*s;int i,c,d;do{system("cls");for(i=0;i<13;i++) printf(" \1"); printf(" 修改某月收支数据");for(i=0;i<13;i++) printf(" \1");printf("\n\n \1 请输入要修改的月份:");scanf("%d",&c);q=Find(c);if(q!=NULL){p=Head;while(p!=NULL&&p!=q){s=p;p=p->next;}if(q==Head){printf("收入食品消费房租子女教育费用水电费医疗费储蓄\n");cin>>p->income>>p->food>>p->house>>p->education>>p->wat_ele>>p->treat>>p->save;}elseif(p->next==NULL){printf("收入食品消费房租子女教育费用水电费医疗费储蓄\n");cin>>p->income>>p->food>>p->house>>p->education>>p->wat_ele>>p->treat>>p->save;}else{printf("收入食品消费房租子女教育费用水电费医疗费储蓄\n");cin>>p->income>>p->food>>p->house>>p->education>>p->wat_ele>>p->treat>>p->save;}printf("\n\n\n\t\t%d月份的数据已修改成功!",c);}elseprintf("\n\n\1 对不起,找不到你要修改的月份!");printf("\n\n\n\n\n\t\t\1 继续修改请按1,返回请按0!");scanf("%d",&d);getchar();if(d==0){init_Total();TOTAL(Head);return 1;}}while(d==1);return 1;}SA VE(){system("cls");printf("\n\n\n\n\n\n\n\n\t\t\t\t数据已经保存好!");printf("\n\n\t\t\t\t\1 (请按任意键返回!)");getchar();getchar();return 1;}void MENUE_WINDOW(){int i, choice;for(;;){system("cls");for(i=0;i<13;i++)printf(" *");printf(" 个人帐簿管理系统");for(i=0;i<14;i++)printf(" *");printf("\n\n");for(i=0;i<40;i++)printf(" \1");printf("\n\n\t\t\t\t1 输入某月收支\n\n\t\t\t\t2 每月的收支状况\n\n\t\t\t\t3 开支递增排列\n\n\t\t\t\t4 收入递增排列");printf("\n\n\t\t\t\t5 查询某月收支\n\n\t\t\t\t6 删除某月收支\n\n\t\t\t\t7 保存数据\n\n\t\t\t\t8修改数据\n\n\t\t\t\t9 退出");printf("\n\n\t\1 \1 请选择1-9 : ");scanf("%d",&choice);switch(choice){case 1: insert(); break;case 2: Display(Head); break;case 3: SORT_out(Head); break;case 4: SORT_income(Head); break;case 5: CONSULT(); break;case 6: DELETE_Data(); break;case 7: SA VE(); break;case 8: Modify_Data(); break;case 9: exit(0); break;default: printf("\n\n\t\t\t选择错误,请重选!");getchar();getchar();}}}void START_WINDOW(){printf("\n\t\t\t \1 \1 \1 \1 \1 \1 \1 \1 \1 \1 \1 \1 \1 \1 \1 ");printf("\n\t\t\t \1 \1");printf("\n\t\t\t \1 \1");printf("\n\t\t\t \1 \1 \1 \1 \1 \1");printf("\n\t\t\t \1 \1 \1 \1 \1 \1");printf("\n\t\t\t \1 \1");printf("\n\t\t\t \1 \1");printf("\n\t\t\t \1 \1");printf("\n\t\t\t \1 \1");printf("\n\t\t\t \1 \1");printf("\n\t\t\t \1 \1");printf("\n\t\t\t \1 \1 \1 \1 \1 \1");printf("\n\t\t\t \1 \1 \1 \1 \1");printf("\n\t\t\t \1 \1");printf("\n\t\t\t \1 \1");printf("\n\t\t\t \1 \1 \1 \1 \1 \1 \1 \1 \1 \1 \1 \1 \1 \1 \1 ");printf("\n\n\t\t\t欢迎使用该帐簿管理程序!!");printf("\n\n\t\t\t\t(请按Enter进入程序)");}void main(){printf("dddddddd");char choice;init_Head();init_Total();do{system("cls");START_WINDOW();scanf("%c",&choice);if(choice=='\n')MENUE_WINDOW(); }while(choice!='\n');}。
C语言程序设计个人财务管理系统个人财务管理系统是一款帮助个人进行财务管理和分析的软件,能够帮助用户记录、分类、统计和分析个人的收入和支出。
本文将介绍一个使用C语言编写的简单个人财务管理系统。
首先,我们需要定义几个结构体来表示财务记录和分类信息:```c//定义财务记录结构体struct financial_recordint id; // 编号int year; // 年份int month; // 月份int day; // 日期char type[20]; // 类型double amount; // 金额};//定义分类信息结构体struct categorychar name[20]; // 分类名称double total; // 总金额int count; // 记录数量};//定义财务管理系统结构体struct financial_management_systemstruct financial_record records[100]; // 财务记录数组struct category categories[10]; // 分类信息数组int record_count; // 记录数量};```接下来,我们可以实现几个基本的功能,如添加记录、删除记录、查询记录和分类汇总等:```c//添加财务记录void add_record(struct financial_management_system *system) printf("请输入年份:");scanf("%d", &(system->records[system->record_count].year));//省略其他输入信息的代码printf("请输入金额:");scanf("%lf", &(system->records[system->record_count].amount));system->record_count++;//删除财务记录void delete_record(struct financial_management_system*system, int id)for (int i = 0; i < system->record_count; i++)if (system->records[i].id == id)for (int j = i; j < system->record_count - 1; j++)system->records[j] = system->records[j + 1];}system->record_count--;break;}}//查询财务记录void query_record(struct financial_management_system system, int year, int month, int day)for (int i = 0; i < system.record_count; i++)if (system.records[i].year == year &&system.records[i].month == month &&system.records[i].day == day)printf("编号:%d\n", system.records[i].id);//输出其他信息的代码}}//分类汇总void summarize_category(struct financial_management_system system)for (int i = 0; i < system.record_count; i++)//查找分类信息是否存在int category_index = -1;for (int j = 0; j < 10; j++)if (strcmp(system.records[i].type, system.categories[j].name) == 0)category_index = j;break;}}//如果分类信息不存在,则添加分类信息if (category_index == -1)strcpy(system.categories[system.category_count].name, system.records[i].type);system.categories[system.category_count].count = 1;system.categories[system.category_count].total = system.records[i].amount;system.category_count++;} elsesystem.categories[category_index].count++;system.categories[category_index].total +=system.records[i].amount;}}for (int i = 0; i < system.category_count; i++)printf("分类:%s\t总金额:%lf\t记录数量:%d\n",system.categories[i].name,system.categories[i].total,system.categories[i].count);}```最后,我们可以编写主函数来完成用户和系统的交互:```cint maistruct financial_management_system system; system.record_count = 0;system.category_count = 0;while (1)printf("\n请选择操作:\n");printf("1. 添加记录\n");printf("2. 删除记录\n");printf("3. 查询记录\n");printf("4. 分类汇总\n");printf("0. 退出\n");int choice;scanf("%d", &choice);switch (choice)case 1:add_record(&system);break;case 2:printf("请输入要删除的记录编号:");int id;scanf("%d", &id);delete_record(&system, id);break;case 3:printf("请输入查询的日期(年月日):"); int year, month, day;scanf("%d %d %d", &year, &month, &day); query_record(system, year, month, day); break;case 4:summarize_category(system);break;case 0:return 0;default:printf("无效的操作!\n");break;}}```通过以上代码,我们实现了一个简单的个人财务管理系统。
#include <iostream.h>#include <fstream.h>#include <iomanip.h>#include <string.h>#include <stdio.h>#include <stdlib.h>#include <math.h>#define N 500 //允许录入的最多帐务次数class account{public:char a; //备注选项struct date{int year;int month;int day;}time;long double all_time; //时间总数char name[20]; //收支项名称int type; //收支类型long double money; //收支金额char remarks[100]; //备注};void menu(); //菜单函数void add(account cd[],int no, int n); // 输入帐务明细void input(account cd[],int n); //输入n次帐务明细void sort_suma(account cd[],int n); //n次帐务按总收入排序void sort_sumb(account cd[], int n); //n次帐务按日期排序void sort_sumc(account cd[], int n); //n次帐务按名称排序void seek_a(account cd[],int i, int n); //按序号查找帐务信息int seek_b(account cd[],int x,int y,int z, int n); //按日期查找帐务信息int seek_c(account cd[],char na[], int n); //按名称查找帐务信息int seek_d(account cd[],long double no,int a, int n); //按金额查找帐务信息int dela(account cd[],int no, int n); //按序号删除序号为no的帐务信息int delb(account cd[],int x,int y,int z, int n); //按日期删除序号为no的帐务信息int delc(account cd[],char na[], int n); //按名称删除序号为no的帐务信息int ins(account cd[],int no, int n); //新增帐务void mod1(account cd[],int no, int n); //按序号修改帐务信息void print(account cd[],int n); //打印所有帐务信息void printall(account cd[],int X,int Y,int Z,int x,int y,int z,int n); //按日期打印帐务统计信息int getin(account cd[], int n); //把帐务信息存入文件中int ReadBiFile(char *filename, account cd[]); //从文件中读取帐务信息void main(){ofstream fout;account stu[N];int choice,i,a,b,c,A,B,C;char name1[20];long double mon;int n; //帐务数cout<<" ********************************************"<<endl;cout<<" ********************************************"<<endl;cout<<" ******** 欢迎进入个人帐务管理系统 ******"<<endl;cout<<" ********************************************"<<endl;cout<<" ********************************************"<<endl;menu(); //调用输出菜单的函数while(1){cout<<("请选择:");cin>>choice;switch (choice){case 1:cout<<"输入你想录入帐务的数目:"<<endl;cin>>n;input(stu,n); //录入n个帐务信息menu();break;case 2:cout<<"根据什么排序:"<<endl;cout<<"1. 金额"<<endl<<"2. 日期"<<endl<<"3. 名称"<<endl;cin>>i;if(i==1){ sort_suma(stu,n); //按金额排序}else if(i==2){ //按日期排序sort_sumb(stu,n);}else if(i==3){ //按名称排序sort_sumc(stu,n);}menu();break;case 3:cout<<"请选择查找方式:"<<endl;cout<<"1.按序号"<<endl;cout<<"2.按日期"<<endl;cout<<"3.按名称"<<endl;cout<<"4.按金额"<<endl;cin>>i;switch (i){case 1:cout<<"请输入你要查找的序号:"<<endl;cin>>i;seek_a(stu,i,n); //按序号查找帐务信息menu();break;case 2:cout<<"请输入年月日:"<<endl;cin>>a>>b>>c;seek_b(stu,a,b,c,n); //按日期查找帐务信息menu();break;case 3:cout<<"请输入你要查找的名称:"<<endl;cin>>name1;seek_c(stu,name1,n); //按名称查找帐务信息menu();break;case 4:cout<<"请选择收支类型:"<<endl<<"1. 收入"<<endl<<"2. 支出"<<endl; cin>>i;cout<<"请输入你要查找的金额:"<<endl;cin>>mon;seek_d(stu,mon,i,n); //按金额查找帐务信息menu();break;default:cout<<"error input! 请重输! "<<endl;break;}break;case 4:cout<<"根据什么查找删除信息:"<<endl;cout<<"1. 序号"<<endl<<"2. 日期"<<endl<<"3. 名称"<<endl; cin>>i;if(i==1){cout<<"请输入你要删除的序号:"<<endl;cin>>i;n=dela(stu,i,n);//按序号删除帐务信息}else if(i==2){cout<<"请输入年月日:"<<endl;cin>>a>>b>>c;n=delb(stu,a,b,c,n); //按日期删除帐务信息}else if(i==3){cout<<"请输入名称:"<<endl;cin>>name1;n=delc(stu,name1,n); //按名称删除帐务信息}menu();break;case 5:cout<<"请输入你要新增帐务的序号:"<<endl;cin>>i;n=ins(stu,i,n); //按序号新增帐务信息menu();break;case 6:cout<<"根据什么查找修改信息:"<<endl;cout<<"1. 序号"<<endl<<"2. 日期"<<endl<<"3. 名称"<<endl; cin>>i;if(i==1){cout<<"请输入你要修改的序号:"<<endl;cin>>i;mod1(stu,i,n); //按序号修改帐务信息}else if(i==2){cout<<"请输入年月日:"<<endl;cin>>a>>b>>c;i=seek_b(stu,a,b,c,n); //按日期修改帐务信息mod1(stu,i,n);}else if(i==3){cout<<"请输入名称:"<<endl;cin>>name1;i=seek_c(stu,name1,n); //按名称修改帐务信息mod1(stu,i,n);}menu();break;case 7: print(stu,n); //输出帐务信息menu();break;case 8:cout<<"请输入时间段:"<<endl<<"从"<<endl; // 按日期打印帐务统计信息cin>>A>>B>>C;cout<<endl<<"到"<<endl;cin>>a>>b>>c;sort_sumb(stu,n);printall(stu,A,B,C,a,b,c,n);menu();break;case 9:getin(stu,n);menu();break;case 10:cout<<"请输入文件名:"<<endl;cin>>name1;n=ReadBiFile(name1, stu);menu();break;case 11:exit(0);break;default:cout<<"error input! 请重输! "<<endl;break;}}}void menu(){cout<<" 1. 请录入你想要录入的帐务信息 \n";cout<<" 2. 对您的帐本排序 \n";cout<<" 3. 查找你想要查找帐务信息 \n";cout<<" 4. 删除你已有帐务信息\n";cout<<" 5. 新增您的帐务信息\n";cout<<" 6. 修改您的帐务信息\n";cout<<" 7. 输出您的帐务信息\n";cout<<" 8. 对您的帐务进行统计\n";cout<<" 9. 保存你已输入帐务数据\n";cout<<" 10. 读取您已有帐务数据\n";cout<<" 11. 退出\n";}//输入帐务明细void add(account cd[],int no, int n){do{cout<<"请按 <年月日>的方式输入日期:"<<endl;cin>>cd[no].time.year>>cd[no].time.month>>cd[no].time.day;}while(cd[no].time.year<0 || cd[no].time.year>2008 || cd[no].time.month>12 ||cd[no].time.month<0||cd[no].time.day<0 || cd[no].time.day>31);cd[no].all_time=cd[no].time.year*10000 + cd[no].time.month*100 + cd[no].time.day; cout<<"请输入收支项名称:"<<endl;cin>>cd[no].name;do{cout<<"请选择收支类型:"<<endl<<"1. 收入"<<endl<<"2. 支出"<<endl;cin>>cd[no].type;}while(cd[no].type!=1 && cd[no].type!=2);if(cd[no].type==1){cout<<"请输入收入金额:"<<endl;cin>>cd[no].money;}else{cout<<"请输入支出金额:"<<endl;cin>>cd[no].money;}cout<<"是否输入备注(y/n)"<<endl;cin>>cd[no].a;if (cd[no].a=='y'){cout<<"请输入:"<<endl;cin>>cd[no].remarks;}}//输入n个帐务信息void input(account cd[],int n){ int i;for(i=0;i<n;i++){add(cd,i,n);}}//n个帐务按总收入排序void sort_suma(account cd[],int n) {int i,j;account temp;for(i=0;i<n;i++){if(cd[i].type==2)cd[i].money=-cd[i].money;}for(i=0;i<n;i++){for(j=i;j<n;j++){if(cd[i].money<cd[j].money){ temp=cd[i];cd[i]=cd[j];cd[j]=temp;}}}}//n次帐务按日期排序void sort_sumb(account cd[], int n) {int i,j;account temp;for(i=0;i<n;i++){for(j=i;j<n;j++){if(cd[i].all_time<cd[j].all_time) { temp=cd[i];cd[i]=cd[j];cd[j]=temp;}}}}//n次帐务按名称排序void sort_sumc(account cd[], int n) {int i,j,p=0;account temp;for(i=0;i<n;i++){for(j=i;j<n;j++){if(strcmp(cd[i].name,cd[j].name)<0){ temp=cd[i];cd[i]=cd[j];cd[j]=temp;}}}}//按序号查找帐务信息void seek_a(account cd[],int i, int n){int sign=0;cout<<"序号"<<setw(5)<<"年"<<setw(10)<<"月"<<setw(8)<<"日"<<setw(8)<<"名称"<<setw(24)<<"收入(正)/支出(负)"<<setw(6)<<"备注"<<endl;if(i>=0 && i<n){ if(cd[i].type==1){ if(cd[i].a=='y'){cout<<i<<setw(10)<<cd[i].time.year<<setw(8)<<cd[i].time.month<<setw(8)<<cd[i].ti me.day<<setw(8)<<cd[i].name<<setw(8)<<fabs(cd[i].money)<<setw(22)<<cd[i].remarks <<endl;}else{cout<<i<<setw(10)<<cd[i].time.year<<setw(8)<<cd[i].time.month<<setw(8)<<cd[i].ti me.day<<setw(8)<<cd[i].name<<setw(8)<<fabs(cd[i].money)<<endl;}}else{if(cd[i].a=='y'){cout<<i<<setw(10)<<cd[i].time.year<<setw(8)<<cd[i].time.month<<setw(8)<<cd[i].ti me.day<<setw(8)<<cd[i].name<<"-"<<fabs(cd[i].money)<<setw(22)<<cd[i].remarks<<endl;}else{cout<<i<<setw(10)<<cd[i].time.year<<setw(8)<<cd[i].time.month<<setw(8)<<cd[i].ti me.day<<setw(8)<<cd[i].name<<" -"<<fabs(cd[i].money)<<endl;}sign++;}if(sign==0){cout<<"无此序号"<<endl;}}//按日期查找帐务信息int seek_b(account cd[],int x,int y,int z, int n){int array[100]={0};int i,j=0;int sign=0;cout<<"序号"<<setw(5)<<"年"<<setw(10)<<"月"<<setw(8)<<"日"<<setw(8)<<"名称"<<setw(24)<<"收入(正)/支出(负)"<<setw(6)<<"备注"<<endl;for(i=0;i<n;i++){if(cd[i].time.year==x && cd[i].time.month==y && cd[i].time.day==z){if(cd[i].type==1){ if(cd[i].a=='y'){cout<<i<<setw(10)<<cd[i].time.year<<setw(8)<<cd[i].time.month<<setw(8)<<cd[i].ti me.day<<setw(8)<<cd[i].name<<setw(8)<<fabs(cd[i].money)<<setw(22)<<cd[i].remarks <<endl;}else{cout<<i<<setw(10)<<cd[i].time.year<<setw(8)<<cd[i].time.month<<setw(8)<<cd[i].ti me.day<<setw(8)<<cd[i].name<<setw(8)<<fabs(cd[i].money)<<endl;}}else{if(cd[i].a=='y'){cout<<i<<setw(10)<<cd[i].time.year<<setw(8)<<cd[i].time.month<<setw(8)<<cd[i].ti me.day<<setw(8)<<cd[i].name<<"-"<<fabs(cd[i].money)<<setw(22)<<cd[i].remarks<<endl;}elsecout<<i<<setw(10)<<cd[i].time.year<<setw(8)<<cd[i].time.month<<setw(8)<<cd[i].ti me.day<<setw(8)<<cd[i].name<<" -"<<fabs(cd[i].money)<<endl;}}sign++;array[j]=i;j++;}}if(sign==0){cout<<"此日无收支。
程序设计工程训练陈述之阿布丰王创作C语言程序设计个人财务管理系统课程名称 C语言程序设计工程训练姓名院(系)信息科学与技术学院专业班级学号指导教师教务处制目录1.需求分析12系统总框图和功能模块说明12.1系统总框图12.2功能模块说明13系统设计23.1主要结构体23.2主要功能函数24系统调试34.1、程序开始执行时系统的所显示的页面:34.2、选择退出系统:34.3、选择登陆,而且输入的帐号和密码都正确:34.4、用户输入的帐号不正确:44.5、用户输入的帐号正确,密码不正确:4 4.6、用户进行具体操纵:55总结66源程序清单61.需求分析编写一个个人财务支出管理系统,主要解决的问题是作为一个系统而言,它所要面对不只是某一个人而言,而是要面对很多的用户。
那么想要解决这一问题,就必须要求这个系统能够存储许多用户的基本信息和记录。
同时也要求系统能够对分歧的用户的身份进行查找和验证。
在验证通过之后,在对其进行用户所要求的操纵。
作为一个财务支出系统,那么就要求对于用户关于金钱的每一项操纵都要有相应的记录,同时并允许用户对于每一条整体的记录进行操纵,例如可以根据时间来查找某一确定日期是否进行了收入或者支出的操纵,也可以根据特定的需要来删除某一条整体的记录。
但不允许对每条记录的单项数据进行更改,因为不管是收入还是支出,所涉及的金额都是固定的,时间也是固定的,所以系统不允许用户对其进行操纵。
除此之外,还必须有足够大的空间来存储新的记录。
所以此程序就是基于这个思想而编写出来的,基本满足了用户对于一个财务支出管理系统所要求的相关功能。
2系统总框图和功能模块说明2.1系统总框图2.2功能模块说明(1)old_record( ):此函数由系统自行调用,作用是将所有用户信息存入系统。
(2)void save( ): 此函数的作用是将结构体数组中的信息写入文件存储,由系统调用。
(3)load( ):此函数的作用是将结构体数组中写入文件的信息读出,由系统调用。
个人账簿管理系统源程序(带简要注释)自定义头文件中内容:#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <string.h>#include <windows.h>//常量定义#define TRUE 1#define ERROR 0#define NOtFound -1#define MAXNAME 20 //用户名的最大长度//文件保存路径#define FilePath1 "userinfo.dat" //所有用户整体信息的二进制文件#define FilePath2 "userinfo.txt" //所有用户整体信息的文本文件#define FilePath3 "person.dat" //单个用户信息的二进制文件#define FilePath4 "person.txt" //单个用户信息的文本文件#define FilePath5 "month.dat" //单月用户信息的二进制文件#define FilePath6 "month.txt" //单月用户信息的文本文件#define FilePath7 "help.txt" //说明文件//函数返回值类型定义typedef int Status;//账单信息结构体typedef struct AccountBook{int food; //食品费用int rent; //房租费用int education; //子女教育费用int water; //水电费用int medicine; //医疗费用int TotalExpenses; //当月总消费int saving; //当月储蓄int income; //当月收入int month; //月份char username[MAXNAME+1]; //用户名}Bill;//查询信息结构体typedef struct{int no;int data;}Sort;void Menu(void); //主菜单Status SearchMenu(Bill *q); //查找子菜单,并返回其状态void input(Bill *q); //接收键盘数据输入void WriteFile(Bill *q); //将信息读入文件void FileOutput(void); //转换为文本文件输出Status search(Bill *q); //查找数据,并返回其结果和状态void SearchUser(Bill *q); //按用户查找并将数据保存到文件中并显示void SearchMonth(Bill *q); //按月份查找并将数据保存到文件中并显示void change(Bill *q,int mon,char *user); //修改数据后,更新文件中的相应记录并输出void remove(int mon); //按月删除数据void sort(Bill *q); //数据排序void quit(void); //退出系统void help(void); //说明文件,说明系统功能文件中内容://包含头文件#include "abms.h"//主函数int main(){char account[20]; //登陆用户名char password[20]; //登陆密码int i;printf("\t\t********欢迎进入个人账簿管理系统********\n\n");printf("\n\t\t\t请输入用户名和密码进入系统: \n");printf("\t\t\t请输入用户名: ");fflush(stdin);gets(account);printf("\t\t\t请输入密码: ");fflush(stdin);gets(password);if((!strcmp(account,"yss") && !strcmp(password,"110")) ||!strcmp(account,"guest") && !strcmp(password,"123")){printf("\n\n\t\t\t您已成功登陆,请稍侯!\n\n\t\t\t");// 延迟for(i = 0; i < 20; i++){printf(".");Sleep(80);}//进入页面时清除登陆界面system("cls");while(1){Menu();}}else{printf("\t\t\t\a警告:您尚未注册,无权使用该系统!\n");printf("\t\t\t正在强行退出!\n\t\t\t");for(i = 0; i < 20; i++){printf("!");Sleep(80);}printf("\n\n");printf("\t\t\t欢迎您下次使用!\a\a\a\a\a\a\n\n");}getchar();getchar();return 0;}文件中内容:#include "abms.h"#include "abms.h"//初始化主菜单void Menu(){int choice; //功能选择int mon; //按月查询char user[MAXNAME+1] = " "; //按用户查询int flag = 1;Bill *p;p = (Bill *)malloc(sizeof(Bill));do{printf("\t\t\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n\n");printf("\t\t********欢迎进入个人账簿管理系统********\n\n");printf("\t\t 1.录入数据。
个人帐簿管理系统设计五、程序运行结果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条以上的记录问题。
这里就不写了。
fclose(fp);printf("数据录入成功!\n");}void changeFormat(void) //暂时只能操作一行文件有待改进{FILE *fp1,*fp2;Infor *a;a=(Infor *)malloc(sizeof(Infor));fp1=fopen(FilePath1,"rb+");if(fp1==NULL){printf("无法找到文件:%s\n",FilePath1);return ; //返回主函数}fp2=fopen(FilePath2,"wt+");if(fp2==NULL){printf("无法创建文件:%s\n",FilePath2);return ; //返回主函数}fputs(" \n***个人帐簿管理系统***\n\n",fp2);fputs("记录月份食品消费房租费用子女费用水电费用医疗费用储蓄费用本月收入\n",fp2);fputs("----------------------------------------------------------------------- \n",fp2);printf("\n记录月份食品消费房租费用子女费用水电费用医疗费用储蓄费用本月收入\n");printf("----------------------------------------------------------------------- \n");rewind(fp1);fread(a,sizeof(Infor),1,fp1);while(!feof(fp1)){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);fprintf(fp2,"%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);fread(a,sizeof(Infor),1,fp1);}fputs("----------------------------------------------------------------------- \n",fp2);fputs("关闭本程序继续原程序!\n",fp2);fclose(fp1);fclose(fp2);system(FilePath2); //调用打开转换的文本文件remove(FilePath2);//删除文本文件文件}Status search(Infor *a){FILE *fp1;int mon;int isfound=0;printf("请正确输入要查询的月份:");scanf("%d",&mon);fflush(stdin);fp1=fopen(FilePath1,"rb+");if(fp1==NULL){printf("无法找到文件:%s\n",FilePath1);return Error; //返回主函数}rewind(fp1);fread(a,sizeof(Infor),1,fp1);while(!feof(fp1)){if(a->month==mon){isfound=1;break;}{isfound=0;}fread(a,sizeof(Infor),1,fp1);}fclose(fp1);if(isfound)return OK;elsereturn NotFound;}void paixu(Infor *a){int i=0,j=0,flag=0,t;pType px[8]={{0,0}};char str[8][10]={"记录月份","食品消费","房租费用","子女费用","水电费用","医疗费用","储蓄费用","本月收入"};for(;i<8;i++)px[i].no=i;px[0].data=a->month;px[1].data=a->spxf;px[2].data=a->fzfy;px[3].data=a->znjy;px[4].data=a->sdfy;px[5].data=a->ylfy;px[6].data=a->cxfy;px[7].data=a->srfy;for(i=1;i<8;i++){flag=0;for(j=0;j<8-i;j++)if(px[j].data>px[j+1].data){t=px[j].data;px[j].data=px[j+1].data;px[j+1].data=t;t=px[j].no;px[j].no=px[j+1].no;px[j+1].no=t;flag=1;}if(flag==0) break;}printf("\n");for(i=0;i<8;i++){printf(" %s",str[px[i].no]);}printf("\n—————————————————————————————\n");for(i=0;i<8;i++){printf("%8d ",px[i].data);}printf("\n");}void modify(Infor *a,int mon){FILE *fp1,*fp2;Infor *b;b=(Infor *)malloc(sizeof(Infor));fp1=fopen(FilePath1,"rt");fp2=fopen("temp.dat","wt+");rewind(fp1);fread(b,sizeof(Infor),1,fp1);while (!feof(fp1)){if(b->month==mon){fwrite(a,sizeof(Infor),1,fp2);}else{fwrite(b,sizeof(Infor),1,fp2);}fread(b,sizeof(Infor),1,fp1);}fclose(fp1);fclose(fp2);remove(FilePath1);//删除源文件rename("temp.dat",FilePath1);//重命名中间文件printf("修改数据成功!\n" );changeFormat();}void delRecord(int mon){FILE *fp1,*fp2;Infor *b;b=(Infor *)malloc(sizeof(Infor));fp1=fopen(FilePath1,"rt");fp2=fopen("temp.dat","wt+");rewind(fp1);fread(b,sizeof(Infor),1,fp1);while (!feof(fp1)){if(b->month!=mon)fwrite(b,sizeof(Infor),1,fp2);fread(b,sizeof(Infor),1,fp1);}fclose(fp1);fclose(fp2);remove(FilePath1);//删除源文件rename("temp.dat",FilePath1);//重命名中间文件printf("删除数据成功!\n" );changeFormat();}2、本程序是在VC++环境下实现,下面将演示该软件的使用方法。