找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 472|回复: 8

[原创][分享]吃饭选菜程序(纯属休闲)

[复制链接]
发表于 2009-11-3 03:51:05 | 显示全部楼层 |阅读模式 IP:江苏扬州
完善了下,很多时候,不知道吃什么好,所以家长问我,我都说随便,于是写了这个无聊的程序


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



附件: 只有本站会员才能下载或查看附件,请您 登录 或 注册
发表于 2009-11-3 03:51:06 | 显示全部楼层 IP:江苏扬州
不好意思,woodhead,我不小心编辑你的帖子了,sorry.
附件: 只有本站会员才能下载或查看附件,请您 登录 或 注册
回复

使用道具 举报

发表于 2009-11-3 03:51:07 | 显示全部楼层 IP:江苏扬州
这怎么能去掉呢?
bool Initional(); //初始化...加载数据
void SaveInform(); //保存数据
这两个都需要啊
回复

使用道具 举报

发表于 2009-11-3 03:51:08 | 显示全部楼层 IP:江苏扬州
ostream和istream就可以了,我忘了它门的关系了,好象ofstream,ifstream是他们的派生类
回复

使用道具 举报

发表于 2009-11-3 03:51:09 | 显示全部楼层 IP:江苏扬州
但是错误好象不在于此,我一开始就没写,后来才加上去的,但是我想错误本身不在这
回复

使用道具 举报

发表于 2009-11-3 03:51:09 | 显示全部楼层 IP:江苏扬州
我把菜单文件在1楼加上去了,可以下载
回复

使用道具 举报

发表于 2009-11-3 03:51:11 | 显示全部楼层 IP:江苏扬州
放入容器类的元素的类型,如果使用动态内存,要提供复制构造函数,我也晕了半天

#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;
}
回复

使用道具 举报

发表于 2009-11-3 03:51:13 | 显示全部楼层 IP:江苏扬州
这个好容易忽略,我昏,这个问题,看起来不难,但是很容易忽视啊,谢谢指出。
#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楼下载
回复

使用道具 举报

发表于 2009-11-3 03:51:15 | 显示全部楼层 IP:江苏扬州
好了,我把它做完善了点,大家有时间可以看下,我觉得我做的很粗糙,哪里可以细致点,请指教:
#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;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 15:32 , Processed in 0.195423 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表