C語(yǔ)言實(shí)現(xiàn)個(gè)人財(cái)務(wù)管理
本文實(shí)例為大家分享了C語(yǔ)言實(shí)現(xiàn)個(gè)人財(cái)務(wù)管理的具體代碼,供大家參考,具體內(nèi)容如下
該程序可以完成個(gè)人財(cái)務(wù)管理。每個(gè)人的財(cái)務(wù)項(xiàng)目應(yīng)當(dāng)包括姓名、年度、收入、支出等。為了敘述簡(jiǎn)單,以一個(gè)財(cái)政年度為統(tǒng)計(jì)單位,程序中可以計(jì)算每個(gè)人的每個(gè)財(cái)政年度的收入總額、支出總額、存款總額等,并能夠打印出來(lái)。需要注意的是,收入總額不可能只輸入一次,而可能是多次收入的和;同樣地,支出總額也不可能只是一次支出,應(yīng)是多次支出的總和。
【設(shè)計(jì)思想】本程序是一個(gè)財(cái)務(wù)管理程序,涉及收入和支出,雖然是個(gè)人財(cái)務(wù)管理程序,但最好能夠按照一種標(biāo)準(zhǔn)的財(cái)務(wù)管理軟件來(lái)考慮,所以在程序設(shè)計(jì)時(shí);需要考慮如下幾個(gè)因素:
每一筆收入或支出都可以理解為一筆交易,那么程序最多可以容納多少筆交易決定數(shù)組的元素個(gè)數(shù),必須有一個(gè)預(yù)測(cè),不妨先假定為50筆。
確定結(jié)構(gòu)體形式時(shí)需要認(rèn)真考慮,它關(guān)系到程序?qū)崿F(xiàn)的思路和方式。一個(gè)人的收入和支出顯然是多次輸入的,而每一筆交易必須記錄交易的日期和姓名,所以結(jié)構(gòu)體應(yīng)包含日期和姓名信息。從銀行存款單我們可以知道,每一次存款和取款的數(shù)目必須記錄,而且是分別記錄,所以結(jié)構(gòu)體考慮增加收入和支出兩個(gè)元素,這樣就形成了如下描述每一筆交易的結(jié)構(gòu)體。
代碼:
#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; } } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++實(shí)現(xiàn)班級(jí)成績(jī)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)班級(jí)成績(jī)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02C語(yǔ)言中結(jié)構(gòu)體與內(nèi)存對(duì)齊實(shí)例解析
C語(yǔ)言結(jié)構(gòu)體對(duì)齊也是老生常談的話題了,基本上是面試題的必考題,這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中結(jié)構(gòu)體與內(nèi)存對(duì)齊的相關(guān)資料,需要的朋友可以參考下2021-07-07C++實(shí)現(xiàn)動(dòng)態(tài)分配const對(duì)象實(shí)例
這篇文章主要介紹了C++實(shí)現(xiàn)動(dòng)態(tài)分配const對(duì)象實(shí)例,包括了const對(duì)象的創(chuàng)建、刪除及應(yīng)用實(shí)例,需要的朋友可以參考下2014-10-10