周周周报报报(药店管理系统)

枯木逢春不再茂,年少且惜镜边人

day .1
由于是课设,每天学习的内容有限,所以为了看起来长,加上了系统(嘿嘿,窝窝头?)
今天学习了链表节点的交换在这里插入代码片

p4->next=head;//p4充当头结点,有头结点的链表交换起来相对方便
  while(p4->next!=tail)//tail表示尾,最开始是NULL;
  {
   pre=p4;//初始化,前驱节点
   p=p4->next;//指向第一个节点
   while(p->next!=tail)//冒泡排序开始
   {
    if(p->many>p->next->many)//相邻两个比较
       {
                     pre->next = p->next;
                     p->next = pre->next->next;
                     pre->next->next = p;//大家画图可以理解一下
                  }
            else//如果是顺序的话,就向前走
            p = p->next;
            pre = pre->next;//当然pre也得向前走,因为需要3个节点才能完成两个节点的交换
   }
   tail=p;//冒泡排序精髓,吧最大的放在最后,就是不要管他了
  }

详细解说都在代码里,大佬们也可以写个链表看看,顺便帮弟弟找出问题!

day.2
今天呢,学习一下如何隐藏密码。
getch()可以起到这个作用,他在头文件
#include <conio.h>//定义了通过控制台进行 数据输入 和数据输出的函数,如getch函数。
好的来看看代码吧

 do
  {
   password[m]=getch();//通过getch()函数进行输入存入password[]中
   if(password[m]=='\r')//'\r'也是回车只不过是将光标移到本行行首,而不是换行
   break;
   else if(password[m]=='\b')//'\b'是退格
   {
    if(m==0)
    {
     printf("\a");//\a是响铃
     continue;
    }
    m--;
    printf("\b");//\b退格
   }
   else
   {
    m++;
    printf("*");
   }
   } while(password[m]!='\n'&&m<20);
   password[m]='\0';

看代码一目了然,详细在代码里面解说,从明天开始复习一下学过的算法,加油,奥里给。

#include <stdio.h>
#include <stdlib.h>//其中包含system函数
#include <conio.h>//定义了通过控制台进行 数据输入 和数据输出的函数,如getch函数。
#include <string.h>//定义字符数组
#include <math.h>
#define LEN sizeof(struct ku)//有关药库信息的结构体
#define LEN1 sizeof(struct bingren)//有关病人信息的结构体
#define LEN2 sizeof(struct land)//有关登录系统的结构体 


struct ku
{
	int many;
	float price;
	char num[20],nam[20],yongtu[200],year[20],month[20],day[20],dyear[20],dmonth[20],dday[20];
	struct ku *next;
};


struct bingren
{
	char bnam[20],gyear[20],gmonth[20],gday[20],ynam[20];
	int bnum;
	struct bingren *next;
};

struct land
{
	int zhanghao;
	char password[20];
	struct land *next;
};


int tjgs();//统计药品个数 
void xg();//修改函数 
void mainmenu();//主菜单 
void jmenu();//显示进药菜单 
void mmenu();//显示卖药菜单 
void lmenu();//显示登录菜单

void main1();//主菜单功能

 
void jmain();//进药菜单功能 
void cryp();//插入药品 
void cxyk();//查询药库 
void zjy();//增加药 
void scy();//删除药 
void lly();//浏览药 

void mmain();//卖药菜单功能 
void my();//卖药 
void ty();//退药 
void zlyp();//整理药品 
void llmy();//浏览卖药 

void land();//登录功能系统 
void xinjian();//创建账号密码 
void xgmm();//修改密码 
void lmain();//登录界面函数 

int tjgs()//统计个数
{

  FILE * fp;
  int n,txcl;
  float tprice; 
  char tnum[20]={'\0'},tname[20]={'\0'},tyongtu[20]={'\0'},tyear[20]={'\0'},tmonth[20]={'\0'},tday[20]={'\0'},tdyear[20]={'\0'},tdmonth[20]={'\0'},tdday[20]={'\0'};
  fp=fopen("medicine.txt","r");
  for(n=0;!feof(fp);n++)
  fscanf(fp,"%s%s%s%s%s%s%s%s%s%d%f",tnum,tname,tyongtu,tyear,tmonth,tday,tdyear,tdmonth,tdday,&txcl,&tprice);
  n--;
  fclose(fp);//关闭文件
  return (n);
} 

int tjbrgs()//统计病人个数 
{
	FILE *fp;
	int tbnum=0,n;
	char tbnam[20]={'\0'},tgyear[20]={'\0'},tgmonth[20]={'\0'},tgday[20]={'\0'},tynam[20]={'\0'};
	fp=fopen("people.txt","r");
	for(n=0;!feof(fp);n++)
	fscanf(fp,"%d%s%s%s%s%s",&tbnum,tbnam,tgyear,tgmonth,tgday,tynam);
	n--;
	fclose(fp);//关闭文件 
	return (n);//返回个数 
} 

