C語言程序設(shè)計實訓(xùn)說明書某學(xué)院教學(xué)信息管理系統(tǒng)_第1頁
C語言程序設(shè)計實訓(xùn)說明書某學(xué)院教學(xué)信息管理系統(tǒng)_第2頁
C語言程序設(shè)計實訓(xùn)說明書某學(xué)院教學(xué)信息管理系統(tǒng)_第3頁
C語言程序設(shè)計實訓(xùn)說明書某學(xué)院教學(xué)信息管理系統(tǒng)_第4頁
C語言程序設(shè)計實訓(xùn)說明書某學(xué)院教學(xué)信息管理系統(tǒng)_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、中北大學(xué)程序設(shè)計實訓(xùn)說 明 書 學(xué) 院、系:軟件學(xué)院專 業(yè):軟件工程學(xué) 生 姓 名:學(xué) 號:1314010xxx設(shè) 計 題 目:某學(xué)院教學(xué)信息管理系統(tǒng) 起 迄 日 期:2014年11月21日2015年1月17日指 導(dǎo) 教 師:何志英   2015 年 1月 10 日一、選題要求題目一:某學(xué)院教學(xué)信息管理系統(tǒng)功能:1、 每一條記錄包括一位教師的職工號、姓名、職稱、性別、3門主講課程(課程名稱、開課學(xué)期、課程性質(zhì)(學(xué)位與非學(xué)位課)和教學(xué)效果),教學(xué)效果綜合評分。 2、輸入功能:可以一次完成若干條記錄的輸入。 3、顯示功能:完成全部教師記錄的顯示。 4、查找功

2、能:完成按姓名或課程查找教師的相關(guān)記錄,并顯示。 5、排序功能:按職工號或教學(xué)效果綜合評分進行排序。 6、插入功能:按教學(xué)效果綜合評分高低插入一條教師記錄。 7、將教師記錄存在文件中。 8、應(yīng)提供一個界面來調(diào)用各個功能,調(diào)用界面和各個功能的操作界面應(yīng)盡可能清晰美觀! 要求:1、用C語言實現(xiàn)系統(tǒng); 2、利用結(jié)構(gòu)體數(shù)組實現(xiàn)教學(xué)信息的數(shù)據(jù)結(jié)構(gòu)設(shè)計; 3、系統(tǒng)具有增加,查詢,插入,排序等基本功能; 4、系統(tǒng)的各個功能模塊要求用函數(shù)的形式實現(xiàn); 5、將教學(xué)信息存在文件中。 考試題目要求:1、 按教師性別統(tǒng)計統(tǒng)計評分的總算2、 刪除一個函數(shù),程序仍能正常運行二、程序設(shè)計方法及主要函數(shù)介紹程序設(shè)計方法1.

3、數(shù)據(jù)結(jié)構(gòu)的設(shè)計: 程序要求文檔中要求使用結(jié)構(gòu)體數(shù)組完成設(shè)計,每一條記錄包括一位教師的職工號、姓名、職稱、性別、3門主講課程(課程名稱、開課學(xué)期、課程性質(zhì)(學(xué)位與非學(xué)位課)和教學(xué)效果),教學(xué)效果綜合評分。數(shù)據(jù)結(jié)構(gòu)設(shè)計如下:typedef struct Course /課程的定義與描述 char courseName40; /課程名稱int semester; /開課學(xué)期char type8; /課程性質(zhì)char teceff; /教學(xué)效果 Course; typedef struct Teacher /教師的定義與描述 char name8; /姓名 int num; /職工號char sex2

4、; /性別int tecscore; /教學(xué)效果綜合評分char position8; /職稱 Course course3; /3門主講課程 Teacher; 2. 主函數(shù)與其他函數(shù)的關(guān)系:3. 結(jié)構(gòu)化的程序設(shè)計方法 將實用功能封裝在每一個子函數(shù)中,主函數(shù)通過調(diào)用子函數(shù)來實現(xiàn)相對應(yīng)的功能。體現(xiàn)了“自頂向下,逐步求精”的結(jié)構(gòu)化程序設(shè)計思想。4. “高內(nèi)聚,低耦合”的程序設(shè)計原則 將各個使用功能封裝在函數(shù)中來讓主函數(shù)調(diào)用,而不是將所有實用功能聚集在主函數(shù)中,使得各個模塊相對獨立,耦合性得以降低,有利于程序的維護。主要函數(shù)介紹:1. 以卡片形式輸出全部教師信息 注:由于版面原因,輸出函數(shù)顯得有些亂

