加密:
# include <stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
int main(void)
{
int a[4];
for(int i=0;i<4;i++)
{
a[i]=getch();
if(a[i]=='\b')
{
i=i-2;
printf("\b ");
}
else
printf("*");
}
}
头文件:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//一些文件,以及缓冲函数
#include<malloc.h>
#include<conio.h>
#include<windows.h>
结构体内型的定义:
typedef struct node
{
char name[20];
char function[20];
char sweet[20];
int price;
int term;
struct node*next;
}pnode,*link;
初始化单链表:
link init()
{
link head;
head=(pnode*)malloc(sizeof(pnode));
head->next=NULL;
return head;
}
菜单:
int menu()
{
int n;
printf("------------------*******药店管理系统*******-------------\n");
printf("\t\t\t1.创建链表\n");
printf("\t\t\t2.添加信息\n");
printf("\t\t\t3.修改信息\n");
printf("\t\t\t4.插入信息\n");
printf("\t\t\t5.删除信息\n");
printf("\t\t\t6.浏览信息\n");
printf("\t\t\t7.排序信息\n");
printf("\t\t\t8.查询信息\n");
printf("\t\t\t9.统计信息\n");
printf("\t\t\t10.存储信息\n");
printf("\t\t\t11.打印信息\n");
printf("\t\t\t12.系统帮助\n");
printf("\t\t\t13.退出系统\n");
printf("-----------------*****************************---------------------\n");
printf("请输入所想要进行操作前的序号:");
scanf("%d",&n);
return n;
}
系统帮助:
void help()
{
printf("\n\t\t\t0.欢迎使用系统帮助\n");
printf("\n\t\t\t1.初次进入系统,请先选择录入信息\n");
printf("\n\t\t\t2.按照菜单提示输入信息\n");
printf("\n\t\t\t3.谢谢您的使用\n");
}
尾插法创建单链表:
void GreatByRear(link head)
{
pnode*r,*s;
char name[20];char function[20];char sweet[20];int term;
int price;
r=head;
printf("当输入药品价格为0时,此项数据不录入!\n");
printf("请输入药品的药名,价格,功能,甜度,保质期:");
while(1)
{
scanf("%s%d%s%s%d",name,&price,function,sweet,&term);
if(price==0)
break;
s=(pnode*)malloc(sizeof(pnode));
strcpy(s->name,name);
strcpy(s->function,function);
strcpy(s->sweet,sweet);
s->price=price;
s->term=term;
r->next=s;
r=s;
}
r->next=NULL;
}
以文件保存信息:
void save(link head)
{
link stu;int flag=0;
stu=head->next;
FILE *fp;
fp=fopen("in.txt","w");
if(fp==NULL)
{
printf("\n 打开文件失败,可能不存在该文件");
getch;
exit(1);
}
if(stu==NULL)
{
printf("请先录入数据!");
}
while(stu!=NULL)
{
fprintf(fp,"药名:%s 价格:%d 功能:%s 甜度:%s 保质期:%d \n",stu->name,stu->price,stu->function,stu->sweet,stu->term);
stu=stu->next;
flag=1;
}
fclose(fp);
if(flag==1)
{
printf("文件保存成功!按任意键返回。。。");
getch;
}
}
读文件:
link ReadFile()
{
link node,p,head;
FILE *fp;
fp=fopen("in.txt","rt");
if(fp==NULL)
{
printf("文件打开失败,请按任意键退出!\n");
getch();
fclose(fp);
exit(1);
}
head=init();
p=head;
while(!feof(fp)) //文件未结束时
{
node=(link)malloc(sizeof(pnode));
fscanf(fp,"药名:%s 价格:%d 功能:%s 甜度:%s 保质期:%d \n",node->name,&node->price,node->function,node->sweet,&node->term);
// fgetc(fp);
p->next=node;
p=node;
}
p->next=NULL;
fclose(fp);
return head;
}
打印报表:
void PrintReport()
{
pnode *head,*p;
FILE *fp;
fp=fopen("out.txt","w");
if(fp==NULL)
{
printf("文件打开失败,请按任意键退出!\n");
getch();
fclose(fp);
exit(1);
}
head=ReadFile();
p=head->next;
fprintf(fp,"药名\t价格\t功能\t甜度\t保质期\n");
while(p!=NULL)
{
fprintf(fp,"%s\t%d\t%s\t%s\t%d\n",p->name,p->price,p->function,p->sweet,p->term);
p=p->next;
}
printf("报表打印完成!\n");
fclose(fp);
}
浏览信息:
void printlist(link head)
{
pnode*p;
p=head->next;
if(p==NULL){
printf("\n无信息录入,请先录入信息!");
}
while(p)
{
printf(" 药名:%s 价格:%d 功能:%s 甜度:%s 保质期:%d \n\n",p->name,p->price,p->function,p->sweet,p->term);
p=p->next;
}
}
增加信息:
void plus(link head)
{
int n;int m;pnode*p;pnode*s;int j;
printf("按1添加信息到最后一条!按2添加信息到指定位置!\n");
scanf("%d",&n);
if(n==1)
{
p=head;
while(p&&p->next)
{
p=p->next;
}
if(p)
{
s=(pnode*)malloc(sizeof(pnode));
printf("请输入药品的药名,价格,功能,甜度,保质期:");
scanf("%s%d%s%s%d",s->name,&s->price,s->function,s->sweet,&s->term);
p->next=s;
s->next=NULL;
}
}
if(n==2)
{
printf("请输入你想要增添信息的位置:");
scanf("%d",&m);
p=head;
j=0;
while(j<m-1&&p)
{
p=p->next;
j++;
}
if(p)
{
printf("请输入药品的药名,价格,功能,甜度,保质期:");
s=(pnode*)malloc(sizeof(pnode));
scanf("%s%d%s%s%d",s->name,&s->price,s->function,s->sweet,&s->term);
s->next=p->next;
p->next=s;
}
}
}
插入信息:
void insert(link head)
{
int n;pnode*p,*s;
p=head;
int i;int j=0;
printf("1.在头部插入\n2.在中间位置插入\n3.在尾部插入\n");
printf("请选择你想要进行的插入操作:\n");
scanf("%d",&n);
switch(n)
{
case 1:
printf("请输入待添加药品的名称,功能,甜度,价格,保质期:");
s=(pnode*)malloc(sizeof(pnode));
scanf("%s%s%s%d%d",s->name,s->function,s->sweet,&s->price,&s->term);
s->next=head->next;
head->next=s;
break;
case 2:
printf("请输入需要插入新节点的位置:");
scanf("%d",&i);
while(j<i-1&&p)
{
p=p->next;
j++;
}
if(p)
{
printf("请输入待添加药品的名称,功能,甜度,价格,保质期:");
s=(pnode*)malloc(sizeof(pnode));
scanf("%s%s%s%d%d",s->name,s->function,s->sweet,&s->price,&s->term);
s->next=p->next;
p->next=s;
}
break;
case 3:
while(p&&p->next)
{
p=p->next;
}
if(p)
{
printf("请输入待添加药品的名称,功能,甜度,价格,保质期:");
s=(pnode*)malloc(sizeof(pnode));
scanf("%s%s%s%d%d",s->name,s->function,s->sweet,&s->price,&s->term);
p->next=s;
s->next=NULL;
}
break;
}
}
删除信息:
void Delete(link head)
{
pnode*p,*s;
p=head;
int i;int j=0;
printf("请输入需要删除节点的位置:");
scanf("%d",&i);
while(j<i-1&&p)
{
p=p->next;
j++;
}
if(p==NULL||p->next==NULL)
{
printf("位置ERROR!");
}
else{
s=p->next;
p->next=s->next;
free(s);
}
}
排序信息:
void sort(link head)
{
link pb, pf;pnode temp;
pf = head->next;
int n;
if(head==NULL)
{
printf("链表为空,无需排序!");
}
if(head->next==NULL)
{
printf("只有一个结点,无需排序!");
}
printf("1.按药品价格从低到高排序\n2.按药品价格从高到低排序\n");
printf("请选择你想要进行的操作1/2\n");
scanf("%d",&n);
switch(n)
{
case 1:
while (pf->next != NULL)
{
//以pf指向的节点为基准节点
pb = pf->next ;//pb从基准点的下一个节点开始
while (pb != NULL)
{
if (pf->price > pb->price)
{
//升序排序
temp =* pf;//交换节点的地址
*pf = *pb;
*pb = temp;
temp.next = pf->next ;//交换被交换节点的指向地址
pf->next = pb->next ;
pb->next = temp.next ;
}
pb = pb->next ;
}
pf = pf->next ;
}
printlist(head);
printf("\n升序排序完毕...\n\n");
break;
case 2:
while (pf->next != NULL)
{
//以pf指向的节点为基准节点
pb = pf->next ;//pb从基准点的下一个节点开始
while (pb != NULL)
{
if (pf->price < pb->price)
{
//降序排序
temp =* pf;//交换节点的地址
*pf = *pb;
*pb = temp;
temp.next = pf->next ;//交换被交换节点的指向地址
pf->next = pb->next ;
pb->next = temp.next ;
}
pb = pb->next ;
}
pf = pf->next ;
}
printlist(head);
printf("\n降序排序完毕...\n\n");
break;
}
}
统计信息:
void sta(link head)
{
printf("请输入你想要进行的统计类型前的序号:\n");
printf("1.药品价格相同统计:\n2.药品价格与保质期均相同统计:\n") ;
int k;int m,n;int count;
pnode*p;
p=head->next;
scanf("%d",&k);
switch(k)
{
case 1:
count=0;
printf("请输入你想要统计的药品价格:");
scanf("%d",&m);
while(p)
{
if(p->price==m)
{
count++;
}
p=p->next;
}
printf("%d出现次数:%d\n",m,count);
break;
case 2:
count=0;
printf("请输入你想要统计的药品价格和保质期:\n");
scanf("%d%d",&m,&n);
while(p)
{
if(p->price==m&&p->term==n)
{
count++;
}
p=p->next;
}
printf("药品价格和保质期均相同出现的次数为%d\n",count);
break;
}
}
搜索信息:
pnode * search(link head)
{
char name[20];int n;int price;pnode*p;p=head->next;int flag=0;
printf("请输入所要进行查询类别前的序号:\n");
printf("1.名称查询\n2.价格查询\n3.名称与价格查询\n");
scanf("%d",&n);
switch(n)
{
case 1:
printf("请输入需要查询的药品的名称:\n");
scanf("%s",name);
while(p)
{
if(strcmp(p->name,name)!=0)
{
p=p->next;
}
else{
printf(" 药名:%s 功能:%s 甜度:%s 价格:%d 保质期:%d\n ",p->name,p->function,p->sweet,p->price,p->term);
p=p->next;
flag=1;
}
}
if(flag==0)
printf("没有找到值为%s的结点!\n",name);
return p;
case 2:
printf("请输入需要查询的药品的价格:\n");
scanf("%d",&price);
while(p)
{
if(p->price!=price){
p=p->next;
}
else{
printf("药名:%s 功能:%s 甜度:%s 价格:%d 保质期:%d\n",p->name,p->function,p->sweet,p->price,p->term);
flag=1;
p=p->next;
}
}
if(flag==0)
printf("没有找到!\n");
return p;
case 3:
printf("请输入需要查询的药品的名称与价格:\n");
scanf("%s",name);
scanf("%d",&price);
while(p)
{
if((strcmp(p->name,name))!=0||(p->price!=price)){
p=p->next;
}
else{
printf("药名:%s 功能:%s 甜度:%s 价格:%d 保质期:%d\n",p->name,p->function,p->sweet,p->price,p->term);
p=p->next;
flag=1;
}
}
if(flag==0)
printf("没有找到!\n");
return p;
}
}
修改信息:
void change(link head)
{
char name[20];int price;int n;pnode*q;char function[20];char sweet[20];int term;
q=head->next;
printf("1.修改价格\n2.修改功能\n3.修改甜度\n4.修改保质期\n");
printf("请输入你想要进行操作前的序号:");
scanf("%d",&n);
printf("请输入需要修改信息的药的名称,如果药名相同的话,对应的对应信息按次序被修改:\n");
scanf("%s",name);
switch(n)
{
case 1:
while(q)
{
if(strcmp(q->name,name)!=0)
{
q=q->next;
}
else
{
printf("请输入需要修改的药的价格:\n");
scanf("%d",&price);
q->price=price;
q=q->next;
}
}
printf("修改完毕,请进行保存!\n");
break;
case 2:
while(q)
{
if(strcmp(q->name,name)!=0)
{
q=q->next;
}
else
{
printf("请输入需要修改的药的功能:\n");
scanf("%s",function);
strcpy(q->function,function);
q=q->next;
}
}
printf("修改完毕,请进行保存!\n");
break;
case 3:
while(q)
{
if(strcmp(q->name,name)!=0)
{
q=q->next;
}
else
{
printf("请输入需要修改的药的甜度:\n");
scanf("%s",sweet);
strcpy(q->sweet,sweet);
q=q->next;
}
}
printf("修改完毕,请进行保存!\n");
break;
case 4:
while(q)
{
if(strcmp(q->name,name)!=0)
{
q=q->next;
}
else
{
printf("请输入需要修改的药的保质期:\n");
scanf("%d",&term);
q->term=term;
q=q->next;
}
}
printf("修改完毕,请进行保存!\n");
break;
}
}
主函数:
int main(void)
{
printf("-------****-----------------------------*******欢迎来到药店管理系统******------------------------****------------\n\n");
printf("请按要求进行输入!\n");
printf("初始密码:123456\n\n");
printf("您有三次密码输入机会!\n\n");
int n;int i;
int secret;char name[20];
printf("请输入用户名:\n\n");
scanf("%s",name);
printf("请输入初始密码:\n\n");
scanf("%d",&secret);
for(i=0;i<2;i++)
{
if(secret==123456)
{
printf("密码正确,正在进入系统!\n\n");
system("pause");
break;
}
else
{
printf("密码错误,请重新输入:\n\n");
}
scanf("%d",&secret);
}
if(2==i)
{
printf("登录失败,请退出重试!\n\n");
}
link head;
head=init();
while(secret==123456)
{
n=menu();//写到while外面会陷入死循环
switch(n)
{
case 1:printf("--------------------*****【创建信息】*****---------------------\n\n");
GreatByRear(head);
system("pause");
break;
case 2:printf("--------------------*****【添加信息】*****---------------------\n\n");
plus(head);
system("pause");
break;
case 3:printf("--------------------*****【修改信息】*****---------------------\n\n");
change(head);
system("pause");
break;
case 4:printf("--------------------*****【插入信息】*****---------------------\n\n");
insert(head);
system("pause");
break;
case 5:printf("--------------------*****【删除信息】*****---------------------\n\n");
Delete(head);
system("pause");
break;
case 6:printf("--------------------*****【浏览信息】*****---------------------\n\n");
printlist(head);
system("pause");
break;
case 7:printf("----------------*****【排序信息】*****---------------\n\n");
sort(head);
system("pause");
break;
case 8:printf("---------------*****【查询信息之名称查询】*****---------------\n\n");
search(head);
system("pause");
break;
case 9:printf("---------------*****【统计信息】*****---------------\n\n");
sta(head);
system("pause");
break;
case 10:printf("--------------------*****【存储信息】*****---------------------\n\n");
save(head);
system("pause");
break;
case 11:printf("--------------------*****【打印信息】*****---------------------\n\n");
PrintReport();
puts("");
system("pause");
break;
case 12:printf("--------------------*****【系统帮助】*****---------------------\n\n");
help();
system("pause");
break;
case 13:printf("--------------------*****【退出系统】*****---------------------\n\n");
printf("正常退出!\n");
system("pause");
exit(0);
system("cls");
}
}
return 0;
}