跳舞搭配問題課程設計報告_第1頁
已閱讀1頁,還剩22頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p> ?。ㄒ唬?PROTEL部分</p><p><b>  1.任務說明:</b></p><p>  (1) 熟練掌握PROTEL軟件的使用;</p><p>  (2) 按要求繪制電路原理圖和PCB版圖(能夠用自動布線和手動布線相結(jié)合);</p><p>  (3) 能夠按要求建立元件庫和封裝庫。&l

2、t;/p><p>  2.原理圖繪制說明:</p><p>  (1)練習學會使用PROTEL 99SE軟件。從中我們要學會使用PROTEL 99SE軟件來繪制任一原理圖以及任一PCB原理圖。首先是安裝這個軟件,在基本掌握這個軟件的使用說明時,開始繪制原理圖。打開PROTEL 99SE,新建一個PROTEL工程,在Document中分別新建一個原理圖,如圖:</p><p&

3、gt;<b>  圖 1新建原理圖</b></p><p>  (2)畫原理圖庫,封裝,和封裝庫。根據(jù)任務書上的電路原理圖,去庫里找相對應的元件對應擺好。由于我這個電路原理圖比較特殊,有單片機數(shù)碼管器件,在庫存里不能找到,需要自己人工繪制且繪制起來比較麻煩,當將這些元器件畫出來并在原理圖中擺好后,將它們再依次連接起來,并用PageUp和PageDown鍵依次為放大、縮小鍵,可以調(diào)節(jié)電路圖的清

4、晰度,便于檢查。檢查無誤后便可以保存原理圖,則原理圖繪制完畢。</p><p>  自己畫40個腳的單片機首先要要去圖1中那樣建立一個自己的元件庫,首先點擊SchematicLibrary,保存到指定的文件夾,然后先畫一個正方形,再加上需要的管腳數(shù),點擊管腳,修改屬性,然后加上元件名稱,保存,自己的元件庫就建立了起來。</p><p>  圖 2自己畫的40個腳單片機</p>

5、<p>  畫好原理圖后,需要對原理圖進行封裝,封裝的方法是,點擊各個元器件,在Footorint欄中填寫上援建的封裝號,如元件數(shù)碼管是一個14個管腳的器件,查的他的封裝號是DIP14,即在Footorint欄中填寫上DIP14,這樣一個元件就封裝完畢,把所有的元件封裝完畢。</p><p>  圖3 電路中的元件進行封裝</p><p>  3、檢查原理圖的正確性和生成網(wǎng)絡表

6、</p><p>  原理圖封裝完畢后,需要檢查原理圖,我們的具體做法是,在PROTEL99界面中點擊Tools下的ERC,然后點擊確定,看是否自己畫的原理圖是不是合格的,有沒有錯誤。</p><p><b>  圖4 檢查原理圖</b></p><p>  在確定自己畫的原理圖沒有錯誤后,需要生成網(wǎng)絡表,生成網(wǎng)絡標的辦法是在Design鍵中找

7、到CreateNetlist,點擊,就生成了自己所畫的正確的原理圖的網(wǎng)絡表。</p><p>  圖5 生成的部分網(wǎng)絡表</p><p>  4、印制PCB版圖繪制說明:</p><p>  在繪制PCB原理圖之前,新建一個PCB Docment,新建PCB Docment,的操作如下圖:</p><p>  圖6 新建一個PCB Docme

8、nt,</p><p>  點擊菜單欄中的文件菜單,新建一個PCB Docment,導入網(wǎng)絡表,便會自動生成PCB原理圖, 用粉色線將原理圖圈至框內(nèi),制成印制板邊框圖,給板布局,使板子既經(jīng)濟又美觀。然后點擊“自動布線”,給板全部布線。但是由于部分原因我們在導入網(wǎng)絡表之后,有的元器件導線,這個時候我們就要從新回到第一步,看自己話的原理圖是否完全正確,一般原理圖出現(xiàn)的問題是我們畫導線時,導線與元器件的接口沒有接好,后