5、,但是這并不影響程序的運行結(jié)果,真實的運行結(jié)果是很整齊的。(下圖是DevC+ V5.5.3版本下的編碼界面)void PrintInfor(Teacher T) /輸出全部教師信息(以卡片形式) printf("-");printf("| 所有教師記錄 |");printf("-+");printf("| 全院現(xiàn)有在職教師%d名,全部信息如下 |",TeacherNum);printf("-+nn");for(int i=0;i<TeacherNum;+i) printf("+-

6、+-+-+-+-+-+-+-+"); printf("|職工號| %3d |姓名| %8s |性別| %s |職稱 | %8s |",Ti.num,T,Ti.sex,Ti.position); printf("+-+-+-+-+-+-+-+-+-+"); printf("|主講課程1 | 課程名 | %-40s |",Ti.course0.courseName); printf("+-+-+-+-+-+-+"); printf("| 學(xué)期 | %d |課程性質(zhì) | %8s | 教學(xué)效

7、果 | %c |",Ti.course0.semester,Ti.course0.type,Ti.course0.teceff); printf("+-+-+-+-+-+-+"); printf("|主講課程2 | 課程名 | %-40s |",Ti.course1.courseName); printf("+-+-+-+-+-+-+"); printf("| 學(xué)期 | %d |課程性質(zhì) | %8s | 教學(xué)效果 | %c |",Ti.course1.semester,Ti.course1.type,Ti

8、.course1.teceff); printf("+-+-+-+-+-+-+"); printf("|主講課程3 | 課程名 | %-40s |",Ti.course2.courseName); printf("+-+-+-+-+-+-+"); printf("| 學(xué)期 | %d |課程性質(zhì) | %8s | 教學(xué)效果 | %c |",Ti.course2.semester,Ti.course2.type,Ti.course2.teceff); printf("+-+-+-+-+-+-+-+")

9、; printf("|教學(xué)效果綜合評分| %3d |",Ti.tecscore); printf("+-+-+nn"); system("PAUSE"); /輸完一個教師信息,等待用戶查看確認,確認無誤后再打印下一教師的相關(guān)信息 /for/PrintInfor2. 對教師信息排序void Sort_N(Teacher T,int n) /當(dāng)n=1時按職工號排序,當(dāng)n=2時按教學(xué)效果綜合評分排序 if(n=1) /按職工號排序 Teacher temp; for(int i=0;i<TeacherNum-1;i+) /冒泡法排序

10、for(int j=0;j<TeacherNum-1-i;j+) if(Tj+1.num<Tj.num) temp=Tj; Tj=Tj+1; Tj+1=temp; /if /forprintf("排序結(jié)果如下:n");for(int i=0;i<TeacherNum;i+)printf(" %8s%d ",T,Ti.num);/forprintf("n"); /ifelse /按教學(xué)效果綜合評分排序 Teacher temp; for(int i=0;i<TeacherNum-1;+i) /冒泡法排

11、序 for(int j=0;j<TeacherNum-1-i;+j) if(Tj+1.tecscore<Tj.tecscore) temp=Tj; Tj=Tj+1; Tj+1=temp; /if /for for(int i=0;i<TeacherNum;i+)printf("ttt第%d名: %-8s 分數(shù):%3dn",i+1,T,Ti.tecscore);/for/else/Sort_N3. 按教學(xué)效果綜合評分高低插入一條教師記錄 由于程序要求要按照教學(xué)效果綜合評分高低進行插入操作,故教師信息必須按一定順序排列,但是在執(zhí)行該操作之前不能保證

12、用戶已經(jīng)執(zhí)行了相應(yīng)的排序操作,故需要再執(zhí)行一次排序操作,以保證接下來的程序能夠正常運行 插入信息的算法大致描述如下: 在操作之前,教師的教學(xué)效果綜合評分已經(jīng)按照從小到大的順序排列。 先確定插入位置,如需對數(shù)據(jù)移動則進行移動操作,最后將待插記錄復(fù)制到插入位置。 插入位置有兩種: A. 在所有教師信息之后插入:當(dāng)該教師分數(shù)大于所有教師的分數(shù)時,直接將該教師信息復(fù)制在最后一個教師后面的結(jié)構(gòu)體中,無需進行移動,此時的基本操作為數(shù)據(jù)的復(fù)制。 B. 在開頭或者其他教師之前插入:當(dāng)該教師分數(shù)滿足以下表達式:min<=tecscore<max時,使用for循環(huán)找到其插入位置的數(shù)組元素下標i,然后將

