教學計劃編制問題課程設計數(shù)據(jù)結構_第1頁
教學計劃編制問題課程設計數(shù)據(jù)結構_第2頁
教學計劃編制問題課程設計數(shù)據(jù)結構_第3頁
教學計劃編制問題課程設計數(shù)據(jù)結構_第4頁
教學計劃編制問題課程設計數(shù)據(jù)結構_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質文檔-傾情為你奉上 攀枝花學院本科畢業(yè)設計(論文)教學計劃編制問題學生姓名: 學生學號: 院 (系) 年級專業(yè): 指導教師: 助理指導教師: 無 二一一年六月專心-專注-專業(yè)攀枝花學院本科學生課程設計任務書題目教學計劃編制問題1、課程設計的目的培養(yǎng)學生用學到的書本知識解決實際問題的能力;培養(yǎng)實際工作所需要的動手能力;培養(yǎng)學生以科學理論和工程上能力的技術,規(guī)范地開發(fā)大型、復雜、高質量的應用軟件和系統(tǒng)軟件具有關鍵性作用;通過課程設計的實踐,學生可以在程序設計方法、上機操作等基本技能和科學作風方面受到比較系統(tǒng)和嚴格的訓練。2、課程設計的內容和要求(包括原始數(shù)據(jù)、技術要求、工作要求等)設計要求

2、:針對計算機系本科課程,根據(jù)課程之間的依賴關系(如離散數(shù)學應在數(shù)據(jù)結構之前開設)制定課程安排計劃,并滿足各學期課程數(shù)目大致相同。3、主要參考文獻1數(shù)據(jù)結構(C語言版),嚴蔚敏,清華大學出版社,20032數(shù)據(jù)結構題集,嚴蔚敏,清華大學出版社,20053數(shù)據(jù)結構(C語言版),劉大有,高等教育出版社,20044Data Structure with C+,William FordWilliam Topp,清華大學出版社,20034、課程設計工作進度計劃第1天 完成方案設計與程序框圖 第2、3天 編寫程序代碼第4天 程序調試分析和結果第5天 課程設計報告和總結指導教師(簽字)日期年 月 日教研室意見:

3、年 月 日學生(簽字): 接受任務時間: 年 月 日注:任務書由指導教師填寫。課程設計(論文)指導教師成績評定表題目名稱教學計劃編制問題評分項目分值得分評價內涵工作表現(xiàn)20%01學習態(tài)度6遵守各項紀律,工作刻苦努力,具有良好的科學工作態(tài)度。02科學實踐、調研7通過實驗、試驗、查閱文獻、深入生產(chǎn)實踐等渠道獲取與課程設計有關的材料。03課題工作量7按期圓滿完成規(guī)定的任務,工作量飽滿。能力水平35%04綜合運用知識的能力10能運用所學知識和技能去發(fā)現(xiàn)與解決實際問題,能正確處理實驗數(shù)據(jù),能對課題進行理論分析,得出有價值的結論。05應用文獻的能力5能獨立查閱相關文獻和從事其他調研;能提出并較好地論述課題

4、的實施方案;有收集、加工各種信息及獲取新知識的能力。06設計(實驗)能力,方案的設計能力5能正確設計實驗方案,獨立進行裝置安裝、調試、操作等實驗工作,數(shù)據(jù)正確、可靠;研究思路清晰、完整。07計算及計算機應用能力5具有較強的數(shù)據(jù)運算與處理能力;能運用計算機進行資料搜集、加工、處理和輔助設計等。08對計算或實驗結果的分析能力(綜合分析能力、技術經(jīng)濟分析能力)10具有較強的數(shù)據(jù)收集、分析、處理、綜合的能力。成果質量45%09插圖(或圖紙)質量、篇幅、設計(論文)規(guī)范化程度5符合本專業(yè)相關規(guī)范或規(guī)定要求;規(guī)范化符合本文件第五條要求。10設計說明書(論文)質量30綜述簡練完整,有見解;立論正確,論述充分

