C语言 入库编程
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include<conio.h>
#include <io.h>
#define M 10
#define N 10
typedef struct shangpin{
int ph;
char pm[16];
int kc;
}SP;
typedef struct cangku{
int kh;
char km[16];
}CK;
typedef struct chuku{
int ph;
int kh;
int sl;
}LL;
char sp_dat[13]="sp.dat";
char ck_dat[13]="ck.dat";
char ll_dat[13]="ll.dat";
int spm,ckm,llm;
char fn[80]="";
////////////////////
int read_sp(SP *sp_list)/*从文件读取信息模块*/
{
int m=0;
char tmp[81];
FILE *fp;/*定义文件指针*/
if((fp=fopen(sp_dat,"r"))==NULL)/*打开文件,并判断是否出错*/
{
return 0;
}
fgets(tmp,80,fp);/*从文件中读取信息*/
while(1)
{
memset(tmp,0,81);
fgets(tmp,80,fp);/*从文件中读取信息*/
if(feof(fp)&&(strlen(tmp)<2))
break;
sscanf(tmp,"%d%s%d",&sp_list[m].ph,sp_list[m].pm,&sp_list[m].kc);
m++;
}
fclose(fp);
return m;
}
///////////////////////////
int read_ck(CK *ck_list)/*从文件读取信息模块*/
{
int m=0;
FILE *fp;/*定义文件指针*/
char tmp[81];
if((fp=fopen(ck_dat,"r"))==NULL)/*打开文件,并判断是否出错*/
{
return 0;
}
fgets(tmp,80,fp);/*从文件中读取信息*/
while(1)
{
memset(tmp,0,81);
fgets(tmp,80,fp);/*从文件中读取信息*/
if(feof(fp)&&(strlen(tmp)<2))
break;
sscanf(tmp,"%d%s",&ck_list[m].kh,ck_list[m].km);
m++;
}
fclose(fp);
return m;
}
///////////////////////////
int read_ll(LL *ll_list)/*从文件读取信息模块*/
{
int m=0;
FILE *fp;/*定义文件指针*/
char tmp[81];
if((fp=fopen(ll_dat,"r"))==NULL)/*打开文件,并判断是否出错*/
{
return 0;
}
fgets(tmp,80,fp);/*从文件中读取信息*/
while(1)
{
memset(tmp,0,81);
fgets(tmp,80,fp);/*从文件中读取信息*/
if(feof(fp)&&(strlen(tmp)<2))
break;
sscanf(tmp,"%d%d%d",&ll_list[m].ph,&ll_list[m].kh,&ll_list[m].sl);
m++;
}
fclose(fp);
return m;
}
///////////////////////////---------
void save_sp(SP *sp_list,int m)
{
int i;
FILE *fp;
char tmp[81];
if(m==0)
return;
if((fp=fopen(sp_dat,"w"))==NULL)
{
printf("\n无法保存文件! 请检查磁盘!");
printf("\n按任意健继续...");
getch();
return;
}
fputs("品号 品名 库存\n",fp);
for(i=0;i<m;i++){
sprintf(tmp,"%d %s %d\n",sp_list[i].ph,sp_list[i].pm,sp_list[i].kc);
fputs(tmp,fp);
}
fclose(fp);
}
///////////////////////////
void save_ll(LL *ll_list,int m)/*保存模块程序*/
{
int i;
FILE *fp;
char tmp[81];
if(m==0)
return;
if((fp=fopen(ll_dat,"w"))==NULL)
{
printf("\n无法保存文件! 请检查磁盘!");
printf("\n按任意健继续...");
getch();
return;
}
fputs("品号 库号 数量\n",fp);
for(i=0;i<m;i++){
sprintf(tmp,"%d %d %d\n",ll_list[i].ph,ll_list[i].kh,ll_list[i].sl);
fputs(tmp,fp);
}
fclose(fp);
}
///////////////////////////
void menu(){
printf(
"\n\n\n"
" -------- 欢迎使用仓库入库管理系统 --------\n\n");
printf(
" -------- 1.显示商品信息 --------\n"
" -------- 2.显示仓库信息 --------\n"
" -------- 3.显示库存信息 --------\n"
" -------- 4.增加库存信息 --------\n"
" -------- 5.退出系统 --------\n\n");
}
///////////////////////////////////
char *getkm(int index,CK *ck_list){
int i;
for(i=0;i<ckm;i++){
if(ck_list[i].kh==index)
return ck_list[i].km;
}
return "没有仓库信息!";
}
///////////////////////////////////
char *getpm(int index,SP *sp_list){
int i;
for(i=0;i<spm;i++){
if(sp_list[i].ph==index){
return sp_list[i].pm;
}
}
return "没有商品信息!";
}
int addck(LL ll_list,SP *sp_list,CK *ck_list){
char spflag,ckflag,i,tmp;
spflag=0;
ckflag=0;
for(i=0;i<spm;i++){
if(ll_list.ph==sp_list[i].ph){
spflag=1;
tmp=i;
break;
}
}
for(i=0;i<ckm;i++){
if(ll_list.kh==ck_list[i].kh){
ckflag=1;
break;
}
}
if(spflag&&ckflag){
if(sp_list[tmp].kc>=ll_list.sl){
sp_list[tmp].kc-=ll_list.sl;
return 0;
}
else{
printf("\n输入错误!");
return 1;
}
}
if(spflag)
printf("\n没有这个商品!");
else
printf("\n没有这个仓库!");
return 1;
}
///////////////////////////////////
int main(int argc,char *argv[]){
SP sp[M]={0};
CK ck[N]={0};
LL ll[N]={0};
FILE *fp=NULL;
int error=0;
int choice,tmpint,flag;
int i,bksp,bkck,bkll;
char tmp[80];
char llkm[32];
char llpm[32];
strcpy(fn,argv[0]);
// printf("\nArgv[0]=%s",fn);
// getch();
spm=0;
ckm=0;
llm=0;
spm=read_sp(sp);
ckm=read_ck(ck);
llm=read_ll(ll);
bksp=spm;
bkck=ckm;
bkll=llm;
do{
choice=0;
while(1){
system("cls");
menu();
printf("\n 请选择 1-5 : ");
fflush(stdin);
choice=getche();
if(choice<'1'||choice>'5'){
printf(" 请选择 1-5 !");
Sleep(1000);
}
else
break;
}
flag=0;
switch(choice){
case '1':
if(spm==0){
printf("\n\n没有商品信息记录! ");
break;
}
printf("\n\n 品号 品名 库存 \n");
for(i=0;i<spm;i++){
printf("\n %-8d %-16s %-8d",sp[i].ph,sp[i].pm,sp[i].kc);
}
break;
case '2':
if(ckm==0){
printf("\n\n 没有仓库信息记录! ");
break;
}
printf("\n\n 库号 库名 \n");
for(i=0;i<ckm;i++){
printf("\n %-6d %-16s",ck[i].kh,ck[i].km);
}
break;
case '3':
if(llm==0){
printf("\n\n 没有入库信息记录! ");
break;
}
printf("\n\n 库号 库名 品号 品名 数量 \n");
for(i=0;i<llm;i++){
strcpy(llkm,getkm(ll[i].kh,ck));
strcpy(llpm,getpm(ll[i].ph,sp));
printf("\n %-8d %-16s %-8d %-16s %-8d",ll[i].kh,llkm,ll[i].ph,llpm,ll[i].sl);
}
break;
case '4':
while(1){
printf("\n\n输入要出库的品号(0退出):");
fgets(tmp,80,stdin);
tmp[strlen(tmp)-1]='\0';
if(tmp[0]=='0')
break;
if(spm==0){
printf("\n\n 没有商品信息记录!无法出库! ");
break;
}
if(ckm==0){
printf("\n\n 没有仓库信息记录!无法出库! ");
break;
}
tmpint=atoi(tmp);
ll[llm].ph=tmpint;
printf("\n\n输入出库的库号:");
fgets(tmp,80,stdin);
tmp[strlen(tmp)-1]='\0';
tmpint=atoi(tmp);
ll[llm].kh=tmpint;
printf("\n\n输入出库的数量:");
fgets(tmp,80,stdin);
tmp[strlen(tmp)-1]='\0';
tmpint=atoi(tmp);
ll[llm].sl=tmpint;
if(addck(ll[llm],sp,ck)){
printf("请重新输入出库单!");
Sleep(500);
break;
}
llm++;
}
break;
///////////////////
case '5':
if((spm!=bksp)||(llm!=bkll)){
printf("\n\n商品信息己修改,是否要保存(sp.dat)或另存为? y/n/s: ");
fgets(tmp,80,stdin);
switch(tmp[0]){
case 'y':
case 'Y':
save_sp(sp,spm);
break;
case 's':
case 'S':
save_sp(sp,spm);
printf("\n请输入另存为的文件名:");
fgets(tmp,80,stdin);
tmp[strlen(tmp)-1]='\0';
rename(sp_dat,tmp);
break;
default:
break;
}
}
if(llm!=bkll){
printf("\n\n入库信息己修改,是否要保存(ll.dat)或另存为? y/n/s: ");
fgets(tmp,80,stdin);
switch(tmp[0]){
case 'y':
case 'Y':
save_ll(ll,llm);
break;
case 's':
case 'S':
save_ll(ll,llm);
printf("\n请输入另存为的文件名:");
fgets(tmp,80,stdin);
tmp[strlen(tmp)-1]='\0';
rename(ll_dat,tmp);
break;
default:
break;
}
}
/////////////////////////
printf("\n\n 感谢使用仓库入库管理系统");
printf("\n 按任意健退出...\n");
getch();
exit(0);
default:
printf(" 请选择 1-5 !");
Sleep(1000);
break;
}
printf("\n\n 按任意健继续...");
getch();
}while(1);
}
谁能帮我改改,每次运行都出错!!!