求大神幫助怎么做?、
我的任務是身份證號,姓名,畢業學校,學歷
要求如下
撰寫一個鏈表類,要求能實作單鏈表的基本操作。在MFC應用程式中利用撰寫的鏈表類來演示鏈表的作業原理。

要求:
能夠實作入鏈表功能
能夠實作洗掉鏈表任一結點的功能
每個結點的資料包含的資料資訊見“計算機編程實訓任務.xls”,上例中包括(學號,姓名,課程名,成績);
插入的資料能在正確的位置上;
2. 新建專案
1. 新建一個專案
2. 如圖1,模板選“MFC應用程式”
3. 選擇合適的位置和名稱,單擊確定
圖1 選擇模板
3. 應用程式型別如圖2:基于對話框,使用靜態庫中的MFC,不使用Unicode庫(去掉勾選);

4. 選擇“下一步”,用戶界面功能如圖3:最小化框,對話框標題為LinkedList

5. 單擊“完成”,會產生如下檔案:

6. 如果使用VC6,則不需要這一步。在專案“LinkedList”上點單擊右鍵,選屬性,修改c/c++“預編譯頭”改為“不使用預編譯頭”,如圖5,單擊確定。

7.環境配置檢測:

在輸出視窗中應該顯示:

3. 撰寫CLinkedList類
上述作業完成后,在源檔案里新建一個檔案“CLinkedList.cpp”,在頭檔案里新建一個檔案“CLinkedList.h”。
CLinkedList.h包含鏈表類的定義,而CLinkedList.cpp里包含鏈表類的實作。
下面提供一個CLinkedList.h內容例子:
#include <iostream>
using namespace std;
//定義單鏈表類
class CLinkedList
{
public:
struct student
{
long sno; //此次列出一個示例,根據自己的題目實際去定義
???
};
struct node
{
???
};
private: //資料成員
???? //鏈表頭指標
???? //鏈表的長度
public: //成員函式
CLinkedList( ); //建構式,建立空鏈表
~CLinkedList( );
????? //插入一個結點
????? //洗掉元素
????? //獲取鏈表的長度
node* GetHeadAddress( CLinkedList::node** retHead = NULL );
};
在宣告類CLinkedList h之后,需要在CLinkedList.cpp里實作單鏈表的所有功能。
例如:
#include "stdafx.h"
#include "CLinkedList.h"
//建立空鏈表
CLinkedList::CLinkedList( ):head(NULL),Length(0)
{
return;
}
CLinkedList::~CLinkedList( )
{
node* p = NULL;
while( head )
{
??????
??????
??????
??????
}
return;
}
//計算鏈表中的長度
int CLinkedList::GetLength()
{
return Length;
}
//將新元素插入到鏈頭
int CLinkedList::ins_linked_list(student x)
{
node *p=NULL;
??????; //申請新結點存盤空間
??????
??????
??????;//填入新結點的資料域
??????
??????
??????
??????//填入新結點的指標域,指向原鏈表頭結點
??????//鏈表頭指標指向頭新結點
return 1;
}
//洗掉一個結點
int CLinkedList::del_linked_list(long x)
{
node *p,*q;
Length--;
if(head->data.sno==x)//洗掉第一個結點
{
??????
??????
??????
??????
}
q=head; //洗掉一般結點
??????
??????
??????
return(1);
}
//獲得頭節點
CLinkedList::node* CLinkedList::GetHeadAddress( CLinkedList::node** HeadAddress )
{
if ( HeadAddress )
*HeadAddress = head;
return head;
}
其余部分請同學們利用所學的資料結構知識,將功能補充完整。
編譯檢測:
按Ctrl+F7 或選選單生成?編譯,進行編譯在輸出視窗中應該顯示
:

4. 設計用戶界面
如圖

其中1使用List Control,并將其View屬性設定為“report”;
2-5、6是幾個Edit Control,除6之外Edit Control的Read Only屬性需要設定為“false”,
7,8是Button
在2-5 Edit Control前面分別添加合適的“static Text”。
4.1 添加控制元件變數:
表格1 插入控制元件變數
編號 資料型別 名稱 類別
1 CListCtrl oListList Control
2 long Dsno Value
3 CString Dname Value
4 CString Dsubject Value
5 int Dgrade Value
6 CString Dmessage Value
請根據自己需要,靈活定義。
4.2 添加事件:
為控制元件7,8添加” 事件處理程式” ,代碼先不添加.
編號 資料型別 名稱 類別
1 CListCtrl oListList Control
2 long Dsno Value
3 CString Dname Value
4 CString Dsubject Value
5 int Dgrade Value
6 CString Dmessage Value
編譯檢測:
按Ctrl+F7 或選選單生成?編譯,進行編譯在輸出視窗中應該顯示:

