课程设计之医药管理系统

账号:admin

密码:123456

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#define MAXSIZE 9999
struct Yao 
{
	int  id;  //药品编号
	char  name[20];     //药品名称   
	char  type[10];      //药品类型
	float price;      //药品价格
	int   amount;             //药品数量 
	char  remark[50];    //药品备注及功效
	Yao *next;   //next为指向下一结点指针

};
void alter_link(Yao * head);      //修改药品信息函数
int entry();     //登陆界面函数
int welcome();        //药品信息管理主界面
Yao * creat_link(Yao * head,int *count);  //创建药品信息链
Yao * delete_link(Yao * head,int *count); //删除药品信息
void find_link(Yao * head);      //按条件查找药品信息
Yao * insert_link(Yao * head,int *count);  //添加药品信息
void print_link(Yao * head);      //输出药品信息表(包括药品编号、名称、类型、价格、数量、备注功效)
Yao *rank_link(Yao * head,int *count);  //按价格对药品信息进行排序后输出药品信息表
void save_link(Yao * head);     //药品信息保存,以便下次录入
Yao *head=NULL;
int count=0;      //存取药品信息数量
int main()
{
	int i;
	if(entry())     //登录界面
	while(1)
	{
		
		i=welcome();
		if(i==0)
			break;
		switch(i)
		{
			case 1:head=creat_link(head,&count);break;
			case 2:head=insert_link(head,&count);break;
			case 3:head=delete_link(head,&count);break;
			case 4:alter_link(head);break;
			case 5:print_link(head);break;
			case 6:find_link(head);break;
			case 7:rank_link(head,&count);break;
			default:printf("*  您输入的号码选项不存在,请重新输入.....\n");	system("pause");break;
		}
	}
	if(count!=0)
		save_link(head);
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7 | FOREGROUND_INTENSITY | BACKGROUND_GREEN);
	system("cls");
	printf("\n\n\n\n\n\n");
	printf("\t   *************************************************\n");
	printf("\t   *                                               *\n");
	printf("\t   *   感谢您的使用,欢迎下次使用本系统! Bey...    *\n");
	printf("\t   *                                               *\n");
	printf("\t   *************************************************\n");
	printf("\n\n\n");
	return 0;
}
Yao *delete_link(Yao *head,int *count)
{
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12 | FOREGROUND_INTENSITY | BACKGROUND_RED);
	system("cls");
	Yao *p,*q;
	int num;
	if(head==NULL)
	{
		printf("\n 无药品信息进行删除错误!\n");
		system("pause");
	}
	else
	{
		printf("输入要删除的药品编号:");
		scanf("%d",&num);
		p=head;
		while(p!=NULL && p->id!=num)
		{
			q=p;
			p=p->next;
		}
		if(p!=NULL)
		{
			printf("\n");
			if(p==head)
				head=p->next;
			else
				q->next=p->next;
			printf("删除的药品信息是:\n");
			printf("药品编号 药品名称      药品类型 药品价格 药品数量 药品备注及功效\n");
	    	printf("%-9d%-14s%-9s%-9.2f%-9d%s\n",p->id,p->name,p->type,p->price,p->amount,p->remark);
			(*count)=(*count)-1;
			free(p);
			printf("药品已删除,谢谢使用!\n",num);
			system("pause");
		}
		else
		{
			printf("药品编号为%d的药品不存在!\n",num);
			system("pause");
		}
	}
	return head;
}
int entry()                  //登陆界面函数
{
	char sname[30], password[30];       //定义变量存储帐号和密码
	int i;
	for(i=3;i>0;i--)
	{                  //登录界面
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE);    //颜色代码
		system("cls");    //界面刷新
		printf("\n\n\t**************************************************************\n");
		printf("\t*____________________________________________________________*\n");
		printf("\t*                                                            *\n");
		printf("\t*                 医药管理系统登录界面                       *\n");
    	printf("\t*                                                            *\n");
		printf("\t*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*\n");
		printf("\t**************************************************************\n");
		if(i==3)
			printf("友情提示:你有%d次机会!\n",i);   //第一次输入帐号和密码
		else
			printf("友情提示:你还有%d次机会!\n",i);    //第二次和第三次输入
		printf("请输入管理员登录账号: ");           //输入登录帐号
		gets(sname);
		printf("请输入管理员登录密码: ");            //输入登录密码
		gets(password);
		                             //登录帐号和密码验证
		if(!strcmp("admin", sname) && !strcmp("123456", password))
		{
			
			printf("\n\t密码输入正确!欢迎进入\n\n");          //成功登陆
			for(int i = 100;i;i --){
				Sleep(50);
				printf(">");
			}
			printf("\n\n");
			break;
		}
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12 | FOREGROUND_INTENSITY | BACKGROUND_BLUE);
		if(i>1)
		{
			printf("\n\n\t帐号或密码输入错误!请重新输入!\n\n\n\n");       //帐号或密码输入错误提示
			system("pause");
		}
		else
		{
			printf("\n\n\t帐号或密码输入错误次数超过三次!,即将退出\n\n\n\n\n");
			for(int i = 50;i;i --){
				Sleep(50);
				printf(">");
			}
			printf("\n\n");
		}
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE);
	}
	return i;             //返回登录的结果0(假)或1(真)
}



