实习周:仓库管理系统

 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//定义结构体
typedef struct object {
    int num;//编号
    char name[50];
    float onesize;//规格
    char danwei[5];//计量单位
    float price;//单价(元)
    int sum;//数量
    char guishu[20];//归集产品
    struct object * next;
} ob; //用ob代替结构体名object

typedef struct churu {
    int num;//编号
    char name[50];
    float onesize;//规格
    char danwei[5];//计量单位
    float price;//单价(元)
    int cnt;//出入库数量
    char guishu[20];//归集产品
    struct churu * next;
} cr; 

ob * head;//定义头指针
ob * cheat;
cr * head2;
cr * cheat2;

//声明函数
void yiji(ob* head);
ob * creat();
void printNum(ob* head);
void zuijia (ob* head);
void cut(ob *head);
void correct(ob *head);
void menu2(ob* head);
void menu3();
void ruku(cr * head2,cr * cheat2);
void chuku(cr * head2,cr * cheat2);
void menu4();
void rukuTJ(cr * head2,cr * cheat2);
void menu5();

void page() { //页面开始2
    system("color 3E");
    printf("\t\t\t\t\t**********************************\n");
    printf("\t\t\t\t\t*****欢迎进入库存管理信息系统*****\n");
    printf("\t\t\t\t\t**********************************\n");
    printf("\n");
    printf("\t\t\t\t\t\t按enter键继续\n");
}

void menu() { //目录
    printf("\t\t\t\t\t\t********一级界面********\n");
    printf("\t\t\t\t\t|________________________________________|\n");
    printf("\t\t\t\t\t|   1. 创建文件信息\n");
    printf("\t\t\t\t\t|----------------------------------------|\n");
    printf("\t\t\t\t\t|   2. 基本信息管理\n");
    printf("\t\t\t\t\t|----------------------------------------|\n");
    printf("\t\t\t\t\t|   3. 原料出入库管理\n");
    printf("\t\t\t\t\t|----------------------------------------|\n");
    printf("\t\t\t\t\t|   4. 原材料领用统计\n");
    printf("\t\t\t\t\t|----------------------------------------|\n");
    printf("\t\t\t\t\t|   5. 出入库单查询\n");
    printf("\t\t\t\t\t|________________________________________|");
    printf("\n");
    printf("\n\t\t\t\t\t请选择你要进行的操作(1--5):\n");
}
void pages() { //页面开始1
    system("color 2E");
    printf("\t\t\t\t\t**********************************\n");
    printf("\t\t\t\t\t*****欢迎进入库存管理信息系统*****\n");
    printf("\t\t\t\t\t**********************************\n");
    printf("\n");
    printf("\t\t\t\t\t如果是管理员请按:1,如果不是请按:2!\n");
}
int logon(){//登录功能 
        int i;
    scanf("%d",&i); 
    if(i==1){
        printf("\t\t\t\t\t*********欢迎进入登录页面*********\n");
        printf("\t\t\t\t\t*********请输入登录密码***********\n");
        while(1){
            char ch[100],sh[10]={"200424"};
        scanf("%s",ch);
        if(strcmp(ch,sh)==0){
            printf("\t\t\t\t\t*********登录成功*****************\n");
            printf("\t\t\t\t\t*********按enter键继续************\n");
            break; 
        }else
        printf("\t\t\t\t\t*********密码错误,请重新输入******\n");
    }
    }else{
    printf("\t\t\t\t\t你无法访问该系统,系统将自动退出!\n");
        return 0; 
    }
        return 1;
}
//主函数
int main(){
    FILE * z; 
    int m,number;
    char n;
     pages();
     int d=logon();
     getchar();
     while(1){
     if(d){
    page();//调用页面函数
    char a[10];
    gets(a);//按enter下一步
    while(1) {
        yiji(head);
        
        break;
    }
    return 0;
}else
    continue;
}
    return 0;
}

