C/C++实现药房管理系统

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

main.cpp代码如下:

#include<iostream>
using namespace std;
#include "Register.h"        //登录程序 
#include "head.h"    //菜单程序 
#include "function.h"    //功能程序 
    
int main()
{
    int choose = 0,choose2;
    m1.news();    //存入药品信息 
    while(1)
    {
    cout << "请选择:\n<*>1:管理员\n<*>2:用户\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<'0' or 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<windows.h>
#include <fstream>
#include <istream>
#include <sstream>
#include <iomanip>

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 << "\n请输入药品编号:"; cin >> word;
    fprintf(fp,"%s",word); fprintf(fp,"    ");
    cout << "\n请输入药品名称:"; cin >> word;
    fprintf(fp,"%s",word); fprintf(fp,"    ");
    cout << "\n请输入药品类型:"; cin >> word;
    fprintf(fp,"%s",word); fprintf(fp,"    ");
    cout << "\n请输入药品功能:"; cin >> word;
    fprintf(fp,"%s",word); fprintf(fp,"    ");
    cout << "\n请输入药品容量:"; cin >> word;
    fprintf(fp,"%s",word); fprintf(fp,"    ");
    cout << "\n请输入药品包装:"; cin >> word;
    fprintf(fp,"%s",word); fprintf(fp,"    ");
    cout << "\n请输入药品价格:"; cin >> word;
    fprintf(fp,"%s",word); fprintf(fp,"    ");
    cout << "\n请输入药品数量:"; cin >> word;
    fprintf(fp,"%s",word); fprintf(fp,"    ");
    cout << "\n请输入药品剩余保质期:"; cin >> 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 << "1.是    2.否 : "; cin >> 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 << "\n请输入药品编号:"; cin >> backm;
    fprintf(fp,"%s",backm); fprintf(fp,"    ");
    cout << "\n请输入药品名称:"; cin >> backm;
    fprintf(fp,"%s",backm); fprintf(fp,"    ");
    cout << "\n请输入退货数量:"; cin >> backm;
    fprintf(fp,"%s",backm); fprintf(fp,"    ");
    cout << "\n请输入退货原因:"; cin >> 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 <fstream>

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

相关推荐

  1. C/C++实现药房管理系统

    2024-02-22 13:32:02       25 阅读
  2. C++药房管理系统设计模块代码分析

    2024-02-22 13:32:02       31 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-22 13:32:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-22 13:32:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-22 13:32:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-22 13:32:02       20 阅读

热门阅读

  1. 深入URP之Shader篇15: Shader关键字和变体

    2024-02-22 13:32:02       28 阅读
  2. python保存网页为PDF

    2024-02-22 13:32:02       25 阅读
  3. 量化粒度是什么???

    2024-02-22 13:32:02       22 阅读
  4. Handler原理总结

    2024-02-22 13:32:02       29 阅读