void find_link(Yao * head)                 //按药品信息条件查询 函数
{
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15 | FOREGROUND_INTENSITY | BACKGROUND_GREEN);  //绿色背景和白色字体颜色颜色
	Yao *p;
	system("cls");    //界面刷新(清屏)
	int i,flag;
	while(1)
	{
		flag=1;
		printf("\t  ******************************************\n");
		printf("\t  *               药品查询                 *\n");
		printf("\t  *----------------------------------------*\n");
		printf("\t  *  1  按药品编号      2  按药品名称      *\n");
		printf("\t  *  3  按药品价格      0  退出            *\n");
		printf("\t  *----------------------------------------*\n");
		printf("\t  ******************************************\n");
		printf("*请选择查询条件:");
		scanf("%d",&i);               // 查询条件选项输入
		if(i==0)                      //如果输入0,结束查询操作
		{
			printf("查询操作结束,谢谢使用!\n");
			break;
		}
		p=head;          //链表首地址赋给p
		if(i==1)
		{
			int num;
			printf("请输入药品编号:");     //通过药品编号查询
			scanf("%d",&num);
			while(p!=NULL)
			{
				if(p->id==num)             //找到后输出该药品编号药品的信息
				{
					printf("药品编号 药品名称      药品类型 药品价格 药品数量 药品备注及功效\n");
		            printf("%-9d%-14s%-9s%-9.2f%-9d%s\n",p->id,p->name,p->type,p->price,p->amount,p->remark);
					flag=0;
				}
				p=p->next;
			}
		}
		else if(i==2)
		{
			char n[20];
			printf("请输入药品名称:");          //通过药品名称查询
			scanf("%s",n);
			while(p!=NULL)
			{
				if(strcmp(p->name,n)==0)          //输出该药品名称药品的信息
				{
					flag=0;
			        printf("药品编号 药品名称      药品类型 药品价格 药品数量 药品备注及功效\n");
	            	printf("%-9d%-14s%-9s%-9.2f%-9d%s\n",p->id,p->name,p->type,p->price,p->amount,p->remark);
				}
				p=p->next;
			}
		}
		else if(i==3)                           //通过药品价格查询
		{
			float f;
			printf("请输入药品价格:");
			scanf("%f",&f);
			while(p!=NULL)
			{
				if(p->price==f)               //输出该药品价格药品的信息
				{
					flag=0;
					printf("药品编号 药品名称      药品类型 药品价格 药品数量 药品备注及功效\n");
	            	printf("%-9d%-14s%-9s%-9.2f%-9d%s\n",p->id,p->name,p->type,p->price,p->amount,p->remark);
				}
				p=p->next;
			}
		}
		else
			printf("序号输入错误,请重新输入\n");
		if(p==NULL && flag==1)               //未找到满足输入的条件的药品
		{
			printf("该药品信息不存在,请查证后再进行操作!\n");
		}
		system("pause");                     //按任意键继续
	}
	system("pause");
	return ;
}