int tjzhgs()//统计账号个数
{
	FILE *fp;
	int zh=0,n;
	char mm[20]={'\0'};
	fp=fopen("land.txt","r");
	for (n=0;!feof(fp);n++)//逐个读文件
	fscanf(fp,"%d %s",&zh,mm);
	n--;
	fclose(fp);//关闭文件
	return (n);//返回个数
} 
void mainmenu()//主菜单
{
system ("cls");

printf("**************************************************");

printf("\n\n 1.进药系统\n\n");

printf("\n\n 2.卖药系统\n\n");

printf("\n\n 3.退出系统\n\n");

printf("\n\n 请按键选择,回车确定\n");

printf("*************************************************\n");

return ;
}
void jmenu() //药店信息菜单
{
system ("cls");

printf("****************************************************");

printf("\n 1.增加药品\n\n");

printf("\n 2.删除药品\n\n");

printf("\n 3.查询药品\n\n");

printf("\n 4.库存浏览\n\n");

printf("\n 5.插入药品(按数量升序)\n\n");

printf("\n 6.返回上一层\n\n");

printf("\n 请按键选择,回车确定\n");

printf("***************************************************\n");

return ;

}
void main1()
{
	void jmian();
	void mmain();
	char choose;
	mainmenu();
	scanf(" %c",&choose);
	switch(choose)//功能函数
  {
	  case'1':
	    jmain();
	    break;
	  case'2':
	  	mmain();
	  	break;
	  case'3':
	system("cls");
    getch();
  	exit(0);
  	system ("cls");
	break;
  }
}

void jmain()
{
	void cryp();//插入函数 
	void cxyk();//查询药库 
	void zjy();//增加药 
	void scy();//删除药 
	void lly();//浏览药
	char choose;
	jmenu();
	scanf(" %c",&choose);
	for(;;)
	{
		switch(choose)
	{
	case'1':
		zjy();
		break;
	case'2':
		scy();
		break;
	case'3':
		cxyk();
		break;
	case'4':
		lly();
		break;
	case'5': 
	    cryp();
	    break;
	case'6':
		main1();
		break;
	}
    }
}

void cryp()//插入药品
{
	
	FILE *fp;
	char tnum[20]={'\0'},tnam[20]={'\0'},tyongtu[20]={'\0'},tyear[20]={'\0'},tmonth[20]={'\0'},tday[20]={'\0'},tdyear[20]={'\0'},tdmonth[20]={'\0'},tdday[20]={'\0'};
	int tmany=0;
	float tprice=0;
	int k=0,j=0;
	int n;
	struct ku *head,*p,*p1,*p2,*h;
	if((fp=fopen("medicine.txt","r"))==NULL)
	{
		fp=fopen("medicine.txt","w");
		fclose(fp);
	}
	fp=fopen("medicine.txt","r");
	k=tjgs();
	for(n=0;n<k;n++)
	{
		fscanf(fp,"%s%s%s%s%s%s%s%s%s%d%f",tnum,tnam,tyongtu,tyear,tmonth,tday,tdyear,tdmonth,tdday,&tmany,&tprice);
		j++;
		if(j==1)
		{
			p1=p2=(struct  ku*)malloc(LEN);
			head=p1; 
		}
		else
		{
			p2->next=p1;
			p2=p1;
			p1=(struct  ku*)malloc(LEN);
		}
		strcpy(p1->num,tnum);//复制药号 
        strcpy(p1->nam,tnam);//复制药名 
        strcpy(p1->yongtu,tyongtu);//复制用途 
        strcpy(p1->year,tyear);//复制生产年 
        strcpy(p1->month,tmonth);//复制月 
        strcpy(p1->day,tday);//复制日 
        strcpy(p1->dyear,tdyear);//复制 到期年 
        strcpy(p1->dmonth,tdmonth);//复制 月 
		strcpy(p1->dday,tdday);//复制 日 
		p1->many=tmany;//复制数量 
		p1->price=tprice; //复制价格 
	}
	if(j==0)
	head=NULL;
	else
	{
		p2->next=p1;
		p1->next=NULL;
		fclose(fp);
	}
	system("cls");
	printf("\n请按以下格式输入药品信息:\n药号 药名 用途 生产年 生产月 生产日 到期年 到期月 到期日 数量 价格\n");
	h=(struct  ku*)malloc(LEN);
	scanf("%s%s%s%s%s%s%s%s%s%d%f",h->num,h->nam,h->yongtu,h->year,h->month,h->day,h->dyear,h->dmonth,h->dday,&h->many,&h->price);
	p=head;
	if(p->many>=h->many)
	{
		h->next=p;
		head=h;
	}
	else
	{
		while(p->next!=NULL&&p->next->many<h->many)
		{
			p=p->next;
		}
		if(p->next!=NULL&&p->next->many==h->many)
		{
			free(h);
		}
		else
		{
		h->next=p->next;
		p->next=h;
	    }
	}
	printf("\n已经插入!请进入浏览界面查看\n");
	fp=fopen("medicine.txt","w");
	fclose(fp);
	fp=fopen("medicine.txt","a");
	p=head;
	for(;p!=NULL;)
	{
		fprintf(fp,"%-8s%-9s%-8s%-8s%-8s%-8s%-8s%-8s%-8s%-7d%-8.2f\n",p->num,p->nam,p->yongtu,p->year,p->month,p->day,p->dyear,p->dmonth,p->dday,p->many,p->price);
		p=p->next;
	}
	fclose(fp);
	printf("按任意键返回上一层");
	getch();
	jmain();
}

