教學計劃編排_第1頁
教學計劃編排_第2頁
教學計劃編排_第3頁
教學計劃編排_第4頁
教學計劃編排_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實驗題目:教學計劃編排班級:數(shù)學類2 姓名:史寶珠 學號:2011434066 日期:2011.12一、需求分析 1.程序的基本功能教學計劃的制定就是合理的編排這些課程,使學生能夠順利的進行學習。這些課程中,有些課程是獨立于其他課程的基礎課,有些課程需要其他先行課程;一般4年制本科教學前7個學期(3年半)進行理論課程的學習,第8個學期實習;教學計劃的編排必須充分考慮這些因素。2.輸入輸出要求假定學習年限是固定的,每學年包含兩個學期,各專業(yè)開設的課程是確定的,每門課程是否有先修課、有幾門先修課也是確定的。要求制定教學計劃,合理的安排各學期開授的課程。要求各學期課程門數(shù)、學分的分布較均勻。二、概要

2、設計1)程序模塊:(1)Void Information():輸依次輸入課程的總數(shù),AOV網(wǎng)中邊的條數(shù);輸入AOV網(wǎng)中各個頂點的信息;輸入該課程的課程名;輸入該課程的學分;輸入該課程的課序號;輸入該課程的入度;如果此課程需要多個學期修完,請輸入1;如果不是請輸入2;(2)float Aov(int p,AOVGraph AOV200,int b1,float sum2)建立(運用拓撲排序)AOV網(wǎng),從而將所有的信息以課表形式存儲和顯示。其中有對各種信息的輸入,并且有建表的操作,將所有的內(nèi)容有條理的存儲和顯示出來,使讀者一目了然。(3)int main()::主模塊,通過對各個模塊的調(diào)用實現(xiàn)教學

3、計劃的安排。2)本程序所用的抽象數(shù)據(jù)類型的定義; typedef struct nodeint adjevx;struct node *next;EdgeNode;typedef struct vnodeint num;/課程號char name25;/課程名float chour;/學分int indegree;/入度char nature;/是否為選修課char a1;int a11;int a12; EdgeNode *firstedge;VNode;typedef structVNode AdjListMAX;int n,e;float sum;AOVGraph;3) 模塊之間的層次關

4、系主 模 塊mainjianliAov Information三、詳細設計1.采用C+語言定義相關的數(shù)據(jù)類型;ifstream input_file;/文件輸入流及對文件的建立ofstream output_file;/文件輸出流及對文件的讀取typedef struct nodeint adjevx;/*鄰接點域*/struct node *next;/*指向下一個鄰接點的指針域*/EdgeNode;/*邊表結(jié)點*/typedef struct vnode/*頂點表結(jié)點*/int num;/*課程號*/char name25;/*課程名*/float chour;/*課程學分*/int in

