⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gg.cpp

📁 电视机地进销存管理系统
💻 CPP
字号:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct TVInfo
{
 //int ids = 0;//编号  
 //float price = 0.0;//价格
 //int num = 0; //数量
 int ids;//编号  
 float price;//价格
 int num; //数量
 TVInfo* pNext;
};

TVInfo* pHead=NULL;//在这个链表里,为了安全,所有建立的指针初始都设置为空指针。

/**************************函数声明列表******************************/
#if 0
void ShowMainView(void);    //主界面功能显示
void ShowMainSelect(int nSelect);   //主界面功能选择Switch
void ExitSystem();     //退出。
TVInfo* CreatList();     //创建电视机库存系统
void ShowTVList(TVInfo* pHead);   //遍历所有电视机列表
TVInfo* addTVInfo(TVInfo* pHead);   //增加一个新的电视机信息,添加是挂到链表尾,考虑到空链表才返回一个头指针。
void FindTVInfoPrice(TVInfo* pHead);  //按价格查找
void FindTVInfoNum(TVInfo* pHead);   //按数量查找
void FindTVInfoIds(TVInfo* pHead);   //按编号查找
TVInfo* DeleteTVInfo(TVInfo* pHead);  //删除指定编号的电视机资料。
TVInfo* EditTVInfo(TVInfo* pHead);   //修改指定学号的其学生资料。
TVInfo* LoadTVInfo();    //读取。位置是D盘1.txt
void SaveTV(TVInfo* pHead);    //保存到D盘1.txt
void FreeTVInfo(TVInfo* pHead);   //退出时候释放链表
#endif
void ShowMainView(void);    //主界面功能显示
void ShowMainSelect(int nSelect);   //主界面功能选择Switch
void ExitSystem();     //退出。
void CreatList();     //创建电视机库存系统
void ShowTVList( );   //遍历所有电视机列表
void addTVInfo();   //增加一个新的电视机信息,添加是挂到链表尾,考虑到空链表才返回一个头指针。
void FindTVInfoPrice();  //按价格查找
void FindTVInfoNum();   //按数量查找
void FindTVInfoIds();   //按编号查找
void DeleteTVInfo();  //删除指定编号的电视机资料。
void EditTVInfo();   //修改指定学号的其学生资料。
void LoadTVInfo();    //读取。位置是D盘1.txt
void SaveTV();    //保存到D盘1.txt
void FreeTVInfo();   //退出时候释放链表

/*********************************************************************/

/**************************主函数*************************************/
void main(void)
{
 printf("\t\t\t*******************************************\n");
 printf("\t\t\t\t欢迎使用本软件,谢谢!!\n");
 printf("\t\t\t*******************************************\n");
 printf("\n");

 int nSelect = 0;
 while(1)
 {
 ShowMainView();
 printf("请选择:\t");
 scanf("%d",&nSelect);
 ShowMainSelect( nSelect );
 }
 //FreeTVInfo( pHead );//程序结束,释放链表
 FreeTVInfo();//程序结束,释放链表
}
/**************************主界面功能显示**************************************/
void ShowMainView( void )
{
 printf("1.创建电视机库存系统\n");
 printf("2.按编号查找\n");
 printf("3.按价格查找\n");
 printf("4.按数量查找\n");
 printf("5.遍历所有电视机列表\n");
 printf("6.增加电视机信息\n");
 printf("7.删除电视机信息\n");
 printf("8.修改电视机信息\n");
 printf("9.读入\n");
 printf("10.保存\n");
 printf("0.退出\n"); 
 printf("\n\n\n");
}

