📄 manage.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 + -