void zjy()//增加药 
{
	FILE *fp;
	char i;
	int many=0;
	float price=0;
	char  num[20]={'\0'},nam[20]={'\0'},yongtu[200]={'\0'},year[20]={'\0'},month[20]={'\0'},day[20]={'\0'},dyear[20]={'\0'},dmonth[20]={'\0'},dday[20]={'\0'};
	system("cls");
	if((fp=fopen("medicine.txt","r"))==NULL)//if语句:打开药店文件,若不存在,则新建。 
	{
	fp=fopen("medicine.txt","w");
	fclose(fp);
	}	
	fp=fopen("medicine.txt","a");
	printf("\n请按以下格式输入药品信息:\n药号 药名 用途 生产年 生产月 生产日 到期年 到期月 到期日 数量 价格");
	for(;i!=27;)
	{
		printf("请输入:\n");
		scanf("%s%s%s%s%s%s%s%s%s%d%f",num,nam,yongtu,year,month,day,dyear,dmonth,dday,&many,&price);
		fprintf(fp,"%-8s%-9s%-8s%-8s%-8s%-8s%-8s%-8s%-8s%-7d%-8.2f\n",num,nam,yongtu,year,month,day,dyear,dmonth,dday,many,price);
		printf("继续录入请按回车,结束请按ESC\n");
		i=getch();
		for(;i!=13&&i!=27;)//保证是ESC和回车 
		i=getch(); 
	} 
	fclose(fp);
	printf("\n保存成功,按任意键返回上一层!");
	getch();
	jmain();
}


void scy()//删除药
{
	struct ku *head=NULL;
	struct ku *p,*p1,*p2;
	int tmany=0,n=0,j,k;
	float tprice=0;
	char jjnam[20]={'\0'};
	char i;
    char tnum[20]={'\0'},tnam[20]={'\0'},tyongtu[20]={'\0'},tyear[20]={'\0'},tmonth[20]={'\0'},tday[20]={'\0'},tdyear[20]={'\0'},tdmonth[20]={'\0'},tdday[20]={'\0'};
	FILE *fp;
	if((fp=fopen("medicine.txt","r"))==NULL)
	{
		system("cls");
		printf("\n文件记录不存在,按任意键返回!");
		getch();
		jmain(); 
	}
	else//删除 
	{
		system("cls");
		printf("\n请输入药删除的药品名称:");
		scanf("%s",jjnam);
		printf("\n确认请按回车,取消请按ESC\n");
		i=getch();
        for(;i!=13&&i!=27;)
        i=getch();
        if(i==27)
        jmain();
        fp=fopen("medicine.txt","r");
        j=tjgs();
        for(k=0;k<j;k++)
        {
        	fscanf(fp,"%s%s%s%s%s%s%s%s%s%d%f",tnum,tnam,tyongtu,tyear,tmonth,tday,tdyear,tdmonth,tdday,&tmany,&tprice);
        	if(strcmp(jjnam,tnam))
        	{
        		n++;
        		if(n==1)
        		{
        			p1=p2=(struct ku*)malloc(LEN);
        			head=p1;
				}
				else
				{
					p2->next=p1;
					p2=p1;
					p1=(struct ku*)malloc(LEN);//新建链表
				}
				strcpy(p1->num,tnum);//复制药号 
                strcpy(p1->nam,tnam);//复制药名 
                strcpy(p1->yongtu,tyongtu);//复制用途 
                strcpy(p1->year,tyear);//复制生产年 
                strcpy(p1->month,tmonth);//复制月 
                strcpy(p1->day,tday);//复制日 
                strcpy(p1->dyear,tdyear);//复制 到期年 
                strcpy(p1->dmonth,tdmonth);//复制 月 
				strcpy(p1->dday,tdday);//复制 日 
				p1->many=tmany;//复制数量 
				p1->price=tprice; //复制价格 
			}
		}
		if(n==0)//说明药店有且只有这种药,所以全部删除 
		{
			 head=NULL;
			 fclose(fp);
		}
		else
		{
			p2->next=p1;
			p1->next=NULL;
			fclose(fp);
		}
	}
    fp=fopen("medicine.txt","w");//清空文件,准备重新录入
	fclose(fp);
	fp=fopen("medicine.txt","a");//以追加形式打开,准备录入信息	
     p=head;
	 for(;p!=NULL;)
	 {
	 	fprintf(fp,"%-8s%-9s%-8s%-8s%-8s%-8s%-8s%-8s%-8s%-7d%-8.2f\n",p->num,p->nam,p->yongtu,p->year,p->month,p->day,p->dyear,p->dmonth,p->dday,p->many,p->price);
	 	p=p->next;
	 }   	
	 fclose(fp);
	 system("cls");
	 if(n==j)
	 printf("\n无该药品\n按任意键返回上一层\n");
	 else 
	 printf("\n删除成功!\n按任意键返回上一层\n");
	 getch();
	jmain();   	
} 



