一、问题分析
设计药房管理系统,输入药品基本信息,包括药品编号、名称、单价、库存数量,并实现以下功能:
1、可以更正、删除、查询、输出指定药品的信息。
2、按库存数量或单价进行药品的升降并显示药品信息。
3、将药品信息写入文件。
分步推行:
1、达成整体设计,搭好框架,确定界面和函数个数;
2、达成最低要求实现药品的添加、删除、更正等功能;
3、进一步要求:实现药品升降的功能。
二、系统功能设计
对药房管理系统进行分析,根据系统需要实现的药品信息的输入输出,药品信息的增加,更正,删除以及查询,排序等将系统划分为了8个系统功能模块。在这8个系统功能模块中,可以做到正确的录入信息并且保存,可以有效,快速的查询药品信息,更正药品信息甚至是删除药品信息,在这些方面都得到了很好的应用。具体的药房管理系统的功能分析模块如下图所示:
三、系统实现
1、代码
#include <stdio.h>
#include <string.h>
#define N 100
void Addyaofang(); //添加药品信息
void Delyaofang(); //删除药品信息
void Updateyaofang(); //更正药品信息
void Searchyaofang(); //查询药品信息
void Inputyaofang(); //输出药品信息
void Paixuyaofang1(); //按照库存数量降序
void Paixuyaofang2();//按照单价升序
void SaveFile(); //药品信息写入文件abc.txt中
void ReadFile(); //从文件abc.txt中读入药品信息
struct yaofang
{
char name[20];
int number,price,count; //输入编号,单价,数量
};
struct yaofang me[N];
int length;
int main()
{
int select;
ReadFile();
printf("\n\t\t已从文件d:\\yaofang. txt读入%d个药品信息\n",length);
while(1)
{
printf("\n\n\t\t== == == ==欢迎使用药房管理系统== == == ==\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\t0. 保存数据、退出系统\n");
printf("\n");
printf("\t\t请输入你的选择:");
scanf("%d",&select);
switch(select)
{
case 1:Addyaofang(); break;
case 2:Delyaofang(); break;
case 3:Updateyaofang(); break;
case 4:Searchyaofang(); break;
case 5:Inputyaofang(); break;
case 6:Paixuyaofang1(); break;
case 7:Paixuyaofang2(); break;
case 0:SaveFile(); return 0;
}
}
}
//输入药品信息
void Addyaofang()
{
struct yaofang t;
printf("\n 请输入药品名称:\n");
scanf("%s",t. name);
printf("请输入药品的编号、单价、数量:\n");
scanf("%d%d%d",&t.number,&t.price,&t.count);
me[length++]=t;
SaveFile();
printf("\n添加成功!目前共%d条数据\n\n",length);
}
/*****删除药品*****/
void Delyaofang ()
{
char name[20];
int i;
printf("请输入要删除药品的名称:\n");
scanf("%s",name);
for(i=0;i<length;i++)
if(strcmp(me[i].name,name)==0) break;
for( ; i<length-1;i++)
me[i]=me[i+1];
length --;
SaveFile ();
printf ("\n删除成功!目前共%d条数据\n\n",length);
}
/*****更正药品信息*****/
void Updateyaofang()
{
struct yaofang t;
int i ;
printf ("请输入药品的名称:\n");
scanf ("%s",&t. name);
printf("请输入药品的编号、单价、数量:\n");
scanf("%d%d%d%d",&t. number,&t. price,&t. count);
for (i=0; i < length ; i ++)
if (strcmp(me[i]. name,t. name )==0) break;
me[i]=t;
SaveFile ();
printf ("\n修改成功!目前共%d条数据\n\n",length);
}
/*********查询药品信息*********/
void Searchyaofang()
{
char name[20];
int i;
printf("\n请输入要查找的药品名称");
scanf("%s",name);
for(i=0;i<length;i++)
if(strcmp(me[i].name,name)==0)
{
printf("\n药品名称:%s\n",me[i].name);
printf("编号:%d\n",me[i].number);
printf("单价:%d\n",me[i].price);
printf("数量:%d\n",me[i].count);
break;
}
}
/*********输出药品信息*********/
void Inputyaofang()
{
int i;
printf("\n");
printf("\t\t|药品名称|编号|单价|数量|\n");
for(i=0;i<length;i++)
{
printf("\t\t|%-8s|%4d|%4d|%4d|\n",
me[i].name,me[i].number,me[i].price,me[i].count);
}
}
/*********按照库存数量降序*********/
void Paixuyaofang1()
{int i,j,max,k;
struct yaofang t;
for(i=0;i<length-1;i++)
{max=me[i].count,k=i;
for(j=i+1;j<length;j++)
if(max<me[j].count)max=me[j].count,k=j;
t=me[i];me[i]=me[k];me[k]=t;
}
printf("\t\t-----按照库存数量从大到小排序-----\n");
Inputyaofang();
SaveFile();
}
/*********按照单价升序*********/
void Paixuyaofang2()
{
int i,j,k;
char min[50];
struct yaofang t;
for(i=0;i<length-1;i++)
{
strcpy(min,me[i].name),k=i;
for(j=i+1;j<length;j++)
if(strcmp(min,me[j]. name)>0)strcpy(min,me[j]. name),k=j;
t=me[i];me[i]=me[k];me[k]=t;
}
printf("-----按照单价升序-----\n");
Inputyaofang();
SaveFile();
}
/*********药品信息写入文件abc.txt中*********/
void SaveFile()
{
FILE *fp;
int i=0;
fp=fopen("D:\\yaofang.txt","w");
for(i=0;i<length;i++)
{
fprintf(fp,"%s",me[i].name);
fprintf(fp,"%d",me[i].number);
fprintf(fp,"%d",me[i].price);
fprintf(fp,"%d",me[i].count);
}
fclose(fp);
}
/*********从文件yaofang.txt中读入药品信息*********/
void ReadFile()
{
FILE *fp;
struct yaofang t;
fp=fopen("D:\\yaofang.txt","r");
length=0;
while(!feof(fp))
{
fscanf(fp,"%s",&me[length].name);
fscanf(fp,"%d",&me[length].number);
fscanf(fp,"%d",&me[length].price);
fscanf(fp,"%d",&me[length].count);
length++;
}
fclose(fp);
}