程序使用的是C/C++语言,可以作为课程设计练习,实现了药房的基本功能管理,代码分为main.cpp、function.h、head.h、Register.h四个文件。

main.cpp代码如下:

#include
using namespace std;
#include “Register.h”//登录程序
#include “head.h” //菜单程序
#include “function.h” //功能程序

int main()
{
int choose = 0,choose2;
m1.news();//存入药品信息
while(1)
{
cout << "请选择:\n1:管理员\n2:用户\n其余选项均退出程序,请您三思!\n”;
cin >> choose;
if(choose==1) //管理员登录
{
if(admin1()) //账号密码登录
{
int adchoose = 1;
head();//标题
while(adchoose)
{
AdminMenu(); //管理员菜单
cin >> adchoose;
switch(adchoose)
{
case 0: break;
case 1:
m1.check(); system(“PAUSE”); system(“CLS”); break;
case 2:
m1.revise(); break;
case 3:
m1.move(); m1.check(); system(“PAUSE”); system(“CLS”); break;
case 4:
m1.query(); break;
case 5:
m1.del(); break;
case 6:
m1.print(); break;
case 7:
m1.openback(); break;
default: cout<<"输入错误!!!\n"; break;
}
}
}
}
else if(choose==2) //用户登录
{
if(user1())//账号密码登录
{
int uschoose=1;
char usechoose;
head();
while(uschoose)
{
userMenu();
cin >> usechoose;
if(usechoose’9′){
cout << "输入错误!!!\n\n";
continue;
}
switch(usechoose)
{
case ‘0’: uschoose=0;break;
case ‘1’:
m1.usercheck(); system(“PAUSE”); system(“CLS”); break;
case ‘2’:
m1.query(); break;
case ‘3’:
m1.choice(); break;
case ‘4’:
m1.back(); break;
default: cout << "输入错误!!!\n"; break;
}
}
}
}
else return 0;
}
}
function.h代码如下:

//功能程序
#include
#include
#include
#include
#include

class Medicine
{
public:
void news(); //导入信息
void check(); //查看药品
void usercheck(); //用户查看药品
void revise(); //添加/移除药品
void del();//打开文件操作
void move(); //移动药品
void query(); //查询药品
void print(); //输出过期药品
void choice(); //选择药品
void back(); //用户退货
void openback(); //查看退货信息
private:
int sum,numb[100]; //药品数量
string id[100],name[100],type[100];//编号、名称、类型
string function[100],volume[100],packing[100];//功能、容量、包装
string price[100],num[100],days[100];//单价、库存、剩余天数
void add();//添加药品
void wordcheck();//输出药品标题
void uscheck(int x); //输出药品
void typecheck();//按类型查询药品
void pricecheck();//按价格查询药品
}m1;

void Medicine::news() //读取文件中的药品信息
{
string buf;
ifstream fp;
fp.open(“medicine.txt”,ios::in); //open为ifstream的成员函数,功能为打开文件,并将它与流关联 ios::in表示读流的方式,表示打开模式。
if(!fp.is_open()) //成员函数is_open检查流是否有关联文件,即打开成功与否,成功返回true,失败返回false
{
cout<<"打开文件失败!!\n";// 返回异常;
}
int j=0; //使用操作符>>,将数据传输到对应的变量中
while (getline(fp,buf))
{
fp>>id[j]>>name[j]>>type[j]>>function[j]>>volume[j]>>packing[j]>>price[j]>>num[j]>>days[j];
numb[j]=j;
j++;
}
sum=j;
//cout << type[3] <<" "<< function[5]<<endl; //检测
fp.close();//关闭流
}

void Medicine::revise()
{
int rechoose;
cout << "\n 1: 添加药品\n 2: 移除药品\n其余选项均返回,请选择:”;
cin >> rechoose;
if(rechoose==1)
{
m1.add(); m1.news();
}
else if(rechoose==2)
{
m1.del();
}
system(“PAUSE”); system(“CLS”);
}

void Medicine::wordcheck() //输出药品的标题文字
{
cout <<endl;
cout<<"编号:"<<""<<setw(15)<<left<<"药品名称:"<<setw(9)<<left<<"类型:"<<setw(88)<<left<<"功能:";
cout<<setw(8)<<left<<"价格:"<<setw(8)<<left<<"库存:"<<setw(12)<<left<<"剩余保质期:"<<"容量:"<<endl;
}

void Medicine::uscheck(int x) //输出药品
{
cout<<id[numb[x]]<<""<<setw(15)<<left<<name[numb[x]]<<setw(9)<<left<<type[numb[x]]<<setw(88)<<left<<function[numb[x]]<<setw(8)<<left<<price[numb[x]];
cout<<setw(8)<<left<<num[numb[x]]+packing[numb[x]]<<setw(12)<<left<<days[numb[x]]+"天"<<volume[numb[x]]<<"/"<<packing[numb[x]]<<endl;
}

void Medicine::check() //输出药品信息
{
int te=1;
m1.wordcheck();
for(int i=0;i<sum;i++)
{
cout<<setw(4)<<left<<te; te++;
m1.uscheck(i);
}
cout<<endl;
}

