药品销售管理系统

一、系统总体设计

        该系统是针对医药销售行业所设计,主要用来管理销售药品所产生的额大量信息。该系统可帮助从医人员便捷管理药品销售信息,极大的提高工作效率,降低人工操作的失误率,为药品的销售者和购买者提供便利。根据对需求的分析,确定了该系统需要实现一下几个功能:

  1. 系统以菜单方式工作;
  2. 录入信息用文件保存;
  3. 能完成对药品信息的录入、修改;
  4. 能统计某药品的销售量,销售额;
  5. 能查询药品分类;
  6. 能按药品分类输出药品详单。

1.1 系统功能模块图

根据用户需求,本系统将主要实现以下功能:

图1-1 系统功能模块图

其中:

药品信息录入:录入药品基本信息,包括药品名称、药品编号、药品类别、药品销售量、药品销售额,通过C++文件操作,以“.txt”格式存储在本地。

药品信息修改:通过查询药品名称或药品编号,确定用户所要修改的药品,列出该药品的基本信息,由用户选择修改项。

药品信息查询:用户可通过名称、编号、类别检索药品信息库中的信息。

药品信息显示:列出所有药品信息库中的药品信息。

药品信息删除:通过查询药品名称或药品编号,确定用户所要删除的药品,列出该药品的基本信息,并将其删除。

1.2 各类间关系

        本系统只使用了一个类:Base

        类Base定义了药品基本信息,其中包括name、string num、string type、string sale_m、string sale_q五项,将其声明为私有;定义五项公有成员函数,其中包括yaopin_add()、yaopin_change()、yaopin_search()、yaopin_list()、yaopin_del(),以实现本程序的基本功能。

二、详细设计

        本系统主要功能包括:信息录入、信息查询、信息修改、删除信息、显示所有信息。

2.1 类的详细设计

        本系统所有功能都由类Base定义并实现,以下为详细设计:

        类Base主要描述药品的基本信息,定义函数,实现本系统所有主要功能。类Base具体实现流程如下图所示:

图2-1 类Base的详细设计流程图

2.2成员函数的详细设计

2.2.1 成员函数yaopin_add()

        该成员函数主要功能为录入药品名称、药品编号、药品类别、药品销售量、药品销售额五项药品基本信息,并将其储存。

        实现方式:使用ofstream以追加方式打开文件,输出提示引导用户输入药品的基本信息,输入完成之后写入文件,提示用户是否继续,若继续则重复,直至用户停止输入,详细设计流程图如下:

图2-2 成员函数yaopin_add()的详细设计流程图

2.2.2 成员函数yaopin_change()

        该成员函数主要功能为修改药品基本信息,并将其储存到文件。

        实现方式:首先,使用ifstream和ofstream同时打开药品信息和缓存文件两个文件,根据用户输入信息检索信息,同时将检索过的信息全部储存到缓存文件中,若检索到用户所要修改的药品信息,则引导用户完成修改,将修改后的信息储存到缓存文件,并继续遍历所有信息,将其储存到缓存文件;若未检索到用户所要修改的药品信息,则输出提示信息并返回主菜单。之后,将缓存文件中的所有信息储存到药品信息中,完成信息修改,详细设计流程图如下:

图2-3 成员函数yaopin_change()的详细设计流程图

2.2.3 成员函数yaopin_search()

        该成员函数主要功能为查询药品基本信息,可按药品名称、药品编号、药品类别三种方式查询。

        实现方式:使用ifstream以只读的方式打开药品信息文件,输出提示信息,由用户选择查询方式并输入信息。三种查询方式都是用while循环遍历文件,检索符合用户要求的信息,详细设计流程图如下:

图2-4 成员函数yaopin_search()的详细设计流程图

2.2.4 成员函数yaopin_list()

        该成员函数主要功能为列出信息库中所有药品信息

        实现方式:使用ifstream以只读的方式打开药品信息文件,用while循环遍历读取文件信息,然后输出文件中所有信息,详细设计流程图如下:

