账号: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;
}