void yiji(ob* head){
    char n;
    system("cls");//清屏
        menu();//调用目录函数
    AGAIN1:
        scanf("%c",&n);
        char a[10];
        gets(a);
        switch(n) {
            case '1'://创建文件信息
                head=creat();
                printf("请再次选择您的操作:\n");
                goto AGAIN1;
                break;
            case '2'://基本信息管理
                system("cls");
                menu2(head);
                break;
            case '3'://原料出入库管理
                system("cls");
                menu3();
                break;
            case '4'://原材料领用统计
                system("cls");
                menu4();
                break;
            case '5'://出入库单查询
                system("cls");
                menu5();
                break;
            default:
                printf("选择功能错误!\n");
                printf("请再次选择你的操作!\n");
                goto AGAIN1;
        }
}

ob * creat() { //1.创建信息功能,返回一个头指针    
    ob *p=NULL;//初始化指针
    ob *po=head=(ob*)malloc(sizeof(ob));//开辟一个新单元,并赋给它内存初始地址
    int n;
    int ret;
    //内置一个死循环,多次调用函数
    while(1) {
        p=(ob*)malloc(sizeof(ob));//开辟动态存储区,把起始地址赋给p
cheat2:        
        printf("请输入货物的编号、名称、规格、计量单位、单价、数量、归集产品:\n");
        printf("编号:");
        scanf("%d",&p->num);
        //相邻两个比较重复
         char b[10];
         gets(b);
    for(cheat=head;cheat;cheat=cheat->next){
        if(cheat->num==p->num){        
            printf("此编号已存在,请勿重新输入\n");
            goto cheat2;
        }
    }
        if(p->num<0) {
            printf("输入编号格式有误\n");
            break;
        }
        printf("名称:");
        scanf("%s",&p->name);
        printf("规格:");
        scanf("%f",&p->onesize);
        printf("计量单位:"); 
        scanf("%s",&p->danwei);
        printf("价格:");
        ret=scanf("%f",&p->price);
        //读取到一个整型,ret=1,跳过循环。否则ret=0  非整型数据放到缓存区 
        while(ret!=1)
        {
            while(getchar()!='\n');//== fflush(stdin)  清空缓存区非法字符 
            printf("输入价格格式错误,请重新输入\n");
            ret=scanf("%f",&p->price);
            if(getchar()=='\n')
            {
                break;
            }
        }
        if(p->price<0)
        {
            printf("输入价格错误\n");
            break;
        }
        printf("数量:");
        scanf("%d",&p->sum);
            if(p->sum<0) {
                printf("输入数量格式有误\n");
                break;
            }
        printf("归集产品:");
        scanf("%s",&p->guishu);  
        printf("\n");
        po->next=p;
        po=p;//实现让po指向p的空间
        printf("===============================================\n");
        printf("是否退出创建货物信息 退出: 输入1 继续: 输入2\n");
        scanf("%d",&n);
        char a[10];
        gets(a);
        if(n==1) {
            po->next=NULL;//不再创建信息,成为尾结点
            p=NULL;
            return (head);
        }
        printf("\n");
        if(n>2) {
            printf("输入错误!\n");
            system("pause");//暂停
            break;
        }
    }
    po->next=NULL;
    free(p);
    p=NULL;//让p重新指向空
    return (head);
}

void printNum(ob* head){//二级目录(1) 显示原材料编码
     ob* p;
    if (head==NULL)
    printf("尚未录入货物信息,请退出录入"); 
    else{
    printf("原料编码:\n");
    for(p=head->next;p;p=p->next){
        printf("%d\n",p->num);}
    }
 } 

void zuijia (ob* head){//二级目录(2) 追加输入         
    ob *last=head;//p 头指针
    ob *p1=(ob*)malloc(sizeof(ob));//开辟空间,给p1内存首地址
    printf("请输入要添加的货物信息:\n");
cheat1:    
    printf("编号:");        
    scanf("%d",&p1->num);
    char a[10];
    gets(a);
    for(cheat=head->next;cheat;cheat=cheat->next){
        if(cheat->num==p1->num){        
            printf("此编号已存在,请勿重新输入\n");
            goto cheat1;
        }
    }    
    printf("名称:");
    scanf("%s",&p1->name);
    printf("规格:");
    scanf("%f",&p1->onesize);
    printf("计量单位:");
    scanf("%s",&p1->danwei); 
    printf("单价:");
    scanf("%f",&p1->price);
    printf("数量:");
    scanf("%d",&p1->sum);
    printf("归集产品:");
    scanf("%s",&p1->guishu);
    if(last){
        while(last->next){
            last=last->next;
        }
        last->next=p1;
    }else{
        head->next=p1;
    }     
    p1->next=NULL;//p1为尾结点,添加完成
    printf("添加成功!\n");
}