5、,結論嚴謹合理;實驗正確,分析處理科學。11創(chuàng)新10對前人工作有改進或突破,或有獨特見解。成績指導教師評語指導教師簽名: 年月日目 錄摘 要4一 需求分析 51.1 實驗內容和實驗目的 51.2設計要求51.3理論與實踐教學體系的關系5二 流程圖設計 6三 概要設計 83.1 抽象數(shù)據(jù)類型圖的定義 83.2主程序93.3程序模塊調用關系10四 詳細設計104.1頭結點,表結點,鄰接表的定義 104.2 棧的定義114.3 主程序和其他算法 11五 調試分析205.1 用戶使用和說明 205.2 測試數(shù)據(jù)225.3 測試結果235.4 實驗過程中出現(xiàn)的問題及解決方法 24六 實驗分工24七 實驗

6、體會25八 參考文獻26摘 要教學計劃是學校保證教學質量和人才培養(yǎng)的關鍵,也是組織教學過程、安排教學過程、安排教學任務、確定教學編制的基本依據(jù)和課程安排的具體形式。是穩(wěn)定教學秩序、提高教學質量的重要保證。從教學計劃的設計、實施等方面,闡明了如何搞好教學管理,從而為提高教學質量提供保證。隨著教育改革的不斷深入和社會發(fā)展的需要,原舊的教學計劃在定位上的方向性偏差,已經(jīng)不再適應社會的需求。因此,應重視教學計劃的改革和修訂工作,以確保教育教學質量,提高教育教學水平。教學計劃編制中的思路:一是明確培養(yǎng)目標;二是注重學科設置的整體性、統(tǒng)一性和靈活性、全面性;三是與學分制改革有機結合. 教學計劃是高校實施常

7、規(guī)教學活動的基本管理文檔,由于傳統(tǒng)的手工編制方式存在諸多弊端,開發(fā)基于Web應用程序形式的教學計劃編制系統(tǒng)具有很好的應用價值。使用C程序設計語言,研究開發(fā)教學計劃編制系統(tǒng)Web應用系統(tǒng)。關鍵詞 教學計劃 編制 培養(yǎng)目標 管理一 需求分析1.1實驗內容和實驗目的大學的每個專業(yè)都要編制教學計劃。假設任何專業(yè)都有固定的學習年限,每學年含兩學期,每學期的時間長度和學分上限都相等。每個專業(yè)開設的課程都是確定的,而且課程的開設時間的安排必須滿足先修關系。每個課程的先修關系都是確定的,可以有任意多門,也可以沒有。每一門課程恰好一個學期。試在這樣的情況下設置一個教學計劃編制程序。在大學的某個專業(yè)中選取幾個課程

8、作為頂點,通過各門課的先修關系來構建個圖,該圖用鄰接表來存儲,鄰接表的頭結點存儲每門課的信息.本程序的目的是為用戶編排課程,根據(jù)用戶輸入的信息來編排出每學期要學的課程. 1.2設計要求針對計算機系本科課程,根據(jù)課程之間的依賴關系(如離散數(shù)學應在數(shù)據(jù)結構之前開設)制定課程安排計劃,并滿足各學期課程數(shù)目大致相同。1.3理論與實踐教學體系的關系 理論教學體系和實踐教學體系是培養(yǎng)職業(yè)能力的兩個主導因素是相互聯(lián)系的,要處理好兩者關系?;A理論教學要以應用為目的,以必需、夠用為度,專業(yè)課教學要加強針對性和應用性。實踐教學要改變過分依附理論教學的狀況,探索建立相對獨立的實踐教學體系,形成基本實踐能力與操作技

9、能,專業(yè)技術應用能力與專業(yè)技能,綜合實踐能力與綜合技能有機結合的實踐教學體系。二 概要設計2.1抽象數(shù)據(jù)類型圖的定義 ADT Graph數(shù)據(jù)對象V:V是具有相同特性的數(shù)據(jù)元素的集合,稱為頂點集.數(shù)據(jù)關系R:           R=VR           VR=(v,w)|v,wV,(v,w)表示v和w之間存在直接先修關系基本操作P:void CreatGraph(ALGraph *);void

