药品销售管理系统

一、系统总体设计

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

  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);
}

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

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

相关文章

astadmin安装querylist插件Puppeteer

我本来是想在linux服务器上安装&#xff0c;折腾了一天也没安装成功&#xff0c;由于急着用&#xff0c;就先做window10上安装了&#xff0c;以后有时间再研究centos7上安装 一 首先需要安装fastadmin 框架和querylist插件 这个大家可以自行安装&#xff0c;querylist安装地址…

AI硬件2——SIPEED MaixCube(Kendryte K210)基础使用

系列文章目录 官方网站 开发文档 文章目录 系列文章目录前言一、特点介绍1、MaixPy2、KPU3、MaixPy IDE4、kmodel 二、环境准备1、USB 驱动安装1&#xff09;Linux2&#xff09;Windows 2、更新固件3、串口工具1&#xff09;连接硬件2&#xff09;Windows串口工具3&#xff09…

PHP进阶-实现网站的QQ授权登录

授权登录是站点开发常见的应用场景&#xff0c;通过社交媒体一键授权可以跳过注册站点账户的繁琐操作。本文将讲解如何用PHP实现QQ授权登录。首先&#xff0c;我们需要申请QQ互联开发者账号获得APPID和密钥&#xff1b;接着&#xff0c;我们下载QQ官方SDK&#xff1a;PHP SDK v…

电商API-获取拼多多商品详情数据精准价格API测试示例

pinduoduo.item_get_app_pro获取拼多多商品详情数据 如何获取apikey&#xff1f; 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff…

20 太空漫游

效果演示 实现了一个太空漫游的动画效果&#xff0c;其中包括火箭、星星和月亮。当鼠标悬停在卡片上时&#xff0c;太阳和星星会变成黄色&#xff0c;火箭会变成飞机&#xff0c;月亮会变成小型的月亮。整个效果非常炫酷&#xff0c;可以让人想起科幻电影中的太空漫游。 Code &…

淘宝商品详情API接口(item_get-获得淘宝商品详情)主图,属性,sku,价格,搜索商品列表

淘宝开放平台提供了API接口&#xff0c;允许开发者获取淘宝商品的相关信息。为了获取商品详情&#xff0c;您可以使用 item_get API接口。以下是如何使用此API接口来获取商品的主图、属性、SKU、价格以及搜索商品列表的简要说明&#xff1a; 公共参数 名称类型必须描述keyStr…

面试之线程状态

1.线程有哪些状态 1.1Java线程的六种状态 Java 线程六种状态 新建 当一个线程对象被创建&#xff0c;但还未调用 start 方法时处于新建状态 此时未与操作系统底层线程关联 可运行 调用了 start 方法&#xff0c;就会由新建进入可运行 此时与底层线程关联&#xff0c;由操作…

【Turtle库】圣诞树

在寒冷的冬季&#xff0c;没有什么比一棵亮丽的圣诞树更能带给我们温暖和快乐。而现在&#xff0c;我们将使用Python编程语言来绘制这样一棵美丽的圣诞树。 首先&#xff0c;我们需要导入Python的turtle模块&#xff0c;它可以帮助我们绘制图形。然后&#xff0c;我们可以定义一…

深入Pandas(二):高级数据处理技巧

文章目录 系列文章目录引言时间序列分析可视化示例 高级数据分析技术分组与聚合操作时间序列分析 高级数据操作数据合并与重塑示例&#xff1a;数据合并merge示例&#xff1a;数据合并concat示例&#xff1a;数据重塑 - 透视表 高级索引技巧 结论 系列文章目录 Python数据分析…

Springcloud 微服务实战笔记 Eureka

服务治理 服务注册 在服务治理框架中&#xff0c;通常都会构建一个注册中心&#xff0c;每个服务单元向注册中心登记自己提供的服务&#xff0c;将主机与端口号、版本号、通信协议等一些附加信息告知注册中心&#xff0c;注册中心按服务名分类组织服务清单。当服务启动后&…

docker kingbase

docker kingbase run 命令 docker run -tid \ -e ENABLE_CIyes \ -e NEED_STARTyes \ -e DB_MODEoracle \ -e DB_USERkingbase \ -e DB_PASSWORD123456 \ --privileged \ -p 4321:54321 \ -v /home/admin/SoftWare/volume/kingbase/userdata/data:/home/kingbase/userdata/da…

Unity组件开发--传送点

本组件仅实现A传送点到B传送的功能&#xff0c;是可以双向传送的&#xff0c;如果只要单向传送&#xff0c;可以另外改脚本实现&#xff1b; 先看效果&#xff1a; unity组件传送点演示 1.传送组件shader是怎么写的&#xff1a;这种效果的实现方案 shader编辑器是这样的&#…