藥店的藥品銷售統計系統詳解加原始碼?

有是一年課設季,原始碼雖好找,課設卻難過,看小編為你詳解課設,附贈原創原始碼

設計一系統,實現醫藥公司定期對銷售各藥品的記錄進行統計,可按藥品的編號、單價、銷售量或銷售額做出排名。

工具/原料

vc2010

電腦

方法/步驟

作為一名徘徊在課設邊緣不能自拔的程式設計學習者,思路很關鍵,因為程式設計思想並不是一朝一夕就能培養出來的,所以臨陣磨槍,思路優先

要達到排序的目的,首先要建立排序物件,要建立一個物件,就要確定他的資料元素結構以及儲存方式,所以在看到題目後,大家應該有形如下圖一樣清晰的程式設計思路,先做什麼,再做什麼。

藥店的藥品銷售統計系統詳解加原始碼

標頭檔案應該懂得可以跳過本步

藥店的藥品銷售統計系統詳解加原始碼

一,建立第一個結構體,應包含資料元素的各種資料項,比如,編號,銷售額,銷售量一類資料項,小編做了這樣幾個資料項。

藥店的藥品銷售統計系統詳解加原始碼

建立第二個結構體,第二個結構體是為了確定儲存結構,小編採用了順序表,你也可以採用其他的方法。

藥店的藥品銷售統計系統詳解加原始碼

初始化結構體,一般是數字的話呢直接複製就可以,如果是字串的話呢,就要用到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個就夠除錯了

做一個輸出函式

一般用for迴圈就ok了很簡單的

\t是空格的意思

藥店的藥品銷售統計系統詳解加原始碼

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

{

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);

}

}

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;

}

}

}

}

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

++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);

}

}

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);

}

}

主函式

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

{

SequenList L;

SetData(L);

int choice,radix=0;

for (;;)

{

cout<<"************歡迎進入藥品銷售管理系統************"<

cout<<"選單:"<

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;

}

執行介面,小編已經執行過了,基本沒有明顯bug

藥店的藥品銷售統計系統詳解加原始碼

相關問題答案