C語(yǔ)言程序設(shè)計(jì) 教案 第10章 學(xué)生信息管理系統(tǒng)_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì) 教案 第10章 學(xué)生信息管理系統(tǒng)_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì) 教案 第10章 學(xué)生信息管理系統(tǒng)_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì) 教案 第10章 學(xué)生信息管理系統(tǒng)_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì) 教案 第10章 學(xué)生信息管理系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C語(yǔ)言程序設(shè)計(jì)教案第10章學(xué)生信息管理系統(tǒng)授課內(nèi)容第10章學(xué)生信息管理系統(tǒng)任課教師授課形式理實(shí)一體任課班級(jí)教學(xué)方法本節(jié)采用以學(xué)生為主導(dǎo),在教學(xué)過(guò)程中同時(shí)采用提問(wèn)法、討論法和互動(dòng)式教學(xué)方法。教學(xué)重點(diǎn)(1)掌握菜單的制作。(2)掌握函數(shù)的定義與調(diào)用。(3)掌握指針的使用。(4)掌握結(jié)構(gòu)體的定義。(5)掌握文件的操作。教學(xué)難點(diǎn)C語(yǔ)言程序的綜合應(yīng)用教學(xué)目標(biāo)教學(xué)目標(biāo)通過(guò)學(xué)生信息管理系統(tǒng)的開(kāi)發(fā),展示C語(yǔ)言的特色及功能,熟悉結(jié)構(gòu)化程序設(shè)計(jì)的過(guò)程,理解結(jié)構(gòu)化程序設(shè)計(jì)的思想,進(jìn)一步掌握C語(yǔ)言中各種語(yǔ)句的使用,加深對(duì)C語(yǔ)言語(yǔ)法的理解,把所學(xué)的知識(shí)綜合運(yùn)用,提高學(xué)生綜合編程、測(cè)試能力。技能目標(biāo)(1)了解模塊化程序設(shè)計(jì)思想。(2)掌握菜單的。(3)掌握函數(shù)的定義與調(diào)用。(4)掌握結(jié)構(gòu)體的定義。(5)掌握文件的操作。(6)掌握使用C語(yǔ)言編寫(xiě)大型程序的方法。素質(zhì)目標(biāo)(1)通過(guò)模塊化方式實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),培養(yǎng)同學(xué)們團(tuán)隊(duì)協(xié)作和愛(ài)崗敬業(yè)精神。(2)通過(guò)綜合實(shí)例的實(shí)現(xiàn),提高同學(xué)們運(yùn)用所學(xué)知識(shí)解決實(shí)際問(wèn)題的能力。思政目標(biāo)教學(xué)步驟及內(nèi)容教學(xué)步驟及內(nèi)容教學(xué)步驟及內(nèi)容教學(xué)步驟及內(nèi)容教學(xué)步驟及內(nèi)容教學(xué)步驟及內(nèi)容教學(xué)步驟及內(nèi)容教學(xué)步驟及內(nèi)容:教學(xué)過(guò)程:復(fù)習(xí)舊課導(dǎo)出新課講授新課10.1系統(tǒng)功能設(shè)計(jì)可將系統(tǒng)分為8大功能模塊,主要包括輸入記錄模塊、查詢記錄模塊、刪除記錄模塊、修改記錄模塊、插入記錄模塊、記錄排序模塊、統(tǒng)計(jì)個(gè)數(shù)模塊、顯示記錄模塊等。學(xué)生信息管理系統(tǒng)在預(yù)處理模塊中,將在整個(gè)系統(tǒng)程序中常用到的結(jié)構(gòu)體類型的長(zhǎng)度,以及輸入輸出的格式說(shuō)明進(jìn)行了宏定義。由于在學(xué)生信息的結(jié)構(gòu)體中成員太多,對(duì)所有的成員進(jìn)行應(yīng)用時(shí),代碼太過(guò)于冗長(zhǎng)、輸入容易出錯(cuò),所以在預(yù)處理模塊中農(nóng)將其宏定義為DATA。預(yù)處理模塊還對(duì)系統(tǒng)中的各個(gè)功能模塊的函數(shù)做了聲明。/******************預(yù)處理模塊和結(jié)構(gòu)體******************/#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<dos.h>#include<string.h>#defineLENsizeof(structstudent)#defineFORMAT"%-8d%-12s%-8.1f%-8.1f%-8.1f%-8.1f\n"#defineDATAstu[i].num,stu[i].name,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sum/******************定義學(xué)生成績(jī)結(jié)構(gòu)體******************/structstudent { intnum; /*學(xué)號(hào)*/ charname[15]; /*姓名*/ floatchinese; /*語(yǔ)文課*/ floatmath; /*數(shù)學(xué)課*/ floatenglish; /*英語(yǔ)課*/ floatsum; /*總分*/};structstudentstu[50]; /*定義全局結(jié)構(gòu)體數(shù)組*//******************函數(shù)聲明與簡(jiǎn)介******************/voidinput(); /*錄入學(xué)生成績(jī)信息*/voidshow(); /*顯示學(xué)生基本信息*/voidorder(); /*按總分排序*/voiddel(); /*刪除學(xué)生成績(jī)信息*/voidmodify(); /*修改學(xué)生成績(jī)信息*/voidmenu(); /*程序主菜單*/voidinsert(); /*插入學(xué)生信息*/voidtotal(); /*計(jì)算總?cè)藬?shù)*/voidsearch(); /*查找學(xué)生信息*/10.3函數(shù)設(shè)計(jì)10.3.1main()函數(shù)模塊運(yùn)行學(xué)生信息管理系統(tǒng),第一步會(huì)看到一個(gè)主功能菜單以供用戶選擇,在菜單中列出本系統(tǒng)的所有功能,以及如何調(diào)用相應(yīng)功能的方法。/******************main()函數(shù)******************/intmain(){ intn; menu(); scanf("%d",&n); /*輸入選擇功能的編號(hào)*/ while(n) { switch(n) { case0:exit(0); /*退出功能*/ case1:input();break; /*錄入記錄功能函數(shù)調(diào)用*/ case2:search();break; /*查找記錄功能函數(shù)調(diào)用*/ case3:del();break; /*刪除記錄功能函數(shù)調(diào)用*/ case4:modify();break; /*修改記錄功能函數(shù)調(diào)用*/ case5:insert();break; /*插入記錄功能函數(shù)調(diào)用*/ case6:order();break; /*記錄排序功能函數(shù)調(diào)用*/ case7:total();break; /*人數(shù)統(tǒng)計(jì)功能函數(shù)調(diào)用*/ case8:show();break; /*所有記錄顯示功能函數(shù)調(diào)用*/ default:printf("輸入有誤,請(qǐng)重新輸入:");break; } getch(); menu(); /*菜單界面循環(huán)顯示*/ scanf("%d",&n); } return0;}/******************自定義函數(shù)實(shí)現(xiàn)菜單功能******************/voidmenu(){ system("cls"); printf("\n\n"); printf("\t|-------學(xué)生信息管理系統(tǒng)--------|\n"); printf("\t|\t0.退出系統(tǒng)\t\t|\n"); printf("\t|\t1.輸入記錄\t\t|\n"); printf("\t|\t2.查找記錄\t\t|\n"); printf("\t|\t3.刪除記錄\t\t|\n"); printf("\t|\t4.修改記錄\t\t|\n"); printf("\t|\t5.插入記錄\t\t|\n"); printf("\t|\t6.記錄排序\t\t|\n"); printf("\t|\t7.記錄個(gè)數(shù)\t\t|\n"); printf("\t|\t8.顯示記錄\t\t|\n"); printf("\t|-------------------------------|\n"); printf("\t\t請(qǐng)輸入您的操作(0-8):");}10.3.2錄入記錄模塊在學(xué)生信息管理系統(tǒng)中錄入學(xué)生信息模塊主要用于根據(jù)提示信息將學(xué)生學(xué)號(hào)、姓名、語(yǔ)文、數(shù)學(xué)、英語(yǔ)成績(jī)依次輸入,錄入結(jié)束后系統(tǒng)會(huì)自動(dòng)將學(xué)生信息保存到磁盤(pán)文件中,并計(jì)算出學(xué)生的總分。程序應(yīng)具備學(xué)生學(xué)號(hào)的唯一化處理功能。在錄入新記錄之前,先顯示當(dāng)前文件中已經(jīng)存在的所有記錄,這里調(diào)用show()函數(shù)。當(dāng)用戶在功能選擇界面中按照提示輸入“1”,即可進(jìn)入錄入學(xué)生信息狀態(tài)。調(diào)用錄入記錄input()函數(shù),當(dāng)磁盤(pán)文件有存儲(chǔ)記錄時(shí),可向文件中追加新的學(xué)生成績(jī)信息。/******************錄入學(xué)生信息******************/voidinput(){ inti,m=0; /*變量m表示記錄的條數(shù)*/ charch[2]; FILE*fp; /*定義文件指針*/ if((fp=fopen("stuData.txt","a+"))==NULL) /*打開(kāi)指定文件*/ { printf("打開(kāi)文件失敗\n"); return; } while(!feof(fp)) { if(fread(&stu[m],LEN,1,fp)==1) m++; /*統(tǒng)計(jì)當(dāng)前記錄條數(shù)*/ } fclose(fp); if(m==0) printf("沒(méi)有數(shù)據(jù)!\n"); else { system("cls"); show(); /*調(diào)用show()函數(shù),顯示原有信息*/ } if((fp=fopen("stuData.txt","wb"))==NULL) { printf("打開(kāi)文件失敗\n"); return; } for(i=0;i<m;i++) { fwrite(&stu[i],LEN,1,fp); /*向指定的磁盤(pán)文件寫(xiě)入信息*/ } printf("請(qǐng)確認(rèn)(y/n):"); scanf("%s",ch); while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) /*判斷是否要錄入新信息*/ { printf("學(xué)號(hào):"); scanf("%d",&stu[m].num); /*輸入學(xué)生學(xué)號(hào)*/ for(i=0;i<m;i++) if(stu[i].num==stu[m].num) { printf("此學(xué)號(hào)已存在!"); getch(); fclose(fp); return; } /*如果學(xué)號(hào)可用,則繼續(xù)輸入其他數(shù)據(jù)*/ printf("姓名:"); scanf("%s",stu[m].name); /*輸入學(xué)生姓名*/ printf("語(yǔ)文:"); scanf("%f",&stu[m].chinese); /*輸入語(yǔ)文課成績(jī)*/ printf("數(shù)學(xué):"); scanf("%f",&stu[m].math); /*輸入數(shù)學(xué)課成績(jī)*/ printf("英語(yǔ):"); scanf("%f",&stu[m].english); /*輸入英語(yǔ)課成績(jī)*/ stu[m].sum=stu[m].chinese+stu[m].math+stu[m].english; /*計(jì)算出總成績(jī)*/ if(fwrite(&stu[m],LEN,1,fp)!=1) /*將新錄入的信息寫(xiě)入指定的磁盤(pán)文件*/ { printf("保存失敗!"); getch(); } else { printf("%s已保存!\n",stu[m].name); m++; } printf("是否繼續(xù)?(y/n):"); /*詢問(wèn)是否繼續(xù)*/ scanf("%s",ch); } fclose(fp); printf("操作成功!\n");}10.3.3查找記錄模塊查找記錄模塊的主要功能是根據(jù)用戶輸入的學(xué)生學(xué)號(hào)對(duì)學(xué)生數(shù)據(jù)進(jìn)行搜索,在功能菜單中與之對(duì)應(yīng)的輸入“2”,調(diào)用查找記錄search()函數(shù),如果查找成功,并按需要顯示該學(xué)生的數(shù)據(jù)。如果查找的學(xué)生學(xué)號(hào)在文件中不存在,則系統(tǒng)會(huì)給出“查找失?。 钡奶崾?。/******************自定義查找函數(shù)******************/voidsearch(){ FILE*fp; intsnum,i,m=0; charch[2]; if((fp=fopen("stuData.txt","rb"))==NULL) { printf("打開(kāi)文件失敗\n"); return; } while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++; fclose(fp); if(m==0) { printf("文件無(wú)記錄!\n"); return; } printf("請(qǐng)輸入需要查找的學(xué)生學(xué)號(hào):"); scanf("%d",&snum); for(i=0;i<m;i++) if(snum==stu[i].num) /*查找輸入的學(xué)號(hào)是否在記錄中*/ { printf("學(xué)生數(shù)據(jù)已找到,確認(rèn)顯示?(y/n)"); scanf("%s",ch); if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) { printf("學(xué)號(hào)姓名語(yǔ)文數(shù)學(xué)英語(yǔ)總分\t\n"); printf(FORMAT,DATA); /*將查找出的結(jié)果按指定格式輸出*/ break; } } if(i==m) printf("查找失敗!\n"); /*未找到要查找的信息*/}10.3.4刪除記錄模塊刪除記錄模塊的主要功能是從磁盤(pán)文件中將學(xué)生的信息讀出來(lái),從讀出的信息中將要?jiǎng)h除的學(xué)生記錄找到,然后將此學(xué)生的記錄數(shù)據(jù)刪除。刪除的過(guò)程中,后續(xù)記錄會(huì)依次前移并覆蓋被刪除的記錄。刪除記錄功能模塊對(duì)應(yīng)的菜單選項(xiàng)為“3”,調(diào)用刪除記錄del()函數(shù)。voiddel(){ FILE*fp; intsnum,i,j,m=0; charch[2]; if((fp=fopen("stuData.txt","r+"))==NULL) { printf("打開(kāi)文件失敗\n");return; } while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++; fclose(fp); if(m==0) { printf("文件無(wú)記錄!\n"); return; } show(); /*顯示已有數(shù)據(jù)*/ printf("請(qǐng)輸入需要?jiǎng)h除的學(xué)生學(xué)號(hào):"); scanf("%d",&snum); for(i=0;i<m;i++) { if(snum==stu[i].num) /*查找到輸入的學(xué)號(hào)*/ { printf("數(shù)據(jù)已找到,是否確認(rèn)刪除?(y/n)"); scanf("%s",ch); if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) /*判斷是否要進(jìn)行刪除*/ { for(j=i;j<m;j++) stu[j]=stu[j+1]; /*將記錄依次移到前面的位置*/ m--; /*記錄的總個(gè)數(shù)減1*/ if((fp=fopen("stuData.txt","wb"))==NULL) { printf("打開(kāi)文件失敗\n"); return; } for(j=0;j<m;j++)/*將更改后的記錄重新寫(xiě)入指定的磁盤(pán)文件中*/ if(fwrite(&stu[j],LEN,1,fp)!=1) { printf("對(duì)不起,保存失敗!\n"); getch(); /*程序暫停*/ } fclose(fp); printf("刪除成功!\n"); return; } else /*用戶輸入的字符不是y或Y,表示取消刪除*/ { printf("取消刪除!\n"); return; } } }printf("沒(méi)有找到要?jiǎng)h除的信息!\n");}10.3.5修改記錄模塊修改記錄模塊modify()函數(shù)對(duì)應(yīng)功能菜單中的“4”,函數(shù)會(huì)先根據(jù)用戶輸入的學(xué)號(hào)進(jìn)行查找,查找成功后,列出此學(xué)生的所有信息。然后給出提示,引導(dǎo)用戶一步一步地對(duì)學(xué)生信息進(jìn)行修改。/******************自定義修改函數(shù)******************/voidmodify(){ FILE*fp; inti,j,m=0,snum; if((fp=fopen("stuData.txt","r+"))==NULL) { printf("打開(kāi)文件失敗\n"); return; } while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++; if(m==0) { printf("文件無(wú)記錄!\n"); fclose(fp); return; } show(); printf("請(qǐng)輸入你要修改的學(xué)生的學(xué)號(hào)\n"); printf("學(xué)號(hào)是:"); scanf("%d",&snum); for(i=0;i<m;i++) { if(snum==stu[i].num) /*檢索記錄中是否有要修改的信息*/ { printf("學(xué)生數(shù)據(jù)已找到,請(qǐng)修改!\n"); printf("姓名:"); scanf("%s",stu[i].name); /*輸入名字*/ printf("語(yǔ)文:"); scanf("%f",&stu[i].chinese); /*輸入語(yǔ)文課成績(jī)*/ printf("數(shù)學(xué):"); scanf("%f",&stu[i].math); /*輸入數(shù)學(xué)課成績(jī)*/ printf("英語(yǔ):"); scanf("%f",&stu[i].english); /*輸入英語(yǔ)課成績(jī)*/ printf("修改成功!"); stu[i].sum=stu[i].chinese+stu[i].math+stu[i].english; if((fp=fopen("stuData.txt","wb"))==NULL) { printf("打開(kāi)文件失敗\n"); return; } for(j=0;j<m;j++) /*將新修改的信息寫(xiě)入指定的磁盤(pán)文件中*/ if(fwrite(&stu[j],LEN,1,fp)!=1) { printf("保存失敗!"); getch(); } fclose(fp); return; } } printf("沒(méi)有找到匹配信息!\n");}10.3.6插入記錄模塊插入記錄模塊的主要功能是在需要的位置插入新的學(xué)生記錄,在菜單中對(duì)應(yīng)的功能鍵為“5”,插入記錄insert()函數(shù)運(yùn)行后,會(huì)先提示記錄的插入位置,即需要插入在哪個(gè)學(xué)生信息的后面,然后程序會(huì)進(jìn)行查找,查找成功后,將后續(xù)的所有學(xué)生記錄依次后移一位,為即將插入的學(xué)生記錄空出位置。插入成功后程序會(huì)提示“插入數(shù)據(jù)成功!”并將數(shù)據(jù)重新寫(xiě)回磁盤(pán)。/******************自定義插入函數(shù)******************/voidinsert(){ FILE*fp; inti,j,k,m=0,snum; if((fp=fopen("stuData.txt","r+"))==NULL) { printf("打開(kāi)文件失敗\n"); return; } while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1)m++; if(m==0) { printf("沒(méi)有數(shù)據(jù)!\n"); fclose(fp); return; } printf("請(qǐng)輸入數(shù)據(jù)插入的位置:\n"); scanf("%d",&snum); /*輸入要插入的位置*/ for(i=0;i<m;i++) if(snum==stu[i].num) break; for(j=m-1;j>i;j--) stu[j+1]=stu[j]; /*從最后一條記錄開(kāi)始均向后移一位*/ printf("請(qǐng)輸入待插入數(shù)據(jù)信息.\n"); printf("學(xué)號(hào):"); scanf("%d",&stu[i+1].num); for(k=0;k<m;k++) if(stu[k].num==stu[m].num) { printf("此學(xué)號(hào)已存在!"); getch(); fclose(fp); return; } printf("姓名:"); scanf("%s",stu[i+1].name); printf("語(yǔ)文:"); scanf("%f",&stu[i+1].chinese); printf("數(shù)學(xué):"); scanf("%f",&stu[i+1].math); printf("英語(yǔ):"); scanf("%f",&stu[i+1].english); stu[i+1].sum=stu[i+1].chinese+stu[i+1].math+stu[i+1].english; if((fp=fopen("stuData.txt","wb"))==NULL) { printf("打開(kāi)文件失敗\n"); return; } for(k=0;k<=m;k++) if(fwrite(&stu[k],LEN,1,fp)!=1) /*將修改后的記錄寫(xiě)入磁盤(pán)文件中*/ { printf("保存失敗!"); getch(); return; } printf("插入數(shù)據(jù)成功!"); getch(); fclose(fp);}10.3.7記錄排序模塊記錄排序模塊實(shí)現(xiàn)的功能是對(duì)學(xué)生總成績(jī)按照從高到低進(jìn)行排序,并將排序后的數(shù)據(jù)寫(xiě)回磁盤(pán)中保存,order()函數(shù)對(duì)應(yīng)功能菜單中的“6”。voidorder(){ FILE*fp; structstudentt; inti=0,j=0,m=0; if((fp=fopen("stuData.txt","r+"))==NULL) { printf("打開(kāi)文件失敗!\n"); return; } while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++; fclose(fp); if(m==0) { printf("無(wú)記錄!\n"); return; } if((fp=fopen("stuData.txt","wb"))==NULL) { printf("打開(kāi)文件失敗\n"); return; } for(i=0;i<m-1;i++) for(j=i+1;j<m;j++) /*雙重循環(huán)實(shí)現(xiàn)成績(jī)比較并交換*/ { if(stu[i].sum<stu[j].sum) { t=

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論