药店的药品销售统计系统详解加源代码

2025-10-04 04:10:09

1、作为一名徘徊在课设边缘不能自拔的编程学习者,思路很关键,因为编程思想并不是一朝一夕就能培养出来的,所以临阵磨枪,思路优先

要达到排序的目的,首先要建立排序对象,要建立一个对象,就要确定他的数据元素结构以及存储方式,所以在看到题目后,大家应该有形如下图一样清晰的编程思路,先做什么,再做什么。

药店的药品销售统计系统详解加源代码

2、头文件应该懂得可以跳过本步

药店的药品销售统计系统详解加源代码

3、一,建立第一个结构体,应包含数据元素的各种数据项,比如,编号,销售额,销售量一类数据项,小编做了这样几个数据项。

药店的药品销售统计系统详解加源代码

4、建立第二个结构体,第二个结构体是为了确定存储结构,小编采用了顺序表,你也可以采用其他的方法。

药店的药品销售统计系统详解加源代码

5、初始化结构体,一般是数字的话呢直接复制就可以,如果是字符串的话呢,就要用到strcpy函数,自己拟定几个数据项一一赋值就可以了,一般我们会用一个函数吧他包裹起来,主函数直接调用,显得规范一些,当然了直接在主函数里赋值也是ok的。

void SetData(SequenList &S)

{

strcpy(S.r[1].num, "A001");

strcpy(S.r[10].name,"脑白金");

S.r[1].price = 9.8;

S.r[1].count = 1056;

S.r[1].sale = S.r[1].price*(double)S.r[1].count;

}

这是第一个,同样输入,一般输入5,6个就够调试了

6、做一个输出函数

一般用for循环就ok了很简单的

\t是空格的意思  

药店的药品销售统计系统详解加源代码

7、int Partition(SequenList &L,int low,int high)//快排法,关键字为count

{

L.r[0] = L.r[low];//设r[0]为哨兵,储存第一个关键字,low和high指向表的两头

int pivotkey = L.r[low].count;//用pivotkey存储第一个关键字

DataType q;

while (low<high)//当头和尾还没有相遇时

{

while (low < high&&L.r[high].count >= pivotkey)//当头尾未相遇且表尾所指元素大于等于表头时

--high;// 尾指针前移

q = L.r[low];//保存第一个元素

L.r[low] = L.r[high];//用表尾元素覆盖表头

L.r[high] = q;//将预先保存的表头赋值给表尾

while (low < high&&L.r[low].count <= pivotkey)//当表头表尾未相遇且表尾所指元素大于等于表头时

++low;//表头后移

q = L.r[low];//保存第一个元素

L.r[low] = L.r[high];//用表尾元素覆盖表头

L.r[high] = q;//将预先保存的表头赋值给表尾

}

cout << endl;

return low;//返回表头指针

}

void QSort(SequenList &L, int low, int high)

{

int pivotloc;

if (low < high)

pivotloc = Partition(L, low, high);

QSort(L, low, pivotloc - 1);

QSort(L, pivotloc + 1, high);

}

}

8、void PopSort(SequenList &L)//冒泡排序法

{

DataType q;

for (int i = 1; i <= L.length; ++i)//退位继续排序

{

for (int j = 1; j <= L.length-1; ++j)//j位和他的下一位做比较,所以length-1

{

if (L.r[j].price>L.r[j + 1].price)

{

q = L.r[j];

L.r[j] = L.r[j + 1];//两者换位

L.r[j + 1] = q;

}

}

}

}

9、void HeapAdjust(SequenList &H,int s,int m)//堆排序

{

DataType rc = H.r[s];

for (int j = 2 * s-1; j < m; j *= 2)

{

if (j < m&&H.r[j].sale<H.r[j + 1].sale)

++j;

if (rc.sale > H.r[j].sale)

break;

H.r[s] = H.r[j];

s = j;

}

H.r[s] = rc;

}

void HeapSort(SequenList &H)//堆排序

{

int i;

DataType q;

for (i = H.length / 2; i > 0; --i)

HeapAdjust(H, i, H.length);

for (i = H.length; i >1; --i)

{

q = H.r[1];

H.r[1] = H.r[i];

H.r[i] = q;

HeapAdjust(H, 1, i - 1);

}

}

10、void Distribute(DataType *r, int i, int *f, int *e)

{

int j, p;

for (j = 0; j <= 26; j++) 

f[j] = 0;

for (p = r[0].next; p; p = r[p].next)

{

if (i>0)

{

j = r[p].num[i] - '0';

if (!f[j])

f[j] = p;

else r[e[j]].next = p;

e[j] = p;    

}

else

{

j = r[p].num[i] - 'A';

if (!f[j])

f[j] = p;

else r[e[j]].next = p;

e[j] = p;

}

}

}

void Collect(DataType *r, int i, int *f, int *e)

{

int j, t;

for (j = 0; !f[j]; j++);

r[0].next = f[j];

t = e[j];

while (j<26)

{

for (j = j + 1; j<25 && !f[j]; ++j);

if (f[j])

{

r[t].next = f[j];

t = e[j];

}

}

r[t].next = 0;

}

void RadixSort(SequenList &L)//基排序

{

int f[27], e[26];

int i;

for (i = 0; i<=L.length ; i++)

L.r[i].next = i + 1;

L.r[L.length].next = 0;

for (i = 3; i >= 0; i--)

{

Distribute(L.r, i, f, e);

Collect(L.r, i, f, e);

}

}

11、主函数

int _tmain(int argc, _TCHAR* argv[])

{

SequenList L;

SetData(L);

int choice,radix=0;

for (;;)

{

cout<<"************欢迎进入药品销售管理系统************"<<endl;

cout<<"菜单:"<<endl;

cout << "\t\t1--展示药品排序情况\n\t\t2--对销售量排序\n\t\t3--对药品单价排序\n\t\t4--对商品销售额排序\n\t\t5--对药品编号排序\n请输入您的选择:";

cin >> choice;

switch (choice)

{

case 1:

{

 Show(L,radix);

 break;

}

case 2:

 radix = 0;

QSort(L, 1, L.length );//快排

 break;

}

case 3:

{

 radix = 0;

 PopSort(L);//冒泡

 break;

}

case 4:

{

 radix = 0;

 HeapSort(L);//堆排序

 break;

}

case 5:

{

 radix = 1;

 RadixSort(L);//基数排序

 break;

}

default:break;

}

cout << endl << endl;

}

return 0;

}

12、运行界面,小编已经运行过了,基本没有明显bug

药店的药品销售统计系统详解加源代码

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