9、導致我們生成的PCB圖中的元器件沒有導線相連,在仔細檢查我們的原理圖后,我們重新生成檢查后的原理圖的網(wǎng)絡表,然后我們在重復建立PCB圖的步驟,,如果我們在確定自己的原理圖正確,但是生成的PCB途中為部分元器件還是沒有導線,這個時候就需要我們自己手動布線,手動布線的方法是:點擊缺少線的元器件的管腳,彈出一個對話框,對話框彈出后點擊Advanced選項,里面有Net選項,對照自己的原理圖,看該元器件的管腳是與那個另外其他的元器件相連,在Ne

10、t中找到該元器件,確定后,導線就相連。導線連接完畢后就是手動布局,首先確定PCB板的大小,我們一定要選擇一個合適的大小,太大浪費板,太小,元件布局不開,自己手動把各個元器件</p><p>  圖7 生成的PCB圖</p><p>  4.對所繪制電路進行簡要分析:</p><p>  該電路由單片機、數(shù)碼管器件、電阻、電容、蜂鳴器、無極性電容等基本元件組成,電路構(gòu)

11、造比較復雜,但是原理比較通俗易懂。制版圖中,同色線沒有相交叉,并且元件引腳均已連接正確,說明電路圖連接準確,可以生成制板。</p><p><b>  5.總結(jié):</b></p><p>  通過PROTEL 99SE軟件的課設,我掌握了PROTEL 99SE軟件的應用方法,加深了我對電路及電子信息工程專業(yè)的了解,也對PCB板的制作有了較深的印象,為以后在電子行業(yè)的發(fā)

12、展,奠定了一定的基礎。通過這次課設也我深刻地體會到身為一名專業(yè)設計人員自身應該具備的嚴謹、細心、負責的工作態(tài)度和作風,為我將來在專業(yè)方面的發(fā)展打下堅實的基礎,但是在做的過程中我也遇到了許多困難,軟件運用不熟悉,原理不太理解等,我及時的向同學和老師請教和答疑,去圖書館查找資料,上網(wǎng)搜索資料,最終克服了重重困難,完成了自己的課程設計,在此過程中收獲很多,在今后的學習過程中我會更加努力,豐富充實自己的知識,完成自己學習任務,為以后的工作等打下

13、一個堅實的基礎。</p><p><b>  6.參考文獻</b></p><p>  1、韓曉東,李勇江.Protel99SE電路設計實用教程.[M]北京:中國鐵道出版社,2007.</p><p>  2、邵建昂.Protel99教學實踐探討.實驗室研究與探索,2007,26(2):100-105.</p><p>

14、  3、文艷等編著.Protel 99 SE電子電路設計.[M]北京:機械工業(yè)出版社,2006.8</p><p>  4、老虎工作室 .Protel 99 SE多層次電路板設計與制作. [M]北京:人民郵電出版社,2007年. 2--18頁。</p><p>  5、莫力.《Protel 99SE電路設計》 北京:國防工業(yè)出版社,2005.01</p><p> 

15、 6、劉天旺主編 .Protel 99 SE電路設計應用教程.[M]北京:電子工業(yè)出版社,2007.8</p><p>  附錄I 電路原理圖</p><p>  附錄II 印制板圖</p><p><b>  (二)軟件設計部分</b></p><p><b>  一、任務說明:</b>

16、</p><p><b>  1.設計內(nèi)容:</b></p><p>  一班有m個女生,有n個男生(m不等于n),現(xiàn)要開一個舞會. 男女生分別編號坐在舞池的兩邊的椅子上.每曲開始時,依次從男生和女生中各出一人配對跳舞, 本曲沒成功配對者坐著等待下一曲找舞伴.</p><p>  請設計一系統(tǒng)模擬動態(tài)地顯示出上述過程,要求如下:</p&g

