You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

168 lines
3.8 KiB

#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;
}