10、 FindInDegree(ALGraph , int * );void TopologicalSort_1(ALGraph G,int numterm,int maxcredit);void TopologicalSort_2(ALGraph G,int numterm,int maxcredit);ADT Graph棧的定義:ADT Stack   數(shù)據(jù)對象:D=ai|aiElemSet,i=1,2,n,n>=0     數(shù)據(jù)關系:R1=ai-1 ai|ai-1,aiD,i=2,n基本操作:void InitSta

11、ck (SqStack *S);int StackEmpty(SqStack S);void Push(SqStack *S, int );int Pop(SqStack *S, int *e);ADT Stack2.2主程序 int main()            /主函數(shù)    int numterm;   /學期總數(shù)    int uplcredit; /一個學期的學分上限  

12、  int selectway;    ALGraph G;    printf("請輸入學期總數(shù):n");    scanf("%d",&numterm);    printf("請輸入一個學期的學分上限:n");    scanf("%d",&uplcredit);    CreatGraph(&G)

13、;    printf("請選擇編排策略:1.課程盡可能集中到前幾個學期;2.課程盡量均勻分布n");  scanf("%d",&selectway);    if(selectway=1)        TopologicalSort_1(G,numterm,uplcredit);    if(selectway=2)    &

14、#160; TopologicalSort_2(G,numterm,uplcredit);    system("pause");    return 0;三 代碼設計3.1頭結點,表結點,鄰接表的定義#define MAX_VERTEX_NUM 100 /最大課程總數(shù)typedef struct ArcNode       int adjvex;        struct ArcNo

15、de *nextarc;        ArcNode;typedef struct VNode       char name24;       /課程名         int classid;      /課程號       

16、; int credit;         /課程的學分        int indegree;       /該結點的入度        int state;          /該節(jié)點的狀態(tài)   

17、;     ArcNode *firstarc; /指向第一條依附該頂點的弧的指針        VNode,AdjListMAX_VEXTEX_NUM;typedef struct        AdjList vertices;        int vexnum, arcnum;     &#

18、160;  ALGraph;鄰接表的基本操作:void CreatGraph(ALGraph *);創(chuàng)建鄰接表void FindInDegree(ALGraph , int * );求一個結點的入度void TopologicalSort_1(ALGraph G,int numterm,int maxcredit);拓撲排序來編排課程void TopologicalSort_2(ALGraph G,int numterm,int maxcredit);拓撲排序來編排課程3.2棧的定義#define STACk_INIT_SIZE 100 /存儲空間的初時分配量#define STAC

19、KINCREMENT 10    /存儲空間的分配增量typedef int ElemType;typedef struct        AdjList vertices;        int vexnum, arcnum;        ALGraph;基本操作:void InitStack (SqStack *S);棧的初始化int StackEmp

20、ty(SqStack S);判斷棧是否為空void Push(SqStack *S, int );入棧操作int Pop(SqStack *S, int *e);出棧操作3.3主程序和其他算法int main()           /主函數(shù) int numterm;   /學期總數(shù)    int uplcredit; /一個學期的學分上限    int selectway;    AL

21、Graph G;    printf("請輸入學期總數(shù):n");    scanf("%d",&numterm);    printf("請輸入一個學期的學分上限:n");    scanf("%d",&uplcredit);CreatGraph(&G);printf("請選擇編排策略:1.課程盡可能集中到前幾個學期;2.課程盡量均勻分布n");