Yao *insert_link(Yao *head,int *count)     //条件查询函数
{
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 6 | FOREGROUND_INTENSITY | BACKGROUND_BLUE);  //颜色代码
	system("cls");                            //清屏
	Yao *p,*q,*r;
	char c='y';
	if(head==NULL)                 //链表为空时,退出进行性创建链表
	{
		printf("提示:录入的信息是空的,是否要新添加?(Y/N)\n");
		scanf(" %c",&c);
		if(c == 'N' || c == 'n')	return head;
		if(*(count)==MAXSIZE)     //判断是否超出空间
		{
			printf("空间已满,继续添加错误\n");
			return head;
		}                            //药品信息添加
		p =(Yao *)malloc(sizeof (Yao));
		printf("请输入您要添加药品信息:\n");
		printf("输入药品编号:");
		scanf("%d",&p->id);
		printf("输入药品名称:");
		scanf("%s",p->name);
		printf("输入药品类型:");
		scanf("%s",p->type);
		printf("输入药品价格:");
		scanf("%f",&p->price);
		printf("输入药品数量:");
		scanf("%d",&p->amount);
		printf("输入药品备注及功效:");
		scanf("%s",p->remark);
		p->next=head;
		head=p;
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 6 | FOREGROUND_INTENSITY | BACKGROUND_BLUE);
		(*count)=(*count)+1;          //添加成功!药品数量加1
		printf("要继续插入信息?(Y/N):");
		scanf(" %c",&c);
	}
	while(c=='y' || c=='Y')      //用循环添加药品信息 非Y(y)时结束添加
	{
		if(*(count)==MAXSIZE)     //判断是否超出空间
		{
			printf("空间已满,继续添加错误\n");
			break;
		}                            //药品信息添加
		p=(Yao *)malloc(sizeof (Yao));
		printf("请输入您要添加药品信息:\n");
		printf("输入药品编号:");
		scanf("%d",&p->id);
		printf("输入药品名称:");
		scanf("%s",p->name);
		printf("输入药品类型:");
		scanf("%s",p->type);
		printf("输入药品价格:");
		scanf("%f",&p->price);
		printf("输入药品数量:");
		scanf("%d",&p->amount);
		printf("输入药品备注及功效:");
		scanf("%s",p->remark);
		q=head;
		while(q!=NULL)     //用循环遍历编号判断是否有重复
		{
			if((q->id)==(p->id))            //保证编号不重复
			{
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12 | FOREGROUND_INTENSITY | BACKGROUND_BLUE);
				printf("\t添加药品编号重复!\n请重新输入新的编号:\n");
				scanf("%d",&p->id);
				continue;
			}
			r=q;
			q=q->next;
		}
		p->next=q;
		r->next=p;
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 6 | FOREGROUND_INTENSITY | BACKGROUND_BLUE);
		(*count)=(*count)+1;          //添加成功!药品数量加1
		printf("要继续插入信息?(Y/N):");
		scanf(" %c",&c);
	}
	return head;
}




void print_link(Yao *head)
{
	system("cls");
	Yao *p;
	p=head;
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 11 | FOREGROUND_INTENSITY | BACKGROUND_BLUE);
    if(p==NULL)
		printf("无药品信息录入,请录入后在输出\n");
	else
		printf("药品编号 药品名称      药品类型 药品价格 药品数量 药品备注及功效\n");
	while(p!=NULL)
	{
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 2 | FOREGROUND_INTENSITY | BACKGROUND_BLUE);
		printf("%-9d%-14s%-9s%-9.2f%-9d%s\n",p->id,p->name,p->type,p->price,p->amount,p->remark);
		p=p->next;
	}
	system("pause");
	return ;
}



