药店药品信息管理系统课程设计报告
《数据结构》课程设计题目:药店药品信息管理系统
系别:计算机信息与技术系
专业:计算机科学与技术专业
班级: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);