void cxyk()//查询药库函数
{
	FILE *fp;
	float price=0;
	int k=0,many=0,m=0,n=0;
	char  num[20]={'\0'},nam[20]={'\0'},yongtu[200]={'\0'},year[20]={'\0'},month[20]={'\0'},day[20]={'\0'},dyear[20]={'\0'},dmonth[20]={'\0'},dday[20]={'\0'};
	char i;
	char chazhao1[20]={'\0'}; 
	char chazhao[20]={'\0'};
	if((fp=fopen("medicine.txt","r"))==NULL)//打开文件
	{
		system("cls");
		printf("\n文件不存在,按任意键返回");
		getch();
		jmain(); 
	} 
	system("cls");
	printf("请输入药名和证号进行查找:\n");
	scanf("%s %s",chazhao,chazhao1);
	system("cls");
	m=tjgs();
	if(m==0)
	{
		system("cls");
		
		printf("\n无记录!\n");
		
	}
	fp=fopen("medicine.txt","r");
	for(n=0;n<m;n++)
	{
		fscanf(fp,"%s%s%s%s%s%s%s%s%s%d%f",num,nam,yongtu,year,month,day,dyear,dmonth,dday,&many,&price);
		if(!strcmp(chazhao,nam)&&!strcmp(chazhao1,num))
		{
			if(k==0)
			{
				printf("\n药号\t药名\t用途\t生产年\t月\t日\t到期年\t月\t日\t数量\t价格\n");
			}
			printf("%-8s%-9s%-8s%-8s%-8s%-8s%-8s%-8s%-8s%-7d%-8.2f\n",num,nam,yongtu,year,month,day,dyear,dmonth,dday,many,price);	
		    k++;
		}	
	}
	if(k==0)//没有查找到 
	{
		
		printf("\n无复合药品!\n");
		printf("按任意键返回上一层!\n");
		getch();
		jmain(); 
	} 
	fclose(fp);
	getch();
	jmain();
} 
void lly()//浏览药品 
{
	FILE *fp;
	int n=0;
	int k=0,m=0,many=0;
	float price=0;
	char  num[20]={'\0'},nam[20]={'\0'},yongtu[200]={'\0'},year[20]={'\0'},month[20]={'\0'},day[20]={'\0'},dyear[20]={'\0'},dmonth[20]={'\0'},dday[20]={'\0'};
    char i;
      if ((fp=fopen("medicine.txt","r"))==NULL)//打开文件
    {
    	system("cls");
    	printf("\n记录文件不存在!请按任意键返回!\n");
    	fclose(fp);
		getch();
		jmain(); 
	}
	n=tjgs();
	if(n==0)
	{
		system("cls");
		printf("\n无任何记录!");
	}
	fp=fopen("medicine.txt","r");
	system("cls");
	printf("\n药号\t药名\t用途\t生产年\t月\t日\t到期年\t月\t日\t数量\t价格\n");
	for(m=0;m<n;m++)
	{
		fscanf(fp,"%s%s%s%s%s%s%s%s%s%d%f",num,nam,yongtu,year,month,day,dyear,dmonth,dday,&many,&price);
		printf("%-8s%-9s%-8s%-8s%-8s%-8s%-8s%-8s%-8s%-7d%-8.2f\n",num,nam,yongtu,year,month,day,dyear,dmonth,dday,many,price);
	}
	fclose(fp);
	printf("\n按任意键返回!\n");
	getch();
	jmain();
}

//********************************
void mmenu()//显示卖药菜单 
{
	system("cls");
	printf("*****************************************************");
	printf("\n\n 1.卖药登记\n\n");
	printf("\n\n 2.退药登记\n\n");
	printf("\n\n 3.整理药品\n\n");
	printf("\n\n 4.查询卖药\n\n");
    printf("\n\n 5.返回上一层\n\n");
	printf("\n\n 请按键选择,回车确定\n");
	printf("****************************************************");
	return ;
}


void  mmain()//卖药菜单功能
{
	void my();
	void ty();
	void zlyp();
	void llmy() ;
	char choose;
	mmenu();
	scanf(" %c",&choose);
	   switch(choose)
	   {
	   	case '1':my();break;
	   	case '2':ty();break;
	   	case '3':zlyp();break;
	   	case '4':llmy();break;
	   	case '5':main1();break;
	   }
} 