图2-5 成员函数yaopin_list()的详细设计流程图

2.2.5 成员函数yaopin_del()

        该成员函数主要功能为删除药品信息,并将其储存到文件。

        实现方式:使用ifstream和ofstream同时打开药品信息和缓存文件两个文件,根据用户输入信息检索信息,同时将检索过的信息全部储存到缓存文件中,若检索到用户所要删除的药品信息,则不将该项药品信息储存到缓存文件,并继续遍历所有信息,将其储存到缓存文件;若未检索到用户所要删除的药品信息,则输出提示信息并返回主菜单。之后,将缓存文件中的所有信息储存到药品信息中,完成信息删除,详细设计流程图如下:

图2-6 成员函数yaopin_list()的详细设计流程图

三、程序代码

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
using namespace std;

class Base{
public:
	void yaopin_add();     //录入药品信息 
	void yaopin_change();  //修改药品信息 
	void yaopin_search();  //查询药品信息 
	void yaopin_list();    //列举药品信息
	void yaopin_del();     //删除信息 
private:
	string name;    //药品名称 
	string num;     //药品编号 
	string type;    //药品类别 
	string sale_m;  //药品销售额 
	string sale_q;  //药品销售量 
};

void Base::yaopin_add(){
	char ch;
	Base mes;
	ofstream inData("药品信息.txt",ios::out|ios::app);
	if (!inData){cout<<endl<<"对不起!打开文件失败..." <<endl <<endl;system("pause");return;}
	
	do{
		cout<<"\n请输入药品信息:"<<endl;
		cout<<"药品名称:";
		cin>>mes.name;
		cout<<"药品编号:";
		cin>>mes.num;
		cout<<"药品类别:";
		cin>>mes.type;
		cout<<"药品销售额:";
		cin>>mes.sale_m;
		cout<<"药品销售量:";
		cin>>mes.sale_q;
		inData<<setw(20)<<mes.name<<setw(15)<<mes.num<<setw(15)<<mes.type<<setw(15)<<mes.sale_m<<setw(15)<<mes.sale_q<<endl;
		cout<<"信息已保存!\n输入'Y'键继续,输入'N'结束...\n";
		cin>>ch;
	}while(ch!='n'&&ch!='N');
	inData.close();
	system("cls");
}

void Base::yaopin_list(){
	ifstream inData("药品信息.txt",ios::in);
	if (!inData){cout <<endl <<"对不起!没有找到文件..." <<endl;	system("pause");return;	}
	bool flag = true;
	string record;
	while (inData>>name>>num>>type>>sale_m>>sale_q)	{
		if (flag){cout <<setiosflags(ios::left)<<setw(20)<<"名称"<<setw(15)<<"编号"<<setw(13)<<"类别"<<setw(15)<<"销售量"<<setw(15)<<"销售额"<<endl;}	
		cout <<setw(20)<<name<<setw(15) <<num<<setw(15)<<type<<setw(15)<<sale_m<<setw(15)<<sale_q<<endl<<endl;
		flag = false;
	}
	if (flag){cout <<endl <<"药品库中没有信息..." <<endl <<endl;}
	else     {cout <<endl <<"所有药品信息已经全部显示出来" <<endl <<endl;}
	system("pause");
	system("cls");
}

