这是一个简单的货物管理系统。

下面是我做的一个货物管理系统,我是个初学者,主要是靠学长和老师的帮助。虽然很简陋,

但也算做出来了。至里面有很多不当之处还望大神指点。

 

#include <stdio.h>

#include <stdlib.h>                     这是头文件

#include <string.h>

#include <malloc.h>

#define LEN sizeof(struct cargo)

typedef struct cargo    //货物信息

{

         char sno[20];        // 货物编号

         char sname[20];      //货物名称

         float scost;          //货物价格

         int   snum;       //货物数量

         struct cargo *next;

}stu;

        

         void meau(stu *head);                                   //显示菜单            

         void choose(stu*head);                                //功能选择   

         stu *create_head();                                            //创建头节点       

         void input_head(intn,stu *head);                //录入信息   

         void InsterStu(stu*head);                        //添加信息   

         void serch_message(stu*head);                   //查询

         void serch_num(stu*head);                       //按编号查询

         void serch_name(stu*head);                      //按名称查询

         void revise(stu*head);                          //修改信息    

         void delete_head(stu*head);                     //删除信息

         void write_file(stu*head);                      //保存文件

         stu*read__file();                               //读取文件内的信息

         void free1(stu*head);                           //释放空间

         void print(stu *head);                                     //输出连表信息

 

         int main()                                       //主函数

         {

                   stu *head;

                                               head=(stu*)malloc(LEN);

                                               head=create_head();

                                               meau(head);

                  

                   system("pause");

         }

 

void meau(stu *head)                                                   //显示菜单   

         {

                  

                   printf("        ==欢===========迎===========使===========用====\n");

                   printf("                           货物信息处理系统                              \n");

                   printf("    ====================================================\n\n");

                            while(1)

                            {  

                                     printf("\t========================================\n");

                                     printf("\t---------------1,录入货物信息-----------\n");

                                     printf("\t---------------2,查找货物信息-----------\n");

                                     printf("\t---------------3,修改货物信息-----------\n");

                                     printf("\t---------------4,删除货物信息-----------\n");

                                     printf("\t---------------5,保存文件---------------\n");

                                     printf("\t---------------6,读取信息---------------\n");

                                     printf("\t---------------7,输出链表---------------\n");

                                     printf("\t---------------0,退出程序---------------\n");

                                     printf("\t-=======================================\n");

                                     printf("\t请输入你的选择:\n");

                                     choose(head);

                            }

         }

这是上面函数运行的结果

void choose(stu *head)                                                         //功能选择       

         {

                   int h;

                   int i,n;

                   scanf("%d",&h);

                  

                            switch(h)

                            {

                                     case1:    printf("你想录入几组信息:\n");

                                                                 scanf("%d",&n);

                                                                 for(i=1;i<=n;i++)

                                                                 input_head(i,head);

                                                                 break;

                                     case2:     serch_message(head);

                                                                 break;

                           

                                     case3:     revise(head);

                                         

                                               break;

                                     case4:        delete_head(head);

                                                                 write_file(head);

                                                                 print(head);

                                                 break;

                           

                                     case5:

                                                 write_file(head);

                                                 printf("\t\t保存信息成功!\t\n");        

                                                                 break;

                                     case6:     head->next=read__file();

                                                       

                                                                 print(head);

                                                                 break;

                           case 7:           print(head);

                                               break;

                                    

                                             

                                     case0:     free1(head);

                                                                 printf("\t-----已经退出程序-----\t\n");

                                                                 printf("\t\t欢迎下次使用!\t\n");

                                                                 exit(-1);

                                     default:    printf("警告!输入错误!\n\t请重新输入!\n");

                                                                 break;

                            }

         }

 

stu *create_head()                                                                     //创建头节点

{

         stu *p;

         p=(stu *)malloc(LEN);

                     if(p==NULL)

                            {

                                     printf("连表创建失败\n");

                                     exit(-1);

                            }

                            p->next=NULL;

                   return (p);

}

void input_head(int n,stu *head)                                          //录入信息     

         {                

                                     stu*p;

                            p=(stu*)malloc(LEN);

                              if(p==NULL)

                                     {

                                               printf("新节点创建失败\n");

                                               exit(-1);

                                     }

                                               printf("请输入货物:编号,名称,价格,数量:");

                    scanf("%s%s %f%d",p->sno,p->sname,&p->scost,&p->snum);

                                     p->next=NULL;

                            while(head->next!=NULL)

                            head=head->next;

                            head->next=p;

         }

 