5. 撰寫代碼
首先,為鏈表類LinkedListDlg.h添加一些成員變數和成員函式:
(LinkedListDlg.h 檔案應該 #include "CLinkedList.h")
例如本例:在LinkedListDlg 的protected:添加下列成員變數:
CLinkedList LinkedList;
CListCtrl oListList;
long Dsno;
CString Dname;
CString Dsubject;
int Dgrade;
CString Dmessage;
本例:在LinkedListDlg 的public:添加下列成員函式:
void SetDlgDataFromList();
LinkedList是單鏈表類,SetDlgDataFromList的功能是根據鏈表類里的資料來設定對話框中各個控制元件的資料。
在“LinkedListDlg.cpp”里找到LinkedListDlg的OnInitDialog函式,在里面加入一些初始化代碼:
oListList.SetExtendedStyle( LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT );
oListList.InsertColumn( 1, "學號", LVCFMT_LEFT, 90, -1 );
oListList.InsertColumn( 2, "姓名", LVCFMT_LEFT, 65, -1 );
oListList.InsertColumn( 3, "課程", LVCFMT_LEFT, 65, -1 );
oListList.InsertColumn( 4, "成績", LVCFMT_LEFT, 65, -1 );
//SetDlgDataFromList();
Dmessage = "請在“資料”欄內輸入一個整數。";
UpdateData( FALSE );
前四行代碼將List Control控制元件初始化4列。4個引數的含意分別是:列號,標題,對齊方式,寬度,SubItem號。
生成執行檔案:
按Ctrl+F5 或選選單除錯?開始執行,選擇是進行生成執行檔案:

對List Control控制元件的操作見下面的代碼示例,“?”號處根據自己題目要求按需補充完整:
void CLinkedListDlg::SetDlgDataFromList()
{
int vListLength = LinkedList.GetLength();
LVITEM item;
CString strTmp;
item.mask = LVIF_TEXT;
item.iItem = 0;
item.iImage = 0;
oListList.DeleteAllItems(); // 清空List Control內容
if ( vListLength > 0 )
{
int i = 0;
CLinkedList::node *p = LinkedList.GetHeadAddress();
for ( i = 0; i < vListLength; i++, p = p->next )
{
item.iItem = oListList.GetItemCount();
item.iSubItem = 0;
strTmp.Format( "%ld", p->data.sno );
item.pszText = ( LPTSTR )( LPCSTR )strTmp;
oListList.InsertItem( &item ); // 插入一條記錄
item.iSubItem++;
strTmp.Format( "%s", p->data.name );
item.pszText = ( LPTSTR )( LPCSTR )strTmp;
oListList.SetItem( &item )
?????
?????
?????
}
}
UpdateData( FALSE );
}
根據專案實際欄位個數修改CLinkedListDlg程式部分,初始化變數,下面是本例的相關變數:
CLinkedListDlg::CLinkedListDlg(CWnd* pParent /*=NULL*/)
: CDialog(CLinkedListDlg::IDD, pParent)
, Dsno(0)
, Dname(_T(""))
, Dsubject(_T(""))
, Dgrade(0)
, Dmessage(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
根據專案實際欄位個數修改CLinkedListDlg::DoDataExchange程式部分,實作變數和表單控制元件的動態系結, 下面是本例的相關變數:
void CLinkedListDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST1, oListList);
DDX_Text(pDX, IDC_EDIT1, Dsno);
DDX_Text(pDX, IDC_EDIT2, Dname);
DDX_Text(pDX, IDC_EDIT3, Dsubject);
DDX_Text(pDX, IDC_EDIT4, Dgrade);
DDX_Text(pDX, IDC_EDIT5, Dmessage);
}
然后為按鈕加入事件處理函式,“?”號處自己補充
void CLinkedListDlg::OnBnClickedButton1()//添加資料
{
// TODO: 在此添加控制元件通知處理程式代碼
UpdateData();
CLinkedList::student aa;
aa.sno=Dsno;
strcpy(aa.name,Dname);
strcpy(aa.subject,Dsubject);
aa.grade=Dgrade;
if(??????????)
{
?????????;
SetDlgItemText(IDC_EDIT5,"加入資料成功!");
}
else
{
SetDlgItemText(IDC_EDIT5,"加入資料失敗!");
}
}
void CLinkedListDlg::OnBnClickedButton2()//洗掉資料
{
// TODO: 在此添加控制元件通知處理程式代碼
POSITION pos = NULL;
int iItem = 0;
pos = oListList.GetFirstSelectedItemPosition();
if ( NULL == pos )
{
MessageBox( "您沒有選擇任何資料。\n請先選擇一個記錄,再進行洗掉。", "警告" , MB_OK | MB_ICONINFORMATION );
return;
}
else
{
if ( MessageBox( "確定要洗掉這個資料嗎?", "警告" , MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON2 ) == IDNO )
return;
iItem = oListList.GetNextSelectedItem( pos );
CString str;
str=oListList.GetItemText(iItem,0);
long ii;
ii=atol((LPCSTR)str);
??????????????;
?????????????????;
}
UpdateData(FALSE);
}
將所有代碼添加完之后,對程式進行除錯,最終運行界面如圖:生成執行檔案:
按Ctrl+F5 或選選單除錯?開始執行,選擇是進行生成執行檔案:
uj5u.com熱心網友回復:
這作業倒是挺不錯的,只考了鏈表,其他的IDE相關的作業都做好了。。uj5u.com熱心網友回復:
會不。。。。。。。。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/67701.html
標籤:基礎類
下一篇:求助,求助,采納
