药店药品信息管理系统课程设计报告

《数据结构》课程设计题目:药店药品信息管理系统

系别:计算机信息与技术系

专业:计算机科学与技术专业

班级:B130601

学号:B13060125

学生姓名:杨晴雯

指导教师:王楠

2015年07月

目录

1 需求分析 (1)

1.1 问题描述 (1)

1.2 需求分析 (1)

2 概要设计 (2)

2.1 主界面设计 (2)

2.2 存储结构设计 (2)

2.3 系统功能设计 (3)

3 模块设计 (4)

3.1 系统子程序及功能设计 (4)

3.2 系统功能图 (4)

4 详细设计 (5)

4.1 数据类型定义 (5)

4.2 系统主要子程序详细设计 (5)

5 测试分析 (9)

6 源程序清单 (12)

7 工作总结 (20)

8 参考文献 (21)

1 需求分析

1.1 问题描述

随着我国医疗事业的发展和社会不同人群的需求,药店的药品层出不穷。这对于消费者来说固然是好事,可是对于药店管理者来说,药品种类越多,越不容易记录和查找,还容易出错。所以以前的记录在账本上的方式已经落后了,药店需要一套完备的药店药品信息管理系统,方便药店管理者管理药店,以贴近时代需求,走向现代化管理道路。

1.2 需求分析

1.建立药品信息表;

2.插入新药品信息;

3.查询新药品信息记录;

4.药品销售;

5.显示库存药品信息;

6. 退出管理系统

2 概要设计

2.1 主界面设计

当输入相应的操作字符(比如:0-5),通过在主函数中选择并调用对应的子函数程序以及其他函数(比如:菜单函数)中的辅助调用,实现并完成各自的功能操作(比如:添加、查找、删除、显示等)。

系统主界面如下:

图2.1

2.2 存储结构设计

依据给定的数据格式,药品信息由四个字段来组成,即药品编号、药品名称、药品数量、药品价格。

如:

药品编号| 药品名称| 药品数量| 药品价格|

012 感康36 12

通过C语言把学生的信息用单链表形式连接,源程序要有适当的注释,使程序易于阅读,进行储存。同时进行各种修改,完成信息管理等功能。

2.3 系统功能设计

依据程序的数据结构和功能,遵照“自顶向下”原则,描述该程序的层次结构,在总体上包括数据的定位、插入、建表、显示、删除等功能模块。

(1)定位函数功能:具体了解要插入函数的位置。

(2)插入函数功能:找到要插入函数的位置,进行函数插入。

(3)显示函数功能:按照指定关键字,对相应商品信息进行查找显示。

(4)删除函数功能:查找到要删除商品的相应信息,并将其从表中永久的删除。(5)主函数功能:调用以上子函数,并用开关语句进行选择性的调用。

3 模块设计

3.1 系统子程序及功能设计

LinkList prior(LinkList L,LinkList p) 定位函数

void ListInsert_L(LinkList L,LinkList p) 插入函数LinkList CreateList_L() 建表

void void showlist(LinkList L) 显示函数

void deleList(LinkList L,int i) 删除(按序号)void delName(LinkList L,char n[]) 删除(按名字)int searchnum(LinkList L,int n) 查询(按编号)int searchName(LinkList L,char n[]) 查询(按名字)

3.2 系统功能图

4 详细设计4.1 数据类型定义

typedef struct node

{

int num;//药品编号

char name[20];//商药品名称

int amount;//药品数量

int price;//药品价格

struct node *next;

}Node,*LinkList;

4.2 系统主要子程序详细设计

1.定位函数

LinkList prior(LinkList L,LinkList p)

{

{while(q->next!=p)

q=q->next;

return(q);}

}

2.插入函数

void ListInsert_L(LinkList L,LinkList p)

{

while(s!=NULL&& p->num>=s->num)

{s=prior(L,s);p->next=NULL; s->next=p;}

{s=prior(L,s);p->next=s->next;s->next=p;}

}

3.创建函数

LinkList CreateList_L()

{

while(num>=0)

{ p=(LinkList)malloc(sizeof(node));

p->num=num;

p->amount=amount;

strcpy(p->name,name);

p->price=price;

ListInsert_L(L,p);

}

}

4.显示函数

void showlist(LinkList L)

{

if(L==NULL||L->next==NULL) printf("仓库中没有药品\n");

else

while(p->next!=NULL)//不为空的情况下输出表内信息

{

p=p->next;//不断寻找下一条信息

n++;

}

}

5.删除函数(按序号)

void deleList(LinkList L,int i)

