c++ 编程问题-C++程序 能否将下面代码改成用链表写的

问题描述

C++程序 能否将下面代码改成用链表写的

#include
#include
#include
#include
#include
#include
using namespace std;
const int Maxb=10000; //最多的财务收支次数

//财务类,实现对财务的描述,财务的编号,使用者等
class Finance
{
private:
int tag; //删除标记 1:已删 0:未删
int no;//财务编号
char name[20]; //姓名
int acount;
int ontag;
int date; //财务日期
public:
Finance(){}
char *getname() { return name; } //获取姓名
int getno(){ return no; } //获取财务编号
int getacout(){return acount; }
int gettag(){ return tag; } //获取删除标记
int getontag(){ return ontag; }
int getdate(){ return date; }//获取日期
void setname(char na[])//设置
{
strcpy(name,na);
}

void delfinance(){ tag=1;} //删除财务

void addfinance(int da,int n,char *na,int nu) //增加财务
{
char ch;
tag=0;
date=da;
no=n;
strcpy(name,na);
acount=nu;
ontag=1;
cout<<" 记录为支出按(y),收入(其他键)"<
cin>>ch;

if(ch=='Y'||ch=='y')
ontag=0;

}
int borrowfinance()//支出操作
{
if (ontag==1)
{
ontag=0;
return 1;
}
return 0;
}
void retfinance()//收入操作
{
ontag=1;
}
void disp()//输出财务
{
cout << setw(6) << date <<setw(6) << no << setw(18) << name << setw(10)
<<(ontag==1? "收入":"支出") << setw(10)<<acount<<endl;
}
};

//财务库类,实现对财务的维护,查找,删除等
class BDatabase
{
private:
int top; //财务记录指针

Finance finance[Maxb]; //财务记录
public:
BDatabase()//构造函数,将finance.txt读到finance[]中
{
Finance b;
top=-1;
fstream file("finance.txt",ios::in);
while (1)
{
file.read((char *)&b,sizeof(b));
if (!file) break;
top++;
finance[top]=b;
}
file.close();
}

void clear()//全部删除
{
top=-1;
}
int addfinance(int da,int n,char *na,int nu) //增加收入
{
Finance *p=query(n);
if (NULL==p)
{
top++;
finance[top].addfinance(da,n,na,nu); //查找财务
return 1;
}
return 0;
}

Finance *query(int financeid)
{
for (int i=0;i<=top;i++)
if (finance[i].getno()==financeid &&finance[i].gettag()==0)
{
return &finance[i];
}
return NULL;
}
void financedata();//财务维护
void financecount()// 财务统计
{
int Bnum=0;
int Rnum=0;
int Mcout=0;
int Bcout=0;
int Rcout=0;
for(int i=0;i<=top;i++)
{
if(finance[i].getontag()==1)
{
Bcout+=finance[i].getacout();
Bnum++;
finance[i].disp();
}
else{
Rcout+=finance[i].getacout();
Rnum++;
finance[i].disp();
}
}
Mcout=Bcout-Rcout;
cout<<"收入总金额"<<Bcout<<endl;
cout<<"支出总金额:"<<Rcout<<endl;
cout<<"收支结余:"<<Mcout<<endl;
}
void financecount(int data) // 按月财务统计
{
int da=data;
int Bnum=0;
int Rnum=0;
int Mcout=0;
int Bcout=0;
int Rcout=0;
for(int i=0;i<=top;i++)
{
if(finance[i].getdate()==da)
{
if(finance[i].getontag()==1)
{
Bcout+=finance[i].getacout();
Bnum++;
finance[i].disp();
}
else{
Rcout+=finance[i].getacout();
Rnum++;
finance[i].disp();
}
}
}
Mcout=Bcout-Rcout;
cout<<"收入总金额"<<Bcout<<endl;
cout<<"支出总金额:"<<Rcout<<endl;
cout<<"收支结余:"<<Mcout<<endl;
}
void disp()
{
for (int i=0;i<=top;i++)
if (finance[i].gettag()==0)
finance[i].disp();
}
~BDatabase() //析构函数,将finance[]写到finance.txt文件中

{
    fstream file("finance.txt",ios::out);
    for (int i=0;i<=top;i++)
        if (finance[i].gettag()==0)
            file.write((char *)&finance[i],sizeof(finance[i]));
    file.close();
}

};
void BDatabase::financedata()
{
char choice;
char bname[40];
int danum;
int financeid;
int acount;
int date;
Finance *b;
while (choice!='0')
{

cout<<" -----------------------------"<
cout
cout
cout
cout
cout
cout
cout
cout
cout
cout
cout
cout
cout
cout
cout
cout
cin >> choice;
switch (choice)
{
case '1':
cout << "输入财务编号:"<
cin >> financeid;
cout << "输入财务使用者:"<
cin >> bname;
cout << "输入金额:"<
cin >> acount;
cout<<"输入时间:格式:2008年12月请写成 200812"<
cin >>danum;
addfinance(danum,financeid,bname,acount);
break;
case '2':
cout << "输入财务编号:"<
cin >> financeid;
b=query(financeid);
if (b==NULL)
{
cout << " 该财务不存在 "<
break;
}
cout
cin >> bname;
b->setname(bname);
break;
case '3':
cout <<" 读入财务编号:"<
cin >> financeid;
b=query(financeid);
if (b==NULL)
{
cout <<" 该财务不存在" << endl;
break;
}
b->delfinance();
break;
case '4':
cout << " 读入财务编号:"<
cin >> financeid;
b=query(financeid);
if (b==NULL)
{
cout <<" 该财务不存在"<< endl;
break;
}
b->disp();
break;
case '5':
cout << setw(6) <<"时间"<
disp();
break;
case '6':
financecount();
break;
case '7':
cout
cin>>date;
financecount(date);
break;
case '8':
clear();
cout<<"删除成功!"<<endl;
break;
default:
cout<<"请重新输入:";
}
}
}

void main() //main() 函数的实现,程序的主界面的引导

{

system("color 3b");
char choice;
int financeid;
BDatabase BookDB;
while(choice!='0')
{

    cout<<"ntt   欢迎使用个人财务管理系统   n";

cout<<" /*******************************************************/"<
cout
cout
cout
cout
cout
cout
cout
cin >> choice;
switch (choice)
{
case '1':
BookDB.financedata();
break;
case '0':
break;
default:return;
}
}
}

时间: 2024-10-31 09:34:52

c++ 编程问题-C++程序 能否将下面代码改成用链表写的的相关文章

C++程序 能否将下面代码改成用链表写的

问题描述 C++程序 能否将下面代码改成用链表写的 C++程序 能否将下面代码改成用链表写的C++程序 能否将下面代码改成用链表写的C++程序 能否将下面代码改成用链表写的C++程序 能否将下面代码改成用链表写的C++程序 能否将下面代码改成用链表写的C++程序 能否将下面代码改成用链表写的 解决方案 这个问题是什么啊,为什么我就只看到了 能否将下面代码改成用链表写的C++程序 但是没有看到程序...

多线程-VC++孙鑫第十五课聊天室程序,如何有UDP改成TCP通信

问题描述 VC++孙鑫第十五课聊天室程序,如何有UDP改成TCP通信 看了孙鑫的第十五课:<多线程和聊天室程序的创建>,对其中的聊天室UDP程序中不断接收数据部分比较感兴趣,想把它改成TCP的版本,但是出现了不少问题不知道该怎么解决. 改动部分如下: 1.在InitSocket()中添加了listen和accept函数 2.由于TCP中连上之后发送数据需要使用accept获得的套接字,所以在OnInitDialog()中定义pRecvParam->sock=m_client; pRecv

VB.NET编程之托盘程序篇

编程|程序 本文程序的设计及运行环境 (1)Windows 2000 Service (2)Net Framework SDK 正式版 静态托盘程序的编写过程 所谓静态托盘程序是指程序运行后,在系统托盘区的图标处于静止状态的托盘程序.动态托盘程序正好与之相反,它是指在系统托盘区图标呈现动画效果的一类托盘程序.下面就来探讨一下VB.NET是如何实现静态托盘程序. .Net FrameWork SDK为编写托盘程序提供了一个组件:NotifyIcon组件.NotifyIcon组件是一个WinForm

关于继承内部类——java编程思想示例程序分析

编程|程序|继承|示例 关于继承内部类--java编程思想示例程序分析:class Egg2 { protected class Yolk { public Yolk() { System.out.println("Egg2.Yolk()"); } public void f() { System.out.println("Egg2.Yolk.f()"); } } private Yolk y = new Yolk(); public Egg2() { System

十大编程算法助程序员走上大神之路

十大编程算法助程序员走上大神之路 算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来. 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists). 算法步骤:

不甚感激-怎么用pyhton编程排课程序????大神指教啊

问题描述 怎么用pyhton编程排课程序????大神指教啊 怎么用pyhton编程排课程序????大神指教啊 这是课外作业 求解答 指导 解决方案 根据需求,主要就是把它转发成.u逻辑 解决方案二: u逻辑是什么?我还没有学呢 EQE!不过还是谢谢了..... 解决方案三: 话说 大神你可以 介绍一下具体操作吗??不甚感激!

UC高级编程--实现myls程序

跟着达内视频,学习UC高级编程,完成程序小练习. 主要练习的函数为:  int lstat(const char *path, struct stat *buf);  size_t strftime(char *s, size_t max, const char *format,  const struct tm *tm);此函数, 第一次使用. time_t mktime(struct tm *tm);//把分离的时间合成整数,写项目代码中,当时自己实现了这个函数功能. #include <s

windows编程实现应用程序启动器和图标启动管理器

问题描述 windows编程实现应用程序启动器和图标启动管理器 请问图标的拖动和启动,要求限制必须用启动器才能启动和运行图标,不能脱离程序启动图标,实现思路? 解决方案 这个需要编写shell外壳扩展程序得到启动的程序然后判断是否执行.

Android编程判断应用程序是否已安装的方法_Android

本文实例讲述了Android编程判断应用程序是否已安装的方法.分享给大家供大家参考,具体如下: 这里以twitter程序为例,假设twitter程序包名为"com.twitter.android".这时候可用以下代码来判断是否被安装. PackageInfo packageInfo; try { packageInfo = this.getPackageManager().getPackageInfo( "com.twitter.android", 0); } ca