當前位置:編程學習大全網 - 源碼下載 - 完整的源代碼系統

完整的源代碼系統

# include & ltstdio.h & gt

# include & ltstring.h & gt

# include & ltctype.h & gt

# include & ltstdlib.h & gt

#define MONTH_NUM 5 /*大多數月份*/

結構工人

{

int數;/*每個工人的工號*/

char name[15];/*每個工人的姓名*/

int salary[MONTH _ NUM];/*每個工人的月工資*/

int sum/*每個工人的總工資*/

浮動平均值;/*每個工人的平均工資*/

struct worker * next

};

typedef結構工作程序STU

char菜單(void);

int Ascending(int a,int b);

int Descending(int a,int b);

void IntSwap(int *pt1,int * pt2);

void CharSwap(char *pt1,char * pt2);

void FloatSwap(float *pt1,float * pt2);

STU *AppendNode(STU *head,const int m);

STU *DeleteNode(STU *head,int nodeNum);

STU *ModifyNode(STU *head,int nodeNum,const int m);

STU *SearchNode(STU *head,int nodeNum);

STU *Appendsalary(STU *head,const int m);

void Totalsalary(STU *head,const int m);

void Printsalary(STU *head,const int m);

STU *Deletesalary(STU *head,const int m);

void Modifysalary(STU *head,const int m);

void Sortsalary(STU *head,const int m,int (*compare)(int a,int b));

void Searchsalary(STU *head,const int m);

void delete memory(STU * head);

主()