void Medicine::usercheck()
{
int te=1;
m1.wordcheck();
for(int i=0;i<sum;i++)
{
if(num[numb[i]]!=”0″)
{
cout<<setw(4)<<left<<te; te++;
m1.uscheck(i);
}
}
cout<<endl;
}

void Medicine::add() //添加药品信息
{
char word[100]=”*”,ent = ‘\n’;
FILE *fp;
fp = fopen(“Medicine.txt”,”a”);
fprintf(fp,”%c”,ent);
cout <> word;
fprintf(fp,”%s”,word); fprintf(fp,””);
cout <> word;
fprintf(fp,”%s”,word); fprintf(fp,””);
cout <> word;
fprintf(fp,”%s”,word); fprintf(fp,””);
cout <> word;
fprintf(fp,”%s”,word); fprintf(fp,””);
cout <> word;
fprintf(fp,”%s”,word); fprintf(fp,””);
cout <> word;
fprintf(fp,”%s”,word); fprintf(fp,””);
cout <> word;
fprintf(fp,”%s”,word); fprintf(fp,””);
cout <> word;
fprintf(fp,”%s”,word); fprintf(fp,””);
cout <> word;
fprintf(fp,”%s”,word);
fclose(fp);
cout << endl;
cout << "药品添加成功!\n";
}

void Medicine::del() //打开文件操作
{
cout << "请在文件中操作。\n\n";
Sleep(1000);
system(“start Medicine.txt”);
system(“PAUSE”); system(“CLS”);
}

void Medicine::move() //移动药品信息
{
int medi,down,tem;
m1.check();
cout << "\n请输入要移动的药品编号:";
cin >> medi;
cout << "请输入想要移动到的位置序号:";
cin >> down;
if(down>=sum) down=sum;
if(medi>down)
{
numb[down-1]=medi-1;
for(int k=down;k<medi;k++)
numb[k]–;
}
else if(medi<down)
{
numb[down-1]=medi-2;
for(int k=medi-1;k<down;k++)
numb[k]++;
}
}

void Medicine::query() //查询药品信息
{
int qchoose;
askMenu();
cin >> qchoose;
if(qchoose==1){
cout << endl;
cout << " 1: 中药\n” <<endl<< " 2: 西药\n”<<endl<<" 3: 其它\n” << "其余选项均返回,请选择:";
m1.typecheck();
}
else if(qchoose==2){
cout << endl;
cout << "输入价格区间啊a b (a<b): ";
m1.pricecheck();
}
else
cout <<"输入错误!!!"<<endl;
system(“PAUSE”); system(“CLS”);
}

void Medicine::typecheck() //按类型输出药品
{
int te=1;
int tychoose;
cin>>tychoose;
m1.wordcheck();
if(tychoose==1)
{
for(int i=0;i<sum;i++)
{
if(type[numb[i]]==”中药”)
{
cout<<setw(4)<<left<<te; te++;
m1.uscheck(i);
}
}
cout<<endl;
}
else if(tychoose==2)
{
for(int i=0;i<sum;i++)
{
if(type[numb[i]]==”西药”)
{
cout<<setw(4)<<left<<te; te++;
m1.uscheck(i);
}
}
cout<<endl;
}
else
{
for(int i=0;i<sum;i++)
{
if(type[numb[i]]!=”中药” && type[numb[i]]!=”西药”)
{
cout<<setw(4)<<left<<te; te++;
m1.uscheck(i);
}
}
cout<<endl;
}
}

void Medicine::pricecheck()//按价格输出药品
{
int price1,price2,te=1,prnum=0;
cin >> price1 >> price2;
for(int i=0;i<sum;i++)
{
if(atoi(price[numb[i]].data())>=price1 && atoi(price[numb[i]].data())<=price2){
prnum++;
if(prnum==1){
cout << "\n价格在"<<price1<<" ~ "<<price2<<"的药品有:\n";
m1.wordcheck();
}
cout<<setw(4)<<left<<te; te++;
m1.uscheck(i);
}
}
if(prnum==0)
cout << "\n无该价格区间的药品。\n";
cout << endl;
}

void Medicine::print()//打印过期药品信息
{
int pnum=0,te=1,prchoose;
int a[100];
for(int i=0;i<sum;i++){
if(days[numb[i]]==”0″)
{
a[pnum]=numb[i];
pnum++;
if(pnum=1) m1.wordcheck();
cout<<setw(4)<<left<<te; te++;
m1.uscheck(i);
}
}
cout << endl;
if(pnum==0){
cout << "\n无过期药品。\n";
system(“PAUSE”); system(“CLS”);
}
else
{
cout << "是否打开文件删除过期药品?\n";
cout <> prchoose;
if(prchoose==1)
{
cout <<"过期药品 ";
for(int i=0;i<pnum;i++)
{
if(i!=0) cout << "、";
cout << name[numb[a[i]]];
}
cout <<" 在第 ";
for(int i=0;i<pnum;i++)
{
if(i!=0) cout << "、";
cout << a[i]+1 ;
}
cout <<" 行。"<<"(操作后需重新登入)"<<endl;
m1.del();
}
else if(prchoose==2){
system(“PAUSE”); system(“CLS”);
}
else{
cout<<"输入错误!!!"<<endl;
system(“PAUSE”); system(“CLS”);
}
}
}