/**************************主界面功能选择Switch**************************************/
void ShowMainSelect( int nSelect )
{
 switch( nSelect )
 {
#if 0
  case 1:CreatList();     break;//创建电视机库存系统
  case 2:FindTVInfoIds( pHead );   break;//按编号查找
  case 3:FindTVInfoPrice( pHead );   break;//按价格查找
  case 4:FindTVInfoNum( pHead );   break;//按数量查找
  case 5:ShowTVList( pHead );    break;//遍历所有电视机列表
  case 6:addTVInfo( pHead );    break;//增加一台新的电视机信息
  case 7:DeleteTVInfo( pHead );   break;//删除电视机信息
  case 8:EditTVInfo( pHead );    break;//修改电视机信息
  case 9:LoadTVInfo();     break;//从文件读取
  case 10:SaveTV( pHead );    break;//文件保存
  case 0:ExitSystem();     break;//退出
  default:printf("错误!没这个选项.\n\n");
#endif
  case 1:CreatList();     break;//创建电视机库存系统
  case 2:FindTVInfoIds();   break;//按编号查找
  case 3:FindTVInfoPrice();   break;//按价格查找
  case 4:FindTVInfoNum();   break;//按数量查找
  case 5:ShowTVList();    break;//遍历所有电视机列表
  case 6:addTVInfo();    break;//增加一台新的电视机信息
  case 7:DeleteTVInfo();   break;//删除电视机信息
  case 8:EditTVInfo();    break;//修改电视机信息
  case 9:LoadTVInfo();     break;//从文件读取
  case 10:SaveTV();    break;//文件保存
  case 0:ExitSystem();     break;//退出
  default:printf("错误!没这个选项.\n\n");
 }
}

/**************************退出系统*********************************************/
void ExitSystem()
{
 exit(1);
}

/**************************创建链表*********************************************/
//TVInfo* CreatList()
void CreatList()
{ 
 printf("开始创建新的电视机入库信息,退出请输入 '0'.\n");
 int ids = 0;
 float price = 0.0;
 int num = 0;

 TVInfo* pTemp = NULL;
 TVInfo* pJudge = NULL;
 while(1)
 {
  TVInfo* pNewTV = new TVInfo; 
  pJudge = pHead;
  printf("输入电视机的编号:\t");
  scanf("%d",&ids);
  printf("输入电视机的价格:\t");
  scanf("%f",&price);
  printf("输入电视机的数量:\t");
  scanf("%d",&num);
  printf("\n\n");

  while(pJudge != NULL && pJudge->ids != ids)//判断学号是否重复
  {
   pJudge = pJudge->pNext;//指针移动到下个结点
  }
  if(pJudge != NULL && pJudge->ids == ids)//找到相同的的学号
  {
   printf("学号有重复,请重新输入\n");
   delete pNewTV;//释放建立的新结点
  }
  else
  { 
   if(ids < 0 || price < 0.0 || num < 0)
   {
    delete pNewTV;
    printf("请检查,电视机的编号、价格或数量不能为负数\n"); 
   }
   else if(0 == ids || 0.0 == price || 0 == num)
   {
    delete pNewTV;
    printf("创建完毕现在退回主菜单!\n");
    break;//输入为零的时候退出创建
   }
   else
   {
    pNewTV->ids = ids;
    pNewTV->price = price;
    pNewTV->num = num;
    pNewTV->pNext = NULL;
    if(pHead==NULL)//建立头结点
    {
     pHead=pNewTV;
    }
    else
    {
     pTemp = pHead;
     while(pTemp->pNext != NULL)//挂到链表尾巴
     {
      pTemp = pTemp->pNext;
     }
     pTemp->pNext = pNewTV;
    }
   }
  }
 }
 //return pHead;
 return;
}


/**************************遍历并打印链表*********************************************/
//void ShowTVList(TVInfo* pHead)
void ShowTVList()
{
 TVInfo* pTemp = pHead;
 if(pTemp == NULL)
 {
  printf("没有找到电视机信息!\n");
 }
 else
 {
  printf("编号\t价格\t数量\n");
  while(pTemp != NULL)
  {
   printf("\n");
   printf("%d\t%f\t%d\n",pTemp->ids,pTemp->price,pTemp->num);
   pTemp = pTemp->pNext;
  }
 }
}


