| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 306 人关注过本帖
标题:泪奔 求助啊 求各位高手 达人 帮花两张流程图
只看楼主 加入收藏
ffffdddssa
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-11-17
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
泪奔 求助啊 求各位高手 达人 帮花两张流程图
泪奔 求助

本人邮箱 ffffdddssa@
求做流程图 只需要做 删除和出库部分流程图 往各位达人看一看 用不了多久的 很简单。。 真的很着急,本人C语言一窍不通。。 只要简单的那种就行。。。2个部分2张

删除部分

void Repository::DeleteRecord()   //在链表中删除指定的结点的数据
{
 CNode *pLook;
 char szName[20];
 cout<<"请输入您需要删除的商品名(输入0退出,并进入系统菜单):";
 cin.getline(szName,20);
 while(strcmp(szName,"0"))
 {
  Repository sh(szName,0,"0");
  pLook=ShList.Search(sh);
  if (pLook)      //删除时应先查找出结点
  {
   cout<<"在库存商品信息记录中找到商品:"<<szName<<",内容是:"<<endl;
   cout<<setw(15)<<"商品名"<<setw(15)<<"商品数量"<<setw(15)<<"入库时间"<<endl;
   pLook->ShowNode();
   cout<<"请确定是否删除此商品信息记录(Y/N)【确定删除请输入Y或y,取消删除请输入N或n】:";
   char ok;
   cin>>ok;
   cin.ignore();
   if (ok=='Y'||ok=='y')
   {
    ShList.DeleteNode(pLook);
    cout<<szName<<"的信息记录删除成功!"<<endl;
    delete pLook;
    count--;
   }
   else if(ok=='N'||ok=='n')
    cout<<szName<<"的信息记录删除失败!"<<endl;
  }
  else
   cout<<"在库存商品信息记录中找不到商品:"<<szName<<"。"<<endl;
  cout<<"请输入您需要删除的商品名(输入0退出,并进入系统菜单):";
        cin.getline(szName,20);
 }
 cout<<endl<<endl;
}


出库部分
void Repository::Output()
{
 CNode *pLook;
 Repository *pSh;
 char szName[20];
 unsigned int szNumber;
 cout<<"请输入您需要出库的商品名(输入0退出,并进入系统菜单):";
 cin.getline(szName,20);
 while(strcmp(szName,"0"))
 {
        Repository sh(szName,0,"0");
  pLook=ShList.Search(sh);
  if (pLook)         //修改时应先查找出结点
  {
   pSh=(Repository *)pLook->GetData();
   cout<<"在库存商品信息记录中找到商品:"<<szName<<",内容是:"<<endl;
   cout<<setw(15)<<"商品名"<<setw(15)<<"商品数量"<<setw(15)<<"入库时间"<<endl;
   pLook->ShowNode();
   if (0==pSh->szNumber)
   {
    cout<<"该商品缺货,请及时补充!"<<endl;
   }
   else
   {
    cout<<"请输入您要取出的商品数量:";
    cin>>szNumber;
    cout<<"请确定是否取出该商品( Yes (Y)  or  No(N)   ):";
    char ok;
    cin>>ok;
    cin.ignore();
    if(ok=='Y'||ok=='y')
    {
     if(pSh->szNumber<=szNumber)
     {
      cout<<szName<<"您要求的商品数量大于仓库中的数量,故全部输出"<<pSh->szNumber<<" 个商品"<<endl;
      pSh->szNumber=0;
     }
     else
     {  
      pSh->szNumber-=szNumber;
      cout<<szName<<"您已取出 "<<szNumber<<" 个商品"<<endl;
     }
     cout<<szName<<"成功取出!"<<endl;
     
    }
    else
     if(ok=='N'||ok=='n')
      cout<<szName<<"您取消了该操作"<<endl;
   }
   
  }
  else
   cout<<" 在库存商品信息记录中找不到"<<szName<<","<<endl;
  cout<<"  请输入您需要出库的商品名(输入0退出,并进入系统菜单):";
  cin.getline(szName,20);
 }
}