void Medicine::choice()
{
string ch_id;
int right=0,chchoice;
m1.usercheck();
cout<<"请输入选择的药品编号: ";
cin >> ch_id; cout << endl;
for(int i=0;i<sum;i++)
{
if(id[numb[i]]==ch_id)
{
right=1;
if(num[numb[i]]!=”0″)
{
cout <<name[numb[i]]<<"的价格为:"<<price[numb[i]]<<endl<<"是否购买? 1.是 2.否 :";
cin >> chchoice;
if(chchoice==1)
{
cout << "购买成功!";
char str[100];
itoa(atoi(num[numb[i]].data())-1, str,10);
num[numb[i]] = str;
}
if(chchoice!=1 and chchoice!=2)
cout << "输入错误!!!";
}
else
cout <<name[numb[i]]<<"的库存不足。";
break;
}
}
if(right==0)
cout << "无该编号的药品。"<<endl;
system(“PAUSE”); system(“CLS”);
}

void Medicine::back()
{
char backm[100]=”*”,ent = ‘\n’;
FILE *fp;
fp = fopen(“back.txt”,”a”);
cout <> backm;
fprintf(fp,”%s”,backm); fprintf(fp,””);
cout <> backm;
fprintf(fp,”%s”,backm); fprintf(fp,””);
cout <> backm;
fprintf(fp,”%s”,backm); fprintf(fp,””);
cout <> backm;
fprintf(fp,”%s”,backm); fprintf(fp,””);
fprintf(fp,”%c”,ent);
fclose(fp);
cout << endl;
cout << "退货成功!祝您生活愉快!欢迎下次光临!\n";
system(“PAUSE”); system(“CLS”);
}

void Medicine::openback()
{
cout << "已打开退货记录,操作后请删除数据。\n";
Sleep(1000);
system(“start back.txt”);
system(“PAUSE”); system(“CLS”);
}
head.h代码如下:

//菜单程序

void head() // 标题
{
system(“mode con cols=165”); //调整控制台显示的高度
system(“color F0”);//修改背景色前景色
for(int i=0; i<79; i++)
{
cout << "*";
cout << " ";
}
cout << "\n*";
for(int i=0; i<74; i++)
cout << " ";
cout << "药品管理软件";
for(int i=0; i<69; i++)
cout << " ";
cout << "*\n";
for(int i=0;i<79;i++)
{
cout << "*";
cout << " ";
}
cout << "\n";
}

void userMenu()//用户菜单
{
cout << " 0: 退出\n” <<endl<< " 1: 查看药品信息\n\n” <<" 2: 查询药品\n\n”;
cout << " 3: 购买药品\n”<<endl<<" 4: 退货\n”<<endl;
cout << "请选择需要进行的操作:" ;
}

void AdminMenu() //管理员菜单与功能实现
{
cout << " 0: 退出\n” <<endl<< " 1: 查看药品信息\n” <<endl;
cout << " 2: 添加/移除药品\n” <<endl<< " 3: 移动药品\n” <<endl;
cout << " 4: 查询药品\n” <<endl<< " 5: 修改药品\n”<<endl <<" 6: 打印过期药品信息\n\n”;
cout << " 7: 查看退货信息\n\n”<<"请选择需要进行的操作:" ;
}

void askMenu()//查询药品菜单
{
cout << endl;
cout << " 1: 按类型查询\n” <<endl<< " 2: 按价格区间查询\n”<<endl;
cout << "其余选项均返回,请选择:";
}
Register.h代码如下:

//用户登录系统
#include

#define UserNum 20
struct user
{
char account[7];//用户账号
char password[7]; //用户密码
} us[UserNum];

int admin1() //管理员登录
{
int ff;
char admin[5] = “root”; //管理员账号密码
char password[7] = “123456”;
char t1[5], t2[7];
int i=0;
cout << "请输入账号:";
while (1)
{
cin >> t1;
if ( strcmp(t1, admin) == 0)
{
cout << "请输入密码:";
break;
}
else
{
cout << "账号不存在, 请重新输入:";
}
}
while (1)
{
cin >> t2;
if ( strcmp(t2, password) == 0)
{

printf(“通过!\n”);
break;
}
else
{
printf(“密码错误,请重新输入:”);
}
}
return 1;
}

int user1()//用户登录
{
int i, flag = 0;
char root[7], password[7];
cout << "请输入账号:";
cin >> root;
cout << "请输入密码:";
cin >> password;
ifstream in(“用户账户与密码.txt”);//文件流输入,账号存入us数组中
for ( i=0; i<UserNum; i++)
{
in >> us[i].account;
in >> us[i].password;
}
for (i=0; i<UserNum; i++)
{
if (strcmp(root, us[i].account) == 0)
{
if (strcmp(password, us[i].password) == 0)
{
flag = 1;
}
}
}
if (flag == 0)
{
cout << "您的输入有误\n";
}
return flag;
}