




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)職工信息管理系統(tǒng)單鏈表實(shí)現(xiàn)程序源代碼優(yōu)質(zhì)資料(可以直接使用,可編輯優(yōu)質(zhì)資料,歡迎下載)
//要求用C語言完成課程設(shè)計(jì)職工信息管理系統(tǒng)—單鏈表實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)職工信息管理系統(tǒng)單鏈表實(shí)現(xiàn)程序源代碼優(yōu)質(zhì)資料(可以直接使用,可編輯優(yōu)質(zhì)資料,歡迎下載)#include<stdio.h>#include<stdlib.h>#include<string.h>intsaveflag=0;/*是否需要存盤的標(biāo)志變量*/structemployee{ charname[15]; charnum[10];/*工號(hào)*/ charsex[4]; charbm[15]; charzc[20]; intgz;};typedefstructnode{ structemployeedata; structnode*next;}Node,*Link;//Linkl(注意是:字母l不是數(shù)字1)voidadd(Linkl);voiddisp(Linkl);//查看職工所有信息voiddel(Linkl);//刪除功能Node*Locate(Linkl,charfindmess[],charnameornum[]);voidQur(Linkl);//查詢功能voidTongji(Linkl);//統(tǒng)計(jì)voidSort(Linkl);//排序voidModify(Linkl);//修改功能voidsave(Linkl);//將單鏈表l中的數(shù)據(jù)寫入文件voidprinte(Node*p);//本函數(shù)用于打印鏈表中某個(gè)節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容*///以下4個(gè)函數(shù)用于輸出中文標(biāo)題voidprintstart();voidWrong();voidNofind();voidprintc();voidmenu(){ printf("\t*****************************************************************\n"); printf("\t**\n"); printf("\t*職工信息管理系統(tǒng)_結(jié)構(gòu)體數(shù)組實(shí)現(xiàn)*\n"); printf("\t**\n") printf("\t*[1]增加職工信息[2]刪除職工信息*\n"); printf("\t*[3]查詢職工信息[4]修改職工信息*\n"); printf("\t*[5]插入職工記錄[6]統(tǒng)計(jì)職工記錄*\n"); printf("\t*[7]排序[8]保存職工信息*\n"); printf("\t*[9]顯示數(shù)據(jù)[0]退出系統(tǒng)*\n"); printf("\t**\n"); printf("\t*****************************************************************\n");}//voidmenu菜單結(jié)束voidDisp(Linkl)//顯示單鏈表l中存儲(chǔ)的職工記錄,內(nèi)容為employee結(jié)構(gòu)中定義的內(nèi)容{ intcount=0; Node*p; p=l->next;//l存儲(chǔ)的是單鏈表中頭結(jié)點(diǎn)的指針,該頭結(jié)點(diǎn)沒有存儲(chǔ)職工信息,指針域指向的后繼結(jié)點(diǎn)才有職工信息 if(!p)/*p==NULL,NUll在stdlib中定義為0*/ { printf("\n=====>提示:沒有職工記錄可以顯示!\n"); return; } printf("\t\t\t\t顯示結(jié)果\n"); printstart();//打印橫線 printc();//打印各學(xué)科標(biāo)題 printf("\n"); while(p)//逐條輸出鏈表中存儲(chǔ)的職工信息 { printe(p); p=p->next; } printstart(); printf("\n");}//voidDisp結(jié)束voidprintstart(){ printf("-----------------------------------------------------------------------\n");}voidWrong(){ printf("\n=====>提示:輸入錯(cuò)誤!\n");}voidNofind(){ printf("\n=====>提示:沒有找到該職工!\n");}voidprintc()/*本函數(shù)用于輸出中文*/{ printf("工號(hào)\t姓名性別部門職稱工資總工資平均工資\n");}voidprinte(Node*p)/*本函數(shù)用于打印鏈表中某個(gè)節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容*/{ printf("%-12s%s\t%s\t%d\t%d\t%d\t%d\t%d\n", p->data.num,p->,p->data.sex,p->data.bm,p->data.zc,p->data.gz);}//Locate(l,findmess,"num");/*該函數(shù)用于定位連表中符合要求的結(jié)點(diǎn),并返回該指針*/Node*Locate(Linkl,charfindmess[],charzcornum[]){ Node*r; if(strcmp(zcornum,"num")==0)/*按工號(hào)查詢*/ { r=l->next; while(r!=NULL) { if(strcmp(r->data.num,findmess)==0)/*若找到findmess值的工號(hào)*/ returnr; r=r->next; } } elseif(strcmp(zcornum,"zc")==0)/*按職稱查詢*/ { r=l->next; while(r!=NULL) { if(strcmp(r->data.zc,findmess)==0)/*若找到findmess值的職工職稱*/ returnr; r=r->next; } } return0;/*若未找到,返回一個(gè)空指針*/}//add()函數(shù)中,無節(jié)點(diǎn)時(shí),r指向list頭,有節(jié)點(diǎn)時(shí),r指向末尾節(jié)點(diǎn)voidAdd(Linkl)/*增加職工*/{ Node*p,*r,*s;/*實(shí)現(xiàn)添加操作的臨時(shí)的結(jié)構(gòu)體指針變量*/ charnum[10]; intflag=0; r=l; s=l->next;//鏈表沒有節(jié)點(diǎn)時(shí),s=null;/鏈表有節(jié)點(diǎn)時(shí),指向第一個(gè)職工節(jié)點(diǎn) while(r->next!=NULL)//如果存在后繼結(jié)點(diǎn)時(shí),r指針后移一個(gè) r=r->next;/*將指針移至于鏈表最末尾,準(zhǔn)備添加記錄*/ while(1) { printf("請(qǐng)你輸入工號(hào)(以'0'返回上一級(jí)菜單:)"); scanf("%s",num); if(strcmp(num,"0")==0)//輸入'0',跳出while(1),即跳出add()函數(shù) break; s=l->next;//作用?每次從第一個(gè)節(jié)點(diǎn)開始找,看num是否重復(fù)。 while(s)//工號(hào)重復(fù)時(shí),返回主菜單 { if(strcmp(s->data.num,num)==0) { printf("=====>提示:工號(hào)為'%s'的職工已經(jīng)存在,若要修改請(qǐng)你選擇'4修改'!\n",num); flag=1;//break; return; } s=s->next; }//while(s) p=(Node*)malloc(sizeof(Node));//生成沒賦值的新節(jié)點(diǎn)p strcpy(p->data.num,num); printf("請(qǐng)你輸入姓名:"); scanf("%s",p->); getchar(); printf("請(qǐng)你輸入性別:"); scanf("%s",p->data.sex); getchar(); printf("請(qǐng)你輸入職工所在部門:"); scanf("%d",&p->data.bm); getchar(); printf("請(qǐng)你輸入職工職稱:"); scanf("%d",&p->data.zc); getchar(); printf("請(qǐng)你輸入職工工資:"); scanf("%d",&p->data.gz); getchar(); /*信息輸入已經(jīng)完成*/ p->next=NULL;/*表明這是鏈表的尾部結(jié)點(diǎn)*/ r->next=p;/*將新建的結(jié)點(diǎn)加入鏈表尾部中*/ r=p; saveflag=1; }//while(1)} //voidAdd增加結(jié)束voidDel(Linkl)/*刪除*/{ intsel; Node*p,*r;/*實(shí)現(xiàn)刪除操作的臨時(shí)的結(jié)構(gòu)體指針變量*/ charfindmess[20]; if(!l->next)//當(dāng)list無后繼結(jié)點(diǎn)時(shí),提示和結(jié)束返回del() { printf("\n=====>提示:沒有記錄可以刪除!\n"); return; } printf("\n=====>1按工號(hào)刪除\n=====>2按姓名刪除\n"); scanf("%d",&sel); if(sel==1)//按工號(hào)刪除 { printf("請(qǐng)你輸入要?jiǎng)h除的工號(hào):"); scanf("%s",findmess); p=Locate(l,findmess,"num"); if(p) { r=l; while(r->next!=p) r=r->next;//從第一個(gè)結(jié)點(diǎn)找起,直到發(fā)現(xiàn)r->next=p,是待刪除結(jié)點(diǎn),跳出循環(huán) r->next=p->next;//r r->next(p)p->next free(p); printf("\n=====>提示:該職工已經(jīng)成功刪除!\n"); saveflag=1; } else Nofind();//顯示一句話 }//if(sel==1) elseif(sel==2)//按姓名刪除 { printf("請(qǐng)你輸入要?jiǎng)h除的姓名:"); scanf("%s",findmess); p=Locate(l,findmess,"name"); if(p) { r=l; while(r->next!=p) r=r->next; r->next=p->next;//r r->next(p)p->next free(p); printf("\n=====>提示:該職工已經(jīng)成功刪除!\n"); saveflag=1; } else Nofind(); }//if(sel==2) else Wrong();//顯示輸入錯(cuò)誤的話}//voidDel刪除結(jié)束voidQur(Linkl)//查詢功能{ intsel; charfindmess[20]; Node*p;//實(shí)現(xiàn)查詢操作的臨時(shí)的結(jié)構(gòu)體指針變量 if(!l->next) { printf("\n=====>提示:沒有資料可以查詢!\n"); return; } printf("\n=====>1按工號(hào)查找\n=====>2按職稱查找\n"); scanf("%d",&sel); if(sel==1)/*工號(hào)*/ { printf("請(qǐng)你輸入要查找的工號(hào):"); scanf("%s",findmess); p=Locate(l,findmess,"num"); if(p) { printf("\t\t\t\t查找結(jié)果\n"); printstart();//打印橫線 printc();//打印各學(xué)科標(biāo)題 printe(p);//打印p結(jié)點(diǎn)各個(gè)數(shù)據(jù)成員的值 printstart();//打印橫線 } else Nofind(); }//if(sel==1) elseif(sel==2)/*職稱*/ { printf("請(qǐng)你輸入要查找的職稱:"); scanf("%s",findmess); p=Locate(l,findmess,"zc"); if(p) { printf("\t\t\t\t查找結(jié)果\n"); printstart(); printc(); printe(p); printstart(); } else Nofind(); } else Wrong();}//voidQur查詢結(jié)束voidModify(Linkl)//修改功能{ Node*p; charfindmess[20]; if(!l->next) { printf("\n=====>提示:沒有資料可以修改!\n"); return; } printf("請(qǐng)你輸入要修改的職工工號(hào):"); scanf("%s",findmess); p=Locate(l,findmess,"num"); if(p) { printf("請(qǐng)你輸入新工號(hào)(原來是%s):",p->data.num); scanf("%s",p->data.num); printf("請(qǐng)你輸入新姓名(原來是%s):",p->); scanf("%s",p->); getchar(); printf("請(qǐng)你輸入新性別(原來是%s):",p->data.sex); scanf("%s",p->data.sex); getchar(); printf("請(qǐng)你輸入新的部門(原來是%s):",p->data.bm); scanf("%d",&p->data.bm); printf("請(qǐng)你輸入新的職稱(原來是%s):",p->data.zc); scanf("%d",&p->data.zc); getchar(); printf("請(qǐng)你輸入新的工資(原來是%d):",p->data.gz); scanf("%d",&p->data.gz); printf("\n=====>提示:資料修改成功!\n"); //shoudsave=1; } else Nofind();//if(p)結(jié)束}//voidModify(Linkl)//修改功能結(jié)束//插入記錄:按工號(hào)查詢到要插入的節(jié)點(diǎn)的位置,然后在該工號(hào)之后插入一個(gè)新節(jié)點(diǎn)。voidInsert(Linkl){ Node*s,*r,*p;/*p指向插入位置,p指新插入記錄節(jié)點(diǎn)*/ charch,new_num[10],old_num[10]; //old_num[]保存插入點(diǎn)位置之前的工號(hào),new_num[]保存輸入的新記錄的工號(hào) intflag=0; s=l->next; system("cls"); Disp(l); while(1) { //stringinput(s,10,"pleaseinputinsertlocationaftertheNumber:"); printf("請(qǐng)你輸入已存在的工號(hào)(以'0'返回上一級(jí)菜單:)"); scanf("%s",old_num); if(strcmp(old_num,"0")==0)//輸入'0',跳出while(1),即跳出Insert()函數(shù) return; s=l->next;//作用?每次從第一個(gè)節(jié)點(diǎn)開始找 flag=0; while(s)/*查詢?cè)摴ぬ?hào)是否存在,flag=1表示該工號(hào)存在*/ { if(strcmp(s->data.num,old_num)==0) { flag=1; break; } s=s->next; } if(flag==1) break;/*若工號(hào)存在,則進(jìn)行插入之前的新記錄的輸入操作*/ else { getchar(); printf("\n=====>Thenumber%sisnotexisting,tryagain?(y/n):",old_num); scanf("%c",&ch); if(ch=='y'||ch=='Y') {continue;} else {return;}//回主菜單 } }//while(1) /*以下新記錄的插入新節(jié)點(diǎn),工號(hào)不能跟已存在的工號(hào)相同,操作與Add()相同*/ printf("請(qǐng)你輸入待插入的工號(hào)(以'0'返回上一級(jí)菜單:)"); scanf("%s",new_num); if(strcmp(new_num,"0")==0)//輸入'0',跳出while(1),即跳出add()函數(shù) return; s=l->next;//作用?每次從第一個(gè)節(jié)點(diǎn)開始找,看num是否重復(fù)。 while(s)//工號(hào)重復(fù)時(shí),返回主菜單 { if(strcmp(s->data.num,new_num)==0) { printf("=====>提示:工號(hào)為'%s'的職工已經(jīng)存在'!\n",new_num); flag=1; return; } s=s->next; }//while(s) p=(Node*)malloc(sizeof(Node)); if(!p) { printf("\nallocatememoryfailure");/*如沒有申請(qǐng)到,打印提示信息*/ return;/*返回主界面*/ } strcpy(p->data.num,new_num); printf("請(qǐng)你輸入姓名:"); scanf("%s",p->); getchar(); printf("請(qǐng)你輸入性別:"); scanf("%s",p->data.sex); getchar(); printf("請(qǐng)你輸入部門:"); scanf("%d",&p->data.bm); getchar(); printf("請(qǐng)你輸入職稱:"); scanf("%d",&p->data.zc); getchar(); printf("請(qǐng)你輸入工資:"); scanf("%d",&p->data.gz); getchar(); //信息輸入已經(jīng)完成 p->next=NULL;/*表明這是鏈表的尾部結(jié)點(diǎn)*/ saveflag=1;/*在main()有對(duì)該全局變量的判斷,若為1,則進(jìn)行存盤操作*/ /*將指針賦值給r,因?yàn)閘中的頭節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)才實(shí)際保存著學(xué)生的記錄*/ r=l->next; while(1) { if(strcmp(r->data.num,old_num)==0)/*在鏈表中插入一個(gè)節(jié)點(diǎn)*/ { p->next=r->next; r->next=p; break; } r=r->next; }// while(1),r作為查詢指針,依次從第一個(gè)節(jié)點(diǎn)找起,找到后跳出while(1)循環(huán) Disp(l); printf("\n\n"); //getchar();}voidTongji(Linkl)//統(tǒng)計(jì){ Node*max,*min;/*用于指向工資最高的節(jié)點(diǎn)*/ Node*t=l->next; if(!t) { system("cls"); printf("\n=====>Notemployeerecord!\n"); getchar(); return; } system("cls"); Disp(l); max=min=t; while(t) { if(t->data.gz>=max->data.gz)max=t; if(t->data.gz<=min->data.gz)min=t; t=t->next; printf("最高工資為:%d\n",max); printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",t->data.num,t->,t->data.sex,t->data.bm,t->data.zc,t->data.gz);printf("最低工資為:%d\n",min); printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",t->data.num,t->,t->data.sex,t->data.bm,t->data.zc,t->data.gz); }}voidSort(Linkl)//排序{ Linkll; Node*p,*rr,*s; inti=0; if(l->next==NULL) {system("cls"); printf("\n=====>Notemployeerecord!\n"); getchar(); return; } ll=(Node*)malloc(sizeof(Node));/*用于創(chuàng)建新的節(jié)點(diǎn)*/ if(!ll) { printf("\nallocatememoryfailure");/*如沒有申請(qǐng)到,打印提示信息*/ return;/*返回主界面*/ } ll->next=NULL; system("cls"); Disp(l);/*顯示排序前的所有職工記錄*/ p=l->next; while(p)/*p!=NULL*/ { s=(Node*)malloc(sizeof(Node));/*新建節(jié)點(diǎn)用于保存從原鏈表中取出的節(jié)點(diǎn)信息*/ if(!s)/*s==NULL*/ { printf("\nallocatememoryfailure");/*如沒有申請(qǐng)到,打印提示信息*/ return;/*返回主界面*/ } s->data=p->data;/*填數(shù)據(jù)域*/ s->next=NULL;/*指針域?yàn)榭?/ rr=ll; /*rr鏈表于存儲(chǔ)插入單個(gè)節(jié)點(diǎn)后保持排序的鏈表,ll是這個(gè)鏈表的頭指針,每次從頭開始查找插入位置*/ while(rr->next!=NULL&&rr->next->data.gz>=p->data.gz) {rr=rr->next;}/*指針移至總分比p所指的節(jié)點(diǎn)的總分小的節(jié)點(diǎn)位置*/ if(rr->next==NULL)/*若新鏈表ll中的所有節(jié)點(diǎn)的總分值都比p->data.gz大時(shí),就將p所指節(jié)點(diǎn)加入鏈表尾部*/ rr->next=s; else/*否則將該節(jié)點(diǎn)插入至第一個(gè)總分字段比它小的節(jié)點(diǎn)的前面*/ { s->next=rr->next; rr->next=s; } p=p->next;/*原鏈表中的指針下移一個(gè)節(jié)點(diǎn)*/ } l->next=ll->next;/*ll中存儲(chǔ)是的已排序的鏈表的頭指針*/ Disp(l); saveflag=1; printf("\n=====>sortcomplete!\n");}voidSave(Linkl){ FILE*fp; Node*p;//實(shí)現(xiàn)保存操作的臨時(shí)的結(jié)構(gòu)體指針變量 intflag=1,count=0; fp=fopen("employee.txt","wb"); if(fp==NULL) { printf("\n=====>提示:重新打開文件時(shí)發(fā)生錯(cuò)誤!\n"); return; } p=l->next;//p指向第一個(gè)記錄結(jié)點(diǎn) while(p) { if(fwrite(p,sizeof(Node),1,fp)==1)//將第一個(gè)記錄結(jié)點(diǎn)值寫入文件 { p=p->next;//依次寫入第二個(gè)結(jié)點(diǎn)的值, count++;//文件的記錄數(shù)+1 } else { flag=0; break; } }//while(p) if(count>0) { printf("\n=====>提示:文件保存成功.(有%d條記錄已經(jīng)保存.)\n",count); saveflag=0; } else { system("cls"); printf("保存文件失敗,'0'條記錄被保存!\n"); } fclose(fp);}//voidSave結(jié)束voidmain(){ Linklist;/*定義鏈表*///structnode*list; FILE*fp;/*文件指針*/ intchoose;/*保存選擇結(jié)果變量*/ charch;/*保存(y,Y,n,N)*/ intcount=0;/*保存文件中的記錄條數(shù)(或結(jié)點(diǎn)個(gè)數(shù))*/ structnode*p,*r;/*定義記錄指針變量*/ printf("\t\t\t\t職工信息管理系統(tǒng)\n\t\t\t\t\n"); list=(structnode*)malloc(sizeof(structnode)); if(!list) { printf("\nallocatememoryfailure");/*如沒有申請(qǐng)到,打印提示信息*/ return;/*返回主界面*/ } list->next=NULL; r=list; fp=fopen("employee.txt","rb"); if(fp==NULL) { printf("\n=====>提示:文件還不存在,是否創(chuàng)建?(y/n)\n"); scanf("%c",&ch); if(ch=='y'||ch=='Y') fp=fopen("employee.txt","ab+"); else exit(0); }// if(fp==NULL) printf("\n=====>提示:文件已經(jīng)打開,正在導(dǎo)入記錄......\n"); while(!feof(fp))//沒有到文件尾時(shí),循環(huán) { p=(structnode*)malloc(sizeof(structnode)); if(!p) { printf("memorymallocfailure!\n");/*沒有申請(qǐng)成功*/ exit(0);/*退出*/ } if(fread(p,sizeof(structnode),1,fp))/*讀文件的已有內(nèi)容放入結(jié)點(diǎn)中*/ { p->next=NULL; r->next=p; r=p;/*將該結(jié)點(diǎn)掛入鏈表中,r指向最后的節(jié)點(diǎn)*/ count++; } }//while(!feof(fp)) fclose(fp);/*關(guān)閉文件*/ printf("\n=====>提示:記錄導(dǎo)入完畢,共導(dǎo)入%d條記錄.\n",count); while(1) { menu(); printf("\t\t====>請(qǐng)選擇:"); scanf("%d",&choose); if(choose==0) { if(saveflag==1) { getchar(); printf("\n=====>提示:資料已經(jīng)改動(dòng),是否將改動(dòng)保存到文件中(y/n)?\n"); scanf("%c",&ch); if(ch=='y'||ch=='Y') Save(list); }//if printf("\n=====>提示:你已經(jīng)退出系統(tǒng),再見!\n"); break; }//if switch(choose) { case1:Add(list); break;/*增加職工記錄*/ case2:Del(list); break;/*刪除職工記錄*/ case3: Qur(list); break;/*查詢職工記錄*/ case4: Modify(list); break;/*修改職工記錄*/ case5: Insert(list); break;/*插入職工記錄*/ case6: Tongji(list); break;/*統(tǒng)計(jì)職工記錄*/ case7: Sort(list); break;/*排序職工記錄*/ case8: Save(list); break;/*保存職工記錄*/ case9: system("cls"); Disp(list); break;/*顯示職工記錄*/ default: Wrong(); getchar(); break; }//switch(choose) }//while(1)}//main()/**/數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)學(xué)生信息管理系統(tǒng)C語言編寫僅供參考:#include<stdio.h>#include〈stdlib.h>#include<string.h>#include<conio.h>#defineLENsizeof(LN(yùn)ode)typedefstructLNode{//用于存放學(xué)生信息節(jié)點(diǎn) intstuNumber;chartelenum[50];?intage;?charchass[50];?chardeptName[50]; /*charzhuanYe[50]; charadress[50];*/ charname[20]; structLN(yùn)ode*next;}LNode,*Link;//****************創(chuàng)建鏈表結(jié)點(diǎn)**************************************************************************?LinkcreateLink(LinkL) {//初始化定義函數(shù),聲明變量 voidinserStu(LinkL,LinkElem);//定義插入函數(shù) intcount(LinkL);inttemp;?temp=count(L);?printf("節(jié)點(diǎn)個(gè)數(shù)為%d:\n”,temp); Linkp;??intnum=1,stuNumber; chartelenum[50]; ?charname[20]; intage;/*chardeptName[50];?charadress[50];charzhuanYe[50];*/? charchass[50];?//開始輸出學(xué)生信息? while(1)? { ?printf(”請(qǐng)輸入學(xué)生的信息:學(xué)號(hào),姓名,年齡,班級(jí),院系,專業(yè),家庭住址,電話號(hào)碼\n");?printf("學(xué)號(hào)輸入負(fù)數(shù)結(jié)束!\n”); ?printf(”請(qǐng)輸入學(xué)號(hào)%d:",num);scanf("%10d”,&stuNumber); ?if(stuNumber<0){break;}printf("請(qǐng)輸入姓名%d:",num);?getchar(); ?gets(name); printf("請(qǐng)輸入年齡%d:",num);scanf("%d",&age); printf("請(qǐng)輸入班級(jí)%d:”,num); getchar(); gets(chass); printf(”請(qǐng)輸入電話號(hào)碼:",num); getchar(); gets(telenum);/*printf(”請(qǐng)輸入院系%d:",num); ?getchar();??gets(deptName);*/if(stuNumber〉=0) ? ??{ ??p=(Link)malloc(LEN);?? ?p->stuNumber=stuNumber;? strcpy(p—>chass,chass);?? /*strcpy(p-〉deptName,deptName);*/ ? ?p->age=age;? ?strcpy(p->telenum,telenum); ?? strcpy(p->name,name);//插入新結(jié)點(diǎn) ? ?inserStu(L,p);num++;? ??} ?}??return(L);?}//******************打印頭結(jié)點(diǎn)為L(zhǎng)的學(xué)生記錄********************************************************voidprintList(LinkL){ printf("\n*********************學(xué)號(hào),姓名,年齡,班級(jí),電話號(hào)碼**************************\n"); printf("\n學(xué)號(hào)姓名年齡專業(yè)班級(jí)電話號(hào)碼\n"); intn=1; Linkp=L; intcount(LinkL);inttemp; temp=count(L);//結(jié)點(diǎn)個(gè)數(shù): if(temp==0)printf("系統(tǒng)中沒有元素\n”);//判斷學(xué)生管理系統(tǒng)中有無信息else while(p—>next!=NULL)?{ ??printf(”%2d%-9d",n,p—>next—〉stuNumber); ?printf("%-8s%-5d%—12s%s\n”,p—>next—〉name,p—〉next—>age,p—>next->chass,p—>next->telenum/*p-〉next->deptName*/);//首個(gè)字符打印不出來? ?p=p-〉next; ?n++;??} printf("\n***********************************************************************************\n");?return;}//********************************插入學(xué)生信息**************************************voidinserStu(LinkL,LinkElem){Linkprior(LinkL,Linkp); Linkp=L->next;//*******%%%%****?while(p?。絅ULL&&Elem->stuNumber>=p—>stuNumber) {? if(p-〉stuNumber==Elem->stuNumber) { ?printf("重復(fù)輸入學(xué)號(hào),輸入失??!");return;? } ?p=p—>next; }//確定Elem的插入位置 if(p==NULL) { p=prior(L,p);Elem->next=NULL;p-〉next=Elem;//若為空表,插入到頭結(jié)點(diǎn)之后} else { ?p=prior(L,p);Elem->next=p—>next;p—>next=Elem;?}}//***********************找到當(dāng)前地址元素的前一元素的地址*************************************************************************Linkprior(LinkL,Linkp)?{? if(L-〉next==NULL)return(L); Linkp_prior=L;?while(p_prior—>next!=p)?{ p_prior=p_prior->next; } return(p_prior);}//********************************8按學(xué)號(hào)查詢學(xué)生信息***************************************************************************intsearchName(LinkL,charn[]){ intflag=0;//標(biāo)志要查找的學(xué)生和學(xué)生記錄中的姓名是否匹配 Linkp=L—〉next;?intseat=1;if(L->next==NULL||L==NULL)printf("沒有學(xué)生信息\n");else { while(p!=NULL)? {? if(!strcmp(p->name,n))//比較要查找的姓名是否和當(dāng)前學(xué)生信息所指的姓名匹配 ? {? flag=1;//輸入姓名匹配 ??printf("要查找的是第%d位學(xué)生\n",seat);? printf(”學(xué)號(hào)是:%d名字:%s年齡:%d班級(jí):%s手機(jī)號(hào):%s\n",p->stuNumber,p—〉name,p—〉age,p—>chass,p->telenum); ??} p=p—〉next;seat(yī)++;??} } returnflag;}//****************************************按學(xué)號(hào)查找學(xué)生信息*********************************************************************intsearchNum(LinkL,intn){?intflag=0;//標(biāo)志要查找的學(xué)生和管理信息系統(tǒng)中的學(xué)號(hào)是否匹配?Linkp=L->next;?intseat=1; if(L->next==NULL)printf(”沒有學(xué)生信息\n”); else?{ ??while(p!=NULL)?? { ?if(p-〉stuNumber〈=n) ???{??? if(p—〉stuNumber==n)//比較要查找的學(xué)號(hào)是否和當(dāng)前學(xué)生信息所指的學(xué)號(hào)匹配? ?{ ???flag=1;//輸入學(xué)號(hào)匹配????printf("要查找的是第%d位學(xué)生\n”,seat(yī)); ? ?printf("學(xué)號(hào)是:%d名字:%s年齡:%d班級(jí):%s手機(jī)號(hào):%s\n",p—>stuNumber,p->name,p->age,p-〉chass,p—〉telenum);? } ?? }??p=p-〉next;seat++;???}?}returnflag;}//*******************************從通訊錄中刪除第i個(gè)元素***************************************************************************voiddeleteElem(LinkL,inti){?Linkp=L; intj=0; while(p-〉next&&j〈i-1) { p=p-〉next;j++; }?if(!(p—>next))//判斷i時(shí)候合法,i不能大于元素的個(gè)數(shù),也不能小于等于0 {??printf("第%d個(gè)學(xué)生刪除失敗\n”,i);?? return;?}?Linkq=p->next;?p->next=q—〉next; free(q);}//*******************按姓名刪除學(xué)生信息**********************************************************************************************intdeleName(LinkL,charn[]){voiddeteStu(Link);intflag=0;//判斷要?jiǎng)h除的學(xué)生與系統(tǒng)中的姓名是否匹配?Linkp=L->next;intseat=1;if(L->next==NULL){printf("\n刪除提示:系統(tǒng)中沒有元素,刪除失??!\n");deteStu(L);}else{while(p!=NULL)?{ ?if(!strcmp(p->name,n))//比較名字是否匹配? {??flag=1;??printf("%s”,p->name); p=p->next; ?deleteElem(L,seat);//刪除第i個(gè)學(xué)生的信息??} else? { p=p—>next;seat++;? } if(flag)printf("被刪除了\n”);?}}returnflag;}//*****************按學(xué)號(hào)刪除學(xué)生信息*****************************************************************intdeleNum(LinkL,intn){voiddeteStu(Link);??intflag=0; Linkp=L-〉next;??intseat=1;if(L—>next==NULL)? { printf("\n刪除提示:系統(tǒng)中沒有元素,刪除失敗!\n”);deteStu(L);??}?else ?{? while(p!=NULL)??{ if(p->stuNumber==n)? ??{ ?? flag=1;?? ?printf(”%d”,p—>stuNumber);? p=p-〉next; ? deleteElem(L,seat(yī));?? ?break; ???}? ?p=p—>next;? ?seat++; ?} ?if(flag){? ?printf("被刪除了\n");} ?else{???printf(”沒有找到學(xué)生信息\n"); ?} ?}?returnflag;}//*************************************************************************************voidsearchWay1(LinkL){voidsearchMenu(LinkL);intsearchWay=0;//控制跳出循環(huán),再次選擇查詢方式 ??if(searchWay==0)??? {??? printf(”請(qǐng)輸入要查詢的學(xué)生的學(xué)號(hào):\n"); ? ?intn,s;? ?? scanf(”%d",&n);? ? s=searchNum(L,n); ???if(s==0)printf(”查找失?。躰");???? searchWay=1;?? } ? if(searchWay==1)????{ ? ??searchMenu(L);? ?}}//********************************************************************************voidsearchWay2(LinkL){voidsearchMenu(LinkL); intsearchWay=0;//控制跳出循環(huán),再次選擇查詢方式 ? ? if(searchWay==0)? ?? { ? ? charn[20];intflag;? ?? printf("請(qǐng)輸入要查詢的學(xué)生姓名\n");? ? ??chartemp2=getchar(); ?? ?gets(n);????? flag=searchName(L,n);? ? ??if(flag==0)printf(”查找失敗!\n”); ???searchWay=1; ? }??? if(searchWay==1)? ? { ?? ?searchMenu(L); ? ??}}//*****************************************************************8voidsearchMenu(LinkL){ intmainMenu();printf(”**********************查詢菜單**************************************\n”);printf(”***1輸入學(xué)生學(xué)號(hào)查詢學(xué)生信息\n”);printf(”***2輸入學(xué)生姓名查詢學(xué)生信息\n");printf("***3返回上級(jí)菜單\n");printf("**********************查詢菜單**************************************\n");printf(”請(qǐng)選擇1-3:");intmenu;?scanf("%d”,&menu);switch(menu) {?case1:{searchWay1(L);break;}case2:{searchWay2(L);break;}?case3:{? break;//跳回主菜單程序???}?}}//************************************更新學(xué)生信息模塊*****************************************voidalterStu(LinkL)//按學(xué)號(hào)更新學(xué)生信息{intn;printf("請(qǐng)輸入要修改的學(xué)生學(xué)號(hào):"); scanf("%d”,&n); Linkp=L-〉next; if(p==NULL){printf("學(xué)生管理系統(tǒng)沒有學(xué)生信息?。?;} while(p?。剑蜺LL)//循環(huán)查找學(xué)生信息,如果找到該學(xué)號(hào)則進(jìn)入循環(huán)體更改學(xué)生信息 {//**********************************************************************************************? if(p—〉stuNumber==n){?? ? intnum=1,stuNumber,age; ? ??chartelenum[50]; ?charname[20]; ??? ?charchass[50];printf(”***********************更改學(xué)生信息*****************************************\n");??? printf("請(qǐng)輸入學(xué)生的學(xué)號(hào),姓名和電話號(hào)碼\n");printf(”請(qǐng)輸入學(xué)號(hào)%d:”,num);scanf(”%d",&stuNumber);printf("請(qǐng)輸入姓名%d:",num);getchar();gets(name); ? ?printf("請(qǐng)輸入年齡%d:",num);scanf("%d",&age); printf("請(qǐng)輸入班級(jí)%d:",num); ?getchar();?gets(chass);printf("請(qǐng)輸入電話號(hào)碼:",num);getchar();gets(telenum);p—〉age=age;p—>stuNumber=stuNumber;strcpy(p->telenum,telenum);strcpy(p—>name,name);???? strcpy(p—〉chass,chass); ?? //更新新結(jié)點(diǎn) printf(”***********************更改學(xué)生信息完畢*****************************************\n”);//************************************************************************************************* ? }?p=p->next;}}//****************保存學(xué)生信息模塊***************************************************************************voidkeepStu(LinkL){??Linkp=L—>next;??FILE*fp; if((fp=fopen("student。txt”,”r”))==NULL)//打開文件,不存在此文件則新建?{ fp=fopen("E:\\測(cè)試\\student.txt",”w”); fclose(fp);?}?fp=fopen(”E:\\測(cè)試\\student.txt","a"); while(p!=NULL) {?fprintf(fp,"%d\t%s\t%s\n",p->stuNumber,p-〉name,p-〉telenum);?p=p->next;?}?fclose(fp);?printf("文件保存成功!\n");}//********************統(tǒng)計(jì)結(jié)點(diǎn)個(gè)數(shù)模塊***********************************************************************************intcount(LinkL){ intn=0;?Linkp=L—〉next;?if(p==NULL){printf(”不存在學(xué)生信息\n");} while(p!=NULL)?{?p=p->next; ?n++; }returnn;}//********************************導(dǎo)入學(xué)生信息模塊**********************************************************************LinkstuEntry(){ FILE*fp;? Linkp,q,L; if((fp=fopen(”E:\\測(cè)試\\student。txt",”r”))==NULL)//打開文件,不存在此文件則新建 {?; }L=q=(Link)malloc(LEN);?printf("\n學(xué)號(hào)姓名手機(jī)號(hào)\n");?printf(”**********************************************************\n");while(?。鎒of(fp))?{p=(Link)malloc(LEN);?fscanf(fp,”%d\t%s\t%s\n",&p-〉stuNumber,&p—〉name,&p->telenum); printf("\n%d\t%s\t%s\n”,p—〉stuNumber,p—〉name,p->telenum);?q->next=p;?q=p; } q->next=NULL;?fclose(fp); printf(”按任意鍵結(jié)束:”); getch();//返回returnL;}//********************添加學(xué)生信息**************************************************************************voidAddStu(LinkL){inttemp; temp=count(L); printf("節(jié)點(diǎn)個(gè)數(shù)為%d:\n",temp);? ???if(temp==0){createLink(L);}//如果沒有學(xué)生信息則調(diào)用初始化函數(shù)?createLink(L);}//****************?jiǎng)h除學(xué)生菜單****************************************************voiddeteStu(LinkL){intflag=0,way,n; ??printf("\n************************?jiǎng)h除菜單********************\n”); ??printf("\n選擇操作方式*************1:按學(xué)號(hào)********************\n"); ? printf("*************2:按姓名********************\n"); printf(”*************3:返回主菜單*********************\n”); ? ?printf("\n請(qǐng)輸入刪除方式:");??? ?scanf("%d",&way); ?? if(way〈1||way>3){deteStu(L);} ??switch(way) {? ??case1: { ? ? printf(”請(qǐng)輸入要?jiǎng)h除的學(xué)生學(xué)號(hào):");scanf("%d",&n); ? ? flag=deleNum(L,n);break;?????? }? ??case2:{ ? ??charn[20]; printf(”請(qǐng)輸入要?jiǎng)h除的學(xué)生姓名:"); ???chartemp1=getchar();gets(n);? ?flag=deleName(L,n);break;??? ??}? ? case3:{break;}} ???if(flag) ? ? {?? ?printf("刪除成功!\n");deteStu(L);?? ? }}//**********************主菜單程序******************************************************************************intmainMenu(){printf(”\n****************************?dú)g迎使用學(xué)生管理信息系統(tǒng)***********************************************\n");printf(”****1輸入學(xué)生信息*****\n");printf("****2顯示學(xué)生信息*****\n”);printf("****3查詢學(xué)生信息*****\n”);printf("****4更新學(xué)生信息*****\n");printf(”****5添加學(xué)生信息*****\n”);printf("****6刪除學(xué)生信息*****\n”);printf(”****7保存學(xué)生信息*****\n");printf("****8從文件導(dǎo)入學(xué)生信息*****\n");printf("****0退出管理信息系統(tǒng)*****\n");printf("****************************?dú)g迎使用學(xué)生管理信息系統(tǒng)***********************************************");?intmenu=0; printf("請(qǐng)選擇0-8:”);?scanf(”%d",&menu);if(menu〈0&&menu〉8) {
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年臺(tái)州科技職業(yè)學(xué)院招聘筆試真題
- 二零二五年度新能源產(chǎn)品設(shè)計(jì)委托合同
- 二零二五年度按摩店與保險(xiǎn)公司合作意外傷害險(xiǎn)合同
- 二零二五年度建筑企業(yè)代理記賬與工程結(jié)算合同
- 二零二五年度倉儲(chǔ)物流基地土地租賃與運(yùn)營(yíng)管理合同
- 二零二五年度房地產(chǎn)項(xiàng)目水泥制品定制采購合同
- 2025年度環(huán)保行業(yè)勞務(wù)派遣安全免責(zé)合同
- 二零二五年度城市地下空間代建合作協(xié)議書
- 2025年度深圳市區(qū)裝修工程質(zhì)量保證合同
- 二零二五年度建筑鋼筋節(jié)能減排購銷合作協(xié)議
- 【2025年衛(wèi)生健康宣傳日】世界防治結(jié)核病日
- 新版《醫(yī)療器械經(jīng)營(yíng)質(zhì)量管理規(guī)范》(2024)培訓(xùn)試題及答案
- 2025年人教版數(shù)學(xué)五年級(jí)下冊(cè)教學(xué)計(jì)劃(含進(jìn)度表)
- 醫(yī)院安全巡查制度醫(yī)院安全巡查制度
- 骨化膿性骨髓炎的影像學(xué)診斷
- 臺(tái)灣姓氏拼音對(duì)照
- 套管柱及其強(qiáng)度設(shè)計(jì)ppt課件
- 三年級(jí)語文家長(zhǎng)會(huì)(課堂PPT)
- 新老加油加氣站設(shè)計(jì)與施工規(guī)范要點(diǎn)對(duì)比解讀
- 醫(yī)藥企業(yè)價(jià)格和營(yíng)銷行為信用承諾書
- 三體系程序文件(參考)
評(píng)論
0/150
提交評(píng)論