13、該位置及其后面的元素全部后移一位,將待插入教師的信息復(fù)制到插入位置。此時的基本操作是數(shù)據(jù)的移動與復(fù)制(移動的過程本質(zhì)上也是數(shù)據(jù)的復(fù)制)。void InsertInfor(Teacher T)if(TeacherNum=MAXTEACHERNUM)printf("容量已滿,請擴充后再使用!n");return;/if Teacher TB; /先從鍵盤接收待插入教師的相關(guān)信息,存放于一個臨時的結(jié)構(gòu)體變量TB中printf("->請按要求輸入教師信息:n");printf("->請輸入教師的職工號(3位數(shù)字): ");scan

14、f("%d",&TB.num);printf("->請輸入教師的姓名: ");scanf("%s",TB.name); printf("->請輸入教師的性別(男或女): ");scanf("%s",TB.sex);printf("->請輸入教師的職稱: ");scanf("%s",TB.position);for(int j=0;j<3;j+)printf("->請輸入該教師第%d門主講課程的信息: n&qu

15、ot;,j+1); InputClassInfor(TB.coursej); printf("n");/for printf("->請輸入教師的教學(xué)效果綜合評分(0-100): ");scanf("%d",&TB.tecscore); printf("->為保證結(jié)果正確,程序?qū)δ慕處煱唇虒W(xué)效果綜合評分進行排序:n"); Teacher temp; for(int i=0;i<TeacherNum-1;+i) /冒泡法排序 for(int j=0;j<TeacherNum-1-i;

16、+j) if(Tj+1.tecscore<Tj.tecscore) temp=Tj; Tj=Tj+1; Tj+1=temp; /if /forint flag=-1;for(int i=0;i<TeacherNum;i+)if(TB.tecscore>=Ti.tecscore)flag=i;/if /forprintf("插入位置:%dn",flag);if(flag=-1) flag=TeacherNum; /在末尾插入 elsefor(int i=TeacherNum-1;i>=flag;i-) /移動插入位置后面的所有數(shù)據(jù) strcpy(Ti+

17、1.name,T); Ti+1.num=Ti.num; strcpy(Ti+1.sex,Ti.sex); Ti+1.tecscore=Ti.tecscore;strcpy(Ti+1.position,Ti.position); for(int j=0;j<3;j+) strcpy(Ti+1.coursej.courseName,Ti.coursej.courseName); Ti+1.coursej.semester=Ti.coursej.semester; strcpy(Ti+1.coursej.type,Ti.coursej.type); Ti+1.coursej.tec

18、eff=TB.coursej.teceff; /for/for/elsestrcpy(T,TB.name); Tflag.num=TB.num;strcpy(Tflag.sex,TB.sex);Tflag.tecscore=TB.tecscore;strcpy(Tflag.position,TB.position); /插入記錄 for(int j=0;j<3;j+) strcpy(Tflag.coursej.courseName,TB.coursej.courseName); Tflag.coursej.semester=TB.coursej.semester; st

19、rcpy(Tflag.coursej.type,TB.coursej.type); Tflag.coursej.teceff=TB.coursej.teceff;/for TeacherNum+; /教師記錄+1 printf("->插入后的結(jié)果如下:n");PrintInfor(T);/InsertInfor三、程序源代碼(包括注釋)/-引入頭文件- #include <stdlib.h> /使用了system( )和exit( )函數(shù)#include <stdio.h> /使用了printf( )、scanf( )以及文件讀寫函數(shù)#incl

20、ude <string.h> /使用了strcmp( )、strcpy( )等字符串處理函數(shù)/-宏定義- #define MAXTEACHERNUM 300 /一個學(xué)院最大教師數(shù),上限可調(diào) /-自定義數(shù)據(jù)類型- /- 教師和課程的定義 - typedef struct Course /課程的定義與描述 char courseName40; /課程名稱int semester; /開課學(xué)期char type8; /課程性質(zhì)char teceff; /教學(xué)效果 Course; typedef struct Teacher /教師的定義與描述 char name8; /姓名 int nu

