C语言商品库存管理系统
建议使用VS打开运行
#pragma once
#include
typedef struct information //商品信息
{
char number[20]; //编号
char sname[20]; //名称
float price; //价格
int count;
//数量
char dath[20]; //生产日期
struct information *next;
}inf;
void menu(inf *head);
//显示主菜单
inf *create();
//创建链表
void Input(inf *head);
//输入商品信息
void tianjia(inf *head);
//添加商品信息
void output(inf *head);
//输出商品信息
void chaxun(inf *head);
//查询商品信息
void chaxun_number(inf *head);
//按编号查询
void chaxun_sname(inf *head);
//按名称查询
void xiugai(inf *head);
//修改商品信息
void shanchu(inf *head);
//删除商品信息
void write_file(inf *head);
//保存商品信息到文件
void paixu(inf *head);
inf *Read__file();
//读取文件内商品信息
void freeh(inf *head);
//退出程序
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
#include
#include
#pragma comment(lib, "WINMM.lib")
#include"标头.h"
void menu(inf *head)
//显示菜单
{
PlaySound(TEXT("sounds\\背景.wav"),NULL,
SND_FILENAME | SND_ASYNC | SND_LOOP);
system("color 3B");
printf("\t\t*****************************************************\n");
printf("\t\t\t\t欢迎进入商品库存管理系统\n");
printf("\t\t*****************************************************\n");
printf("\n");
printf("\t\t|====================================================|\n");
printf("\t\t|______________________基本信息______________________|\n");
printf("\t\t| 1.商品信息录入 | 2.添加商品信息|\n");
printf("\t\t| 3.查找商品信息 | 4.修改商品信息|\n");
printf("\t\t| 5.删除商品信息 | 6.保存文件信息|\n");
printf("\t\t| 7.读取文件信息 | 8.显示商品信息|\n");
printf("\t\t| 9.按价格从高到低进行排序|\n");
printf("\t\t|_________________0.释放链表。退出___________________|");
printf("\n\t\t\t请输入你的选项(0---8):\n");
printf("\n");
printf("\t请输入你的选择: \n");
}
inf *create()
//创建链表
{
inf *p;
p = (inf *)malloc(sizeof(struct information));
if (p == NULL)
{
printf("链表创建失败.\n");
exit(0);
}
p->next = NULL;
return (p);
}
void Input(inf *head)
//录入货物信息
{
inf *p;
int i,n;
printf("请输入:你想录入多少个商品信息: \n ");
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
p = (inf *)malloc(sizeof(structinformation));
if (p == NULL)
{
printf("结点创建失败.\n");
exit(0);
}
printf("请输入商品:编号,名称,价格,数量:生产日期\n");
printf("编号:");
scanf("%s", p->number);
printf("名称:");
scanf("%s", p->sname);
printf("价格:");
scanf("%f",&p->price);
printf("数量:");
scanf("%d",&p->count);
printf("生产日期:");
scanf("%s",p->dath);
p->next = NULL;
while (head->next != NULL)
head = head->next;
head->next = p;
}
}
void tianjia( inf *head)
//添加货物信息
{
inf *p;
int i,n;
printf("请输入:你想添加多少个商品信息: \n");
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
p = (inf *)malloc(sizeof(structinformation));
if (p == NULL)
{
printf("链表结点创建失败。\n");
exit(0);
}
printf("请输入商品:编号,名称,价格,数量:\n");
printf("编号:");
scanf("%s", p->number);
printf("名称:");
scanf("%s", p->sname);
printf("价格:");
scanf("%f",&p->price);
printf("数量:");
scanf("%d",&p->count);
printf("生产日期:");
scanf("%s",p->dath);
p->next = NULL;
while (head->next != NULL)
head = head->next;
head->next = p;
}
}
void output(inf *head)
//输出货物信息
{
int n = 0;
inf *p;
p = head->next;
if (p == NULL)
{
printf("链表为空,请先输入信息!\n");
return;
}
while (p != NULL)
{
n++;
printf("商品信息:编号: %s,名称:%s,价格:%.2f 数量:%d 生产日期:%s\n", p->number, p->sname, p->price,p->count,p->dath);
p = p->next;
}
printf("商品总数为:%d \n", n);
}
void chaxun(inf *head)
//查询货物信息 函数
{
int a;
printf("\t\t查询信息\n");
while (1)
{
printf("\t 1.按编号查询\n");
printf("\t 2.按名称查询\n");
printf("请输入你的选择:\n");
scanf("%d", &a);
if (a == 1)
{
chaxun_number(head);//调用按编号查询的函数
break;
}
if (a == 2)
{
chaxun_sname(head);//调用按名称查询的函数
break;
}
if (a != 1 && a != 2)
{
printf("输入错误!\n");
break;
}
getchar();
}
}
void chaxun_number(inf *head)
//按编号查询
{
char num[20];
inf *p;
int i = -1;
p = head;
printf("请输入你要查询的商品的编号:");
scanf("%s", num);
while (p->next != NULL)
{
p = p->next;
if (strcmp(p->number, num) == 0)
{
i = 1;
printf("已找到该商品信息\n");
printf("货物信息:编号:%s,名称:%s,价格:%.2f.数量:%d,生产日期:%s\n", p->number, p->sname, p->price,p->count,p->dath);
}
}
if (i<0)
printf("没有此商品信息!\n");
}
void chaxun_sname(inf *head)
//按名称查询
{
char a[20];
int i = -1;
inf *p;
p = head;
printf(" 请输入要查找商品的名称:\n");
scanf("%s", a);
while (p->next != NULL)
{
p = p->next;
if (strcmp(p->sname, a) == 0)
{
i = 1;
printf("已找到该商品信息\n");
printf("商品信息:编号:%s,名称:%s,价格:%.2f.数量:%d,生产日期\n", p->number, p->sname, p->price,p->count,p->dath);
}
}
if (i<0)
printf("没有此商品!\n");
}
void xiugai(inf *head)
//修改货物信息
{
printf("\t********************\n");
printf("\t 请输入修改的方式:\n");
printf("\t1.单个信息全部修改。\n");
printf("\t2.单个信息逐个修改。\n");
printf("\t********************\n");
int a;
printf("请输入选项:\n");
scanf("%d", &a);
if (a == 1)
{
char no[20];
int i = -1;
inf *p;
p = head;
printf("请输入要修改商品的编号:\n");
scanf("%s", no);
while (p->next != NULL)
{
p = p->next;
if (strcmp(p->number,no) == 0)
{
i = 1;
printf("已找到该商品\n请输入新的的编号,名称,价格,数量:生产日期:\n");
printf("编号:");
scanf("%s", p->number);
printf("名称:");
scanf("%s", p->sname);
printf("价格:");
scanf("%f", &p->price);
printf("数量:");
scanf("%d", &p->count);
printf("生产日期:");
scanf("%s",p->dath);
}
}
if (i<0)
printf("没有此商品信息!\n");
}
if (a == 2)
{
inf *p = NULL;
int b;
char number2[20];
char name2[100];
float price2;
int count2;
p = head->next;
if (p == NULL)
{
printf("没有商品信息,请先保存商品信息!\n");
}
printf("\t\t 请输入要修改的内容\n");
printf("\t\t 1.修改编号 2.修改名称\n");
printf("\t\t 3.修改价格 4.修改数量\n");
printf("\t\t 5.修改生产日期\n");
printf("请选择\n");
scanf("%d", &b);
switch (b)
{
case 1:
printf("请输入原商品编号:\n");
scanf("%s",&number2);
while (p != NULL)
{
if(strcmp(p->number, number2) == 0)
{
printf("已找到该商品\n请输入新的编号:\n");
scanf("%s", &p->number);
}
p =p->next;
}
printf("该商品信息已修改成功。\n");
break;
case 2:
printf("请输入原名称:\n");
scanf("%s",&name2);
while (p != NULL)
{
if(strcmp(p->sname, name2) == 0)
{
printf("请输入新的名称:\n");
scanf("%s", &p->sname);
break;
}
p =p->next;
}
printf("该商品信息已修改成功。\n");
break;
case 3:
printf("请输入该商品编号:");
scanf("%s",&number2);
printf("请输入原价格:\n");
scanf("%f",&price2);
while (p != NULL)
{
if(strcmp(p->number, number2) == 0&&price2==p->price)
{
printf("请输入新的价格:\n");
scanf("%f", &p->price);
break;
}
p =p->next;
}
printf("该商品信息已修改成功。\n");
break;
case 4:
printf("请输入该商品编号:");
scanf("%s",&number2);
printf("请输入被修改的数量:\n");
scanf("%d",&count2);
while (p != NULL)
{
if (count2== p->count&&strcmp(p->number, number2) == 0)
{
printf("请输入新的数量:\n");
scanf("%d", &p->count);
break;
}
p =p->next;
}
printf("该商品信息已修改成功。\n");
break;
default:
printf("修改内容有错误!\n");
}
}
}
void shanchu(inf *head)
//删除货物信息
{
int a;
printf("\t\t 1.按编号删除 2.按名称删除\n");
printf("\t\t请输入选项:\n");
scanf("%d", &a);
switch (a)
{
case 1:
{
char number[20];
int i = -1;
inf *p, *h;
p = head;
printf("请输入你要删除的商品的编号:\n");
scanf("%s", number);
while (p->next != NULL)
{
if (strcmp(number,p->next->number) == 0)
{
i = 1;
h =p->next;
p->next= p->next->next;
free(h);
printf("已删除该商品信息。\n");
break;
}
p = p->next;
}
if (i<0)
printf("没有此商品信息!\n");
break;
}
case 2:
{
char name[20];
int i = -1;
inf *p, *h;
p = head;
printf("请输入你要删除的商品的名称:\n");
scanf("%s", name);
while (p->next != NULL)
{
if (strcmp(name, p->next->sname)== 0)
{
i = 1;
h =p->next;
p->next= p->next->next;
free(h);
printf("已删除该商品信息。\n");
break;
}
p = p->next;
}
if (i<0)
printf("没有此商品信息!\n");
break;
}
}
}
void write_file(inf *head)
//保存货物信息到文件
{
inf *p;
FILE *fp;
p = head;
if ((fp = fopen("商品信息.txt","wb")) == NULL)
{
printf("Do not have thisfile\n");
exit(0);
}
while (p->next != NULL)
{
p = p->next;
fwrite(p, sizeof(struct information),1, fp);
}
fclose(fp);
}
inf *Read__file()
//读取文件内的货物信息
{
inf *p, *d, *head;
FILE *fp;
head = (inf *)malloc(sizeof(struct information));
p = (inf *)malloc(sizeof(struct information));
if ((fp = fopen("商品信息.txt","rb")) == NULL)
{
printf("不能打开文件!\n");
exit(0);
}
if (fread(head, sizeof(struct information), 1, fp))
{
d = head;
while (fread(p, sizeof(structinformation), 1, fp))
{
d->next = p;
d = p;
p = (inf*)malloc(sizeof(struct information));
}
}
d ->next = NULL;
fclose(fp);
return (head);
}
void freeh(inf *head)
//释放空间 退出程序
{
inf *p;
p = (inf *)malloc(sizeof(struct information));
p = head;
while (head->next != NULL)
{
head = head->next;
free(p);
p = head;
}
free(p);
}
void paixu(inf *head)
{
inf *p=head,*q=NULL,*t=NULL,*subhead=NULL;
int i, j, count = 0;
while (p->next != NULL)
{
count++;
p = p->next;
}
for (i = 0; i < count - 1; i++)
{
subhead = head;
p = head->next;
q = p->next;
for (j = 0; j < count - i - 1; j++)
{
if (p->price price)
{
subhead->next = p->next;
p->next= q->next;
q->next= p;
t= p;
p = q;
q = t;
}
subhead =subhead->next;
p = p->next;
q = q->next;
}
}
output(head);
}
int main()
{
inf *head;
head = (inf*)malloc(sizeof(struct information));
head = create();
while (1)
{
menu(head);
int h;
scanf("%d", &h);
switch (h)
//功能选择
{
case 1:
Input( head);
Sleep(500);
break;
case 2:
tianjia( head);
Sleep(1000);
break;
case 3:
chaxun(head);
break;
case 4:
xiugai(head);
write_file(head);
break;
case 5:
shanchu(head);
write_file(head);
output(head);
break;
case 6:
write_file(head);
printf("\t已经成功保存信息!\t\n");
Sleep(1000);
break;
case 7:
head->next =Read__file();
output(head);
Sleep(1000);
break;
case 8:
output(head);
Sleep(1000);
break;
case 9:
paixu(head);
Sleep(1000);
break;
case 0:
freeh(head);
printf("\t-----已经退出程序-----\t\n");
exit(0);
default:
printf("输入错误\n");
break;
}
}
}