22、0;   scanf("%d",&selectway);    if(selectway=1)        TopologicalSort_1(G,numterm,uplcredit);    if(selectway=2)      TopologicalSort_2(G,numterm,uplcredit);    system(&q

23、uot;pause");    return 0;void CreatGraph(ALGraph *G)/構件圖   int i, m, n;    ArcNode *p;    printf("請輸入需要編排課程總數(shù):n");    scanf("%d",&G->vexnum);    for( i=1;i<=G->vexnum;i+)&#

24、160;           printf("請輸入課程名n");        scanf("%s",&G->);         printf("請輸入課程號n");        scanf(

25、"%d",&G->verticesi.classid);         printf("請輸入該課程的學分n");        scanf("%d",&G->verticesi.credit);         G->verticesi.indegree=0;  

26、0;     G->vertices i.state=NOTSTUDY;        G->verticesi.firstarc=NULL;        printf("請輸入課程先修關系總數(shù):");    scanf("%d",&G->arcnum);     printf("請順序輸入

27、每個課程先修關系(先修課程在前并以逗號作為間隔):n");    for (i = 1; i <= G->arcnum; i+)            printf("n請輸入存在先修關系的兩個課程的序號:");        scanf("%d,%d",&n,&m);    &#

28、160;   while (n < 0 | n > G->vexnum | m < 0 | m > G->vexnum)                    printf("輸入的頂點序號不正確 請重新輸入:");          

29、0; scanf("%d,%d",&n,&m);                p = (ArcNode*)malloc(sizeof(ArcNode);        if (p = NULL)              

30、      printf("memory allocation failed,goodbey");            exit(1);                p->adjvex = m;      &#

31、160; p->nextarc = G->verticesn.firstarc;        G->verticesn.firstarc = p;        printf("n建立的鄰接表為:n");          /輸出建立好的鄰接表    for(i=1;i<=G->vexnum;i+

32、)            printf("%d:->",G->verticesi.classid);        for(p=G->verticesi.firstarc;p!=NULL;p=p->nextarc)        printf("%d->",p->adjvex); &

33、#160;      printf("NULL");        printf("n");    void InitStack(SqStack *S)   S->base=(int *)malloc(STACK_INIT_SIZE *sizeof(int);     if (!S->base)      

34、  printf("ERROR");        exit(1);         S->top=S->base;     S->stacksize=STACK_INIT_SIZE;int StackEmpty(SqStack *S)    if(S->top=S->base)     

35、   return OK;    else        return ERROR;void Push(SqStack *S,int e)       if(S->top - S->base >= S->stacksize)            S->base = (int *) realloc

36、(S->base , (S->stacksize + STACKINCREMENT) * sizeof(int);        if(!S->base)                     printf("ERROR");        

37、;    exit(1);                S->top = S->base + S->stacksize;        S->stacksize += STACKINCREMENT;        *S->top+ = e;int Pop(SqStack *S, int

38、*e)    if(S->top = S->base) exit(1);    *e = * -S->top;    return 0;void FindInDegree(ALGraph G, int indegree)/求圖中各節(jié)點的入度     int i;    for (i = 1; i <= G.vexnum; i+)        indeg

39、reei = 0;    for (i = 1; i <= G.vexnum; i+)            while (G.verticesi.firstarc)                    indegreeG.verticesi.firstarc->adjvex

40、+;            G.verticesi.firstarc = G.verticesi.firstarc->nextarc;            void TopologicalSort_1(ALGraph G,int numterm,int uplcredit)     FILE *fp;    f

41、p=fopen("bianpai.txt","w");    ArcNode *p;        SqStack S;   int indegreeM;/存放各節(jié)點的入度    int i,j, k, m,n;    int count; /課程編排數(shù)目計數(shù)器    int sumcredit;/每個學期的課程學分累加器    Find

42、InDegree(G, indegree);    for (i = 1; i <= G.vexnum; i+)      G.verticesi.indegree=indegreei;    InitStack(&S);    count=0;    k=0;     while(count!=G.vexnum && k<=numterm) 

43、0;          sumcredit=0;        for(i=1;i<=G.vexnum;i+) /入度為零的節(jié)點入棧,即無先修的課程入棧             if(G.verticesi.indegree=0)&&(G.verticesi.state=NOTSTUDY)  &#

44、160;                            Push(&S,i);              G.verticesi.state = STUDY;/避免入度為零節(jié)點重復入棧    &

45、#160;                if(!StackEmpty(&S)&&(sumcredit<=uplcredit)                     k= k+1;     

46、0;      printf("n");            printf("第%d個學期學得課程有:n",k);            sumcredit = 0;          for(i=1;i<=G.

47、vexnum;i+)/入度為零的節(jié)點入棧,即無先修的課程入棧                 if(G.verticesi.indegree=0)&&(G.verticesi.state=NOTSTUDY)                    Push(&

48、;S,i);            while(!StackEmpty(&S)&&(sumcredit<uplcredit)/棧非空&&學分總數(shù)小于學分上限                             Pop(&

49、amp;S,&j);                sumcredit = sumcredit + G.verticesj.credit;               if(sumcredit <= uplcredit)        

50、                           printf(" %s ",G.);                    fprint

51、f(fp," %s ",G.);                    count+;                   for(p=G.verticesj.firstarc;p;p=p->ne

52、xtarc)/對j號頂點每個鄰接點的入度減一                        G.verticesp->adjvex.indegree-;                    &

53、#160;           else Push(&S,j);/將未輸出的節(jié)點重新壓入棧                            fprintf(fp,"n");       

54、 printf("n");    if(count<G.vexnum)        printf("n課程編排出錯n");    else               printf("n課程編排成功n");       

55、fclose(fp);void TopologicalSort_2(ALGraph G,int numterm,int uplcredit)    FILE *fp;    fp=fopen("bianpai.txt","w");    ArcNode *p;        SqStack S;    int indegreeM;   &

56、#160;int i,j, k, m,n;       int maxnum;       int sumnum;    int count; /課程編排數(shù)目計數(shù)器    int sumcredit;/每個學期的課程學分累加器    FindInDegree(G, indegree);    for (i = 1; i <= G.vexnum; i+) 

57、0;          G.verticesi.indegree = indegreei;    InitStack(&S);    count=0;    k=0;       maxnum = G.vexnum/numterm+1;     sumnum = 0;       while

58、(count!=G.vexnum && k<=numterm)                for(i=1;i<=G.vexnum;i+)                    if(G.verticesi.indegree=0)&&(G.verticesi.state=NOTSTUDY)&#

59、160;                                          Push(&S,i);                 &#

60、160;          G.verticesi.state = STUDY;                               if(!StackEmpty(&S)&&(sumcredit<=uplcredit)&&(sumnum<=

61、maxnum)                                 k= k+1;                     printf("n"); 

62、;                    printf("第%d個學期學得課程有:",k);                     sumcredit = 0;          

63、0;          sumnum = 0;                     for(i=1;i<=G.vexnum;i+)/入度為零的節(jié)點入棧,即無先修的課程入棧                    

64、      if(G.verticesi.indegree=0)&&(G.verticesi.state=NOTSTUDY)                             Push(&S,i);           

65、          while(!StackEmpty(&S)&&(sumcredit<uplcredit)&&(sumnum<maxnum)                    /棧非空&&學分總數(shù)小于學分上限&&學期課程數(shù)目小于學期最大數(shù)目      

66、;                                         Pop(&S,&j);/出棧              &#

67、160;          sumcredit = sumcredit + G.verticesj.credit;                            sumnum = sumnum+1;           

68、             if(sumcredit <= uplcredit)&&(sumnum <= maxnum)                                    

69、                    printf(" %s ",G.);                                  

70、;                 fprintf(fp," %s ",G.);                                count+;   

71、;                                for(p=G.verticesj.firstarc;p;p=p->nextarc)/對j號頂點每個鄰接點的入度減一                   &#

72、160;                   G.verticesp->adjvex.indegree-;                                    

73、60;           else Push(&S,j);                                     fprintf(fp,"n");     

74、60;  printf("n");    if(count<G.vexnum)        printf("課程編排出錯n");    else                printf("課程編排成功n");        fclose(fp);3.4程序模塊調用關系 主程序模塊  拓撲排序模塊四 流程圖設計流程圖如下所示:void FindInDegree(ALGraph G, int indegree)/求圖中各節(jié)點的入度(如圖4.1)void CreatGraph(ALGraph *G)/構件圖(如圖4.2) 圖4.1 圖4.2void TopologicalSort_1(ALGraph G,int numterm,int uplcredit) /有向圖G采用鄰接表存儲結構(如圖4.3)void TopologicalSort_2(ALGraph G,int 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論