Yao *rank_link(Yao *head,int *count)          //药品信息排序函数
{
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 6 | FOREGROUND_INTENSITY | BACKGROUND_BLUE);   //界面颜色设置
	system("cls");
	if(head==NULL)
	{
		printf("\n 无药品信息进行排序!\n");
		system("pause");
		return head;
	}
	Yao *p,*q;
	int i;
	float a,b;
	int  id1;                 //定义药品信息中间变量
	char  name1[20];
	char  type1[10];
	float price1;
	int   amount1;
	char  remark1[50];
	p=head;
	printf("\t******************************************\n");
	printf("\t*             药品信息排序               *\n");
	printf("\t*----------------------------------------*\n");
	printf("\t*  1  按药品编号      2  按药品价格      *\n");
	printf("\t*  0  退出                               *\n");
	printf("\t*----------------------------------------*\n");
	printf("\t******************************************\n");
	printf("输入排序条件:");
	scanf("%d",&i);
	while(i!=1 && i!=2 && i!=0)                  //不满足所给序号时
	{
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12 | FOREGROUND_INTENSITY | BACKGROUND_BLUE); //颜色代码 错误时使用红色字体提示
		printf("输入错误请重新输入:");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 6 | FOREGROUND_INTENSITY | BACKGROUND_BLUE);  //颜色代码 恢复原来的颜色
		scanf("%d",&i);
		if(i==0)                              //退出排序操作
		{
			return head;
			system("pause");
		}
	}
	for(p;p!=NULL;p=p->next)                    //使用选择排序对药品信息排序
	{
		for(q=p->next;q!=NULL;q=q->next)
		{
			if(i==1)       // 按编号排序
			{
				a=p->id;
				b=q->id;
			}
			else            //按价格排序
			{
				a=p->price;
				b=q->price;
			}
			if(a>b)
			{
				id1=p->id;    //对编号交换
				p->id=q->id;
				q->id=id1;
				
				price1=p->price;         //对价格交换
				p->price=q->price;
				q->price=price1;
				
				amount1=p->amount;      //对数量交换
				p->amount=q->amount;
				q->amount=amount1;
				
				strcpy(name1,p->name);    //对名称交换
				strcpy(p->name,q->name);
				strcpy(q->name,name1);
				
				strcpy(type1,p->type);     //对类型交换
				strcpy(p->type,q->type);
				strcpy(q->type,type1);
				
				strcpy(remark1,p->remark);   //对备注及功效交换
				strcpy(p->remark,q->remark);
				strcpy(q->remark,remark1);
			}
		}
	}
	if(i==1 || i==2)             //排序完成提示
	{
		printf("\t*******************************************\n");
		printf("\t*\t       排序完成!                 *\n");
		printf("\t*\t请回主界面选择输出药品信息查看    *\n");
		printf("\t*******************************************\n");
	}
	printf("即将退出程排序序。。。。。\n");
	system("pause");
	return head;
}



int welcome()
{
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE);
	system("cls");
	printf("\n\n\t##############################################################\n");
	printf("\t*                 欢迎使用医药管理系统                       *\n");
	printf("\t*------------------------------------------------------------*\n");
	printf("\t*   1 创建医药链并录入药品信息    2 添加药品信息             *\n");
	printf("\t*   3 删除药品信息                4 修改药品信息             *\n");
	printf("\t*   5 输出药品信息表              6 按条件查找药品信息       *\n");
	printf("\t*   7 药品信息排序                0 退出并保存               *\n");
	printf("\t*------------------------------------------------------------*\n");
	printf("\t*             您需要的药品信息我们应有尽有                   *\n");
	printf("\t##############################################################\n");
	printf("请选择您需要的功能:");
	int i;
	scanf("%d",&i);
	return i;
}



