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

📄 manage.cpp

📁 //商品管理源程序 //题目要求:输入商品号及各项数据
💻 CPP
字号:
//商品管理源程序
//题目要求:输入商品号及各项数据,以一定的方式存于计算机中;按各种条件进行查询、统计、排序及打印等操作。

#define NULL 0
#define LEN sizeof(struct goods)

#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h> //字符操作函数
#define M 100  //定义货物记录数

typedef struct
{
    int num;
    char name[10];
    int price;
}goods;

//以下是函数原型
int enter(goods t[]); //输入货物记录
void list(goods t[],int n); //显示货物记录
void search(goods t[],int n); //按姓名查找显示货物记录
int del(goods t[],int n); //删除货物记录
int  add(goods t[],int n); //插入货物记录
void print(goods temp); //显示单条货物记录
int find(goods t[],int n,char *s) ; //查找函数
void display(goods t[],int n); //按编号查找显示货物记录
void sort(goods t[],int n); //按姓名排序
void total(goods t[],int n);  //统计价格

int menu_select();  //主菜单函数

main()//主函数
{
   int i;
   goods s[M];  //定义结构体数组
   int length=0;  //保存货物记录长度
   for(;;)//无限循环
   {
      switch(menu_select())   //调用主菜单函数,返回值整数作开关语句的条件
      {
     case 1:length=enter(s);break;//输入货物记录
     case 2:list(s,length);break; //显示全部货物记录
     case 3:search(s,length);break; //查找货物记录
     case 4:length=del(s,length);break; //删除货物记录
     case 5:length=add(s,length);  break;   //插入货物记录
     case 6:display(s,length);break;  //按编号显示货物记录
     case 7:sort(s,length);break; //按姓名排序
     case 8:total(s,length);break;//求合计
     case 0:exit(0); //如返回值为11则程序结束
      }
   }
}

menu_select()//菜单函数,函数返回值为整数,代表所选的菜单项
{
   char a[80];
   int c;
   cout<<"按任意键开始......"<<endl;
   getch(); //读入任意字符
   cout<<"********************菜单*********************\n"<<endl;
   cout<<"     1. 输入货物清单 "<<endl;
   cout<<"     2. 列出货物清单"<<endl;
   cout<<"     3. 通过名字查找货物"<<endl;
   cout<<"     4. 删除货物记录"<<endl;
   cout<<"     5. 增加货物至清单 "<<endl;
   cout<<"     6. 按编号查找显示货物"<<endl;
   cout<<"     7. 按货物名称排序"<<endl;
   cout<<"     8. 货物总价  "<<endl;
   cout<<"     0. 退出"<<endl;
   cout<<"***********************************************"<<endl;
   do{
      cout<<endl<<"请选择(0-8):";
      cin>>a;
      c=atoi(a); //将输入的字符串转化为整型数
   }while(c<0||c>8); //选择项不在0~8之间重输
   return c;
}
//输入货物记录,形参为结构体数组,函数值返回类型为整型表示货物记录长度
int  enter(goods t[])
{
   int i,n;
   char *a;
   cout<<"\n输入货物的数量 "<<endl;
   cin>>n;
   cout<<"依次输入货物名称和价格 "<<endl;
   cout<<"货物                                    价格"<<endl;
   cout<<"------------------------------------------------"<<endl;
   for(i=0;i<n;i++)
   {
      scanf("%s  %d",t[i].name,&t[i]. price);
      t[i].num=i;
      cout<<"----------------------------------------------"<<endl;
   }
   return n;  //返回货物记录条数
}

void list(goods t[],int n)//显示货物记录,参数为货物记录数组和货物记录条数
{
   int i;
   cout<<"\n\n*******************菜单***********************"<<endl;
   cout<<"货物               编号                     价格"<<endl;
   cout<<"------------------------------------------------"<<endl;
   for(i=0;i<n;i++)
   printf("%-20s%-25d%-10d\n",t[i].name,t[i].num,t[i].price);
   if((i+1)%10==0)   //判断输出是否达到10条货物记录
   {
      cout<<"按任意键继续..."<<endl; //提示信息
      getch();  //任意键继续
   }
   else{
   cout<<"********************结束**************************"<<endl;
        }
}

void search(goods t[],int n)//查找货物记录
{
   char a[20];   //保存待查找姓名字符串
   int i;   //保存查找到结点的编号
   cout<<"输入要查找的货物名"<<endl;
   cin>>a;
   i=find(t,n,a); //调用find函数,得到一个整数
   if(i>n-1)
      cout<<"没有找到"<<endl;
   else
      print(t[i]);  //找到,调用函数打印货物记录
}

