⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 商品.cpp

📁 商品信息管理系统,对大家的数据结构的课程设计很有帮助!
💻 CPP
字号:

//登陆密码为123456

#include"stdio.h"
#include"stdlib.h"
#include "malloc.h"
#include"string.h"
#include"conio.h" 

typedef struct{
  char num[5]; //商品编号
  char name[5]; //商品名称
  char price[4]; //商品价格
  char time[7]; //生产日期
  char place[5]; //存储货架号
}DataType;

typedef struct node{ //结点类型定义
  DataType data;    //结点数据域
  struct node *next;  //结点指针域
}LinkNode;

typedef LinkNode *LinkList;
LinkList head;  //定义指向单链表的头指针
LinkNode *p;  //定义一个指向结点的指针变量
FILE *fp;

openfile(LinkList &head);
savefile(LinkList head);
void login(void);
LinkList CreateList(void);
void InsertNode(LinkList &head,LinkNode *p);
LinkNode *ListFind(LinkList head);
void DelNode(LinkList head);
void PrintList(LinkList head);

void main()
{int i;   //选择
 openfile(head);  //打开文件
 login();
 while(1){  //主菜单
 printf("\n------------------欢迎使用商品信息管理系统-------------------\n");
 printf("---------------------------主菜单-----------------------------\n";)
 printf("---0.创建商品信息文件\n");
 printf("---1.显示所有商品信息\n");
 printf("---2.查找商品信息\n");
 printf("---3.插入商品信息\n");
 printf("---4.删除商品信息\n");
 printf("---5.退出系统\n");
 printf("---------------------------------------------------------------\n");
 printf("请输入所要操作的号码(0-5):");
 scanf("%d",&i);
 printf("\n");
 switch(i)
 {case 0:
       printf("---------------------------------------------------------------\n");
       printf("*********************创建商品信息文件***********************\n");
       head=CreateList();  //创建商品信息链表函数调用
	   break;
  case 1:
       printf("---------------------------------------------------------------\n");
       printf("*********************显示商品信息文件***********************\n");
       PrintList(head); //商品信息输出函数调用
	   getch();
	   break;
  case 2:
       printf("---------------------------------------------------------------\n");
       printf("*********************商品信息查询***********************\n");
       p=ListFind(head);  //商品信息查询函数调用
       if(p!=NULL){ //打印所查询到的商品信息
            printf("\n\n商品编号\t商品名称\t商品价格\t生产日期\t存储货架号\n");
            printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\n",p->data.num,p->data.name,p->data.price,p->data.time,p->data.place);
	   }
       else 
		   printf("没有查询到该商品!\n");
       getch();
       break; 
  case 3:
       printf("---------------------------------------------------------------\n");
       printf("*********************插入商品信息***********************\n");
       p=(LinkNode *)malloc(sizeof(LinkNode)); 
       printf("\n\n商品编号:"); //输入所要插入的商品信息
       scanf("%s",p->data.num);
	   printf("\n商品名称:");
       scanf("%s",p->data.name); 
       printf("\n商品价格:");
	   scanf("%s",p->data.price);
       printf("\n生产日期:");
       scanf("%s",p->data.time);
       printf("\n存储货架号:");
       scanf("%s",p->data.place);
       InsertNode(head,p);  //插入商品信息函数调用
       getch();
	   break;
  case 4:
       printf("---------------------------------------------------------------\n");
       printf("*********************删除商品信息***********************\n");
       DelNode(head);  //删除商品信息函数调用
	   printf("按任意键返回.");
	   getch();
	   break;
  default:
       savefile(head);  //保存所有操作的信息
       printf("谢谢使用此系统,再见!\n");
	   exit(1);
	   break;
}
system("cls"); //清屏 
 }
}

void login()  //登陆密码为123456
{long sec;  //密码
 printf("------------------欢迎进入登陆系统-------------------\n");
re:printf("请输入密码:");
 scanf("%ld",&sec);
 printf("\n");
 if(sec==123456) return;
 else printf("密码错误!请重新输入!\n");
 goto re;
}