void cut(ob *head) {//二级目录(3) 删除
    ob *p,*q;
    p=head;
    int numberplusplus;
    if(p->next!=NULL) {
        printf("按货物编号删除:\n");
        printf("请输入货物编号:\n");
        scanf("%d",&numberplusplus);
        if(head==NULL) {
            printf("为空链表\n");
            return;
        }
        while(p->num!=numberplusplus&&p->next!=NULL) {
            q=p;//q后驱
            p=p->next;//p前驱
        }
        if(p->num==numberplusplus) {//如果编号对应的话
            if(p==head) {//如果找到的是头结点
                head=p->next;//头指针后移
            } else {//如果不是头结点
                q->next=p->next;//越过p结点
            }
            free(p);
            printf("删除成功\n");
        } else {
            printf("没有此货物:\n");
        }
    } else
        printf("未创建货物信息,无法删除\n");
}

void correct(ob *head) {//二级目录(4) 修改 
    ob *p=NULL;
    ob *w=head;
    char nameplus[50];//定义新变量名,存放修改的数据
    int numberplus;
    float priceplus;
    int countplus;
    int v;//下面用到的修改方式
    int numm;
    p=head->next;//p从第一个结点开始往后移
    while(head!=NULL) {
        if(p==NULL) {
            printf("未创建货物信息,无法修改\n");
            break;
        }
        printf("按照编号查找\n");
        printf("请输入要查找的编号:\n");
        scanf("%d",&numm);
        if(p->num==numm) {
            printf("已找到信息\n");
            printf("请进行修改\n");
            printf("编号:");
            scanf("%d",&p->num);            
            printf("名称");
            scanf("%s",&p->name);
            printf("规格:");
            scanf("%f",&p->onesize);
            printf("计量单位:");
            scanf("%s",&p->danwei);
            printf("单价:");
            scanf("%f",&p->price);
            printf("数量");
            scanf("%d",&p->sum);
            printf("归集产品:");
            scanf("%s",p->guishu);
//            printf("用料单位:");
//            scanf("%s",&p->user); 
            printf("修改完成");
            break;
        } else {
            printf("未查找到该货物\n");
            break;
        }
        }
    printf("\n");
}

void menu2(ob* head) { //二级目录
    printf("\t\t\t\t\t\t********二级界面********\n");
    printf("\t\t\t\t\t|________________________________________|\n");
    printf("\t\t\t\t\t|   1. 显示原材料编码\n");
    printf("\t\t\t\t\t|----------------------------------------|\n");
    printf("\t\t\t\t\t|   2. 原材料输入追加\n");
    printf("\t\t\t\t\t|----------------------------------------|\n");
    printf("\t\t\t\t\t|   3. 删除原材料\n");
    printf("\t\t\t\t\t|----------------------------------------|\n");
    printf("\t\t\t\t\t|   4. 修改原材料记录\n");
    printf("\t\t\t\t\t|----------------------------------------|\n");
    printf("\t\t\t\t\t|   5. 返回一级界面\n");
    printf("\t\t\t\t\t|----------------------------------------|\n");
    printf("\n");
    printf("\n\t\t\t\t\t请选择你要进行的操作(1--4):\n");
    while(1) {    
        char n;
    AGAIN2:
        scanf("%c",&n);
        char a[10];
        gets(a);
        switch(n) {
            case '1'://显示原材料编码
                printNum(head);        
                break;
            case '2'://原材料输入追加
                zuijia (head);                
                break;
            case '3'://删除原材料
                cut(head); 
                break;
            case '4'://修改原材料记录
                correct(head); 
                break;
            case '5'://返回一级界面
                yiji(head);
                break;
            default:
                printf("选择功能错误!\n");
                printf("请再次选择你的操作!\n");
                goto AGAIN2;
        }
        printf("请问是否需要退出(退出请按1(每返回一次一级界面需多按一次退出),继续操作请按任意键)\n");
        scanf("%c",&n);
        gets(a);
        if(n=='1'){
            break;
        }else{
            printf("请再次选择你的操作!\n");
            goto AGAIN2;
        }
    }
}

