函数releaselinklist()和finishprogram()的具体代码是不是这样写的?有什么其他错误请指教一下?
//vc++6.0实现的C++版链表
//课题名称:彩票自动生成与对比系统
//主要功能:用目前社会上已经存在的22选5的彩票玩法,编写出用户购买彩票,计算机自动给出彩票,以及模拟当天彩票推出的结果,同时给出对比结果.
#include <iostream.h>
#include <windows.h>
#include <fstream.h>
#include <iomanip.h>
#include <time.h>

enum returninfo{success,fail};//用枚举类型保存各种返回信息的英语单词,以便分类处理
const int CUTTINGLINESTART=1;//定义切分线开始位置
const int CUTTINGLINELENGTH=25;//定义切分线长度
const int GETRONDMAXNUMBER=22;//定义系统自动产生数据的最大值
const int TICKETNUMSLENTH=5;//定义彩票中选取的号码个数
ofstream outdet("彩票购买清单.txt");//彩票购买清单写入文件数据流
ofstream outpro("彩票得奖细节.txt");//彩票得奖细节写入文件数据流
ofstream outres("彩票得奖统计.txt");//彩票得奖统计写入文件数据流
int number1=0,number2=0;//判断彩票是否已经购买和兑奖

/*
定义一个彩票类lotteryticket
*/
class lotteryticket
{
public:
    lotteryticket(lotteryticket *initnext=NULL);//构造函数
    ~lotteryticket(){};//析构函数
    void displaynums();//显示彩票号码串函数
    void ticknumsintofile(int kinds);//将彩票号码串写入文件
    void ticketnumssort();//彩票数据自动排序函数
    int compticketnums(int nums[]);//彩票兑奖函数
    void inputticketnums(int kinds);//获取彩票号码串函数
    bool examineticketnums();//审核彩票号码串函数
    int ticketnums[TICKETNUMSLENTH];//彩票5个数字
    lotteryticket *next;
};

/*****************************************************************
*函数功能:类lotteryticket的构造函数
*****************************************************************/
lotteryticket::lotteryticket(lotteryticket *initnext)
{
    next=initnext;
}

/*****************************************************************
*函数功能:DOS窗口显示彩票号码信息
*****************************************************************/
void lotteryticket::displaynums()
{
    for(int i=0;i<TICKETNUMSLENTH;i++)
    {
        if(ticketnums[i]<10)//号码数字小于10则显示为:OX
            cout<<"0";
        cout<<ticketnums[i]<<" ";
    }
}

/*****************************************************************
*函数功能:将彩票号码串写入文件
*参数说明:kinds==0时,信息写入"彩票购买清单.txt";
*          kinds==1时,信息写入"彩票得奖细节.txt";
*****************************************************************/
void lotteryticket::ticknumsintofile(int kinds)
{
    for(int i=0;i<TICKETNUMSLENTH;i++)
    {
        if(kinds==0)
        {
            if(ticketnums[i]<10)//号码数字小于10则写为:OX,确保总是两位
                outdet<<"0";
            outdet<<ticketnums[i]<<" ";
        }
        else
        {
            if(ticketnums[i]<10)
                outpro<<"0";
            outpro<<ticketnums[i]<<" ";
        }
    }
}

/*****************************************************************
*函数功能:彩票号码排序操作(小-->大)冒泡排序
*****************************************************************/
void lotteryticket::ticketnumssort()
{
    int temp;
    for(int i=TICKETNUMSLENTH-1;i>0;i--)
    {
        for(int j=1;j<=i;j++)
        {
            if(ticketnums[j]<ticketnums[j-1])
            {
                temp=ticketnums[j-1];
                ticketnums[j-1]=ticketnums[j];
                ticketnums[j]=temp;
            }
        }
    }
}

/*****************************************************************
*函数功能:彩票兑奖函数
*参数说明:nums[]开奖时一等奖号码
*函数返回:本彩票与一等奖号码相同的个数
*****************************************************************/
int lotteryticket::compticketnums(int nums[])
{
    int result=0;
    for(int i=0;i<TICKETNUMSLENTH;i++)
    {
        for(int j=0;j<TICKETNUMSLENTH;j++)
        {
            if(ticketnums[i]==nums[j])
                result++;
        }
    }
    return result;
}