void print(goods temp)//显示指定的一条货物记录
{
   cout<<"\n\n********************************************"<<endl;
   cout<<"货物               编号                     价格"<<endl;
   cout<<"------------------------------------------------"<<endl;
   printf("%-20s %-25d %-10d\n",temp.name,temp.num,temp.price);
   cout<<"**********************结束***********************"<<endl;
}

 
int find(goods t[],int n,char *a)//查找函数,参数为货物记录数组和货物记录条数以及姓名s
{
   int i;
   for(i=0;i<n;i++)//从第一条货物记录开始,直到最后一条
   {
      if(strcmp(a,t[i].name)==0)  //货物记录中的姓名和待比较的姓名是否相等
      return i;   //相等,则返回该货物记录的下标号,程序提前结结束
   }
   return i;  //返回i值
}


int del(goods t[],int n)//删除函数,参数为货物记录数组和货物记录条数
{
   char a[20];  //要删除货物记录的姓名
   int ch=0;
   int i,j;
   cout<<"输入要删除的货物名: "; 
   cin>>a;
   i=find(t,n,a); //调用find函数
   if(i>n-1)  //如果i>n-1超过了数组的长度
      cout<<"没找到要删除的货物记录"<<endl; 
   else
   {
      print(t[i]); //调用输出函数显示该条货物记录信息
      cout<<"请确认是否要删除(1-yes 0-cancel)"<<endl;
      cin>>ch;  //输入一个整数0或1
      if(ch==1)  //如果确认删除整数为1
      {
     for(j=i+1;j<n;j++)  //删除该货物记录,实际后续货物记录前移
     {
        strcpy(t[j-1].name,t[j].name); 
		t[j-1].num=t[j].num;            
        t[j-1].price=t[j]. price; 
     }
     n--;  //货物记录数减1
      }
   }
   return n;  //返回货物记录数
}

int add(goods t[],int n)//插入函数,参数为结构体数组和货物记录数
{
   goods temp;  //新插入货物记录信息
   int i,j;
   cout<<"输入要增加的货物信息"<<endl;
   cout<<"************************************************"<<endl;
   cout<<"name                                    price"<<endl;
   cout<<"------------------------------------------------"<<endl;
   scanf("%s  %d",temp.name,&temp.price); //输入插入信息
   cout<<"------------------------------------------------"<<endl;
   t[n].price=temp.price;
   strcpy(t[n].name,temp.name);
   t[n].num=n;
   n++;   //货物记录数加1
   return n; //返回货物记录数
}


void display(goods t[],int n)//按编号查询显示函数
{
   int id;
   cout<<"输入要查询的货物编号..."<<endl; //显示信息
   cin>>id;  //输入编号
   if(id>=0&&id<n) //判断编号是否在货物记录范围内
   {
      print(t[id]); //调用输出函数显示该货物记录
      cout<<"\r"<<endl;
   }
   else
      cout<<"没有编号为"<<id<<"的货物!!!"<<endl; //如果编号不合理显示信息
}

void sort(goods t[],int n)//排序函数,参数为结构体数组和货物记录数
{
   int i,j,flag;
   goods temp; //临时变量做交换数据用*
   for(i=0;i<n;i++)
   {
      flag=0;  //设标志判断是否发生过交换
      for(j=0;j<n-1;j++)
      if((strcmp(t[j].name,t[j+1].name))>0) //比较大小
      {
     flag=1;
     strcpy(temp.name,t[j].name);  //交换货物记录
	 temp.num=t[j].num;
	 temp.price=t[j].price;
     strcpy(t[j].name,t[j+1].name);
	 t[j].num=t[j+1].num;
	 t[j].price=t[j+1].price;
     strcpy(t[j+1].name,temp.name);
	 t[j+1].num=temp.num;
	 t[j+1].price=temp.price;
      }
      if(flag==0)break;  //如果标志为0,说明没有发生过交换循环结束
   }
   cout<<"排序成功!!!"<<endl; 
}

void total(goods t[],int n)//合计
{
int i,sum=0,temp;
while(1)
{
    cout<<"请依次输入货物编号(按-1结束))..."<<endl;
    cin>>temp;  //输入所选商品编号
    if(temp>=0&&temp<=n) //判断编号是否在货物记录范围内
    sum+=t[temp].price;
    else{
        if(temp==-1) break;
        cout<<"没有编号为"<<temp<<" 的货物!!!"<<endl; //编号不合理显示信息
    }
  }
 cout<<"货物总价是"<<sum<<endl;
}

⌨️ 快捷键说明

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