5、degree;/*頂點的入度*/char vertex;/*頂點域*/char nature; /*是否為選修課*/char a1;int a11;int a12; EdgeNode *firstedge;VNode;/*邊表的頭指針*/typedef structVNode AdjListMAX;/*鄰接表*/int n;/*頂點數(shù)*/int e;/*邊數(shù)*/float sum;/*總學分*/AOVGraph;typedef structVNode AdjListMAX;int r;int f;Queue;Queue *p;2.寫出各模塊的偽碼算法;Queue *Init_queue(Que

6、ue *p) /構(gòu)建空的隊列p=(Queue *)malloc(sizeof(Queue);p->f=p->r=-1; /運用頭尾指針來判斷隊是否為空return p;int in_queue(Queue *p,VNode srMAX)if(p->r=MAX-1)cout<<"隊滿不可以進行入對操作"<<endl;return -1;elsep->r+;p->AdjListp->p->r=srp->p->r;p->AdjListp->r.num=srp->

7、r.num;p->AdjListp->r.chour=srp->r.chour;p->AdjListp->r.indegree=srp->r.indegree;p->AdjListp->r.firstedge=srp->r.firstedge;return 1;int out_queue(Queue *p,VNode *sr)if(p->r=-1)cout<<"隊空不能出隊"<<endl;return -1;else*sr=p->AdjListp->f;p->f+;retu

8、rn 1;void Information(AOVGraph AOV200,int b1)/*信息的輸入*/b1=0;int k=0,i=0,j;EdgeNode *Q,*r;AOV->sum=0;cout<<"請依次輸入課程的總數(shù),AOV網(wǎng)中邊的條數(shù)"<<endl;cin>>AOV->n>>AOV->e;for(i=0;i<AOV->n;i+)/*將信息依次輸入*/cout<<"n請輸入AOV網(wǎng)中第 "<<i+1<<" 個頂點的信

9、息,還有"<<AOV->n-i-1<<" 個頂點沒有輸入:n"<<endl;cout<<"n請輸入該課程的課程名:nn"<<endl;cin>>AOV->AdjL;AOV->AdjListi.nature='M' b1+; cout<<"n請輸入該課程的學分:nn"<<endl; cin>>AOV->AdjListi.chour; AOV->sum+=AO

10、V->AdjListi.chour; cout<<"n請輸入該課程的課序號:nn"<<endl; cin>>AOV->AdjListi.num; cout<<"n請輸入該課程的入度:nn"<<endl; cin>>AOV->AdjListi.indegree; AOV->AdjListi.firstedge=NULL;/*初始化鄰接編表*/ AOV->AdjListi.a12=0; if(AOV->AdjListi.indegree=0) AOV-

11、>AdjListi.a11=0; else AOV->AdjListi.a11=1; cout<<"n以下為輸入AOV網(wǎng)中各條邊的信息:nn"<<endl;/*輸入aov網(wǎng)的有關信息*/cout<<"n請輸入邊的信息(輸入格式為: i:j。i,j分別表示AOV網(wǎng)中<vi,vj>的頂點對應的序號。):nn"<<endl;for(j=1;j<=AOV->e;k+)cout<<"第"<<j<<"條邊的信息&quo

12、t;<<endl;cin>>i>>j;Q=(EdgeNode *)malloc(sizeof(EdgeNode);Q->adjevx=j-1;if(AOV->AdjListi-1.firstedge=NULL) AOV->AdjListi-1.firstedge=Q;else r=AOV->AdjListi-1.firstedge; while(r->next!=NULL) r=r->next; r->next=Q;Q->next=NULL;if(AOV->e=k)cout<<"n邊

13、的信息輸入結(jié)束。nn"float jianliAov(int p,AOVGraph AOV200,int b1,float sum2)/*運用拓撲排序建立AOV網(wǎng)的結(jié)構(gòu)建立教學編排表*/int i;int k;float j;/,aEdgeNode *ptr;int b2=7,b3;VNode point1;sum2=0;char ch;ofstream outfile("n.txt",ios:out);/*對文件的操作進行打開文件操作*/for(i=0;i<AOV->n;i+)if(AOV->AdjListi.indegree=0&&a

14、mp;AOV->AdjListi.nature='M'&&AOV->AdjListi.a11=0&&AOV->AdjListi.a12=0)sum2+=AOV->AdjListi.chour;if(sum2-AOV->sum/b2<AOV->AdjListi.chour)/*將輸入的信息有序的進行存入文件*/cout<<"課程號"<<"課程名 "<<"學分"<<"課程性質(zhì)"<

15、;<endl;cout<<AOV->AdjListi.num <<" "<<AOV->AdjL<<" "<<AOV->AdjListi.chour<<" "<<AOV->AdjListi.nature<<endl;outfile<<"課程號"<<"課程名 "<<"學分"<<"課

16、程性質(zhì)"<<endl;outfile<<AOV->AdjListi.num <<" "<<AOV->AdjL<<" "<<AOV->AdjListi.chour<<" "<<AOV->AdjListi.nature<<endl;AOV->AdjListi.a12=1;b1-;b3+;ptr=AOV->AdjListi.firstedge;while(ptr!=NUL

17、L)k=ptr->adjevx;AOV->AdjListk.indegree-;ptr=ptr->next;elsesum2-=AOV->AdjListi.chour;/*計算總學分*/ j=sum2;cout<<"第 "<<(p+2)/2<<" 學年第 "<<2-(p+1)%2<<" 學期所修學分為:"<<j<<",課程數(shù)為 "<<b3<<" 如果想修選修課,請輸入1 ,否

18、則輸入 2: nn"<<endl;outfile<<"第 "<<(p+2)/2<<" 學年第 "<<2-(p+1)%2<<" 學期所修學分為:"<<j<<",課程數(shù)為 "<<b3<<endl;/*輸入某學期的信息并顯示*/outfile.close();cin>>ch;if(ch='1') cout<<"請輸入選修課的信息:"&