/*****************************************************************
*函数功能:输入彩票号码
*参数说明:kinds==0时,系统自动产生彩票号码串;
*          kinds==1时,手动输入彩票号码串。
*****************************************************************/
void lotteryticket::inputticketnums(int kinds)
{
    if(kinds==0)//系统自动产生彩票号码串
    {
        for(int i=0;i<TICKETNUMSLENTH;i++)
        {
            ticketnums[i]=rand()%GETRONDMAXNUMBER+1;//系统产生1~GETRONDMAXNUMBER之间任意数字
        }
    }
    else//手动输入彩票号码串
    {
        cout<<"请输入想购买的彩票号码(限制在"<<TICKETNUMSLENTH<<"位,可以乱序)"<<endl;
        for(int i=0;i<TICKETNUMSLENTH;i++)
        {
            cin>>ticketnums[i];
        }
    }
}

/*****************************************************************
*函数功能:检测彩票是否合格(检测数据大小,排除数据相等)
*返回信息:true代表此彩票合格;
*          false代表此彩票不合格。
*****************************************************************/
bool lotteryticket::examineticketnums()
{
    if(ticketnums[0]>GETRONDMAXNUMBER)
        return false;
    for(int i=1;i<TICKETNUMSLENTH;i++)
    {
        if(ticketnums[i]==ticketnums[i-1]||ticketnums[i]>GETRONDMAXNUMBER)
            return false;
    }
    return true;
}

/*
定义一个彩票操作类sweepstakes
*/
class sweepstakes
{
public:
    sweepstakes();//构造函数
    ~sweepstakes(){};//析构函数
    returninfo getlotteryticket();//彩票购买通道
    returninfo exchangeprizes();//彩票兑奖通道
    void releaselinklist();//释放已购买彩票链表数据空间
    void finishprogram();//退出程序前扫尾操作
    void simulationsweepstakes(int nums[]);//模拟电视摇奖函数
    lotteryticket *headp;//购买彩票指针
    lotteryticket target;//中奖彩票
};

/*****************************************************************
*函数功能:类sweepstakes构造函数,完成一些基本数据初始化工作
*****************************************************************/
sweepstakes::sweepstakes()
{
    headp=new lotteryticket();//申请新结点,作为头结点
    headp->next=NULL;
}

