班級姓名學號
題目一:建立簡單學生成績錄入系統
一概述:
本程式的目的是儲存學生的資訊,包括學號、姓名、成績。程式執行後,輸入相應的編號可以實現新增、刪除、查詢、列印學生資訊,並且學生資訊輸入完畢後,學生將按照成績由高到低進行排列,這點可以從列印出來的結果看出。
二軟體結構:
本程式主要運用鍊錶的使用規則來進行編寫**,從建立鍊錶到插入鍊錶,以及刪除某個成員和顯示鍊錶等都是用指標來實現的。鍊錶建立如下:
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<<"請輸入資訊:"
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;利用 和來實現陣列元素的顯示。本程式並沒有將聯絡歷史類似程式一那樣進行排列,而是按照輸入的順序來顯示的,這樣從某一方面來可以體現程式的簡潔性。 一.課題名稱 球閥班級 12機自a1 小組成員 李軍帥 組長 李軍帥 二.球閥的功能和工作原理描述 1.球閥的工作原理 球閥的主要驅動原件是裝配於閥杆上端的扳手,球閥的啟閉元件是位於閥桿下端的球體。球閥的主要工作原理是 當給扳手施加某一轉矩,扳手驅動閥桿旋轉,閥桿將扳手的轉矩傳遞給位於閥桿下端的球體... 數位電路課程設計報告 題目姓名 班級學號 同組人報告得分 南京航空航天大學金城學院 目錄一 課設內容及要求 1 設計任務 2 設計指標 二 設計方案 1 總體設計方案說明 2 模組結構與方框圖 三 電路設計與器件選擇 1 功能模組一 實際名 1 模組電路及引數計算 2 工作原理和功能說明 3 器件說... 題目院 系電子與資訊工程學院 專業電子資訊科學與技術 班級姓名 設計日期 報告書寫要求 1 報告的撰寫要求條理清晰 語言準確 表述簡明。報告中段首空兩個字元,中文字型為宋體五號,數字 字元 字母為times new roman五號,且單倍行距。2 報告中插圖應與文字緊密配合,文圖相符,技術內容正確。...球閥課程設計報告 ProE課程設計
課程設計報告
課程設計報告