17、t;<p>  1) 輸出每曲配對情況</p><p>  2) 計算出任何一個男生(編號為X)和任意女生(編號為Y),在第K曲配對跳舞的 情況.至少求出K的兩個值.</p><p><b>  2.需求:</b></p><p>  本課題要對數(shù)目不等的男生女生跳舞進行搭配,設計需要解決每一首曲子

18、 </p><p>  男生女生的搭配情況,要采用循環(huán)隊列的模式來解決,男生和女生各在兩個循環(huán)</p><p>  的隊列中,每首曲子開始,便在兩個隊首各取一人成功配對跳舞,并進入

19、隊尾, </p><p>  等待下一次配對。,通過對兩個循環(huán)隊列的輸出、入列操作,就可以簡單實現(xiàn)要求,動態(tài)的模擬出舞池兩邊那女生的搭配情況.</p><p>  例如:(4男5女情況) </p><p><b>  第一首:男1和女1</b></p><p><b>  第二首:男2和

20、女2</b></p><p><b>  第三首:男3和女3</b></p><p><b>  第四首:男4和女4</b></p><p><b>  第五首:男1和女5</b></p><p>  --------------------------</p

21、><p>  -------------------------</p><p>  -----------------------------</p><p><b>  二、設計過程</b></p><p><b>  1、文字說明:</b></p><p>  要模擬動態(tài)地

22、顯示出現(xiàn)題目中所要求的循環(huán),我們要先建立兩個循環(huán)隊列SqQueue boys和SqQueue girls。</p><p>  將男生、女生兩組人分別存入這兩個隊列。以實現(xiàn)他們的循環(huán)配對輸出。</p><p>  利用循環(huán)隊列的特性,將男女生分別進行入隊列和出隊列操作,實現(xiàn)搭 配輸出。</p><p>  循環(huán)隊列的長度分別設為男女生的個數(shù)。</p>

23、<p>  在計算機終端輸出的結(jié)果是:</p><p>  (1) 輸入數(shù)據(jù)   </p><p>  (2) 輸出每曲配對情況 </p><p>  (3) 輸出第K曲配對情況  </p><p><b>  (4) 退出</b></p><p>

24、<b>  2、程序流程圖:</b></p><p>  為實現(xiàn)上述功能和目的,要用到循環(huán)隊列的相關知識,同時,要定義一定的抽的數(shù)據(jù)類型,主函數(shù)調(diào)用各個函數(shù)模塊</p><p>  1.各模塊函數(shù)介紹:</p><p>  1)class cirularQueue </p><p>  作用:定義一個一個循環(huán)隊列<

25、/p><p>  2)~cirularQueue() </p><p>  作用:定義析構(gòu)函數(shù),使對象在撤銷時釋放</p><p>  3)bool Is Full() </p><p>  作用:判斷隊列是否已滿</p><p>  4)bool IsEmpty() </p><

26、p>  作用:判斷隊列是否為空,用于出隊列前使用</p><p>  5)void push(T info) </p><p>  作用:入隊。每對舞伴跳完舞之后,做入隊處理,到達隊尾,等待下次跳舞。</p><p>  6)void Pop(T &info) </p><p>  作用:出隊。每取曲子響起時男生隊列和女生

27、隊列作出隊處理,兩人跳舞。</p><p>  7)void GetHead(T &info) </p><p>  作用:取隊首元素,對出隊的男女進行識別。</p><p>  8)void Initqueue(cirularQueue<int>&,int);</p><p><b>  作用:初始化隊

28、列</b></p><p>  9)void display(int,int);</p><p>  作用:根據(jù)男生和女生的人數(shù)和曲目的數(shù)目,來判斷每曲歌的男女配對情況</p><p>  10)void charge(int,int);</p><p>  作用:判斷指定組合能否配對成功</p><p>

29、  2.本程序包含三個模塊:</p><p><b>  1)主程序模塊:</b></p><p>  void main()</p><p><b>  {</b></p><p><b>  初始化;</b></p><p><b>  d

30、o{</b></p><p><b>  接受命令;</b></p><p><b>  處理命令;</b></p><p>  }while(“命令”=”退出”) </p><p><b>  }</b></p><p>  2)、集合單元