/**************************添加插入一个新的电视机资料*********************************************/
//TVInfo* addTVInfo(TVInfo* pHead)
void addTVInfo()
{
 int ids = 0;
 float price = 0.0;
 int num = 0;

 TVInfo* pTemp = pHead;

 fflush(stdin);//在这里清空一次键盘缓冲区,老是在这里出毛病

 printf("输入电视机编号:\t");
 scanf("%d",&ids);

 printf("输入电视机价格:\t");
 scanf("%f",&price);
 
 printf("输入电视机数量:\t");
 scanf("%d",&num);
  
 while(pTemp != NULL && pTemp->ids != ids)//判断学号是否重复
 {
  pTemp = pTemp->pNext;//指针移动到下个结点
 }
 if(pTemp != NULL && pTemp->ids == ids)//找到相同的的学号
 {
  printf("学号有重复,请重新输入\n");
  delete pTemp;//释放建立的新结点
 }
 else
 { 
  TVInfo* pNewNode = new TVInfo;

  pNewNode->ids = ids;
  pNewNode->price = price;
  pNewNode->num = num;
  pNewNode->pNext = NULL;

  if(pHead == NULL)
  {
   pHead = pNewNode;
  }
  else
  {
   while(pTemp->pNext != NULL)//找出在最后一个结点
   {
    pTemp = pTemp->pNext;
   }
   pTemp->pNext = pNewNode;
  }
 }
 //return pHead;
 return;
}

/**************************按编号查找*********************************************/
//void FindTVInfoIds(TVInfo* pHead)
void FindTVInfoIds()
{
 
 TVInfo* pTemp = pHead;
 int ids = 0;
 printf("你要查找的电视机的编号是: \t");
 scanf("%d",&ids);
 if(pHead == NULL)
 {
  printf("没有找到电视机的库信息\n");
 }
 else
 {
  for(pTemp = pHead;pTemp != NULL;pTemp = pTemp->pNext)
  {
   if(pTemp->ids == ids)
   {
    printf("你要找的电视机是:\n");
    printf("编号:%d\t,价格:%f\t,数量:%d\n",pTemp->ids,pTemp->price,pTemp->num);
   }
  }
  if(ids == 0)
  {
   printf("没有找到你要查找的信息\n");
  }

 }
}

/**************************按姓价格找*********************************************/
//void FindTVInfoPrice(TVInfo* pHead)
void FindTVInfoPrice()
{
 
 TVInfo* pTemp = pHead;
 float price = 0.0;
 printf("你要查找的电视机的价格是: \t");
 scanf("%f",&price);
 if(pHead == NULL)
 {
  printf("没有找到电视机的库信息\n");
 }
 else
 {
  for(pTemp = pHead;pTemp != NULL;pTemp = pTemp->pNext)
  {
   if(pTemp->price == price)
   {
    printf("你要找的电视机是:\n");
    printf("价格:%f\t,数量:%d\n",pTemp->price,pTemp->num);
   }
  }
  if(price == 0.0)
  {
   printf("没有找到你要查找的信息\n");
  }
 }
}


/**************************按数量查找*********************************************/
//void FindTVInfoNum(TVInfo* pHead)
void FindTVInfoNum()
{
 TVInfo* pTemp = pHead;
 int num = 0;

 printf("你要查找的电视机数量是: \t");
 scanf("%d",&num);
 if(pHead == NULL)
 {
  printf("没有找到电视机的库信息\n");
 }
 else
 {
  for(pTemp = pHead;pTemp != NULL ;pTemp = pTemp->pNext)
  {
   if(pTemp->num == num)
   {
    printf("你要找的电视机是:");
    printf("价格:%f\t,数量:%d\n",pTemp->price,pTemp->num);
   }
  }
  if(num == 0)
  {
   printf("没有找到你要查找的信息\n");
  }

 }  
}

/**************************删除结点*********************************************/
void DeleteTVInfo()
{
 int ids = 0;
 printf("输入你要删除的电视机编号:\n");
 scanf("%d",&ids);
 TVInfo* pTemp = NULL;

 if(pHead == NULL)//空链表时
 {
  printf("不存在电视机库信息\n");
  delete pTemp;
  //return pHead;
  return;
 }
 if(pHead->ids == ids)//存在链表,但是删除的结点为头结点时
 {
  pTemp = pHead;
  pHead = pHead->pNext;
  delete pTemp;
  printf("删除成功\n");
  //return pHead;
  return;
 }

 //需要删除的结点不是以上俩情况时,就进入下面的FOR循环来进行链表的遍历
 for(TVInfo* pGuard = pHead;pGuard->pNext != NULL;pGuard = pGuard->pNext)         //遍历整个链表
 {
  if(pGuard->pNext->ids == ids)//通过前个结点来删除
  {
   pTemp = pGuard->pNext;
   pGuard->pNext = pTemp->pNext;
   delete pTemp;
   printf("删除成功\n");
   //return pHead;
   return;
  }
 }
 //return pHead;
 return;
}


