这里time.h头文件来获取货物入库时间。
直接上代码,当然头文件的规划不是很好。可以自己再改改.
因为这里使用的是栈,对于栈的排序算法我并没有写好。
我这里采取的是将栈中数据存入文件中,再放入结构体数组中。再进行排序。
这里只使用了一点sqlite3数据库。比较混的。可以就当略过。
bbbb.h:
#ifndef bbbb_c
#define bbbb_c
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<string.h>
#include<sqlite3.h>
#define N 50
struct xiugai{ //入库时间--年月日时分秒
int y;
int m;
int d;
int h;
int f;
int s;
};
typedef struct xiugai Xg;
struct shengchan{ //生产日期
int y1;
int m1;
int d1;
};
typedef struct shengchan Sc;
struct cangku{ //仓库
char name[20]; //货物名称
int data; //货物数量
int bzq; //保质期
Xg sj; //入库时间
Sc sc; //生成日期
};
typedef struct cangku Ck;
//定义栈
struct node{
Ck a;
struct node *next;
};
typedef struct node LinkStack;
LinkStack* InitStack();//初始化链栈
int Empty(LinkStack *s);//判断栈是否为空
int readData(Ck a[], char *filename);
void readStack(LinkStack *s,char *filename);
void saveData(LinkStack *s,char *filename);
void save1Data(LinkStack *s,char *filename);
void create_sqlite3();
void chuhuo(LinkStack *s);
void liuData(LinkStack *s, char *filename);
void deleteData(Ck a[]);
void push(LinkStack *s);
void liu(LinkStack *s);
void sort(Ck a[],int n); //按货物数量排序 降序
void chaData(Ck a[]);
void chaName(Ck a[]);
void chamenu();
void chazhao(Ck a[]);
void menu();
void mainmenu();
#endif
bbbb.c:
#include "bbbb.h"
//初始化链栈
LinkStack* InitStack(){
LinkStack *t = (LinkStack*)malloc(sizeof(LinkStack));
t->next = NULL;
return t;
}
//判断栈是否为空
int Empty(LinkStack *s){
return s->next ==NULL;
}
int readData(Ck a[], char *filename) {
FILE *fp;
int i=0;
fp =fopen(filename,"r");
if(fp!=NULL){
while(!feof(fp)){
fscanf(fp,"%s",a[i].name);
fscanf(fp,"%d",&a[i].data);
fscanf(fp,"%d",&a[i].sc.y1);
fscanf(fp,"%d",&a[i].sc.m1);
fscanf(fp,"%d",&a[i].sc.d1);
fscanf(fp,"%d",&a[i].bzq);
fscanf(fp,"%d",&a[i].sj.y);
fscanf(fp,"%d",&a[i].sj.m);
fscanf(fp,"%d",&a[i].sj.d);
fscanf(fp,"%d",&a[i].sj.h);
fscanf(fp,"%d",&a[i].sj.f);
fscanf(fp,"%d",&a[i].sj.s);
fscanf(fp,"\n");
i++;
}
fclose(fp);
return i;
}
else return 0;
}
void readStack(LinkStack *s,char *filename)
{
printf("aaa");
FILE *fp;
fp=fopen(filename,"r");
if(fp!=NULL){
while(!feof(fp)){
LinkStack *t=(LinkStack*)malloc(sizeof(LinkStack));
fscanf(fp,"%s",t->a.name);
fscanf(fp,"%d",&t->a.data);
fscanf(fp,"%d",&t->a.sc.y1);
fscanf(fp,"%d",&t->a.sc.m1);
fscanf(fp,"%d",&t->a.sc.d1);
fscanf(fp,"%d",&t->a.bzq);
fscanf(fp,"%d",&t->a.sj.y);
fscanf(fp,"%d",&t->a.sj.m);
fscanf(fp,"%d",&t->a.sj.d);
fscanf(fp,"%d",&t->a.sj.h);
fscanf(fp,"%d",&t->a.sj.f);
fscanf(fp,"%d",&t->a.sj.s);
fscanf(fp,"\n");
t->next=s->next;
s->next=t;
}
}else printf("打开文件失败\n");
fclose(fp);
}
void saveData(LinkStack *s,char *filename)
{
LinkStack *l=s;
FILE *fp=fopen(filename,"r+");
if(fp!=NULL){
while(l->next!=NULL){
l=l->next;
fprintf(fp,"%s\t",l->a.name);
fprintf(fp,"%d\t",l->a.data);
fprintf(fp,"%d\t",l->a.sc.y1);
fprintf(fp,"%d\t",l->a.sc.m1);
fprintf(fp,"%d\t",l->a.sc.d1);
fprintf(fp,"%d\t",l->a.bzq);
fprintf(fp,"%d\t",l->a.sj.y);
fprintf(fp,"%d\t",l->a.sj.m);
fprintf(fp,"%d\t",l->a.sj.d);
fprintf(fp,"%d\t",l->a.sj.h);
fprintf(fp,"%d\t",l->a.sj.f);
fprintf(fp,"%d\t",l->a.sj.s);
fprintf(fp,"\n");
}
}else printf("打开文件失败\n");
fclose(fp);
}
void save1Data(LinkStack *s,char *filename)
{
saveData(s,filename);
s=InitStack();
readStack(s,filename);
saveData(s,filename);
}
void create_sqlite3()
{ sqlite3 *db=NULL;
int ret;
char *errmsg;
char sql[512];
ret=sqlite3_open("cangku.db",&db);
if(ret!=SQLITE_OK){
printf("数据库打开失败\n");
}
strcpy(sql,"create table cangku(name varchar[20],data int,scy int,scm int,scd int,bzq int,sjy int,sjm int,sjd int,sjh int, sjf int,sjs int);");
ret=sqlite3_exec(db,sql,NULL,NULL,&errmsg);
if(ret!=SQLITE_OK){
printf("创建表失败,原因:%s\n",errmsg);
}
sqlite3_close(db);
}
void chuhuo(LinkStack *s)
{
s=InitStack();
readStack(s,"well.txt");
char name[20];
int year,mon,day;
printf("请输入货物名称:");
scanf("%s",name);
printf("请输入生产日期:(用空格隔开)");
scanf("%d%d%d",&year,&mon,&day);
LinkStack *l=s;
while(l->next!=NULL){
l=l->next;
if(strcmp(name,l->a.name)==0&&year==l->a.sc.y1&&mon==l->a.sc.m1&&day==l->a.sc.d1){
printf("%s",l->a.name);
int total;
printf("请输入出货数量:");
scanf("%d",&total);
if(l->a.data-total>=0){
l->a.data=l->a.data-total;
printf("a.data=%d\n",l->a.data);
}
else printf("仓库中没有这么多货物\n");
}
}
save1Data(s,"well.txt");
}
void liuData(LinkStack *s, char *filename)
{
FILE *fp;
time_t timep;
struct tm *p;
time(&timep);
p=gmtime(&timep);
LinkStack *t= (LinkStack*)malloc(sizeof(LinkStack));
fp =fopen(filename,"r");
if(fp!=NULL){
int i=0;
while(!feof(fp)){
t->next=s->next;
fscanf(fp,"%s",s->a.name);
fscanf(fp,"%d",&s->a.data);
fscanf(fp,"%d",&s->a.sc.y1);
fscanf(fp,"%d",&s->a.sc.m1);
fscanf(fp,"%d",&s->a.sc.d1);
fscanf(fp,"%d",&s->a.bzq);
fscanf(fp,"%d",&s->a.sj.y);
fscanf(fp,"%d",&s->a.sj.m);
fscanf(fp,"%d",&s->a.sj.d);
fscanf(fp,"%d",&s->a.sj.h);
fscanf(fp,"%d",&s->a.sj.f);
fscanf(fp,"%d",&s->a.sj.s);
fscanf(fp,"\n");
if((s->a.sc.y1*365+s->a.sc.m1*30+s->a.sc.d1+s->a.bzq)>=(365*(1900+p->tm_year)+30*(p->tm_mon)+p->tm_mday)) {
printf("%s\t\t",s->a.name);
printf("%d\t\t",s->a.data);
printf("%d/%d/%d\t",s->a.sc.y1,s->a.sc.m1,s->a.sc.d1);
printf("%d\t",s->a.bzq);
printf("\033[32m%d/%d/%d\t",s->a.sj.y, s->a.sj.m, s->a.sj.d);
printf("%d:%d:%d\t\033[0m",s->a.sj.h, s->a.sj.f, s->a.sj.s);
printf("\n");
}
else { printf("\033[31m%s\t\t",s->a.name);
printf("%d\t\t",s->a.data);
printf("%d/%d/%d\t",s->a.sc.y1,s->a.sc.m1,s->a.sc.d1);
printf("%d\t",s->a.bzq);
printf("%d/%d/%d\t",s->a.sj.y, s->a.sj.m, s->a.sj.d);
printf("%d:%d:%d\t\033[0m",s->a.sj.h, s->a.sj.f, s->a.sj.s);
printf("\n");
}
s->next=t;
i++;
}
}else printf("打开文件失败\n");
fclose(fp);
}
void deleteData(Ck a[])
{
int i,j,n;
int y,m,d;
n=readData(a,"well.txt");
char name[20];
printf("%s",a[1].name);
printf("请输入你要删除货物名称:");
scanf("%s",name);
printf("请输入你要删除的生产日期:");
scanf("%d%d%d",&y,&m,&d);
for(i=0;i<n;i++){
if(strcmp(name,a[i].name)==0 && y==a[i].sc.y1 && m==a[i].sc.m1 && d==a[i].sc.d1){
j=i;
printf("%d",j);
printf("%d",n);
i=n;
}
}
for(j;j<n;j++){
a[j]=a[j+1];
printf("%d",j);
}
FILE *fp;
fp=fopen("aaa.txt","r+");
if(fp!=NULL){
for(int k=0;i<n-1;i++){
fprintf(fp,"%s\t",a[k].name);
fprintf(fp,"%d\t",a[k].data);
fprintf(fp,"%d\t",a[k].sc.y1);
fprintf(fp,"%d\t",a[k].sc.m1);
fprintf(fp,"%d\t",a[k].sc.d1);
fprintf(fp,"%d\t",a[k].bzq);
fprintf(fp,"%d\t",a[k].sj.y);
fprintf(fp,"%d\t",a[k].sj.m);
fprintf(fp,"%d\t",a[k].sj.d);
fprintf(fp,"%d\t",a[k].sj.h);
fprintf(fp,"%d\t",a[k].sj.f);
fprintf(fp,"%d\t",a[k].sj.s);
fprintf(fp,"\n");
}
}else printf("文件读取失败\n");
fclose(fp);
}
void push(LinkStack *s)
{
create_sqlite3();
s=InitStack();
int u;
time_t timep;
struct tm *p;
time(&timep);
p=gmtime(&timep);
printf("输入几件货物:");
scanf("%d",&u);
int i,j;
for(i=0;i<u;i++){
LinkStack *t = (LinkStack*)malloc(sizeof(LinkStack));
printf("请输入货物名称:");
scanf("%s",t->a.name);
printf("请输入货物数据:");
scanf("%d",&t->a.data);
printf("请输入生产日期:(用空格隔开)");
scanf("%d%d%d",&t->a.sc.y1,&t->a.sc.m1,&t->a.sc.d1);
printf("请输入保质期:");
scanf("%d",&t->a.bzq);
t->a.sj.y = 1900+p->tm_year;
t->a.sj.m = 1+p->tm_mon;
t->a.sj.d = p->tm_mday;
t->a.sj.h = 8+p->tm_hour;
t->a.sj.f = p->tm_min;
t->a.sj.s = p->tm_sec;
t->next = s->next;
s->next=t;
}
LinkStack *l=s;
FILE *fp;
fp=fopen("well.txt","a");
if(fp!=NULL){
for(j=0;j<u;j++){
l=l->next;
fprintf(fp,"%s\t",l->a.name);
fprintf(fp,"%d\t",l->a.data);
fprintf(fp,"%d\t",l->a.sc.y1);
fprintf(fp,"%d\t",l->a.sc.m1);
fprintf(fp,"%d\t",l->a.sc.d1);
fprintf(fp,"%d\t",l->a.bzq);
fprintf(fp,"%d\t",l->a.sj.y);
fprintf(fp,"%d\t",l->a.sj.m);
fprintf(fp,"%d\t",l->a.sj.d);
fprintf(fp,"%d\t",l->a.sj.h);
fprintf(fp,"%d\t",l->a.sj.f);
fprintf(fp,"%d\t",l->a.sj.s);
fprintf(fp,"\n");
}
}else printf("未找到指定文件\n");
fclose(fp);
}
void liu(LinkStack *s)
{
s=InitStack();
printf("浏览:\n");
printf("货物名称\t货物数据\t生产日期\t保质期\t修改日期\t修改时间\n");
liuData(s,"well.txt");
}
void sort(Ck a[],int n) //按货物数量排序 降序
{
int m;
m=readData(a,"well.txt");
int i;
int j;
j=m;
int maxindex;
Ck temp;
while(m>1){
for(i=0;i<m;i++)
if(a[i].data<a[i+1].data){
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
m--;
}
printf("已排序\n");
FILE *fp;
fp=fopen("well.txt","r+");
if(fp!=NULL){
for(i=0;i<j;i++){
fprintf(fp,"%s\t",a[i].name);
fprintf(fp,"%d\t",a[i].data);
fprintf(fp,"%d\t",a[i].sc.y1);
fprintf(fp,"%d\t",a[i].sc.m1);
fprintf(fp,"%d\t",a[i].sc.d1);
fprintf(fp,"%d\t",a[i].bzq);
fprintf(fp,"%d\t",a[i].sj.y);
fprintf(fp,"%d\t",a[i].sj.m);
fprintf(fp,"%d\t",a[i].sj.d);
fprintf(fp,"%d\t",a[i].sj.h);
fprintf(fp,"%d\t",a[i].sj.f);
fprintf(fp,"%d\t",a[i].sj.s);
fprintf(fp,"\n");
}
}else printf("文件读取失败\n");
fclose(fp);
}
void chaData(Ck a[])
{
int n;
n=readData(a,"well.txt");
int i=0;
int m=0;
int data;
printf("请输入货物数量:");
scanf("%d",&data);
for(i;i<n;i++)
if(data == a[i].data){
printf("货物名称\t货物数量\t生产日期\t保质期\t修改日期\t修改时间\t\n");
printf("%s\t\t",a[i].name);
printf("%d\t\t",a[i].data);
printf("%d/%d/%d\t",a[i].sc.y1,a[i].sc.m1,a[i].sc.d1);
printf("%d\t",a[i].bzq);
printf("\033[32m%d/%d/%d\t",a[i].sj.y, a[i].sj.m, a[i].sj.d);
printf("%d:%d:%d\t\033[0m",a[i].sj.h, a[i].sj.f, a[i].sj.s);
printf("\n");
m++;
}
if(m==0) printf("未找到符合条件的货物\n");
}
void chaName(Ck a[])
{
int m;
m=readData(a,"well.txt");
int i,j;
char name[20];
printf("查找:\n");
printf("请输入货物名称:\n");
scanf("%s",name);
for(i=0;i<m;i++){
for(j=0;j<20;j++)
if(name[0]==a[i].name[j]){
printf("货物名称\t货物数量\t生产日期\t保质期\t修改日期\t修改时间\t\n");
printf("%s\t\t",a[i].name);
printf("%d\t\t",a[i].data);
printf("%d/%d/%d\t",a[i].sc.y1,a[i].sc.m1,a[i].sc.d1);
printf("%d\t",a[i].bzq);
printf("\033[32m%d/%d/%d\t",a[i].sj.y, a[i].sj.m, a[i].sj.d);
printf("%d:%d:%d\n\033[0m",a[i].sj.h, a[i].sj.f, a[i].sj.s);
}
}
}
void chamenu()
{
printf("1.按货物数量查找\n");
printf("2.按货物名称查找\n");
printf("0.退出查找\n");
}
void chazhao(Ck a[])
{
int i,n=1;
chamenu();
do{
printf("请输入(0-2):");
scanf("%d",&i);
switch(i){
case 0: n=0;
break;
case 1: chaData(a);
break;
case 2: chaName(a);
break;
}
}while(n);
}
void menu()
{
printf(" 仓库管理系统\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");
}
void mainmenu()
{
Ck c[N];
LinkStack *s;
menu();
int i=1;
do{
printf("请输入(0-6):");
int a;
scanf("%d",&a);
switch(a){
case 0:i=0;
break;
case 1:push(s);
break;
case 2:chuhuo(s);
break;
case 3:deleteData(c);
break;
case 4:liu(s);
break;
case 5:sort(c,N);
break;
case 6:{chazhao(c);
menu();
break;}
}
}while(i);
}
main.c:
#include "bbbb.h"
int main()
{
mainmenu();
printf("已退出系统\n");
return 0;
}