您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 源程序(医院药房药品管理系统C--)
1源程序:#includefstream.h//包含文件读写#includeiostream.h#includestring.h//包含strcmp()字符是否相等#includestdlib.h//包含system(cls)清屏#defineMAX60//下列字符数组的大小structDate{//日期charyear[MAX];//年charmonth[MAX];//月charday[MAX];//日};structGoods{//药品信息charname[MAX];//药品名称charprice[MAX];//药品价格charnumber[MAX];//药品数量charcost[MAX];//药品总价charkind[MAX];//药品的种类Dateindate;//入库日期Datexiaoqi;//到期时间Goods*next;//下一个结点};classCangkuguanli{//类定义与实现private:intlength;//客户数量Goods*head;//列表的头结点Goods*current;//当前结点public:Cangkuguanli()//构造函数{head=newGoods;//创建头结点current=head;current-next=NULL;length=0;//长度为0}voidCreatlist()//创建新的列表{charg='Y';ints=0;length=0;//初始长度为0;current=head;do{2Goods*temp=newGoods;//构建新结点信息length++;//每加一个结点链表长度增1temp-next=NULL;cout请输入药品名称:;cintemp-name;cout请输入单价:;cintemp-price;cout请输入药品数量:;cintemp-number;cout请输入总费用:;cintemp-cost;cout请输入日期(********):;cintemp-indate.yeartemp-indate.monthtemp-indate.day;cout请输入药品有效期(********):;cintemp-xiaoqi.yeartemp-xiaoqi.monthtemp-xiaoqi.day;cout请输入药品种类:;cintemp-kind;if(head==NULL){head=temp;current=temp;}//head头指针,current尾指针else{current-next=temp,current=temp;}do{coutnext?(YN);//是否继续存入新产品cing;if(g!='Y'&&g!='N'){cout\nerror!!!!\n;}}while(g!='Y'&&g!='N');}while(g=='Y');//判断是否继续插入新结点}voidOpen()//打开一个数据文件,并建立链表关联和文件中的记录对应{charfname[20];//文件名称coutinputthenameofthefile\n;cinfname;//输入要打开的文件名ifstreaminfile(fname);//创建输入文件流infilelength;cout\nlengthis:lengthendl;//if(length==0)cout数据为空\n;for(inti=0;ilength;i++)//创建新的结点保存文件的数据{Goods*t=newGoods;t-next=NULL;3infilet-namet-pricet-numbert-costt-kindt-indate.yeart-indate.montht-indate.day;if(head==NULL){head=t;current=t;}//跟上面的链表创建相似else{current-next=t,current=t;}}infile.close();//关闭文件流}//openvoidSave()//保存链表信息到文件{if(length==0){cout列表为空不需存盘\n;return;}charfname[20];//文件名称coutinputthenameofthefileyouwanttoputdatain\n;cinfname;ofstreamoutfile(fname);//创建输出文件流Goods*temp=head-next;outfilelengthendl;//先写入文件的长度while(temp!=NULL)//把所有结点写入到文件fname{outfiletemp-nametemp-pricetemp-numbertemp-costtemp-kindtemp-indate.yeartemp-indate.monthtemp-indate.daytemp-xiaoqi.yeartemp-xiaoqi.monthtemp-xiaoqi.dayendl;//写入每个结点信息temp=temp-next;}outfile.close();//关闭文件流}voidprintinfor(Goods*current)//输出一个结点的信息到字符界面{if(current==NULL){cout\n元素为空!!!\n;return;}cout.fill('');coutcurrent-name;4cout.width(8);cout.width(8);coutcurrent-price;cout.width(8);coutcurrent-number;cout.width(8);coutcurrent-cost;//就是给current-cost10个字符输出,不够往前面加‘’空格cout.width(10);coutcurrent-kind;cout.width(10);coutcurrent-indate.year.current-indate.month.current-indate.day;cout.width(10);coutcurrent-xiaoqi.year.current-xiaoqi.month.current-xiaoqi.day;coutendl;}//printinforvoidShow()//输出所有结点信息到字符界面{current=head-next;if(current==NULL){cout列表为空\n;return;}cout.fill('');cout.width(2);cout名称;cout.width(8);cout价格;cout.width(8);cout数量;cout.width(8);cout总费用;cout.width(10);cout药品的种类;cout.width(15);cout购进时间;cout.width(15);cout有效期;coutendl;//输出属性列while(current!=NULL){//循环输出所有结点5printinfor(current);current=current-next;}}//showGoods*Searchindate(Datet){//按购入日期搜索返回结点指针temp//结构体t含有t.yeart.montht.day三个信息块Dated;boolf=false;Goods*temp;current=head-next;while(current!=NULL){d=current-indate;if(!strcmp(d.year,t.year)&&!strcmp(d.month,t.month)&&!strcmp(d.day,t.day)){temp=current;f=true;break;}current=current-next;}if(f==false){cout\n没有满足要求的信息\n;returnNULL;}returntemp;}voidQueryindate()//按入库日期查询{Datet;coutinputthedate(********):;cint.yeart.montht.day;printinfor(Searchindate(t));}//Queryindate()Goods*Searchname(charr[])//搜索药品名返回结点指针temp{Goods*temp;current=head-next;boolf=false;while(current!=NULL){if(strcmp(current-name,r)==0){6temp=current;f=true;break;}current=current-next;}if(f==false){cout\n商品名为:r的商品不存在\n;returnNULL;}returntemp;}voidQueryname()//按药品名查询{charr[MAX];coutinputthename:;cinr;printinfor(Searchname(r));}voidQuery()//查询函数一个次级菜单{charm;do{cout**********************************************************endl;cout*******a按入库的时间查询***********endl;cout*******b按药品的名称查询***********endl;cout*******c退出***********endl;cout**********************************************************endl;cinm;switch(m){//分别调用按不同查询方式下的函数case'a':Queryindate();break;case'b':Queryname();break;case'c':return;default:couterror!!;}}while(m!='h');}//QueryvoidRemovebynumber()//按总量删除某个结点{chart[MAX];//需要删除的总量值boolf=false;//表示是否找到满足要求的结点Goods*temp;//指向找到的结点,并删除7cout请输入药品的数量:;cint;current=head;while(current-next!=NULL){if(strcmp(current-next-number,t)==0)//判断是否满足条件{temp=current-next;current-next=temp-next;length--;//没删除一个结点,链表长度减1f=true;deletetemp;//释放结点cout已删除此药品\n;//break;此处屏蔽break,也就是说找到第一个满足条件的结点,并不退出循环,而是继续删除}else{current=current-next;}}if(f==false)//false没有改动,表示没有满足条件的结点{cout此药品不存在,无须删除\n;}}//RemovebynumbervoidRemovebyname()//按名称删除某个结点{chart[20];boolf=false;;Goods*temp;cout请输入药
本文标题:源程序(医院药房药品管理系统C--)
链接地址:https://www.777doc.com/doc-5396669 .html