/*****************************************************************
*函数功能:购买彩票函数
*****************************************************************/
returninfo sweepstakes::getlotteryticket()
{
    if(number1!=0)
        return fail;
    char cho,icho;
    int count,i=1,ticketcout=0;
    lotteryticket *newtickp,*followtickp=headp;
    cout<<endl<<">>>正在进入购票通道..."<<endl<<endl;
    Sleep(1000);
    releaselinklist();//释放上次购买彩票数据空间给系统
    cout<<"购买彩票通道说明"<<endl;
    cout<<"⊙购买彩票的方式有两种:手工和自动;"<<endl;
    cout<<"⊙购买方式有先后区分:先手工后自动;"<<endl;
    cout<<"⊙同一个用户均可参与两种购票方式。"<<endl;
    cout<<"===================================="<<endl;
    cout<<endl<<"一您需要手工选购彩票吗?(Y/N):";
    do{
        cin>>cho;
    }while(cho!='Y'&&cho!='y'&&cho!='N'&&cho!='n');
    if(cho=='Y'||cho=='y')
    {
        outdet<<"手工选购彩票信息如下:";
        do{
            newtickp=new lotteryticket();
            followtickp->next=newtickp;
            do{
                newtickp->inputticketnums(1);
                newtickp->ticketnumssort();
                if(!newtickp->examineticketnums())
                    cout<<"系统提示您输入的号码不符合要求!"<<endl;
            }while(!(newtickp->examineticketnums()));
            ticketcout++;
            cout<<"您已成功购得彩票号码:";
            newtickp->displaynums();
            outdet<<endl<<"手工输入的第"<<setw(3)<<i++<<"张彩票号码为:";
            newtickp->ticknumsintofile(0);
            newtickp->next=NULL;
            followtickp=followtickp->next;
            cout<<endl<<">>>还继续手工选购彩票吗?(Y/N):";
            cin>>icho;
        }while(icho=='Y'||icho=='y');
        outdet<<endl<<endl;
    }
    cout<<endl<<"二您需要自动选购彩票吗?(Y/N):";
    do{
        cin>>cho;
    }while(cho!='Y'&&cho!='y'&&cho!='N'&&cho!='n');
    if(cho=='Y'||cho=='y')
    {
        i=0;//i的值恢复为0
        cout<<">>>请输入希望计算机自动产生的彩票张数:";
        cin>>count;
        outdet<<"自动选购彩票信息如下:";
        while(count)
        {
            newtickp=new lotteryticket();
            followtickp->next=newtickp;
            do{//自动产生彩票号码串
                newtickp->inputticketnums(0);
                newtickp->ticketnumssort();
                if(!newtickp->examineticketnums())
                    cout<<""<<endl;
            }while(!(newtickp->examineticketnums()));
            ticketcout++;
            outdet<<endl<<"系统产生第"<<setw(3)<<++i<<"张彩票号码为:";
            newtickp->ticknumsintofile(0);
            newtickp->next=NULL;
            followtickp=followtickp->next;
            count--;
        }
        outdet.flush();//词句很关键,要不然最后一张彩票信息无法及时写入文件中
    }
    if(ticketcout!=0)
    {
        cout<<endl<<endl<<"您已经购买"<<ticketcout<<"张彩票."<<endl;
        cout<<endl<<"三您需要查看您已购得的彩票信息吗?(Y/N):";
        do{
        cin>>cho;
        }while(cho!='Y'&&cho!='y'&&cho!='N'&&cho!='n');
        if(cho=='Y'||cho=='y')
            ShellExecute(NULL,"open","彩票购买清单.txt",NULL,NULL,SW_SHOWNORMAL);
        cout<<endl<<"提示:您本次购买彩票工序已结束!"<<endl;
    }
    else
        cout<<endl<<"提示:您本次没有购买彩票,此工序已结束!"<<endl;
    number1++;
    number2=0;
    return success;
}