31、模塊——實現(xiàn)集合的各個函數(shù)模塊</p><p>  3)、結(jié)點結(jié)構(gòu)單元模塊——定義集合的結(jié)點結(jié)構(gòu)</p><p>  3、主框圖和各子框圖模塊設計</p><p>  1) 主函數(shù)調(diào)用關系圖</p><p>  要模擬動態(tài)地顯示出現(xiàn)題目中所要求的循環(huán),我們要先建立兩個循環(huán)隊列SqQueue boys和SqQueue girls。將男生、女生兩

32、組人分別存入這兩個隊列。以實現(xiàn)他們的循環(huán)配對輸出。利用循環(huán)隊列的特性,將男女生分別進行入隊列和出隊列操作,實現(xiàn)搭 配輸出。</p><p>  圖1 主函數(shù)調(diào)用關系</p><p>  為了提高效率和其他原因,引入了初始化列表,因為初始化列表比把組合成員放在構(gòu)造函數(shù)中初始化,省略了調(diào)用組合成員對象的賦值構(gòu)造函數(shù),</p><p>  2)每曲配對函數(shù)調(diào)用關系圖voi

33、d display(int,int)</p><p><b>  否</b></p><p>  是 </p><p>  圖2 每曲配對函數(shù)調(diào)用關系圖</p><p>  4隊滿判斷bool IsFull()</p><p><b&

34、gt;  圖3 隊滿判斷圖</b></p><p>  5對空判斷原則bool IsEmpty()</p><p>  圖4 隊滿判斷空判斷圖</p><p>  6入隊流程void push(T info)</p><p><b>  圖5 入隊滿流程圖</b></p><p>  

35、7出隊流程void Pop(T &info)</p><p>  圖6 出入隊滿流程圖</p><p>  8.取隊首元素代碼void GetHead(T &info)</p><p>  三、調(diào)試過程及實驗結(jié)果</p><p><b>  1、調(diào)試過程</b></p><p> 

36、 一開始的調(diào)試中,做循環(huán)的時候無法是出來的人員回到原來的隊列中,后來詢問老師后,老師幫助改正,隊員能回到了自己的隊列,但再次調(diào)適自己的程序的時候發(fā)現(xiàn),我輸入男生的人數(shù)和女生人數(shù)時,程序總出現(xiàn)了輸入錯誤,自己尋找了很長時間沒有找到,找到同學幫忙,最后發(fā)現(xiàn)是在編寫程序的時候自己把男生和女生的人數(shù)都提前確定了,,所以到后來自己輸入男生和女生的人數(shù)時總是錯誤的,修改完成后最后程序運行時還是有些錯誤和警告,老是提示非法操作。在不斷改善程序后,程序

37、得以順利運行。</p><p><b>  2、實驗結(jié)果</b></p><p>  最后的運行結(jié)果完成了軟件設計任務中的功能如下:</p><p>  1.完成了輸出每曲配對情況的功能</p><p>  2.完成了計算出任何一個男生(編號為X)和任意女生(編號為Y),在第K曲配對跳舞的情況.至少求出K的兩個值.的功能

38、。</p><p> ?。?)程序最初的運行結(jié)果(如圖所示)</p><p>  圖7 程序最初運行圖</p><p> ?。?)各曲配對情況(如圖所示)</p><p>  圖8 各曲配對情況圖</p><p> ?。?)根據(jù)男女編號查找對應的曲數(shù)(能配對)</p><p>  圖9 根據(jù)男女

39、編號查找對應的曲數(shù)圖(能配對)</p><p>  (4)根據(jù)男女編號查找對應的曲數(shù)(不能配對)</p><p>  圖10根據(jù)男女編號查找對應的曲數(shù)圖(不能配對)</p><p><b>  四、結(jié)論</b></p><p>  這次課程設計及運用了C++,程序開始定義了class cirularQueue,其中有頭指