19、lt;<endl;cout<<"請輸入該課程的課程名: "<<endl;cin>>;cout<<"請輸入該課程的學分:"<<endl;cin>>point1.chour;j+=point1.chour; b3+;cout<<"n請輸入該課程的課序號: "<<endl;cin>>point1.num; point1.nature='選修'cout<<"現(xiàn)在所修學分為

20、:"<<j<<",課程數(shù)為:"<<b3<<"繼續(xù)輸入選修課,請輸入 1 ,否則輸入 2: "<<endl;cin>>ch; return j;int main(AOVGraph AOV200,int b1,float sum2) b1=0; sum2=0;int i,j,a;EdgeNode *ptr;int b2,b3;int k;float sum4;AOV=(AOVGraph *)malloc(sizeof(AOVGraph);cout<<" &

21、quot;<<"*"<<endl;cout<<" "<<"*歡迎進入教學計劃編排系統(tǒng)*"<<endl;cout<<" "<<"班級:數(shù)學類2"<<" "<<"學號:2011434066"<<" "<<"姓名:史寶珠"<<endl;cout<<" &quo

22、t;<<"*"<<endl;cout<<" 由AOV網(wǎng)生成課表nn"cout<<"n請輸入修完課程總的學期數(shù):nn"cin>>a;b2=a;cout<<"n請輸入AOV網(wǎng)中課程的信息:nn" Information(AOV,b1);for(i=0;i<a;i+)cout<<"n第"<<(i+2)/2<<"學年第"<<2-(i+1)%2<<&

23、quot; 學期"<<endl;for(j=0;j<AOV->n;j+) if(AOV->AdjListj.indegree=0&&(AOV->AdjListj.a1='y'|AOV->AdjListj.a1='Y')&&AOV->AdjListj.a11=0&&AOV->AdjListj.a12=0) sum2+=AOV->AdjListj.chour; if(sum2-AOV->sum/b2<AOV->AdjListj.ch

24、our) AOV->AdjListj.a12=1; b1-; b3+; ptr=AOV->AdjListj.firstedge; while(ptr!=NULL) k=ptr->adjevx; AOV->AdjListk.indegree-; ptr=ptr->next; else sum2-=AOV->AdjListj.chour; sum4=jianliAov(i,AOV,b1,sum2);for(j=0;j<AOV->n;j+)if(AOV->AdjListj.indegree=0) AOV->AdjListj.a11=0;AO

25、V->sum=AOV->sum-sum2;sum2=0;b2-;b3=0;if(b1>0)/*對于特殊情況下的課程安排*/cout<<"有課程未修完"<<endl<<" 沒修完的課程為"<<endl;cout<<"課程號"<<"課程名 "<<"學分"<<"課程性質(zhì)"<<endl; for(i=0;i<AOV->n;i+)if(AOV->

26、;AdjListi.a12=0)cout<<AOV->AdjListi.num <<" "<<AOV->AdjL<<" "<<AOV->AdjListi.chour<<" "<<AOV->AdjListi.nature<<endl;cout<<"請增加學期數(shù) "<<endl; else/*對課表的建立是觀看更方便*/ cout<<"課

27、表已經(jīng)生成"<<endl; return 0; 四、調(diào)試分析1.調(diào)試中遇到的問題與對于問題的解決方法:1).遇到的問題:(1)在定義頭文件時,不是少了就是不知道用哪個,總之對于函數(shù)應用在哪個頭文件不明確。(2)在執(zhí)行譯碼操作時,不知什么原因,總是不能按順序直接放在一起,視覺效果不是很好。(3)對于一開始的時候,因為平時很少接觸對于文件寫入、輸出的操作,所以對它特別陌生,我的教學計劃編排沒有像老師要求的那樣完成編一個文件的功能。2).解決方法:(1)在定義頭文件時可多不可少,即我們可多寫些頭文件,肯定不會出錯,但是若沒有定義所引用的相關頭文件,必定調(diào)試不通過,所以每次寫時就

