C語言課程設(shè)計(jì)單項(xiàng)鏈表實(shí)現(xiàn)工資管理系統(tǒng)優(yōu)質(zhì)資料_第1頁
C語言課程設(shè)計(jì)單項(xiàng)鏈表實(shí)現(xiàn)工資管理系統(tǒng)優(yōu)質(zhì)資料_第2頁
C語言課程設(shè)計(jì)單項(xiàng)鏈表實(shí)現(xiàn)工資管理系統(tǒng)優(yōu)質(zhì)資料_第3頁
C語言課程設(shè)計(jì)單項(xiàng)鏈表實(shí)現(xiàn)工資管理系統(tǒng)優(yōu)質(zhì)資料_第4頁
C語言課程設(shè)計(jì)單項(xiàng)鏈表實(shí)現(xiàn)工資管理系統(tǒng)優(yōu)質(zhì)資料_第5頁
已閱讀5頁,還剩72頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

C語言課程設(shè)計(jì)單項(xiàng)鏈表實(shí)現(xiàn)工資管理系統(tǒng)優(yōu)質(zhì)資料(可以直接使用,可編輯優(yōu)質(zhì)資料,歡迎下載)

C語言課程設(shè)計(jì)單項(xiàng)鏈表實(shí)現(xiàn)工資管理系統(tǒng)優(yōu)質(zhì)資料(可以直接使用,可編輯優(yōu)質(zhì)資料,歡迎下載)高級語言(C語言)課程設(shè)計(jì)說明書起止日期:2021年07月2日至2021年07月14日題目工資管理系統(tǒng)學(xué)生姓名班級學(xué)號成績通信與信息工程學(xué)院課程設(shè)計(jì)要求課程設(shè)計(jì)系統(tǒng)組成及模塊功能:工資管理程序主要完成對職工的工資信息錄入,然后進(jìn)行排序,統(tǒng)計(jì),查詢,計(jì)算稅金等功能操作。具體要求如下:1.職工錄入工資信息包括:編號,姓名,基本工資,扣款,應(yīng)發(fā)工資,稅金,實(shí)發(fā)工資2.程序主菜單如下:"**************MENU*************",/*菜單的標(biāo)題行*/0.initlist/*初始化單鏈表*/1.Enterlist/*輸入數(shù)據(jù),創(chuàng)建單鏈表*/2.Listall/*顯示所有記錄*/3.Calcthesalary/*計(jì)算實(shí)發(fā)工資*/4.Searchrecordonname/*查找職工信息數(shù)據(jù)*/5.Deletearecord/*刪除記錄*/6.Sortonsfgz/*按實(shí)發(fā)工資升序排序*/7.Computerticketnumber/*計(jì)算所需票面數(shù)*/8.Totalonnumber/*分類合計(jì)*/9.Quit/*退出*/3.要求定義如下函數(shù),對應(yīng)菜單功能/******函數(shù)原型*********/voidinit();/*單鏈表初始化*/voidcreate();/*創(chuàng)建單鏈表,輸入數(shù)據(jù)*/voidcalc();/*計(jì)算實(shí)發(fā)工資*/voiddelete();/*刪除*/voidsearch();/*查找*/voidcomputer();/*計(jì)算所需各種票面張數(shù)*/voidsort();/*排序*/voidlist();/*顯示所有數(shù)據(jù)*/voidprint(SALARY*p);/*輸出單條記錄*/floatfax(floatx);/*計(jì)算稅金*/voidtotal();/*分類合計(jì)*/intmenu_select();/*主菜單*/程序的功能設(shè)計(jì)此工資管理系統(tǒng)主要利用鏈表實(shí)現(xiàn),由如下八個(gè)功能模塊實(shí)現(xiàn)1、輸入模塊。主要完成輸入工資信息的工作,并存入鏈表中。2、輸出模塊。主要完成對所有工人信息的輸出。3、修改模塊。主要完成對職工信息的修改工作。4、插入模塊。主要完成對職工信息的插入工作。5、查詢模塊。主要完成對某個(gè)職工信息的查詢工作。6、刪除模塊。主要完成對某退休或離職職工信息的刪除。7、排序模塊。主要完成對所有職工按實(shí)發(fā)工資進(jìn)行的升序或降序排列。8、保存模塊。主要完成對已經(jīng)輸入和修改或刪除的保存文件。9、退出。退出系統(tǒng)程序的數(shù)據(jù)結(jié)構(gòu)本程序運(yùn)用結(jié)構(gòu)體、單項(xiàng)鏈表等數(shù)據(jù)結(jié)構(gòu)。職工信息結(jié)構(gòu)體如下:structworker//定義數(shù)據(jù)結(jié)構(gòu)//{charno[11];//編號//charname[15];//姓名//charxb[10];//性別//doublejbgz;//基本工資//doublekoukuan;//扣款//doubleyfgz;//應(yīng)發(fā)工資//doubleshuijin;//稅金//doublesfgz;//實(shí)發(fā)工資//charpost[10];//職位//structworker*next;};typedefstructworkerSTU;//結(jié)構(gòu)體類型名///四、程序的函數(shù)設(shè)計(jì)函數(shù)的功能描述intmenu_select(void);//主菜單//STU*append(STU*head);//添加記錄//STU*appendNode(STU*head);voidlist(STU*head);//顯示所有數(shù)據(jù)//STU*modify(STU*head);//修改職工記錄//STU*modifyNode(STU*head);void*search(STU*head);//查詢職工信息//void*no(STU*head);//編號查詢//void*name(STU*head);//姓名查詢//STU*dele(STU*head);//刪除職工信息//STU*deleNode(STU*head,chark[11]);void*save(STU*head);//保存文件//STU*insert(STU*head);//插入職工信息//STU*tax(STU*head);//計(jì)算稅金//STU*calc(STU*head);//計(jì)算應(yīng)發(fā)工資//STU*total(STU*head);//計(jì)算實(shí)發(fā)工資//STU*sort(STU*head);//對職工信息進(jìn)行排序//STU*insort(STU*head);//升序函數(shù)//STU*desort(STU*head);//降序函數(shù)//void*index(STU*head);//分類統(tǒng)計(jì)//void*index1(STU*head);void*index2(STU*head);void*index3(STU*head);void*index4(STU*head);intuser_ID();//登錄賬戶函數(shù)//STU表示結(jié)構(gòu)體類型名Head表示鏈表的頭結(jié)點(diǎn)、函數(shù)的調(diào)用關(guān)系voidmain(){intch;chara;STU*head=NULL;system("color02");//背景色/前景色的設(shè)置(0黑色、1藍(lán)色、2綠色、3淺綠色、4紅色、5紫色、6黃色、7白色、8灰色、9淡紫色、A淡綠色、B淡淺綠色、C淡紅色、D淡紫色、E淡黃色、F亮白色)//a=getchar();while(!a);system("cls");user_ID();while(1){ch=menu_select();switch(ch){case1: head=append(head); break;//制作工資表//case2: list(head); break;//輸出所有的職工的信息//case3: head=modify(head); break;//修改職工信息//case4: head=insert(head); break;//插入職工信息// case5: search(head); break;//查詢職工信息// case6: head=dele(head); break;//刪除職工信息// case7: head=sort(head); break;//對職工信息進(jìn)行排序// case8: save(head); break;//保存文件// case9: index(head); break;//分類統(tǒng)計(jì)//case0: exit(0);//退出//default:printf("Inputerror!\n");break;}}五、程序源代碼#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>#include<memory.h>#include<windows.h>structworker//定義數(shù)據(jù)結(jié)構(gòu)//{charno[11];//編號//charname[15];//姓名//charxb[10];//性別//doublejbgz;//基本工資//doublekoukuan;//扣款//doubleyfgz;//應(yīng)發(fā)工資//doubleshuijin;//稅金//doublesfgz;//實(shí)發(fā)工資//charpost[10];//職位//structworker*next;};typedefstructworkerSTU;//結(jié)構(gòu)體類型名///******函數(shù)原型*********/intmenu_select(void);//主菜單//STU*append(STU*head);//添加記錄//STU*appendNode(STU*head);voidlist(STU*head);//顯示所有數(shù)據(jù)//STU*modify(STU*head);//修改職工記錄//STU*modifyNode(STU*head);void*search(STU*head);//查詢職工信息//void*no(STU*head);//編號查詢//void*name(STU*head);//姓名查詢//STU*dele(STU*head);//刪除職工信息//STU*deleNode(STU*head,chark[11]);STU*insert(STU*head);//插入職工信息//STU*tax(STU*head);//計(jì)算稅金//STU*calc(STU*head);//計(jì)算應(yīng)發(fā)工資//STU*total(STU*head);//計(jì)算實(shí)發(fā)工資//STU*sort(STU*head);//對職工信息進(jìn)行排序//STU*insort(STU*head);//升序函數(shù)//STU*desort(STU*head);//降序函數(shù)//voidindex(STU*head);//分類統(tǒng)計(jì)//voidindex1(STU*head);voidindex2(STU*head);voidindex3(STU*head);voidindex4(STU*head);intuser_ID();//登錄賬戶函數(shù)//voidmain(){intch;chara;STU*head=NULL;system("color02");//背景色/前景色的設(shè)置(0黑色、1藍(lán)色、2綠色、3淺綠色、4紅色、5紫色、6黃色、7白色、8灰色、9淡紫色、A淡綠色、B淡淺綠色、C淡紅色、D淡紫色、E淡黃色、F亮白色)//printf("&****&****&****&****&****&****&****&\n");printf("**歡迎使用工資管理系統(tǒng)**\n");printf("************************************\n");printf("**************************表頭***************************\n");printf("**********@@@實(shí)驗(yàn)名稱:工資管理系統(tǒng)**********\n");printf("**********@@@學(xué)校:西安科技大學(xué)**********\n");printf("**********@@@姓名:張帝**********\n");printf("**********@@@學(xué)號:1107050415**********\n");printf("**********@@@專業(yè):電子信息工程**********\n");printf("*********************************************************\n");printf("&&&&&&&&&&&&********按任意鍵繼續(xù)********&&&&&&&&&&&&&&&&&\n");a=getchar();while(!a);system("cls");user_ID();while(1){ch=menu_select();switch(ch){case1: head=append(head);break;//制作工資表//case2: list(head);break;//輸出所有的職工的信息//case3: head=modify(head);break;//修改職工信息//case4: head=insert(head);break;//插入職工信息//case5: search(head);break;//查詢職工信息//case6: head=dele(head);break;//刪除職工信息//case7: head=sort(head);break;//對職工信息進(jìn)行排序//case8: index(head);break;//分類統(tǒng)計(jì)//case0: exit(0);//退出//default:printf("Inputerror!\n");break;}}}intmenu_select(void){intch;printf("&*************主菜單*************************&\n");printf("*1.制作工資表*\n");printf("*2.輸出所有的職工的信息*\n");printf("*3.修改職工的信息*\n");printf("*4.插入職工信息*\n");printf("*5.查詢職工的信息*\n");printf("*6.刪除職工的信息*\n");printf("*7.對職工信息進(jìn)行排序*\n");printf("*8.分類統(tǒng)計(jì)*\n");printf("*0.退出*\n");printf("&********************************************&\n");printf("請輸入你的選擇:");scanf("%d",&ch);returnch;}STU*append(STU*head){charc;system("cls");do{head=appendNode(head);//向鏈表末尾添加一個(gè)節(jié)點(diǎn)//printf("確認(rèn)添加新紀(jì)錄請按Y/y!");printf("其他鍵視為不添加!\n"); printf("你想添加一個(gè)新的記錄嗎(Y/N)?");scanf("%c",&c);}while(c=='Y'||c=='y');system("cls");returnhead;}STU*appendNode(STU*head){STU*p=NULL;STU*pr=head;p=(STU*)malloc(sizeof(STU));//為新添加的節(jié)點(diǎn)申請內(nèi)存//if(p==NULL)//若申請內(nèi)存失敗,則輸出錯誤信息,退出程序//{printf("Noenoughmemorytoalloc");exit(0);}if(head==NULL)//若原鏈表為空,則將新建節(jié)點(diǎn)置為首節(jié)點(diǎn)//{head=p;}else{while(pr->next!=NULL)//若未到表尾,則繼續(xù)移動指針pr,直到pr指向表尾//{pr=pr->next;}pr->next=p;//將新建節(jié)點(diǎn)添加到鏈表的末尾//}pr=p;//讓pr指向新建節(jié)點(diǎn)//printf("輸入職工的編號:");scanf("%s",p->no);printf("輸入職工的姓名:");scanf("%s",p->name);printf("輸入職工的性別:");scanf("%s",p->xb);printf("輸入職工的職位:");scanf("%s",p->post);printf("輸入職工的月基本工資:");scanf("%lf",&p->jbgz);printf("輸入職工的月扣款數(shù):");scanf("%lf",&p->koukuan);p->sfgz=0;//初始實(shí)發(fā)工資為0//p->shuijin=0;//初始稅金為0//p->yfgz=0;//初始應(yīng)發(fā)工資為0//pr->next=NULL;//將新建節(jié)點(diǎn)置為表尾//returnhead;}voidlist(STU*head){STU*p=head;system("cls");if(p==NULL)printf("工資表為空請重新輸入!!\n");else{head=calc(head);head=tax(head);head=total(head);printf("*************************************工資表*******************\n");printf("編號\t姓名\t性別\t職位\t基本工資\t扣款\t應(yīng)發(fā)工資\t實(shí)發(fā)工資");while(p!=NULL){printf("%s\t%s\t%s\t%s\t%.2lf\t%.2lf\t%.2lf\t%.2lf\n",p->no,p->name,p->xb,p->post,p->jbgz,p->koukuan,p->yfgz,p->sfgz);p=p->next;}}}STU*modify(STU*head){charc;STU*p=NULL;STU*q=head;system("cls");do{p=modifyNode(head);printf("繼續(xù)修改請按Y/y!");printf("其他鍵視為不修改!\n"); printf("你想繼續(xù)修改記錄嗎(Y/N)?");scanf("%c",&c);}while(c=='Y'||c=='y');returnhead;}STU*modifyNode(STU*head){inti,j;chark[11];STU*p=NULL;STU*q=head;system("cls");if(q==NULL){printf("工資表為空請重新輸入!!\n");returnhead;}printf("請輸入你想修改的職工的編號:");scanf("%s",k);while(q&&strcmp(q->no,k)!=0)//做比較判斷//q=q->next;//沒找到,指針后移繼續(xù)查找//if(q==NULL)//指針為空,說明沒有找到//{printf("Notfound!\n");returnhead;}else{printf("編號\t姓名\t性別\t職位\t基本工資\t扣款\t應(yīng)發(fā)工資\t實(shí)發(fā)工資");printf("%s\t%s\t%s\t%s\t%.2lf\t%.2lf\t%.2lf\t%.2lf\n",q->no,q->name,q->xb,q->post,q->jbgz,q->koukuan,q->yfgz,q->sfgz);printf("按1修改職工編號\n");printf("按2修改職工姓名\n");printf("按3修改職工性別\n");printf("按4修改職工職位\n");printf("按5修改職工基本工資\n");printf("按6修改職工扣款數(shù)\n");printf("請輸入要修改的列名:");scanf("%d",&i);switch(i){case1:system("cls");printf("請輸入修改后的職工編號:");scanf("%s",q->no);system("cls");printf("\n\n是否繼續(xù)修改?\n");printf("是請輸入1\n");printf("否請輸入2\n");printf("你的選擇:");scanf("%d",&j);switch(j){case1:p=modifyNode(head);break;case2:system("cls");break;default:printf("Inputerror!\n");break;}break;case2:system("cls");printf("請輸入修改后的職工姓名:");scanf("%s",q->name);system("cls");printf("\n\n是否繼續(xù)修改?\n");printf("是請輸入1\n");printf("否請輸入2\n");printf("你的選擇:");scanf("%d",&j);switch(j){case1:modifyNode(head);break;case2:system("cls");break;default:printf("Inputerror!\n");break;}break;case3:system("cls");printf("請輸入修改后的職工性別:");scanf("%s",q->xb);system("cls");printf("\n\n是否繼續(xù)修改?\n");printf("是請輸入1\n");printf("否請輸入2\n");printf("你的選擇:");scanf("%d",&j);switch(j){case1:modifyNode(head);break;case2:system("cls");break;default:printf("Inputerror!\n");break;}break;case4:system("cls");printf("請輸入修改后的職工職位:");scanf("%s",q->post);system("cls");printf("\n\n是否繼續(xù)修改?\n");printf("是請輸入1\n");printf("否請輸入2\n");printf("你的選擇:");scanf("%d",&j);switch(j){case1:modifyNode(head);break;case2:system("cls");break;default:printf("Inputerror!\n");break;}break;case5:system("cls");printf("請輸入修改后的職工基本工資:");scanf("%lf",&q->jbgz);system("cls");printf("\n\n是否繼續(xù)修改?\n");printf("是請輸入1\n");printf("否請輸入2\n");printf("你的選擇:");scanf("%d",&j);switch(j){case1:modifyNode(head);break;case2:system("cls");break;default:printf("Inputerror!\n");break;}break;case6:system("cls");printf("請輸入修改后的扣款數(shù):");scanf("%lf",&q->koukuan);system("cls");printf("\n\n是否繼續(xù)修改?\n");printf("是請輸入1\n");printf("否請輸入2\n");printf("你的選擇:");scanf("%d",&j);switch(j){case1:modifyNode(head);break;case2:system("cls");break;default:printf("Inputerror!\n");break;}default:printf("Inputerror!\n");break;}}returnp;}void*search(STU*head){inta;system("cls");printf("\n\n\n\n\n\n");printf("*********查詢菜單*************\n");printf("*1按職工的編號查詢*\n");printf("*2按職工的姓名查詢*\n");printf("******************************\n");printf("請按數(shù)字鍵選擇:");scanf("%d",&a);switch(a){case1:no(head);break;case2:name(head);break;default:printf("Inputerror!\n");break;}returnNULL;}void*no(STU*head){chark[11];STU*q=head;system("cls");if(q==NULL){printf("工資表為空請重新輸入!!\n");returnhead;}printf("請輸入你想查找的職工的編號:");scanf("%s",k);while(q&&strcmp(q->no,k)!=0)//做比較判斷//q=q->next;//沒找到,指針后移繼續(xù)查找//if(q==NULL)//指針為空,說明沒有找到//{printf("Notfound!\n");returnNULL;}else{printf("編號\t姓名\t性別\t職位\t基本工資\t扣款\t應(yīng)發(fā)工資\t實(shí)發(fā)工資");printf("%s\t%s\t%s\t%s\t%.2lf\t%.2lf\t%.2lf\t%.2lf\n",q->no,q->name,q->xb,q->post,q->jbgz,q->koukuan,q->yfgz,q->sfgz);}returnNULL;}void*name(STU*head){chark[15];STU*q=head;system("cls");if(q==NULL){printf("工資表為空請重新輸入!!\n");returnhead;}printf("請輸入你想查找的職工的姓名:");scanf("%s",k);while(q&&strcmp(q->name,k)!=0)//做比較判斷//q=q->next;//沒找到,指針后移繼續(xù)查找//if(q==NULL)//指針為空,說明沒有找到//{printf("Notfound!\n");returnNULL;}else{printf("編號\t姓名\t性別\t職位\t基本工資\t扣款\t應(yīng)發(fā)工資\t實(shí)發(fā)工資");printf("%s\t%s\t%s\t%s\t%.2lf\t%.2lf\t%.2lf\t%.2lf\n",q->no,q->name,q->xb,q->post,q->jbgz,q->koukuan,q->yfgz,q->sfgz);}returnNULL;}STU*dele(STU*head){inti=0;chark[11];charc;system("cls");do{printf("請輸入你想刪除的記錄編號:");scanf("%s",k);head=deleNode(head,k);//刪除編號為k的工人信息//list(head);//顯示當(dāng)前鏈表中的各節(jié)點(diǎn)信息//printf("刪除請按Y/y!!\n"); printf("按其它鍵視為不刪除!!\n");printf("確認(rèn)繼續(xù)刪除職工信息(Y/N)?");scanf("%c",&c);/*%c前面有一個(gè)空格*/i++;}while(c=='Y'||c=='y');returnhead;}STU*deleNode(STU*head,chark[11]){STU*p=head,*pr=head;if(head==NULL)//鏈表為空,沒有節(jié)點(diǎn),無法刪除節(jié)點(diǎn)//{printf("鏈表為空!\n");return(head);}while(strcmp(p->no,k)&&p->next!=NULL)//若沒找到節(jié)點(diǎn)且未到表尾,則繼續(xù)找//{pr=p;p=p->next;}if(strcmp(p->no,k)==0)//若找到節(jié)點(diǎn),則刪除該節(jié)點(diǎn)//{if(p==head)//若待刪節(jié)點(diǎn)為首節(jié)點(diǎn),則讓head指向第2個(gè)節(jié)點(diǎn)//{head=p->next;}else//若待刪節(jié)點(diǎn)非首節(jié)點(diǎn),則將前一節(jié)點(diǎn)指針指向當(dāng)前節(jié)點(diǎn)的下一節(jié)點(diǎn)//{pr->next=p->next;}free(p);/*釋放為已刪除節(jié)點(diǎn)分配的內(nèi)存*/}else/*沒有找到待刪除節(jié)點(diǎn)*/{printf("該職工不存在!\n");}returnhead;/*返回刪除節(jié)點(diǎn)后的鏈表的頭節(jié)點(diǎn)指針*/}STU*insert(STU*head){chars[11];STU*pr=head;STU*p=NULL;system("cls");printf("在哪個(gè)編號職工之后插入:");scanf("%s",s);//輸入指定職工的編號//p=(STU*)malloc(sizeof(STU));//為新添加的節(jié)點(diǎn)申請內(nèi)存//if(p==NULL)//若申請內(nèi)存失敗,則輸出錯誤信息,退出程序//{printf("Noenoughmemorytoalloc");exit(0);}if(head==NULL)//若原鏈表為空,則將新建節(jié)點(diǎn)置為首節(jié)點(diǎn)//{head=p;}else{while(pr&&strcmp(pr->no,s)!=0)//查找結(jié)點(diǎn)確定插入位置//{pr=pr->next;}if(pr==NULL){printf("Notfound!\n");returnhead;}else{p->next=pr->next; pr->next=p;}}pr=p;printf("輸入職工的編號:");scanf("%s",p->no);printf("輸入職工的姓名:");scanf("%s",p->name);printf("輸入職工的性別:");scanf("%s",p->xb);printf("輸入職工的職位:");scanf("%s",p->post);printf("輸入職工的月基本工資:");scanf("%lf",&p->jbgz);printf("輸入職工的月扣款數(shù):");scanf("%lf",&p->koukuan);p->sfgz=0;//初始實(shí)發(fā)工資為0//p->shuijin=0;//初始稅金為0//p->yfgz=0;//初始應(yīng)發(fā)工資為0//returnhead;}STU*tax(STU*head){doublet;STU*p=head;while(p!=NULL){t=p->yfgz;if(t-3500<=0) p->shuijin=0;elseif((t-3500<=1500)&&(t-3500>0)) p->shuijin=(t-3500)*0.03;elseif((t-3500<=4500)&&(t-3500>1500))p->shuijin=(t-3500)*0.10-105;elseif((t-3500<=9000)&&(t-3500>4500))p->shuijin=(t-3500)*0.20-555;elseif((t-3500<=35000)&&(t-3500>9000))p->shuijin=(t-3500)*0.25-1005;elseif((t-3500<=55000)&&(t-3500>35000))p->shuijin=(t-3500)*0.30-2755;elseif((t-3500<=80000)&&(t-3500>55000))p->shuijin=(t-3500)*0.35-5505;elsep->shuijin=(t-3500)*0.45-13505;p=p->next;}returnhead;}STU*calc(STU*head){STU*p=head;while(p!=NULL){p->yfgz=(p->jbgz)-(p->koukuan);p=p->next;}returnhead;}STU*total(STU*head){STU*p=head;while(p!=NULL){p->sfgz=(p->yfgz)-(p->shuijin);p=p->next;}returnhead;}STU*sort(STU*head){inti;system("cls");printf("\t&************排序選擇*************&\n");printf("\t&1-按升序排列&\n");printf("\t&2-按降序排列&\n");printf("\t&*********************************&\n");printf("請輸入你的選擇:");scanf("%d",&i);switch(i){case1:head=insort(head);break;case2:head=desort(head);break;}returnhead;}STU*insort(STU*head){STU*p;//臨時(shí)指針變量//STU*p1;STU*p2;STU*endpt;//控制循環(huán)比較//p1=(STU*)malloc(sizeof(STU));p1->next=head;//增加一個(gè)節(jié)點(diǎn),放在第一個(gè)節(jié)點(diǎn)前面,主要為了便于比較//head=p1;//讓head指向p1節(jié)點(diǎn),排序完后,再把p1釋放//for(endpt=NULL;endpt!=head;endpt=p){for(p=p1=head;p1->next->next!=endpt;p1=p1->next){if(p1->next->sfgz>p1->next->next->sfgz)//如果前面的節(jié)點(diǎn)值比后面的大,則交換//{p2=p1->next->next; p1->next->next=p2->next; p2->next=p1->next; p1->next=p2; p=p1->next->next;}}}p1=head;head=head->next;//讓head指向排序后的第一個(gè)節(jié)點(diǎn)//free(p1);//釋放p1//p1=NULL;returnhead;}STU*desort(STU*head){STU*p;//臨時(shí)指針變量//STU*p1;STU*p2;STU*endpt;//控制循環(huán)比較//p1=(STU*)malloc(sizeof(STU));p1->next=head;//增加一個(gè)節(jié)點(diǎn),放在第一個(gè)節(jié)點(diǎn)前面,主要為了便于比較//head=p1;//讓head指向p1節(jié)點(diǎn),排序完后,再把p1釋放//for(endpt=NULL;endpt!=head;endpt=p){for(p=p1=head;p1->next->next!=endpt;p1=p1->next){if(p1->next->sfgz<p1->next->next->sfgz)//如果前面的節(jié)點(diǎn)值比后面的小,則交換//{p2=p1->next->next; p1->next->next=p2->next; p2->next=p1->next; p1->next=p2; p=p1->next->next;}}}p1=head;head=head->next;//讓head指向排序后的第一個(gè)節(jié)點(diǎn)//free(p1);//釋放p1//p1=NULL;returnhead;}voidindex(STU*head){inta;STU*p=head;system("cls");if(p==NULL)printf("工資表為空請重新輸入!!\n");else{printf("*******************************************\n");printf("*1輸出低于3500的職工信息*\n");printf("*2輸出高于3500低于8000的職工信息*\n");printf("*3輸出高于8000低于10000的職工信息*\n");printf("*4輸出高于10000的職工信息*\n");printf("*******************************************\n");printf("請輸入您的選擇:");scanf("%d",&a);switch(a){case1: index1(head);break;case2: index2(head);break;case3:index3(head);break;case4:index4(head);break;default:printf("Inputerror!\n");break;}}return;}voidindex1(STU*head){STU*p=head;system("cls");printf("***********************低于3500元的職工信息***************************\n");printf("編號\t姓名\t性別\t職位\t基本工資\t扣款\t應(yīng)發(fā)工資\t實(shí)發(fā)工資");while(p){if((p->sfgz)<=3500)printf("%s\t%s\t%s\t%s\t%.2lf\t%.2lf\t%.2lf\t%.2lf\n",p->no,p->name,p->xb,p->post,p->jbgz,p->koukuan,p->yfgz,p->sfgz);p=p->next;}return;}voidindex2(STU*head){STU*p=head;system("cls");printf("*******************高于3500元并且低于8000的職工信息***************************\n");printf("編號\t姓名\t性別\t職位\t基本工資\t扣款\t應(yīng)發(fā)工資\t實(shí)發(fā)工資");while(p){if(((p->sfgz)>3500)&&((p->sfgz)<=8000))printf("%s\t%s\t%s\t%s\t%.2lf\t%.2lf\t%.2lf\t%.2lf\n",p->no,p->name,p->xb,p->post,p->jbgz,p->koukuan,p->yfgz,p->sfgz);p=p->next;}return;}voidindex3(STU*head){STU*p=head;system("cls");printf("********************高于8000元并且低于10000的職工信息*************************\n");printf("編號\t姓名\t性別\t職位\t基本工資\t扣款\t應(yīng)發(fā)工資\t實(shí)發(fā)工資");while(p){if(((p->sfgz)>8000)&&((p->sfgz)<=10000))printf("%s\t%s\t%s\t%s\t%.2lf\t%.2lf\t%.2lf\t%.2lf\n",p->no,p->name,p->xb,p->post,p->jbgz,p->koukuan,p->yfgz,p->sfgz);p=p->next;}return;}voidindex4(STU*head){STU*p=head;system("cls");printf("**********************高于10000的職工信息**************************************\n");printf("編號\t姓名\t性別\t職位\t基本工資\t扣款\t應(yīng)發(fā)工資\t實(shí)發(fā)工資");while(p){if((p->sfgz)>10000)printf("%s\t%s\t%s\t%s\t%.2lf\t%.2lf\t%.2lf\t%.2lf\n",p->no,p->name,p->xb,p->post,p->jbgz,p->koukuan,p->yfgz,p->sfgz);p=p->next;}return;}intuser_ID(){chara[20]={0};char*p="zhangdi";char*q="1234";charb[5];intj=0,i=0,k=0; printf("請輸入您的用戶名:");scanf("%s",&a);if(strcmp(a,p)==0)j=1;elsej=0; printf("請輸入您的密碼:"); while(i<4){ b[i]=getch();if(b[i]==13)break; printf("%c",b[i]); printf("\b*"); i++; } getch();b[4]='\0'; printf("\n");if(strcmp(b,q)==0)k=1;else k=0;if((j!=1)||(k!=1)){printf("用戶名或密碼錯誤,請重新輸入!!!!!\n");returnuser_ID();}else{printf("*******************登陸成功!!!!********************\n\n");return1;}}六、調(diào)試及總結(jié)1.主界面2.登陸成功界面輸入職工記錄4、顯示記錄5.修改記錄插入記錄刪除記錄實(shí)驗(yàn)總結(jié):通過本次C語言實(shí)習(xí),我對C語言又有了更深刻的學(xué)習(xí)和理解!剛開始看到工資管理系統(tǒng)這個(gè)程序毫無頭緒,但是結(jié)果不懈努力,終于圓滿地完成了本次任務(wù)!本次C語言課程設(shè)計(jì)的源代碼是從網(wǎng)上下載的,我經(jīng)過修改后完成的!另外我還體會了從事C語言課程設(shè)計(jì)工作需要特別謹(jǐn)慎認(rèn)真地態(tài)度和作風(fēng),一點(diǎn)都不能馬虎。每個(gè)細(xì)微的細(xì)節(jié)都必須十分注意,如果不認(rèn)真思考,就會出現(xiàn)或大或小的錯誤。有時(shí)候,我自己覺得我改的程序很正確,但是就是編譯通不過,在查找錯誤的過程中,面臨著否認(rèn)自己的過程,非常的痛苦,這時(shí)候我會盡量翻書,爭取自己解決,是在解決不了再問老師同學(xué)!在反反復(fù)復(fù)的學(xué)習(xí)中,我終于作出一個(gè)簡單的程序,雖然這個(gè)程序的功能非常簡單,而且在實(shí)際運(yùn)用中還有些不足,因?yàn)楣べY的的內(nèi)容非常豐富,我涉及到的僅僅是工資管理的一部分簡單內(nèi)容,離實(shí)際的客戶需求肯定還有差距,但是對我來說已經(jīng)是一個(gè)很大的突破了!通過本次C語言實(shí)習(xí),我對C語言產(chǎn)生了濃厚的興趣,同時(shí)體驗(yàn)到了C語言的博大精深。在此,我要感謝在本次課程設(shè)計(jì)過程中幫助過我的老師和同學(xué)們,沒有你們熱心的幫助我很難完成。學(xué)無止境,在今后的學(xué)習(xí)和生活中,我還要不斷努力,爭取在C語言方面取得更大的成績!目錄TOC\o"1-3"\p”"\h\z\uHYPERLINK\l”_Toc282525185"第一章課程設(shè)計(jì)目的和要求………………………11。1課程設(shè)計(jì)的目的……………1HYPERLINK\l”_Toc282525187”1。2課程設(shè)計(jì)實(shí)現(xiàn)的要求………………………1HYPERLINK\l”_Toc282525188”第二章課程設(shè)計(jì)任務(wù)內(nèi)容…………23.1模塊…………………………3_Toc282525192”3.1。2功能模塊圖……………33.2性能…………………………4HYPERLINK\l”_Toc282525194”3。3函數(shù)說明……………………43.3.1學(xué)生信息錄入函數(shù)……………………4_Toc282525198”3.4系統(tǒng)流程圖………………11HYPERLINK\l”_Toc282525199”第四章軟件使用說明………………12HYPERLINK\l”_Toc282525200"4.1軟件使用說明及出現(xiàn)的問題…………12HYPERLINK\l”_Toc282525201"4.2運(yùn)行結(jié)果………………12_Toc282525203"4。2。2查詢界面…………13HYPERLINK\l”_Toc282525204"4。2.3計(jì)算界面…………13第五章課程設(shè)計(jì)心得與體會………………………14HYPERLINK\l”_Toc282525206”附錄一參考文獻(xiàn)……………………15HYPERLINK\l”_Toc282525207”附錄二程序清單……………………16機(jī)房收費(fèi)管理系統(tǒng)課程設(shè)計(jì)目的和要求1。1課程設(shè)計(jì)的目的進(jìn)一步鞏固《C++程序設(shè)計(jì)》所學(xué)的知識,特別加強(qiáng)數(shù)組,指針,結(jié)構(gòu)體,文件數(shù)據(jù)類型的應(yīng)用,熟悉面向過程的結(jié)構(gòu)化和面向?qū)ο罂梢暬绦蛟O(shè)計(jì)方法,培養(yǎng)結(jié)構(gòu)化程序設(shè)計(jì)的思想,加深對高級語言基本語言要素和控制結(jié)構(gòu)的理解,鍛煉程序設(shè)計(jì)的能力,以及用C/C++語言解決實(shí)際問題的能力,為以后后續(xù)課程的學(xué)習(xí)打好基礎(chǔ).此課程設(shè)計(jì)著眼于知識的運(yùn)用,把平常學(xué)的知識運(yùn)用到課程實(shí)踐中來,本身就是考察我們知識運(yùn)用能力.要求熟悉運(yùn)用一些編程軟件(如:MicrosoftVisualC++6.0),對我們所學(xué)的理論知識進(jìn)一步的深化.1。2課程設(shè)計(jì)實(shí)現(xiàn)的要求在程序設(shè)計(jì)中,既可以用傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì)方法,也可以用先進(jìn)的面向?qū)ο蟪绦蛟O(shè)計(jì)方法。機(jī)房收費(fèi)管理系統(tǒng)主要應(yīng)用在機(jī)房,將每位上網(wǎng)同學(xué)的學(xué)號、班級、姓名、上機(jī)起始時(shí)進(jìn)行錄入,對每位同學(xué)的上網(wǎng)費(fèi)用進(jìn)行計(jì)算并按班級、學(xué)號、姓名進(jìn)行查詢.課程設(shè)計(jì)任務(wù)內(nèi)容用C/C++語言實(shí)現(xiàn)一個(gè)機(jī)房收費(fèi)管理系統(tǒng),該系統(tǒng)主要應(yīng)用在機(jī)房管理上,通過這個(gè)系統(tǒng)可以錄入學(xué)生信息的總數(shù),學(xué)生信息包括學(xué)生的學(xué)號、班級、姓名,還有學(xué)生上機(jī)的起始時(shí)間。在本程序中要有學(xué)生信息錄入功能,上機(jī)費(fèi)用計(jì)算功能,按條件查詢功能,信息的錄入是要錄入學(xué)生的學(xué)號、班級、姓名、上機(jī)時(shí)間,上機(jī)費(fèi)用按每小時(shí)1元計(jì)算,不足一小時(shí)也按一小時(shí)計(jì)算,上機(jī)費(fèi)用=上機(jī)的時(shí)間*1.0/h,上機(jī)的時(shí)間為從上機(jī)時(shí)起到下機(jī)時(shí)所在電腦的當(dāng)時(shí)時(shí)間為準(zhǔn)。錄入完成后可以按學(xué)生的學(xué)號、班級、姓名來查詢學(xué)生的上機(jī)情況.詳細(xì)設(shè)計(jì)說明3.1模塊3.1。1模塊描述定義一個(gè)結(jié)構(gòu)體,在其中聲明結(jié)構(gòu)變量,然后定義字符串,來存放要用到的變量.然后定義此程序的其他功能模塊的原型.主函數(shù)調(diào)用各個(gè)功能子函數(shù),定義各個(gè)功能子函數(shù),通過addition做一個(gè)學(xué)生信息錄入的函數(shù),實(shí)現(xiàn)學(xué)生學(xué)號、班級、姓名以及上機(jī)時(shí)間的錄入,通過calculate做一個(gè)計(jì)算學(xué)生上機(jī)費(fèi)用的函數(shù),實(shí)現(xiàn)上機(jī)費(fèi)用的計(jì)算,通過search創(chuàng)建一個(gè)查詢函數(shù),實(shí)現(xiàn)對上機(jī)學(xué)生情況的查詢。在程序中需要輸入的內(nèi)容包括:(1)學(xué)生信息的錄入實(shí)現(xiàn)過程:根據(jù)提示選擇“1”進(jìn)入學(xué)生信息錄入界面,按界面文字提示輸入要錄入信息的學(xué)生數(shù),,按步驟輸入學(xué)生的信息,以“Enter"鍵結(jié)束,系統(tǒng)自動保存所輸入的信息。(2)上機(jī)費(fèi)用的計(jì)算實(shí)現(xiàn)過程:根據(jù)提示選擇“2”進(jìn)入計(jì)算界面,以“Enter"鍵結(jié)束,由系統(tǒng)自動計(jì)算出所有學(xué)生的上機(jī)費(fèi)用.(3)學(xué)生信息查詢實(shí)現(xiàn)過程:根據(jù)提示選擇“3"進(jìn)入信息的查詢界面,按自己的需要通過學(xué)生的學(xué)號、班級、姓名來查詢學(xué)生的信息,系統(tǒng)自動調(diào)出所查詢學(xué)生的信息,以“Enter”鍵結(jié)束,此時(shí)所有的基本信息都被要求重新輸入。3.1。2功能模塊圖此系統(tǒng)的函數(shù)功能模塊圖如圖3-1所示。機(jī)房收費(fèi)管理系統(tǒng)學(xué)生信息的錄入機(jī)房收費(fèi)管理系統(tǒng)學(xué)生信息的錄入學(xué)生上機(jī)費(fèi)用的計(jì)算某個(gè)同學(xué)上機(jī)費(fèi)用查詢圖3—1函數(shù)功能模塊圖3。2性能該模塊性能要求(1)靈活性要求輸出的數(shù)據(jù)能準(zhǔn)確的按照操作代碼輸出。(2)時(shí)間特性要求輸入的各項(xiàng)操作代碼能及時(shí)反應(yīng)其運(yùn)行結(jié)果。3。3函數(shù)說明3。3。1學(xué)生信息錄入函數(shù)(1)原型:voidaddition()(2)功能:該函數(shù)用來錄入學(xué)生信息,包括要錄入學(xué)生信息的總數(shù),錄入學(xué)生的學(xué)號、班級、姓名以及上機(jī)時(shí)間。(3)流程圖:如圖3—2所示。開始開始i=1i<=n輸入第i個(gè)學(xué)生的學(xué)號假i=1i<=n輸入第i個(gè)學(xué)生的學(xué)號假真輸入第i個(gè)學(xué)生的班級錄入學(xué)生信息輸入第i個(gè)學(xué)生的上機(jī)時(shí)間i++結(jié)束輸入第i個(gè)學(xué)生的姓名輸入第i個(gè)學(xué)生的上機(jī)時(shí)間i++結(jié)束輸入第i個(gè)學(xué)生的姓名(4)對應(yīng)代碼voidaddition(){inti;printf("\n請輸入錄入學(xué)生信息的總數(shù):");scanf("%d",&n);for(i=1;i<=n;i++){printf("\n\t請輸入第%d個(gè)學(xué)生學(xué)號:”,i);scanf(”%s",student[i-1].num);printf(”\n\t請輸入第%d個(gè)學(xué)生班級:”,i);scanf(”%s",student[i—1]。theclass);printf(”\n\t請輸入第%d個(gè)學(xué)生姓名:",i);scanf(”%s”,student[i—1]。name);printf("\n\t請輸入第%d個(gè)學(xué)生上機(jī)時(shí)間(例08:00):",i);scanf("%s",student[i—1].ontime);printf(”\n\t提示:您已成功錄入第%d條信息\n",i);}}3.3.2所有學(xué)生上機(jī)費(fèi)用計(jì)算函數(shù)(1)原型:voidcalculate()(2)功能:該函數(shù)用來計(jì)算學(xué)生上機(jī)的費(fèi)用,(3)流程圖:如圖3—3所示。開始開始i=1i=1假i<=n假i<=n真真輸出第i個(gè)學(xué)生的費(fèi)用輸出第i個(gè)學(xué)生的費(fèi)用假上機(jī)總時(shí)間是否不足一小時(shí)假上機(jī)總時(shí)間是否不足一小時(shí)真上機(jī)費(fèi)用=上機(jī)時(shí)間*1上機(jī)費(fèi)用=上機(jī)的整時(shí)間*1+1真上機(jī)費(fèi)用=上機(jī)時(shí)間*1上機(jī)費(fèi)用=上機(jī)的整時(shí)間*1+1i++i++結(jié)束結(jié)束圖3—3成績查詢函數(shù)的程序流程圖(4)對應(yīng)代碼voidcalculate(){inthours;chartimes[30];time_trawtime;structtm*timeinfo;time(&rawtime);timeinfo=localtime(&rawtime);strcpy(times,asctime(timeinfo));printf("\t所有學(xué)生上機(jī)費(fèi)用如下:\n");for(inti=1;i<=n;i++){printf(”學(xué)生%d費(fèi)用:",i);if((student[i-1]。ontime[3]-48)*10+student[i-1]。ontime[4]>(times[14]—48)*10+times[15])hours=(times[11]-48)*10+times[12]-(student[i—1].ontime[0]-48)*10—student[i-1].ontime[1];elsehours=(times[11]-48)*10+times[12]—(student[i-1].ontime[0]—48)*10-student[i—1]。ontime[1]+1;printf(”%d\n",hours);}}3。3.3學(xué)生信息查詢函數(shù)(1)原型:voidsearch()(2)功能:該函數(shù)用來按照條件顯示學(xué)生上機(jī)時(shí)間。(3)流程圖:如圖3-4所示。開始開始輸出請選擇查詢方式:1.根據(jù)學(xué)號查詢;2.根據(jù)班級查詢;3.根據(jù)姓名查詢輸出請選擇查詢方式:1.根據(jù)學(xué)號查詢;2.根據(jù)班級查詢;3.根據(jù)姓名查詢:分別按學(xué)生的學(xué)號、班級、姓名查詢分別按學(xué)生的學(xué)號、班級、姓名查詢假1、繼續(xù)0、返回主菜單假1、繼續(xù)0、返回主菜單真真結(jié)束結(jié)束圖3-4成績修改函數(shù)的程序流程圖(4)對應(yīng)代碼voidsearch(){inti,b,c,count;do{charfind[20];printf("\n請選擇查詢方式:1.根據(jù)學(xué)號查詢;2.根據(jù)班級查詢;3.根據(jù)姓名查詢:");scanf("%d",&b);switch(b){case1:count=PF_FLOATING_POINT_PRECISION_ERRATA;printf("\n請輸入學(xué)生的學(xué)號:”);scanf("%s”,find);for(i=0;i<n;i++){if(strcmp(student[i]。num,find)==0){count++;if(count==PF_FLOATING_POINT_EMULATED)printf(”學(xué)生學(xué)號\t學(xué)生班級\t學(xué)生姓名\t上機(jī)時(shí)間\n”);printf(”%8s%15s%15s%17s%",student[i]。num,student[i]。theclass,student[i]。name,student[i].ontime);}}if(!count)printf("提示:該生不存在");gotoA;case2:count=PF_FLOATING_POINT_PRECISION_ERRATA;printf(”\n請輸入學(xué)生的班級:");scanf(”%s",find);for(i=0;i〈n;i++){if(strcmp(student[i].theclass,find)==0){count++;if(count==PF_FLOATING_POINT_EMULATED)printf(”學(xué)生學(xué)號\t學(xué)生班級\t學(xué)生姓名\t上機(jī)時(shí)間\n");printf(”%8s%15s%15s%17s%",student[i].num,student[i]。theclass,student[i].name,student[i]。ontime);}}if(!count)printf(”提示:該生不存在”);gotoA;case3:count=PF_FLOATING_POINT_PRECISION_ERRATA;printf(”\n請輸入學(xué)生的姓名:”);scanf(”%s",find);for(i=0;i<n;i++){if(strcmp(student[i]。name,find)==0){count++;if(count==PF_FLOATING_POINT_EMULATED)printf("學(xué)生學(xué)號\t學(xué)生班級\t學(xué)生姓名\t上機(jī)時(shí)間\n");printf(”%8s%15s%15s%17s%”,student[i].num,student[i]。theclass,student[i].name,student[i].ontime);}}if(!count)printf("提示:該生不存在”);gotoA;default:printf(”提示:輸入錯誤”);}A:printf(”\n\t1。繼續(xù)\n\t0.返回主菜單");printf(”\n\t請輸入您的選擇:");scanf("%d”,&c);}while(c);}3.4系統(tǒng)流程圖開始系統(tǒng)流程圖如圖3—5所示。開始輸入學(xué)生的基本信息(學(xué)號、班級、姓名、上機(jī)時(shí)間)輸入學(xué)生的基本信息(學(xué)號、班級、姓名、上機(jī)時(shí)間)列出一個(gè)操作目錄列出一個(gè)操作目錄選擇要操作的編號2121計(jì)算功能查詢功能計(jì)算功能查詢功能0101退出程序

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論