/*****************************************************************
*函数功能:彩票兑奖函数
*****************************************************************/
returninfo sweepstakes::exchangeprizes()
{
    if(number2!=0)
        return fail;
    int i=0,num,count[3]={0,0,0},iticketnums[TICKETNUMSLENTH];
    char prizes[3][3]={"一","二","三"},cho;
    lotteryticket *followtickp=headp->next;
    cout<<endl<<">>>正在进入兑奖通道..."<<endl<<endl;
    Sleep(1000);
    do{//自动产生中奖彩票号码串
        target.inputticketnums(0);
        for(int j=0;j<TICKETNUMSLENTH;j++)
            iticketnums[j]=target.ticketnums[j];//保存排序前的摇奖信息
        target.ticketnumssort();
    }while(!target.examineticketnums());
    simulationsweepstakes(iticketnums);//模拟摇奖信息
    cout<<"目前正在重新排序..."<<endl;
    Sleep(4000);
    cout<<endl<<"本次中奖号码为:";
    target.displaynums();//显示中奖号码
    outpro<<"您本次所购彩票号码以及兑奖情况如下:"<<endl;
    while(followtickp!=NULL)
    {
        outpro<<"第"<<setw(3)<<++i<<"张彩票号码:";
        followtickp->ticknumsintofile(1);
        num=followtickp->compticketnums(target.ticketnums);
        if(num>TICKETNUMSLENTH-3)
        {
            outpro<<"-->"<<prizes[TICKETNUMSLENTH-num]<<"等奖!"<<endl;
            count[TICKETNUMSLENTH-num]++;
        }
        else
            cout<<"-->"<<"¤"<<endl;
        followtickp=followtickp->next;
    }
    outpro.flush();
    outres<<"小助手提示您"<<endl;
    outres<<"您本次账目如下:"<<endl;
    outres<<"1、中奖情况:"<<endl;
    outres<<"一等奖:"<<setw(3)<<count[0]<<"注 每注奖金1000元 计"<<1000*count[0]<<"元;"<<endl;
    outres<<"二等奖:"<<setw(3)<<count[1]<<"注 每注奖金50元 计"<<50*count[1]<<"元;"<<endl;
    outres<<"三等奖:"<<setw(3)<<count[2]<<"注 每注奖金5元 计"<<5*count[2]<<"元."<<endl;
    outres<<"奖金总计:"<<1000*count[0]+50*count[1]+5*count[2]<<"元."<<endl;
    outres<<"2、选购彩票情况:"<<endl;
    outres<<"购得彩票数目:"<<setw(3)<<i<<"注 每注彩票2元 计"<<2*i<<"元."<<endl;
    outres<<"3、盈亏情况分析:"<<endl;
    if(1000*count[0]+50*count[1]+5*count[2]>2*i)
        outres<<"此次您赢得"<<1000*count[0]+50*count[1]+5*count[2]-2*i<<"元!"<<endl;
    else if(1000*count[0]+50*count[1]+5*count[2]==2*i)
        outres<<"此次您收支平衡!"<<endl;
    else
        outres<<"此次您亏损"<<2*i-1000*count[0]-50*count[1]-5*count[2]<<"元!"<<endl;
    outpro.flush();
    ShellExecute(NULL,"open","彩票得奖统计.txt",NULL,NULL,SW_SHOWNORMAL);
    cout<<endl<<"提示:彩票兑奖结果信息文件已打开!请您查看..."<<endl;
    cout<<endl<<"提示:您需要查看您的彩票兑奖详细信息吗?(Y/N)";
    do{
        cin>>cho;
    }while(cho!='Y'&&cho!='y'&&cho!='N'&&cho!='n');
    if(cho=='Y'||cho=='y')
        ShellExecute(NULL,"open","彩票得奖细节.txt",NULL,NULL,SW_SHOWNORMAL);
    number2++;
    number1=0;
    return success;
}

/*****************************************************************
*函数功能:释放已购买彩票链表数据空间
*****************************************************************/
void sweepstakes::releaselinklist()
{
    lotteryticket *searchp=headp->next,*followp=headp;//初始化两个指针
    while(searchp!=NULL)
    {
        followp=searchp;
        searchp=searchp->next;
        delete followp;
    }
    headp->next=NULL;//保留了最后一个结点,就是头结点,并且链域置为空
}

/*****************************************************************
*函数功能:退出程序前扫尾操作
*****************************************************************/
void sweepstakes::finishprogram()
{
    releaselinklist();
    delete headp;//把头结点也释放掉
}

/*****************************************************************
*函数功能:模拟电视摇奖函数
*****************************************************************/
void sweepstakes::simulationsweepstakes(int nums[])
{
    char *location[TICKETNUMSLENTH]={"一","二","三","四","五"};
    cout<<">>>现在启动开奖程序..."<<endl;
    cout<<"----------------------"<<endl;
    for(int i=0;i<TICKETNUMSLENTH;i++)
    {
        cout<<endl<<"目前正在摇第"<<location[i]<<"个数字...";
        cout<<endl;
        Sleep(3000);
        cout<<"第"<<location[i]<<"个数字已经出现:";
        if(nums[i]<10)
            cout<<"0";
        cout<<nums[i]<<endl;
        cout<<"----------------------"<<endl;
    }
}

/*
定义一个实现彩票功能的菜单处理类interfacebase 
*/
class interfacebase
{
private:
    sweepstakes sweepstakesonface;
public:
    void clearscreen(void);//清屏
    void showmenu(void);//显示菜单函数
    int userchoice(void);//用户的选项
    returninfo processmenu(int menuchoice);//菜单函数
};

/*****************************************************************
*函数功能:清屏
*****************************************************************/
void interfacebase::clearscreen(void)
{
    system("cls");
}

/*****************************************************************
*函数功能:显示菜单函数
*****************************************************************/
void interfacebase::showmenu(void)
{
    cout<<"彩票购买及兑奖基本功能菜单"<<endl;
    cout<<"=========================="<<endl;
    cout<<"1.彩票购买通道"<<endl;
    cout<<"2.彩票兑奖通道"<<endl;
    cout<<"0.退出程序"<<endl;
    cout<<"=========================="<<endl;
}

/*****************************************************************
*函数功能:用户的选项
*****************************************************************/
int interfacebase::userchoice(void)
{
    int menuchoice;
    cout<<"请输入您的选择:";
    cin>>menuchoice;
    return menuchoice;
}

/*****************************************************************
*函数功能:菜单函数
*****************************************************************/
returninfo interfacebase::processmenu(int menuchoice)
{
    int returnvalue;
    switch(menuchoice)//根据用户的选择进行相应的操作
    {
    case 1:
        clearscreen();
        returnvalue=sweepstakesonface.getlotteryticket();
        if(returnvalue==fail)
            cout<<"对不起,您已经购买彩票,请兑奖后再继续购买彩票!"<<endl;
        else
            cout<<"彩票购买成功,请去彩票兑奖通道兑奖!"<<endl;
        break;
    case 2:
        clearscreen();
        returnvalue=sweepstakesonface.exchangeprizes();
        if(returnvalue==fail)
            cout<<"对不起,彩票已经兑奖,请购买彩票后再继续兑奖!"<<endl;
        else
            cout<<"彩票已经兑奖,欢迎再次购买!"<<endl;
        break;
    case 0:
        sweepstakesonface.finishprogram();
        exit(0);
    default:
        cout<<"对不起,您输入的功能编号有错!请重新输入!!!"<<endl;
        break;
    }
    return success;
}

/*
程序主入口
*/
void main(void)
{
    int menuchoice;//定义变量,菜单选单项的选择
    interfacebase interfacenow;
    sweepstakes sweepstakesnow;
    system("color f0");//修改屏幕的背景色和字的颜色
    interfacenow.clearscreen();//清屏
    while(1)//永真循环
    {
        interfacenow.showmenu();//显示菜单
        menuchoice=interfacenow.userchoice();//获取用户的选择
        interfacenow.processmenu(menuchoice);//处理用户的选择
        system("pause");//暂停
        interfacenow.clearscreen();//清屏
    }
}//主函数结束

c++

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!

相似问题

1
怎么在javascrpt插入javascrpt语言的函数的代码,不是调用函数,是插入函数,查不到的?
3
BP神经网络的训练函数和学习函数,还有性能函数分别代表什么
1
python编程统计列表中各数据的方差和标准差请编写主函数和计算方差的函数var
1
机器学习模型的损失函数,是如何进行选取的?
2
C++中回调函数的实现以及代码错误
1
pandas如何简单实现excel中的countif函数?
3
自编函数实现strlen 和strcat 我的代码测试结果没问题但是现实运行时错误 求解答
2
C语言大佬求助;输入5个学生成绩,写一个函数,当主函数调用此函数后,能求出平均分、最高分和最低分
0
C语言 函数的形参传递问题(代码内容是表达式求值,数组栈实现)
1
C++服务端开发是不是应该减少使用虚函数?
0
用字母a-z表示每个函数图像上的的所有点,怎么利用C语言的程序编写的代码的方式来输出的
1
numpy的shape函数返回值问题,具体一点:shape的返回值为什么因数据量的多少发生了改变
1
python定义的函数怎么返回遍历的多个值,如果是返回多个字符串呢?
1
matlab 如何根据函数图像,得出函数表达式?
2
c++11中 构造函数 与 复制构造函数和赋值操作符的关系 ???
1
对函数式编程的不理解 (Haskell)
2
关于C语言函数内存分配的疑问
2
Vue全局函数无法在钩子函数里调用
1
operator new是普通函数还是重载new运算符的函数
2
用C语言写了一个输入一个一维数组的函数,如何在函数中调用该数组?