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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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