void menu3() { //二级目录
    printf("\t\t\t\t\t\t********二级界面********\n");
    printf("\t\t\t\t\t|________________________________________|\n");
    printf("\t\t\t\t\t|   1. 原材料入库\n");
    printf("\t\t\t\t\t|----------------------------------------|\n");
    printf("\t\t\t\t\t|   2. 原材料出库\n");
    printf("\t\t\t\t\t|----------------------------------------|\n");
    printf("\t\t\t\t\t|   3. 返回一级界面\n");
    printf("\t\t\t\t\t|----------------------------------------|\n");
    printf("\n");
    printf("\n\t\t\t\t\t请选择你要进行的操作(1--2):\n");
    while(1) {    
        char n;
    AGAIN3:
        scanf("%c",&n);
        char a[10];
        gets(a);
        switch(n) {
            case '1'://原材料入库        
                ruku(head2,cheat2);            
                break;
            case '2'://原材料出库

                chuku(head2,cheat2);
                break;
            case '3'://返回一级界面
                yiji(head);
                break;
            default:
                printf("选择功能错误!\n");
                printf("请再次选择你的操作!\n");
                goto AGAIN3;
        }
        printf("请问是否需要退出(退出请按1(每返回一次一级界面需多按一次退出),继续操作请按任意键)\n");
        scanf("%c",&n);
        gets(a);
        if(n=='1'){
            break;
        }else{
            printf("请再次选择你的操作!\n");
            goto AGAIN3;
        }
    }
}