LinkList CreateList(void)  //创建商品信息链表
{LinkList head=(LinkNode*)malloc(sizeof(LinkNode)); //申请头结点
 LinkNode *p,*rear;
 char flag='y';  //结束标志
 rear=head;  //尾指针初始指向头结点
 while(flag=='y'||flag=='Y')
    {p=(LinkNode*)malloc(sizeof(LinkNode));
     printf("\n\n商品编号:");
     scanf("%s",p->data.num);
	 printf("\n商品名称:");
     scanf("%s",p->data.name); 
     printf("\n商品价格:");
	 scanf("%s",p->data.price);
     printf("\n生产日期:");
     scanf("%s",p->data.time);
     printf("\n存储货架号:");
     scanf("%s",p->data.place);  
     rear->next=p;  //新结点连接到尾结点之后		
     rear=p;  //尾指针指向新结点
     printf("是否继续?(y/n):");
     flag = getch();
     }
 rear->next=NULL;  //终端结点指针域置空
 return head; //返回链表头指针
}

void InsertNode(LinkList &head,LinkNode *p) //插入商品信息
{LinkList p1,p2;
 p1=head;
 p2=p1->next;

 while(p2!=NULL && strcmp(p2->data.num,p->data.num)<0)
 {p1=p2;  //p1指向刚访问过的结点
  p2=p2->next;  //p2指向表的下一个结点
 }
 p1->next=p;  //插入p所指向的结点
 p->next=p2;  //连接表中剩余部分
}

LinkNode *ListFind(LinkList head) //查找商品信息
{LinkNode *p;
 char num[5];
 char name[9];
 int xz;
 printf("---------------------------------------------------------------\n");
 printf("1.按商品号查询\n");
 printf("2.按商品名称查询\n");
 printf("---------------------------------------------------------------\n");
 printf("****************************请选择*****************************\n");
 p=head->next;  //假定表带头结点
 scanf("%d",&xz);
 printf("\n");
 if(xz==1){
    printf("请输入商品号:");
    scanf("%s",num);
    while(p && strcmp(p->data.num,num)<0)
    p=p->next;
    if(p==NULL||strcmp(p->data.num,num)>0)
       p=NULL;  //没有查找到
  }
 else if(xz==2){
         printf("请输入商品名称:");
         scanf("%s",name);
         while(p && strcmp(p->data.name,name)!=0)
         p=p->next;
        }
 return p;
}

void DelNode(LinkList head)  //删除商品信息
{LinkNode *p,*q;
 char name[9];p=head;
 printf("请输入需要删除的商品名称:");
 scanf("%s",name);
 
 while(p && strcmp(p->data.name,name)!=0)
         p=p->next;
 if(p==NULL){
    printf("没有找到该商品信息!\n");
    return;
 }
 q=head;
 while(q!=NULL && q->next!=p)
 q=q->next;  
 q->next=p->next;  //删除结点
 free(p);          //释放被删除的结点空间
 printf("该商品已被删除!\n");
}

void PrintList(LinkList head)
{
 LinkNode *p;
 p=head->next;  //因为链表带头结点,使p指向链表开始结点
 printf("\n\n商品编号\t商品名称\t商品价格\t生产日期\t存储货架号\n");
 while(p!=NULL){
    printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\n",p->data.num,p->data.name,p->data.price,p->data.time,p->data.place);
    p=p->next;
 }
}

openfile(LinkList &head)
{   FILE*fp;
    LinkNode *p,*r;
    head=(LinkNode*)malloc(sizeof(LinkNode));
    head->next=NULL ;
    r=head;
	fp=fopen("file.txt","ab+"); //以读写打开一个二进制文件进行追加文件名file.txt
    if((fp==NULL))
    {   
		printf("文件不能打开!");
        return 0 ;
    }
   while(!feof(fp))    //文件结束时退出循环
   {    p=(LinkNode *)malloc(sizeof(LinkNode));     //将文件的内容放入接点中 
        if(fread(p,sizeof(LinkNode),1,fp)==1)
        {   
			p->next=NULL ;
            r->next=p ;
            r=p;              //将该接点挂入链中 
        }
    }
 fclose(fp);
}

savefile(LinkList head)
{   FILE*fp;
    LinkNode*p;
    fp=fopen("file.txt","wb");//只写方式打开
    if(fp==NULL)
	{   
		printf("文件不能打开!");
        return 0;
    }
    p=head->next;
    while(p){
     if(fwrite(p,sizeof(LinkNode),1,fp)==1)
	 {   
		 p=p->next;
     }
     else break;
	}
    fclose(fp);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -