C語言實現(xiàn)個人財務管理
本文實例為大家分享了C語言實現(xiàn)個人財務管理的具體代碼,供大家參考,具體內(nèi)容如下
該程序可以完成個人財務管理。每個人的財務項目應當包括姓名、年度、收入、支出等。為了敘述簡單,以一個財政年度為統(tǒng)計單位,程序中可以計算每個人的每個財政年度的收入總額、支出總額、存款總額等,并能夠打印出來。需要注意的是,收入總額不可能只輸入一次,而可能是多次收入的和;同樣地,支出總額也不可能只是一次支出,應是多次支出的總和。
【設計思想】本程序是一個財務管理程序,涉及收入和支出,雖然是個人財務管理程序,但最好能夠按照一種標準的財務管理軟件來考慮,所以在程序設計時;需要考慮如下幾個因素:
每一筆收入或支出都可以理解為一筆交易,那么程序最多可以容納多少筆交易決定數(shù)組的元素個數(shù),必須有一個預測,不妨先假定為50筆。
確定結構體形式時需要認真考慮,它關系到程序?qū)崿F(xiàn)的思路和方式。一個人的收入和支出顯然是多次輸入的,而每一筆交易必須記錄交易的日期和姓名,所以結構體應包含日期和姓名信息。從銀行存款單我們可以知道,每一次存款和取款的數(shù)目必須記錄,而且是分別記錄,所以結構體考慮增加收入和支出兩個元素,這樣就形成了如下描述每一筆交易的結構體。
代碼:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define SIZE 50 struct Date{ int year,month,day; }; struct deal{ struct Date date; char name[12]; double earning; double payout; }; void Menu(); void InputOneDeal(struct deal *per); void PrintOneDeal(struct deal *per); void SortPerson(struct deal *per,struct deal **per_sort); int main() { struct deal person[SIZE]={0}; char key; int i=0; while(1){ Menu(); key=getche(); printf("\n"); switch(key) { case '1': InputOneDeal(person+i); i++; break; case '2': PrintOneDeal(person); break; case '3': exit(0); default:break; } } return 0; } void Menu() { printf("1.Input one deal\n"); printf("2.Print one year balance\n"); printf("3.Exit\n"); printf("Please select(1-3):"); } void InputOneDeal(struct deal *per) { char s[10]; printf("Date(YYYY-MM-DD):"); scanf("%d-%d-%d",&per->date.year,&per->date.month,&per->date.day); printf("name:"); scanf("%9s",s); printf("deal(+/-):"); scanf("%9s",s); if(s[0]=='-') per->payout=atof(s); else per->earning=atof(s); } void PrintOneDeal(struct deal *per) { struct deal *per_sort[SIZE]={NULL}; int i, year, tag; char name[12]; double earning, payout; SortPerson(per,per_sort) ; printf ("Name------Year--——-Earning----Payout----Balance\n" ) ;i =- 0; while(per_sort[i]!= NULL) { strcpy (name, per_sort[i]->name); printf ("%-12s ", name) ; tag = 1; while(per_sort[i]!= NULL && strcmp(name,per_sort[i]->name)==0) { year = per_sort[i]->date.year; earning = 0; payout = 0 ; while(per_sort[i]!= NULL && strcmp(name, per_sort[i]->name)==0 && year == per_sort[i]->date.year) { earning+=per_sort[i]->earning; payout+= per_sort[i]->payout; i++; } if (tag==1) { printf ("%-6d %11.2lf %11.2lf %11.2lf\n" , year,earning,payout,earning+payout) ; tag = 0 ; } else printf ("%12s %-6d %11.21f %11.21f %1.2lf\n", " ",year, earning, payout, earning + payout); } } } void SortPerson(struct deal *per,struct deal **per_sort) { int i, j, k; struct deal *t; i = 0; while((per+i)->date.year !=0) { per_sort[i] = per + i; i++; } for(i = 0; per_sort[i] != NULL; i++) { k = i; for(j = i+1;per_sort[j]!=NULL;j++) if(strcmp(per_sort[j]->name,per_sort[k]->name)<0||strcmp(per_sort[j]->name, per_sort[k]->name)==0 &&per_sort[j]->date.year < per_sort[k]->date.year) k=j; if(k != i) { t = per_sort [i] ; per_sort[i] = per_sort [k]; per_sort[k] = t; } } }
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。