void my()//卖药 
{
	FILE *fp,*fp3;
	struct ku *head=NULL;
	struct ku *p,*p1,*p2;
	int i,loop,n=0,flag=0,s=0,k;
	int tmany=0,tbnum=0;
	float tprice=0;
	char tnum[20]={'\0'},tnam[20]={'\0'},tyongtu[20]={'\0'},tyear[20]={'\0'},tmonth[20]={'\0'},tday[20]={'\0'},tdyear[20]={'\0'},tdmonth[20]={'\0'},tdday[20]={'\0'};
    char tbnam[20]={'\0'},tgyear[20]={'\0'},tgmonth[20]={'\0'},tgday[20]={'\0'},tynam[20]={'\0'};	
    char hit =0;
    char name[20]={'\0'};
    system("cls");
    if((fp=fopen("medicine.txt","r"))==NULL)
    {
    	fclose(fp);
    	system("cls");
    	printf("\n药店无库存!按任意键退出!");
    	getch();
    	exit(0);
	}
	else
	{
		fclose(fp);
		fp=fopen("medicine.txt","r");
		printf("\n请输入药名\n");
		scanf("%s",name);
		k=tjgs();
		for(i=0;i<k;i++)
		{
			fscanf(fp,"%s%s%s%s%s%s%s%s%s%d%f",tnum,tnam,tyongtu,tyear,tmonth,tday,tdyear,tdmonth,tdday,&tmany,&tprice);
			n++;
			if(n==1)
			{
				p1=p2=(struct ku*)malloc(LEN);
				head=p1;
			}
			else
			{
				p2->next=p1;
				p2=p1;
				p1=(struct ku*)malloc(LEN);
			}
				strcpy(p1->num,tnum);//复制药号 
                strcpy(p1->nam,tnam);//复制药名 
                strcpy(p1->yongtu,tyongtu);//复制用途 
                strcpy(p1->year,tyear);//复制生产年 
                strcpy(p1->month,tmonth);//复制月 
                strcpy(p1->day,tday);//复制日 
                strcpy(p1->dyear,tdyear);//复制 到期年 
                strcpy(p1->dmonth,tdmonth);//复制 月 
				strcpy(p1->dday,tdday);//复制 日 
				p1->many=tmany;//复制数量 
				p1->price=tprice; //复制价格 
		} 
		if(n==0)
		{
		head=NULL;
		fclose(fp);
	    }
		else
		{
			p2->next=p1;
			p1->next=NULL;
			fclose(fp);
		 } 
		p=head;
		for(;p!=NULL;)
		{
			if(!(strcmp(p->nam,name)))
			{
				flag=1;
				loop=p->many;
				(p->many)--;
			}
			p=p->next;
		}
		if(flag&&(loop>0))
		{
			fp=fopen("medicine.txt","w");
			fclose(fp);
			fp=fopen("medicine.txt","a");
			p=head;
			for(;p!=NULL;)
			{
					fprintf(fp,"%-8s%-9s%-8s%-8s%-8s%-8s%-8s%-8s%-8s%-7d%-8.2f\n",p->num,p->nam,p->yongtu,p->year,p->month,p->day,p->dyear,p->dmonth,p->dday,p->many,p->price);
					p=p->next;
			}
			free(p);
			fclose(fp);
			if((fp3=fopen("peopele.txt","r"))==NULL)
			{
				fp3=fopen("people.txt","w");
				fclose(fp3);
			}
			fp3=fopen("people.txt","a");
			printf("\n请按以下格式输入顾客信息:\n 病人证号 姓名  卖药年 月 日 药名\n请输入");//录入信息
			scanf("%d %s %s %s %s %s",&tbnum,tbnam,tgyear,tgmonth,tgday,tynam);
			fprintf(fp3,"\n%-8d%-8s%-8s%-8s%-8s%-8s\n",tbnum,tbnam,tgyear,tgmonth,tgday,tynam);
			fclose(fp3);
			printf("购药成功!若有不适,请在3个月内来本店退药并退款,按任意键返回\n");
			getch();
			mmain(); 
	    }
	    else
	    {
	    	if(flag!=0)
	    	{
	    		printf("抱歉!该药无库存,按任意键返回!\n");
			}
			else
			{
				printf("抱歉,未找到您所需的药品,按任意键返回\n"); 
			}
			getch();
			mmain();
		}
	}
}