下面是全部源程序
#include<iostream>
#include<string>
#include<iomanip>
#include<fstream>
using namespace std;
int count=0;
class CData   //定义数据基类
{
public:
    CData(){};
    virtual int Compare(CData &,int)=0;
    virtual void Show()=0;
    virtual ~CData(){};
};
class CNode   //定义结点基类
{
private:
    CData *pData;  //用于指向数据类的指针
    CNode *pNext;  //用于指向链表的后向指针
public:
    CNode()
    {
        pData=0;pNext=0;
    };   //结点构造函数
    CNode(CNode &node)      //用于拷贝的构造函数
    {
        pData=node.pData;
        pNext=node.pNext;
    }
    void InputData(CData *pdata){pData=pdata;}   //输入数据
    void ShowNode(){pData->Show();}                //打印一个节点的数据
    CData *GetData(){return pData;}               
    friend class CList;    //定义链表类为基类
};
class CList
{
   
    CNode *pHead;    //链表头结点指针
public:
    CList(){pHead=0;};      
    ~CList(){DeleteList();}
    void AddNode(CNode *pnode);   //在首部添加结点
    CNode *DeleteNode(CNode *);   //删除一个指定的结点,返回该结点的指针
    CNode *Search(CData &);     //查找一个指定的数据,返回该数据所在的结点在链表的指针,未找到返回0
    bool IsExist(CData &);
    void ShowList();            //打印整个链表
    void DeleteList();          //删除整个链表
    CNode *GetListHead(){return pHead;}   //返回链表首结点
    CNode *GetListNextNode(CNode *pnode);  //返回链表指定结点的下一个结点
};
CNode *CList::GetListNextNode(CNode *pnode)     //返回链表指定结点的下一个结点
{
    CNode *p1=pnode;
    return p1->pNext;
};
void CList::AddNode(CNode *pnode)   //在首部添加结点
{
    if (pHead==0)    //如果是空链表,插入的结点是唯一的结点
    {
        pHead=pnode;
        pnode->pNext=0;
        return;
    }
    else     //否则,插入到链表首部
    {
        pnode->pNext=pHead;
        pHead=pnode;
    }
};
CNode *CList::DeleteNode(CNode *pnode)     //删除一个指定的结点,返回该结点的指针
{
    CNode *p1,*p2;
    p1=pHead;              //指向首结点
    while(p1!=pnode&&p1->pNext!=0)    //寻找要删除的结点
    {
        p2=p1;
        p1=p1->pNext;       //结点p2始终在p1的后面
    }
    if (p1==pHead)       //如果要删除的是首结点
    {
        pHead=pHead->pNext;   //将首结点后移
        return pnode;
    }
    p2->pNext=p1->pNext;  //p1指向被删除的结点,将p2结点与p1后面的结点连接起来
    return pnode;
}
CNode *CList::Search(CData &data)   //查找一个指定的数据,返回指针,若未找到返回0
{
    CNode *p1=pHead;
    while(p1)                     //从头结点开始查找
    {
        if (p1->pData->Compare(data,1)==0)
            return p1;             //找到后返回结点指针
        p1=p1->pNext;
    }
    return 0;     //搜索完找不到,返回空指针0
}
bool CList::IsExist(CData &data)
{
    bool f1=false;
    CNode *p1=pHead;
    while(p1)
    {
        if (p1->pData->Compare(data,0)==0)
        {
            p1->ShowNode();
            return true;
        }
        p1=p1->pNext;
        
    }
    return false;
}
void CList::ShowList()  //打印整个链表
{
    CNode *p1=pHead;
    while(p1)
    {
        p1->pData->Show();
        p1=p1->pNext;
    }
   
   
}
void CList::DeleteList()   //删除整个链表结点
{
    CNode *p1,*p2;
    p1=pHead;
    while(p1)
    {
        delete p1->pData;
        p2=p1;
        p1=p1->pNext;
        delete p2;
    }
}
class Repository:public CData   //库存为记录,为数据基类的公有派生类
{
private :
    char szName[20];     //库存中数据:商品名、商品数量和入库时间
    unsigned int szNumber;
    char szTime[20];
    char szN;
    CList ShList;
public:
    Repository(); //构造函数
    Repository(char *name,int number,char *time);
    void SetRecord(char *name, int number,char *time);    //输入数据函数
    int Compare(CData &,int);   //比较函数,比较商品名
    void Show();
    void AddRecord();
    void Display();
    void LookUpRecord();
    void LookUpRecordF();
    void DeleteRecord();
    void ModifyRecord();
    void SaveToFile();
    void Operate(string &strChoice);
    void ReadFromFile();
    void Output();
};
Repository::Repository()
{
    strcpy(szName,"\0");
    szNumber=0;
    strcpy(szTime,"\0");
}

