| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 847 人关注过本帖, 1 人收藏
标题:[原创][分享]吃饭选菜程序(纯属休闲)
只看楼主 加入收藏
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏(1)
 问题点数:0 回复次数:8 
[原创][分享]吃饭选菜程序(纯属休闲)

完善了下,很多时候,不知道吃什么好,所以家长问我,我都说随便,于是写了这个无聊的程序



运行程序(包含菜单文件):

bbv9IAq3.rar (2.45 KB) [原创][分享]```呵呵,由于懒,做了个选菜程序


[此贴子已经被作者于2006-7-20 18:16:55编辑过]



SGGtIuF7.txt (292 Bytes) [求助]本想做个简单的程序,但是内存问题



PV1ddrrW.rar (56.18 KB) [原创][分享]```呵呵,由于懒,做了个选菜程序



KGUcFTS9.rar (58.04 KB) [原创][分享]```呵呵,由于懒,做了个选菜程序

搜索更多相关主题的帖子: 休闲 吃饭 分享 
2006-07-19 12:14
woodhead
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:1124
专家分:0
注 册:2005-7-18
收藏
得分:0 
[分享]吃饭选菜程序,呵呵~!

不好意思,woodhead,我不小心编辑你的帖子了,sorry.



eNw0xdLs.rar (56.18 KB) [分享]吃饭选菜程序,呵呵~!


2006-07-19 12:52
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
这怎么能去掉呢?
bool Initional(); //初始化...加载数据
void SaveInform(); //保存数据
这两个都需要啊

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-07-19 13:04
woodhead
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:1124
专家分:0
注 册:2005-7-18
收藏
得分:0 
ostream和istream就可以了,我忘了它门的关系了,好象ofstream,ifstream是他们的派生类

2006-07-19 13:08
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

但是错误好象不在于此,我一开始就没写,后来才加上去的,但是我想错误本身不在这


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-07-19 13:12
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
我把菜单文件在1楼加上去了,可以下载

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-07-19 13:12
woodhead
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:1124
专家分:0
注 册:2005-7-18
收藏
得分:0 
放入容器类的元素的类型,如果使用动态内存,要提供复制构造函数,我也晕了半天

#include<iostream>
#include<fstream>
#include<ctime>
#include<vector>
#include<conio.h>
using namespace std;

class MENU
{
    char *menu;
public:
    MENU(){menu=new char[20];}
    MENU(char*name){menu=new char[strlen(name)+1];strcpy(menu,name);}
    ~MENU(){delete[]menu;}
    void operator=(const char*p){ delete[]menu;menu=new char[strlen(p)+1];strcpy(menu,p);}
    void operator=(const MENU &m) {delete[]menu;menu=new char[strlen(m.menu)+1]; strcpy(menu,m.menu);}
    MENU(const MENU&m) { menu=new char[strlen(m.menu)+1]; strcpy(menu,m.menu); }
    bool operator==(const MENU& m){return strcmp(menu,m.menu)==0;}
    friend ostream&operator<<(ostream& os,const MENU& m)  {os<<m.menu<<endl;return os;}
    friend istream&operator>>(istream& is,const MENU& m)  {is>>m.menu;      return is;}
    //friend void Initional();
};


template<class T>
class CMenuVector
{
    int MenuNum;
    vector<T> vec_menu;
public:

    bool InSide(T value,vector<T>arr,int n)
        //检查是否在容器中已经存在
    {
        for(int i=0;i<n;i++)
            if(value==arr[i])return true;
        return false;
    }
    bool isInSide(int value,vector<int>arr,int n)
        //检查是否在容器中已经存在
    {
        for(int i=0;i<n;i++)
            if(value==arr[i])return true;
        return false;
    }
    void Display_All()
    {
        for(int i=0;i<MenuNum;i++)
        {
            cout<<vec_menu[i]<<"  ";
            if(i%5==0)cout<<endl;
        }
    }
    void add_reset(int num){MenuNum+=num;vec_menu.resize(MenuNum);}
    void Add_Menu();
    void Get_Menu(int count);  //得到结果
    bool Initional();          //初始化...加载数据
    void SaveInform();         //保存数据
    void menu();               //选择菜单
};
template<class T>
bool CMenuVector<T>::Initional()
{
    ifstream ins("D:\\tmp\\1.txt");
    if(!ins.is_open()){cout<<"error\n";return 0;}    ////////******判断文件打开
    int num;ins>>num;
    MenuNum=num;
    vec_menu.resize(MenuNum);

    for(int i=0;i<MenuNum;i++){T t;ins>>t;vec_menu[i]=t;}
    ins.close();

    return 1;
}
template<class T>
void CMenuVector<T>::SaveInform()
{
    ofstream outs("D:\\tmp\\1.txt");
    outs<<MenuNum<<endl;
    for(int i=0;i<MenuNum;i++)
    {
        outs<<vec_menu[i]<<endl;
    }
    outs.close();
}
template<class T>
void CMenuVector<T>::menu()
{
    cout<<"                  ※※※※※※※※※※※※※※※※※※※\n";
    cout<<"                                                    ※\n";
    cout<<"                         欢迎使用机选菜谱程序       ※\n";
    cout<<"                  ※—————————————————※\n";
    cout<<"                                                    ※\n";
    cout<<"                  ※ 1.    运行选菜系统选择菜谱       ※\n";
    cout<<"                  ※ 2.                   ※\n";
    cout<<"                  ※ 3.                   ※\n";
    cout<<"                  ※ 4.    退                ※\n";
    cout<<"                                                    ※\n";
    cout<<"                  ※※※※※※※※※※※※※※※※※※※\n";
    cout<<"请选择...";
}
template<class T>
void CMenuVector<T>::Get_Menu(int count)
{
    vector<int>arr_menu;
    arr_menu.resize(count);
    for(int j=0;j<count;j++)arr_menu.push_back(-1);
    srand((unsigned)time(0));
    for(int i=0;i<count;i++)
    {
        int temp=rand()%MenuNum;
        if(!isInSide(temp,arr_menu,count))
        {
            arr_menu[i]=temp;
            cout<<"第"<<i+1<<"道菜:"<<vec_menu[temp];
        }
        else i--;
    }
}
template<class T>
void CMenuVector<T>::Add_Menu()
{
    cout<<"选择要添加的菜项数:";int MenuNum;cin>>MenuNum;
    add_reset(MenuNum);
    for(int m=0;m<MenuNum;m++)
    {
        cout<<"请输入菜项名称:";T temp;cin>>temp;
        if(!InSide(temp,vec_menu,MenuNum))
        {
            vec_menu.push_back(temp);  
        }
        else
        {
            cout<<"已经存在此菜项,请重新另外输入。\n";
            m--;
        }
    }
}


int main()
{
    CMenuVector<MENU> CMenu;
    if(!CMenu.Initional()){cout<<"ERRor";system("PAUSE");return 0;}
    CMenu.menu();
    char run=getch();
    switch(run)
    {
    case '1':
        {
            cout<<"\n请您输入选菜数量: ";
            int menuNo;cin>>menuNo;
            do
            {
                CMenu.Get_Menu(menuNo);
                cout<<"\n您还满意此次选择吗?\n";
                cout<<"1.满意      2.不满意 \n";
                int choice;cin>>choice;
                if(choice==1){cout<<"选菜程序结束`《谢谢使用》`再见。\n";break;}
            }while(1);
        }break;
    case '2':
        CMenu.Add_Menu();break;
    case '3':
        CMenu.Display_All();break;
    case '4':
        CMenu.SaveInform();break;
    }

    system("PAUSE");
    return 0;
}

2006-07-19 15:11
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

这个好容易忽略,我昏,这个问题,看起来不难,但是很容易忽视啊,谢谢指出。
#include "stdafx.h"
#include<iostream>
#include<fstream>
#include<ctime>
#include<vector>
#include<conio.h>
#include<iomanip>
using namespace std;
class MENU
{ char *menu;
public:
MENU(){menu=new char[20];}
MENU(char*name){menu=new char[strlen(name)+1];strcpy(menu,name);}
~MENU(){delete[]menu;}
void operator=(const char*p){ delete[]menu;menu=new char[strlen(p)+1];strcpy(menu,p);}
void operator=(const MENU &m) {delete[]menu;menu=new char[strlen(m.menu)+1]; strcpy(menu,m.menu);}
MENU(const MENU&m) { menu=new char[strlen(m.menu)+1]; strcpy(menu,m.menu); }
bool operator==(const MENU& m){return strcmp(menu,m.menu)==0;}
friend ostream&operator<<(ostream& os,const MENU& m) {os<<m.menu;return os;}
friend istream&operator>>(istream& is,const MENU& m) {is>>m.menu; return is;}
//friend void Initional();
};
template<class T>
class CMenuVector
{ int MenuNum;
vector<T> vec_menu;
public:
bool InSide(T value,vector<T>arr,int n)
//检查是否在容器中已经存在
{
for(int i=0;i<n;i++)
if(value==arr[i])return true;
return false;
}
bool isInSide(int value,vector<int>arr,int n)
//检查是否在容器中已经存在
{
for(int i=0;i<n;i++)
if(value==arr[i])return true;
return false;
}
void Display_All()
{
for(int i=0;i<MenuNum;i++)
{
cout<<setiosflags(ios::left)<<setw(10)<<vec_menu[i]<<" ";
if(i%5==0)cout<<endl;
}
cout<<endl;
}
void add_reset(int num){MenuNum+=num;vec_menu.resize(MenuNum);}
void Add_Menu();
void Get_Menu(int count); //得到结果
bool Initional(); //初始化...加载数据
void SaveInform(); //保存数据
void menu(); //选择菜单
};

template<class T>
bool CMenuVector<T>::Initional()
{ ifstream ins("菜单.txt");
if(!ins.is_open()){cout<<"error\n";return 0;} ////////******判断文件打开
int num;ins>>num;
MenuNum=num;
vec_menu.resize(MenuNum);
for(int i=0;i<MenuNum;i++){T t;ins>>t;vec_menu[i]=t;}
ins.close();
return 1;
}

template<class T>
void CMenuVector<T>::SaveInform()
{
ofstream os("菜单.txt");os<<" ";os.close();
ofstream outs("菜单.txt");
outs<<MenuNum<<endl;
for(int i=0;i<MenuNum;i++)
{
outs<<vec_menu[i]<<endl;
}
outs.close();
}

template<class T>
void CMenuVector<T>::menu()
{
cout<<" ※※※※※※※※※※※※※※※※※※※\n";
cout<<" ※ ※\n";
cout<<" ※ 欢迎使用机选菜谱程序 ※\n";
cout<<" ※—————————————————※\n";
cout<<" ※ ※\n";
cout<<" ※ 1. 运行选菜系统选择菜谱 ※\n";
cout<<" ※ 2. 添 加 菜 项 ※\n";
cout<<" ※ 3. 查 看 菜 单 ※\n";
cout<<" ※ 4. 退 出 系 统 ※\n";
cout<<" ※ ※\n";
cout<<" ※※※※※※※※※※※※※※※※※※※\n";
cout<<"请选择...";
}

template<class T>
void CMenuVector<T>::Get_Menu(int count)
{
vector<int>arr_menu;
arr_menu.resize(count);
for(int j=0;j<count;j++)arr_menu.push_back(-1);
srand((unsigned)time(0));
for(int i=0;i<count;i++)
{
int temp=rand()%MenuNum;
if(!isInSide(temp,arr_menu,count))
{
arr_menu[i]=temp;
cout<<"第"<<i+1<<"道菜:"<<vec_menu[temp]<<endl;
}
else i--;
}
}

template<class T>
void CMenuVector<T>::Add_Menu()
{
cout<<"选择要添加的菜项数:";int MenuNum;cin>>MenuNum;
add_reset(MenuNum);
for(int m=0;m<MenuNum;m++)
{
cout<<"请输入菜项名称:";T temp;cin>>temp;
if(!InSide(temp,vec_menu,MenuNum))
{
vec_menu.push_back(temp);
}
else
{
cout<<"已经存在此菜项,请重新另外输入。\n";
m--;
}
}
}
int main()
{
CMenuVector<MENU> CMenu;
if(!CMenu.Initional()){cout<<"ERRor";system("PAUSE");return 0;}
CMenu.menu();
char run=getch();
switch(run)
{
case '1':
{
cout<<"\n请您输入选菜数量: ";
int menuNo;cin>>menuNo;
do
{
CMenu.Get_Menu(menuNo);
cout<<"\n您还满意此次选择吗?\n";
cout<<"1.满意 2.不满意 \n";
int choice;cin>>choice;
if(choice==1){cout<<"选菜程序结束`《谢谢使用》`再见。\n";break;}
}while(1);
}break;
case '2':
CMenu.Add_Menu();break;
case '3':
CMenu.Display_All();break;
case '4':
CMenu.SaveInform();break;
}
return 0;
}
////////////////////////////////
//现在没问题了
///////////////////////////////
菜单文件可直接在1楼下载


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-07-19 16:23
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

好了,我把它做完善了点,大家有时间可以看下,我觉得我做的很粗糙,哪里可以细致点,请指教:
#include "stdafx.h"
#include<iostream>
#include<fstream>
#include<ctime>
#include<vector>
#include<conio.h>
#include<iomanip>
#include <Windows.h>
using namespace std;
class MENU
{ char *menu;
public:
MENU(){menu=new char[20];}
MENU(char*name){menu=new char[strlen(name)+1];strcpy(menu,name);}
~MENU(){delete[]menu;}
void operator=(const char*p){ delete[]menu;menu=new char[strlen(p)+1];strcpy(menu,p);}
void operator=(const MENU &m) {delete[]menu;menu=new char[strlen(m.menu)+1]; strcpy(menu,m.menu);}
MENU(const MENU&m) { menu=new char[strlen(m.menu)+1]; strcpy(menu,m.menu); }
bool operator==(const MENU& m){return strcmp(menu,m.menu)==0;}
friend ostream&operator<<(ostream& os,const MENU& m) {os<<m.menu;return os;}
friend istream&operator>>(istream& is,const MENU& m) {is>>m.menu; return is;}
//friend void Initional();
};
template<class T>
class CMenuVector
{
int MenuNum;
bool dinner;
vector<T> vec_menu;
string filename;
public:
CMenuVector(){filename="";MenuNum=1;vec_menu.resize(1);dinner=true;}
void setFilename(string fname,bool isDinner){filename=fname;dinner=isDinner;}
bool isDinner(){return dinner;}
bool InSide(T value,vector<T>arr,int n)
//检查是否在容器中已经存在
{
for(int i=0;i<n;i++)
if(value==arr[i])return true;
return false;
}
bool isInSide(int value,vector<int>arr,int n)
//检查是否在容器中已经存在
{
for(int i=0;i<n;i++)
if(value==arr[i])return true;
return false;
}
void Display_All()
{
cout<<"\n菜谱如下:\n";
for(int i=0;i<MenuNum;i++)
{
cout<<setiosflags(ios::left)<<setw(10)<<vec_menu[i]<<" ";
if((i+1)%5==0)cout<<endl;
}
}
void add_reset(int num){MenuNum+=num;vec_menu.resize(MenuNum);}
void Add_Menu();
void Get_Menu(int count); //得到结果
bool Initional(); //初始化...加载数据
void SaveInform(); //保存数据
void dinner_menu(); //正餐选择菜单
void breakfast_menu(); //早点选择菜单
void run_Menu(); //运行函数
};

template<class T>
bool CMenuVector<T>::Initional()
{
ifstream ins(filename.c_str());
if(!ins.is_open()){cout<<"error\n";return 0;} ////////******判断文件打开
int num;ins>>num;
MenuNum=num;
vec_menu.resize(MenuNum);
for(int i=0;i<MenuNum;i++){T t;ins>>t;vec_menu[i]=t;}
ins.close();
return 1;
}

template<class T>
void CMenuVector<T>::SaveInform()
{
ofstream os(filename.c_str());os<<" ";os.close();
ofstream outs(filename.c_str());
outs<<MenuNum<<endl;
for(int i=0;i<MenuNum;i++)
{
outs<<setiosflags(ios::left)<<setw(10)<<vec_menu[i]<<" ";
if((i+1)%5==0)outs<<endl;
}
outs<<endl;
outs.close();
}

template<class T>
void CMenuVector<T>::dinner_menu()
{
cout<<" ※※※※※※※※※※※※※※※※※※※\n";
cout<<" ※ ※\n";
cout<<" ※ 欢迎使用正餐菜谱程序 ※\n";
cout<<" ※—————————————————※\n";
cout<<" ※ ※\n";
cout<<" ※ 1. 运行选菜系统选择菜谱 ※\n";
cout<<" ※ 2. 添 加 菜 项 ※\n";
cout<<" ※ 3. 查 看 菜 单 ※\n";
cout<<" ※ 4. 退 出 系 统 ※\n";
cout<<" ※ ※\n";
cout<<" ※※※※※※※※※※※※※※※※※※※\n";
cout<<"请选择...";
}

template<class T>
void CMenuVector<T>::breakfast_menu()
{
cout<<" ※※※※※※※※※※※※※※※※※※※\n";
cout<<" ※ ※\n";
cout<<" ※ 欢迎使用早餐菜谱程序 ※\n";
cout<<" ※—————————————————※\n";
cout<<" ※ ※\n";
cout<<" ※ 1. 运行选菜系统选择菜谱 ※\n";
cout<<" ※ 2. 添 加 菜 项 ※\n";
cout<<" ※ 3. 查 看 菜 单 ※\n";
cout<<" ※ 4. 退 出 系 统 ※\n";
cout<<" ※ ※\n";
cout<<" ※※※※※※※※※※※※※※※※※※※\n";
cout<<"请选择...";
}

template<class T>
void CMenuVector<T>::Get_Menu(int count)
{
vector<int>arr_menu;
arr_menu.resize(count);
for(int j=0;j<count;j++)arr_menu.push_back(-1);
srand((unsigned)time(0));
for(int i=0;i<count;i++)
{
int temp=rand()%MenuNum;
if(!isInSide(temp,arr_menu,count))
{
arr_menu[i]=temp;
cout<<"第"<<i+1<<"种选择:"<<vec_menu[temp]<<endl;
}
else i--;
}
}

template<class T>
void CMenuVector<T>::Add_Menu()
{
cout<<"\n选择要添加的种类数:";int num;cin>>num;
add_reset(num);
for(int m=0;m<num;m++)
{
cout<<"请输入名称:";T temp;cin>>temp;
if(!InSide(temp,vec_menu,MenuNum))
{
vec_menu[MenuNum-num+m]=temp;
}
else
{
cout<<"已经存在此项,请重新另外输入。\n";
m--;
}
}
}


template<class T>
void CMenuVector<T>::run_Menu()
{
char run=getch();
bool error=false;
do
{
switch(run)
{
case '1':
{
error=false;
cout<<"\n请您输入选择数量: ";
int menuNo;cin>>menuNo;
do
{
Get_Menu(menuNo);
cout<<"\n您还满意此次选择吗?\n";
cout<<"1.满意 2.不满意 \n";
int choice;cin>>choice;
if(choice==1){cout<<"选菜程序结束`《谢谢使用》`再见。\n";break;}
}while(1);
}break;
case '2':
error=false;Add_Menu();Sleep(1000);system("cls");
if(dinner==true)dinner_menu();
else breakfast_menu();
run_Menu();
break;
case '3':
error=false;Display_All();Sleep(4000);system("cls");
if(dinner==true)dinner_menu();
else breakfast_menu();
run_Menu();
break;
case '4':
error=false;SaveInform();break;
default:
{
system("cls");
cout<<"输入错误选项,请重新输入。"<<endl;error=true;
if(dinner==true)dinner_menu();
else breakfast_menu();
run_Menu();
}
}
} while(error);
}

void main_menu()
{
cout<<" ※※※※※※※※※※※※※※※※※※※\n";
cout<<" ※ ※\n";
cout<<" ※ 欢迎使用机选菜谱程序 ※\n";
cout<<" ※—————————————————※\n";
cout<<" ※ ※\n";
cout<<" ※ 1. 早 点 系 统 ※\n";
cout<<" ※ 2. 正 餐 系 统 ※\n";
cout<<" ※ 3. 退 出 系 统 ※\n";
cout<<" ※ ※\n";
cout<<" ※※※※※※※※※※※※※※※※※※※\n";
cout<<"请选择...";
}

void main_run()
{
CMenuVector<MENU> CMenu;
char ch=getch();
switch(ch)
{
case '1':CMenu.setFilename("早点.txt",0);break;
case '2':CMenu.setFilename("菜单.txt",1);break;
case '3':cout<<"\n※谢谢使用,再见!※\n";return;
default :cout<<"\n※谢谢使用,再见!※\n";return;
}
system("cls");
if(!CMenu.Initional()){cout<<"ERRor";system("PAUSE");return;}
if(CMenu.isDinner())CMenu.dinner_menu();
else CMenu.breakfast_menu();
CMenu.run_Menu();
cout<<endl;
}
int main()
{
main_menu();
main_run();
system("PAUSE");
return 0;
}

[此贴子已经被作者于2006-7-20 18:12:14编辑过]


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-07-20 18:03
快速回复:[原创][分享]吃饭选菜程序(纯属休闲)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018880 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved