|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
|
|
//定义商品类型
|
|
|
|
|
typedef struct goods{
|
|
|
|
|
int id;
|
|
|
|
|
char name[20];
|
|
|
|
|
int classification;
|
|
|
|
|
float price;
|
|
|
|
|
struct goods *next;
|
|
|
|
|
}Goods;
|
|
|
|
|
|
|
|
|
|
//创建带头结点的商品信息单链表
|
|
|
|
|
Goods *createList(){
|
|
|
|
|
Goods *head = (Goods*)malloc(sizeof(Goods));
|
|
|
|
|
head->next = NULL;
|
|
|
|
|
return head;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//输入一个商品
|
|
|
|
|
void inputWorker(Goods *goods){
|
|
|
|
|
printf("请输入商品代码:");
|
|
|
|
|
scanf("%d",&goods->id);
|
|
|
|
|
printf("请输入名称:");
|
|
|
|
|
scanf("%s",goods->name);
|
|
|
|
|
printf("请输入分类:");
|
|
|
|
|
scanf("%d",&goods->classification);
|
|
|
|
|
printf("请输入单价:");
|
|
|
|
|
scanf("%f",&goods->price);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//显示所有商品
|
|
|
|
|
void displayAll(Goods *head){
|
|
|
|
|
if(head->next == NULL){
|
|
|
|
|
printf("列表为空!\n");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
Goods *p = head->next;
|
|
|
|
|
printf("商品代码\t名称\t分类\t单价\n");
|
|
|
|
|
while(p != NULL){
|
|
|
|
|
printf("%d\t %s\t %d\t%.2f\n",p->id,p->name,p->classification,p->price);
|
|
|
|
|
p = p->next;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//按照商品代码、商品名称和商品单价对所有商品进行递增排序
|
|
|
|
|
void sort(Goods *head){
|
|
|
|
|
Goods *p,*q,*tail;
|
|
|
|
|
tail = NULL;
|
|
|
|
|
while(head->next != tail){
|
|
|
|
|
p = head;
|
|
|
|
|
q = p->next;
|
|
|
|
|
while(q->next != tail){
|
|
|
|
|
if(q->id > q->next->id){
|
|
|
|
|
p->next = q->next;
|
|
|
|
|
q->next = q->next->next;
|
|
|
|
|
p->next->next = q;
|
|
|
|
|
q = p->next;
|
|
|
|
|
}
|
|
|
|
|
p = p->next;
|
|
|
|
|
q = q->next;
|
|
|
|
|
}
|
|
|
|
|
tail = q;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//删除指定商品代码的记录
|
|
|
|
|
void deleteWorker(Goods *head,int id){
|
|
|
|
|
Goods *p = head->next, *pre = head;
|
|
|
|
|
while(p != NULL){
|
|
|
|
|
if(p->id == id){
|
|
|
|
|
pre->next = p->next;
|
|
|
|
|
free(p);
|
|
|
|
|
printf("删除成功!\n");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
pre = p;
|
|
|
|
|
p = p->next;
|
|
|
|
|
}
|
|
|
|
|
printf("未找到该商品代码!\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//查找指定商品代码的记录
|
|
|
|
|
void searchWorker(Goods *head,int id){
|
|
|
|
|
Goods *p = head->next;
|
|
|
|
|
while(p != NULL){
|
|
|
|
|
if(p->id == id){
|
|
|
|
|
printf("商品代码\t名称\t分类\t单价\n");
|
|
|
|
|
printf("%d\t %s\t %d\t%.2f\n",p->id,p->name,p->classification,p->price);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
p = p->next;
|
|
|
|
|
}
|
|
|
|
|
printf("未找到该商品代码!\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//统计指定商品分类的商品数
|
|
|
|
|
void countWorker(Goods *head,int classification){
|
|
|
|
|
int count = 0;
|
|
|
|
|
Goods *p = head->next;
|
|
|
|
|
while(p != NULL){
|
|
|
|
|
if(p->classification == classification){
|
|
|
|
|
count++;
|
|
|
|
|
}
|
|
|
|
|
p = p->next;
|
|
|
|
|
}
|
|
|
|
|
printf("分类%d共有%d种商品\n",classification,count);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int main(){
|
|
|
|
|
Goods *head = createList();
|
|
|
|
|
int choice = 0, id, classification;
|
|
|
|
|
while(1){
|
|
|
|
|
printf("分类:1:服装 2.数码产品 3.护肤产品 4.食品 5.图书\n");
|
|
|
|
|
printf("******************\n");
|
|
|
|
|
printf("1.输入一个商品\n");
|
|
|
|
|
printf("2.显示所有商品\n");
|
|
|
|
|
printf("3.递增排序\n");
|
|
|
|
|
printf("4.删除指定商品代码的商品\n");
|
|
|
|
|
printf("5.查找指定商品代码的商品\n");
|
|
|
|
|
printf("6.统计指定分类的商品数量\n");
|
|
|
|
|
printf("0.退出系统\n");
|
|
|
|
|
printf("******************\n");
|
|
|
|
|
printf("请选择:");
|
|
|
|
|
scanf("%d",&choice);
|
|
|
|
|
switch(choice){
|
|
|
|
|
case 0:
|
|
|
|
|
printf("感谢使用!\n");
|
|
|
|
|
return 0;
|
|
|
|
|
case 1:
|
|
|
|
|
{
|
|
|
|
|
Goods *goods = (Goods*)malloc(sizeof(Goods));
|
|
|
|
|
inputWorker(goods);
|
|
|
|
|
goods->next = head->next;
|
|
|
|
|
head->next = goods;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 2:
|
|
|
|
|
displayAll(head);
|
|
|
|
|
break;
|
|
|
|
|
case 3:
|
|
|
|
|
sort(head);
|
|
|
|
|
printf("排序完成!\n");
|
|
|
|
|
break;
|
|
|
|
|
case 4:
|
|
|
|
|
printf("请输入要删除的商品代码:");
|
|
|
|
|
scanf("%d",&id);
|
|
|
|
|
deleteWorker(head,id);
|
|
|
|
|
break;
|
|
|
|
|
case 5:
|
|
|
|
|
printf("请输入要查找的商品代码:");
|
|
|
|
|
scanf("%d",&id);
|
|
|
|
|
searchWorker(head,id);
|
|
|
|
|
break;
|
|
|
|
|
case 6:
|
|
|
|
|
printf("请输入要统计的分类:");
|
|
|
|
|
scanf("%d",&classification);
|
|
|
|
|
countWorker(head,classification);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
printf("输入有误,请重新输入!\n");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|