zoukankan      html  css  js  c++  java
  • 【CCpp程序设计2017】简单进销存

    题目:简单进销存

    功能要求:

    1. 实现如下的菜单(按数字选择菜单功能): 1. 显示存货列表 2. 入库 3. 出库 4. 退出程序
    2. 实现菜单对应功能(需记录货物的型号、数量等信息);
    3. 程序启动时从文件中读取当前库存数据,退出时保存库存数据;
    #include<stdio.h>
    #include<string.h>
    #include<conio.h>
    #include<windows.h>
    
    typedef struct GOOD{
    	char *name;
    	int num;
    }GOOD;
    
    typedef struct Node{
    	GOOD good;
    	struct Node *pre,*next;
    }Node;
    
    Node *head,*tail;
    
    void NewNode();
    
    int main(){
    	char name_of_good[101];
    	int num_of_good;
    	printf("///////////////
    ");
    	printf("ÇëÊäÈëÏàÓ¦Êý×Ö£¬²¢°´Ï»سµ¼üÀ´»ñÈ¡ÄúÏëÒªµÄ¹¦ÄÜ£¡
    ");
    	printf("1.ÏÔʾ´æ»õÁбí
    ");
    	printf("2.Èë¿â
    ");
    	printf("3.³ö¿â
    ");
    	printf("4.Í˳ö³ÌÐò
    ");
    	printf("//////////////
    ");
    	int op;
    	FILE *fp=fopen("WAREHOUSE.txt","r");
    	while(fscanf(fp,"%s%d",name_of_good,&num_of_good)!=EOF){
    		NewNode();
    		int len=strlen(name_of_good);
    		(*tail).good.name=(char*)malloc(sizeof(char)*(len+1));
    		strcpy((*tail).good.name,name_of_good);
    		(*tail).good.num=num_of_good;
    	}
    	fclose(fp);
    	while(1){
    		scanf("%d",&op);
    		if(op==1){
    			for(Node* p=head;p!=NULL;p=(*p).next){
    				printf("%s %d
    ",(*p).good.name,(*p).good.num);
    			}
    		}
    		else if(op==2){
    			printf("Èë¿â,ÇëÊäÈë:»õÎïÃû³Æ »õÎïÊýÁ¿
    ");
    			scanf("%s%d",name_of_good,&num_of_good);
    			int isFind=0;
    			for(Node* p=head;p!=NULL;p=(*p).next){
    				if(strcmp((*p).good.name,name_of_good)==0){
    					(*p).good.num+=num_of_good;
    					isFind=1;
    					break;
    				}
    			}
    			if(!isFind){
    				NewNode();
    				int len=strlen(name_of_good);
    				(*tail).good.name=(char*)malloc(sizeof(char)*(len+1));
    				strcpy((*tail).good.name,name_of_good);
    				(*tail).good.num=num_of_good;
    			}
    		}
    		else if(op==3){
    			printf("³ö¿â,ÇëÊäÈë:»õÎïÃû³Æ »õÎïÊýÁ¿
    ");
    			scanf("%s%d",name_of_good,&num_of_good);
    			for(Node* p=head;p!=NULL;p=(*p).next){
    				if(strcmp((*p).good.name,name_of_good)==0){
    					(*p).good.num-=num_of_good;
    					if(!(*p).good.num){
    						if((*p).pre!=NULL){
    							(*((*p).pre)).next=(*p).next;
    						}
    						if((*p).next!=NULL){
    							(*((*p).next)).pre=(*p).pre;
    						}
    						if(p==head){
    							head=(*p).next;
    						}
    						if(p==tail){
    							tail=(*p).pre;
    						}
    						free(p);
    					}
    					break;
    				}
    			}
    		}
    		else{
    			break;
    		}
    	}
    	fp=fopen("WAREHOUSE.txt","w");
    	for(Node* p=head;p!=NULL;p=(*p).next){
    		fprintf(fp,"%s %d
    ",(*p).good.name,(*p).good.num);
    	}
    	fclose(fp);
    	return 0;
    }
    
    void NewNode(){
    	Node* Pretail=tail;
    	if(tail==NULL){
    		head=tail=(Node*)malloc(sizeof(Node));
    	}
    	else{
    		(*tail).next=(Node*)malloc(sizeof(Node));
    		tail=(*tail).next;
    	}
    	if(Pretail!=NULL){
    		(*Pretail).next=tail;
    	}
    	(*tail).pre=Pretail;
    	(*tail).next=NULL;
    }
  • 相关阅读:
    Atitit 提升开发进度大方法--高频功能与步骤的优化 类似性能优化
    Atitit 翻页功能的解决方案与版本历史 v4 r49
    Atitit.pagging  翻页功能解决方案专题 与 目录大纲 v3 r44.docx
    Atitit 视图参数解决方案 oracle版和mysql版本 attilax总结.docx
    Atitit easyui翻页组件与vue的集成解决方案attilax总结
    Atitit  技术经理职责与流程表总结
    Atitit 数据库视图与表的wrap与层级查询规范
    Atitit 手机图片备份解决方案attilax总结
    Atitit 提升进度的大原则与方法  高层方法  attilax总结
    Atiitt 使用java语言编写sql函数或存储过程
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/6683634.html
Copyright © 2011-2022 走看看