题目:简单进销存

功能要求:

  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. php中类的static变量使用

    <?php #访问静态变量 #类外部: 类名::$类变量名 #类内部: 娄名::$类变量名或self::$类变量名 class Char{ public static $number = 0; ...

  2. Vuex 基本概念

    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 每一个 Vuex 应用的核心就是 stor ...

  3. humble_USACO

    Humble Numbers For a given set of K prime numbers S = {p1, p2, ..., pK}, consider the set of all num ...

  4. TCP之connect

    1. connect函数: #include <sys/socket.h> int connect(int sockfd, const struct sockaddr *servaddr, ...

  5. python基础===tkinter学习链接

    http://effbot.org/tkinterbook/tkinter-classes.htm

  6. Linux平台用C++实现事件对象,同步线程(转)

    本文属于转载,原文链接如下:http://blog.csdn.net/chexlong/article/details/7080537 与其相关的一组API包括:pthread_mutex_init, ...

  7. JavaScript跨域解决方法大全

    跨域的定义:JavaScript出于安全性考虑,同源策略机制对跨域访问做了限制.域仅仅是通过“URL的首部”字符串进行识别,“URL的首部”指window.location.protocol +win ...

  8. .NET Core、.NET Standard、Xamarin和.NET Framework对比

    近日,微软发布了.NET Core 2.0,但是开发人员中间仍然存在一些疑惑,就是.NET Core..NET Standard.Xamarin和.NET Framework有什么不同. .NET F ...

  9. Python调用shell

    今天学习了Python通过子进程调用shell,感觉教程上讲的过于繁复,有一些根本没用的功能,比如重定向输入输出,这个shell本身就支持,没有必要用Python的api.决定自己总结下. 其实总的来 ...

  10. C入门之一

    1.stdio.h不要写错成studio.h 2. #include <stdio.h> int main() { /* 我的第一个 C 程序 */ printf("Hello, ...