40、針,尾指針等。隨之定義了析構(gòu)函數(shù),釋放對象,然后進行了隊列的基本操作,有隊列的申明,判斷隊空及隊滿,出隊,入隊,其核心是display()函數(shù)和charge()函數(shù),其中display()用于對各位同學編號和每隊的輸出情況,charge()用于計算已編號的同學在第幾曲中進行配對。循環(huán)隊列是一種環(huán)狀的隊列并且對頭元素指向隊尾元素, 運用循環(huán)隊列的基本操作順利的解決學生舞曲搭配問題,主要利用用循環(huán)隊列的環(huán)狀結(jié)構(gòu),循環(huán)地執(zhí)行出列入列操作并在出

41、隊列時進行配對并輸出配對情況,而整個過程不需要不需要移動元素使程序在空間復雜度上 降到最小,采用指針的移動大大加快了程序的執(zhí)行效率。并且對輸入進行了改進,以防止用戶隨意輸入時出現(xiàn)的各種意想不到的錯誤。通過本次課設復習了C語言的知識,對C++的運用驚醒了進一步的掌握,同時我對軟件的編程有了很深的了解,運用方面有了長足的進步,但是在做的過程中我也遇到了許多困難,我及時的向同學和老師請教和答疑,去圖書館查找資料,上網(wǎng)搜索資料,最終克服了重

42、重困難,完成了自己的課程設計,</p><p><b>  五、參考文獻</b></p><p>  1. 譚浩強,《C程序設計》,北京,清華大學出版社,2005</p><p>  2. 劉彥明.《計算機軟件技術(shù)基礎教程》.西安,西安電子科技大學出版社,2001.2</p><p>  3. 王士元,《C高級實用程序設

43、計》,北京,清華大學出版社,1996</p><p>  4. 朱振元.《數(shù)據(jù)結(jié)構(gòu)(C++語言描述) 》 北京: 清華大學出版社,2007</p><p>  5. 鄭紅軍,《C語言程序設計基礎實驗與綜合練習》,武漢,武漢大學出版社,2011.1</p><p>  6. 姜仲秋,《C語言程序設計》,南京,南京大學出版社,1998.1</p><

44、p><b>  附錄I </b></p><p><b>  程序清單</b></p><p>  #include<iostream></p><p>  template <class T></p><p>  class cirularQueue //定義一個一

45、個循環(huán)隊列</p><p>  { private:</p><p>  int MaxSize;</p><p>  int front; //頭指針</p><p>  int rear; //尾指針</p><p><b>  T *data;</b></p>&

46、lt;p><b>  public:</b></p><p>  cirularQueue(int MaxLength)</p><p>  { MaxSize=MaxLength;</p><p>  front=rear=0;</p><p>  data=new T[MaxLength];</p>

47、;<p><b>  }</b></p><p>  ~cirularQueue() //定義析構(gòu)函數(shù),使對象在撤銷時釋放</p><p>  { front=rear=0;</p><p>  delete []data;</p><p><b>  }</b></p>

48、;<p>  void Initqueue() //隊列的申明</p><p>  { for(int i=0;i<maxSize-1;i++)</p><p><b>  push(i);</b></p><p><b>  }</b></p><p>  bool I

49、sFull() //判斷隊列是否已滿 </p><p>  { if((rear+1)%MaxSize==front)</p><p>  return true;</p><p>  else return false; </p><p><b>  }</b></p><p&g

50、t;  bool IsEmpty() //判斷隊列是否為空</p><p>  { if(front==rear)</p><p>  return true;</p><p>  else return false;</p><p><b>  }</b></p><p>  void

51、 push(T info) //入隊</p><p>  { if(IsFull())</p><p>  { cout<<"錯誤!隊列已滿!"<<endl;</p><p><b>  exit(-1);</b></p><p><b>  }<

52、;/b></p><p><b>  else</b></p><p>  { data[rear]=info;</p><p>  rear=(rear+1)%MaxSize;</p><p><b>  }</b></p><p><b>  }<