{

char ch

int m;

STU * head = NULL

Printf("輸入要記錄的月份(m

scanf("%d ",& ampm);

while (1)

{

ch = Menu();

開關(通道)

{

case ' 1 ':head = append salary(head,m);

總工資(人頭,m);

打破;

case'2':Printsalary(頭,m);

打破;

case'3':head = Deletesalary(head,m);

printf(" \ n刪除後\ n ");

Printsalary(人頭,m);

打破;

情況“4”:modify salary(head,m);

總工資(人頭,m);

printf(" \ n修改後\ n ");

Printsalary(人頭,m);

打破;

案例' 5':Searchsalary(頭,m);

打破;

case'6':Sortsalary(head,m,降序);

printf(" \ n按總和降序排列\ n ");

Printsalary(人頭,m);

打破;

case'7':Sortsalary(head,m,升序);

printf(" \ n按sum升序排序\ n ");

Printsalary(人頭,m);

打破;

案例“0”:退出(0);

delete memory(head);

printf("程序結束!");

打破;

默認值:printf("輸入錯誤!");

打破;

}

}

}

字符菜單(無效)

{

char ch

printf(" \ n管理工人的工資\ n ");

Printf(" 1。添加記錄\ n ");

Printf(" 2。列出記錄\ n ");

Printf(" 3。刪除記錄\ n ");

Printf(" 4。修改記錄\ n ");

Printf(" 5。查找記錄\ n ");

Printf(" 6。降序\ n ");

Printf(" 7。升序\ n ");

Printf(" 0。退出\ n ");

Printf("請輸入您的選擇:");

scanf(" %c ",& ampch);/*在%c之前添加壹個空格以讀取緩沖區中的回車*/

返回ch;

}

STU *Appendsalary(STU *head,const int m)

{

int I = 0;

char c;

做{

head = AppendNode(head,m);/*在鏈表的末尾添加壹個節點*/

Printf("是否要添加新記錄(Y/N)?");

scanf(" %c ",& ampc);/*%c前面有壹個空格*/

i++;

} while(c = = ' Y ' | | c = = ' Y ');

printf("%d個新節點已打開!\n”,I);

回程頭;

}

STU *Deletesalary(STU *head,常量m)

{

int i = 0,nodeNum

char c;

做{

Printf("請輸入您要刪除的記錄號:");

scanf("%d ",& ampnodeNum);

head = DeleteNode(head,nodeNum);/*刪除工號為nodeNum的工人信息*/

Printsalary(人頭,m);/*顯示當前鏈表中每個節點的信息*/

printf("是否要刪除節點(Y/N)?");

scanf(" %c ",& ampc);/*%c前面有壹個空格*/

i++;

} while(c = = ' Y ' | | c = = ' Y ');

printf("%d個節點已被刪除!\n”,I);

回程頭;

}

void Modifysalary(STU *head,const int m)

{

int i = 0,nodeNum

char c;

做{

Printf("請輸入您要修改的記錄號:");

scanf("%d ",& ampnodeNum);

head = ModifyNode(head,nodeNum,m);/*修改節點號為的節點*/

printf("是否要修改節點(Y/N)?");

scanf(" %c ",& ampc);/*%c前面有壹個空格*/

i++;

} while(c = = ' Y ' | | c = = ' Y ');

printf("%d個節點已被修改!\n”,I);

}

無效總薪金(STU *head,const int m)

{

STU * p = head

int I;

而(p!= NULL) /*如果不是頁腳,則循環*/

{

p->;sum = 0;

for(I = 0;我& ltm;i++)

{

p->;sum+= p-& gt;工資[I];

}

p->;average = (float)p->sum/m;

p = p-& gt;接下來;/*讓p指向下壹個節點*/

}

}

void Sortsalary(STU *head,const int m,int (*compare)(int a,int b))

{

STU * pt

int flag = 0,I;

做{

flag = 0;

pt =頭;

/*如果後壹個節點的工資總額高於前壹個節點,則兩個節點中的數據會進行交換。

註意,只交換節點數據,節點順序保持不變,即不交換節點next指針的內容*/

while(pt-& gt;下壹個!=空)

{

if((*比較)(pt-& gt;下壹個-& gt;sum,pt-& gt;總和))

{

int swap(& amp;pt-& gt;數量& amppt-& gt;下壹個-& gt;號);

char swap(pt-& gt;姓名,pt-& gt;下壹個-& gt;姓名);

for(I = 0;我& ltm;i++)

{

int swap(& amp;pt-& gt;工資[i],& amppt-& gt;下壹個-& gt;工資[I]);

}

int swap(& amp;pt-& gt;總和& amppt-& gt;下壹個-& gt;sum);

FloatSwap(& amp;pt-& gt;平均& amppt-& gt;下壹個-& gt;平均);

flag = 1;

}

pt = pt-& gt;接下來;

}

} while(flag);

}

/*交換兩個整數*/

void IntSwap(int *pt1,int *pt2)

{

內部溫度;

temp = * pt 1;

* pt 1 = * pt2;

* pt2 = temp

}

/*交換兩個實數*/

void FloatSwap(float *pt1,float *pt2)

{

浮動溫度;

temp = * pt 1;

* pt 1 = * pt2;

* pt2 = temp

}

/*交換兩個字符串*/

void CharSwap(char *pt1,char *pt2)

{

充電溫度[15];

strcpy(temp,pt 1);

strcpy(pt1,pt2);

strcpy(pt2,temp);

}

/*確定數據是否按升序排序

int Ascending(int a,int b)

{

返回壹個& ltb;

}

/*確定數據是否按降序排序,a & gt如果b為真,則按降序排序*/

int Descending(int a,int b)

{

return a & gtb;

}

void Searchsalary(STU *head,const int m)

{

int數,I;

STU * findNode

Printf("請輸入要查找的記錄號:");

scanf("%d ",& amp號);

findNode = SearchNode(head,number);

if (findNode == NULL)

{

printf("未找到!\ n ");

}

其他

{

printf(" \ n沒有。%3d%8s ",findNode-& gt;number,find node-& gt;姓名);

for(I = 0;我& ltm;i++)

{

printf("%7d ",findNode-& gt;工資[I]);

}

printf("%9d%9.2f\n ",findNode-& gt;sum,findNode-& gt;平均);

}

}

void Printsalary(STU *head,const int m)

{

STU * p = head

char str[100] = {'\0'},temp[3];

int i,j = 1;

strcat(str,“數字名”);

for(I = 1;我& lt= m;i++)

{

strcat(str,“薪水”);

itoa(i,temp,10);

strcat(str,temp);

strcat(str," ");

}

strcat(str,“求和平均值”);

printf("%s ",str);/*打印頁眉*/

而(p!= NULL) /*如果不是頁腳,循環打印*/

{

printf(" \ n沒有。%3d%15s ",p-& gt;編號,p-& gt;姓名);

for(I = 0;我& ltm;i++)

{

printf("%7d ",p-& gt;工資[I]);

}

printf("%9d%9.2f ",p-& gt;sum,p->平均);

p = p-& gt;接下來;/*讓p指向下壹個節點*/

j++;

}

printf(" \ n ");

}

STU *AppendNode(STU *head,const int m)

{

STU * p = NULL

STU * pr = head

int j;

p = (STU *)malloc(sizeof(STU))。/*為新增節點申請內存*/

If (p == NULL) /*如果內存應用程序失敗,則打印壹條錯誤消息並退出程序*/

{

printf("沒有足夠的內存來分配");

退出(0);

}

If (head == NULL) /*如果原鏈表為空,則設置新節點為頭節點*/

{

head = p;

}

Else /*如果原來的鏈表不為空,將新節點添加到頁腳*/

{

/*如果沒有到達頁腳,繼續移動指針pr,直到pr指向頁腳*/

while(pr->;下壹個!=空)

{

pr = pr-& gt;接下來;

}

pr-& gt;next = p;/*將新節點添加到鏈表的末尾*/

}

pr = p;/*讓pr指向新節點*/

printf("輸入節點數據……");

printf(" \ n輸入編號:");

scanf("%d ",& ampp->;號);

printf("輸入名稱:");

scanf("%s ",p-& gt;姓名);

for(j = 0;j & ltm;j++)

{

printf("輸入薪資%d:",j+1);

scanf("%d ",p-& gt;工資+j);

}

pr-& gt;next = NULL/*將新創建的節點設置為頁腳*/

回程頭;/*添加節點後返回鏈表的頭節點指針*/

}

STU *ModifyNode(STU *head,int nodeNum,const int m)

{

int j;

STU * newNode

newNode = SearchNode(head,nodeNum);

if (newNode == NULL)

{

printf("未找到!\ n ");

}

其他

{

printf("輸入新節點數據:\ n ");

printf("輸入名稱:");

scanf("%s ",new node-& gt;姓名);

for(j = 0;j & ltm;j++)

{

printf("輸入薪資%d:",j+1);

scanf("%d ",new node-& gt;工資+j);

}

}

回程頭;

}

STU *DeleteNode(STU *head,int nodeNum)

{

STU *p =頭,*pr =頭;

If (head == NULL) /*鏈表為空,並且沒有節點。無法刪除節點*/

{

printf("沒有鏈接表!\ n ");

返回(頭);

}

/*如果沒有找到節點nodeNum,並且沒有到達表的末尾,則繼續查找*/

while (nodeNum!= p->;數量和數量。& ampp->;下壹個!=空)

{

pr = p;

p = p-& gt;接下來;

}

if(nodeNum = = p-& gt;Number) /*如果找到節點nodeNum,則刪除它*/

{

If (p == head) /*如果要截斷的點是第壹個節點,讓head指向第二個節點*/

{

head = p-& gt;接下來;

}

Else /*如果要修剪的點不是第壹個節點,則將前壹個節點的指針指向當前節點的下壹個節點*/

{

pr-& gt;next = p-& gt;接下來;

}

免費(p);/*釋放為已刪除節點分配的內存*/

}

Else /*未找到要刪除的節點*/

{

printf("此節點未找到!\ n ");

}

回程頭;/*刪除節點後返回鏈表的頭節點指針*/

}

STU *SearchNode(STU *head,int nodeNum)

{

STU * p = head

int j = 1;

而(p!= NULL) /*如果不是頁腳,則循環*/

{

如果(p->;number == nodeNum)返回p;

p = p-& gt;接下來;/*讓p指向下壹個節點*/

j++;

}

返回NULL

}

void DeleteMemory(STU *head)

{

STU *p = head,* pr = NULL

而(p!= NULL) /*如果不是頁腳,釋放節點占用的內存*/

{

pr = p;/*將當前節點的指針保存在pr */

p = p-& gt;接下來;/*讓p指向下壹個節點*/

免費(pr);/*釋放pr指向的當前節點所占用的內存*/

}

}

湊合著用吧,自己加壹些缺失的功能就行了。。。

  • 上一篇:python爬蟲是幹嘛的
  • 下一篇:基金的計算公式有哪些
  • copyright 2024編程學習大全網