void Base::yaopin_search(){
	ifstream inData("药品信息.txt",ios::in);
	if (!inData) {cout <<endl <<"对不起!文件找不到..." <<endl;system("pause");return;}
	int s=0;
	string str;
	string sign;
	bool flag=true;
	
	cout<<"--- 1.按名称查询         2.按编号查询         3.按分类查询 --"<<endl<<endl; 
	cout<<"请选择查询方式: ";
	cin>>s;
	if(flag==true&&s==1){
		cout<<"请输入所查询药品的名称:";
		cin>>sign; 
		while (inData>>name>>num>>type>>sale_m>>sale_q){
			if (name==sign){
				cout<<endl<<"所查询的药品信息: " <<endl;
				cout<<setiosflags(ios::left)<<setw(20)<<"名称"<<setw(15)<<"编号"<<setw(13)<<"类别"<<setw(15)<<"销售量"<<setw(15)<<"销售额"<<endl;
				cout<<setw(20)<<name<<setw(15) <<num<<setw(15)<<type<<setw(15)<<sale_m<<setw(15)<<sale_q<<endl<<endl;
				flag=false;
				system("pause");
				system("cls");
				break;
			}
		}
		if(flag){
			cout<<"未查询到该药品信息..."<<endl;
			system("pause");
			system("cls");
		}
	}
	if(flag==true&&s==2){
		cout<<"请输入所查询药品的编号:";
		cin>>sign; 
		while (inData>>name>>num>>type>>sale_m>>sale_q){
			if (num==sign){
				cout<<endl<<"所查询的药品信息: " <<endl;
				cout<<setiosflags(ios::left)<<setw(20)<<"名称"<<setw(15)<<"编号"<<setw(13)<<"类别"<<setw(15)<<"销售量"<<setw(15)<<"销售额"<<endl;
				cout<<setw(20)<<name<<setw(15) <<num<<setw(15)<<type<<setw(15)<<sale_m<<setw(15)<<sale_q<<endl<<endl;
				system("pause");
				system("cls");
				flag=false;
				break;
			}
		}
		if(flag){
			cout<<"未查询到该药品信息..."<<endl;
			system("pause");
			system("cls");
		}
	}
	if(flag==true&&s==3){
		cout<<"请输入所查询药品的分类:";
		cin>>sign; 
		while (inData>>name>>num>>type>>sale_m>>sale_q){
			if (type==sign){
				if(flag){
					cout<<endl<<"所查询的药品信息: " <<endl;
					cout<<setiosflags(ios::left)<<setw(20)<<"名称"<<setw(15)<<"编号"<<setw(13)<<"类别"<<setw(15)<<"销售量"<<setw(15)<<"销售额"<<endl;
				}
				cout<<setw(20)<<name<<setw(15) <<num<<setw(15)<<type<<setw(15)<<sale_m<<setw(15)<<sale_q<<endl<<endl;
				flag=false;
			}
		}
		if(flag){
			cout<<"未查询到该药品信息..."<<endl;
			system("pause");
			system("cls");
		}
		
		system("pause");
		system("cls");
	}
	if(s!=1&&s!=2&&s!=3&&s!=0){cout<<"请输入正确编号...";}
	
	system("cls");
}

void Base::yaopin_change(){
	ifstream inData("药品信息.txt",ios::in);
	ofstream outData("temporary.txt",ios::out);
	if (!inData) {cout <<endl <<"对不起!文件找不到..." <<endl;system("pause");return;}
	
	int s; 
	string sign; 
	cout<<"输入要修改的药品名称或编号: ";
	cin>>sign;
	bool flag1 = true;
	bool flag2 = false;
	
	while(inData>>name>>num>>type>>sale_m>>sale_q){
		if (flag1==true&&((name==sign) || (num==sign))){
			cout<<endl<<"所修改药品信息: " <<endl;
			cout<<setiosflags(ios::left)<<setw(20)<<"1.名称"<<setw(15)<<"2.编号"<<setw(13)<<"3.类别"<<setw(15)<<"4.销售量"<<setw(15)<<"5.销售额"<<endl;
			cout<<setw(22)<<name<<setw(15) <<num<<setw(15)<<type<<setw(15)<<sale_m<<setw(15)<<sale_q<<endl<<endl;
			cout<<"请输入要修改的信息编号:";
			cin>>s;
			if(s==1) {cout<<"名称:";cin>>name;flag2 = true;} 
			if(s==2) {cout<<"编号:";cin>>num;flag2 = true;} 
			if(s==3) {cout<<"类别:";cin>>type;flag2 = true;} 
			if(s==4) {cout<<"销售量:";cin>>sale_m;flag2 = true;} 
			if(s==5) {cout<<"销售额:";cin>>sale_q;flag2 = true;} 
			if(s!=1&&s!=2&&s!=3&&s!=4&&s!=5) {cout<<"请输入正确编号!"<<endl;system("pause");break;}
			flag1 = false;
		}
		outData<<name<<"\t\t"<<num<<"\t"<<type<<"\t"<<sale_m<<"\t"<<sale_q<<endl;
	}
	
	if(flag1){
		cout<<"未查询到该药品信息..."<<endl;
		system("pause");
		system("cls");
	}
	
	if(flag2){
		inData.close();
		outData.close();
		string str;
		ifstream in("temporary.txt",ios::in);
		ofstream out("药品信息.txt",ios::out);
		while (getline(in, str)) {out<<str<<endl;}
		cout<<"信息修改成功..."<<endl;
		system("pause");
		system("cls");
	}
	
}

