課程設計報告

2023-01-06 08:30:05 字數 4055 閱讀 9476

班級姓名學號

題目一:建立簡單學生成績錄入系統

一概述:

本程式的目的是儲存學生的資訊,包括學號、姓名、成績。程式執行後,輸入相應的編號可以實現新增、刪除、查詢、列印學生資訊,並且學生資訊輸入完畢後,學生將按照成績由高到低進行排列,這點可以從列印出來的結果看出。

二軟體結構:

本程式主要運用鍊錶的使用規則來進行編寫**,從建立鍊錶到插入鍊錶,以及刪除某個成員和顯示鍊錶等都是用指標來實現的。鍊錶建立如下:

head->

null

從圖我們可以看出,如果要刪除或是查詢某個學生資訊,只需找到head指標,然後用head=head->next,就可以依次找到所需要的東西。

程式執行如下:

新增:刪除:

查詢:列印:

三關鍵**

struct student

;這一段是定義乙個結構體型別student,並且定義乙個指向結構體的next指標,這是後面所有**的鋪墊,可謂是最基本的**,同時也決定了後面的**需實現鍊錶的建立等操作。

if(head==null)

head=dest;

else if(head->score<=dest->score)

dest->next=head;

head=dest;

else

insert(head,dest);

void insert(student *head,student *dest)

temp=temp->next;

}temp->next=dest;

dest->next=null;

這段**實現的是學生按成績高低進行排列,分成三個部分:

第一部分:當head=null;將dest賦給head,相當於新增第乙個成員結構體。

第二部分:需要在鍊錶的最前面新增新成員結構體,dest->next=head;head=dest;運用此**就可以達到目的。

第三部分:需要從鍊錶的第二個成員結構體開始,實現插入新結構體的目的,此時,本程式新建了乙個insert函式,通過呼叫此函式來新增新結構體,insert函式主要是判斷成績的高低,以確定需要插入的位置。

難點**:bool remove(student* &head,float score)

if(head->score==score)

student* pf=head;

student* pc=head->next;

if(pc==null)

return false;

dowhile(pc!=null);

pf->next=pc->next;

delete pc;

return true;

}刪除,這段**是本程式最難的**,它沒有想像的那麼簡單,也需要分成三個部分:

第一部分:如果head=null;return false;

第二部分:如果要刪除的是頭節點,那麼需先拿下頭結點

if(head->score==score)

用delete運算子撤銷空間,並return true。

第三部分:當所要刪除的不是頭結點時,就需要用迴圈來確定位置,並定義另外乙個指標指向它,然後釋放,並且 return true;如果迴圈結束還未找到要刪除的節點,則return false。

本部分重點在於remove函式的返回值,定義的型別為邏輯型,在判斷鍊錶中是否存在所要刪除的節點時,可以從返回值為true 和false 中得到,如果是true,列印「刪除成功」。

題目二:建立簡單聯絡歷史生成系統

一概述:

本程式的目的是記錄聯絡歷史,並把所有記錄儲存在一檔案中,便於檢視。具體目標是可以實現新增、刪除、查詢、儲存和讀取聯絡歷史等操作。

二軟體結構

程式與上一程式不同,利用的結構體陣列的知識,將新增的聯絡歷史儲存在結構體陣列中,之後的操作可以通過for迴圈及其他知識來實現。本程式沒有用指標的方式,原因在於該程式軟體要求能實現檔案的儲存和讀取,用指標的方式很難實現,因此採用陣列的方式以達到要求。

typedef struct phoneitem

pi,*ppi; 此段**是定義phoneitem結構體的內容,包含姓名和**號碼,並且將型別phoneitem簡寫成pi,主要是為了方便以後的**書寫更簡潔。

pi phonerecord[100];這句話就是定義pi型別陣列,陣列名為phonerecord,陣列裡的每個元素包含的內容就是結構體裡定義的姓名和**號碼。通過phonerecord[i].name,phonerecord[i].

phonenum來訪問元素內容。

執行結果如下:

輸入**記錄:

刪除**記錄:

查詢**記錄:

讀取**記錄:

三關鍵**

