商品信息管理系统(C语言)

系统分析

该案例使用了C语言中最具特色的结构体,将每个商品的所有信息存在结构体中,并且定义一个结构体类型的数组保存所有商品的信息,并且按照模块化的编程思想,将要实现的每个功能编写成独立的函数,这样即方便阅读同时也方便差错修改。

该系统的主要功能如下:
(1) 登录系统。
(2) 创建商品信息。
(3) 打印商品信息。
(4) 查询商品信息。
(5) 修改商品信息。
(6) 删除商品信息。
(7) 商品价格排名显示。
(8) 退出系统。

具体代码 

//#include "stdafx.h"
#include"stdlib.h"
#include"stdio.h"#include"string.h"
#include"conio.h"
#define Pquantity 3
#define MAX 1000
#define N 5
int k=0;//结构体
typedef struct  
{   int Good_num;/*编号*/char Good_name[20];/*商品名*/char Good_author[20];/*生产商*/char press[20];/*产地*/float Good_price;/*价格*/int Good_quantity;/*数量*/}Good;int Read(Good stu[])
{ FILE *fp;int i=0;if((fp=fopen("stu.txt","rt"))==NULL){printf("\n\n—————文件不存在!请手动创建");return 0;}while(feof(fp)!=1){fread(&stu[i],sizeof(Good),1,fp);if(stu[i].Good_num==0)break;elsei++;}fclose(fp);return i;
}
void SAVE_INFO(Good stu[],int sum)  // 将结构体数组中的商品信息保存到文件中
{FILE*fp;int i;if((fp=fopen("stu.txt","wb"))==NULL) //  打开文件{printf("写文件错误!\n");return;}for(i=0;i<sum;i++)  // 将结构体数组中的每个结构体都写入到文件中if(fwrite(&stu[i],sizeof(Good),1,fp)!=1)printf("写文件错误!\n");fclose(fp);
}//  商品信息的录入
int Input_Info(Good stu[])
{  int i,x;for(i=0;i<1000;i++){system("cls");  printf("\n\n                 录入商品  (最多%d个)\n",MAX);printf("               ----------------------------\n");printf("\n                     第%d个",k+1);printf("\n 请输入商品的编号:");scanf("%d",&stu[k].Good_num);printf("\n 请输入商品的名称:");scanf("%s",stu[k].Good_name); printf("\n 请输入商品的生产商:");scanf("%s",stu[k].Good_author);printf("\n 请输入商品的产地:");scanf("%s",stu[k].press); printf("\n 请输入商品的价格:");scanf("%f",&stu[k++].Good_price);printf("\n 请输入商品的数量:");   scanf("%d",&stu[i].Good_quantity); printf("\n 请按1键返回菜单或按0键继续创建");scanf("%d",&x);if(x)break;}return k;
}/*删除信息*/
void Delete_Info(Good stu[]){ int i,j;char Stuname2[20];system("cls"); printf("请输入商品名称:");scanf("%s",Stuname2);printf("\n");for(i=0;i<k;i++)if(strcmp(stu[i].Good_name,Stuname2)==0)   for(j=0;j<20;j++)stu[i].Good_name[j]=stu[i+1].Good_name[j];k--;printf("删除成功\n");printf("按任意键加回车返回主菜单!");scanf("%d",&i);getchar();
}/*打印信息*/                                                                                                                                                                                                                                                        
void Output_Info(Good stu[])
{  int i;system("cls");for(i=0;i<k;i++)    // 格式输出printf("编号:%d,名称:%s,生产商:%s,产地:%s,价格: %.2f,数量:%d\n",stu[i].Good_num,stu[i].Good_name,stu[i].Good_author,stu[i].press,stu[i].Good_price,stu[i].Good_quantity);printf("按任意键加回车返回主菜单!");scanf("%d",&i);getchar();
}/*查询信息*/
void Slect_Info(Good stu[]) { int i;char Good_name[20];system("cls");printf("     \n\n输入要查找的名称:");scanf("%s",&Good_name);for(i=0;i<k;i++)if(strcmp(Good_name,stu[i].Good_name)==0)  // 比较printf("\n\n\n编号:%d,名称:%s,生产商:%s,产地:%s,价格: %.2f,数量:%d\n",stu[i].Good_num,stu[i].Good_name,stu[i].Good_author,stu[i].press,stu[i].Good_price,stu[i].Good_quantity);printf("按任意键加回车返回主菜单!");scanf("%d",&i);getchar();}/*修改信息*/
void Revise_Info(Good stu[]){  int Good_num,i,choice;system("cls"); printf("\n\n\n      请输入您要修改的商品的编号");scanf("%d",&Good_num);for(i=0;i<k;i++){ if(Good_num==stu[i].Good_num)  // 找到,则显示出printf("\n编号:%d,名称:%s,生产商:%s,产地:%s,价格: %.2f,数量:%d\n",stu[i].Good_num,stu[i].Good_name,stu[i].Good_author,stu[i].press,stu[i].Good_price,stu[i].Good_quantity);printf("\n\n\n     ********请输入您想要修改的数据********\n\n");  // 根据提示显示需要修改的信息printf("                1. 编号\n\n");printf("                2. 名称\n\n");printf("                3. 生产商\n\n");printf("                4. 产地\n\n");printf("                5. 价格\n\n");printf("                6. 数量\n\n");printf("                 请选择(1-6):");scanf("%d",&choice);switch(choice){case 1:{printf("\n   请输入你改的新编号");scanf("%d",&stu[i].Good_num); break;}case 2:{printf("\n   请输入你改的新名称");scanf("%s",stu[i].Good_name); break;}case 3:{printf("\n   请输入你改的新生产商");scanf("%s",stu[i].Good_author); break;}case 4:{printf("\n   请输入你改的新产地");scanf("%s",stu[i].press); break;}case 5:{printf("\n   请输入你改的新价格");scanf("%f",&stu[i].Good_price); break;case 6:{printf("\n   请输入你改的新数量");scanf("%d",&stu[i].Good_quantity); break;}    }}printf("编号:%d,名称:%s,生产商:%s,产地:%s,价格: %.2f,数量:%d\n",stu[i].Good_num,stu[i].Good_name,stu[i].Good_author,stu[i].press,stu[i].Good_price,stu[i].Good_quantity);  // 重新放到员数组中printf("按任意键加回车返回主菜单!");scanf("%d",&i);break;}
}/*按照价格排序*/
void sort(Good stu[]){  int i,j,n=1,x;int t;system("cls"); for(i=0;i<k-1;i++)for(j=i+1;j<k;j++)  // 采用交换排序if(stu[i].Good_price<stu[j].Good_price){ t=stu[i].Good_price;stu[i].Good_price=stu[j].Good_price;stu[j].Good_price=t;t=stu[i].Good_num;stu[i].Good_num=stu[j].Good_num;stu[j].Good_num=t;}for(i=0;i<k;i++)  // 排序printf("排名    编号    价格\n %d       %d       %.2f\n",n++,stu[i].Good_num,stu[i].Good_price);printf("按任意键加回车返回主菜单!");scanf("%d",&x);getchar();}void MENU()   // 定义显示要显示的命令行界面
{printf(" \n\n\n                   **********************************\n");printf("                   *                                *\n");printf("                   *                                *\n");printf("                   *                                *\n");printf("                   *     商品信息管理系统           *\n");printf("                   *                                *\n");printf("                   *                                *\n");printf("                   *                                *\n");printf("                   **********************************\n");}
void Login()   // 首先验证登录  只有正确输入密码和账户后才可以使用该软件
// 没有数据库,我们将用户和密码固化到程序中,设定为123
{char userName[5];/*用户名*/char userPWD[5];/*密码*/int i,sum;system("color 1d");for(i = 1; i < 4; i++){printf("\n       请输入您的用户名:");gets(userName);printf("\n       请输入您的密码:");gets(userPWD);if ((strcmp(userName,"root")==0) && (strcmp(userPWD,"123456")==0))/*验证用户名和密码*/{printf("\n                      *用户名和密码正确,显示主菜单*");return;}else{if (i < 3){printf("用户名或密码错误,提示用户重新输入");printf("用户名或密码错误,请重新输入!");}else{printf("连续3次输错用户名或密码,退出系统。");printf("您已连续3次将用户名或密码输错,系统将退出!");exit(1); }}}
}
void Main_Menu()  // 主界面 (首先验证是否存在文本文档,没有的话提示需要手动创建),存在的话根据操作选择不同的功能
{Good stu[20];int choice,k,sum;sum=Read(stu);if(sum==0){  printf("首先录入基本库存信息!按回车后进入—————\n");getch();sum=Input_Info(stu);}do{  system("cls");  printf("\n\n\n               ********商品信息管理系统********\n\n");printf("                      1. 创建商品信息\n\n");printf("                      2. 打印商品信息\n\n");printf("                      3. 查询商品信息\n\n");printf("                      4. 修改商品信息\n\n");printf("                      5. 删除商品信息\n\n");printf("                      6. 商品价格信息排名\n\n");printf("                      0. 退出系统\n\n");printf("                       请选择(0-6):");scanf("%d",&choice); switch(choice){case 1: k=Input_Info(stu); break;/*创建商品*/case 2: Output_Info( stu) ; break;/*打印信息*/case 3: Slect_Info(stu); break;/*查询信息*/case 4: Revise_Info(stu); break;/*修改信息*/case 5: Delete_Info(stu); break;/*删除信息*/case 6: sort(stu); break;/*价格排名*/case 0: break;}}while(choice!=0);SAVE_INFO(stu,sum);  // 保存到结构体数组中
}
int main()
{  int i,sum;MENU();Login();  // 验证密码和账户Main_Menu();   // 进入主界面
}     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874165.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hung 之 Android llkd

目录 1. llkd 简介 2. 原理 2.1 内核活锁 2.2 检测机制 2.3 为什么 persistent stack signature 检测机制不执行 ABA 检查&#xff1f; 2.4 为什么 kill 进程后&#xff0c;进程还存在就能判定发生了内核 live-lock&#xff1f; 3. 代码 3.1 内核 live-lock 检查 3.2 …

摸鱼大数据——用户画像——如何给用户“画像”

2、如何给用户“画像” 2.1 什么是标签体系 标签: 是某一种用户特征的符号表示 标签体系: 把用户分到多少类别里面去, 这些类是什么, 彼此之间有什么关系, 就构成了标签体系 标签解决的问题: 解决描述(或命名)问题以及解决数据之间的关联 2.2.1 标签的分类 用户画像标签一…

《Nginx核心技术》第04章:生成缩略图

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章汇总&#xff1a;https://binghe.gitcode.host/md/all/all.html 星球项目地址&#xff1a;https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀&#xff0c…

Vue学习---vue 防抖处理函数,是处理什么场景

Vue防抖处理函数是用来处理在快速连续操作中&#xff0c;只执行最后一次操作的情况。 例如&#xff0c;在输入框输入时&#xff0c;我们可能希望只在用户完成输入后进行处理&#xff0c;而不是在每次键入时都处理。(n秒后触发一次) 以下是一个简单的Vue防抖处理函数的例子&am…

今日总结:雪花算法,拉取在线用户

雪花算法&#xff1a; public class SnowflakeIdGenerator {private final long epoch 1626804000000L; // 定义起始时间戳&#xff0c;这里设置为2021-07-21 00:00:00 UTCprivate final long workerIdBits 5L; // 机器ID所占的位数private final long sequenceBits 10L; /…

【附源码】IMX6U嵌入式Linux开发板连接阿里云--MQTT协议

演示 IMX6U嵌入式Linux开发板连接阿里云 阿里云创建设备&&获取LinkSDK 如果还不知道怎么在阿里云创建设备和获取连接阿里云的LinkSDK的话&#xff0c;先看这篇文章&#xff0c;再到这里。看这篇文章的时候&#xff0c;麻烦将下方文章打开对照着看&#xff0c;因为一些…

分布式锁的最佳实践之Redisson

从库存超卖问题分析锁和分布式锁的应用&#xff08;一&#xff09; 从库存超卖问题分析锁和分布式锁的应用&#xff08;二&#xff09; 分布式锁的最佳实践之Redisson 本文接从库存超卖问题分析锁和分布式锁的应用&#xff08;二&#xff09;讲解Redisson在分布式锁的应用实践…

重测序数据处理得到vcf文件

重测序数据处理得到vcf文件 文章目录 重测序数据处理前言1. 数据是rawdata&#xff0c;需用fastp对数据进行质控和过滤2. 利用getorganelle软件组装叶绿体基因组3. 检查基因组大小&#xff0c;确认是否完整&#xff0c;然后和已知的红毛菜科叶绿体基因组一起构树4. 根据树形结果…

微积分-微分应用2(平均值定理)

要得出平均值定理&#xff0c;我们首先需要以下结果。 罗尔定理 设函数 f f f 满足以下三个假设&#xff1a; f f f 在闭区间 [ a , b ] [a, b] [a,b] 上连续。 f f f 在开区间 ( a , b ) (a, b) (a,b) 上可导。 f ( a ) f ( b ) f(a) f(b) f(a)f(b) 则在开区间 ( a , b …

CTFHUB-SQL注入-UA注入

目录 判断是否存在注入 判断字段数量 判断回显位置 查询数据库名 查询数据库下的表名 查询表中的字段名 查询字段名下的数据 由于本关是UA注入&#xff0c;就不浪费时间判断是什么注入了&#xff0c;在该页面使用 burp工具 抓包&#xff0c;修改User-Agent&#xff0c;加…

JavaScript之Web APIs-DOM

目录 DOM获取元素一、Web API 基本认知1.1 变量声明1.2 作用和分类1.3 DOM树1.4 DOM对象 二、获取DOM对象2.1 通过CSS选择器来获取DOM元素2.2 通过其他方式来获取DOM元素 三、操作元素内容3.1 元素.innerTest属性3.2 元素.innerHTML属性 四、操作元素属性4.1 操作元素常用属性4…

图形编辑器基于Paper.js教程09:鼠标拖动画布,以鼠标点为缩放中心进行视图的缩放

如何使用Paper.js实现画布的缩放与拖动功能 在Web开发中&#xff0c;利用Paper.js库进行图形的绘制和交互操作是一种常见的实践。Paper.js是一个强大的矢量图形库&#xff0c;可以让开发者通过简洁的API完成复杂的图形操作。在本文中&#xff0c;我们将详细探讨如何使用Paper.…

autohotkey自动化执行vim命令

开发原因 首先讲一下为什么用这个自动化执行脚本? 存在的问题: vim作为linux自带唯一的编辑器, 开发时, 不得不用, 但是他的按键模式复杂, 就比如最简单的复制黏贴, 都需要按下好几次esc按键和插入, 极大的增加了初学者的学习成本, 并且在掌握了更快的键盘方案后, 就感觉vi…

昇思25天学习打卡营第29天 | 基于MindSpore通过GPT实现情感分类

基于MindSpore框架通过GPT模型实现情感分类展示了从项目设置、数据预处理到模型训练和评估的详细步骤&#xff0c;提供了一个完整的案例来理解如何在自然语言处理任务中实现情感分析。 首先&#xff0c;环境配置是任何机器学习项目的起点。项目通过安装特定版本的MindSpore和相…

Linux:使用vim编辑文件为什么会影响目录的mtime

一个有趣的现象 最近在调试一个问题时&#xff0c;发现了一个有趣的现象&#xff1a;touch一个存在的文件&#xff0c;文件的mtime发生了更新&#xff0c;文件所在目录的mtime不会更新&#xff1b;而使用vim编辑这个文件后再保存&#xff0c;文件和文件所在目录的mtime都会被更…

kotlin中常见的创建协程的方式

以下是kotlin开发中一些最常见的创建协程的方式&#xff1a; 1. 使用CoroutineScope.launch 这是最常见的启动协程的方式&#xff0c;通常用于不需要返回结果的协程。它返回一个Job对象&#xff0c;可以用来管理协程的生命周期。 val scope CoroutineScope(Dispatchers.Def…

未来已来:生成式 AI 在对话系统与自主代理中的探索

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 一、整体介绍 对话系统&#xff08;Chat&#xff09; 自主代理&#xff08;Agent&#xff09; 二、技术对比 技术差异 优…

安装anaconda后jupyter notebook打不开 闪退

首先&#xff0c;通过清华源安装了最新的anaconda&#xff08;安装在了D盘&#xff09; 尝试打开jupyter&#xff0c;发现小黑框1s后自己关了&#xff0c;根本不打开浏览器 之后尝试按照这个做了一遍https://blog.csdn.net/gary101818/article/details/123560304还是不行。。…

Nagios高频面试题及参考答案(2万字长文)

目录 什么是Nagios?它的主要功能是什么? Nagios可以监控哪些类型的资源? 描述Nagios的架构 Nagios如何处理高可用性? 解释Nagios中的“被动检查”和“主动检查” Nagios中有哪些主要的服务状态? Nagios配置文件的结构是什么样的? 描述Nagios的核心组件 如何在Na…

【BUG】已解决:TypeError: Descriptors cannot not be created directly.

已解决&#xff1a;TypeError: Descriptors cannot not be created directly. 目录 已解决&#xff1a;TypeError: Descriptors cannot not be created directly. 【常见模块错误】 【错误原因】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来…