Repository::Repository(char *name,int number,char *time)
{
    strcpy(szName,name);
    szNumber=number;
    strcpy(szTime,time);
    szN=name[0];
}
void Repository::SetRecord(char *name, int number,char *time)    //输入数据函数
{
    strcpy(szName,name);
    szNumber=number;
    strcpy(szTime,time);
    szN=name[0];
}
int Repository::Compare(CData &data,int choice)  //比较商品名
{
    Repository &temp=(Repository &)data;
    if(choice==1)
        return strcmp(szName,temp.szName);
    else
        return (szN==temp.szN ? 0:1);
}
void Repository::Show()  //打印一个结点的数据
{
    cout<<setw(15)<<szName<<setw(15)<<szNumber<<setw(15)<<szTime<<endl;
}

void Repository::AddRecord()   //将记录添加到链表中
{
    CNode *pNode;
    Repository *pSh;
    char szName[20],szTime[20];
    unsigned int szNumber;
    cout<<"请输入新商品名(输入0退出,并进入系统菜单):";
    cin>>szName;
    while(strcmp(szName,"0"))
    {
        cout<<"请输入新商品入库时间: ";
        cin>>szTime;
        cout<<"请输入新商品数量:  ";
        cin>>szNumber;
        pSh=new Repository;                           //生成新的数据累对象
        pSh->SetRecord(szName,szNumber,szTime);       //数据类对象赋值
        pNode=new CNode;                           //生成新的结点
        pNode->InputData(pSh);                     //结点插入链表
        ShList.AddNode(pNode);
        count++;
        cout<<"请输入新商品名(输入0退出,并进入系统菜单) ";
        cin>>szName;
    }
    cout<<endl<<endl;
}

void Repository::Display()                     //显示全部链表数据
{
    cout<<"当前操作共有"<<count<<"条新商品的添加纪录。\n\n";
    cout<<"目前库存共有商品信息记录是:\n\n";
    cout<<setiosflags(ios_base::left)<<setw(15)<<"商品名"<<setw(15)<<"商品数量"<<setw(15)<<"入库时间"<<endl<<endl;
    ShList.ShowList();
    bool pLook;
    char szName[20];
    for(szName[0]='a';szName[0]<='z';szName[0]++)
    {
        Repository sh(szName,0,"0");
        pLook=ShList.IsExist(sh);
        szName[0]-=32;
        sh.SetRecord(szName,0,"0");
        pLook=ShList.IsExist(sh);
        szName[0]+=32;
    }
    cout<<endl<<endl;
    system("pause");
}

void Repository::LookUpRecord()        // 按照商品名查找
{
    CNode *pLook;
    char szName[20];
    cout<<"请输入您需要查找的商品名(输入0退出,并进入系统菜单):";
    cin.getline(szName,20);
    while (strcmp(szName,"0"))
    {
        Repository sh(szName,0,"0");    //生成结点
        pLook=ShList.Search(sh);         //查找指定结点的数据
        if (pLook)
        {
            cout<<"在库存商品信息记录中找到商品:"<<szName<<",内容是:"<<endl;
            cout<<setw(15)<<"商品名"<<setw(15)<<"商品数量"<<setw(15)<<"入库时间"<<endl;
            pLook->ShowNode();
        }
        else
            cout<<"在库存商品信息记录中找不到商品:"<<szName<<"。"<<endl;
        cout<<"请输入您需要查找的商品名(输入0退出,并进入系统菜单):";
        cin.getline(szName,20);
    }
    cout<<endl<<endl;
}

void Repository::LookUpRecordF()
{
    bool pLook;
    char szName[20];
    cout<<"请输入您需要查找的商品名的首字(输入0退出,并进入系统菜单):";
    cin.getline(szName,20);
    while (strcmp(szName,"0"))
    {
        Repository sh(szName,0,"0");
        pLook=ShList.IsExist(sh);
        if (pLook==false)
            cout<<"在库存商品信息记录中不到首字为"<<szName<<"的信息记录"<<endl;
        else
            cout<<"首字是"<<szName<<"的商品信息记录找到!"<<endl;
        cout<<"请输入您需要查找的商品名的首字(输入0退出,并进入系统菜单):";
        cin.getline(szName,20);
        
    }
    cout<<endl<<endl;
}

void Repository::DeleteRecord()   //在链表中删除指定的结点的数据
{
    CNode *pLook;
    char szName[20];
    cout<<"请输入您需要删除的商品名(输入0退出,并进入系统菜单):";
    cin.getline(szName,20);
    while(strcmp(szName,"0"))
    {
        Repository sh(szName,0,"0");
        pLook=ShList.Search(sh);
        if (pLook)      //删除时应先查找出结点
        {
            cout<<"在库存商品信息记录中找到商品:"<<szName<<",内容是:"<<endl;
            cout<<setw(15)<<"商品名"<<setw(15)<<"商品数量"<<setw(15)<<"入库时间"<<endl;
            pLook->ShowNode();
            cout<<"请确定是否删除此商品信息记录(Y/N)【确定删除请输入Y或y,取消删除请输入N或n】:";
            char ok;
            cin>>ok;
            cin.ignore();
            if (ok=='Y'||ok=='y')
            {
                ShList.DeleteNode(pLook);
                cout<<szName<<"的信息记录删除成功!"<<endl;
                delete pLook;
                count--;
            }
            else if(ok=='N'||ok=='n')
                cout<<szName<<"的信息记录删除失败!"<<endl;
        }
        else
            cout<<"在库存商品信息记录中找不到商品:"<<szName<<"。"<<endl;
        cout<<"请输入您需要删除的商品名(输入0退出,并进入系统菜单):";
        cin.getline(szName,20);
    }
    cout<<endl<<endl;
}




void Repository::ModifyRecord()    //修改商品记录
{
    CNode *pLook;
    Repository *pSh;
    char szName[20],szTime[20];
    unsigned int szNumber;
    cout<<"请输入您需要修改的商品名(输入0退出,并进入系统菜单):";
    cin.getline(szName,20);
    while(strcmp(szName,"0"))
    {
        Repository sh(szName,0,"0");
        pLook=ShList.Search(sh);
        if (pLook)         //修改时应先查找出结点
        {
            cout<<"在库存商品信息记录中找到商品:"<<szName<<",内容是:"<<endl;
            cout<<setw(15)<<"商品名"<<setw(15)<<"商品数量"<<setw(15)<<"入库时间"<<endl;
            pLook->ShowNode();
            cout<<"-----下面开始修改-----"<<endl<<"请输入修改后的商品名:  ";
            cin>>szName;
            cout<<"请输入修改后的商品数量:";
            cin>>szNumber;
            cout<<"请输入修改后的商品入库时间: ";
            cin>>szTime;
            cout<<"请确定是否修改此记录(Yes (Y) or No(N)):";
            char ok;
            cin>>ok;
            cin.ignore();
            if (ok=='Y'||ok=='y')
            {
                pSh=new Repository;
                *pSh=sh;
                pSh->SetRecord(szName,szNumber,szTime);
                pLook->InputData(pSh);
                cout<<szName<<"的信息记录修改成功!"<<endl;
            }
            else if(ok=='N'||ok=='n')
                      cout<<szName<<"的信息记录修改失败!"<<endl;
        }
        else
            cout<<" 在库存商品信息记录中找不到"<<szName<<","<<endl;
           cout<<"  请输入您需要修改的商品名(输入0退出,并进入系统菜单):";
           cin.getline(szName,20);
    }
}

void Repository::Output()
{
    CNode *pLook;
    Repository *pSh;
    char szName[20];
    unsigned int szNumber;
    cout<<"请输入您需要出库的商品名(输入0退出,并进入系统菜单):";
    cin.getline(szName,20);
    while(strcmp(szName,"0"))
    {
        Repository sh(szName,0,"0");
        pLook=ShList.Search(sh);
        if (pLook)         //修改时应先查找出结点
        {
            pSh=(Repository *)pLook->GetData();
            cout<<"在库存商品信息记录中找到商品:"<<szName<<",内容是:"<<endl;
            cout<<setw(15)<<"商品名"<<setw(15)<<"商品数量"<<setw(15)<<"入库时间"<<endl;
            pLook->ShowNode();
            if (0==pSh->szNumber)
            {
                cout<<"该商品缺货,请及时补充!"<<endl;
            }
            else
            {
                cout<<"请输入您要取出的商品数量:";
                cin>>szNumber;
                cout<<"请确定是否取出该商品( Yes (Y)  or  No(N)   ):";
                char ok;
                cin>>ok;
                cin.ignore();
                if(ok=='Y'||ok=='y')
                {
                    if(pSh->szNumber<=szNumber)
                    {
                        cout<<szName<<"您要求的商品数量大于仓库中的数量,故全部输出"<<pSh->szNumber<<" 个商品"<<endl;
                        pSh->szNumber=0;
                    }
                    else
                    {        
                        pSh->szNumber-=szNumber;
                        cout<<szName<<"您已取出 "<<szNumber<<" 个商品"<<endl;
                    }
                    cout<<szName<<"成功取出!"<<endl;
                    
                }
                else
                    if(ok=='N'||ok=='n')
                        cout<<szName<<"您取消了该操作"<<endl;
            }
            
        }
        else
            cout<<" 在库存商品信息记录中找不到"<<szName<<","<<endl;
        cout<<"  请输入您需要出库的商品名(输入0退出,并进入系统菜单):";
        cin.getline(szName,20);
    }
}


