一、系统总体设计
该系统是针对医药销售行业所设计,主要用来管理销售药品所产生的额大量信息。该系统可帮助从医人员便捷管理药品销售信息,极大的提高工作效率,降低人工操作的失误率,为药品的销售者和购买者提供便利。根据对需求的分析,确定了该系统需要实现一下几个功能:
- 系统以菜单方式工作;
- 录入信息用文件保存;
- 能完成对药品信息的录入、修改;
- 能统计某药品的销售量,销售额;
- 能查询药品分类;
- 能按药品分类输出药品详单。
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);
}