void Base::yaopin_del(){
	ifstream inData("药品信息.txt",ios::in);
	ofstream outData("temporary.txt",ios::out);
	if (!inData) {cout <<endl <<"对不起!文件找不到..." <<endl;system("pause");return;}
	string sign;
	cout<<"输入要删除的药品名称或编号: ";
	cin>>sign;
	bool flag1 = true;
	bool flag2 = true;
	
	while(inData>>name>>num>>type>>sale_m>>sale_q){
		flag2 = true;
		if (flag1==true&&((name==sign) || (num==sign))){
			cout<<endl<<"所删除药品信息: " <<endl;
			cout<<setiosflags(ios::left)<<setw(20)<<"名称"<<setw(15)<<"编号"<<setw(13)<<"类别"<<setw(15)<<"销售量"<<setw(15)<<"销售额"<<endl;
			cout<<setw(20)<<name<<setw(15) <<num<<setw(15)<<type<<setw(15)<<sale_m<<setw(15)<<sale_q<<endl;
			flag1 = false;
			flag2 = false;	
		}
		if(flag2){outData<<name<<"\t\t"<<num<<"\t"<<type<<"\t"<<sale_m<<"\t"<<sale_q<<endl;}
	}
	
	if(flag1){
		cout<<"未查询到该药品信息..."<<endl;
		system("pause");
		system("cls");
	}
	
	inData.close();
	outData.close();
	
	string str;
	ifstream in("temporary.txt",ios::in);
	ofstream out("药品信息.txt",ios::out);
	while (getline(in, str)) {out<<str<<endl;}
	cout<<"信息删除成功..."<<endl;
	system("pause");
	system("cls");
}