void ty()//退药 
{
	FILE *fp,*fp3;
	struct bingren *head=NULL;
	struct bingren *p,*p1,*p2;
	struct ku *head1=NULL;
	struct ku *zp,*zp1,*zp2;
	int tmany=0,i=0;
	float tprice=0;
	char tnum[20]={'\0'},tnam[20]={'\0'},tyongtu[20]={'\0'},tyear[20]={'\0'},tmonth[20]={'\0'},tday[20]={'\0'},tdyear[20]={'\0'},tdmonth[20]={'\0'},tdday[20]={'\0'};
    char tbnam[20]={'\0'},tgyear[20]={'\0'},tgmonth[20]={'\0'},tgday[20]={'\0'},tynam[20]={'\0'};
	int  tbnum=0,n=0,k=0,t=0,flag=0;
	int  ttbnum;
	char ttynam[20]={'\0'};
	char hitkey=0;
	system("cls");
	if((fp=fopen("people.txt","r"))==NULL)
	{
		fclose(fp);
		printf("\n不存在消费顾客!按任意键返回!");
		getch();
		system("cls");
		mmain(); 
	}
	else
	{
		fclose(fp);
		fp=fopen("people.txt","r");
		printf("\n请输入证件号 和 药品名称!\n请输入:");
		scanf("%d %s",&ttbnum,ttynam);
		k=tjbrgs();
		for(i=0;i<k;i++)
		{
		    fscanf(fp,"%d%s%s%s%s%s\n",&tbnum,tbnam,tgyear,tgmonth,tgday,tynam);
			if((ttbnum==tbnum)&&!strcmp(ttynam,tynam))
			{
			    flag=1; 
			}
		}
		fclose(fp);
		fp=fopen("people.txt","r");
		if(flag)
		{
			for(i=0;i<k;i++)
			{
				fscanf(fp,"%d%s%s%s%s%s\n",&tbnum,tbnam,tgyear,tgmonth,tgday,tynam);
			    if(!((ttbnum==tbnum)&&!strcmp(ttynam,tynam)))
			    {
			    	n++;
			    	if(n==1)
			    	{
			    		p1=p2=(struct bingren*)malloc(LEN1);
			    		head=p1;
					}
					else
					{
						p2->next=p1;
						p2=p1;
						p1=(struct bingren*)malloc(LEN1);
					}
					p1->bnum=tbnum;
					strcpy(p1->bnam,tbnam);
					strcpy(p1->gyear,tgyear);
					strcpy(p1->gmonth,tgmonth);
					strcpy(p1->gday,tgday);
					strcpy(p1->ynam,tynam);
				}
			}
			if(n==0)
			head=NULL;
			else
			{
				p2->next=p1;
				p1->next=NULL;
				fclose(fp); 
			}
			fp=fopen("people.txt","w");
			fclose(fp);
			fp=fopen("people.txt","a");
			p=head;
			for(;p!=NULL;)
			{
				fprintf(fp,"\n%-8d%-8s%-8s%-8s%-8s%-8s\n",p->bnum,p->bnam,p->gyear,p->gmonth,p->gday,p->ynam);
				p=p->next;		
			}
			free(p);
			fclose(fp);
	    }
	} 
	    if(flag)
	    {
	    	printf("确定退药,请按回车!");
			for (;hitkey!=13&&hitkey!=27;)
			hitkey=getch();
			if (hitkey==13)
			printf("成功!按任意键返回!"); 
			n=0;flag=0;
			fp3=fopen("medicine.txt","r");
			k=tjgs();
			for(i=0;i<k;i++)
			{
				fscanf(fp,"%s%s%s%s%s%s%s%s%s%d%f",tnum,tnam,tyongtu,tyear,tmonth,tday,tdyear,tdmonth,tdday,&tmany,&tprice);
				n++;
				if(n==1)
				{
					zp1=zp2=(struct ku*)malloc(LEN);
					head1=zp1;
				}
				else
				{
					zp2->next=zp1;
					zp2=zp1;
					zp1=(struct ku*)malloc(LEN);
				}
				strcpy(zp1->num,tnum);//复制药号 
                strcpy(zp1->nam,tnam);//复制药名 
                strcpy(zp1->yongtu,tyongtu);//复制用途 
                strcpy(zp1->year,tyear);//复制生产年 
                strcpy(zp1->month,tmonth);//复制月 
                strcpy(zp1->day,tday);//复制日 
                strcpy(zp1->dyear,tdyear);//复制 到期年 
                strcpy(zp1->dmonth,tdmonth);//复制 月 
				strcpy(zp1->dday,tdday);//复制 日 
				zp1->many=tmany;//复制数量 
				zp1->price=tprice; //复制价格 
			}
			if(n==0)
			{
				head1=NULL;
			}
			else
			{
				zp2->next=zp1;
				zp1->next=NULL;
				fclose(fp3);
			}
			zp=head1;
			for(;zp!=NULL;)
			{
				if(!(strcmp(zp->nam,ttynam)))
					++(zp->many);
				zp=zp->next;
			}
			fp3=fopen("medicine.txt","w");//清空药库文件
			fclose(fp);
			fp3=fopen("medicine.txt","a");//追加信息
			zp=head1;
			for(;zp!=NULL;)
			{
				fprintf(fp3,"%-8s%-8s%-8s%-8s%-8s%-8s%-8s%-8s%-8s%-7d%-8.2f",zp->num,zp->nam,zp->yongtu,zp->year,zp->month,zp->day,zp->dyear,zp->dmonth,zp->dday,zp->many,zp->price);
				zp=zp->next;
			}
			fclose(fp3);
			getch();
			mmain();
		}
		else
		printf("不存在此交易,按任意键返回!");
		getch();
		mmain(); 
}