void ruku(cr * head2,cr * cheat2){
         
    int h;
    char c[10];
ruku1:    
    printf("请输入要进行入库操作的编号:\n");
    scanf("%d",&h);
    gets(c);
    for(cheat=head->next;cheat;cheat=cheat->next){
        if(cheat->num==h){
            printf("编号:%d 名称:%s 规格:%.1f%s 单价:%.2f 数量:%d 归集产品:%s\n",cheat->num,cheat->name,cheat->onesize,cheat->danwei,cheat->price,cheat->sum,cheat->guishu);
            printf("请输入本次入库数量:\n");
            scanf("%d",&h);
            gets(c);
            cheat->sum+=h;
            cr * p1;
            //将一个结构体赋给另一种结构体 
            p1->num=cheat->num;
            strncpy(p1->name,cheat->name,50); 
            p1->onesize=cheat->onesize;
            strncpy(p1->danwei,cheat->danwei,5);
            p1->price=cheat->price;
            p1->cnt=h;
            cheat2=head2;
            if(cheat2){
                while(cheat2->next){
                    cheat2=cheat2->next;
                }
                cheat2->next=p1;
            }else{
                head2=p1;
            }     
        }else{
            printf("此编号不存在,请重新输入");
            goto ruku1; 
        }
    } 

void chuku(cr * head2,cr * cheat2){
    printf("请输入要进行出库操作的编号:\n");     
    int h;
    char c[10];
    scanf("%d",&h);
    gets(c);
    for(cheat=head->next;cheat;cheat=cheat->next){
        if(cheat->num==h){
            printf("编号:%d 名称:%s 规格:%.1f%s 单价:%.2f 数量:%d 归集产品:%s\n",cheat->num,cheat->name,cheat->onesize,cheat->danwei,cheat->price,cheat->sum,cheat->guishu);
            printf("请输入本次出库数量(负数):");
            printf("\n数量:"); 
            scanf("%d",&h);
            gets(c);
            cheat->sum+=h;
            cr * p1;
            //将一个结构体赋给另一种结构体 
            p1->num=cheat->num;
            strncpy(p1->name,cheat->name,50); 
            p1->onesize=cheat->onesize;
            strncpy(p1->danwei,cheat->danwei,5);
            p1->price=cheat->price;
            p1->cnt=h;
            cheat2=head2;
            if(cheat2){
                while(cheat2->next){
                    cheat2=cheat2->next;
                }
                cheat2->next=p1;
            }else{
                head2=p1;
            }     
        }
    } 

void menu4() { //二级目录
    printf("\t\t\t\t\t\t********二级界面********\n");
    printf("\t\t\t\t\t|________________________________________|\n");
    printf("\t\t\t\t\t|   1. 入库统计及报表\n");
    printf("\t\t\t\t\t|----------------------------------------|\n");
    printf("\t\t\t\t\t|   2. 出库统计及报表\n");
    printf("\t\t\t\t\t|----------------------------------------|\n");
    printf("\t\t\t\t\t|   3. 年度统计及报表\n");
    printf("\t\t\t\t\t|----------------------------------------|\n");
    printf("\t\t\t\t\t|   4. 返回一级界面\n");
    printf("\t\t\t\t\t|----------------------------------------|\n");
    printf("\n");
    printf("\n\t\t\t\t\t请选择你要进行的操作(1--3):\n");
    while(1) {    
        char n;
    AGAIN4:
        scanf("%c",&n);
        char a[10];
        gets(a);
        switch(n) {
            case '1'://入库统计及报表
                rukuTJ(head2,cheat2);
                break;
            case '2'://出库统计及报表
                
                
                break;
            case '3'://年度统计及报表
                
                break;
            case '4'://返回一级界面
                yiji(head);
                break;
            default:
                printf("选择功能错误!\n");
                printf("请再次选择你的操作!\n");
                goto AGAIN4;
        }
        printf("请问是否需要退出(退出请按1(每返回一次一级界面需多按一次退出),继续操作请按任意键)\n");
        scanf("%c",&n);
        gets(a);
        if(n=='1'){
            break;
        }else{
            printf("请再次选择你的操作!\n");
            goto AGAIN4;
        }
    }
}

void rukuTJ(cr * head2,cr * cheat2){    
    for(cheat2=head2;cheat2;cheat2=cheat2->next){printf("1456");
        if(cheat2->cnt>0){
            printf("编号:%d 名称:%s 规格:%.1f%s 单价:%.2f 总入库数量:%d 归集产品:%s\n",cheat2->num,cheat2->name,cheat2->onesize,cheat2->danwei,cheat2->price,cheat2->cnt,cheat2->guishu);
            printf("1111111111111111");
        }else{
            printf("暂无入库记录"); 
        }
        printf("22222222222222222");
    }    
}

void chukuTJ(cr * head2,cr * cheat2){

void menu5() { //二级目录
    printf("\t\t\t\t\t\t********二级界面********\n");
    printf("\t\t\t\t\t|________________________________________|\n");
    printf("\t\t\t\t\t|   1. 入库单查询\n");
    printf("\t\t\t\t\t|----------------------------------------|\n");
    printf("\t\t\t\t\t|   2. 出库单查询\n");
    printf("\t\t\t\t\t|----------------------------------------|\n");
    printf("\t\t\t\t\t|   3. 原材料库存查询\n");
    printf("\t\t\t\t\t|----------------------------------------|\n");
    printf("\t\t\t\t\t|   4. 返回一级界面\n");
    printf("\t\t\t\t\t|----------------------------------------|\n");
    printf("\n");
    printf("\n\t\t\t\t\t请选择你要进行的操作(1--3):\n");
    while(1) {
        char n;
    AGAIN5:
        scanf("%c",&n);
        char a[10];
        gets(a);
        switch(n) {
            case '1'://入库单查询
                
                break;
            case '2'://出库单查询
                
                
                break;
            case '3'://原材料库存查询
            
                break;
            case '4'://返回一级界面
                yiji(head);
                break;
            default:
                printf("选择功能错误!\n");
                
                printf("请再次选择你的操作!\n");
                goto AGAIN5;
        }
        printf("请问是否需要退出(退出请按1(每返回一次一级界面需多按一次退出),继续操作请按任意键)\n");
        scanf("%c",&n);
        gets(a);
        if(n=='1'){
            break;
        }else{
            printf("请再次选择你的操作!\n");
            goto AGAIN5;
        }
    }    
}
 

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值