int main(){
	Base cs;
	int p=9;
	
	do{
		cout<<"-------------------------------------------------"<<endl
			<<"**              药品销售管理系统               **"<<endl
			<<"-------------------------------------------------"<<endl
			<<"**  1--添加药品信息           2--修改药品信息  **"<<endl
			<<"**  3--查询药品信息           4--列举药品信息  **"<<endl
			<<"**  5--删除药品信息           0--退出          **"<<endl
			<<"-------------------------------------------------"<<endl
			<<"请输入:"<<endl;
		cin>>p;

		switch(p){
			case 1:{system("cls");cs.yaopin_add();break;}   
			case 2:{system("cls");cs.yaopin_change();break;}
			case 3:{system("cls");cs.yaopin_search();break;}  
			case 4:{system("cls");cs.yaopin_list();break;}  
			case 5:{system("cls");cs.yaopin_del();break;}
			default: system("cls");
		}
		
		if(p==0) break;                                            //退出系统 
	}while(1);
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt qDebug基本的使用方法详解

目录 qDebug基本用法输出字符串输出变量值1输出变量值2支持流式输出输出十六进制去除双引号和空格调试输出级别 自定义类型输出自定义日志信息的输出格式示例占位符设置环境变量 关闭QDebug输出Qt工程VS工程 在VS工程中如何查看qDebug输出 DebugView下载 qDebug基本用法 qDebug…

【EI会议征稿通知】2024年人工智能与电力系统国际学术会议(AIPS 2024)

2024年人工智能与电力系统国际学术会议&#xff08;AIPS 2024&#xff09; 2024 International Conference on Artificial Intelligence and Power System 2024年人工智能与电力系统国际学术会议 (AIPS 2024) 将于2024年04月19日-21日在中国成都召开。AIPS 2024将围绕“人工智…

开源网络安全工具

开源工具代表了技术领域的一股动态力量&#xff0c;体现了创新、协作和可访问性。这些工具以透明度和社区驱动的原则开发&#xff0c;允许用户根据自己的独特需求仔细检查、修改和调整解决方案。 在网络安全领域&#xff0c;开源工具是无价的资产&#xff0c;使组织能够增强防…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)创建一个TcpConnection实例 以及 接收客户端数据

#CSDN 年度征文&#xff5c;回顾 2023&#xff0c;赢专属铭牌等定制奖品# 一、主线程反应堆模型的事件添加和处理详解 >>服务器和客户端建立连接和通信流程&#xff1a; 基于多反应堆模型的服务器结构图&#xff0c;这主要是一个TcpServer&#xff0c;关于HttpServer,…

vue3中使用elementplus中的el-tree-select,自定义显示名称label

<el-tree-select v-model"addPval" node-key"id" :data"menulists" :render-after-expand"false" :props"menuProps" /> <el-divider />let menuProps {//自定义labellabel: (data: { name: any; }) > {ret…

海外分支访问国内服务器系统慢怎么办?

在全球业务不断扩张的今天&#xff0c;企业面临着海外分支访问国内总部服务器系统慢的问题。为了解决这一挑战&#xff0c;我们引入了lxway全球系统专网产品&#xff0c;为企业提供高效、安全的全球网络连接方案。通过解析技术瓶颈和专网的优势&#xff0c;本文将揭示如何借助先…

Wrk压测发送Post请求的正确姿势

一、Wrk简介 wrk 是一个能够在单个多核 CPU 上产生显著负载的现代 HTTP 基准测试工具。它采用了多线程设计&#xff0c;并使用了像 epoll 和 kqueue 这样的可扩展事件通知机制。此外&#xff0c;用户可以指定 LuaJIT 脚本来完成 HTTP 请求生成、响应处理和自定义报告等功能。 …

七牛云cdn图片加载错误:net::ERR_HTTP2_PROTOCOL_ERROR与HTTP2 检测工具

一、问题描述 今天运营的小伙伴提了个问题&#xff0c;她在后台上传图片的时候有时会遇到上传成功了&#xff0c;但实际回显图片却是一张“破图”&#xff1a; 二、原因调查 先了解一下ERR_HTTP2_PROTOCOL_ERROR是什么意思&#xff1a; ERR_HTTP2_PROTOCOL_ERROR是由HTTP/2协…

软件工程:用例图相关知识和多实例分析

目录 一、用例图相关知识 1. 基本介绍 2. 常用符号 二、用例图实例分析 1. 新闻管理系统 2. 医院病房监护系统 3. 实验上机安排系统 4. 远程网络教学系统 一、用例图相关知识 1. 基本介绍 用例图&#xff08;use case diagram&#xff09;是用户与系统交互的最简表示…

关于“Python”的核心知识点整理大全63

目录 20.2.11 使用 Git 跟踪项目文件 1. 安装Git 2. 配置Git 3. 忽略文件 .gitignore 注意 4. 提交项目 20.2.12 推送到 Heroku 注意 20.2.13 在 Heroku 上建立数据库 20.2.14 改进 Heroku 部署 1. 在Heroku上创建超级用户 注意 注意 20.2.11 使用 Git 跟踪项目文件…

C语言编译器(C语言编程软件)完全攻略(第二十六部分:C-Free使用教程(使用C-Free编写C语言程序))

介绍常用C语言编译器的安装、配置和使用。 二十六、C-Free使用教程&#xff08;使用C-Free编写C语言程序&#xff09; 1、安装C-Free 5.0 C-Free 是一款国产的Windows下的C/C IDE&#xff0c;最新版本是 5.0&#xff0c;整个软件才 14M&#xff0c;非常轻巧&#xff0c;安装…

Spring见解2

3.基于注解的IOC配置 学习基于注解的IOC配置&#xff0c;大家脑海里首先得有一个认知&#xff0c;即注解配置和xml配置要实现的功能都是一样的&#xff0c;都是要降低程序间的耦合。只是配置的形式不一样。4 3.1.创建工程 3.1.1.pom.xml <?xml version"1.0" e…

python面试pytorch面试

python面试 python中啥类型是不可更改的&#xff0c;啥类型是可以更改的 为什么Python执行速度慢&#xff0c;我们如何改进它&#xff1f; 自己总结&#xff1a; 1c语言属于编译型语言&#xff1a; 它的代码经过编译后再运行&#xff0c;执行速度快&#xff1b;不能跨平台&am…

SpringIOC之support模块DelegatingMessageSource

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)创建并初始化TcpServer实例 以及 启动

对于一个TcpServer来说&#xff0c;它的灵魂是什么&#xff1f;就是需要提供一个事件循环EventLop(EventLoop)&#xff0c;不停地去检测有没有客户端的连接到达&#xff0c;有没有客户端给服务器发送数据&#xff0c;描述的这些动作&#xff0c;反应堆模型能够胜任。当服务器和…

图像处理中的DCT变换

图像处理中的DCT变换 Discrete Cosine Transform&#xff0c;离散余弦变换。 来源及公式推导&#xff0c;可以查看下面链接&#xff0c;介绍的比较详细&#xff0c;这里就不再重复说明了&#xff1a; 详解离散余弦变换&#xff08;DCT&#xff09; - 知乎 (zhihu.com)DCT变换…

DS|图(连通与生成树)

题目一&#xff1a;DS图 -- 图的连通分量 题目描述&#xff1a; 输入无向图顶点信息和边信息&#xff0c;创建图的邻接矩阵存储结构&#xff0c;计算图的连通分量个数。 输入要求&#xff1a; 测试次数t 每组测试数据格式如下&#xff1a; 第一行&#xff1a;顶点数 顶点…

VsCode开发工具的入门及基本使用

大家好&#xff0c;我是[阿猫的故乡]。很高兴能有机会与大家分享关于VsCode开发工具的入门及基本使用的知识。 文章目录 文章目录 前言 一、VsCode是什么&#xff1f; 二、使用步骤 1.如何下载 2.如何使用 总结 前言 在开发者社区中&#xff0c;Visual Studio Code&#xff08…

IPv6路由协议---IPv6静态路由

IPv6路由协议 路由是数据通信网络中最基本的要素。路由信息就是知道报文发送的路径信息,路由的过程就是报文转发的过程。 根据路由目的地的不同,路由可划分: 1.网段路由:目的地为网段,IPv4地址子网掩码长度小于32位或IPv6地址前缀长度小于128位。 2.主机路由:目的地为主…

算法第十一天-递增顺序搜索树

递增顺序搜索树 题目要求 解题思路 1.二叉搜索树&#xff08;BST&#xff09; 2.任意两个不同节点 遇到二叉搜索树&#xff0c;立即想到这句话&#xff1a;[二叉搜索树&#xff08;BST&#xff09;的中序遍历是有序的]。这是解决所有二叉搜索树问题的关键。 要求BST的任意两…