53、/b></p><p>  void Pop(T &info) //出隊</p><p>  { if(IsEmpty())</p><p>  { cout<<"錯誤!隊列為空!"<<endl;</p><p><b>  exit(-1);</b>

54、</p><p><b>  }</b></p><p><b>  else</b></p><p>  { info=data[front];</p><p>  front=(front+1)%MaxSize;</p><p><b>  }</b&g

55、t;</p><p><b>  }</b></p><p>  void GetHead(T &info) //取隊首元素</p><p>  { if(IsEmpty())</p><p>  { cout<<"錯誤!隊列為空!"<<endl;<

56、/p><p>  exit (-1);</p><p><b>  }</b></p><p><b>  else</b></p><p>  { info=data[front];</p><p><b>  }</b></p><

57、;p><b>  }</b></p><p><b>  }; </b></p><p>  int main() </p><p>  { cout<<"請分別輸入男生和女生的人數(shù):";</p><p>  cin>>

58、m>>n;</p><p>  display(m,n);</p><p>  int a=0,b=0; </p><p>  char quit='y'; </p><p>  while(quit!='n')</p><p>  { cout<<

59、"請輸入男生和女生的編號:";</p><p>  cin>>a>>b;</p><p>  while((a>m)||(b>n)) </p><p>  { cout<<"輸入的編號過大,請重新輸入:";</p><p>  cin>>a

60、>>b;</p><p><b>  } </b></p><p>  charge(a,b);</p><p>  cout<<"是否繼續(xù)(是請輸入'y',否則請輸入'n'):";</p><p>  cin>>quit;<

61、/p><p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  void Initqueue(cirularQueue<int> &Q,int m) //初始化隊列<

62、;/p><p>  { for(int i=1;i<=m;i++)</p><p>  Q.push(i);</p><p><b>  }</b></p><p>  void display(int m,int n)</p><p>  { cirularQueue<int&

63、gt; man(m+1);</p><p>  cirularQueue<int> woman(n+1);</p><p>  Initqueue(man,m);</p><p>  Initqueue(woman,n);</p><p>  cout<<"請輸入曲目數(shù):";</p>

64、<p>  cin>>songnum;</p><p>  cout<<"每曲的配對情況為:"<<endl;</p><p>  for(int k=1;k<=songnum;k++)</p><p>  { int x=0,y=0; //男生和女生的編號</p><p

65、>  man.Pop(x); //男生按順序出隊跳舞</p><p>  woman.Pop(y); //女生按順序出隊跳舞</p><p>  cout<<"第"<<k<<"曲:\t"<<x<<"號男生<->"<<y<

66、<"號女生"<<endl; //他們在一起跳舞</p><p>  man.push(x); //跳完舞后男生再次進入隊列等在下一次跳舞</p><p>  woman.push(y); //跳完舞后男生再次進入隊列等在下一次跳舞</p><p><b>  }</b></p>&l

67、t;p><b>  }</b></p><p>  void charge(int a,int b)</p><p>  { int count=0; //定義舞曲計數(shù)以記錄他們能在第幾曲時在一起跳舞</p><p>  cirularQueue<int> man1(m+1);</p><p>  c

68、irularQueue<int> woman1(n+1);</p><p>  Initqueue(man1,m);</p><p>  Initqueue(woman1,n);</p><p>  while(count<=songnum)</p><p>  { int x, y;</p><p&g

69、t;<b>  count++;</b></p><p>  man1.Pop(x);</p><p>  woman1.Pop(y);</p><p>  man1.push(x);</p><p>  woman1.push(y);</p><p>  if((x==a)&&(

70、y==b)) </p><p>  { cout<<"第"<<count<<"首曲:\t"<<a<<"號男生<->"<<b<<"號女生"<<endl;</p><p><b>  brea

71、k;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //如果他們在這個舞會上不能在一起跳舞,則輸出</p><p>  if(count==songnum+1)</p><p>  cout<&l

溫馨提示

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

評論

0/150

提交評論