void Repository::SaveToFile()   //将链表中的数据保存在文件中
{
    ofstream outfile("repository.dat",ios::binary);
    if(! outfile)
    {
        cout<<"数据文件打开错误,没有将数据存入文件!\n";
        return;
    }
    CNode *pnode;
    Repository *pSh;
    string strName,strNumber;
    pnode=ShList.GetListHead();   //取出链表首结点指针
    while(pnode)
    {
        pSh=(Repository *)pnode->GetData();    //返回结点指向的数据域指针
        outfile.write((char *)pSh,sizeof(Repository));  //将数据域写入文件
        pnode=ShList.GetListNextNode(pnode);    // 取下一结点的指针
    }
    outfile.close();
}

void Repository::ReadFromFile()  //在程序开始先查找有无数据文件,找到后读取文件数据
{
    ifstream infile("repository.dat",ios::binary);
    if(! infile)
    {
        cout<<"没有数据文件,请您先添加!\n\n";
        return;
    }
    CNode *pNode;
    Repository *pSh;
    while(! infile.eof())
    {
        pSh=new Repository;   //定义数据域对象
        infile.read((char *)pSh,sizeof(Repository));
        pNode=new CNode;
        pNode->InputData(pSh);   //数据域对象内容生成结点
        ShList.AddNode(pNode);    //将结点加入链表
    }
    ShList.DeleteNode(pNode);    //由于文件多读一次,所以将首结点删除
    infile.close();
}

void Repository::Operate(string &strChoice)   //根据主菜单选项进行操作
{
    if (strChoice=="1")
        AddRecord();
    else if (strChoice=="2")
        Display();
    else if (strChoice=="3")
        LookUpRecord();
    else if (strChoice=="4")
        LookUpRecordF();
    else if (strChoice=="5")
        DeleteRecord();
    else if(strChoice=="6")
        ModifyRecord();
    else if(strChoice=="7")
        Output();
    else if (strChoice=="0")
        SaveToFile();
    else cout<<"对不起,您的输入有误,请重新输入您的选择:  ";
}


void main()
{
    Repository repository;
    cout<<"*******************************************************************\n\n";
    cout<<"                        欢迎进入库存管理系统                    \n\n";
    cout<<"*******************************************************************\n\n";
    repository.ReadFromFile();   //从文件中输入数据
    string strChoice;   //接受主菜单选项
    do
    {
        cout<<"【欢迎进入系统菜单】:\n\n\n";
        cout<<"      <1>.添加新商品信息记录\n\n";
        cout<<"      <2>.显示库存中商品信息记录内容\n\n";
        cout<<"      <3>.根据商品名查询库存中商品信息记录\n\n";
        cout<<"      <4>.根据商品名首字查询库存中商品信息记录\n\n";
        cout<<"      <5>.根据商品名删除库存中商品信息记录\n\n";
        cout<<"      <6>.根据商品名修改库存中商品信息记录\n\n";
        cout<<"      <7>.商品出库\n\n";
        cout<<"      <0>.退出系统\n\n\n";
        cout<<"【请输入您的选择】:";
        cin>>strChoice;
        cin.ignore();
        system("cls");
        repository.Operate(strChoice);
    }while(strChoice!="0");
    cout<<"***********************************************************************\n\n";
    cout<<"        ------------******欢迎再次使用库存管理系统******----------     \n\n";
    cout<<"***********************************************************************\n\n";
    system("pause");
}
搜索更多相关主题的帖子: 流程图 
2010-11-17 09:01
ffffdddssa
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-11-17
收藏
得分:0 
只需要 删除部分 和出库部分的 谢谢各位达人了 只需要有个输入框 和个判断框 就好 感激不尽啊
2010-11-17 09:02
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:20 
流程图很简单的 画出来是不难

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-11-17 10:36
快速回复:泪奔 求助啊 求各位高手 达人 帮花两张流程图
数据加载中...
 
   



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

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