C语言药店管理系统

加密:

# 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;
}


  • 20
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值