{ while(p->next&&j

{p=p->next;

j++;

}

free(q);

}

6.删除函数(按名称)

{

if(L->next==NULL)

else

{

while(p!=NULL)

{

if(!strcmp(p->name,n))

{

p=p->next;

deleList(L,sale);

}

else{p=p->next;sale++;}

}

}

7.查找函数(按名字)

int searchName(LinkList L,char n[])

{

if(L->next==NULL||L==NULL) printf("仓库中没有该药品\n");

else

{

while(p!=NULL)

{

if(!strcmp(p->name,n))

p=p->next;sale++;

}

}

return x;

}

8.查找函数(按编号)

int searchnum(LinkList L,int n )

{

if(L->next==NULL) printf("该链表中没有元素\n");

else

{

while(p!=NULL)

{

if(p->num<=n)

if(p->num==n)

p=p->next;sale++;

}

}

return x;

}

2.主函数:主要由switch语句组成,便于函数调用。

switch(choose)

{

case 1:CreateList _L; break;/*增加记录*/

case 2: ListInsert_L(L,p);break; /*插入记录*/

case 3: searchnum(L,name);break; /*查询记录*/

case 4: deleList(L,n); break; /*删除记录*/

case 5: showlist(L);break; /*显示记录*/

case 0:exit();break; /*退出系统*/

}

3.主页面函数

void main(){

LinkList L=NULL;

system("cls");

system ("color 4f");

printf("\n ******^e^欢迎使用药店药品信息管理系统**********\n");

printf("\n * 1建立药品信息表*\n");

printf("\n * 2插入新药品信息*\n");

printf("\n * 3查询药品信息记录*\n");

printf("\n * 4药品销售*\n");

printf("\n * 5显示库存药品信息*\n");

printf("\n * 0退出管理系统*\n");

printf("\n ******^e^欢迎使用药店药品信息管理系统**********\n");

printf("\n 请选择操作:\n");}

5 测试分析

各功能的运行结果:

1)建立信息表:在主菜单中选择1,进入建立信息表

图5.1

2)插入信息:选择2,进行插入信息

图5.2

3)查询药品信息,选择3,进行查询信息

图5.3 4)药品销售,选择4,进行药品销售

图5.4

5)显示库存药品信息,选择5,进行显示

图5.5 6)退出系统:选择0,退出系统。

6 源程序清单

#include

#include

#include

int sale;

typedef struct node

{

int num;

char name[20];

int amount;

int price;

struct node * next;

}node,*LinkList;

LinkList prior(LinkList L,LinkList p)//定位函数

{ LinkList q=L->next;

if(L->next==NULL)

return(L);

else

{while(q->next!=p)

q=q->next;

printf("1");

return(q);}

}

void ListInsert_L(LinkList L,LinkList p)//插入函数

{

LinkList s=L->next;

while(s!=NULL&& p->num>=s->num)

{

if(s->num==p->num)

printf("重复输入\n");

s=s->next;//已经存在信息

}

if(s==NULL)//空表插入

{s=prior(L,s);p->next=NULL; s->next=p;}

else //寻找位置插入

{s=prior(L,s);p->next=s->next;s->next=p;}

}

LinkList CreateList_L()//建表

{

LinkList L=(LinkList)malloc(sizeof(node));//给空间

L->next=NULL;//初始化

LinkList p;

int num;

char name[20];

int amount;

int price;

printf("请输入药品编码:");

scanf("%d",&num);

printf("请输入药品名称:");

char temp=getchar();

gets(name);

printf("请输入药品数量:");

scanf("%d",&amount);

printf("请输入药品价格:");

scanf("%d",&price);

while(num>=0)//重复输入信息的条件

{

p=(LinkList)malloc(sizeof(node));

p->num=num;

p->amount=amount;

strcpy(p->name,name);

p->price=price;

ListInsert_L(L,p);

printf("请输入药品编码:");

scanf("%d",&num);

printf("请输入药品名称:");

char temp=getchar();

gets(name);

printf("请输入药品数量:");

scanf("%d",&amount);

printf("请输入药品价格:");

scanf("%d",&price);

}

return(L);

}

void showlist(LinkList L)//显示函数

{

printf("\n --------------------------------------------------------- \n");

printf("\n 序号药品编码药品名称药品数量药品价格\n");

printf(" --------------------------------------------------------- \n");

LinkList p=L;

int n=1;

if(L==NULL||L->next==NULL) printf("仓库中没有药品\n");//空表

else

while(p->next!=NULL)//不为空的情况下输出表内信息

{

printf(" %8d %4d",n,p->next->num);

printf(" %4s %4d %d\n",p->next->name,p->next->amount,p->ne xt->price);

p=p->next;//不断寻找下一条信息

n++;

printf(" ---------------------------------------------------------- \n");

}

}