21、m; /職工號char sex2; /性別int tecscore; /教學(xué)效果綜合評分char position8; /職稱 Course course3; /3門主講課程 Teacher; /-部分全局變量- int TeacherNum; /教師記錄條數(shù)/-基本操作及其子函數(shù)- /-1.輸入教師信息- void InputClassInfor(Course &c) /輸入教學(xué)信息 printf("請輸入課程的課程名: ");scanf("%s",c.courseName); getchar( ); /吃掉回車符printf("請輸

22、入課程的學(xué)期(輸入數(shù)字1-8中一個): ");scanf("%d",&c.semester);printf("請輸入課程的學(xué)科性質(zhì)(輸入非學(xué)位課或?qū)W位課) : ");scanf("%s",c.type); getchar( ); /吃掉回車符 fflush(stdin);printf("請輸入課程的教學(xué)效果(輸入A、B、C、D中任一個) : ");c.teceff=getchar( ); getchar( ); /吃掉回車符/InputClassInforvoid InputInfor(Teach

23、er TMAXTEACHERNUM) /輸入教師信息 int i=0,flag=1;TeacherNum = 0;char ch,ch1;while(flag) /不斷輸入教師信息,直到輸入"n" printf("->請輸入教師的職工號(3位數(shù)字): ");scanf("%d",&Ti.num);printf("->請輸入教師的姓名: ");scanf("%s",T); printf("->請輸入教師的性別(男或女): ");scanf(

24、"%s",Ti.sex);printf("->請輸入教師的職稱: ");scanf("%s",Ti.position);for(int j=0;j<3;j+)printf("->請輸入該教師第%d門主講課程的信息: n",j+1); InputClassInfor(Ti.coursej); printf("n");/for printf("->請輸入教師的教學(xué)效果綜合評分(0-100): ");scanf("%d",&Ti.

25、tecscore);TeacherNum+; /教師記錄+1 i+; /計數(shù)器自增 fflush(stdin); printf("您還想繼續(xù)輸入嗎?(Y(y)/N(n)");ch=getchar();getchar(); /吃掉回車符 if(ch='N'|ch='n') /確認是否退出 flag=0; /修改標志,結(jié)束循環(huán) /while/InputTecInfor/-2.輸出教師信息- void PrintInfor(Teacher T) /輸出全部教師信息(以卡片形式) printf("-");printf("

26、| 所有教師記錄 |");printf("-+");printf("| 全院現(xiàn)有在職教師%d名,全部信息如下 |",TeacherNum);printf("-+nn");for(int i=0;i<TeacherNum;+i) printf("+-+-+-+-+-+-+-+-+"); printf("|職工號| %3d |姓名| %8s |性別| %s |職稱 | %8s |",Ti.num,T,Ti.sex,Ti.position); printf("+-

27、+-+-+-+-+-+-+-+-+"); printf("|主講課程1 | 課程名 | %-40s |",Ti.course0.courseName); printf("+-+-+-+-+-+-+"); printf("| 學(xué)期 | %d |課程性質(zhì) | %8s | 教學(xué)效果 | %c |",Ti.course0.semester,Ti.course0.type,Ti.course0.teceff); printf("+-+-+-+-+-+-+"); printf("|主講課程2 | 課程名 |

28、 %-40s |",Ti.course1.courseName); printf("+-+-+-+-+-+-+"); printf("| 學(xué)期 | %d |課程性質(zhì) | %8s | 教學(xué)效果 | %c |",Ti.course1.semester,Ti.course1.type,Ti.course1.teceff); printf("+-+-+-+-+-+-+"); printf("|主講課程3 | 課程名 | %-40s |",Ti.course2.courseName); printf("+

29、-+-+-+-+-+-+"); printf("| 學(xué)期 | %d |課程性質(zhì) | %8s | 教學(xué)效果 | %c |",Ti.course2.semester,Ti.course2.type,Ti.course2.teceff); printf("+-+-+-+-+-+-+-+"); printf("|教學(xué)效果綜合評分| %3d |",Ti.tecscore); printf("+-+-+nn"); system("PAUSE"); /輸完一個教師信息,等待用戶查看確認,確認無誤后再

30、打印下一教師的相關(guān)信息 /for/PrintInfor/-3.查找教師信息- void Search_N(Teacher T,int n) /查找子函數(shù) /當(dāng)n=1時按姓名查找教師信息,否則(當(dāng)n=2時)按職工號查找教師信息int flag=0; /標志,檢測找到與否 if(n=1) /按姓名查找 char name110;printf("->請輸入教師姓名:");scanf("%s",name1);for(int i=0;i<TeacherNum;i+)if(!strcmp(name1,T) printf("查找成功,

31、找到該教師記錄!nn"); printf("+-+-+-+-+-+-+-+-+"); printf("|職工號| %3d |姓名| %8s |性別| %s |職稱 | %8s |",Ti.num,T,Ti.sex,Ti.position); printf("+-+-+-+-+-+-+-+-+-+"); printf("|主講課程1 | 課程名 | %-40s |",Ti.course0.courseName); printf("+-+-+-+-+-+-+"); printf

32、("| 學(xué)期 | %d |課程性質(zhì) | %8s | 教學(xué)效果 | %c |",Ti.course0.semester,Ti.course0.type,Ti.course0.teceff); printf("+-+-+-+-+-+-+"); printf("|主講課程2 | 課程名 | %-40s |",Ti.course1.courseName); printf("+-+-+-+-+-+-+"); printf("| 學(xué)期 | %d |課程性質(zhì) | %8s | 教學(xué)效果 | %c |",Ti.c

33、ourse1.semester,Ti.course1.type,Ti.course1.teceff); printf("+-+-+-+-+-+-+"); printf("|主講課程3 | 課程名 | %-40s |",Ti.course2.courseName); printf("+-+-+-+-+-+-+"); printf("| 學(xué)期 | %d |課程性質(zhì) | %8s | 教學(xué)效果 | %c |",Ti.course2.semester,Ti.course2.type,Ti.course2.teceff); p

34、rintf("+-+-+-+-+-+-+-+"); printf("|教學(xué)效果綜合評分| %3d |",Ti.tecscore); printf("+-+-+nn"); flag=1; /標志置1,表示找到 /if /forif(flag=0) /若一輪循環(huán)flag仍為0,查找失敗 printf("查找失敗,姓名為%s的教師不存在!n",name1); /ifelse /按職工號查找 int num1=999;printf("->請輸入教師職工號:");scanf("%d&quo

35、t;,&num1);for(int i=0;i<TeacherNum;i+)if(num1=Ti.num)printf("查找成功,找到該教師記錄!nn");printf("+-+-+-+-+-+-+-+-+"); printf("|職工號| %3d |姓名| %8s |性別| %s |職稱 | %8s |",Ti.num,T,Ti.sex,Ti.position); printf("+-+-+-+-+-+-+-+-+-+"); printf("|主講課程1 | 課程名 | %-

36、40s |",Ti.course0.courseName); printf("+-+-+-+-+-+-+"); printf("| 學(xué)期 | %d |課程性質(zhì) | %8s | 教學(xué)效果 | %c |",Ti.course0.semester,Ti.course0.type,Ti.course0.teceff); printf("+-+-+-+-+-+-+"); printf("|主講課程2 | 課程名 | %-40s |",Ti.course1.courseName); printf("+-+-

37、+-+-+-+-+"); printf("| 學(xué)期 | %d |課程性質(zhì) | %8s | 教學(xué)效果 | %c |",Ti.course1.semester,Ti.course1.type,Ti.course1.teceff); printf("+-+-+-+-+-+-+"); printf("|主講課程3 | 課程名 | %-40s |",Ti.course2.courseName); printf("+-+-+-+-+-+-+"); printf("| 學(xué)期 | %d |課程性質(zhì) | %8s

38、| 教學(xué)效果 | %c |",Ti.course2.semester,Ti.course2.type,Ti.course2.teceff); printf("+-+-+-+-+-+-+-+"); printf("|教學(xué)效果綜合評分| %3d |",Ti.tecscore); printf("+-+-+nn"); flag=1; /標志置1,表示找到 /if/forif(flag=0) /若一輪循環(huán)flag仍為0,查找失敗 printf("查找失敗,職工號為%d的教師不存在!n",num1);/else/S

39、earch_Nvoid SearchInfor(Teacher T) /查找教師信息(總函數(shù)) /查找教師信息的總函數(shù),用于控制查找的方式(即按哪個關(guān)鍵字來查找)char ch;int flag=1;while(flag)system("cls");printf("nttt1.按姓名查找教師信息n"); printf("ttt2.按職工號查找教師信息n"); printf("ttt3.返回主菜單n"); printf("請選擇您需要的操作:"); switch(ch=getchar(),ch)

40、case '1': Search_N(T,1); /按姓名查找教師信息 break; /case '1' case '2': Search_N(T,2); /按職工號查找教師信息 break; /case '2' case '3': flag=0; break; /case '3' default: printf("非法輸入!n"); /default /switchsystem("PAUSE");fflush(stdin); /while/SearchInfor/-4.對教師信息排序-void Sort_N(Teacher T,int n) if(n=1) /按職工號排序 Teacher temp; for(int i=0;i<TeacherNum-1;i+) /冒泡法排序 for(int j=0;j<TeacherNum-1-i;j+) if(Tj+1.num<Tj.num) temp=Tj; Tj=Tj+1; Tj+1=temp; /if /

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論