商品管理系统
原代码地址: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("请输入对应功能键(数字):"); }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性