void deleList(LinkList L,int i)

{

LinkList p=L;

int j=0;

while(p->next&&j

{p=p->next;

j++;

}

if(!(p->next))

{printf("删除失败\n",i);

}

LinkList q=p->next;

p->next=q->next;

free(q);

}

int delName(LinkList L,char n[])

{

int x=0;

LinkList p=L->next;

sale=1;

if(L->next==NULL)

printf("无可删除元素\n");

else

{

while(p!=NULL)

{

if(!strcmp(p->name,n))

{

x=1;

printf("%s",p->name);

p=p->next;

deleList(L,sale);

}

else{p=p->next;sale++;}

}

if(x) printf("被删除\n");

}

return x;

}

int searchName(LinkList L,char n[])

{

int x=0;

LinkList p=L->next;

sale=1;

if(L->next==NULL||L==NULL) printf("仓库中没有该药品\n");

else

{

while(p!=NULL)

{

if(!strcmp(p->name,n))

{

x=1;

printf("查找的是第%d个商品:\n",sale);

printf("Num:%d Name:%s amount:df Price:%d\n",p->num,p->name,p->amount,p->price);

}

p=p->next;sale++;

}

}

return x;

}

int searchnum(LinkList L,int n)

{

int x=0;

LinkList p=L->next;

sale=1;

if(L->next==NULL) printf("该链表中没有元素\n");

else

{

while(p!=NULL)

{

if(p->num<=n)

if(p->num==n)

{

x=1;

printf("查找的是第%d个药品:\n",sale);

printf("Num:%d Name:%s Amount:%d Price:%d

\n",p->num,p->name,p->amount,p->price);

}

p=p->next;sale++;

}

}

return x;

}

void main(){

LinkList L=NULL;

system("cls");

system ("color 4f");

printf("\n ******^e^欢迎使用药店药品信息管理系统**********\n"); printf("\n * 1建立药品信息表*\n"); printf("\n * 2插入新药品信息*\n"); printf("\n * 3查询药品信息记录*\n"); printf("\n * 4药品销售*\n"); printf("\n * 5显示库存药品信息*\n"); printf("\n * 0退出管理系统*\n"); printf("\n ******^e^欢迎使用药店药品信息管理系统**********\n"); printf("\n 请选择操作:\n");

int x=0;

int a;

printf("请选择0-5: ");

scanf("%d",&a);

while(a!=0)

{

switch(a)

{

case 1:

{

printf("建立药品信息表:\n");

L=CreateList_L();

showlist(L);

x=1;

break;

}

case 2:

{if(x==1)

{

int num,amount,price;

char name[20];

printf("请输入药品编码:");

scanf("%d",&num);

printf("请输入药品名称:");

char temp=getchar();

gets(name);

printf("请输入药品数量:");

scanf("%d",&amount);

printf("请输入药品价格:");

scanf("%d",&price);

LinkList p=(LinkList)malloc(sizeof(node));

p->num=num;

p->amount=amount;

strcpy(p->name,name);

p->price=price;

ListInsert_L(L,p);

printf("插入后:\n");

showlist(L);

}

break;

}

case 3:

{

int b,n,s;

char name[20];

printf("选择查询方式:\n");

printf(" 1.按药品编码查询 2.按药品名称查询\n");

scanf("%d",&b);

if(b==1)

{

printf("\n请输入药品编码:");

scanf("%d",&n);

s=searchnum(L,n);

if(s==0)

printf("无此药品!\n");

}

else if(b==2)

{

printf("\n请输入药品名称:");

char temp=getchar();

gets(name);

s=searchName(L,name);

if(s==0)

printf("无此药品!\n");

}

else

printf("无库存!\n");

break;

}

case 4:

{ int b;

printf("请选择删除方式: \n");

printf("1按药品序号删除2按药品名称删除\n");

scanf("%d",&b);

if (b==1)

{

int c;

printf("请输入药品序号:\n");

scanf("%d",&c);

printf("删除后:\n");

deleList(L,c);

showlist(L);

}

else if(b==2)

{

int f;

char name[20];

printf("请输入药品名称:\n");

char temp=getchar();

gets(name);

f=delName(L,name);

if (f!=0)

{

printf("删除后:\n");

showlist(L);}

else

printf("无该药品!\n");

}

else

printf("出错!\n");

break;

}

case 5:

{

printf("剩余药品信息:\n");

showlist(L);

相关文档
最新文档