0
点赞
收藏
分享

微信扫一扫

C语言数据结构课程设计--仓库管理系统

一脸伟人痣 2022-02-06 阅读 106

这里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;
}
举报

相关推荐

0 条评论