void serch_message(stu *head)                                         //查询函数

         {

                   int a;

                   while(1)

         {

        

                            printf("---------------1,按编号查询------------------------------\n");

                            printf("---------------2,按名称查询------------------------------\n");

                            printf("---------------0,返回主菜单------------------------------\n");

                  

                            printf("请输入你的选择:\n");

                            scanf("%d",&a);

                                     switch(a)

                                     {

                                               case1:    serch_num(head);

                                                                           break;

                                               case2:    serch_name(head);

                                                                           break;

                                               case0:     meau(head);

                                                                           break;

                                               default:    printf("警告!输入错误!\n请重新输入!\n");

                                                                           break;

                                     }

        

         }

         }

void serch_num(stu *head)                                                 //按编号查询

         {

                   charstrno[20];

                   stu *p;

                   p=head;  

                   printf("请输入你要查询的货物的编号:");

                   scanf("%s",strno);

                   while(p->next!=NULL)

                   {

                            p=p->next;

                            if(strcmp(p->sno,strno)==0)

                   {

                   

                     printf("                                   查询结果                                     \n");                            

                    printf("货物信息:编号%s,名称%s,价格%.2f,数量%d;\n",p->sno,p->sname,p->scost,p->snum);

                            }

                                    

                   }

         }

void serch_name(stu *head)                         //按名称查询

         {

                   char a[20];

                   int m=0;

                   stu *p;

                            p=head;

                   printf("---------------请输入要查找货物的名称------------------------------\n");

                   scanf("%s",a);

                   while(p->next!=NULL)

                   {

                   p=p->next;

                       if(strcmp(p->sname,a)==0)

                       {       

                            m=1;

                  printf("                                 查询结果                                     \n");

                 printf("货物信息:编号%s,名称%s,价格%.2f,数量%d;\n",p->sno,p->sname,p->scost,p->snum);

                            }

                   }

                   if(m=0)

                   printf("没有此货物!!!\n");

         }

 

void revise(stu *head)                                                 //修改信息

         {

                   char a[20];

                   int m=-1;

                   stu *p;

                   printf("---------------请输入要修改货物的名称------------------------------\n");

                   scanf("%s",a);

                   p=head;

                   while(p->next!=NULL)

                   {

                   p=p->next;

                       if(strcmp(p->sname,a)==0)

                       {       

                                m=1;

                                printf("--------------- 请输入新同学的成绩------------------------------\n");

                                printf("请输入要添加货物的编号,名称,价格,数量:");

                         scanf("%s %s%f%d",p->sno,p->sname,&p->scost,&p->snum);

                       }

                   }

                   if(m<0)

                   printf("没有此货物!!!\n");

         }

void   delete_head(stu *head)                                               //删除信息

         {

             char sno[20];

             int a;

                   stu *p,*h;

                   p=head;

             printf("请输入你要删除的货物的编号:");

             scanf("%s",sno);

             while(p->next!=NULL)

             {

                  if(strcmp(sno,p->next->sno)==0)

                  {  

                                h=p->next;

                                p->next=p->next->next;

                                     free(h);

                                     printf("---------已删除----------\n");

                            }

             }

                p=p->next;

         }

        

 

void print(stu *head)                                                         //输出链表

                   {       

                            intn=0;

                            stu*p;

                            p=head->next;

                                    

                   if(p==NULL)

                   {

                          printf("链表为空!\n");

                           return;

              }

             while(p!=NULL)

               {

                n++;

                      printf("货物信息:编号%s,名称%s,价格%.2f,数量%d;\n",p->sno,p->sname,p->scost,p->snum);

                      p=p->next;

                     

               }

                           

                                     printf("-----------------链表的节数为%d-------------------\n",n);

                   }

void write_file(stu *head)                          //保存文件

                   {

                       stu *p;

                            FILE*fp;

                            p=head;

                            if((fp=fopen("yanbin.txt","wb"))==NULL)

                            {

                                     printf("Do not have this file\n");

                                     exit(-1);

                            }

                            while(p->next!= NULL)

                            {

                                     p=p->next;

                                     fwrite(p,LEN,1,fp);                          

                            }

                            fclose(fp);

                   }

stu *read__file()                                  //读取文件

                   {

                            stu*p,*q,*head,*h;

                            FILE*fp;

                            h=head=(stu*)malloc(LEN);

                            p=(stu*)malloc(LEN);

                            if((fp=fopen("yanbin.txt","rb"))==NULL)

                            {

                                     printf("cannot open this file!\n");

                           

                            }

                            if(fread(head,LEN,1,fp))

                            {       

                                     q=head;

                           

                                     while(fread(p,LEN,1,fp))

                                               {

                                                        q->next=p;

                                                        q=p;

                                                        p=(stu*)malloc(LEN);

                                               }

                            }

                            q->next=NULL;

                            fclose(fp);

                            return(head);

                   }

void free1(stu *head)                                       //释放空间

         {

                   stu *q;

                   q=(stu*)malloc(LEN);

                   q=head;

                   while(head->next!=NULL)

                   {

                           

                            head=head->next;

                            free(q);

                            q=head;

                   }

                   free(q);

         }

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值