void  llmy()//显示卖药信息 
{
	FILE *fp;
	int bnum=0;
	char bnam[20]={'\0'},gyear[20]={'\0'},gmonth[20]={'\0'},gday[20]={'\0'},ynam[20]={'\0'};
	int n=0,i=0,j=0;
	if((fp=fopen("people.txt","r"))==NULL)
	{
		system("cls");
		printf("\n无卖药记录,按任意键返回!");
		getch();
		mmain(); 
	}
	n=tjbrgs();
	if(n==0)
	{
		system("cls");
		printf("\n无记录,按任意键返回!");
	}
	fp=fopen("people.txt","r");
	system("cls");
	printf("\n证号\t姓名\t\t购药年-月-日\t药品名称\n");
	for(;!feof(fp);)
	{
		fscanf(fp,"%d%s%s%s%s%s\n",&bnum,bnam,gyear,gmonth,gday,ynam);
		printf("\n%-8d%-8s%-8s%-8s%-8s%-8s\n",bnum,bnam,gyear,gmonth,gday,ynam);	
	}
	fclose(fp);
	printf("\n按任意键返回!\n");
	getch();
	mmain();
}
//********************************************
//***********************
void zlyp()
{
	struct ku *head,*p,*tail=NULL,*pre;
	struct ku *p1,*p2,*p3,*p4;
	int i,n=0,m=0,j=0;
	FILE *fp;
	char tnum[20]={'\0'},tnam[20]={'\0'},tyongtu[20]={'\0'},tyear[20]={'\0'},tmonth[20]={'\0'},tday[20]={'\0'},tdyear[20]={'\0'},tdmonth[20]={'\0'},tdday[20]={'\0'};
	int tmany=0;
	float tprice=0;
	if((fp=fopen("medicine.txt","r"))==NULL)
	{
		system("cls");
		printf("\n无库存药品!按任意键返回!\n");
		getch();
		fclose(fp);
		mmain(); 
	 }
	 	system("cls");
	 	fp=fopen("medicine.txt","r");
	 	j=tjgs();
	 	for(i=0;i<j;i++)
	 	{
	 		fscanf(fp,"%s%s%s%s%s%s%s%s%s%d%f",tnum,tnam,tyongtu,tyear,tmonth,tday,tdyear,tdmonth,tdday,&tmany,&tprice);
	 		n++;
	 		if(n==1)
	 		{
	 			p1=p2=(struct ku*)malloc(LEN);
	 			head=p1;
			} 
			else
			{
				p2->next=p1;
				p2=p1;
				p1=(struct ku*)malloc(LEN);
			}
			strcpy(p1->num,tnum);//复制药号 
            strcpy(p1->nam,tnam);//复制药名 
            strcpy(p1->yongtu,tyongtu);//复制用途 
            strcpy(p1->year,tyear);//复制生产年 
            strcpy(p1->month,tmonth);//复制月 
            strcpy(p1->day,tday);//复制日
		    strcpy(p1->dyear,tdyear);//复制 到期年 
            strcpy(p1->dmonth,tdmonth);//复制 月 
		    strcpy(p1->dday,tdday);//复制 日 
			p1->many=tmany;//复制数量 
			p1->price=tprice; //复制价格 
		 }
		if(n==0)
			{
				head=NULL;
				fclose(fp);
			}
			else
			{
				p2->next=p1;
				p1->next=NULL;
				fclose(fp);
			}
		p4=(struct ku*)malloc(LEN);	
		p4->next=head;
		while(p4->next!=tail)
		{
			pre=p4;
			p=p4->next;
			while(p->next!=tail)
			{
				if(p->many>p->next->many)
				   {
				      pre->next = p->next;
                     p->next = pre->next->next;
                     pre->next->next = p;
                  }
            else
            p = p->next;
            pre = pre->next;
			}
			tail=p;
		}
		p=head;
		 fp=fopen("medicine.txt","w");
		 fclose(fp);
		 fp=fopen("medicine.txt","a");
		 p=head;
		 for(;p!=NULL;)
		 {
		 	fprintf(fp,"%-8s%-8s%-8s%-8s%-8s%-8s%-8s%-8s%-8s%-7d%-8.2f",p->num,p->nam,p->yongtu,p->year,p->month,p->day,p->dyear,p->dmonth,p->dday,p->many,p->price);
		 	p=p->next;
		 }
		 fclose(fp);
		 printf("\n已整理,请前往浏览库中查看\n");
		 getch();
		 mmain();
}
//******************************************
//******************************************
void lmenu()//显示登录菜单
{
printf("\n\n\t    欢迎使用会员登录系统\n\n");
printf("**********************************************");
printf("\n\n\t\t1.登录系统\n\n");
printf("\n\n\t\t2.创建账号\n\n");
printf("\n\n\t\t3.修改密码\n\n");
printf("\n\n\t\t4.退出系统\n\n");
printf("\n\n\t    请按键选择,回车确定\n");
printf("**********************************************");
return ;
}


void lmain()//登录功能函数
{
	void land();
	void xinjian();
	char choose;
	lmenu();
	scanf(" %c",&choose);
	switch(choose)//功能函数
  {
	  case'1':
	    land();
	    break;
	  case'2':
	  	xinjian();
	  	break;
	  	case'3':
	  	xgmm();
	  	break;
	  case'4':
	  	system("cls");
    getch();
  	exit(0);
  	system ("cls");
	break;
  }
}



void xinjian()//新建账户密码
{
	FILE *fp;
	int zhanghao;
	char password[20],password1[20];
	char hit=0;
	if ((fp=fopen("land.txt","r"))==NULL)//if语句:打开药店文件,不存在此文件则新建
	{
      fp=fopen("land.txt","w");
      fclose(fp);
    }
    system("cls");
	fp=fopen("land.txt","a");
	for(;;)//输入两次密码确认,两次相同才能确认
	{
	   printf("\n请按以下格式输入账户:\n学号 密码\n");
	   printf("请输入:");
	   scanf("%d %s",&zhanghao,password);
       printf("再次输入密码:\n");
	   scanf("%s",password1);
	   if(strcmp(password,password1)==0)
	   {
	       fprintf(fp,"%d %s\n",zhanghao,password);
		   break;
       }
       else
	   {
	       printf("两次输入密码不一致,继续创建按回车,退出按ESC");
	       hit=getch();
		   if(hit==27)
		   system("cls");
		   lmain();
		}
   }
   fclose(fp);
   printf("创建成功,按任意键返回");
   getch();
   system("cls");
   lmain();
}



