C-商品管理系统

C-商品管理系统

VS2017

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <conio.h>
#pragma warning(disable:4996)

#define PRT printf("编号      名称      数量      价格\n");
#define PRT1 printf("%d%14s%8d%11.2lf\n", pp->id, pp->S_name, pp->S_num, pp->S_price);

typedef struct Commodity
{
    int id; //编号
    char S_name[10]; //商品名称
    int S_num; //商品数量
    double S_price; //商品价格
    struct Commodity *next;
}comm;

comm *S_mphead = NULL; //头节点
int S_num = 0; //记录数量
void S_list(comm **p); //创建链表
void S_destroy(comm **p); //销毁链表
void S_main(void); //入口
void S_creat(comm *p); //录入记录
void S_search(comm *p); //查找记录
void S_delete(comm *p); //删除记录
void S_mod(comm *p); //修改记录
void S_insert(comm *p); //插入记录
void S_sort(comm *p); //排序记录
void S_stat(comm *p); //统计记录


int main(void)
{
    S_list(&S_mphead);
    S_main();
    system("pause");
    return 0;
}

//入口
void S_main(void)
{
    int i;
    char S_key1;
    int S_key;
    for (i = 0; i < 20; i++)
    {
        printf("-");
    }
    printf("商品管理系统");
    for (i = 0; i < 20; i++)
    {
        printf("-");
    }
    printf("\n");
    printf("|                                                  |\n");
    printf("|                                                  |\n");
    printf("|                    1> 录入记录                   |\n\n");
    printf("|                    2> 查找记录                   |\n\n");
    printf("|                    3> 删除记录                   |\n\n");
    printf("|                    4> 修改记录                   |\n\n");
    printf("|                    5> 插入记录                   |\n\n");
    printf("|                    6> 排序记录                   |\n\n");
    printf("|                    7> 统计记录                   |\n\n");
    printf("|                    0> 退出                       |\n");
    printf("|                                                  |\n");
    printf("|                                                  |\n");
    for (i = 0; i < 52; i++)
    {
        printf("-");
    }
    printf("\n");
    printf("选择0-7:");
    scanf("%d", &S_key);
    getchar();
    switch (S_key)
    {
    case 1:
        S_creat(S_mphead);
        break;
    case 2:
        S_search(S_mphead);
        break;
    case 3:
        S_delete(S_mphead);
        break;
    case 4:
        S_mod(S_mphead);
        break;
    case 5:
        S_insert(S_mphead);
        break;
    case 6:
        S_sort(S_mphead);
        break;
    case 7:
        S_stat(S_mphead);
        break;
    case 0:
        printf("是否退出(Y/N):");
        S_key1 = getch();
        if (S_key1 == 'y' || S_key1 == 'Y')
        {
            S_destroy(&S_mphead);
            exit(1);
        }
        else if (S_key1 == 'n' || S_key1 == 'N')
        {
            system("cls");
            S_main();
        }
        else
        {
            printf("输入有误!按任意键重新输入!");
            getch();
            system("cls");
            S_main();
        }
        break;
    default:
        printf("输入有误,按任意键重新输入!");
        getch();
        system("cls");
        S_main();
    }
}

//创建链表
void S_list(comm **p)
{
    *p = (comm *)malloc(sizeof(comm));
    if ((*p) == NULL)
    {
        printf("链表创建失败!\n");
        getchar();
        exit(1);
    }
    (*p)->next = NULL;
}

//销毁链表
void S_destroy(comm **p)
{
    comm *S_ptemp = NULL;
    while ((*p)->next != NULL)
    {
        S_ptemp = (*p)->next;
        (*p)->next = S_ptemp->next;
        free(S_ptemp);
        S_ptemp = NULL;
    }
    (*p) = NULL;
}
//录入记录
void S_creat(comm *p)
{
    comm *phead = p;
    comm *pp = NULL;
    char S_key;
    while (phead->next != NULL)
    {
        phead = phead->next;
    }
    pp = (comm *)malloc(sizeof(comm));
    printf("请输入编号:\n");
    scanf("%d", &pp->id);
    getchar();
    printf("请输入名称:\n");
    scanf("%s", pp->S_name);
    getchar();
    printf("请输入数量:\n");
    scanf("%d", &pp->S_num);
    getchar();
    printf("请输入单价:\n");
    scanf("%lf", &pp->S_price);
    getchar();
    pp->next = NULL;
    phead->next = pp;
    phead = pp;
    S_num++;
    printf("录入成功!继续录入(Y/N):");
rst:
    S_key = getch();
    printf("\n");
    if (S_key == 'y' || S_key == 'Y')
    {
        S_creat(S_mphead);
    }
    else if (S_key == 'n' || S_key == 'N')
    {
        system("cls");
        S_main();
    }
    else
    {
        printf("输入有误!按任意键重新输入!");
        getch();
        goto rst;
    }
}

//查找记录
void S_search(comm *p)
{
    comm *pp = p->next;
    int S_id;
    printf("请输入编号:");
    scanf("%d", &S_id);
    getchar();
    while (pp != NULL)
    {
        if (pp->id == S_id)
        {
            PRT;
            PRT1;
            printf("\n请按任意键返回主菜单!");
            getch();
            system("cls");
            S_main();
        }
        pp = pp->next;
    }
    printf("没有找到记录!按任意键返回主菜单!");
    getch();
    system("cls");
    S_main();
}

//删除记录
void S_delete(comm *p)
{
    comm *pp = p;
    comm *ptemp = NULL;
    char S_key;
    int S_id;
    printf("请输入编号:");
    scanf("%d", &S_id);
    getchar();
    while (pp->next != NULL)
    {
        if (pp->next->id == S_id)
        {
            PRT;
            printf("%d%14s%8d%11.2lf\n", pp->next->id, pp->next->S_name, pp->next->S_num, pp->next->S_price);
            printf("是否删除(Y/N):");
            rst:
            S_key = getch();
            if (S_key == 'y' || S_key == 'Y')
            {
                ptemp = pp->next;
                pp->next = ptemp->next;
                free(ptemp);
                ptemp = NULL;
                printf("删除成功!请按任意键返回主菜单!");
                getch();
                system("cls");
                S_main();
            }
            else if (S_key == 'n' || S_key == 'N')
            {
                printf("请按任意键返回主菜单!");
                getch();
                system("cls");
                S_main();
            }
            else
            {
                printf("输入有误!按任意键重新输入!");
                getch();
                goto rst;
            }
        }
        else
        {
            pp = pp->next;
        }
    }
    printf("没有要删除的记录!请按任意键返回主菜单!");
    getch();
    system("cls");
    S_main();
}

//修改记录
void S_mod(comm *p)
{
    comm *pp = p->next;
    int S_id;
    printf("请输入编号:");
    scanf("%d", &S_id);
    getchar();
    while (NULL != pp)
    {
        if (pp->id == S_id)
        {
            printf("请输入名称:\n");
            scanf("%s", pp->S_name);
            getchar();
            printf("请输入数量:\n");
            scanf("%d", &pp->S_num);
            getchar();
            printf("请输入单价:\n");
            scanf("%lf", &pp->S_price);
            getchar();
            printf("修改成功!按任意键返回主菜单!");
            getch();
            system("cls");
            S_main();
        }
        pp = pp->next;
    }
    printf("没有可修改的信息!按任意键返回主菜单!");
    getch();
    system("cls");
    S_main();
}

//插入记录
void S_insert(comm *p)
{
    comm *p1 = p->next;
    comm *pp = NULL;
    int S_id;
    printf("请输入插入位置编号:");
    scanf("%d", &S_id);
    getchar();
    while (NULL != p1)
    {
        if (p1->id == S_id)
        {
            pp = (comm *)malloc(sizeof(comm));
            printf("请输入编号:\n");
            scanf("%d", &pp->id);
            getchar();
            printf("请输入名称:\n");
            scanf("%s", pp->S_name);
            getchar();
            printf("请输入数量:\n");
            scanf("%d", &pp->S_num);
            getchar();
            printf("请输入单价:\n");
            scanf("%lf", &pp->S_price);
            getchar();
            pp->next = p1->next;
            p1->next = pp;
            printf("插入成功!按任意键返回主菜单!");
            getch();
            system("cls");
            S_main();
        }
        p1 = p1->next;
    }
    printf("没有此位置编号!按任意键返回主菜单!");
    getch();
    system("cls");
    S_main();
}

//排序记录
void S_sort(comm *p)
{
    comm *pp = p->next;
    comm *p1 = NULL;
    comm *ptemp = NULL;
    ptemp = (comm *)malloc(sizeof(comm));
    while (NULL != pp)
    {
        p1 = pp->next;
        while (NULL != p1)
        {
            if (pp->S_price < p1->S_price)
            {
                ptemp->id = p1->id;
                strcmp(ptemp->S_name, p1->S_name);
                ptemp->S_num = p1->S_num;
                ptemp->S_price = p1->S_price;
                p1->id = pp->id;
                strcmp(p1->S_name, pp->S_name);
                p1->S_num = pp->S_num;
                p1->S_price = pp->S_price;
                pp->id = ptemp->id;
                strcmp(pp->S_name, ptemp->S_name);
                pp->S_num = ptemp->S_num;
                pp->S_price = ptemp->S_price;
            }
            p1 = p1->next;
        }
        pp = pp->next;
    }
    free(ptemp);
    ptemp = NULL;
    printf("排序完毕!按任意键返回主菜单!");
    getch();
    system("cls");
    S_main();
}

//统计记录
void S_stat(comm *p)
{
    comm *pp = p->next;
    PRT;
    while (pp != NULL)
    {
        PRT1;
        pp = pp->next;
    }
    printf("总共%d条记录!\n", S_num);
    printf("按任意键返回主菜单!");
    getch();
    system("cls");
    S_main();
}

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

完美教父

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值