數據結構課程設計職工信息管理系統(tǒng)單鏈表實現程序源代碼優(yōu)質資料_第1頁
數據結構課程設計職工信息管理系統(tǒng)單鏈表實現程序源代碼優(yōu)質資料_第2頁
數據結構課程設計職工信息管理系統(tǒng)單鏈表實現程序源代碼優(yōu)質資料_第3頁
數據結構課程設計職工信息管理系統(tǒng)單鏈表實現程序源代碼優(yōu)質資料_第4頁
數據結構課程設計職工信息管理系統(tǒng)單鏈表實現程序源代碼優(yōu)質資料_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

數據結構課程設計職工信息管理系統(tǒng)單鏈表實現程序源代碼優(yōu)質資料(可以直接使用,可編輯優(yōu)質資料,歡迎下載)

//要求用C語言完成課程設計職工信息管理系統(tǒng)—單鏈表實現數據結構課程設計職工信息管理系統(tǒng)單鏈表實現程序源代碼優(yōu)質資料(可以直接使用,可編輯優(yōu)質資料,歡迎下載)#include<stdio.h>#include<stdlib.h>#include<string.h>intsaveflag=0;/*是否需要存盤的標志變量*/structemployee{ charname[15]; charnum[10];/*工號*/ charsex[4]; charbm[15]; charzc[20]; intgz;};typedefstructnode{ structemployeedata; structnode*next;}Node,*Link;//Linkl(注意是:字母l不是數字1)voidadd(Linkl);voiddisp(Linkl);//查看職工所有信息voiddel(Linkl);//刪除功能Node*Locate(Linkl,charfindmess[],charnameornum[]);voidQur(Linkl);//查詢功能voidTongji(Linkl);//統(tǒng)計voidSort(Linkl);//排序voidModify(Linkl);//修改功能voidsave(Linkl);//將單鏈表l中的數據寫入文件voidprinte(Node*p);//本函數用于打印鏈表中某個節(jié)點的數據內容*///以下4個函數用于輸出中文標題voidprintstart();voidWrong();voidNofind();voidprintc();voidmenu(){ printf("\t*****************************************************************\n"); printf("\t**\n"); printf("\t*職工信息管理系統(tǒng)_結構體數組實現*\n"); printf("\t**\n") printf("\t*[1]增加職工信息[2]刪除職工信息*\n"); printf("\t*[3]查詢職工信息[4]修改職工信息*\n"); printf("\t*[5]插入職工記錄[6]統(tǒng)計職工記錄*\n"); printf("\t*[7]排序[8]保存職工信息*\n"); printf("\t*[9]顯示數據[0]退出系統(tǒng)*\n"); printf("\t**\n"); printf("\t*****************************************************************\n");}//voidmenu菜單結束voidDisp(Linkl)//顯示單鏈表l中存儲的職工記錄,內容為employee結構中定義的內容{ intcount=0; Node*p; p=l->next;//l存儲的是單鏈表中頭結點的指針,該頭結點沒有存儲職工信息,指針域指向的后繼結點才有職工信息 if(!p)/*p==NULL,NUll在stdlib中定義為0*/ { printf("\n=====>提示:沒有職工記錄可以顯示!\n"); return; } printf("\t\t\t\t顯示結果\n"); printstart();//打印橫線 printc();//打印各學科標題 printf("\n"); while(p)//逐條輸出鏈表中存儲的職工信息 { printe(p); p=p->next; } printstart(); printf("\n");}//voidDisp結束voidprintstart(){ printf("-----------------------------------------------------------------------\n");}voidWrong(){ printf("\n=====>提示:輸入錯誤!\n");}voidNofind(){ printf("\n=====>提示:沒有找到該職工!\n");}voidprintc()/*本函數用于輸出中文*/{ printf("工號\t姓名性別部門職稱工資總工資平均工資\n");}voidprinte(Node*p)/*本函數用于打印鏈表中某個節(jié)點的數據內容*/{ 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");/*該函數用于定位連表中符合要求的結點,并返回該指針*/Node*Locate(Linkl,charfindmess[],charzcornum[]){ Node*r; if(strcmp(zcornum,"num")==0)/*按工號查詢*/ { r=l->next; while(r!=NULL) { if(strcmp(r->data.num,findmess)==0)/*若找到findmess值的工號*/ 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;/*若未找到,返回一個空指針*/}//add()函數中,無節(jié)點時,r指向list頭,有節(jié)點時,r指向末尾節(jié)點voidAdd(Linkl)/*增加職工*/{ Node*p,*r,*s;/*實現添加操作的臨時的結構體指針變量*/ charnum[10]; intflag=0; r=l; s=l->next;//鏈表沒有節(jié)點時,s=null;/鏈表有節(jié)點時,指向第一個職工節(jié)點 while(r->next!=NULL)//如果存在后繼結點時,r指針后移一個 r=r->next;/*將指針移至于鏈表最末尾,準備添加記錄*/ while(1) { printf("請你輸入工號(以'0'返回上一級菜單:)"); scanf("%s",num); if(strcmp(num,"0")==0)//輸入'0',跳出while(1),即跳出add()函數 break; s=l->next;//作用?每次從第一個節(jié)點開始找,看num是否重復。 while(s)//工號重復時,返回主菜單 { if(strcmp(s->data.num,num)==0) { printf("=====>提示:工號為'%s'的職工已經存在,若要修改請你選擇'4修改'!\n",num); flag=1;//break; return; } s=s->next; }//while(s) p=(Node*)malloc(sizeof(Node));//生成沒賦值的新節(jié)點p strcpy(p->data.num,num); printf("請你輸入姓名:"); scanf("%s",p->); getchar(); printf("請你輸入性別:"); scanf("%s",p->data.sex); getchar(); printf("請你輸入職工所在部門:"); scanf("%d",&p->data.bm); getchar(); printf("請你輸入職工職稱:"); scanf("%d",&p->data.zc); getchar(); printf("請你輸入職工工資:"); scanf("%d",&p->data.gz); getchar(); /*信息輸入已經完成*/ p->next=NULL;/*表明這是鏈表的尾部結點*/ r->next=p;/*將新建的結點加入鏈表尾部中*/ r=p; saveflag=1; }//while(1)} //voidAdd增加結束voidDel(Linkl)/*刪除*/{ intsel; Node*p,*r;/*實現刪除操作的臨時的結構體指針變量*/ charfindmess[20]; if(!l->next)//當list無后繼結點時,提示和結束返回del() { printf("\n=====>提示:沒有記錄可以刪除!\n"); return; } printf("\n=====>1按工號刪除\n=====>2按姓名刪除\n"); scanf("%d",&sel); if(sel==1)//按工號刪除 { printf("請你輸入要刪除的工號:"); scanf("%s",findmess); p=Locate(l,findmess,"num"); if(p) { r=l; while(r->next!=p) r=r->next;//從第一個結點找起,直到發(fā)現r->next=p,是待刪除結點,跳出循環(huán) r->next=p->next;//r r->next(p)p->next free(p); printf("\n=====>提示:該職工已經成功刪除!\n"); saveflag=1; } else Nofind();//顯示一句話 }//if(sel==1) elseif(sel==2)//按姓名刪除 { printf("請你輸入要刪除的姓名:"); 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=====>提示:該職工已經成功刪除!\n"); saveflag=1; } else Nofind(); }//if(sel==2) else Wrong();//顯示輸入錯誤的話}//voidDel刪除結束voidQur(Linkl)//查詢功能{ intsel; charfindmess[20]; Node*p;//實現查詢操作的臨時的結構體指針變量 if(!l->next) { printf("\n=====>提示:沒有資料可以查詢!\n"); return; } printf("\n=====>1按工號查找\n=====>2按職稱查找\n"); scanf("%d",&sel); if(sel==1)/*工號*/ { printf("請你輸入要查找的工號:"); scanf("%s",findmess); p=Locate(l,findmess,"num"); if(p) { printf("\t\t\t\t查找結果\n"); printstart();//打印橫線 printc();//打印各學科標題 printe(p);//打印p結點各個數據成員的值 printstart();//打印橫線 } else Nofind(); }//if(sel==1) elseif(sel==2)/*職稱*/ { printf("請你輸入要查找的職稱:"); scanf("%s",findmess); p=Locate(l,findmess,"zc"); if(p) { printf("\t\t\t\t查找結果\n"); printstart(); printc(); printe(p); printstart(); } else Nofind(); } else Wrong();}//voidQur查詢結束voidModify(Linkl)//修改功能{ Node*p; charfindmess[20]; if(!l->next) { printf("\n=====>提示:沒有資料可以修改!\n"); return; } printf("請你輸入要修改的職工工號:"); scanf("%s",findmess); p=Locate(l,findmess,"num"); if(p) { printf("請你輸入新工號(原來是%s):",p->data.num); scanf("%s",p->data.num); printf("請你輸入新姓名(原來是%s):",p->); scanf("%s",p->); getchar(); printf("請你輸入新性別(原來是%s):",p->data.sex); scanf("%s",p->data.sex); getchar(); printf("請你輸入新的部門(原來是%s):",p->data.bm); scanf("%d",&p->data.bm); printf("請你輸入新的職稱(原來是%s):",p->data.zc); scanf("%d",&p->data.zc); getchar(); printf("請你輸入新的工資(原來是%d):",p->data.gz); scanf("%d",&p->data.gz); printf("\n=====>提示:資料修改成功!\n"); //shoudsave=1; } else Nofind();//if(p)結束}//voidModify(Linkl)//修改功能結束//插入記錄:按工號查詢到要插入的節(jié)點的位置,然后在該工號之后插入一個新節(jié)點。voidInsert(Linkl){ Node*s,*r,*p;/*p指向插入位置,p指新插入記錄節(jié)點*/ charch,new_num[10],old_num[10]; //old_num[]保存插入點位置之前的工號,new_num[]保存輸入的新記錄的工號 intflag=0; s=l->next; system("cls"); Disp(l); while(1) { //stringinput(s,10,"pleaseinputinsertlocationaftertheNumber:"); printf("請你輸入已存在的工號(以'0'返回上一級菜單:)"); scanf("%s",old_num); if(strcmp(old_num,"0")==0)//輸入'0',跳出while(1),即跳出Insert()函數 return; s=l->next;//作用?每次從第一個節(jié)點開始找 flag=0; while(s)/*查詢該工號是否存在,flag=1表示該工號存在*/ { if(strcmp(s->data.num,old_num)==0) { flag=1; break; } s=s->next; } if(flag==1) break;/*若工號存在,則進行插入之前的新記錄的輸入操作*/ 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é)點,工號不能跟已存在的工號相同,操作與Add()相同*/ printf("請你輸入待插入的工號(以'0'返回上一級菜單:)"); scanf("%s",new_num); if(strcmp(new_num,"0")==0)//輸入'0',跳出while(1),即跳出add()函數 return; s=l->next;//作用?每次從第一個節(jié)點開始找,看num是否重復。 while(s)//工號重復時,返回主菜單 { if(strcmp(s->data.num,new_num)==0) { printf("=====>提示:工號為'%s'的職工已經存在'!\n",new_num); flag=1; return; } s=s->next; }//while(s) p=(Node*)malloc(sizeof(Node)); if(!p) { printf("\nallocatememoryfailure");/*如沒有申請到,打印提示信息*/ return;/*返回主界面*/ } strcpy(p->data.num,new_num); printf("請你輸入姓名:"); scanf("%s",p->); getchar(); printf("請你輸入性別:"); scanf("%s",p->data.sex); getchar(); printf("請你輸入部門:"); scanf("%d",&p->data.bm); getchar(); printf("請你輸入職稱:"); scanf("%d",&p->data.zc); getchar(); printf("請你輸入工資:"); scanf("%d",&p->data.gz); getchar(); //信息輸入已經完成 p->next=NULL;/*表明這是鏈表的尾部結點*/ saveflag=1;/*在main()有對該全局變量的判斷,若為1,則進行存盤操作*/ /*將指針賦值給r,因為l中的頭節(jié)點的下一個節(jié)點才實際保存著學生的記錄*/ r=l->next; while(1) { if(strcmp(r->data.num,old_num)==0)/*在鏈表中插入一個節(jié)點*/ { p->next=r->next; r->next=p; break; } r=r->next; }// while(1),r作為查詢指針,依次從第一個節(jié)點找起,找到后跳出while(1)循環(huán) Disp(l); printf("\n\n"); //getchar();}voidTongji(Linkl)//統(tǒng)計{ Node*max,*min;/*用于指向工資最高的節(jié)點*/ 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é)點*/ if(!ll) { printf("\nallocatememoryfailure");/*如沒有申請到,打印提示信息*/ return;/*返回主界面*/ } ll->next=NULL; system("cls"); Disp(l);/*顯示排序前的所有職工記錄*/ p=l->next; while(p)/*p!=NULL*/ { s=(Node*)malloc(sizeof(Node));/*新建節(jié)點用于保存從原鏈表中取出的節(jié)點信息*/ if(!s)/*s==NULL*/ { printf("\nallocatememoryfailure");/*如沒有申請到,打印提示信息*/ return;/*返回主界面*/ } s->data=p->data;/*填數據域*/ s->next=NULL;/*指針域為空*/ rr=ll; /*rr鏈表于存儲插入單個節(jié)點后保持排序的鏈表,ll是這個鏈表的頭指針,每次從頭開始查找插入位置*/ while(rr->next!=NULL&&rr->next->data.gz>=p->data.gz) {rr=rr->next;}/*指針移至總分比p所指的節(jié)點的總分小的節(jié)點位置*/ if(rr->next==NULL)/*若新鏈表ll中的所有節(jié)點的總分值都比p->data.gz大時,就將p所指節(jié)點加入鏈表尾部*/ rr->next=s; else/*否則將該節(jié)點插入至第一個總分字段比它小的節(jié)點的前面*/ { s->next=rr->next; rr->next=s; } p=p->next;/*原鏈表中的指針下移一個節(jié)點*/ } l->next=ll->next;/*ll中存儲是的已排序的鏈表的頭指針*/ Disp(l); saveflag=1; printf("\n=====>sortcomplete!\n");}voidSave(Linkl){ FILE*fp; Node*p;//實現保存操作的臨時的結構體指針變量 intflag=1,count=0; fp=fopen("employee.txt","wb"); if(fp==NULL) { printf("\n=====>提示:重新打開文件時發(fā)生錯誤!\n"); return; } p=l->next;//p指向第一個記錄結點 while(p) { if(fwrite(p,sizeof(Node),1,fp)==1)//將第一個記錄結點值寫入文件 { p=p->next;//依次寫入第二個結點的值, count++;//文件的記錄數+1 } else { flag=0; break; } }//while(p) if(count>0) { printf("\n=====>提示:文件保存成功.(有%d條記錄已經保存.)\n",count); saveflag=0; } else { system("cls"); printf("保存文件失敗,'0'條記錄被保存!\n"); } fclose(fp);}//voidSave結束voidmain(){ Linklist;/*定義鏈表*///structnode*list; FILE*fp;/*文件指針*/ intchoose;/*保存選擇結果變量*/ charch;/*保存(y,Y,n,N)*/ intcount=0;/*保存文件中的記錄條數(或結點個數)*/ 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");/*如沒有申請到,打印提示信息*/ 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=====>提示:文件已經打開,正在導入記錄......\n"); while(!feof(fp))//沒有到文件尾時,循環(huán) { p=(structnode*)malloc(sizeof(structnode)); if(!p) { printf("memorymallocfailure!\n");/*沒有申請成功*/ exit(0);/*退出*/ } if(fread(p,sizeof(structnode),1,fp))/*讀文件的已有內容放入結點中*/ { p->next=NULL; r->next=p; r=p;/*將該結點掛入鏈表中,r指向最后的節(jié)點*/ count++; } }//while(!feof(fp)) fclose(fp);/*關閉文件*/ printf("\n=====>提示:記錄導入完畢,共導入%d條記錄.\n",count); while(1) { menu(); printf("\t\t====>請選擇:"); scanf("%d",&choose); if(choose==0) { if(saveflag==1) { getchar(); printf("\n=====>提示:資料已經改動,是否將改動保存到文件中(y/n)?\n"); scanf("%c",&ch); if(ch=='y'||ch=='Y') Save(list); }//if printf("\n=====>提示:你已經退出系統(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)計職工記錄*/ case7: Sort(list); break;/*排序職工記錄*/ case8: Save(list); break;/*保存職工記錄*/ case9: system("cls"); Disp(list); break;/*顯示職工記錄*/ default: Wrong(); getchar(); break; }//switch(choose) }//while(1)}//main()/**/數據結構課程設計學生信息管理系統(tǒng)C語言編寫僅供參考:#include<stdio.h>#include〈stdlib.h>#include<string.h>#include<conio.h>#defineLENsizeof(LNode)typedefstructLNode{//用于存放學生信息節(jié)點 intstuNumber;chartelenum[50];?intage;?charchass[50];?chardeptName[50]; /*charzhuanYe[50]; charadress[50];*/ charname[20]; structLNode*next;}LNode,*Link;//****************創(chuàng)建鏈表結點**************************************************************************?LinkcreateLink(LinkL) {//初始化定義函數,聲明變量 voidinserStu(LinkL,LinkElem);//定義插入函數 intcount(LinkL);inttemp;?temp=count(L);?printf("節(jié)點個數為%d:\n”,temp); Linkp;??intnum=1,stuNumber; chartelenum[50]; ?charname[20]; intage;/*chardeptName[50];?charadress[50];charzhuanYe[50];*/? charchass[50];?//開始輸出學生信息? while(1)? { ?printf(”請輸入學生的信息:學號,姓名,年齡,班級,院系,專業(yè),家庭住址,電話號碼\n");?printf("學號輸入負數結束!\n”); ?printf(”請輸入學號%d:",num);scanf("%10d”,&stuNumber); ?if(stuNumber<0){break;}printf("請輸入姓名%d:",num);?getchar(); ?gets(name); printf("請輸入年齡%d:",num);scanf("%d",&age); printf("請輸入班級%d:”,num); getchar(); gets(chass); printf(”請輸入電話號碼:",num); getchar(); gets(telenum);/*printf(”請輸入院系%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);//插入新結點 ? ?inserStu(L,p);num++;? ??} ?}??return(L);?}//******************打印頭結點為L的學生記錄********************************************************voidprintList(LinkL){ printf("\n*********************學號,姓名,年齡,班級,電話號碼**************************\n"); printf("\n學號姓名年齡專業(yè)班級電話號碼\n"); intn=1; Linkp=L; intcount(LinkL);inttemp; temp=count(L);//結點個數: if(temp==0)printf("系統(tǒng)中沒有元素\n”);//判斷學生管理系統(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*/);//首個字符打印不出來? ?p=p-〉next; ?n++;??} printf("\n***********************************************************************************\n");?return;}//********************************插入學生信息**************************************voidinserStu(LinkL,LinkElem){Linkprior(LinkL,Linkp); Linkp=L->next;//*******%%%%****?while(p?。絅ULL&&Elem->stuNumber>=p—>stuNumber) {? if(p-〉stuNumber==Elem->stuNumber) { ?printf("重復輸入學號,輸入失??!");return;? } ?p=p—>next; }//確定Elem的插入位置 if(p==NULL) { p=prior(L,p);Elem->next=NULL;p-〉next=Elem;//若為空表,插入到頭結點之后} else { ?p=prior(L,p);Elem->next=p—>next;p—>next=Elem;?}}//***********************找到當前地址元素的前一元素的地址*************************************************************************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按學號查詢學生信息***************************************************************************intsearchName(LinkL,charn[]){ intflag=0;//標志要查找的學生和學生記錄中的姓名是否匹配 Linkp=L—〉next;?intseat=1;if(L->next==NULL||L==NULL)printf("沒有學生信息\n");else { while(p!=NULL)? {? if(!strcmp(p->name,n))//比較要查找的姓名是否和當前學生信息所指的姓名匹配 ? {? flag=1;//輸入姓名匹配 ??printf("要查找的是第%d位學生\n",seat);? printf(”學號是:%d名字:%s年齡:%d班級:%s手機號:%s\n",p->stuNumber,p—〉name,p—〉age,p—>chass,p->telenum); ??} p=p—〉next;seat(yī)++;??} } returnflag;}//****************************************按學號查找學生信息*********************************************************************intsearchNum(LinkL,intn){?intflag=0;//標志要查找的學生和管理信息系統(tǒng)中的學號是否匹配?Linkp=L->next;?intseat=1; if(L->next==NULL)printf(”沒有學生信息\n”); else?{ ??while(p!=NULL)?? { ?if(p-〉stuNumber〈=n) ???{??? if(p—〉stuNumber==n)//比較要查找的學號是否和當前學生信息所指的學號匹配? ?{ ???flag=1;//輸入學號匹配????printf("要查找的是第%d位學生\n”,seat(yī)); ? ?printf("學號是:%d名字:%s年齡:%d班級:%s手機號:%s\n",p—>stuNumber,p->name,p->age,p-〉chass,p—〉telenum);? } ?? }??p=p-〉next;seat++;???}?}returnflag;}//*******************************從通訊錄中刪除第i個元素***************************************************************************voiddeleteElem(LinkL,inti){?Linkp=L; intj=0; while(p-〉next&&j〈i-1) { p=p-〉next;j++; }?if(!(p—>next))//判斷i時候合法,i不能大于元素的個數,也不能小于等于0 {??printf("第%d個學生刪除失敗\n”,i);?? return;?}?Linkq=p->next;?p->next=q—〉next; free(q);}//*******************按姓名刪除學生信息**********************************************************************************************intdeleName(LinkL,charn[]){voiddeteStu(Link);intflag=0;//判斷要刪除的學生與系統(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個學生的信息??} else? { p=p—>next;seat++;? } if(flag)printf("被刪除了\n”);?}}returnflag;}//*****************按學號刪除學生信息*****************************************************************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(”沒有找到學生信息\n"); ?} ?}?returnflag;}//*************************************************************************************voidsearchWay1(LinkL){voidsearchMenu(LinkL);intsearchWay=0;//控制跳出循環(huán),再次選擇查詢方式 ??if(searchWay==0)??? {??? printf(”請輸入要查詢的學生的學號:\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("請輸入要查詢的學生姓名\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輸入學生學號查詢學生信息\n”);printf(”***2輸入學生姓名查詢學生信息\n");printf("***3返回上級菜單\n");printf("**********************查詢菜單**************************************\n");printf(”請選擇1-3:");intmenu;?scanf("%d”,&menu);switch(menu) {?case1:{searchWay1(L);break;}case2:{searchWay2(L);break;}?case3:{? break;//跳回主菜單程序???}?}}//************************************更新學生信息模塊*****************************************voidalterStu(LinkL)//按學號更新學生信息{intn;printf("請輸入要修改的學生學號:"); scanf("%d”,&n); Linkp=L-〉next; if(p==NULL){printf("學生管理系統(tǒng)沒有學生信息!");} while(p?。剑蜺LL)//循環(huán)查找學生信息,如果找到該學號則進入循環(huán)體更改學生信息 {//**********************************************************************************************? if(p—〉stuNumber==n){?? ? intnum=1,stuNumber,age; ? ??chartelenum[50]; ?charname[20]; ??? ?charchass[50];printf(”***********************更改學生信息*****************************************\n");??? printf("請輸入學生的學號,姓名和電話號碼\n");printf(”請輸入學號%d:”,num);scanf(”%d",&stuNumber);printf("請輸入姓名%d:",num);getchar();gets(name); ? ?printf("請輸入年齡%d:",num);scanf("%d",&age); printf("請輸入班級%d:",num); ?getchar();?gets(chass);printf("請輸入電話號碼:",num);getchar();gets(telenum);p—〉age=age;p—>stuNumber=stuNumber;strcpy(p->telenum,telenum);strcpy(p—>name,name);???? strcpy(p—〉chass,chass); ?? //更新新結點 printf(”***********************更改學生信息完畢*****************************************\n”);//************************************************************************************************* ? }?p=p->next;}}//****************保存學生信息模塊***************************************************************************voidkeepStu(LinkL){??Linkp=L—>next;??FILE*fp; if((fp=fopen("student。txt”,”r”))==NULL)//打開文件,不存在此文件則新建?{ fp=fopen("E:\\測試\\student.txt",”w”); fclose(fp);?}?fp=fopen(”E:\\測試\\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)計結點個數模塊***********************************************************************************intcount(LinkL){ intn=0;?Linkp=L—〉next;?if(p==NULL){printf(”不存在學生信息\n");} while(p!=NULL)?{?p=p->next; ?n++; }returnn;}//********************************導入學生信息模塊**********************************************************************LinkstuEntry(){ FILE*fp;? Linkp,q,L; if((fp=fopen(”E:\\測試\\student。txt",”r”))==NULL)//打開文件,不存在此文件則新建 {?; }L=q=(Link)malloc(LEN);?printf("\n學號姓名手機號\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(”按任意鍵結束:”); getch();//返回returnL;}//********************添加學生信息**************************************************************************voidAddStu(LinkL){inttemp; temp=count(L); printf("節(jié)點個數為%d:\n",temp);? ???if(temp==0){createLink(L);}//如果沒有學生信息則調用初始化函數?createLink(L);}//****************刪除學生菜單****************************************************voiddeteStu(LinkL){intflag=0,way,n; ??printf("\n************************刪除菜單********************\n”); ??printf("\n選擇操作方式*************1:按學號********************\n"); ? printf("*************2:按姓名********************\n"); printf(”*************3:返回主菜單*********************\n”); ? ?printf("\n請輸入刪除方式:");??? ?scanf("%d",&way); ?? if(way〈1||way>3){deteStu(L);} ??switch(way) {? ??case1: { ? ? printf(”請輸入要刪除的學生學號:");scanf("%d",&n); ? ? flag=deleNum(L,n);break;?????? }? ??case2:{ ? ??charn[20]; printf(”請輸入要刪除的學生姓名:"); ???chartemp1=getchar();gets(n);? ?flag=deleName(L,n);break;??? ??}? ? case3:{break;}} ???if(flag) ? ? {?? ?printf("刪除成功!\n");deteStu(L);?? ? }}//**********************主菜單程序******************************************************************************intmainMenu(){printf(”\n****************************歡迎使用學生管理信息系統(tǒng)***********************************************\n");printf(”****1輸入學生信息*****\n");printf("****2顯示學生信息*****\n”);printf("****3查詢學生信息*****\n”);printf("****4更新學生信息*****\n");printf(”****5添加學生信息*****\n”);printf("****6刪除學生信息*****\n”);printf(”****7保存學生信息*****\n");printf("****8從文件導入學生信息*****\n");printf("****0退出管理信息系統(tǒng)*****\n");printf("****************************歡迎使用學生管理信息系統(tǒng)***********************************************");?intmenu=0; printf("請選擇0-8:”);?scanf(”%d",&menu);if(menu〈0&&menu〉8) {

溫馨提示

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

最新文檔

評論

0/150

提交評論