![教師信息管理系統(tǒng)報告_第1頁](http://file4.renrendoc.com/view12/M09/23/1D/wKhkGWXyQcqAeefVAAHpHmhZWj0877.jpg)
![教師信息管理系統(tǒng)報告_第2頁](http://file4.renrendoc.com/view12/M09/23/1D/wKhkGWXyQcqAeefVAAHpHmhZWj08772.jpg)
![教師信息管理系統(tǒng)報告_第3頁](http://file4.renrendoc.com/view12/M09/23/1D/wKhkGWXyQcqAeefVAAHpHmhZWj08773.jpg)
![教師信息管理系統(tǒng)報告_第4頁](http://file4.renrendoc.com/view12/M09/23/1D/wKhkGWXyQcqAeefVAAHpHmhZWj08774.jpg)
![教師信息管理系統(tǒng)報告_第5頁](http://file4.renrendoc.com/view12/M09/23/1D/wKhkGWXyQcqAeefVAAHpHmhZWj08775.jpg)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
目錄目錄 I一、選題背景 11.1主要問題及技術要求 11.2 根本思路 12.1函數(shù)設計思路及流程圖 22.1.1程序根本功能和流程 2主函數(shù)結構及流程 22.2局部主要函數(shù)的流程圖 32.3參數(shù)設置說明 5結構體變量 5整型變量n,m 5三、程序及功能說明 53.1數(shù)據(jù)結構的設計 53.2信息初始化及進入菜單模塊 53.3顯示教師信息模塊 73.4修改和查詢教師信息模塊 83.5添加教師信息模塊 103.6按職工號排序模塊 113.7刪除教師信息模塊 123.8退出管理系統(tǒng)模塊 123.9主函數(shù)模塊 13四、結果分析 144.1信息初始化及進入菜單模塊 14登錄界面 14選擇界面 154.2顯示教師信息模塊 164.3修改教師信息模塊 174.4添加教師信息模塊 184.5按職工號排序模塊 194.6查詢教師信息模塊 204.7刪除教師信息模塊 214.8保存并退出板塊 224.9退出板塊 22五、總結及心得體會 23參考文獻 26源程序 27一、選題背景1.1主要問題及技術要求學院教學信息是教學過程中重要的反應,對這些信息的的整理、分析,對教學質量的監(jiān)控、教學過程的管理有著重要的作用。信息技術的開展?jié)B透在生活的各個方面,教務管理系統(tǒng)的應用可以使教學管理更加方便、有效,我們小組應用C語言相關知識,編寫程序來實現(xiàn)教職工信息的管理。本課題主是要滿足管理系統(tǒng)對教職工根本信息的輸入、顯示、修改、添加、查詢、排序等技術要求。根本思路運用學習的C語言知識,特別是數(shù)組結構體和鏈表的綜合使用,用結構體存儲每個老師的根本信息,用鏈表將所有結構體連接起來,進而用鏈表對教師信息進行整體操作。以switch語句為主設計主函數(shù),進而調用顯示、修改、添加、查詢、排序等各個模塊的子函數(shù)來實現(xiàn)所需要的功能。
二、算法設計2.1函數(shù)設計思路及流程圖通過編譯一個C語言函數(shù),其中包括一個主函數(shù)和多個子函數(shù),主函數(shù)調用其余子函數(shù),實現(xiàn)對教職工信息數(shù)據(jù)的錄入、修改、排序、添加、查詢、刪除、保存成文件、并能從文件中讀出信息等功能。程序根本功能和流程學院教學信息管理系統(tǒng)學院教學信息管理系統(tǒng)教職工信息初始化顯示教師信息進入菜單界面修改教師信息添加教師信息按職工號排序查詢教師信息刪除教師信息保存文件并退出退出圖1程序功能示意圖主函數(shù)結構及流程MMain()Paw()Start()Creat()File_rea()Index()Printf()Update()DelComp()Select()Insert() File_wri()圖2主函數(shù)流程圖2.2局部主要函數(shù)的流程圖While(p0->next!=NULL)P1=p0->nextWhile(p1!=NULL)否p0->no>p1->no是交換*p0*p1及p0->next與p1->nextP1=p1->nextP0=p0->next圖3按工號排序N-S流程圖P=head是Head!=NULL否輸出信息P=p->nextWhile(p!=NULL)圖4輸出教師信息N-S流程圖輸入界面信息及提示輸入職工信息while(p1->num!=0)n=0,n++是n==1否p1=headp2->next=p1p2=p1開辟新空間輸入信息p2-next=NULL圖5輸入信息N-S流程圖輸入要查詢的工號輸入要查詢的工號 While(p!=0) if(no==p->no)是 否輸出教師信息并調出循環(huán)p=p->next圖6查詢教師信息N-S流程圖輸入要修改的教師的工號輸入要修改的教師的工號 while(p!=0) if(no==p->no)是 否輸入修改后的信息并跳出循環(huán)p=p->next圖7修改教師信息N-S流程圖2.3參數(shù)設置說明結構體變量 structteacher{longno;charname[10];charposition[10];charsex[5];floatscore;structteacher*next;};用結構體structteacher儲存教師根本面信息。其中no是教師工號,name是教師姓名,position是教師職稱,sex是性別,score是3門課程的綜合評分。整型變量n,m用n記錄鏈表中添加了多少條教師信息。m是菜單項選擇項,在主函數(shù)中通過對m值的判斷來確定調用哪一函數(shù)。三、程序及功能說明3.1數(shù)據(jù)結構的設計使用結構體用于儲存教師的根本信息,該結構體如下:structteacher/*定義結構體類型structteacher*/{longno;/*定義no為長整型*/charname[10];/*定義字符型數(shù)組name*/charposition[10];/*定義字符型數(shù)組position*/charsex;/*定義sex為字符型變量*/floatscore;/*定義score為浮點型變量*/structteacher*next;/*定義next為指向structteacher的指針*/};intn,m;/*定義n,m整型變量*/3.2信息初始化及進入菜單模塊此模塊是程序運行出現(xiàn)的第一個出現(xiàn)的界面,主要追求美觀。同時為保證系統(tǒng)保密性,此頁面還加上了輸入密碼的功能。通過比擬用戶輸入的字符串和系統(tǒng)設定的字符串,來確定該用戶是否有使用此系統(tǒng)的權利。voidpaw(){ intk; charmm[10]; system("cls"); printf("\n\n\n\n"); printf("\t"); for(k=0;k<15;k++) printf("★☆"); printf("★"); printf("\n"); for(k=0;k<2;k++) printf("\t☆\t\t\t\t\t\t\t☆\n"); printf("\t☆教師信息管理系統(tǒng)☆\n"); printf("\t☆\t\t\t\t\t\t\t☆\n"); printf("\t☆\t\t制作人:www\t\t\t☆\n"); printf("\t☆\t\t\twww\t\t\t☆\n"); printf("\t☆\t\t\twww\t\t\t☆\n"); for(k=0;k<2;k++) printf("\t☆\t\t\t\t\t\t\t☆\n",36,36); printf("\t"); for(k=0;k<15;k++) printf("★☆"); printf("★"); printf("\n\n\t登錄密碼:"); gets(mm); if(strcmp(mm,"信計111")!=0) { printf("您輸入的密碼有誤,請重新輸入\n"); system("pause"); paw(); }}/*******登陸初始界面********/voidstart(){ system("cls"); printf("\n\n\n\n\n"); printf("\t*****************************************************************\n\n"); printf("\t\t\t歡送使用教師管理系統(tǒng)\n\n"); printf("\t*****************************************************************\n\n"); printf("\t是否載入文件信息:\t\t\t"); printf("1、是\t2、否\n\n\n"); printf("\t請選擇菜單:"); scanf("%d",&m);}/**********菜單界面************/voidindex(){ system("cls"); printf("\n\n\n\n"); printf("\n"); printf("\t**********歡送使用教師管理系統(tǒng)***********\n\n"); printf("\t1、顯示教師信息2、修改教師信息3、添加教師信息\n\n"); printf("\t4、刪除教師信息5、教師信息排序6、查詢教師信息\n\n"); printf("\t7、保存并退出\t\t8、退出\n\n"); printf("\n\n"); printf("請選擇菜單:"); scanf("%d",&m);}3.3顯示教師信息模塊將系統(tǒng)中所有老師的信息逐條在表格中對應位置輸出。voidprint(structteacher*head)/*定義print函數(shù)*/{ system("cls");/*清屏函數(shù)*/ printf("\n\n\t**********歡送使用教師管理系統(tǒng)***********\n\n"); structteacher*p;/*定義p為指向structteacher類型的指針*/ printf("\t\t┏━━━┳━━━┳━━━┳━━━┳━━━┓\n"); printf("\t\t┃工號\t┃姓名\t┃性別\t┃年齡\t┃測評┃\n"); printf("\t\t┣━━━╋━━━╋━━━╋━━━╋━━━┫\n"); p=head;/*p指向第一個結點*/ if(head!=NULL)/*如果頭指針存放的不是空地址*/ do { printf("\t\t┃%-6ld┃%-6s┃%-6s┃%-6c┃%-6.2f┃\n",p->no,p->name,p->position,p->sex,p->score); printf("\t\t┣━━━╋━━━╋━━━╋━━━╋━━━┫\n"); p=p->next;/*指向下一個結點的指針賦給p*/ }while(p!=NULL);/*當p存放的不是空地址的時候執(zhí)行循環(huán)體*/ printf("\t\t┗━━━┻━━━┻━━━┻━━━┻━━━┛\n"); system("pause");/*按任意鍵繼續(xù)函數(shù)*/}3.4修改和查詢教師信息模塊修改和查詢這兩個函數(shù)在結構和邏輯上相似,兩個函數(shù)都是需要用戶輸入一個教師信息,系統(tǒng)根據(jù)這一工號在鏈表中逐條查找與之對應的教師信息。不同的是,修改函數(shù)在查到后會讓用戶輸入一條新信息,而查詢函數(shù)在查到信息后就直接打印到桌面上。修改函數(shù):structteacher*update(structteacher*head)/*定義update函數(shù),且函數(shù)類型為指向structteacher類型數(shù)據(jù)的指針*/{system("cls");/*清屏函數(shù)*/ longno;/*定義no為長整型變量*/ intk=0;/*定義k為整型變量并賦初值0*/ structteacher*p;/*定義p為指向structteacher類型的指針*/ printf("\n\n\t\t**********歡送使用教師管理系統(tǒng)***********\n\n");/*界面表頭*/ printf("\t\t請輸入要修改的教師的工號:");/*提示輸入要修改教師的工號*/ scanf("%ld",&no);/*按長整型格式輸入no的值*/ p=head;/*p指向頭結點*/ while(p!=NULL)/*當p指向的不是空地址時,執(zhí)行循環(huán)語句*/ { if(no==p->no)/*如果找到要修改的教師工號*/ { printf("\t\t\t請輸入要修改的信息\n");/*提示輸入要修改的信息*/ printf("\t\t工號\t姓名\t職稱\t性別\t測評\n"); printf("\t\t"); scanf("%ld%s%s%s%f",&p->no,p->name,p->position,&p->sex,&p->score);/*按格式輸入p所指向的結點的數(shù)據(jù)*/ k=1;/*將1賦給k*/ } p=p->next;/*p指向下一個結點*/ } if(k==0)/*如果k等于0,執(zhí)行下面語句*/ { printf("輸入的工號不存在,請重新輸入一個工號.");/*提示輸入的工號不存在重新輸入*/system("pause");/*按任意鍵繼續(xù)函數(shù)*/update(p);/*update的遞歸調用*/ } return(head);/*函數(shù)返回值為鏈表的頭指針*/}查詢函數(shù):voidselect(structteacher*head)/*定義dele函數(shù),類型為空*/{ system("cls");/*清屏函數(shù)*/ longno;/*定義no為長整型變量*/intk=0;/*定義k為整型變量并賦初值0*/ structteacher*p;/*定義p為指向structteacher類型數(shù)據(jù)的指針變量*/printf("\n\n\t\t**********歡送使用教師管理系統(tǒng)***********\n\n");/*輸出界面表頭*/ printf("\t\t請輸入要查詢的教師的工號:");*提示輸入要查詢的工號*/ scanf("%ld",&no);/*按長整型輸入no的值*/ p=head;/*p指向頭結點*/ while(p!=NULL)/*當p指向的不是空地址時,執(zhí)行循環(huán)語句*/ { if(no==p->no)/*如果找到要查詢的工號*/{ printf("\t\t工號\t姓名\t職稱\t性別\t測評\n"); printf("\t\t"); printf("%ld\t%s\t%s\t%s\t%6.2f\n",p->no,p->name,p->position,p->sex,p->score);/*按格式輸出p所指向的結點的數(shù)據(jù)*/ k=1;/*把1賦給k*/ } p=p->next;/*p指向下一個結點*/ }if(k==0)/*如果k等于0*/{printf("輸入的工號不存在,請重新輸入一個工號");/*提示輸入的工號不存在,請重新輸入*/system("pause");/*按任意鍵繼續(xù)函數(shù)*/select(p);/*select的遞歸調用*/}}3.5添加教師信息模塊這一模塊的功能就是把新輸入的信息鏈接到原鏈表。structteacher*insert(structteacher*head)/*定義insert函數(shù),且函數(shù)類型為指向structteacher類型數(shù)據(jù)的指針*/{ system("cls");/*清屏函數(shù)*/ printf("\n\n\t**********歡送使用教師管理系統(tǒng)***********\n\n");structteacher*p,*p0;/*定義p,p0為指向structteacher類型數(shù)據(jù)的指針*/printf("請輸入要添加的信息:");/*提示輸入要添加的信息*/ p=(structteacher*)malloc(LEN);/*開辟一個新結點并使p指向它*/scanf("%ld%s%s%c%f",&p->no,p->name,p->position,&p->sex,&p->score);/*按格式輸入p指向的結點的數(shù)據(jù)*/ while(p->no!=0)/*當p指向結點中no的值不等于0時,執(zhí)行下面語句*/ { if(head==NULL)/*如果原來的鏈表是空表*/ { head=p;p->next=NULL;/*使p指向的結點作為頭結點,其中next成員指向空地址*/ } else { p0=head;/*否那么p0指向頭結點*/ head=p;/*使p指向的結點作為新的頭結點*/ p->next=p0;/*p指向的結點的next元素指向p0,*/ } n=n+1;/*此時結點數(shù)〔即包含的職工個數(shù)〕比之前增加一個*/ printf("請輸入要添加的信息:");/*提示輸入要添加的信息*/ p=(structteacher*)malloc(LEN);/*開辟一個新結點并使p指向它*/ scanf("%ld%s%s%c%f",&p->no,p->name,p->position,&p->sex,&p->score);/*按格式輸入p指向的結點的數(shù)據(jù)*/ } return(head);/*函數(shù)返回值為鏈表的頭指針*/}3.6按職工號排序模塊這一函數(shù)采用的是選擇法排序,把工號較小的結點的教師信息換到前邊。為保證鏈表的結構不產生混亂,在交換的過程中要把用于連接鏈表的指針再交換回來。voidcomp(structteacher*p)/*定義comp函數(shù)*/{ system("cls");/*清屏函數(shù)*/ structteachert,*p2;/*定義t,p2為指向structteacher類型的指針*/ structteacher*p0,*p1;/*定義p0,p1為指向structteacher類型的指針*/ p0=p;/*p0指向p*/ while(p0->next!=NULL)/*當p0指向結點的next成員為NULL*/ { p1=p0->next;/*p0指向結點的next成員的地址賦給p1*/ while(p1!=NULL)/*當p1存放的不是空地址時執(zhí)行下面的循環(huán)體*/ {if(p0->no>p1->no)/*如果有p0指向結構體中no的值大于p1指向結構體中no的值*/ { t=*p1;/*p1存放的地址賦給t*/ *p1=*p0;/*p0存放的地址賦給p1*/ *p0=t;/*t中的地址賦給p0存放的內容,從而實現(xiàn)結點轉換*/ p2=p1->next;/*p1指向結點的next成員存放的地址賦給p2*/ p1->next=p0->next;/*p1指向結點的next成員指向p0指向結點的next成員*/ p0->next=p2;/*p0指向結點的next成員指向p2*/ } p1=(p1->next);/*p1指向下一個結點*/ } p0=p0->next;/*p0指向結點的next成員的地址賦給p0*/ } print(p);/*調用print函數(shù)*/3.7刪除教師信息模塊刪除教師信息首先要用戶輸入要刪除的教師的工號,系統(tǒng)根據(jù)工號在鏈表中找到該教師的信息,然后把這個結點的前一結點和后一結點連接起來,這樣就刪除想刪除的信息了。structteacher*del(structteacher*head)/*定義del函數(shù),函數(shù)類型為指向structteacher類型的指針*/{ system("cls");/*清屏函數(shù)*/ structteacher/*p1,*p2;/*定義p1,p2為指向structteacher類型的指針*/ longdel_no;/*定義del_no為長整型變量*/printf("\n\n\t**********歡送使用教師管理系統(tǒng)***********\n\n"); printf("要刪除的工號:");/*提示輸入要刪除的工號*/ scanf("%ld",&del_no);/*按長整型格式輸入del_no*/ while(del_no!=0)/*當del_no不等于0時執(zhí)行下面語句*/ { if(head==NULL){printf("\n無此信息\n");returnhead;}/*如果頭指針指向空地址那么輸出“無信息”,并且返回*/ p1=head;/*p1指向第一個結點*/ while(del_no!=p1->no&&p1->next!=NULL){p2=p1;p1=p1->next;}/*當p1指向的不是要找的結點,并且后面還有結點,那么讓p2指向p1指向的結點,然后p1后移一個結點*/ if(del_no==p1->no)/*如果找到要刪除的序號*/ { if(p1==head)head=p1->next;/*假設p1指向的是首結點,那么把第二個結點的地址賦給head*/elsep2->next=p1->next;/*否那么將下一結點地址賦給前一結點地址*/ n=n-1;/*此時結點數(shù)〔即包含的職工個數(shù)〕比之前減少一個*/ } elseprintf("\n沒找到此老師信息\n");/*否那么輸出沒有找到老師信息*/ printf("要刪除的工號:");/*提示輸入要刪除的工號*/ scanf("%ld",&del_no);/*按長整型輸入del_no的值*/ } return(head);/*函數(shù)返回值為鏈表的頭指針*/}3.8退出管理系統(tǒng)模塊退出系統(tǒng)時有兩種方式:一種是直接退出,一種是把教師信息保存成文件后再退出。structteacher*file_rea()/*定義file_wri函數(shù),類型為指向structteacher類型數(shù)據(jù)的指針*/{ FILE*fp;/*fp為指向FILE類型結構體變量的指針變量*/ structteacher*p0,*p,*head;/*定義p0,p,head為指向structteacher類型的指針*/ head=p=(structteacher*)malloc(LEN);/*head和p同時指向新開辟的結點*/ if((fp=fopen("teac.txt","r+"))==NULL)/*如果翻開的操作有錯*/ {printf("cannotopenfile\n");/*提示無法翻開文件*/ exit(0);}/*exit函數(shù)關閉所有文件中止正在運行的程序*/ while(p!=NULL)/*如果p不指向空地址,執(zhí)行下面循環(huán)體*/ { fread(p,sizeof(structteacher),1,fp);/*從fp所指向的文件讀入1個sizeof(structteacher)個字節(jié)的數(shù)據(jù),存儲到p中*/p0=p->next;/*p指向結點的next元素的地址賦給p0*/ //fscanf(fp,"%6Ld%6s%6s%6c%6.2f",&p->no,p->name,p->position,&p->sex,&p->score);/*將p指向的結點的數(shù)據(jù)按照格式輸出到fp所指向的文件*/ if(p0==NULL){p=NULL;}/*如果p0指向空地址也讓p指向空地址*/ else{p=p->next=(structteacher*)malloc(LEN);}/*否那么新建立一個結點讓p指向結點的next單元指向它,之后也讓p指向它*/ } fclose(fp);/*關閉該文件*/ return(head);/*函數(shù)返回值為鏈表的頭指針*/}3.9主函數(shù)模塊該模塊顯示的為程序的主函數(shù),通過switch語句實現(xiàn)各個子函數(shù)的運行,主函數(shù)的順序即為調用函數(shù)執(zhí)行的順序。voidmain()/*主函數(shù)為空*/{ structteacher*head;/*head為指向structteacher類型的指針*/ system("color2");/*系統(tǒng)函數(shù)調節(jié)顏色*/ start();/*函數(shù)調用*/ if(m==1){head=file_rea();}/*假設m的值為1,鏈表的頭指針存放file_rea()的地址*/ else{head=creat();}/*否那么鏈表的頭指針存放creat()的地址*/ loop:index();/執(zhí)行index函數(shù)*/ switch(m) { case1:print(head);gotoloop;/*switch語句,當m=1時,執(zhí)行print函數(shù)輸出老師信息,之后利用goto語句跳向loop*/case2:head=update(head);gotoloop;/*當m=2時,將update函數(shù)的返回值〔一個地址〕傳給給鏈表的頭指針head,之后利用goto語句跳向loop*/case3:head=insert(head);gotoloop;/*當m=3時,將insert函數(shù)的返回值〔一個地址〕傳給給鏈表的頭指針head,之后利用goto語句跳向loop*/case4:head=del(head);gotoloop;/*當m=4時,將del函數(shù)的返回值〔一個地址〕傳給給鏈表的頭指針head,之后利用goto語句跳向loop*/case5:comp(head);gotoloop;/*當m=5時,執(zhí)行comp函數(shù)對老師的職工號排序,之后利用goto語句跳向loop*/case6:dele(head);gotoloop;/*當m=6時,將dele函數(shù)之后利用goto語句跳向loop*/case7:file_wri(head);break;/*當m=7時,將update函數(shù)之后利用goto語句跳向loop*/case8:break;/*當m=8時,將update函數(shù)的返回值〔一個地址〕傳給給鏈表的頭指針head,之后利用goto語句跳向loop*/ default:printf("無此菜單");gotoloop;/*switch語句,當m=1時,執(zhí)行print函數(shù)輸出老師信息,之后利用goto語句跳向loop*/ }}四、結果分析4.1信息初始化及進入菜單模塊登錄界面首先顯示的是該系統(tǒng)名稱以及制作人,并且需要輸入密碼才可以進入教師信息管理系統(tǒng),密碼為:信計111,假設密碼錯誤,提示出錯后繼續(xù)輸入直到密碼正確后跳到下一界面。圖8選擇界面該界面是讓你選擇是從文件中讀取還是新建立信息,假設選擇1,結果如下:圖9之后輸入回車,自動跳轉到管理系統(tǒng)的功能頁面。假設選擇的是2,就需要你輸入老師的信息,姓名、職稱、性別均是漢字,工號以及測評應該輸入數(shù)字,輸入一個人的信息時,使用 Tab讓它跳到下一小條,直到五個信息輸完后按下回車即可輸入下一個人的信息。最后假設想讓它停止,需要輸入五個0〔注意0與0之間要有空格〕,具體如圖:圖10圖11如果信息輸入錯誤,可以先結束程序后選擇修改教師信息進行修改,修改流程見修改教師信息模塊。4.2顯示教師信息模塊首先我們來到到功能界面,上面提示輸入0結束操作,0的個數(shù)與對應的數(shù)據(jù)的個數(shù)相等。另外該界面一共顯示8項功能,假設顯示教師信息,輸入1后回車。圖12之后就跳轉到顯示教師信息界面,底下提示按任意鍵繼續(xù),隨便按一個鍵子便又返回功能界面。圖134.3修改教師信息模塊如果想修改教師信息,到功能界面輸入2后回車。圖14隨即來到該界面提示你輸入要修改的工號,之后再輸入要修改的信息后回車。圖15此時又返回功能界面,選擇顯示教師信息,你會發(fā)現(xiàn)工號為4的教師信息已經(jīng)成功被更改。圖16如果你輸入一個工號不存在〔之前職工我們就創(chuàng)立到4〕,系統(tǒng)會提示你說工號不存在,請重新輸入一個工號。圖174.4添加教師信息模塊假設想添加教師信息,到功能界面輸入3后回車。圖18提示輸入要添加的信息,輸入5個0結束。圖19然后跳轉到功能界面,選擇顯示教師信息便會發(fā)現(xiàn)工號為5的老師已經(jīng)成功被添加過來。圖204.5按職工號排序模塊我們發(fā)現(xiàn)之前的教師信息的工號都是雜亂無章的,我們想要進行按照職工號進行排序,即在功能界面輸入5后回車。圖21此時跳轉到排序界面,我們發(fā)現(xiàn)是按照工號由小到大排列。圖224.6查詢教師信息模塊假設想查詢教師信息,在功能界面輸入6后回車。圖23然后跳轉到查詢界面,輸入想要查詢的職工號后回車,即可看到對應教師的信息。圖23如果你查詢的教師工號不存在,系統(tǒng)將提示說該工號不存在,請重新輸入。圖244.7刪除教師信息模塊如果想要刪除教師的信息,在功能界面輸入4后回車。圖25然后跳轉到刪除教師信息界面,輸入你想要刪除的教師工號后回車,然后輸入0后回車即結束該操作。圖26回到功能界面后選擇顯示教師信息,發(fā)現(xiàn)職工號為5的教師信息已被完全刪除。圖27如果輸入的職工號不存在,那么系統(tǒng)會提示沒找到此老師信息,然后繼續(xù)提醒你輸入要刪除的工號,直到輸入0后回車該操作結束。圖284.8保存并退出板塊如果你想退出并想保存數(shù)據(jù)到文件中,在功能界面中選擇7后按回車,之后會提醒輸入保存文件名稱,該文件與該程序保存在一個目錄下。圖29之后你會在保存該程序的目錄下找到它,它的右面是頭文件。圖304.9退出板塊如果你想退出并不想進行保存,直接在功能界面輸入8后回車,然后按任意鍵即可退出。五、總結及心得體會通過以上程序的設計,我們對C語言有了更深刻的認識,好多專業(yè)的學生說學了C語言就像沒學一樣,因為不知道它有什么用,我們之前也覺得用C語言編一個系統(tǒng)不大可能,不過經(jīng)過一段時間的設計與探討,我們驚奇的發(fā)現(xiàn)C語言居然這么神奇!在這期間,我們碰到很多問題也有很多體會,下面是我們對這次課內試驗設計的總結:1.我們學會了使用VisualC++6.0。由于這次的課程設計的程序比擬龐大,TurboC不能實現(xiàn),所以使用了VisualC++6.0,這個與TurboC挺相似的,但是感覺比TurboC更實用。因為TurboC無法輸出中文,但是VisualC++6.0就可以,而且出錯的時候告訴的更具體。2.我們在設計界面的時候,為了讓界面更好看,我們采用了一些符號,我們按照書面的ASCII代碼對照表輸出代碼,但是用VisualC++6.0輸出的大局部與書上不同,后來我們選擇的是036,這個與書后吻合,〔是美金符號〕這更讓我們體會到VisualC++6.0與TurboC的差異性。最后為了更加美觀,我們用軟鍵盤輸出黑白相間的星型符號。另外這次課設讓我們深刻體會到鏈表的重要性,根本每個函數(shù)都會用到,通過鏈表,我們可以查詢教師信息,修改教師信息,刪除教師信息,添加教師信息,給教師按照職工號進行排序,保存教師信息等等,這里雖然剛開始弄的時候有點困難,但是看過幾次書后感覺對鏈表的理解更加深入了。3.在創(chuàng)立新結點的時候,用到malloc〔LEN〕,malloc帶回的是不指向任何類型數(shù)據(jù)的指針,而p是指向structteacher類型的指針變量,必須用強制類型轉換,即在malloc〔LEN〕之前加〔structteacher*〕,另外“*”號不能省略,否那么就轉換成structteacher類型了,而不是指針類型了。4.做查詢教師信息功能時,我少在后面加了一個system("pause"),結果當我輸入一個職工號時,屏幕有數(shù)據(jù)要出來一閃就沒有了,后來我知道因為我前面放了一個清屏函數(shù),如果不加system("pause"),他就會把你的數(shù)據(jù)清空,所以輸完后屏幕上什么也沒有。本程序有些函數(shù)需要輸入五個0結束,但要注意0與0之間一定要有空格,否那么系統(tǒng)會認為是一個數(shù)據(jù)而不識別。5.使用visualC++6.0時,如果你的程序翻開后再對你的程序進行編譯,就不能進行。6.剛開始讀文件的時候總會出現(xiàn)亂碼的情況,原因是信息循環(huán)從文件中讀出,形成鏈表,每次循環(huán)后鏈表節(jié)點比數(shù)都會讀出的信息多一個,所以在讀完信息后會多讀出一段亂碼。7.這個程序中會用到一些書上沒有的函數(shù),比方清屏函數(shù)system("cls");以及提示按任意鍵繼續(xù)的函數(shù)system("pause")。8.制作表格的時候,我們利用的是搜狗輸入法里的軟鍵盤輸入特殊符號“┏”,不過我們的表格還有一點缺陷,就是每一次表格的最后都會多出一小行,這次時間有點緊急,就沒有更正,但一定會找到更好的方法的。圖319.我們在調試的過程中,不斷的發(fā)現(xiàn)問題,比方:1〕在查詢函數(shù)中,按工號查詢的時候,如果工號不存在,它會直接彈回功能界面,但是這對于第一次操作該系統(tǒng)的人來說有點突兀,讓他們不知道到底發(fā)生什么,容易造成誤會。所以我們在函數(shù)中又定義了一個整型變量k,剛開始給它賦初值為0,如果該工號存在,執(zhí)行循環(huán)體,在此過程中讓k變?yōu)?,執(zhí)行完循環(huán)體后判斷k的值,如k的值等于0,說明沒有執(zhí)行循環(huán)體,即該工號不存在,然后提示輸出錯誤。2〕添加教師信息模塊的時候,我們發(fā)現(xiàn)雖然剛開始的界面告訴輸入0結束操作,但是為了更人性化,我們在分界面也提示輸入5個0結束操作。圖3210.這個程序必須用到文件方面的知識,注意有翻開文件就一定有關閉文件,并且要熟練的使用fprintf,fscanf,fwrite,fread函數(shù)。心得:通過這些天的課程設計,讓我們深刻體會到C語言功能的多樣性,最開始大家思路不是很清晰,而且對很多地方都說不準,但是通過大家反復對書本的斟酌,我們發(fā)現(xiàn)書中很多以前沒有注意到的知識點,并且有些時候還要去參考其他書籍,著就相當于變相的領我們復習了一遍C語言吧!另外,此次課設,讓我們體會到團隊合作的重要性,每個人的力量都是有限的,就算再厲害的人也會有考慮不周的地方,但是大家在一起就會有很多新奇的點子,我們必須取長補短,共同配合。只有大家分工明確,效率才會高,做出來的程序才會好用!此外,這次課設讓我們更加成熟,剛開始看到這道題的時候,我真是心里很亂,感覺也太難了,不過什么都是萬事開頭難,只要你咬著牙挺過來,一切都會豁然開朗。我自己編的程序剛開始總有錯誤,隊友就會幫助糾錯,也讓我越來越有頭緒,最后經(jīng)過大家的商討,我們的思路也越來越明確,然后我們也按照個人能力分配了任務,這樣我們越做越順,雖然仍會有錯,但是心里更加自信,所以我們都變得更加成熟穩(wěn)重??傊?,這是我們人生第一次做的課設,它帶給我們的好處自然不必多言,它對我們的人生也是意義非凡,它教會得不僅僅是怎么做程序,更是做事的方法以及合作的精神,這對我們之后的人生長路一定會有著深遠的影響!參考文獻[1]譚浩強.C語言程序設計教程.北京:高等教育出版社,2007.[2]曹哲主編.C語言實驗與課程設計指導.北京:機械工業(yè)出版社,2010.[3]陳剛主編.C語言程序設計.北京:清華大學出版社,2010.源程序#include<stdio.h>#include<malloc.h>#include<string.h>#include<stdlib.h>#defineNULL0#defineLENsizeof(structteacher)structteacher{longno;charname[10];charposition[10];charsex[5];floatscore;structteacher*next;};intn,m;voidpaw(){ intk; charmm[10]; system("cls"); printf("\n\n\n\n"); printf("\t"); for(k=0;k<15;k++) printf("★☆"); printf("★"); printf("\n"); for(k=0;k<2;k++) printf("\t☆\t\t\t\t\t\t\t☆\n"); printf("\t☆教師信息管理系統(tǒng)☆\n"); printf("\t☆\t\t\t\t\t\t\t☆\n"); printf("\t☆\t\t制作人:王慶彬\t\t\t☆\n"); printf("\t☆\t\t\t王振宇\t\t\t☆\n"); printf("\t☆\t\t\t王震\t\t\t☆\n"); for(k=0;k<2;k++) printf("\t☆\t\t\t\t\t\t\t☆\n",36,36); printf("\t"); for(k=0;k<15;k++) printf("★☆"); printf("★"); printf("\n\n\t請輸入登陸密碼:"); gets(mm); if(strcmp(mm,"信計111")!=0) { printf("您輸入的密碼有誤,請重新輸入\n"); system("pause"); paw(); }}/*******登陸初始界面********/voidstart(){ system("cls"); printf("\n\n\n\n\n"); printf("\t*****************************************************************\n\n"); printf("\t\t\t歡送使用教師管理系統(tǒng)\n\n"); printf("\t*****************************************************************\n\n"); printf("\t是否載入文件信息:\t\t\t"); printf("1、是\t2、否\n\n\n"); printf("\t請選擇菜單:"); scanf("%d",&m);}/**********菜單界面************/voidindex(){ system("cls"); printf("\n\n\n\n"); printf("\n"); printf("\t**********歡送使用教師管理系統(tǒng)***********\n\n"); printf("\t1、顯示教師信息2、修改教師信息3、添加教師信息\n\n"); printf("\t4、刪除教師信息5、教師信息排序6、查詢教師信息\n\n"); printf("\t7、保存并退出\t\t8、退出\n\n"); printf("\n\n"); printf("請選擇菜單:"); scanf("%d",&m);}/******創(chuàng)立動態(tài)鏈表*******/structteacher*creat(void){ system("cls"); structteacher*head; structteacher*p1,*p2; printf("\n\n\t\t**********歡送使用教師管理系統(tǒng)***********\n\n"); n=1; p1=p2=(structteacher*)malloc(LEN); printf("\t\t工號\t姓名\t職稱\t性別\t3門課程綜合測評\n"); printf("\t\t"); scanf("%ld%s%s%s%f",&p1->no,&p1->name,&p1->position,&p1->sex,&p1->score); head=NULL; while(p1->no!=0) { n=n+1; if(n==2)head=p1; elsep2->next=p1; p2=p1; p1=(structteacher*)malloc(LEN); printf("\t\t"); scanf("%ld%s%s%s%f",&p1->no,&p1->name,&p1->position,&p1->sex,&p1->score); } p2->next=NULL; return(head);}/*******輸出教師信息*******/voidprint(structteacher*head){ system("cls"); printf("\n\n\t**********歡送使用教師管理系統(tǒng)***********\n\n"); structteacher*p; printf("\t\t┏━━━┳━━━┳━━━┳━━━┳━━━┓\n"); printf("\t\t┃工號\t┃姓名\t┃職稱\t┃性別\t┃測評┃\n"); printf("\t\t┣━━━╋━━━╋━━━╋━━━╋━━━┫\n"); p=head; if(head!=NULL) do { printf("\t\t┃%-6ld┃%-6s┃%-6s┃%-6s┃%-6.2f┃\n",p->no,p->name,p->position,p->sex,p->score); printf("\t\t┣━━━╋━━━╋━━━╋━━━╋━━━┫\n"); p=p->next; }while(p!=NULL); printf("\t\t┗━━━┻━━━┻━━━┻━━━┻━━━┛\n"); system("pause");}/*******按工號排序******/voidcomp(structteacher*p){ system("cls"); structteachert,*p2; structteacher*p0,*p1; p0=p; while(p0->next!=NULL) { p1=p0->next; while(p1!=NULL) { if(p0->no>p1->no) { t=*p1; *p1=*p0; *p0=t; p2=p1->next; p1->next=p0->next; p0->next=p2; } p1=(p1->next); } p0=p0->next; } print(p);}/******刪除教師信息*****/structteacher*del(structteacher*head){ system("cls"); structteacher*p1,*p2; longdel_no; printf("\n\n\t\t**********歡送使用教師管理系統(tǒng)***********\n\n"); printf("\t\t\t提示:輸入0結束當前操作\n\n"); printf("\t\t要刪除的工號:"); scanf("%ld",&del_no); while(del_no!=0) { if(head==NULL){printf("\n無此信息\n");returnhead;} p1=head; while(del_no!=p1->no&&p1->next!=NULL){p2=p1;p1=p1->next;} if(del_no==p1->no) { if(p1==head)head=p1->next; elsep2->next=p1->next; n=n-1; } elseprintf("\n沒找到此老師信息\n"); printf("\t\t要刪除的工號:"); scanf("%ld",&del_no); } return(head);}/******添加教師信息*****/structteacher*insert(structteacher*head){ system("cls"); printf("\n\n\t\t**********歡送使用教師管理系統(tǒng)***********\n\n"); structteacher*p,*p0; printf("\t\t\t提示:輸入5個0結束當前操作\n\n"); printf("\t\t\t請輸入要添加的信息\n\n"); printf("\t\t工號\t姓名\t職稱\t性別\t測評\n"); p=(structteacher*)malloc(LEN); printf("\t\t"); scanf("%ld%s%s%s%f",&p->no,p->name,p->position,&p->sex,&p->score); while(p->no!=0) { if(head==NULL) { head=p;p->next=NULL; } else { p0=head; head=p; p->next=p0; } n=n+1; p=(structteacher*)malloc(LEN); printf("\t\t"); scanf("%ld%s%s%s%f",&p->no,p->name,p->position,&p->sex,&p->score); } return(head);}/*******修改教師信息********/structteacher*update(structteacher*head){ system("cls"); longno; intk=0; structteacher*p; printf("\n\n\t\t**********歡送使用教師管理系統(tǒng)***********\n\n"); printf("\t\t請輸入要修改的教師的工號:"); scanf("%ld",&no); p=head; while(p!=NULL) { if(no==p->no) { printf("\t\t\t請輸入要修改的信息\n"); printf("\t\t工號\t姓名\t職稱\t性別\t測評\n"); printf("\t\t"); scanf("%ld%s%s%s%f",&p->no,p->name,p->position,&p->sex,&p->score); k=1; } p=p->next; } if(k==0) { printf("輸入的工號不存在,請重新輸入一個工號."); system("pause"); update(head); } return(head);}/******查詢教師信息******/voidselect(structteacher*head){ system("cls"); longno; intk=0; structteacher*p; printf("\n\n\t\t**********歡送使用教師管理系統(tǒng)***********\n\n"); printf("\t\t請輸入要查詢的教師的工號:"); scanf("%ld",&no); p=head; while(p!=NULL) { if(no==p->no){ printf("\t\t工號\t姓名\t職稱\t性別\t測評\n"); printf("\t\t"); printf("%ld\t%s\t%s\t%s\t%6.2f\n",p->no,p->name,p->position,p->sex,p->score); k=1; } p=p->next; } if(k==0) { printf("輸入的工號不存在,請重新輸入一個工號"); system("pause"); select(head); }}/******保存到文件********/voidfile_wri(structteacher*p){ charfile[20]; printf("請輸入保存文件名稱:"); scanf("%s",file); FILE*fp; if((fp=fopen(file,"w+"))==NULL) {printf("cannotopenfile\n"); exit(0);} while(p!=NULL) { fwrite(p,sizeof(structteacher),1,fp); p=p->next; } fclose(fp);}/********從文件中讀出數(shù)據(jù)**********/structteacher*file_rea(){ charfile[20]; printf("請輸入載入文件的名稱:"); scanf("%s",file); FILE*fp; structteacher*p0,*p,*head; head=p=(structteacher*)malloc(LEN); if((fp=fopen(file,"r+"))==NULL) {printf("cannotopenfile\n"); exit(0);} while(p!=NULL) { fread(p,sizeof(structteacher),1,fp); p0=p->next; if(p0==NULL){p=NULL;} else{p=p->next=(structteacher*)malloc(LEN);} } fclose(fp); return(head);}voidmain(){ structteacher*head; system("color2"); paw(); start(); if(m==1){head=file_rea();} else{head=creat();} loop:index(); switch(m) { case1:print(head);gotoloop; case2:head=update(head);gotoloop; case3:head=insert(head);gotoloop; case4:head=del(head);gotoloop; case5:comp(head);gotoloop; case6:select(head);gotoloop; case7:file_wri(head);break; case8:break; default:printf("無此菜單");gotoloop; }}源程序加注釋#include<stdio.h>#include<malloc.h>#include<stdlib.h>#defineNULL0#defineLENsizeof(structteacher)structteacher/*定義結構體類型structteacher*/{longno;/*定義no為長整型*/charname[10];/*定義字符型數(shù)組name*/charposition[10];/*定義字符型數(shù)組position*/charsex;/*定義sex為字符型變量*/floatscore;/*定義score為浮點型變量*/structteacher*next;/*定義next為指向structteacher的指針*/};intn,m;/*定義n,m整型變量*/voidpaw(){ intk; charmm[10]; system("cls"); printf("\n\n\n\n"); printf("\t"); for(k=0;k<15;k++) printf("★☆"); printf("★"); printf("\n"); for(k=0;k<2;k++) printf("\t☆\t\t\t\t\t\t\t☆\n"); printf("\t☆教師信息管理系統(tǒng)☆\n"); printf("\t☆\t\t\t\t\t\t\t☆\n"); printf("\t☆\t\t制作人:www\t\t\t☆\n"); printf("\t☆\t\t\twww\t\t\t☆\n"); printf("\t☆\t\t\twww\t\t\t☆\n"); for(k=0;k<2;k++) printf("\t☆\t\t\t\t\t\t\t☆\n"); printf("\t"); for(k=0;k<15;k++) printf("★☆"); printf("★"); printf("\n\n\t請輸入登陸密碼:"); gets(mm); if(strcmp(mm,"信計111")!=0) /*驗證密碼*/ { printf("您輸入的密碼有誤,請重新輸入\n"); system("pause"); paw(); }}/*******登陸初始界面********/voidstart()/*定義start函數(shù)*/{ printf("\n\n\n\n\n"); printf("\t*****************************************************************\n\n"); printf("\t\t\t歡送使用教師管理系統(tǒng)\n\n"); printf("\t*****************************************************************\n\n"); printf("\t是否載入文件信息:\t\t\t"); printf("1、是\t2、否\n\n\n");
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 深化行業(yè)企業(yè)與產業(yè)園區(qū)合作的高效人才培養(yǎng)路徑
- 工業(yè)企業(yè)成本會計核算與管理的思考的開題報告
- 個人財務顧問合同范例
- 中空設備轉讓合同范本
- 2025年度教師國際交流項目與合同履行協(xié)議
- led燈供貨合同范本
- 2025年度建筑施工安全生產技術改造合同
- 個人房屋預售合同范本
- 在建房屋抵押擔保借款合同范本
- 個人制作肥料合同范例
- 新部編版小學六年級下冊語文第二單元測試卷及答案
- 5《這些事我來做》(說課稿)-部編版道德與法治四年級上冊
- 2025年福建福州市倉山區(qū)國有投資發(fā)展集團有限公司招聘筆試參考題庫附帶答案詳解
- 2025年人教版新教材數(shù)學一年級下冊教學計劃(含進度表)
- GB/T 45107-2024表土剝離及其再利用技術要求
- 2025長江航道工程局招聘101人歷年高頻重點提升(共500題)附帶答案詳解
- 2025年國新國際投資有限公司招聘筆試參考題庫含答案解析
- 2025年八省聯(lián)考四川高考生物試卷真題答案詳解(精校打印)
- 《供電營業(yè)規(guī)則》
- 企業(yè)員工退休管理規(guī)章制度(3篇)
- 五年級上冊脫式計算100題及答案
評論
0/150
提交評論