28、多寫寫經(jīng)常用的出來。(2)在網(wǎng)上搜集了大量關于如何實現(xiàn)屏上輸出的程序,經(jīng)過參考寫出了符合自己的對于譯碼在屏上的顯示效果。(3)通過在網(wǎng)上搜索有關文件的應用,還有查看小學期的筆記,還找了大量有關文件輸出、寫入的書籍如精講C+來查找關于文件的內(nèi)容。2.對于這次編寫程序的總結(jié): 通過本次數(shù)據(jù)結(jié)構(gòu)的課程設計,我學習了很多在上課沒懂的知識,并對求教學計劃編排的算法有了更加深刻的了解,更鞏固了課堂中學習有關于編排的知識,真正學會一種算法了。當求解一個算法時,不是拿到問題就不加思索地做,而是首先要先對它有個大概的了解,接著再詳細地分析每一步怎么做,無論自己以前是否有處理過相似的問題,只要按照以上的步驟,必定

29、會順利地做出來。這次課程設計,我在編輯中犯了不應有的錯誤,對文件的操作也很生疏。在不斷分析后明確并改正了錯誤和疏漏,我的程序有了更高的質(zhì)量。 五、使用說明和測試結(jié)果1.進行測試:六、源程序代碼:#include"stdio.h"#include<cstdlib>#include"search.h"#include"fstream.h"#include"string.h"#include"stdlib.h"#include"iostream.h"#define MA

30、X 100#define N 14/cstdlib:search#define M 100ifstream input_file;/文件輸入流及對文件的建立ofstream output_file;/文件輸出流及對文件的讀取typedef struct nodeint adjevx;/*鄰接點域*/struct node *next;/*指向下一個鄰接點的指針域*/EdgeNode;/*邊表結(jié)點*/typedef struct vnode/*頂點表結(jié)點*/int num;/*課程號*/char name25;/*課程名*/float chour;/*課程學分*/int indegree;/*頂

