?? 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 + -