昨天朋友委托我做一个基于C++的课程小设计,题目如下: 1、逐笔输入个人收入或支出的明细,写入到文件保存,可不断进行输入和追加。 1)为了简化用户的输入,类别编码由字母和数字构成:“a”表示收入、“b”表示支 2)用户输入收支明细,具体的输入格式如下(各数据用一个或多个连续空格分隔, 2、根据日常对个人收支管理的需要,完成汇总,进行功能设计和编码实现。需要 请输入对收支类别数据进行汇总的月份:2020‐3 自己敲了一遍,具体实现如下:
 设计一个简单的个人收支管理系统,至少包括如下功能:
 输入的明细数据包括:收支明细类别编码、发生日期、金额、备注。
 出,数字是大类下的编号。类别编码及类别名称的对应由自己定义、组织在程序中
 并输出展示。比如 a1 表示收入类的生活费,b1 表示支出类的学习,编号依次递增,
 类别的数量和名称根据日常需要自拟。
 例如:
 收入类:a1‐生活费,a2‐奖学金,a3‐稿费
 支出类:b1‐学习用品,b2‐生活用品,b3‐游戏
 直接输入回车表示输入结束):
 请逐笔输入类别编码、发生日期、金额、备注:
 输入收支明细:a1    2020‐1‐26    2000.0    1 月生活费
 输入收支明细:b1    2020‐3‐9      52.5        买书
 …
 输入收支明细:b2    2020‐5‐9      78.00      购买台灯
 3)将输入的明细数据写入到一个文件中进行保存,便于以后进行追加和处理。
 统计并输出用户所输入月份各收支类别的汇总情况,输出后,再次询问用户是否输
 出该月的各笔明细,用户回答是,则按明细类别的升序输出;回答否,则不输出。
 输入和输出结果如下:
 2020 年 3 月收支类别数据的汇总
 收入/支出 明细类别 金额
 收入 生活费 2000
 …
 支出 学习用品 200
 …
 2020 年 3 月的总收入为:1500,总支出为:1200
 是否输出该月的各笔明细(y 为输出,其他为不输出):y
 2020 年 3 月收支类别数据的明细
 类别 收入/支出 发生日期 金额 备注
 生活费 收入 2020‐03‐01 2000.0 3 月生活费
 学习用品 支出 2020‐03‐03 10.0 买钢笔
 …#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;/*日期,收入/支出  金额  收入来源/支出目的*/ 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 总支出为:%dn",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; } } } 
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算
 官方软件产品操作指南 (170)
官方软件产品操作指南 (170)