void alter_link(Yao * head)
{
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14 | FOREGROUND_INTENSITY | BACKGROUND_BLUE);
	system("cls");
	int num;
	int i;
	Yao *p;
	printf("输入要修改的药品编号:");
	scanf("%d",&num);
	p=head;
	while(p!=NULL && p->id!=num)
	{
		p=p->next;
	}
	if(p==NULL)
	{
		printf("该编号药品信息不存在\n");
		system("pause");
	}
	else
	{   
		printf("该编号药品信息信息为:\n");
		printf("药品编号 药品名称      药品类型 药品价格 药品数量 药品备注及功效\n");
		printf("%-9d%-14s%-9s%-9.2f%-9d%s\n",p->id,p->name,p->type,p->price,p->amount,p->remark);
		printf("**********************************************\n");
		printf("*              药品信息修改                  *\n");
		printf("*--------------------------------------------*\n");
		printf("*  1   修改药品编号   2   修改药品名称       *\n");
		printf("*  3   修改药品类型   4   修改药品价格       *\n");
		printf("*  5   修改药品数量   6   修改药品备注及功效 *\n");
		printf("*  0   退出                                  *\n");
		printf("*--------------------------------------------*\n");
		printf("**********************************************\n");
		printf("*请选择您需要修改信息:");
		scanf("%d",&i);
		switch(i)
		{
			case 1:{printf("药品编号修改为:");scanf("%d",&p->id);break;}
			case 2:{printf("药品名称修改为:");scanf("%s",p->name);break;}
			case 3:{printf("药品类型修改为:");scanf("%s",p->type);break;}
			case 4:{printf("药品价格修改为:");scanf("%f",&p->price);break;}
			case 5:{printf("药品数量修改为:");scanf("%d",&p->amount);break;}
			case 6:{printf("药品备注及功效修改为:");scanf("%s",p->remark);break;}
			default:break;
		}
		printf("修改完成!\n");
		system("pause");
	}
	return ;
}



void save_link(Yao *head)
{
	system("cls");
	Yao *p;
	FILE *fp;
	fp=fopen("医药信息.txt","w");
	fputs("药品编号 药品名称        药品类型 药品价格 药品数量 药品备注及功效\n",fp);
	p=head;
    if(p==NULL){
		printf("无药品信息录入,请录入后在输出\n");
	}
	while(p!=NULL)
	{
	    fprintf(fp,"%-9d%-14s%-9s%-9.2f%-9d%s\n",p->id,p->name,p->type,p->price,p->amount,p->remark);
		p=p->next;
	}
	fclose(fp);
	return ;
}


Yao *creat_link(Yao * head,int *count)
{
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 11 | BACKGROUND_BLUE);
	system("cls");
	Yao *p,*q;
	char a[20];
	p=head;
	FILE *stream;
	stream = fopen( "医药信息.txt", "a+" );
	if(stream == NULL)
		printf( "The file fscanf.out was not opened\n" );
	else
	{
		if(head!=NULL)
		{
			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12 | BACKGROUND_BLUE);
			printf("已创建信息链表,请选择插入药品信息。。。\n\n\n");
			system("pause");
			return head;
		}
		fseek( stream, 0L, SEEK_SET );
		fscanf(stream,"%s%s%s%s%s%s\n",a,a,a,a,a,a);
		p=(struct Yao *)malloc(sizeof(Yao));
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15 | BACKGROUND_BLUE);
		while(!feof(stream))
		{
			fscanf(stream,"%d%s%s%f%d%s\n",&p->id,p->name,p->type,&p->price,&p->amount,p->remark);
			(*count)=(*count)+1;
			if(*(count)==1)
			{
				head=p;
			}
			else  q->next=p;
			q=p;
			if(*(count)==MAXSIZE)
			{
				printf("空间已满,继续录入错误!\n");
				break;
			}
			p=(struct Yao *)malloc(sizeof (Yao));
		}
		q->next=NULL;
		free(p);
		printf("录入完成!\n");
	}
	fclose(stream);
	system("pause");
	return head;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值