题目:简单进销存

功能要求:

  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("///////////////\n");
printf("ÇëÊäÈëÏàÓ¦Êý×Ö£¬²¢°´Ï»سµ¼üÀ´»ñÈ¡ÄúÏëÒªµÄ¹¦ÄÜ£¡\n");
printf("1.ÏÔʾ´æ»õÁбí\n");
printf("2.Èë¿â\n");
printf("3.³ö¿â\n");
printf("4.Í˳ö³ÌÐò\n");
printf("//////////////\n");
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\n",(*p).good.name,(*p).good.num);
}
}
else if(op==2){
printf("Èë¿â,ÇëÊäÈë:»õÎïÃû³Æ »õÎïÊýÁ¿\n");
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("³ö¿â,ÇëÊäÈë:»õÎïÃû³Æ »õÎïÊýÁ¿\n");
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\n",(*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;
}

【CCpp程序设计2017】简单进销存的更多相关文章

  1. 浩瀚技术团队... 安卓智能POS移动PDA开单器 开单器 进销存系统 进销存系统

    浩瀚技术团队... 智能POS移动PDA开单器 开单器 进销存系统 进销存系统 点餐 会员管理 会员管理 深度解读 手机APP移动办公到底是什么? 快速打单POS·不仅仅是快那么简单!  

  2. PDA手持机 移动开单进销存系统 现场出打印凭据和扫码 新的亮点

    传统车销模式弊端:1.手写开单,效率低,动作慢2.现场手写开单明细不能打印,产品明细不规范3.电脑办公人员及车销人员对车上的库存情况掌握不清楚,销售人员对每种产品销售价格不清楚4.老板对员工工作的管控 ...

  3. 【.NET实战教程】北风网基于ASP.NET多层架构下的企业级进销存软件全程培训

    .Net进销存系统详细课程大纲(开发工具采用VS2008+sqlsever2005) [小编提醒:现在学习的话,可以使用vs2012+sql 2008 学习的是思路,教学环境不一定要一模一样]1.项目 ...

  4. 一秒钟看懂SaaS、CRM、OA、ERP、HR、进销存

    自2014年以来,SaaS.CRM.OA.ERP.HR.APM.进销存.财务系统等,这些名词大量出现在微信朋友圈.电视楼宇广告和千百万融资资讯中.它们到底是什么意思?相互之间又有什么区别?在这个飞速发 ...

  5. 改变传统的开单模式------手持POS终端移动销售开单 移动进销存的利器

    手持POS终端高清彩屏,清晰.美观.大方,适用于仓库.超市.服装.食品.批发零售.手机电脑等企业管理.可与管理软件灵活对接.1:员工记不住价格,产品名称,只要有PDA扫描,价格,库存,直接开销售单,打 ...

  6. SAP进销存难点分析及对策

    1.基本需求: 业务部门提出如上表格式进销存需求,并且金额要和总账中存货科目保持一致,如果要实现上表格式进校存,可以通过SAP标准程序(MC.9.MB51.MB5B)加工繁琐而成.现分析一下SAP标准 ...

  7. Odoo进销存(采购、销售、仓库)入门教程 - 上

    转载地址:http://blog.csdn.net/wangnan537/article/details/46434373 运行环境: Ubuntu14.04+Odoo8.0 作者:苏州-微尘 0. ...

  8. 文献综述十八:基于SSH框架的进销存管理系统设计与实现

    一.基本信息 标题:基于SSH框架的进销存管理系统设计与实现 时间:2017 出版源:内蒙古科技与经济 文件分类:对框架的研究 二.研究背景 进销存管理系统在各企业中广泛应用,使用SSH框架,很大程度 ...

  9. 寒冬之下,浩瀚智能开单收银打印扫描POS为何能在批发零售门店商场 车销行业 风靡!:进销存+打印扫描POS机

    是一款适用于商超.餐饮.服装鞋帽.家电专营等等具有零售行业特点的企业,供企业管理人员用于管理.监控本品牌的市场占有率.门店覆盖区域.网点分布合理性等经济地理信息的工具平台. 1,功能一:业务抄单文章来 ...

随机推荐

  1. hdu 1556(线段树之扫描线)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556 Color the ball Time Limit: 9000/3000 MS (Java/Ot ...

  2. fragment+tabhost与viewpager

    学到哪里写到哪里吧 A.viewpager a.用V4包中的fragment,activity继承FragmentActivity b.布局中加入<android.support.v4.view ...

  3. 随机森林(Random Forest)详解(转)

    来源: Poll的笔记 cnblogs.com/maybe2030/p/4585705.html 1 什么是随机森林?   作为新兴起的.高度灵活的一种机器学习算法,随机森林(Random Fores ...

  4. esp8266 IOT Demo 固件刷写记录

    将编译好的固件按照下面地址刷写到esp8266 出现下面错误是因为刷写的设置不对,按照图上设置: load 0x40100000, len 26828, room 16 tail 12chksum 0 ...

  5. Yii 1.1.17 五、分页类、关联模型、权限验证与默认页面跳转

    一.分页类使用 1.在控制器中 // 实例化 $criteria = new CDbCriteria(); $articleModel = Article::model(); // 分页 $total ...

  6. gradle问题总结与理解(一篇文章带你理解android studio 与gradle 的关系)

    前言:近日在网上找了个很不错的安卓二维码美化,由于下载的项目经常出问题,且不方便依赖使用,因此我想把它写个demo,并把源码发布到jcenter中,修改还是很顺利的,运行项目到手机也没问题,发布遇到了 ...

  7. Hadoop(hadoop,HBase)组件import到eclipse

    1.简介: 将源代码import到eclipse可以方便的阅读和修改源码. 2.环境说明: mac mvn工具(Apache Maven 3.3.3 ) 3.hadoop(CDH5.4.2) 1.进入 ...

  8. Unknown character set: 'utf8mb4'

    出现Unknown character set: 'utf8mb4'该错误是因为你的mysql-connector-java版本太高了,现在的mysql编码方式utf8mb4  然而老版本的却是utf ...

  9. git学习笔记三

    1.每个分支的历史版本维护信息位置是.git/logs/refs/heads/master,这个位置的信息是文本文件,不是引用. harvey@harvey-Virtual-Machine:~/dem ...

  10. C#ActiveX安装项目

    C#开发的ActiveX控件发布方式有三种: 制作客户端安装包,分发给客户机安装: 制作在线安装包,客户机联机安装: 使用html中object的codebase指向安装包地址. 以下为制作安装包: ...