数据结构.docx
《数据结构.docx》由会员分享,可在线阅读,更多相关《数据结构.docx(16页珍藏版)》请在冰豆网上搜索。
数据结构
《数据结构》
课程设计报告
设计题目药品销售统计系统
学院名称信息工程学院
专业班级12计本1
姓名
学号
程序设计书目录
一.课程题目
二.设计目标
三.问题描述
四.需求分析
五.概要设计
六.详细设计(给出算法的伪码描述和流程图)
七.测试分析
八.使用说明
九.测试数据
一十.课程设计总结
1.课程题目:
药品销售统计系统
二.设计目标:
通过对药品销售统计系统的课程设计,加深队程序设计的理解,熟练掌握和加深c语言的基本知识和语法规范,同时更进一步地理解数据结构各种排序的应用,也提高了我们进行程序设计的基本能力。
这次课程设计提供一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼分析解决实际问题的能力,从而进一步提高了实际运用的能力。
3.问题描述:
设计一个系统,实现医药公司定期对销售各药品的记录进行统计,可按药品的编号、单价、销售量或者销售额做出排名。
4.需求分析:
1.定义药品信息的结构体;
2.输入药品信息;
3.用冒泡排序法对药品单价排序;
4.用快速排序法对销售量排序;
5.用直接插入排序法和选择排序法对销售额排序;
6.打印内容。
5.概要设计:
1.本程序主要运用了结构体的定义、线性表的顺序存储、及函数调用的相关知识。
A.结构体的定义:
typedefstruct
{
charnum[10];/*药品编号*/
charname[16];/*药品名称*/
floatprice;/*药品单价*/
intcount;/*销售数量*/
floatsale;/*本药品销售额*/
intnext;
}DataType;
B.线性表的顺序存储:
typedefstruct
{
DataTyper[MaxSize];
intlength;
}SequenList;
2.进入主函数,开始进入while循环,输入药品的各类信息,输入完成后,显示菜单。
用户自己选择。
选择1,调用冒泡排序法对药品单价排序BubbleSort(SequenList&L);选择2,调用快速排序法对销售量排序QuickSort(SequenList*L);选择3,调用选择排序法对销售额排序SelectionSort(SequenList&L);选择0,提出系统。
六.详细设计:
总体操作步骤:
(1)流程图;
(2)分配存储空间,定义结构体,顺序表;
(3)输入数据,调用函数;
(4)完成操作。
流程图:
1.冒泡排序:
voidBubbleSort(SequenList&L)//冒泡排序
{
inti,j;
boolflag;
DataTypetemp;
for(i=L.length-1;i>=0;i--){
flag=0;
for(j=0;j
{
if(L.r[j].price>L.r[j+1].price)
{
temp=L.r[j];
L.r[j]=L.r[j+1];
L.r[j+1]=temp;
flag=1;
}
}
if(!
flag)break;
}
printf("按单价排序后的结果是:
\n");
for(i=0;i{
printf("%s%s%f%d%f",L.r[i].num,L.r[i].name,L.r[i].price,L.r[i].count,L.r[i].sale);
printf("\n");
}
}
2.快速排序:
voidQuickSort(SequenList*L)//快速排序
{
inti;
Qsort(L,0,L->length-1);
printf("用快速排序对销售量排序后的结果是:
\n");
for(i=0;ilength;i++)
{
printf("%s%s%f%d%f",L->r[i].num,L->r[i].name,L->r[i].price,L->r[i].count,L->r[i].sale);
printf("\n");
}
}
3.选择排序:
voidSelectionSort(SequenList&L)//选择排序
{
inti,j,min;
DataTypetemp;
for(i=0;i{
min=i;
for(j=i+1;j{
if(L.r[j].salemin=j;
temp=L.r[i];
L.r[i]=L.r[min];
L.r[min]=temp;
}
}
for(i=0;i{
printf("%s%s%f%d%f",L.r[i].num,L.r[i].name,L.r[i].price,L.r[i].count,L.r[i].sale);
printf("\n");
}
}
程序源代码:
#include"stdio.h"
#defineMaxSize100
typedefstruct
{
charnum[10];/*药品编号*/
charname[16];/*药品名称*/
floatprice;/*药品单价*/
intcount;/*销售数量*/
floatsale;/*本药品销售额*/
intnext;
}DataType;
typedefstruct
{
DataTyper[MaxSize];
intlength;
}SequenList;
voidBubbleSort(SequenList&L)//冒泡排序
{
inti,j;
boolflag;
DataTypetemp;
for(i=L.length-1;i>=0;i--){
flag=0;
for(j=0;j
{
if(L.r[j].price>L.r[j+1].price)
{
temp=L.r[j];
L.r[j]=L.r[j+1];
L.r[j+1]=temp;
flag=1;
}
}
if(!
flag)break;
}
printf("按单价排序后的结果是:
\n");
for(i=0;i{
printf("%s%s%f%d%f",L.r[i].num,L.r[i].name,L.r[i].price,L.r[i].count,L.r[i].sale);
printf("\n");
}
}
voidswap(DataType*a,DataType*b)
{
DataTypetemp=*a;
*a=*b;
*b=temp;
}
voidQsort(SequenList*L,intLow,intHigh)
{
DataTypetemp=L->r[Low];
intleft=Low,right=High;
if(Low>=High)return;
swap(&L->r[Low],&L->r[right]);
while
(1)
{
while((Low=L->r[Low].count))Low++;
while((Lowr[High].count))High--;
if(Lowswap(&L->r[Low],&L->r[High]);
elsebreak;
}
swap(&L->r[Low],&L->r[right]);//对两个子集进行快排
Qsort(L,left,Low-1);
Qsort(L,Low+1,right);
}
voidQuickSort(SequenList*L)//快速排序
{
inti;
Qsort(L,0,L->length-1);
printf("用快速排序对销售量排序后的结果是:
\n");
for(i=0;ilength;i++)
{
printf("%s%s%f%d%f",L->r[i].num,L->r[i].name,L->r[i].price,L->r[i].count,L->r[i].sale);
printf("\n");
}
}
voidSelectionSort(SequenList&L)//选择排序
{
inti,j,min;
DataTypetemp;
for(i=0;i{
min=i;
for(j=i+1;j{
if(L.r[j].salemin=j;
temp=L.r[i];
L.r[i]=L.r[min];
L.r[min]=temp;
}
}
for(i=0;i{
printf("%s%s%f%d%f",L.r[i].num,L.r[i].name,L.r[i].price,L.r[i].count,L.r[i].sale);
printf("\n");
}
}
voidmain()
{
SequenListk;
k.length=0;
intchoice;
while(k.length<5)
{
printf("---请输入药品编号---:
");
scanf("%s",&k.r[k.length].num);
printf("---请输入药品名称---:
");
scanf("%s",&k.r[k.length].name);
printf("---请输入药品单价---:
");
scanf("%f",&k.r[k.length].price);
printf("---请输入药品销售数量---:
");
scanf("%d",&k.r[k.length].count);
printf("---请输入药品销售额---:
");
scanf("%f",&k.r[k.length].sale);
k.length++;
}
printf("此系统有如下功能:
\n");
printf("=========================================\n");
printf("1、用冒泡对药品单价排序*\n");
printf("2、用快排对药品销售量排序*\n");
printf("3、用选择排序对销售额排序*\n");
printf("0、退出系统*\n");
printf("=========================================\n");
printf("请输入您的选择:
\n");
scanf("%d",&choice);
while(choice)
{
switch(choice)
{
case1:
BubbleSort(k);break;//冒泡排序
case2:
QuickSort(&k);break;//快速排序
case3:
SelectionSort(k);break;//选择排序
default:
printf("没有您选择的功能,请确定后重新输入\n");
}
printf("=========================================\n");
printf("1、用冒泡对药品单价排序*\n");
printf("2、用快排对药品销售量排序*\n");
printf("3、用选择排序对销售额排序*\n");
printf("0、退出系统*\n");
printf("=========================================\n");
printf("请输入您的选择:
\n");
scanf("%d",&choice);
}
}
7.测试分析:
白盒:
代码完整,可运行。
√
黑盒:
8.使用说明:
打开开始菜单找到VC++6.0,打开此软件,用鼠标单击文件菜单里的打开选项,导入文件,按ctrl+f7,看文件是否有错误,如果没有错误按ctrl+f5进行运行。
程序运行中首先需要输入药品的各类信息。
然后会出现菜单供大家选择,我们首先选择1,用冒泡排序法对药品单价排序,再回车,又出现菜单,供大家选择。
选择2,快速排序法对销售量排序,回车,出现菜单。
选择3,选择排序法对销售额排序,回车出现原始菜单。
我们选择0,退出。
九.测试数据:
输入药品信息:
1.用冒泡排序法对药品单价排序:
2.用快速排序法对销售量排序:
3.用直接插入排序法和选择排序法对销售额排序:
4.退出系统:
10.课程设计总结:
最后一次课程设计总算圆满结束了。
本次课程设计要求的是对排序的掌握,说实话觉得有点难。
以前只对冒泡有点了解,数据结构又学习了快速排序、简单插入排序、选择排序、希尔排序等等。
要全部掌握还是有点小困难。
所以课程设计要求下来,看了几遍书,查阅了不少资料。
总算勉强完成,但对于如何从文件中调用数据,还是不太会,由于时间问题,所以我就直接输入了数据,看来下去还得多做
研究和学习啊!
总之这四次课程设计,对我还是收获蛮大的!
我相信在以后的学习和工作中一定会让我受益匪浅的!