int match(int m,char a[20])//匹配数据库中的账号密码
{
	FILE*fp;
	int n=0,i=0,k,t;
	int zhanghao;
	char password[20];

	if ((fp=fopen("land.txt","r"))==NULL)//不存在登录者文件
	  {
         system ("cls");
		 printf("\n 还未存在用户!请新建账户");
		 getch();
	 	system("cls");
		lmain();
      }
      k=tjzhgs();
        for(t=0;t<=k;t++)
      {
        fscanf(fp,"%d%s",&zhanghao,password);
        if(m==zhanghao)
        {
        	if(strcmp(a,password)==0)
			return 1;
			else
			return -1;
	    }
	  }
	  return 0;
 }

void land()//输入账户密码的登录函数
{
	int zhanghao;
	char password[20];
	int i=2,j,k,m=0,n;
	char hit=0;
	system("cls");
	do
	{
	   printf("\n请输入账号:\n");
       scanf("%d",&zhanghao);
       printf("确认输入请安回车,重新输入请按ECS");
       hit=getch();//暂停程序当i接收后继续下一条指令
       for (;hit!=13&&hit!=27;)//保证只能是CR和ESC才能退出循环,输入其他字符无用,暂停程序,按'CR'继续。
       {
	        hit=getch();
	   }
    }
    while(hit==27);
	 printf("\n请输入密码:\n");
	 do
	 {
	 	password[m]=getch();
	 	if(password[m]=='\r')
	 	break;
	 	else if(password[m]=='\b')
	 	{
	 		if(m==0)
	 		{
	 			printf("\a");
	 			continue;
			 }
			 m--;
			 printf("\b");
		 }
		 else
		 {
		 	m++;
		 	printf("*");
		 }
	  } while(password[m]!='\n'&&m<20);
	  password[m]='\0';
     i=match(zhanghao,password);
     if(i==1)
	 {
       printf("登陆成功!按任意键继续");
	   getch();
	   main1();
	 }
	 else
	 {
	 	if(i==-1)
		 {
		 printf("密码错误!");
		 getch();
         land();
		 }
		 if(i==0)
		 printf("不存在此用户");
		 getch();
		 system("cls");
		 lmain();
	 }
}

void xg(int z,char m[20])//修改函数
{
	FILE *fp;
	int zhanghao1,n,j,k;
	char mima1[20];
	struct land *head,*p,*p1,*p2;

	 fp=fopen("land.txt","r");
	   j =tjzhgs();

	   for (k=0;k<=j;k++)
       {
	       fscanf(fp,"%d %s",&zhanghao1,mima1);
           if (z!=zhanghao1)//比较名字,将不同名字的信息复制到链表
          {
	            n++;//相同返回值为0不执行if语句继续循环,不同则执行直到将所有不同的书名建立成链表
	            if (n==1)//建立链表
                {
		          p1=p2=(struct land*)malloc(LEN2);
                  head=p1;
				}
                else
			    {
			      p2->next=p1;
				  p2=p1;
                  p1=(struct land*)malloc(LEN2);//新建链表
                }
 				p1->zhanghao=zhanghao1;
                strcpy(p1->password,mima1);//复制账号密码
          }
       }
        if (n==0)
			 {
			 head=NULL;
			 }
			 else//建立链表的最后剩余一个储存空间,所以封底
			 {
			 p2->next=p1;
			 p1->next=NULL;
			 fclose(fp);
			 }
			  fp=fopen("land.txt","w");//清空文件,只写打开,然后关闭
              fclose(fp);
              fp=fopen("land.txt","a");//追加文件
              p=head;
            for (;p!=NULL;)//把链表内容覆盖到文件
   			{
   	   		 	fprintf(fp,"%d %s%\n",p->zhanghao,p->password);
   	   			p=p->next;
	        }
	        fprintf(fp,"%d %s\n",z,m);
            fclose(fp);
             system ("cls");

}



void xgmm()//修改密码
{

	   FILE *fp;
       int zh=0,k=0,many=0,m=0,n=0;
       int chazhao,hit;
       char mima[20]={'\0'},password1[20]={'\0'};
       char  mm[20]={'\0'};
       char i;

       if ((fp=fopen("land.txt","r"))==NULL)//打开文件
       {
	       system ("cls");
           printf("\n记录文件不存在!按任意键返回");
  		   getch();
  		   system("cls");
		   lmain();
       }
	   system("cls");
       printf("请输入你的帐号和旧密码:\n");
       scanf("%d %s",&chazhao,mima);
	   m =tjzhgs();
	   for (n=0;n<=m;n++)
	   {
	    fscanf(fp,"%d %s",&zh,mm);
        if(zh==chazhao)
        {
        	if(!strcmp(mm,mima))
        	{
        		printf("请输入新的密码");
        		scanf("%s",mima);
       		    printf("再次输入密码:\n");
	            scanf("%s",password1);
	             if(strcmp(mima,password1)==0)
	   			 {
		             xg(chazhao,mima);
		            getch();
				    lmain();
	                system("cls");
   			     }
       			  else
	   			  {
	       		   	  printf("两次输入密码不一致,按任意键退出");
	       			  hit=getch();
		   			  system("cls");
				      lmain();

   				  }
			}
			else
			{
				printf("旧密码错误,按任意键返回!");
				getch();
				system("cls");
				lmain();
	            
			}

        }
      }
	   printf("不存在此账号,按任意键返回");
		fclose(fp);//修改结束
		getch();
		system("cls");
		lmain();
}



int main()
{
	system("color f0");
	lmain();
	return 0;
}















  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值