31、點的入度*/char vertex;/*頂點域*/char nature; /*是否為選修課*/char a1;int a11;int a12; EdgeNode *firstedge;VNode;/*邊表的頭指針*/typedef structVNode AdjListMAX;/*鄰接表*/int n;/*頂點數(shù)*/int e;/*邊數(shù)*/float sum;/*總學分*/AOVGraph;typedef structVNode AdjListMAX;int r;int f;Queue;Queue *p;Queue *Init_queue(Queue *p) /構(gòu)建空的隊列p=(Queue

32、*)malloc(sizeof(Queue);p->f=p->r=-1; /運用頭尾指針來判斷隊是否為空return p;int in_queue(Queue *p,VNode srMAX)if(p->r=MAX-1)cout<<"隊滿不可以進行入對操作"<<endl;return -1;elsep->r+;p->AdjListp->p->r=srp->p->r;p->AdjListp->r.num=srp->r.num;p->AdjListp-&g

33、t;r.chour=srp->r.chour;p->AdjListp->r.indegree=srp->r.indegree;p->AdjListp->r.firstedge=srp->r.firstedge;return 1;int out_queue(Queue *p,VNode *sr)if(p->r=-1)cout<<"隊空不能出隊"<<endl;return -1;else*sr=p->AdjListp->f;p->f+;return 1;void Information(A

34、OVGraph AOV200,int b1)/*信息的輸入*/b1=0;int k=0,i=0,j;EdgeNode *Q,*r;AOV->sum=0;cout<<"請依次輸入課程的總數(shù),AOV網(wǎng)中邊的條數(shù)"<<endl;cin>>AOV->n>>AOV->e;for(i=0;i<AOV->n;i+)/*將信息依次輸入*/cout<<"n請輸入AOV網(wǎng)中第 "<<i+1<<" 個頂點的信息,還有"<<AOV-&

35、gt;n-i-1<<" 個頂點沒有輸入:n"<<endl;cout<<"n請輸入該課程的課程名:nn"<<endl;cin>>AOV->AdjL;AOV->AdjListi.nature='M' b1+; cout<<"n請輸入該課程的學分:nn"<<endl; cin>>AOV->AdjListi.chour; AOV->sum+=AOV->AdjListi.chour; c

36、out<<"n請輸入該課程的課序號:nn"<<endl; cin>>AOV->AdjListi.num; cout<<"n請輸入該課程的入度:nn"<<endl; cin>>AOV->AdjListi.indegree; AOV->AdjListi.firstedge=NULL;/*初始化鄰接編表*/ AOV->AdjListi.a12=0; if(AOV->AdjListi.indegree=0) AOV->AdjListi.a11=0; els

37、e AOV->AdjListi.a11=1; cout<<"n以下為輸入AOV網(wǎng)中各條邊的信息:nn"<<endl;/*輸入aov網(wǎng)的有關信息*/cout<<"n請輸入邊的信息(輸入格式為: i:j。i,j分別表示AOV網(wǎng)中<vi,vj>的頂點對應的序號。):nn"<<endl;for(j=1;j<=AOV->e;k+)cout<<"第"<<j<<"條邊的信息"<<endl;cin>&

38、gt;i>>j;Q=(EdgeNode *)malloc(sizeof(EdgeNode);Q->adjevx=j-1;if(AOV->AdjListi-1.firstedge=NULL) AOV->AdjListi-1.firstedge=Q;else r=AOV->AdjListi-1.firstedge; while(r->next!=NULL) r=r->next; r->next=Q;Q->next=NULL;if(AOV->e=k)cout<<"n邊的信息輸入結(jié)束。nn"float j

39、ianliAov(int p,AOVGraph AOV200,int b1,float sum2)/*運用拓撲排序建立AOV網(wǎng)的結(jié)構(gòu)建立教學編排表*/int i;int k;float j;/,aEdgeNode *ptr;int b2=7,b3;VNode point1;sum2=0;char ch;ofstream outfile("n.txt",ios:out);/*對文件的操作進行打開文件操作*/for(i=0;i<AOV->n;i+)if(AOV->AdjListi.indegree=0&&AOV->AdjListi.nat

40、ure='M'&&AOV->AdjListi.a11=0&&AOV->AdjListi.a12=0)sum2+=AOV->AdjListi.chour;if(sum2-AOV->sum/b2<AOV->AdjListi.chour)/*將輸入的信息有序的進行存入文件*/cout<<"課程號"<<"課程名 "<<"學分"<<"課程性質(zhì)"<<endl;cout<<A

41、OV->AdjListi.num <<" "<<AOV->AdjL<<" "<<AOV->AdjListi.chour<<" "<<AOV->AdjListi.nature<<endl;outfile<<"課程號"<<"課程名 "<<"學分"<<"課程性質(zhì)"<<endl;o

42、utfile<<AOV->AdjListi.num <<" "<<AOV->AdjL<<" "<<AOV->AdjListi.chour<<" "<<AOV->AdjListi.nature<<endl;AOV->AdjListi.a12=1;b1-;b3+;ptr=AOV->AdjListi.firstedge;while(ptr!=NULL)k=ptr->adjevx;AOV-

43、>AdjListk.indegree-;ptr=ptr->next;elsesum2-=AOV->AdjListi.chour;/*計算總學分*/ j=sum2;cout<<"第 "<<(p+2)/2<<" 學年第 "<<2-(p+1)%2<<" 學期所修學分為:"<<j<<",課程數(shù)為 "<<b3<<" 如果想修選修課,請輸入1 ,否則輸入 2: nn"<<

44、endl;outfile<<"第 "<<(p+2)/2<<" 學年第 "<<2-(p+1)%2<<" 學期所修學分為:"<<j<<",課程數(shù)為 "<<b3<<endl;/*輸入某學期的信息并顯示*/outfile.close();cin>>ch;if(ch='1') cout<<"請輸入選修課的信息:"<<endl;cout<<

45、;"請輸入該課程的課程名: "<<endl;cin>>;cout<<"請輸入該課程的學分:"<<endl;cin>>point1.chour;j+=point1.chour; b3+;cout<<"n請輸入該課程的課序號: "<<endl;cin>>point1.num; point1.nature='選修'cout<<"現(xiàn)在所修學分為:"<<j<<

46、;",課程數(shù)為:"<<b3<<"繼續(xù)輸入選修課,請輸入 1 ,否則輸入 2: "<<endl;cin>>ch; return j;int main(AOVGraph AOV200,int b1,float sum2) b1=0; sum2=0;int i,j,a;EdgeNode *ptr;int b2,b3;int k;float sum4;AOV=(AOVGraph *)malloc(sizeof(AOVGraph);cout<<" "<<"*"<<endl;cout<<" "<<"*歡迎進入教學計劃編排系統(tǒng)*"<<endl;cout<<" "<<"班級:數(shù)學類2"<<" "<<"學號:2011434066"<<" "<<"姓名:史寶珠"<<e

溫馨提示

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

評論

0/150

提交評論