C/C++實(shí)現(xiàn)個(gè)人收支系統(tǒng)的示例代碼
昨天朋友委托我做一個(gè)基于C++的課程小設(shè)計(jì),題目如下:
設(shè)計(jì)一個(gè)簡(jiǎn)單的個(gè)人收支管理系統(tǒng),至少包括如下功能:
1、逐筆輸入個(gè)人收入或支出的明細(xì),寫入到文件保存,可不斷進(jìn)行輸入和追加。
輸入的明細(xì)數(shù)據(jù)包括:收支明細(xì)類別編碼、發(fā)生日期、金額、備注。
1)為了簡(jiǎn)化用戶的輸入,類別編碼由字母和數(shù)字構(gòu)成:“a”表示收入、“b”表示支
出,數(shù)字是大類下的編號(hào)。類別編碼及類別名稱的對(duì)應(yīng)由自己定義、組織在程序中
并輸出展示。比如 a1 表示收入類的生活費(fèi),b1 表示支出類的學(xué)習(xí),編號(hào)依次遞增,
類別的數(shù)量和名稱根據(jù)日常需要自擬。
例如:
收入類:a1‐生活費(fèi),a2‐獎(jiǎng)學(xué)金,a3‐稿費(fèi)
支出類:b1‐學(xué)習(xí)用品,b2‐生活用品,b3‐游戲
2)用戶輸入收支明細(xì),具體的輸入格式如下(各數(shù)據(jù)用一個(gè)或多個(gè)連續(xù)空格分隔,
直接輸入回車表示輸入結(jié)束):
請(qǐng)逐筆輸入類別編碼、發(fā)生日期、金額、備注:
輸入收支明細(xì):a1 2020‐1‐26 2000.0 1 月生活費(fèi)
輸入收支明細(xì):b1 2020‐3‐9 52.5 買書
…
輸入收支明細(xì):b2 2020‐5‐9 78.00 購(gòu)買臺(tái)燈
3)將輸入的明細(xì)數(shù)據(jù)寫入到一個(gè)文件中進(jìn)行保存,便于以后進(jìn)行追加和處理。
2、根據(jù)日常對(duì)個(gè)人收支管理的需要,完成匯總,進(jìn)行功能設(shè)計(jì)和編碼實(shí)現(xiàn)。需要
統(tǒng)計(jì)并輸出用戶所輸入月份各收支類別的匯總情況,輸出后,再次詢問用戶是否輸
出該月的各筆明細(xì),用戶回答是,則按明細(xì)類別的升序輸出;回答否,則不輸出。
輸入和輸出結(jié)果如下:
請(qǐng)輸入對(duì)收支類別數(shù)據(jù)進(jìn)行匯總的月份:2020‐3
2020 年 3 月收支類別數(shù)據(jù)的匯總
收入/支出 明細(xì)類別 金額
收入 生活費(fèi) 2000
…
支出 學(xué)習(xí)用品 200
…
2020 年 3 月的總收入為:1500,總支出為:1200
是否輸出該月的各筆明細(xì)(y 為輸出,其他為不輸出):y
2020 年 3 月收支類別數(shù)據(jù)的明細(xì)
類別 收入/支出 發(fā)生日期 金額 備注
生活費(fèi) 收入 2020‐03‐01 2000.0 3 月生活費(fèi)
學(xué)習(xí)用品 支出 2020‐03‐03 10.0 買鋼筆
…
自己敲了一遍,具體實(shí)現(xiàn)如下:
#include <iostream> #include <stdlib.h> #include <string.h> #define MAX_MARK 100 using namespace std; struct Pay { char payment[2]; int inout; int year; int month; int day; int money; char mark[MAX_MARK]; }ioi;/*日期,收入/支出 金額 收入來(lái)源/支出目的*/ void displayMenu() { cout <<"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl; cout <<"+ 個(gè)人收支管理系統(tǒng) +"<<endl; cout <<"+ 1. 添加收支 +"<<endl; cout <<"+ 2. 查找收支 +"<<endl; cout <<"+ 3. 統(tǒng)計(jì)收支 +"<<endl; cout <<"+ 4. 輸出文件 +"<<endl; cout <<"+ 5. 結(jié)束程序 +"<<endl; cout <<"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl; } int addPayment(Pay ioi[],int num) { char tempPayment[3]; cout <<"請(qǐng)逐筆輸入類別編碼、發(fā)生日期、金額、備注"<<endl; cout <<"輸入收支明細(xì):"; 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 <<"請(qǐng)輸入想要查找的目標(biāo)(1為年月,2為類別):"<<endl; cin >> kind; if(kind == 1){ cout << "請(qǐng)輸入查找的年月(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 <<"請(qǐng)輸入查找的類別:"; 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 <<"請(qǐng)輸入對(duì)收支類別數(shù)據(jù)進(jìn)行匯總的月份:"; scanf("%d-%d",&sumYear,&sumMonth); printf("%d年%d月收支類別數(shù)據(jù)的匯總:\n",sumYear,sumMonth); cout << "收支\t明細(xì)\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 <<"是否輸出各筆明細(xì):(是1否0):"; cin >>judge; if(judge==1){ printf("%d年%d月收支類別數(shù)據(jù)的明細(xì):\n",sumYear,sumMonth); cout <<"類別\t收入\t支出\t發(fā)生日期\t金額\t備注"<<endl; for(i=0;i<num;i++){ if(ioi[i].payment[0] == 'a' &&ioi[i].payment[0] == '1') cout <<"生活費(fèi) "; if(ioi[i].payment[0] == 'a' &&ioi[i].payment[0] == '2') cout <<"獎(jiǎng)學(xué)金 "; if(ioi[i].payment[0] == 'a' &&ioi[i].payment[0] == '3') cout <<"稿費(fèi) "; if(ioi[i].payment[0] == 'b' &&ioi[i].payment[0] == '1') cout <<"學(xué)習(xí)用品 "; 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 <<"打開文件出錯(cuò)!"<<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<<"請(qǐng)選擇您的操作(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; } } }
總結(jié)
到此這篇關(guān)于C/C++實(shí)現(xiàn)個(gè)人收支系統(tǒng)的示例代碼的文章就介紹到這了,更多相關(guān)c++ 個(gè)人收支系統(tǒng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++使用easyX庫(kù)實(shí)現(xiàn)三星環(huán)繞效果流程詳解
EasyX是針對(duì)C/C++的圖形庫(kù),可以幫助使用C/C++語(yǔ)言的程序員快速上手圖形和游戲編程。這篇文章主要介紹了C++使用easyX庫(kù)實(shí)現(xiàn)三星環(huán)繞效果,需要的可以參考一下2022-10-10C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單三子棋程序
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單三子棋程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05一起來(lái)學(xué)習(xí)C語(yǔ)言的字符串轉(zhuǎn)換函數(shù)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言的字符串轉(zhuǎn)換函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02C語(yǔ)言詳細(xì)分析講解內(nèi)存管理malloc realloc free calloc函數(shù)的使用
C語(yǔ)言內(nèi)存管理相關(guān)的函數(shù)主要有realloc、calloc、malloc、free等,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言內(nèi)存管理realloc、calloc、malloc、free函數(shù)的相關(guān)資料,需要的朋友可以參考下2022-05-05C++中關(guān)于多態(tài)實(shí)現(xiàn)和使用方法
這篇文章主要介紹了C++中關(guān)于多態(tài)實(shí)現(xiàn)和使用方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07C++之std::vector刪除元素的幾種方式及區(qū)別說明
這篇文章主要介紹了C++之std::vector刪除元素的幾種方式及區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08