资源描述
《数据结构》课程设计
题目:药店药品信息管理系统
系 别:计算机信息与技术系
专 业:计算机科学与技术专业
班 级: 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 系统功能图
退出管理系统
插入新药品信息
药品销售
显示库存药品信息
查询新药品信息记录
建立药品信息表
图3.1
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<i-1)
{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〈stdio。h>
#include<stdlib.h>
#include〈string。h〉
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-〉next—>price);
p=p-〉next;//不断寻找下一条信息
n++;
printf(” -—--—-—-——-——----—-----————-—--—---—-————---—--————-—-—-—— \n”);
}
}
void deleList(LinkList L,int i)
{
LinkList p=L;
int j=0;
while(p—〉next&&j〈i-1)
{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);
break;
}
case 0:
exit (0);
}
printf(”请选择0-5: ");
scanf("%d”,&a);
}
7 工作总结
这周进行了数据结构的课程设计-—-——药店药品信息管理系统,我发现自己在编程方面存在很大问题,面对要求,代码根本无从下手,由于自己C语言能力比较差,写出来的代码调试也存在很多的问题.本次设计单凭自己的能力根本不可能完成,幸亏有老师和同学们的帮助,我才能完成这次设计。这次课程设计给我体会颇深,我深刻认识到自己C语言基础很差,以后要加强基础知识的学习,真正了解问题本身的精髓,特别要提高C语言编程能力,更重要的是要多进行试验操作,提高自己的动手实践能力。
8 参考文献
[1] 史济民,顾春华。 软件工程-—原理、方法与应用[M]。 北京:高等教育出版社,2004.
[2] 张海藩. 软件工程导论[M]. 北京:清华大学出版社,2005.
[3] 吴伟民. 数据结构。 北京:清华大学出版社,2013年.
14
展开阅读全文