/**************************修改结点*********************************************/
//TVInfo* EditTVInfo(TVInfo* pHead)//在这里为了熟练专门用了FOR循环来做
void EditTVInfo()//在这里为了熟练专门用了FOR循环来做
{
 TVInfo* pTemp = pHead;
 int ids = 0;
 float price = 0.0;
 int num = 0;

 printf("请输入你要修改电视机的编号:\t");
 scanf("%d",&ids);
 if(pHead == NULL)
 {
  printf("没有找到电视机的库信息!\n");
  //return pHead;
  return;
 }
 else
 {
  for(pTemp = pHead;pTemp->pNext != NULL;pTemp = pTemp->pNext)//寻找电视机资料,且找的不是最后一个
  {
   if(pTemp->ids == ids)
   {
    printf("你要修改的电视机信息是:");
    printf("%d\t%f\t%d\n",pTemp->ids,pTemp->price,pTemp->num);

    printf("输入新编号:");
    scanf("%d",&ids);
    printf("输入新价格:");
    scanf("%f",&price);
    printf("输入新数量");
    scanf("%d",&num);

    pTemp->ids = ids;
    pTemp->price = price;
    pTemp->num = num;

    printf("你修改的内容为:\n");
    printf("%d\t%f\t%d\n",pTemp->ids,pTemp->price,pTemp->num);
    //return pHead;
    return;
   }
  }
  if(pTemp->ids == ids)//看最后一个结点是否符合按学号查找的结点
   {
    printf("你要修改的电视机的资料是:");
    printf("编号:%d\t,价格:%f,数量:%d\n",pTemp->ids,pTemp->price,pTemp->num);

    printf("输入新编号:");
    scanf("%d",&ids);
    printf("输入新价格");
    scanf("%f",&price);
    printf("输入新数量");
    scanf("%d",&num);

    pTemp->ids = ids;
    pTemp->price = price;
    pTemp->num = num;

    printf("你修改的内容为:\n");
    printf("%d\t%f\t%d\n",pTemp->ids,pTemp->price,pTemp->num);
    //return pHead;
    return;
   }
  else
  {
   printf("你所输入的信息不存在!\n");
   //return pHead;
   return;
  } 
 }
}

/**************************从D盘1.txt文本文件中读取数据到链表******************************/
//TVInfo* LoadTVInfo()
void LoadTVInfo()
{
 FILE* fp = fopen("d:\\save.txt","r");

 if(fp == NULL)
 {
  printf("Can't open the file!\n");
 }

 else
 {
  int ids;
  float price = 0.0;
  int num = 0;  
 
  while(1)
  {
   TVInfo* pTemp = new TVInfo;
   int nRes = fscanf(fp,"%d%f%d",&ids,&price,&num);
   if(nRes == -1)
   {
    break;
   }
   pTemp->ids = ids;
         pTemp->price = price;
         pTemp->num = num;
   
   pTemp->pNext = NULL;
   if(pHead == NULL)
   {
    pHead = pTemp;
   }
   else
   {
     TVInfo* pFront = pHead;
     while(pFront->pNext != NULL)
     {
      pFront = pFront->pNext;
     }
     pFront->pNext = pTemp;
   }          
 
  }
  fclose(fp);
  
 }
 //return pHead;
 return;
}

/**************************保存到D盘1.txt文本文件中去******************************************/
//void SaveTV(TVInfo* pHead)
void SaveTV()
{
 FILE* fp = fopen("d:\\save.txt","w");
 TVInfo* pTemp = pHead;
 if(fp == NULL)
 {
  printf("Can't open the file!\n");
  exit(1);
 }
 else
 {
  while(pTemp != NULL)
  {
   fprintf(fp,"\t%d\t",pTemp->ids);
   fprintf(fp,"%f\t",pTemp->price);
   fprintf(fp,"%d\n",pTemp->num);
   pTemp = pTemp->pNext;
  }
  fclose(fp);
 }
}

/**************************退出时候释放链表******************************************/
//void FreeTVInfo(TVInfo* pHead)
void FreeTVInfo()
{
 TVInfo* pTemp = NULL;
 while(NULL != pHead)
 {
  pTemp = pHead;
  pHead = pHead->pNext;
  delete pTemp;
 }
 pTemp = NULL;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -