商品管理系统

原代码地址:https://blog.csdn.net/qq_43345204/article/details/93250900?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167774020516800186561889%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167774020516800186561889&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-5-93250900-null-null.142^v73^insert_down1

原系统分析

主要功能

       原系统主要通过创建商品的结构体,对结构体数组进行操作完成商品信息的录入,查询和显示功能。

1.结构体信息

 

复制代码
struct goods{
    int code;
    char name[name_max_length];
    int num;   //总量
    double price;
    int sold_num;
    int remain_num;
    double total;
};
复制代码

 

2.菜单界面

 

 

复制代码
//显示菜单函数
void showMenu()
{
    cout<<"******************************"<<endl;
    cout<<"请输入1—6内的数字"<<endl;
    cout<<"1  按照库存量升序排序"<<endl;
    cout<<"2  按照商品名称降序排序"<<endl;
    cout<<"3  查找指定代码的商品信息"<<endl;
    cout<<"4  计算销售总额"<<endl;
    cout<<"5  输出商品的信息"<<endl;
    cout<<"6  结束"<<endl;
    cout<<"******************************"<<endl;
}
复制代码

3.主函数部分,主要完成对商品信息的录入

 

 

复制代码
int main(int argc, const char * argv[]) {
    
    goods g[type_total_max] = {0};
    int type_total;
    cout<<"请输入商品种类总数"<<endl;
    cin>>type_total;
    
    //输入信息和计算库存量、销售额的部分
    for (int i = 0; i<type_total; i++) {
        //提示输入
        cout<<"请依次输入商品代码、名称、总量、单价、销售量"<<endl;
        cin>>g[i].code;
        scanf("%s",g[i].name);  //暂时还不能输入有空格的字符串
        cin>>g[i].price>>g[i].num>>g[i].sold_num;
    }
    
复制代码

4.商品信息的打印输出部分

 

 

复制代码
void output(goods g[],int type_total){
    cout<<"      代码               名称         单价       总量       销售量    库存量    销售额"<<endl;
    for (int i = 0; i<type_total; i++) {
        cout<<setw(10)<<g[i].code;
        printf("%20s",g[i].name);
        cout<<setw(10)<<g[i].price<<setw(10)<<g[i].num<<setw(10)<<g[i].sold_num<<setw(10)<<g[i].remain_num<<setw(10)<<g[i].total<<endl;
        
    }
}

//排序函数1
void sort1(goods g[],int type_total){
int i,j,pos;
goods temgoods;
for(i = 0; i < type_total-1; i++)
{
pos = i;
for(j = i; j < type_total; j++)
{
if(g[pos].remain_num > g[j].remain_num){
pos = j;
}else if(g[pos].remain_num == g[j].remain_num){
if(g[pos].sold_num > g[i].sold_num){
pos = j;
}
}
}
if(pos != i)
{
temgoods = g[i];
g[i] = g[pos];
g[pos] = temgoods;
}
}
}


//排序函数2
void sort2(goods g[],int type_total){
int i,j,pos;
goods temgoods;
for(i = 0; i < type_total-1; i++)
{
pos = i;
for(j = i; j < type_total; j++)
{
if(strcmp(g[pos].name,g[j].name) < 0)
pos = j;
}
if(pos != i)
{
temgoods = g[i];
g[i] = g[pos];
g[pos] = temgoods;
}
}
}

 
复制代码

5.销售总额的计算

int total(goods g[],int type_total){
    int sum = 0;
    for (int i = 0; i<type_total; i++) {
        sum+=g[i].total;
    }
    return sum;
}

 

 

 

 改进后系统分析

1.开发环境

系统:win11

IDE: Dev c++

2.主要功能

改进后采用了链表的形式来完成操作,并且通过文件的读写来存储数据,主要增加的功能有增加商品信息,删除商品信息和修改商品信息。主要功能有增加商品信息,删除商品信息,修改商品信息,查询商品信息,输出商品信息和退出系统。

3.主菜单界面

 

 

复制代码
复制代码
void welcome(){
    system("cls");
    printf("**********************\n");
    printf("*****商品管理系统*****\n");
    printf("***增加商品信息——1**\n");
    printf("***删除商品信息——2**\n");
    printf("***修改商品信息——3**\n");
    printf("***查询商品信息——4**\n");
    printf("***输出商品信息——5**\n");
    printf("***退出该系统--——6**\n");
    printf("请输入对应功能键(数字):"); 
}
复制代码
复制代码

4.主函数功能

输入数字,通过switch进入各分支功能模块,然后调用相应的函数实现各个功能。

复制代码
复制代码
int main()
{
    int choice=0;
    readFile(&List);
    //scanf("%d",&choice);
    while(1){
        welcome();
    scanf("%d",&choice);
    switch(choice){
        case 1://增加商品信息 
        addGoods();
        break;
        case 2://删除商品信息 
        printfDeletGoods(&List);
        break;
        case 3://修改商品信息 
        printfFixGoods(&List);
        break;
        case 4://查询商品信息 
        printfSearchGoods(&List);
        break;
        case 5://输出商品信息 
        printfGoods(&List);
        break;
        case 6://退出 
        goodbye();
        break; 
    }
    printf("是否继续操作?(yes/no)(1/0):");
    scanf("%d",&choice);
     if(choice==0)
     {
         break;
     }
    }
    
    return 0;
}
复制代码
复制代码

5.结构体的定义

复制代码
复制代码
typedef struct Node{
    int code;//商品代码 
    char name[50];//商品名称 
    int  price;//价格 
    int sold_num;//销售量 
    int remain_num;//库存量 
    int total;//销售额 
    struct Node *next;
}node;
复制代码
复制代码

6.系统涉及函数的声明部分

复制代码
复制代码
//主菜单界面 
void welcome();
//增加商品信息 
void addGoods();
//删除商品信息 
void printfDeletGoods(node *L);
//修改商品信息 
void printfFixGoods(node *L);
//查找商品信息 
void printfSearchGoods(node *L);
//打印商品信息 
void printfGoods(node *L);
//退出系统 
void goodbye();
//读取文件
int readFile(node *L);
//保存文件 
int saveFile(node *L);
//表节点的插入 
void insertGoodsInfo(node *L,node e); 
//按代码查找商品 
node* searchGoodsInfoById(int id,node *L);
//按商品名查找
node* searchGoodsInfoByName(char name[50],node *L); 
//节点的删除 
void deletGoodsInfo(node *L);
复制代码
复制代码

7.文件数据的读写

复制代码
复制代码
int readFile(Node *L){
    FILE *fpr=fopen("Goods.txt","r");
    node st;
    node *s;
    node *t=L;
    if(fpr==NULL){
        return 0;
    }else{
        while(fscanf(fpr,"%d %s %d %d %d %d",&st.code,st.name,&st.price,&st.sold_num,&st.remain_num,&st.total)!=EOF){
        //printf("%d %s %d %d %d %d\n",st.code,st.name,st.price,st.sold_num,st.remain_num,st.total);
        s=(node *)malloc(sizeof(node));
        *s=st;
        t->next=s;
        t=s;
        t->next=NULL;
        }
    }
    fclose(fpr);
    return 1;
}
int saveFile(node *L){
    FILE *fpw=fopen("Goods.txt","w");
    if(fpw==NULL) return 0;
    node *p=L->next;
    while(p!=NULL){
    
    fprintf(fpw,"%d %s %d %d %d %d\n",L->code,L->name,L->price,L->sold_num,L->remain_num,L->total); 
     p=p->next;
 }
 fclose(fpw);
 return 1;
}
复制代码
复制代码

8.商品信息的输出功能

 

 

复制代码
复制代码
void printfGoods(node *L)
{
    
    system("cls");
   node *p=L->next;
    printf("---------------------------------------------------------\n");
        printf("代码 |名称\t|价格\t|销售量\t|库存\t|销售额\t\n");
        printf("-----------------------------------------------------\n");
            if(p!=NULL)
       {

        while(p!=NULL){
        printf("%d   |%s   \t|%d   \t|%d   \t|%d   \t|%d   \t|\n",p->code,p->name,p->price,p->remain_num,p->sold_num,p->total);
        printf("---------------------------------------------------\n");
        p=p->next;
        }
    }
    
}
复制代码
复制代码

9.增加商品信息功能

 

 

复制代码
复制代码
void addGoods()
{
    printf("增加商品信息 ");
    system("cls");
    node goods;
    printf("请输入商品相关信息:");
    printf("商品代码:");
    scanf("%d",&goods.code);
    printf("商品名称:");
    scanf("%s",goods.name);
    printf("商品价格:");
    scanf("%d",&goods.price);
    printf("商品销售量:");
    scanf("%d",&goods.sold_num);
    printf("商品库存量:");
    scanf("%d",&goods.remain_num);
     goods.total=goods.price*goods.sold_num;
     insertGoodsInfo(&List,goods); 
} 
void insertGoodsInfo(node *L,node e){
    //头插法
    node *h=L;
    node *s=(node*)malloc(sizeof(node));
    *s=e;
    s->next=h->next;
    h->next=s; 
    saveFile(L);
}
复制代码
复制代码

10.商品信息查询

 

 

 

 

复制代码
复制代码
//按代码查找商品 
node* searchGoodsInfoById(int id,node *L){
    node *p=L;
    while(p->next!=NULL){
        if(p->next->code==id){
        return p;
        }
        p=p->next;
    }
    return NULL;
}
//按商品名查找
node* searchGoodsInfoByName(char name[],node *L){
    node *p=L;
    while(p->next!=NULL){
        if(strcmp(name,p->next->name)==0){
        return p;
        }
        p=p->next;
    }
    return NULL;
}

void printfSearchGoods(node *L)
{
    system("cls");
    int choice=0;
    int id;
    char name[50];
    node *st;
    printf("按代码查询----- 1\n");
    printf("按商品名称查询----- 2\n");
    printf("请输入查询方式:");
    scanf("%d",&choice);
    
    if(choice == 1){
        printf("请输入要查询的代码:");
        scanf("%d",&id);
        st=searchGoodsInfoById(id,L);
        
        if(st==NULL){
            printf("查无此商品!\n");
        }else{
            st=st->next;
        printf("-----------------------------------------------------------\n");
        printf("代码 |名称\t|价格\t|销售量\t|库存\t|销售额\t\n");
        printf("----------------------------------\n");
        printf("%d   |%s   \t|%d  \t|%d   \t|%d   \t|%d   \t|\n",st->code,st->name,st->price,st->remain_num,st->sold_num,st->total);
        printf("-------------------------------------------------------------\n");
        }
    }else if(choice ==2){
        printf("请输入要查询的商品名称:");
            scanf("%s",name);
            st=searchGoodsInfoByName(name,L);
            
            if(st==NULL){
                printf("查无此商品!\n");
            }else{
                st=st->next;
        printf("----------------------------------------------------------\n");
        printf("代码 |名称\t|价格\t|销售量\t|库存\t|销售额\t\n");
        printf("---------------------------------------------------------\n");
        printf("%d   |%s   \t|%d   \t|%d   \t|%d   \t|%d   \t|\n",st->code,st->name,st->price,st->remain_num,st->sold_num,st->total);
        printf("------------------------------------------------------------\n");
            }
    }
    
}
复制代码
复制代码

11.商品信息的修改

 

 

 

 

 

 

 

复制代码
复制代码
void printfFixGoods(node *L)
{
    system("cls");
    int code,choice;
    char name[50];
    printf("请输入要查找的商品代码:");
    scanf("%d",&code);
    node *goods=searchGoodsInfoById(code,L);
    if(goods==NULL){
        printf("查无此商品!");
        return ;
    }
    goods=goods->next;
     while(1)
     {
         system("cls");
         printf("-----------------------------------------------------------\n");
        printf("代码 |名称\t|价格\t|销售量\t|库存\t|销售额\t\n");
        printf("----------------------------------\n");
        printf("%d   |%s   \t|%d  \t|%d   \t|%d   \t|%d   \t|\n",goods->code,goods->name,goods->price,goods->remain_num,goods->sold_num,goods->total);
        printf("-------------------------------------------------------------\n");
         printf("修改商品名--------1\n");
        printf("修改商品价格------2\n");
        printf("修改商品销售量----3\n");
        printf("修改商品库存------4\n");
        printf("请输入要修改的信息:");
        scanf("%d",&choice);
        switch(choice){
            case 1:
                printf("请输入商品名称:");
                scanf("%s",goods->name);
                break;
                case 2:
                    printf("请输入商品价格:");
                    scanf("%d",&goods->price);
                    
                    break;
                    case 3:
                        printf("请输入商品的销售量:");
                        scanf("%d",&goods->sold_num);
                        break;
                        case 4:
                            printf("请输入商品的库存量:");
                            scanf("%d",&goods->remain_num);
                            break;
        }
        goods->total=goods->sold_num*goods->price;
        printf("是否继续修改该商品信息:(y-1/n-0)");
        scanf("%d",&choice);
        if(choice==0){
            break;
        }
      } 
    saveFile(L);
}
复制代码
复制代码

12.商品信息的删除

 

 

 

 

复制代码
复制代码
void printfDeletGoods(node *L)
{
    system("cls");
    int code,choice=0;
    node *p; 
    printf("请输入要删除的商品代码:");
    scanf("%d",&code);
    node *goods=searchGoodsInfoById(code,L);
    p=goods;
    if(goods==NULL){
        printf("查无此商品!");
        return ;
    }
        goods=goods->next; 
        printf("-----------------------------------------------------------\n");
        printf("代码 |名称\t|价格\t|销售量\t|库存\t|销售额\t\n");
        printf("----------------------------------\n");
        printf("%d   |%s   \t|%d  \t|%d   \t|%d   \t|%d   \t|\n",goods->code,goods->name,goods->price,goods->remain_num,goods->sold_num,goods->total);
        printf("-------------------------------------------------------------\n");
         
         deletGoodsInfo(p);
         saveFile(L);
}
void deletGoodsInfo(node *L){
    node *s=L->next;
    L->next=s->next;
    s->next=NULL;
    free(s);
}
复制代码
复制代码

13.系统结束退出

 

 

复制代码
复制代码
void goodbye()
{
    system("cls");
    printf(" 欢迎下次使用!\n");
    exit(0);
}
复制代码
复制代码

14源代码

复制代码
复制代码
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<fstream>
#include<string.h>
typedef struct Node{
    int code;//商品代码 
    char name[50];//商品名称 
    int  price;//价格 
    int sold_num;//销售量 
    int remain_num;//库存量 
    int total;//销售额 
    struct Node *next;
}node;
node List;//链表 
//主菜单界面 
void welcome();
//增加商品信息 
void addGoods();
//删除商品信息 
void printfDeletGoods(node *L);
//修改商品信息 
void printfFixGoods(node *L);
//查找商品信息 
void printfSearchGoods(node *L);
//打印商品信息 
void printfGoods(node *L);
//退出系统 
void goodbye();
//读取文件
int readFile(node *L);
//保存文件 
int saveFile(node *L);
//表节点的插入 
void insertGoodsInfo(node *L,node e); 
//按代码查找商品 
node* searchGoodsInfoById(int id,node *L);
//按商品名查找
node* searchGoodsInfoByName(char name[50],node *L); 
//节点的删除 
void deletGoodsInfo(node *L);


int main()
{
    int choice=0;
    readFile(&List);
    //scanf("%d",&choice);
    while(1){
        welcome();
    scanf("%d",&choice);
    switch(choice){
        case 1://增加商品信息 
        addGoods();
        break;
        case 2://删除商品信息 
        printfDeletGoods(&List);
        break;
        case 3://修改商品信息 
        printfFixGoods(&List);
        break;
        case 4://查询商品信息 
        printfSearchGoods(&List);
        break;
        case 5://输出商品信息 
        printfGoods(&List);
        break;
        case 6://退出 
        goodbye();
        break; 
    }
    printf("是否继续操作?(yes/no)(1/0):");
    scanf("%d",&choice);
     if(choice==0)
     {
         break;
     }
    }
    
    return 0;
}
void addGoods()
{
    printf("增加商品信息 ");
    system("cls");
    node goods;
    printf("请输入商品相关信息:");
    printf("商品代码:");
    scanf("%d",&goods.code);
    printf("商品名称:");
    scanf("%s",goods.name);
    printf("商品价格:");
    scanf("%d",&goods.price);
    printf("商品销售量:");
    scanf("%d",&goods.sold_num);
    printf("商品库存量:");
    scanf("%d",&goods.remain_num);
     goods.total=goods.price*goods.sold_num;
     insertGoodsInfo(&List,goods); 
} 
void insertGoodsInfo(node *L,node e){
    //头插法
    node *h=L;
    node *s=(node*)malloc(sizeof(node));
    *s=e;
    s->next=h->next;
    h->next=s; 
    saveFile(L);
}
void printfDeletGoods(node *L)
{
    system("cls");
    int code,choice=0;
    node *p; 
    printf("请输入要删除的商品代码:");
    scanf("%d",&code);
    node *goods=searchGoodsInfoById(code,L);
    p=goods;
    if(goods==NULL){
        printf("查无此商品!");
        return ;
    }
        goods=goods->next; 
        printf("-----------------------------------------------------------\n");
        printf("代码 |名称\t|价格\t|销售量\t|库存\t|销售额\t\n");
        printf("----------------------------------\n");
        printf("%d   |%s   \t|%d  \t|%d   \t|%d   \t|%d   \t|\n",goods->code,goods->name,goods->price,goods->remain_num,goods->sold_num,goods->total);
        printf("-------------------------------------------------------------\n");
         
         deletGoodsInfo(p);
         saveFile(L);
}
void deletGoodsInfo(node *L){
    node *s=L->next;
    L->next=s->next;
    s->next=NULL;
    free(s);
}
void printfFixGoods(node *L)
{
    system("cls");
    int code,choice;
    char name[50];
    printf("请输入要查找的商品代码:");
    scanf("%d",&code);
    node *goods=searchGoodsInfoById(code,L);
    if(goods==NULL){
        printf("查无此商品!");
        return ;
    }
    goods=goods->next;
     while(1)
     {
         system("cls");
         printf("-----------------------------------------------------------\n");
        printf("代码 |名称\t|价格\t|销售量\t|库存\t|销售额\t\n");
        printf("----------------------------------\n");
        printf("%d   |%s   \t|%d  \t|%d   \t|%d   \t|%d   \t|\n",goods->code,goods->name,goods->price,goods->remain_num,goods->sold_num,goods->total);
        printf("-------------------------------------------------------------\n");
         printf("修改商品名--------1\n");
        printf("修改商品价格------2\n");
        printf("修改商品销售量----3\n");
        printf("修改商品库存------4\n");
        printf("请输入要修改的信息:");
        scanf("%d",&choice);
        switch(choice){
            case 1:
                printf("请输入商品名称:");
                scanf("%s",goods->name);
                break;
                case 2:
                    printf("请输入商品价格:");
                    scanf("%d",&goods->price);
                    
                    break;
                    case 3:
                        printf("请输入商品的销售量:");
                        scanf("%d",&goods->sold_num);
                        break;
                        case 4:
                            printf("请输入商品的库存量:");
                            scanf("%d",&goods->remain_num);
                            break;
        }
        goods->total=goods->sold_num*goods->price;
        printf("是否继续修改该商品信息:(y-1/n-0)");
        scanf("%d",&choice);
        if(choice==0){
            break;
        }
      } 
    saveFile(L);
}
//按代码查找商品 
node* searchGoodsInfoById(int id,node *L){
    node *p=L;
    while(p->next!=NULL){
        if(p->next->code==id){
        return p;
        }
        p=p->next;
    }
    return NULL;
}
//按商品名查找
node* searchGoodsInfoByName(char name[],node *L){
    node *p=L;
    while(p->next!=NULL){
        if(strcmp(name,p->next->name)==0){
        return p;
        }
        p=p->next;
    }
    return NULL;
}

void printfSearchGoods(node *L)
{
    system("cls");
    int choice=0;
    int id;
    char name[50];
    node *st;
    printf("按代码查询----- 1\n");
    printf("按商品名称查询----- 2\n");
    printf("请输入查询方式:");
    scanf("%d",&choice);
    
    if(choice == 1){
        printf("请输入要查询的代码:");
        scanf("%d",&id);
        st=searchGoodsInfoById(id,L);
        
        if(st==NULL){
            printf("查无此商品!\n");
        }else{
            st=st->next;
        printf("-----------------------------------------------------------\n");
        printf("代码 |名称\t|价格\t|销售量\t|库存\t|销售额\t\n");
        printf("----------------------------------\n");
        printf("%d   |%s   \t|%d  \t|%d   \t|%d   \t|%d   \t|\n",st->code,st->name,st->price,st->remain_num,st->sold_num,st->total);
        printf("-------------------------------------------------------------\n");
        }
    }else if(choice ==2){
        printf("请输入要查询的商品名称:");
            scanf("%s",name);
            st=searchGoodsInfoByName(name,L);
            
            if(st==NULL){
                printf("查无此商品!\n");
            }else{
                st=st->next;
        printf("----------------------------------------------------------\n");
        printf("代码 |名称\t|价格\t|销售量\t|库存\t|销售额\t\n");
        printf("---------------------------------------------------------\n");
        printf("%d   |%s   \t|%d   \t|%d   \t|%d   \t|%d   \t|\n",st->code,st->name,st->price,st->remain_num,st->sold_num,st->total);
        printf("------------------------------------------------------------\n");
            }
    }
    
}


void printfGoods(node *L)
{
    
    system("cls");
   node *p=L->next;
    printf("---------------------------------------------------------\n");
        printf("代码 |名称\t|价格\t|销售量\t|库存\t|销售额\t\n");
        printf("-----------------------------------------------------\n");
            if(p!=NULL)
       {

        while(p!=NULL){
        printf("%d   |%s   \t|%d   \t|%d   \t|%d   \t|%d   \t|\n",p->code,p->name,p->price,p->remain_num,p->sold_num,p->total);
        printf("---------------------------------------------------\n");
        p=p->next;
        }
    }
    
}
void goodbye()
{
    system("cls");
    printf(" 欢迎下次使用!\n");
    exit(0);
}
int readFile(Node *L){
    FILE *fpr=fopen("Goods.txt","r");
    node st;
    node *s;
    node *t=L;
    if(fpr==NULL){
        return 0;
    }else{
        while(fscanf(fpr,"%d %s %d %d %d %d",&st.code,st.name,&st.price,&st.sold_num,&st.remain_num,&st.total)!=EOF){
        //printf("%d %s %d %d %d %d\n",st.code,st.name,st.price,st.sold_num,st.remain_num,st.total);
        s=(node *)malloc(sizeof(node));
        *s=st;
        t->next=s;
        t=s;
        t->next=NULL;
        }
    }
    fclose(fpr);
    return 1;
}
int saveFile(node *L){
    FILE *fpw=fopen("Goods.txt","w");
    if(fpw==NULL) return 0;
    node *p=L->next;
    while(p!=NULL){
    
    fprintf(fpw,"%d %s %d %d %d %d\n",L->code,L->name,L->price,L->sold_num,L->remain_num,L->total); 
     p=p->next;
 }
 fclose(fpw);
 return 1;
}
//主菜单界面 
void welcome(){
    system("cls");
    printf("**********************\n");
    printf("*****商品管理系统*****\n");
    printf("***增加商品信息——1**\n");
    printf("***删除商品信息——2**\n");
    printf("***修改商品信息——3**\n");
    printf("***查询商品信息——4**\n");
    printf("***输出商品信息——5**\n");
    printf("***退出该系统--——6**\n");
    printf("请输入对应功能键(数字):"); 
}
复制代码
posted @   贫穷却富有愉快  阅读(143)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示