C++课设——药品管理系统

目 录


题目部分


题目:药品管理软件

功能要求:
1. 用户及权限管理;
2. 药品入库、出库;
3. 药品架位管理;
4. 药品信息查询、修改;
5. 药品过期提示,打印出过期药品架位信息供工作人员将这些药品下架;
6. 过期药品下架后将这些药品信息导入到过期药品表或删除。



代码部分


创建一个 用户账户与密码.txt 文件,将以下账号密码存入

aaaaaa		111111
lyl111		123456
ljb333		246810
lc4444		258058
lyy555		013579
25317o		253172

创建一个 medicine.txt 文件,将以下数据存入


0001    金银花    中药    清热解毒,能抑制与杀灭咽喉部的病原菌,对老人和儿童有抗感染功效。    50克    袋    60元    15     300
0002    降香    中药    能化瘀止血定痛,用于外伤出血、跌打损伤、瘀血肿痛。    1斤    袋    10元    30     43
0003    藿香    中药    快气,和中,辟秽,祛湿。治感冒暑湿,寒热,头痛,胸闷,呕吐泄泻,疟疾,口臭。    1斤    袋    25元    5     41
0004    黄芩    中药    清热燥湿,泻火解毒,止血,安胎,降血压。用于湿热痞满,泻痢,血热吐衄,痈肿疮毒。    1斤    袋    20元    8     60
0005    龙胆    中药    具有清热、泻肝、定惊之功效。主治骨间寒热、惊病邪气,继绝伤,定五脏,杀虫毒。    1斤    袋    50元    25     34
0006    雪菊    中药    清热解毒、化湿止痢、解酒护肝、降血脂、降血压、降血糖、活血化瘀、胃健脾    250克    瓶    88元    7     24
0007    丹参    中药    活血祛瘀,安神宁心,排脓,止痛。治痛经,经闭,血崩带下,骨节疼痛,惊悸不眠,恶疮肿毒。    1斤    袋    13元    30     52
0008    灵芝    中药    益气血、安心神、健脾胃。主虚劳、心悸、失眠、头晕、久咳气喘、冠心病、矽肺、肿瘤。    1斤    盒    200元    3     23
0009    麝香    中药    具有开窍醒神,活血散结,止痛消肿,催生下胎的功效,治热病神昏,中恶昏迷,血瘀经闭等。    1克    瓶    70元    10     10
0010    999感冒灵    中西药    解热镇痛。用于感冒引起的头痛,发热,鼻塞,流涕,咽痛。    9袋  盒    15元    120     300
0011    银胡感冒散    中药    疏风解表,清热解毒。用于风热感冒所致的恶寒发热,鼻塞喷嚏,咳嗽,头痛,全身不适。    3袋    盒    43元    50     43
0012    连花清瘟胶囊    中药    清瘟解毒,宣肺泄热。用于治疗流行性感冒属热毒袭肺证。    10袋    盒    30元    30     100
0013    健胃消食片    中药    有健脾、和胃、消食作用,用来治疗脾胃虚弱导致的食积证。    8片    板    5元    0    45
0014    维生素C片    西药    用于预防和治疗坏血病以及各种急、慢性传染疾病以增强机体抵抗力辅助治疗。    10片    盒    10元    100     40
0015    阿莫西林胶囊    西药    适用于呼吸道感染、急性单纯性淋病、伤寒及钩端螺旋体病。    10片    盒    12元    25    32

创建一个 back.txt 文件,将以下数据存入

编号     名称     数量   退货原因

创建一个 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 文件,代码如下:

//用户登录系统 
#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;
}

创建一个 function.h 文件,代码如下:

//功能程序 
#include<windows.h>

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

创建一个 main.cpp 文件,代码如下:

#include<bits/stdc++.h>
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;
	} 
}

然后就可以成功运行了。
管理员账号为:root
密码为:123456
用户账号密码在文件中。
除题目要求功能外另加入退货和查看退货信息功能。

C++课设——药品管理系统
C++课设——药品管理系统


上一篇:注册信号


下一篇:Android 第一行代码学习记录