枯木逢春不再茂,年少且惜镜边人
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;
}
本文介绍了一个基于链表实现的药店管理系统,包括药品信息管理、病人信息管理、登录系统等功能。详细介绍了如何进行药品的增删改查、卖药、退药及药品库存管理,并实现了用户登录验证。
859

被折叠的 条评论
为什么被折叠?