strcpy(phonerecord[i].name,name);這句話的作用是將當前輸入name 複製給phonerecord[i].name,這其中用了strcpy字串複製函式,而且最簡潔的方式就是運用此種方法。

不能直接賦值過去的原因是name是陣列名,name的值是位址,因而不可以這樣做,以及**中還會用到strcmp函式。

static int i=0;

int index;

cin>>index;

if(index==1)

i+=1;

char name[20];

int phonenum;

cout<<"請輸入資訊:">name>>phonenum;

strcpy(phonerecord[i].name,name);

phonerecord[i].phonenum=phonenum;

}static int i=0;定義乙個區域性靜態變數i,之所以用static的目的是這個i代表的是所新增的陣列元素個數,因為元素個數會因為某些操作而變化,比如刪除某個聯絡歷史等,static的好處在於可以使i 的值保持為當前值且不被釋放,這句話可以稱為是本程式最巧妙的地方。之後的i+=1,是為了改變i的值,以保證i總是所輸入的元素個數。

else if(index==2)

bool flag=false;

int phonenum;

cout<<"請輸入要刪除的**號碼:";

cin>>phonenum;

for(int j=1;j<=i;j++)

if(phonerecord[j].phonenum==phonenum)

for(;j

phonerecord[j].phonenum=phonerecord[j+1].phonenumstrcpy(phonerecord[j].

name,phonerecord[j+1].name);

cout<<"刪除成功!"

break;

if(flag==true)

i-=1;

這部分**是實現刪除聯絡歷史這一操作,這裡也定義bool型的flag來記錄true 和false,通過巢狀迴圈找到要刪除的陣列元素,然後用賦值語句將該陣列元素被下一元素遮蓋,直到陣列末尾,再寫i-=1,將總數組元素個數減一,這樣在以後的儲存和讀取中就不會顯示已刪除的元素,這段**的內涵也較為豐富,知識覆蓋面廣。

ofstream outfile;

"",ios::binary);

if(!outfile)

cout<<"file open error!"

for(int j=1;j<=i;j++)

這段是二進位制檔案的寫入,運用ofstream,因此需要在開頭寫上#include,來包含標頭檔案。這段**是典型二進位制檔案寫入的**。

else if(index==5)

ifstream infile;

"",ios::binary);

if(!infile)

cout<<"file open error!"

pi temp;

for(int j=1;j<=i;j++)

cout<<<<" "<<<

}這段**是二進位制檔案讀取的典型**,與二進位制檔案寫入相反,唯一區別的是定義了pi temp;利用 和來實現陣列元素的顯示。本程式並沒有將聯絡歷史類似程式一那樣進行排列,而是按照輸入的順序來顯示的,這樣從某一方面來可以體現程式的簡潔性。

球閥課程設計報告 ProE課程設計

一.課題名稱 球閥班級 12機自a1 小組成員 李軍帥 組長 李軍帥 二.球閥的功能和工作原理描述 1.球閥的工作原理 球閥的主要驅動原件是裝配於閥杆上端的扳手,球閥的啟閉元件是位於閥桿下端的球體。球閥的主要工作原理是 當給扳手施加某一轉矩,扳手驅動閥桿旋轉,閥桿將扳手的轉矩傳遞給位於閥桿下端的球體...

課程設計報告

數位電路課程設計報告 題目姓名 班級學號 同組人報告得分 南京航空航天大學金城學院 目錄一 課設內容及要求 1 設計任務 2 設計指標 二 設計方案 1 總體設計方案說明 2 模組結構與方框圖 三 電路設計與器件選擇 1 功能模組一 實際名 1 模組電路及引數計算 2 工作原理和功能說明 3 器件說...

課程設計報告

題目院 系電子與資訊工程學院 專業電子資訊科學與技術 班級姓名 設計日期 報告書寫要求 1 報告的撰寫要求條理清晰 語言準確 表述簡明。報告中段首空兩個字元,中文字型為宋體五號,數字 字元 字母為times new roman五號,且單倍行距。2 報告中插圖應與文字緊密配合,文圖相符,技術內容正確。...