欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      Windows程序課程設(shè)計(jì)報(bào)告

      時(shí)間:2019-05-14 00:00:43下載本文作者:會(huì)員上傳
      簡(jiǎn)介:寫寫幫文庫(kù)小編為你整理了多篇相關(guān)的《Windows程序課程設(shè)計(jì)報(bào)告》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫(kù)還可以找到更多《Windows程序課程設(shè)計(jì)報(bào)告》。

      第一篇:Windows程序課程設(shè)計(jì)報(bào)告

      window程序課程設(shè)計(jì)

      簡(jiǎn)單的學(xué)生信息 管理應(yīng)用程序

      學(xué)生姓名: 韓 慧 學(xué)生學(xué)號(hào): 031140312 班 級(jí): 031140--3

      二〇一三年十二月

      簡(jiǎn)單的學(xué)生信息管理應(yīng)用程序

      一、設(shè)計(jì)目的、內(nèi)容及要求 1.1設(shè)計(jì)目的

      1.了解Windows編程的基礎(chǔ)知識(shí),掌握MFC應(yīng)用程序的基本知識(shí);2.基本掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思路和方法; 3.掌握用VC++開(kāi)發(fā)應(yīng)用程序的的一般步驟和方法;

      1.2設(shè)計(jì)內(nèi)容

      利用所學(xué)的基本知識(shí), 設(shè)計(jì)一個(gè)簡(jiǎn)單的學(xué)生信息管理應(yīng)用程序,具有以下功能:①實(shí)現(xiàn)學(xué)生信息的存儲(chǔ),可以用文件來(lái)實(shí)現(xiàn)。②編程實(shí)現(xiàn)學(xué)生信息的添加、刪除、修改、瀏覽和查詢等功能。

      1.3設(shè)計(jì)要求

      1.用VC++進(jìn)行編碼,實(shí)現(xiàn)應(yīng)用程序的功能。注重編碼質(zhì)量,代碼要有適當(dāng)?shù)淖⑨專?/p>

      2.采用單文檔多視圖方式,左邊為樹(shù)視圖,右邊為列表視圖,左邊一級(jí)節(jié)點(diǎn)為中原工學(xué)院,二級(jí)節(jié)點(diǎn)為計(jì)算機(jī)學(xué)院和軟件學(xué)院,三級(jí)節(jié)點(diǎn)為計(jì)算機(jī)學(xué)院的三個(gè)專業(yè)。要求可以動(dòng)態(tài)增加節(jié)點(diǎn)。樓便為列表視圖,包含學(xué)生的學(xué)號(hào)、性別、姓名各科成績(jī)等。右邊也可以實(shí)現(xiàn)動(dòng)態(tài)增加

      3.當(dāng)選中節(jié)點(diǎn)時(shí),顯示對(duì)應(yīng)的學(xué)生信息。如當(dāng)選中”中原工學(xué)院”時(shí)選中所用的學(xué)生信息,選中“計(jì)算機(jī)學(xué)院”時(shí),顯示所有計(jì)算機(jī)學(xué)院學(xué)生信息 4.采用序列化方式保存和讀取學(xué)生信息

      二、主要的數(shù)據(jù)結(jié)構(gòu)

      1.?dāng)?shù)組集合類: CObArray m_stuObArray;2.樹(shù):

      3.序列化類數(shù)據(jù)

      三、基本思路

      基于樹(shù)視圖類建立單文檔應(yīng)用程序,插入列表視圖類,切分窗口,左邊為樹(shù)視圖,右邊為列表視圖。插入學(xué)生信息對(duì)話框,創(chuàng)建序列化類,并利用數(shù)組集合類儲(chǔ)存學(xué)生信息。在主菜單中添加添加、修改、刪除、查詢菜單,并在文 3 檔類中一一添加其映射函數(shù)。在列表視圖類寫入輸出函數(shù),在樹(shù)視圖類中添加click映射函數(shù),調(diào)用列表試圖中的輸出函數(shù),是兩個(gè)視圖之間建立關(guān)系。

      四、步驟及主要代碼

      4.1設(shè)計(jì)并創(chuàng)建切分窗口完善視圖

      1.用MFC AppWizard(exe)創(chuàng)建一個(gè)單文檔應(yīng)用程序Student。在第六步中將視圖類的基類選擇為CtreeView。

      2.用MFC ClassWizard添加一個(gè)新的ClistView的派生類ClistView。打開(kāi)CmainFrame.h文件,為CmainFrame類添加下列變量成員: public: CSplitterWnd m_wndSplitter;3.用MFC ClassWizard為CMainFrame類添加OnCreatClient函數(shù),并添加下列代碼:

      BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext){ m_wndSplitter.CreateStatic(this,1,2);m_wndSplitter.SetRowInfo(0,400,0);m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CStudentView),CSize(400,600),pContext);m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(ClistView),CSize(400,600),pContext);return TRUE;} 4.在MainFrm.cpp的前面添加下列語(yǔ)句: #include “MainFrm.h” #include “StudentView.h” #include “l(fā)istView.h” 在StudentView.cpp的前面添加下列下列語(yǔ)句: #include “StudentDoc.h” 4 #include “StudentView.h” #include “l(fā)istView.h” 在StudentDoc.cpp的前面添加: #include “StudentDoc.h” #include “l(fā)istView.h” #include “StudentView.h” 打開(kāi)StudentView.h文件,在class CStudentView : public CtreeView語(yǔ)句前面添加: class CStudentDoc;class CStudentView : public CTreeView 5.為CstudentView添加void類型函數(shù)creatTree()函數(shù),并添加下列代碼

      void CStudentView::creatTree(){ CTreeCtrl& m_TreeCtrl = GetTreeCtrl();m_TreeCtrl.DeleteAllItems();HTREEITEM hRoot,hParent,hChild,pS;hRoot=m_TreeCtrl.InsertItem(“中原工學(xué)院”,0,1);hParent=m_TreeCtrl.InsertItem(“計(jì)算機(jī)學(xué)院”,hRoot);m_TreeCtrl.InsertItem(“網(wǎng)絡(luò)工程”,hParent);

      m_TreeCtrl.InsertItem(“軟件工程”,hParent);m_TreeCtrl.InsertItem(“計(jì)算機(jī)科學(xué)”,hParent);hParent=m_TreeCtrl.InsertItem(“軟件學(xué)院”,hRoot);BOOL flag=TRUE;CStudentDoc *doc=GetDocument();int nIndex=doc->m_stuObArray.GetSize();for(int n=0;n

      CStudentInfo *stu=(CStudentInfo*)doc->m_stuObArray.GetAt(n);

      CString str1=stu->strSpecial;

      CString str2=stu->strAcademy;

      if(!m_TreeCtrl.ItemHasChildren(hRoot))//判斷根節(jié)點(diǎn)是否有子節(jié)點(diǎn)

      {

      hParent=m_TreeCtrl.InsertItem(str2,hRoot);

      m_TreeCtrl.InsertItem(str1,0,1,hParent);5

      } else {

      hParent=m_TreeCtrl.GetChildItem(hRoot);

      pS=hParent;

      for(;pS!=NULL;pS=m_TreeCtrl.GetNextItem(pS,TVGN_NEXT))

      {

      CString strItem1=m_TreeCtrl.GetItemText(pS);

      if(strItem1==str2)flag=FALSE;

      }

      if(flag)

      {

      hParent=m_TreeCtrl.InsertItem(str2,hRoot);

      m_TreeCtrl.InsertItem(str1,0,1,hParent);

      }

      else

      {

      if(!m_TreeCtrl.ItemHasChildren(hParent))//判斷是否有子節(jié)點(diǎn)

      m_TreeCtrl.InsertItem(str1,0,1,hParent);

      else

      {

      hChild=m_TreeCtrl.GetChildItem(hParent);

      for(;hChild!=NULL;hChild=m_TreeCtrl.GetNextItem(hChild,TVGN_NEXT))

      {

      CString strItem2=m_TreeCtrl.GetItemText(hChild);

      if(strItem2==str1)flag=TRUE;

      }

      if(!flag)m_TreeCtrl.InsertItem(str1,0,1,hParent);

      }

      } } } SetCtrlStyle(m_TreeCtrl.GetSafeHwnd(),TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS);} 6.為CstudentView添加SetCtrlStyle(HWND hWnd, DWORD dwNewStyle)函數(shù),并寫入下列代碼:

      void CStudentView::SetCtrlStyle(HWND hWnd, DWORD dwNewStyle){ LONG lStyle;lStyle = GetWindowLong(hWnd, GWL_STYLE);//獲取當(dāng)前窗口style

      lStyle &= ~LVS_TYPEMASK;//清除顯示方式位

      lStyle |= dwNewStyle;//設(shè)置style

      SetWindowLong(hWnd, GWL_STYLE, lStyle);//設(shè)置style } 7.在CStudentView::OnInitialUpdate中添加一些初始化代碼: void CStudentView::OnInitialUpdate(){ CTreeView::OnInitialUpdate();CTreeCtrl& m_TreeCtrl = GetTreeCtrl();m_TreeCtrl.DeleteAllItems();creatTree();} 8.為ClistView類添加print(CStudentInfo *dlg)和SetCtrlStyle(HWND hWnd,DWORD dwNewStyle)函數(shù),并添入下列代碼: void SetCtrlStyle(HWND hWnd,DWORD dwNewStyle){

      DWORD dwOldStyle;

      dwOldStyle=GetWindowLong(hWnd,GWL_STYLE);

      if((dwOldStyle&LVS_TYPEMASK)!=dwNewStyle)

      {

      dwOldStyle&=~LVS_TYPEMASK;

      dwNewStyle|=dwOldStyle;

      SetWindowLong(hWnd,GWL_STYLE,dwNewStyle);

      } } 7 void ClistView::print(CStudentInfo *dlg){ CListCtrl&m_listctrl=GetListCtrl();m_listctrl.InsertItem(0,dlg->strName);m_listctrl.SetItemText(0,1,dlg->strNO);if(dlg->bMale)

      m_listctrl.SetItemText(0,2,“男”);else

      m_listctrl.SetItemText(0,2,“女”);m_listctrl.SetItemText(0,3,dlg->tBirth.Format(“%Y-%m-%d”));m_listctrl.SetItemText(0,4,dlg->strAcademy);m_listctrl.SetItemText(0,5,dlg->strSpecial);CString str;str.Format(“%d”,dlg->English);m_listctrl.SetItemText(0,6,str);str.Format(“%d”,dlg->Computer);m_listctrl.SetItemText(0,7,str);} 9.在ClistView::OnInitialUpdate中添加初始化代碼: void ClistView::OnInitialUpdate(){ CListView::OnInitialUpdate();

      CListCtrl&m_listctrl=GetListCtrl();SetCtrlStyle(m_listctrl.m_hWnd,LVS_REPORT);for(int n=0;n<8;n++)

      m_listctrl.DeleteColumn(0);CString strHeader[8]={“姓名”,“學(xué)號(hào)”,“性別”,“出生年月”,“學(xué)院”,“專業(yè)”,“英語(yǔ)”,“計(jì)算機(jī)”};int nWidth[8]={100,80,60,100,150,150,80,80};for(int nCol=0;nCol<8;nCol++)

      m_listctrl.InsertColumn(nCol,strHeader[nCol],LVCFMT_LEFT,nWidth[nCol]);} 8 4.2文檔序列化——建立可序列化類

      1.選擇“文件”→“新建”菜單命令,顯示出“新建”對(duì)話框。單擊“文件”標(biāo)簽在左邊的列表框中選擇C/C++ Header File項(xiàng),在右邊的“文件”下的編輯框中鍵入StudentInfo.h,單擊“確定”按鈕。

      2.在文檔窗口中輸入下列代碼: class CStudentInfo:public CObject { public: CString strName;

      //姓名

      CString strNO;

      //學(xué)號(hào)

      BOOL

      bMale;//性別,是否為男

      CTime

      tBirth;//出生年月

      CString strAcademy;//學(xué)院

      CString strSpecial;//專業(yè)

      int English;

      //英語(yǔ)成績(jī)

      int Computer;//計(jì)算機(jī)成績(jī)

      DECLARE_SERIAL(CStudentInfo)//序列化聲明

      public:

      CStudentInfo(){};CStudentInfo(CString name,CString id,BOOL male,CTime birth,CString academy,CString special,int eng,int comp);void Serialize(CArchive &ar);};3.再次選擇““文件”→“新建”菜單命令,顯示出“新建”對(duì)話框。單擊“文件”標(biāo)簽在左邊的列表框中選擇C++ Source File項(xiàng),在右邊的“文件”下的編輯框中鍵入StudentInfo.cpp,單擊“確定”按鈕。

      4.在文檔窗口中輸入下面的代碼: #include “stdafx.h” #include “StudentInfo.h” CStudentInfo::CStudentInfo(CString name,CString id,BOOL male,CTime birth,CString academy,CString special,int eng,int comp)9 { strName=name;strNO=id;bMale=male;tBirth=birth;strAcademy=academy;strSpecial=special;English=eng;Computer=comp;} IMPLEMENT_SERIAL(CStudentInfo,CObject,1)void CStudentInfo::Serialize(CArchive &ar){ if(ar.IsStoring())ar<

      ar>>strName>>strNO>>bMale>>tBirth>>strAcademy>>strSpecial>>English>>Computer;} 4.3添加并處理對(duì)話框

      1.向應(yīng)用程序中添加一個(gè)對(duì)話框資源,標(biāo)題定為“學(xué)生信息管理”,創(chuàng)建此對(duì)話框?yàn)镃stuInfoDlg。

      2.打開(kāi)對(duì)話框網(wǎng)格,參照下圖為對(duì)話框添加控件:

      3.為各個(gè)控件增加成員變量:

      4.為CstuInfoDlg類添加一個(gè)BOOL型成員變量m_bMale,并設(shè)置該變量的初始值:

      CStuInfoDlg::CStuInfoDlg(CWnd* pParent /*=NULL*/): CDialog(CStuInfoDlg::IDD, pParent){ 11 m_bMale=FALSE;//{{AFX_DATA_INIT(CStuInfoDlg)??

      //}}AFX_DATA_INIT } 5.用MFC ClassWizard為單選按鈕IDC_RADIO_MALE添加BN_CLICKED的消息映射,并增加下列代碼: void CstuInfoDlg::OnRadioMale(){

      m_bMale=TRUE; }

      6.用MFC ClassWizard為單選按鈕IDC_RADIO_FEMALE添加BN_CLICKED的消息映射,并增加下列代碼: void CstuInfoDlg::OnRadioFemale(){

      m_bMale=FALSE; }

      7.再添加一個(gè)對(duì)話框資源,標(biāo)題認(rèn)定為“學(xué)生信息管理”,創(chuàng)建此對(duì)話框類為CstuDlg。按下圖添加控件,并為控件增加成員變量:

      4.4添加并處理菜單項(xiàng)

      1.在StudentDoc.cpp文件的開(kāi)始處,添加包含CStuInfoDlg和CstuDlg類的頭文件包含。

      #include “StudentDoc.h” #include “StuInfoDlg.h” #include “StuDlg.h” 2.在菜單資源的主菜單中添加頂層菜單項(xiàng)“學(xué)生信息管理(&M)”,在該頂層菜單項(xiàng)中添加子菜單“添加(&A)”(ID_STUINFO_ADD),“修改(&X)”(ID_STUINFO_MODIFY),“刪除(&D)”(ID_STUINFO_DELETE),“查詢(&Q)”(ID_STUINFO_QUERY)。

      3.用MFC ClassWizard為CstudentDoc添加處理菜單項(xiàng)ID_STUINFO_ADD,ID_STUINFO_MODIFY,ID_STUINFO_DELETE和ID_STUINFO_QUERY的 COMMAND的消息,并添加下列代碼: void CStudentDoc::OnStuinfoAdd()//添加 { CStuInfoDlg dlg;BOOL flag=TRUE;//根據(jù)姓名判斷是否已存在if(dlg.DoModal()!=IDOK)return;int nIndex=m_stuObArray.GetSize();for(int n=0;n

      CStudentInfo *stu=(CStudentInfo*)m_stuObArray.GetAt(n);

      if(stu->strName==dlg.m_strName)

      {

      AfxMessageBox(“此學(xué)生信息已存在”);

      flag=FALSE;

      } } 13 if(flag){

      CStudentInfo*pStudent=new CStudentInfo(dlg.m_strName,dlg.m_strNO,dlg.m_bMale,dlg.m_tBirth,dlg.m_strAcademy,dlg.m_strSpecial,dlg.m_english,dlg.m_computer);

      m_stuObArray.Add(pStudent);

      POSITION pos=GetFirstViewPosition();

      CStudentView *stu=(CStudentView*)GetNextView(pos);

      stu->creatTree();

      SetModifiedFlag();//設(shè)置文檔更改標(biāo)志

      UpdateAllViews(NULL);//更新視圖

      } }

      void CStudentDoc::OnStuinfoQuery()//查詢 { CStuDlg dlg;BOOL flag=TRUE;if(dlg.DoModal()!=IDOK)return;int nIndex=m_stuObArray.GetSize();if(nIndex==0)

      AfxMessageBox(“無(wú)學(xué)生信息”);else {

      for(int n=0;n

      {

      CStudentInfo *stu=(CStudentInfo*)m_stuObArray.GetAt(n);

      if(stu->strName==dlg.m_strNm)

      {

      POSITION pos=GetFirstViewPosition();

      GetNextView(pos);

      ClistView *list=(ClistView*)GetNextView(pos);

      CListCtrl&m_list=list->GetListCtrl();

      m_list.DeleteAllItems();14

      list->print(stu);

      flag=FALSE;

      }

      }

      //判斷是否找到

      if(flag)

      AfxMessageBox(“無(wú)此學(xué)生信息”);} } void CStudentDoc::OnStuinfoDelete()//刪除 { CStuDlg dlg;BOOL flag=TRUE;if(dlg.DoModal()!=IDOK)return;int nIndex=m_stuObArray.GetSize();if(nIndex==0)

      AfxMessageBox(“無(wú)學(xué)生信息”);else {

      for(int n=0;n

      {

      CStudentInfo *stu=(CStudentInfo*)m_stuObArray.GetAt(n);

      if(stu->strName==dlg.m_strNm)

      {

      CStudentInfo *stu=(CStudentInfo*)m_stuObArray.GetAt(n);

      delete m_stuObArray.GetAt(n);

      m_stuObArray.RemoveAt(n,1);

      AfxMessageBox(“已刪除”);

      flag=FALSE;

      break;

      SetModifiedFlag();//設(shè)置文檔更改標(biāo)志

      UpdateAllViews(NULL);//更新視圖

      }

      } 15

      //判斷是否找到

      if(flag)

      AfxMessageBox(“無(wú)此學(xué)生信息”);} }

      void CStudentDoc::OnStuinfoModify()//修改 { CStuDlg dlg;CStuInfoDlg dl;BOOL flag=TRUE;if(dlg.DoModal()!=IDOK)return;int nIndex=m_stuObArray.GetSize();if(nIndex==0)

      AfxMessageBox(“無(wú)學(xué)生信息”);else {

      for(int n=0;n

      {

      CStudentInfo *stu=(CStudentInfo*)m_stuObArray.GetAt(n);

      if(stu->strName==dlg.m_strNm)

      {

      dl.m_strName=stu->strName;

      dl.m_strNO=stu->strNO;

      dl.m_bMale=stu->bMale;

      dl.m_tBirth=stu->tBirth;

      dl.m_strAcademy=stu->strAcademy;

      dl.m_strSpecial=stu->strSpecial;

      dl.m_english=stu->English;

      dl.m_computer=stu->Computer;

      dl.DoModal();

      stu->strName=dl.m_strName;

      stu->strNO=dl.m_strNO;

      stu->bMale=dl.m_bMale;16

      }

      }

      stu->tBirth=dl.m_tBirth;

      stu->strAcademy=dl.m_strAcademy;

      stu->strSpecial=dl.m_strSpecial;

      stu->English=dl.m_english;

      stu->Computer=dl.m_computer;

      SetModifiedFlag();//設(shè)置文檔更改標(biāo)志

      UpdateAllViews(NULL);//更新視圖

      flag=FALSE;} } //判斷是否找到 if(flag)AfxMessageBox(“無(wú)此學(xué)生信息”);4.5修改CStudentDoc類代碼

      1.在StudentDoc.h文件的class CStudentDoc : public Cdocument前面,添加包含CStudentInfo類的頭文件。

      #include “StudentInfo.h” 2.為CStudentDoc類添加成員變量: public: CObArray m_stuObArray;3.在CstudentDoc類析構(gòu)函數(shù)CStudentDoc::~CstudentDoc中添加下列代碼: CStudentDoc::~CStudentDoc(){ int nIndex=m_stuObArray.GetSize();while(nIndex--)

      delete m_stuObArray.GetAt(nIndex);m_stuObArray.RemoveAll();} 4.在CStudentDoc::Serialize(CArchive& ar)函數(shù)中添加下列代碼:

      void CStudentDoc::Serialize(CArchive& ar){ if(ar.IsStoring()){

      m_stuObArray.Serialize(ar);} else {

      m_stuObArray.Serialize(ar);} } 5.編譯。

      心得體會(huì)及參考文獻(xiàn)

      1、心得體會(huì)

      兩周的課程設(shè)計(jì)結(jié)束了,在這次的課程設(shè)計(jì)中不僅檢驗(yàn)了我所學(xué)習(xí)的知識(shí),也培養(yǎng)了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在設(shè)計(jì)過(guò)程中,與同學(xué)不斷的探討、學(xué)習(xí)、推敲,無(wú)形中提高了對(duì)Visual C++的理解。

      課程設(shè)計(jì)是對(duì)我們這門課程知識(shí)綜合應(yīng)用的實(shí)踐訓(xùn)練,考察了我們對(duì)所學(xué)知識(shí)的掌握與應(yīng)用程度。對(duì)于編程,老師一直強(qiáng)調(diào)要注重上機(jī)操作,通過(guò)課程設(shè)計(jì),我對(duì)此有了更深的理解。書本上的理論知識(shí)固然重要,但從真正的操作中我們會(huì)收獲更多,有時(shí)自認(rèn)為很合理的邏輯,到了電腦上就是不能運(yùn)行,或得到的并不是自己想要的結(jié)果,這就需要我們不斷的調(diào)試,糾錯(cuò),找出問(wèn)題所在并一一解答,從中我們受益匪淺。

      如今我不再認(rèn)為編程枯燥反而覺(jué)得它很有趣,而且越來(lái)越覺(jué)得這門學(xué)問(wèn)很精深,當(dāng)自己的程序很好的運(yùn)行時(shí),會(huì)有一種小小的成就感。在以后的學(xué)習(xí)中我一定會(huì)再接再厲,不斷提高自己。感謝老師這一學(xué)期的辛勤教導(dǎo)。

      2、參考文獻(xiàn)

      高等院校程序設(shè)計(jì)規(guī)劃教材 《Visual C++ 教程》鄭阿奇 主編 丁有和 編著。

      第二篇:Windows程序設(shè)計(jì)課程設(shè)計(jì)doc

      Windows程序設(shè)計(jì)課程設(shè)計(jì)任務(wù)書 ,課程設(shè)計(jì)題目1: 設(shè)計(jì)一個(gè)簡(jiǎn)單的學(xué)生信息管理應(yīng)用程序

      一、設(shè)計(jì)目標(biāo)與內(nèi)容:

      1.了解Windows編程的基礎(chǔ)知識(shí),掌握MFC應(yīng)用程序的基本知識(shí);2.基本掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思路和方法; 3.掌握用VC++開(kāi)發(fā)應(yīng)用程序的的一般步驟和方法;

      4.能夠利用所學(xué)的基本知識(shí), 設(shè)計(jì)一個(gè)簡(jiǎn)單的學(xué)生信息管理應(yīng)用程序,具有以下功能:①實(shí)現(xiàn)學(xué)生信息的存儲(chǔ),可以用文件來(lái)實(shí)現(xiàn)。②編程實(shí)現(xiàn)學(xué)生信息的添加、刪除、修改、瀏覽和查詢等功能(必須實(shí)現(xiàn)的功能)。二,設(shè)計(jì)要求:

      1.用VC++進(jìn)行編碼,實(shí)現(xiàn)應(yīng)用程序的功能。注重編碼質(zhì)量,代碼要有適當(dāng)?shù)淖⑨專?/p>

      2.采用單文檔多視圖方式,左邊為樹(shù)視圖,右邊為列表視圖,左邊一級(jí)節(jié)點(diǎn)為湖南科技學(xué)院,二級(jí)節(jié)點(diǎn)為計(jì)算機(jī)與通信工程系,三級(jí)節(jié)點(diǎn)為計(jì)算機(jī)系的三個(gè)專業(yè)。要求可以動(dòng)態(tài)增加節(jié)點(diǎn)。樓便為列表視圖,包含學(xué)生的學(xué)號(hào)、性別、姓名各科成績(jī)等。右邊也可以實(shí)現(xiàn)動(dòng)態(tài)增加

      3.當(dāng)選中節(jié)點(diǎn)時(shí),顯示對(duì)應(yīng)的學(xué)生信息。選中“計(jì)算機(jī)系”時(shí),顯示所有計(jì)算機(jī)系學(xué)生信息,如當(dāng)選中”軟件工程專業(yè)”時(shí),顯示本專業(yè)所有的的學(xué)生信息,4.采用序列化方式保存和讀取學(xué)生信息

      提交設(shè)計(jì)報(bào)告一份(課程設(shè)計(jì)任務(wù)書、目錄、主要的數(shù)據(jù)結(jié)構(gòu)、設(shè)計(jì)的基本思路、設(shè)計(jì)的步驟及主要代碼、心得體會(huì)、參考文獻(xiàn))。Windows程序設(shè)計(jì)課程設(shè)計(jì)任務(wù)書 ,課程設(shè)計(jì)題目2: 設(shè)計(jì)一個(gè)簡(jiǎn)單的通訊錄應(yīng)用程序

      一、設(shè)計(jì)目標(biāo)與內(nèi)容:

      1.了解Windows編程的基礎(chǔ)知識(shí),掌握MFC應(yīng)用程序的基本知識(shí);2.基本掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思路和方法; 3.掌握用VC++開(kāi)發(fā)應(yīng)用程序的的一般步驟和方法;

      4.能夠利用所學(xué)的基本知識(shí),設(shè)計(jì)一個(gè)簡(jiǎn)單的通訊錄應(yīng)用程序,具有以下功能:①用文件來(lái)保存通訊錄信息(必須實(shí)現(xiàn)的功能)②編程實(shí)現(xiàn)通訊錄記錄的添加、刪除、修改、瀏覽和查詢(必須實(shí)現(xiàn)的功能)。二,設(shè)計(jì)要求:

      1.用VC++進(jìn)行編碼,實(shí)現(xiàn)應(yīng)用程序的功能。注重編碼質(zhì)量,代碼要有適當(dāng)?shù)淖⑨專?/p>

      2.提交設(shè)計(jì)報(bào)告一份(課程設(shè)計(jì)任務(wù)書、目錄、主要的數(shù)據(jù)結(jié)構(gòu)、設(shè)計(jì)的基本思路、設(shè)計(jì)的步驟及主要代碼、心得體會(huì)、參考文獻(xiàn))。Windows程序設(shè)計(jì)課程設(shè)計(jì)任務(wù)書 ,課程設(shè)計(jì)題目3: 設(shè)計(jì)一個(gè)簡(jiǎn)單的計(jì)算器應(yīng)用程序

      一、設(shè)計(jì)目標(biāo)與內(nèi)容:

      1. 了解Windows編程的基礎(chǔ)知識(shí),掌握MFC應(yīng)用程序的基本知識(shí);2. 基本掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思路和方法; 3. 掌握用VC++開(kāi)發(fā)應(yīng)用程序的的一般步驟和方法;

      4. 能夠利用所學(xué)的基本知識(shí),設(shè)計(jì)一個(gè)簡(jiǎn)單的計(jì)算器應(yīng)用程序,實(shí)現(xiàn)基本的加、減、乘、除、求平方根,求倒數(shù)等基本運(yùn)算(必須實(shí)現(xiàn)的功能),實(shí)現(xiàn)求角度的正弦、余弦、正切等基本運(yùn)算、實(shí)現(xiàn)求指數(shù)、自然對(duì)數(shù)、常用對(duì)數(shù)等基本運(yùn)算(這部分功能選做)。

      5. 在程序中注意處理數(shù)據(jù)和運(yùn)算符的輸入,計(jì)算結(jié)果的顯示。二,設(shè)計(jì)要求:

      1. 用VC++進(jìn)行編碼,實(shí)現(xiàn)應(yīng)用程序的功能。注重編碼質(zhì)量,代碼要有適當(dāng)?shù)淖⑨專?/p>

      2. 提交設(shè)計(jì)報(bào)告一份(課程設(shè)計(jì)任務(wù)書、目錄、設(shè)計(jì)的基本思路、設(shè)計(jì)的步驟及主要代碼、心得體會(huì)、參考文獻(xiàn))。Windows程序設(shè)計(jì)課程設(shè)計(jì)任務(wù)書 ,課程設(shè)計(jì)題目4: 設(shè)計(jì)一個(gè)簡(jiǎn)單的繪圖應(yīng)用程序

      一、設(shè)計(jì)目標(biāo)與內(nèi)容:

      1. 了解Windows編程的基礎(chǔ)知識(shí),掌握MFC應(yīng)用程序的基本知識(shí);2. 基本掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思路和方法; 3. 掌握用VC++開(kāi)發(fā)應(yīng)用程序的的一般步驟和方法;

      4. 能夠利用所學(xué)的基本知識(shí),設(shè)計(jì)一個(gè)簡(jiǎn)單的繪圖應(yīng)用程序,具有以下功能:①具備基本的圖形繪制功能:直線、圓、矩形;(必須實(shí)現(xiàn)的功能)②編輯功能包括:具有橡皮拉線功能,允許鼠標(biāo)拖放,能雙擊選中圖形元素,能刪除和剪切圖形元素,能撤消最近的修改等;(這部分功能選做)③數(shù)據(jù)保存功能:能夠把圖形數(shù)據(jù)保存到文件中必須實(shí)現(xiàn)的功能)。二,設(shè)計(jì)要求:

      1.用VC++進(jìn)行編碼,實(shí)現(xiàn)應(yīng)用程序的功能。注重編碼質(zhì)量,代碼要有適當(dāng)?shù)淖⑨專?/p>

      2.提交設(shè)計(jì)報(bào)告一份(課程設(shè)計(jì)任務(wù)書、目錄、主要的數(shù)據(jù)結(jié)構(gòu)、設(shè)計(jì)的基本思路、設(shè)計(jì)的步驟及主要代碼、心得體會(huì)、參考文獻(xiàn))。Windows程序設(shè)計(jì)課程設(shè)計(jì)任務(wù)書 ,課程設(shè)計(jì)題目5: 設(shè)計(jì)一個(gè)簡(jiǎn)單的聊天應(yīng)用程序

      一、設(shè)計(jì)目標(biāo)與內(nèi)容: 1.了解Windows編程的基礎(chǔ)知識(shí),掌握MFC應(yīng)用程序的基本知識(shí);2.基本掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思路和方法; 3.掌握用VC++開(kāi)發(fā)應(yīng)用程序的的一般步驟和方法;

      4.能夠利用所學(xué)的基本知識(shí),設(shè)計(jì)一個(gè)簡(jiǎn)單的聊天應(yīng)用程序,包括服務(wù)器端和客戶端兩部分,具有以下功能:①實(shí)現(xiàn)局域網(wǎng)內(nèi)多個(gè)人聊天,可以在同一臺(tái)機(jī)器上啟動(dòng)多個(gè)客戶端。客戶端顯示所有在線用戶的聊天稱呼和頭像,用戶可以通過(guò)它選擇談話對(duì)象;②用戶也可以選擇多個(gè)動(dòng)作,設(shè)置字體顏色,“悄悄”地對(duì)某人說(shuō),對(duì)信息進(jìn)行過(guò)濾。③服務(wù)器端可以“踢”人,并可以防止用戶名稱的重復(fù)。二,設(shè)計(jì)要求: 1.用VC++進(jìn)行編碼,實(shí)現(xiàn)應(yīng)用程序的功能。注重編碼質(zhì)量,代碼要有適當(dāng)?shù)淖⑨專?/p>

      2.提交設(shè)計(jì)報(bào)告一份(課程設(shè)計(jì)任務(wù)書、目錄、主要的數(shù)據(jù)結(jié)構(gòu)、設(shè)計(jì)的基本思路、設(shè)計(jì)的步驟及主要代碼、心得體會(huì)、參考文獻(xiàn))。

      說(shuō)明:由于此程序工作量大,可以兩人一組,一人做客戶端程序,一人做服務(wù)器端程序。Windows程序設(shè)計(jì)課程設(shè)計(jì)任務(wù)書 ,課程設(shè)計(jì)題目6: 設(shè)計(jì)一個(gè)簡(jiǎn)單的五子棋游戲

      一、設(shè)計(jì)目標(biāo)與內(nèi)容:

      1.了解Windows編程的基礎(chǔ)知識(shí),掌握MFC應(yīng)用程序的基本知識(shí);2.基本掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思路和方法; 3.掌握用VC++開(kāi)發(fā)應(yīng)用程序的的一般步驟和方法;

      4.能夠利用所學(xué)的基本知識(shí), 設(shè)計(jì)一個(gè)簡(jiǎn)單的學(xué)生信息管理應(yīng)用程序,具有以下功能:①數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì);五子棋棋盤的繪制。②人機(jī)下棋時(shí),計(jì)算機(jī)下棋算法的設(shè)計(jì)。③人機(jī)下棋時(shí),判斷任一方獲勝的算法的設(shè)計(jì)。二,設(shè)計(jì)要求:

      1.用VC++進(jìn)行編碼,實(shí)現(xiàn)應(yīng)用程序的功能。注重編碼質(zhì)量,代碼要有適當(dāng)?shù)淖⑨專?/p>

      2.提交設(shè)計(jì)報(bào)告一份(課程設(shè)計(jì)任務(wù)書、目錄、主要的數(shù)據(jù)結(jié)構(gòu)、設(shè)計(jì)的基本思路、設(shè)計(jì)的步驟及主要代碼、心得體會(huì)、參考文獻(xiàn))。

      第三篇:仿windows JAVA 課程設(shè)計(jì) 記事本

      前言

      隨時(shí)著科學(xué)技術(shù)的快速發(fā)展,計(jì)算機(jī)程序設(shè)計(jì)早已成為了趨勢(shì),JAVA是計(jì)算機(jī)專業(yè)的核心課程,是計(jì)算機(jī)科學(xué)的算法理論基礎(chǔ)和軟件設(shè)計(jì)的技術(shù)基礎(chǔ)。JAVA是實(shí)踐性很強(qiáng)的課程。課程設(shè)計(jì)是加強(qiáng)實(shí)踐能力的一個(gè)強(qiáng)有力手段。要求掌握J(rèn)AVA的應(yīng)用、編寫、上機(jī)調(diào)試的基本方法。本課程設(shè)計(jì)就是主要利用java語(yǔ)言編寫的一個(gè)模仿windows 記事本的較簡(jiǎn)單的程序,實(shí)現(xiàn)了一些基本功能,要求打開(kāi)文件,讀取文件中的文本信息;顯示、編輯修改文本信息;實(shí)現(xiàn)輸入文本文件、控制保存文本信息到指定的文件的功能。

      目 錄

      一、需求分析??????????????1

      二、概要設(shè)計(jì)??????????????1

      三、詳細(xì)設(shè)計(jì)??????????????2

      四、系統(tǒng)調(diào)試分析????????????6

      五、課程設(shè)計(jì)心得體會(huì)??????????7

      六、使用說(shuō)明??????????????7

      七、參考文獻(xiàn)及致謝???????????7

      八、附錄(程序源代碼)?????????7

      一、需求分析

      第 1 頁(yè)

      該課程設(shè)計(jì)報(bào)告里的簡(jiǎn)易記事本程序是使用Java程序設(shè)計(jì)語(yǔ)言編寫的,要求實(shí)現(xiàn)記事本的基本功能,參考了windows中記事本的一些功能。要求打開(kāi)文件,讀取文件中的文本信息;顯示、編輯修改文本信息;實(shí)現(xiàn)新建、打開(kāi)、保存文本文件以及控制保存文本信息到指定的文件的一些基本功能。

      二、概要設(shè)計(jì)

      1.1 系統(tǒng)主要功能

      本程序是利用java程序設(shè)計(jì)語(yǔ)言編寫的一個(gè)簡(jiǎn)單的記事本程序。可以通過(guò)菜單欄和工具欄實(shí)現(xiàn)以下功能:如文件的新建,打開(kāi),保存和退出;對(duì)文件的編輯,如復(fù)制,剪切,粘貼;以及幫助菜單;執(zhí)行完操作后,能夠順利關(guān)閉記事本。

      1.2運(yùn)行環(huán)境要求

      (1)實(shí)現(xiàn)設(shè)計(jì)的系統(tǒng)硬件需求

      硬件配置的基本要求:

      * 586以上的計(jì)算機(jī) * 32MB以上的內(nèi)存 * 彩色顯示器

      * 3.5寸高密軟盤驅(qū)動(dòng)器 * 光盤驅(qū)動(dòng)器

      * 4G以上硬盤空間 * 鼠標(biāo)

      (2)實(shí)現(xiàn)設(shè)計(jì)的系統(tǒng)軟件

      * WINDOWS95或WINDOWS98 * Jcreator Pro全套軟件

      三、詳細(xì)設(shè)計(jì)

      設(shè)計(jì)思路:設(shè)計(jì)一個(gè)EditorDemo類,繼承自JFrame類,并在EditorDemo類利用JtextPane創(chuàng)建面板窗口textPane,利用Jlabel創(chuàng)建狀態(tài)欄 statusBar,利用JFileChooser 創(chuàng)建文件選擇器filechooser,利用JMenuBar創(chuàng)建并實(shí)例化菜單欄,利用JToolBar創(chuàng)建工具欄,再通過(guò)一些具體方法實(shí)現(xiàn)各功能鍵的功能。建立構(gòu)造函數(shù)public EditorDemo();通過(guò)該構(gòu)造函數(shù)實(shí)現(xiàn)記事本程序的主要功能,運(yùn)行時(shí)在主類中通過(guò)調(diào)用該構(gòu)造函數(shù)來(lái)實(shí)現(xiàn)對(duì)記事本程序的基本操作。1:窗口設(shè)計(jì)

      在主接口中設(shè)計(jì)一個(gè)EditorDemo容器繼承自JFrame,并在其中加入菜單欄、工具欄和一個(gè)文本域控件。

      public class EditorDemo extends JFrame

      第 2 頁(yè) JTextPane textPane = new JTextPane();//創(chuàng)建文本窗格,編輯窗口 JFileChooser filechooser = new JFileChooser();//文件選擇器 setJMenuBar(createJMenuBar(actions));//設(shè)置菜單欄 Container container = getContentPane();//得到容器

      container.add(createJToolBar(actions), BorderLayout.NORTH);//工具欄

      container.add(textPane, BorderLayout.CENTER);//增加文本窗格 2:功能設(shè)計(jì)

      (1)在下拉菜單中加入子菜單并進(jìn)行監(jiān)聽(tīng),分別實(shí)現(xiàn)對(duì)文件的操作功能。點(diǎn)擊不同菜單項(xiàng)時(shí),顯示不同接口。

      private JMenuBar createJMenuBar(Action[] actions)//創(chuàng)建菜單欄

      JMenuBar menubar = new JMenuBar();//實(shí)例化菜單欄

      JMenu menuFile = new JMenu(“文件(F)”);//實(shí)例化菜單 JMenu menuEdit = new JMenu(“編輯(E)”);JMenu menuFormat = new JMenu(“格式(O)”);JMenu menuFind = new JMenu(“查找(V)”);JMenu menuAbout = new JMenu(“幫助(H)”);menuFile.add(new JMenuItem(actions[0]));//增加新菜單項(xiàng)

      menuFile.add(new JMenuItem(actions[1]));menuFile.add(new JMenuItem(actions[2]));menuFile.addSeparator();menuFile.add(new JMenuItem(actions[7]));menuEdit.add(new JMenuItem(actions[3]));menuEdit.add(new JMenuItem(actions[4]));menuEdit.add(new JMenuItem(actions[5]));menuAbout.add(new JMenuItem(actions[6]));menubar.add(menuFile);//增加菜單

      menubar.add(menuEdit);menubar.add(menuFormat);menubar.add(menuFind);menubar.add(menuAbout);return menubar;//返回菜單欄 如下圖:

      第 3 頁(yè)

      (2)加入工具欄的功能鍵,通過(guò)工具欄實(shí)現(xiàn)對(duì)文本的基本操作。

      Action[] actions = //Action數(shù)組,各種操作命令

      new NewAction(), new OpenAction(), new SaveAction(), new CutAction(),第 4 頁(yè)

      new CopyAction(), new PasteAction(), new AboutAction(), new ExitAction(), private JToolBar createJToolBar(Action[] actions)//創(chuàng)建工具條

      JToolBar toolBar = new JToolBar();//實(shí)例化工具條

      JButton bt = new JButton(actions[i]);//實(shí)例化新的按鈕

      toolBar.add(bt);//增加按鈕到工具欄 如圖所示:

      (3)對(duì)每個(gè)菜單項(xiàng)進(jìn)行注冊(cè)監(jiān)聽(tīng)。點(diǎn)擊不同功能鍵時(shí),實(shí)現(xiàn)不同的操作,顯示不同的窗口。主要實(shí)現(xiàn)方法代碼如下:

      class NewAction extends AbstractAction { //實(shí)現(xiàn)新建文件命令功能

      第 5 頁(yè) public NewAction(){

      }} public OpenAction(){

      super(“打開(kāi)文本”);} int i = filechooser.showOpenDialog(EditorDemo.this);if(i == JFileChooser.APPROVE_OPTION){ //點(diǎn)擊對(duì)話框中打開(kāi)選項(xiàng)

      File f = filechooser.getSelectedFile();//得到選擇的文件 InputStream is = new FileInputStream(f);//得到文件輸入流

      textPane.read(is, “d”);//讀入文件到文本窗格 ex.printStackTrace();//輸出出錯(cuò)信息 } catch(Exception ex){ }}}} try { public void actionPerformed(ActionEvent e){ super(“新建文本”);} textPane.setDocument(new DefaultStyledDocument());//清空文檔 public void actionPerformed(ActionEvent e){ class OpenAction extends AbstractAction { //實(shí)現(xiàn)打開(kāi)文件命令功能

      //顯示打開(kāi)文件對(duì)話框

      如下圖:

      class SaveAction extends AbstractAction { //實(shí)現(xiàn)保存文本命令

      public SaveAction(){ super(“保存文本”);} public void actionPerformed(ActionEvent e){ int i = filechooser.showSaveDialog(EditorDemo.this);//顯示保存文件對(duì)話框

      if(i == JFileChooser.APPROVE_OPTION){ //點(diǎn)擊對(duì)話框中保存按鈕

      File f = filechooser.getSelectedFile();//得到選擇的文件 try { FileOutputStream out = new FileOutputStream(f);//得到文件輸出流

      out.write(textPane.getText().getBytes());//寫出文件

      } catch(Exception ex){ ex.printStackTrace();//輸出出錯(cuò)信息

      }}}} 如下圖:

      第 6 頁(yè)

      class ExitAction extends AbstractAction { //實(shí)現(xiàn)退出命令

      public ExitAction(){ super(“退出系統(tǒng)”);} public void actionPerformed(ActionEvent e){ System.exit(0);//退出程序}} class CutAction extends AbstractAction { //實(shí)現(xiàn)剪切命令

      public CutAction(){ super(“剪切”);} public void actionPerformed(ActionEvent e){ textPane.cut();//調(diào)用文本窗格的剪切命令}} class CopyAction extends AbstractAction { //實(shí)現(xiàn)拷貝命令

      public CopyAction(){ super(“拷貝”);} public void actionPerformed(ActionEvent e)

      第 7 頁(yè) {textPane.copy();//調(diào)用文本窗格的拷貝命令

      class PasteAction extends AbstractAction { //實(shí)現(xiàn)粘貼命令 public PasteAction(){

      super(“粘貼”);} public void actionPerformed(ActionEvent e){ textPane.paste();//調(diào)用文本窗格的粘貼命令}} class AboutAction extends AbstractAction { //關(guān)于版本命令

      public AboutAction(){ super(“版本”);} public void actionPerformed(ActionEvent e){ String str=“簡(jiǎn)易記事本n版本:1.0n作者:郭孔明n主要功能:實(shí)現(xiàn)簡(jiǎn)單文本編輯。JOptionPane.showMessageDialog(EditorDemo.this, str);//顯示軟件信息 }} 如下圖:

      四、系統(tǒng)調(diào)試分析 1:窗口調(diào)試

      確定主窗體,設(shè)置主窗體的屬性,對(duì)窗體進(jìn)行布局,加入所需控件并對(duì)控件進(jìn)行初始化。在完成所有方法的源代碼編輯后,對(duì)程序進(jìn)行編譯、運(yùn)行!會(huì)出現(xiàn)窗體如下圖:

      第 8 頁(yè)

      2:功能調(diào)試

      對(duì)所有菜單項(xiàng)進(jìn)行注冊(cè)監(jiān)聽(tīng)。在編寫觸發(fā)事件時(shí)執(zhí)行各項(xiàng)操作,包括了一些常用部分的事件處理,實(shí)現(xiàn)各功能鍵的操作。例如 當(dāng)點(diǎn)擊“文件“按鈕是顯示如下窗口:

      當(dāng)需要打開(kāi)已存在的文件時(shí),點(diǎn)擊“打開(kāi)文本”按鈕會(huì)出現(xiàn)如下窗口:

      第 9 頁(yè)

      當(dāng)輸入完文本是要保存的話,點(diǎn)擊“保存文本”會(huì)出現(xiàn)下面的窗口:

      依次調(diào)試其他功能鍵及窗口,直至達(dá)到符合要求的能實(shí)現(xiàn)簡(jiǎn)易的記事本的功能!

      第 10 頁(yè)

      五、課程設(shè)計(jì)心得

      經(jīng)過(guò)java記事本的課程設(shè)計(jì),我在老師的指導(dǎo)下,順利完成該課程設(shè)計(jì)。通過(guò)這次課程設(shè)計(jì),我收獲到了很多,這次JAVA課程設(shè)計(jì)給我的最大的印象就是如果自己有了興趣,就動(dòng)手去做。我加深了對(duì)Java語(yǔ)言的理論知識(shí)的理解;我更加熟練的掌握了Java語(yǔ)言的設(shè)計(jì)能力并且有了實(shí)踐經(jīng)驗(yàn);在設(shè)計(jì)過(guò)程中,學(xué)到了許多老師沒(méi)有在課堂上沒(méi)有教授的知識(shí);加強(qiáng)了對(duì)Java語(yǔ)言的學(xué)習(xí)興趣和好感,很是受益匪淺。

      六、使用說(shuō)明

      本課程設(shè)計(jì)的簡(jiǎn)易計(jì)算本通過(guò)在JAVA平臺(tái)編譯、運(yùn)行源代碼,打開(kāi)計(jì)算本窗口,在編輯區(qū)進(jìn)行文本的輸入,可以使用剪切、拷貝、粘貼等功能鍵,當(dāng)文本輸入完畢后點(diǎn)擊“文件”菜單,選擇下拉菜單中的“保存文本”打開(kāi)“保存”窗口,選擇保存文件的根目錄進(jìn)行保存。當(dāng)需要關(guān)閉窗口時(shí)可通過(guò)“文件”菜單下的“退出系統(tǒng)”選項(xiàng),或者選擇“工具欄”中的“退出系統(tǒng)”按鈕,也可以直接點(diǎn)擊窗口右上角的關(guān)閉圖標(biāo)進(jìn)行關(guān)閉。

      七.參考文獻(xiàn)及致謝

      參考文獻(xiàn):

      洪維恩 何嘉 java 2面向?qū)ο蟪绦蛟O(shè)計(jì).中國(guó)鐵道出版社,2004.2 致謝:

      在本次設(shè)計(jì)的過(guò)程中,各位老師給了我很大的幫助,不僅使我在規(guī)定的時(shí)間內(nèi)完成了系統(tǒng)的設(shè)計(jì),同時(shí)還使我學(xué)到了很多有益的知識(shí)和寶貴的經(jīng)驗(yàn)。在此,我向幫助我的老師們表示最衷心的感謝。由于本人水平有限,其中肯定會(huì)有一些不當(dāng)之處,請(qǐng)老師批評(píng)指正。

      第 11 頁(yè)

      八、附錄(程序源代碼)

      程序源代碼:

      //簡(jiǎn)單的文本編輯器 import java.awt.*;import java.awt.event.*;import java.io.*;import javax.swing.*;import javax.swing.text.*;

      public class EditorDemo extends JFrame {

      JTextPane textPane = new JTextPane();//文本窗格,編輯窗口

      JLabel statusBar = new JLabel();//狀態(tài)欄

      JFileChooser filechooser = new JFileChooser();//文件選擇器 public EditorDemo(){ //構(gòu)造函數(shù)

      }

      第 12 頁(yè) super(”簡(jiǎn)易記事本“);//調(diào)用父類構(gòu)造函數(shù) Action[] actions = //Action數(shù)組,各種操作命令

      {

      };new NewAction(), new OpenAction(), new SaveAction(), new CutAction(), new CopyAction(), new PasteAction(), new AboutAction(), new ExitAction(), setJMenuBar(createJMenuBar(actions));//設(shè)置菜單欄 Container container = getContentPane();//得到容器

      container.add(createJToolBar(actions), BorderLayout.NORTH);//增加工具欄 container.add(textPane, BorderLayout.CENTER);//增加文本窗格 container.add(statusBar, BorderLayout.SOUTH);//增加狀態(tài)欄 setVisible(true);//設(shè)置窗口可視

      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//關(guān)閉窗口時(shí)退出程序

      setSize(500, 400);//設(shè)置窗口尺寸

      private JMenuBar createJMenuBar(Action[] actions){ //創(chuàng)建菜單欄

      } private JToolBar createJToolBar(Action[] actions){ //創(chuàng)建工具條

      } class NewAction extends AbstractAction { //新建文件命令

      第 13 頁(yè) JMenuBar menubar = new JMenuBar();//實(shí)例化菜單欄 JMenu menuFile = new JMenu(”文件(F)“);//實(shí)例化菜單 JMenu menuEdit = new JMenu(”編輯(E)“);JMenu menuFormat = new JMenu(”格式(O)“);JMenu menuFind = new JMenu(”查找(V)“);JMenu menuAbout = new JMenu(”幫助(H)“);menuFile.add(new JMenuItem(actions[0]));//增加新菜單項(xiàng) menuFile.add(new JMenuItem(actions[1]));menuFile.add(new JMenuItem(actions[2]));menuFile.addSeparator();menuFile.add(new JMenuItem(actions[7]));menuEdit.add(new JMenuItem(actions[3]));menuEdit.add(new JMenuItem(actions[4]));menuEdit.add(new JMenuItem(actions[5]));menuAbout.add(new JMenuItem(actions[6]));menubar.add(menuFile);//增加菜單 menubar.add(menuEdit);menubar.add(menuFormat);menubar.add(menuFind);menubar.add(menuAbout);return menubar;//返回菜單欄

      JToolBar toolBar = new JToolBar();//實(shí)例化工具條 for(int i = 0;i < actions.length;i++){

      } JButton bt = new JButton(actions[i]);//實(shí)例化新的按鈕 bt.setRequestFocusEnabled(false);//設(shè)置不需要焦點(diǎn) bt.setFont(new Font(”宋體“,Font.PLAIN,12));bt.setBackground(Color.pink);toolBar.add(bt);//增加按鈕到工具欄

      return toolBar;//返回工具欄

      } public NewAction(){ super(”新建文本“);} public void actionPerformed(ActionEvent e){ } textPane.setDocument(new DefaultStyledDocument());//清空文檔

      class OpenAction extends AbstractAction { //打開(kāi)文件命令

      } public OpenAction(){ super(”打開(kāi)文本“);} public void actionPerformed(ActionEvent e){

      } int i = filechooser.showOpenDialog(EditorDemo.this);//顯示打開(kāi)文件對(duì)話框 if(i == JFileChooser.APPROVE_OPTION){ //點(diǎn)擊對(duì)話框中打開(kāi)選項(xiàng)

      } File f = filechooser.getSelectedFile();//得到選擇的文件 try {

      } InputStream is = new FileInputStream(f);//得到文件輸入流 textPane.read(is, ”d“);//讀入文件到文本窗格 ex.printStackTrace();//輸出出錯(cuò)信息 } catch(Exception ex){ class SaveAction extends AbstractAction { //保存命令

      public SaveAction(){ super(”保存文本“);} public void actionPerformed(ActionEvent e){

      int i = filechooser.showSaveDialog(EditorDemo.this);//顯示保存文件對(duì)話框 if(i == JFileChooser.APPROVE_OPTION){ //點(diǎn)擊對(duì)話框中保存按鈕

      File f = filechooser.getSelectedFile();//得到選擇的文件 try { FileOutputStream out = new FileOutputStream(f);//得到文件輸出流

      out.write(textPane.getText().getBytes());//寫出文件 } catch(Exception ex){

      第 14 頁(yè)

      }

      }

      } } ex.printStackTrace();//輸出出錯(cuò)信息

      class ExitAction extends AbstractAction { //退出命令

      } public ExitAction(){ super(”退出系統(tǒng)“);} public void actionPerformed(ActionEvent e){ } System.exit(0);//退出程序

      class CutAction extends AbstractAction { //剪切命令

      } public CutAction(){ super(”剪切“);} public void actionPerformed(ActionEvent e){ } textPane.cut();//調(diào)用文本窗格的剪切命令

      class CopyAction extends AbstractAction { //拷貝命令

      public CopyAction(){

      } super(”拷貝“);} public void actionPerformed(ActionEvent e){ } textPane.copy();//調(diào)用文本窗格的拷貝命令

      class PasteAction extends AbstractAction { //粘貼命令

      public PasteAction(){ super(”粘貼“);} public void actionPerformed(ActionEvent e){

      第 15 頁(yè)

      } } textPane.paste();//調(diào)用文本窗格的粘貼命令

      class AboutAction extends AbstractAction { //關(guān)于選項(xiàng)命令

      public AboutAction(){ super(”版本“);} public void actionPerformed(ActionEvent e){ String str=”簡(jiǎn)易記事本nn版本:1.0n作者:郭孔明n主要功能:實(shí)現(xiàn)簡(jiǎn)單文本編輯。";

      }

      } } JOptionPane.showMessageDialog(EditorDemo.this, str);//顯示軟件信息

      public static void main(String[] args){ new EditorDemo();}

      第 16 頁(yè)

      第四篇:c語(yǔ)言程序貪吃蛇課程設(shè)計(jì)報(bào)告

      高級(jí)語(yǔ)言程序設(shè)計(jì) 課程設(shè)計(jì)報(bào)告

      Experiment Designing reporter 課程名稱:高級(jí)語(yǔ)言程序設(shè)計(jì)

      英文名稱

      : C Program Experiment Designing 專業(yè):自動(dòng)化 111 學(xué)號(hào): XXX 姓名: XXX 指導(dǎo)教師: XXX

      日期:

      2012 年 6月 17日至 2011 年6 月 20 日 山東工商學(xué)院信電學(xué)院 一:課程設(shè)計(jì)內(nèi)容 程序功能介紹

      貪吃蛇游戲是一個(gè)經(jīng)典小游戲,深受眾多玩家喜愛(ài),其規(guī)則是:一條蛇在封閉圍墻里,圍墻里隨機(jī)出現(xiàn)一個(gè)食物,通過(guò)按鍵盤四個(gè)光標(biāo)鍵控制蛇向上下左右四個(gè)方向移動(dòng),蛇頭撞倒食物,則食物被吃掉,蛇身體長(zhǎng)一節(jié),同時(shí)記10分,接著又出現(xiàn)食物,等待蛇來(lái)吃,如果蛇在移動(dòng)中撞到墻或身體交叉蛇頭撞倒自己身體游戲結(jié)束。此游戲不僅能鍛煉人的思維敏捷性,而且還可以提高玩家的邏輯判斷能力。設(shè)計(jì)思路

      我們小組稱設(shè)計(jì)本次課題——貪吃蛇的思路為“貪快速上手貪吃蛇三步曲”: 第一步:

      尋找到一個(gè)真正可以運(yùn)行的已用C編好的貪吃蛇。因?yàn)槲覀儺吘箯奈纯吹竭^(guò)用C編游戲的程序,讓我們兩手一抹黑的開(kāi)始編寫是有一定的困難的,如果我們自己找一個(gè)已經(jīng)設(shè)計(jì)好的程序,以此為跳板實(shí)現(xiàn)我們想要達(dá)到的效果,那么肯定是高效的。所以我們組統(tǒng)一決定,去尋找一個(gè)可以運(yùn)行的C編譯的貪吃蛇。第二步:

      運(yùn)行游戲并了解游戲程序。

      我們認(rèn)為,只有你運(yùn)行并了解一個(gè)游戲,才能知道游戲里需要什么樣的改進(jìn)和創(chuàng)新,如果你自己本身就沒(méi)玩過(guò)這個(gè)游戲,那么你就是再有技術(shù),你也永遠(yuǎn)改進(jìn)和改編不了一個(gè)游戲,因?yàn)槟愀静恢滥阍诟墒裁础?/p>

      同樣重要的是了解游戲程序。因?yàn)橹挥锌炊顺绦?,才能?shí)現(xiàn)對(duì)他的改編,才能游刃有余。第三步:

      尋找模塊并分類,而后進(jìn)行改編。

      尋找到你想要改變的游戲內(nèi)容的控制模塊,比如,我想要增加一堵墻,那么就應(yīng)該找到 void DrawK(void){

      setcolor(11);

      setlinestyle(SOLID_LINE,0,THICK_WIDTH);for(i=200;i<=500;i+=10)

      rectangle(i,200,i+10,209);} 然后要找到:改變蛇初始長(zhǎng)度、顏色、初始位置的模塊,改變蘋果出現(xiàn)位置的模塊,讓蛇見(jiàn)墻死的模塊,讓蛇吃蘋果加長(zhǎng)的模塊???.并且進(jìn)行分類,這樣下次再想實(shí)現(xiàn)某個(gè)目標(biāo)時(shí),可以一目了然的進(jìn)行改編。對(duì)于找到的模塊如何進(jìn)行改編呢?怎么才能知道某個(gè)數(shù)值或函數(shù)代表什么呢? 我們有兩個(gè)方法:

      1.)看名字,比如snakecolor(),很明顯他的意思是蛇的顏色。2.)控制變量猜想,比如設(shè)置墻的時(shí)候for(i=200;i<=500;i+=10);

      rectangle(i,300,i+10,309);中的200,500,300,209 代表什么呢?我們可以猜想:它很像是坐標(biāo)上的(x,y)的格式,是不是呢?可可以先讓其他數(shù)值不變,只讓309改變,改變后發(fā)現(xiàn)上面的墻變粗了,由此可見(jiàn)這個(gè)數(shù)字控制的是一堵墻的最下面一行的坐標(biāo)。

      關(guān)于該程序的相關(guān)分析思路答題模板:

      1.貪吃蛇程序流程圖如下:

      二.貪吃蛇程序的改編:

      經(jīng)過(guò)小組成員的認(rèn)真研究我們對(duì)其進(jìn)行了如下改編 第一步加墻 void DrawK(void){ /*setbkcolor(MAGENTA);*/

      setcolor(5);//

      可以改變顏色

      setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*設(shè)置線型*/ 橫向上的墻:

      for(i=100;i<=600;i+=10)// 本行代表行坐標(biāo)上:100代表墻的初始位置,i<=600代表墻的結(jié)尾。

      {

      rectangle(i,60,i+10,69);//本行代表縱坐標(biāo)上:60代表墻的最上面一行的位置,69代表墻最下面一行的位置。69-60=9,9代表墻塊的厚度 } 縱向上的墻:

      for(i=100;i<=400;i+=10)//本行代表縱坐標(biāo)上:100代表墻的初始位置,i<=400代表墻的結(jié)尾

      {

      rectangle(100,i,109,i+10);//本行代表縱坐標(biāo)上:100代表墻的最左邊面一行的位置,69代表墻最右面一行的位置。69-60=9,9代表墻塊的寬度

      } 我們認(rèn)為本模塊最重要的是for語(yǔ)句控制的坐標(biāo)代表的意思。只要明白了坐標(biāo)的意思,就可以實(shí)現(xiàn)對(duì)游戲的改編。

      第二步就是進(jìn)行對(duì)新加入的墻蛇是否撞上死亡

      讓蛇撞墻死

      if(snake.x[0]>190&&snake.x[0]< 510&&snake.y[0]>=200&&

      snake.y[0]<=215)

      /*其中,對(duì)x,y范圍的控制,實(shí)際是對(duì)蛇撞擊的死亡區(qū)域的限制。*/

      {

      GameOver();/*本次游戲結(jié)束*/

      snake.life=1;/*蛇死*/

      } 相應(yīng)的新添加的墻。

      for(i=200;i<=500;i+=10)/*畫圍墻*/

      {

      rectangle(i,200,i+10,209);/*指定位置*/ 第三步食物的定點(diǎn)出現(xiàn)

      if(food.yes==1)/*需要出現(xiàn)新食物*/ 這里說(shuō)明一下:rand()產(chǎn)生0-65535的數(shù),在limits.h里有定義%400后產(chǎn)生一個(gè)0-399的數(shù)+60 則為 60 –459,即:%400+60意思是在60~399之間隨機(jī)產(chǎn)生一個(gè)數(shù)。

      {

      food.x=rand()%400+60;

      food.y=rand()%350+60;

      while(food.x%10!=0)/*食物隨機(jī)出現(xiàn)后必須讓食物能夠在整格內(nèi),這樣才可以讓蛇吃到*/

      food.x++;

      while(food.y%10!=0)

      food.y++;

      food.yes=0;/*畫面上有食物了*/

      } 如果將food.x=(常數(shù)a)那么食物就會(huì)出現(xiàn)在x=a行的隨機(jī)列,對(duì)于food.y=(常數(shù)b)那么食物就出現(xiàn)在y=b列的隨機(jī)行。

      第四步對(duì)食物墻壁的顏色以及對(duì)蛇的運(yùn)動(dòng)速個(gè)性化調(diào)節(jié)

      setcolor(4);// 對(duì)顏色的調(diào)整 int gamespeed=50000;/*游戲速度自己調(diào)整*/

      通過(guò)改變變量的值,就可以個(gè)性化選擇自己喜歡的顏色,這將是一場(chǎng)別開(kāi)生面的游戲界面。* 紅色代表解析淺藍(lán)代表提示 三.課程設(shè)計(jì)總結(jié) 有言曰:“實(shí)踐出真知”,在這幾天的課程設(shè)計(jì)實(shí)踐中,我們組三人真正的體會(huì)到了這句話的真諦。

      在經(jīng)歷了一學(xué)期的C語(yǔ)言學(xué)習(xí)后,我們從以往的“紙上談兵”直接過(guò)渡到“實(shí)際作戰(zhàn)”。我們實(shí)現(xiàn)了讓靜態(tài)的程序變成動(dòng)態(tài)的游戲效果,雖然我們只是改編了一下別人做好的程序,但我們同樣由此獲益匪淺,感觸頗深,當(dāng)然也發(fā)現(xiàn)了許多自己的不足。

      首先,在我們剛剛進(jìn)行第一步“尋找程序”的時(shí)候,就被擱淺了,因?yàn)槲覀儼l(fā)現(xiàn),在網(wǎng)上能找到一個(gè)真正符合我們使用標(biāo)準(zhǔn)的程序很難,就是找到了幾個(gè)也沒(méi)有能運(yùn)行它們的程序。我們花費(fèi)了前兩天的時(shí)間來(lái)尋找能夠使用的程序和軟件,但最后還是一無(wú)所獲,正當(dāng)我們一籌莫展的時(shí)候,我們的導(dǎo)師——楊老師給我們帶來(lái)了曙光,使得我們?cè)诤诎抵姓业搅讼M墓饷鳎瑮罾蠋熃o我們傳來(lái)了一個(gè)上屆師哥做好的程序,并且把它的運(yùn)行軟件也給了我們,這對(duì)我們來(lái)說(shuō)無(wú)疑是雪中送炭,得到這個(gè)程序后,我們?nèi)齻€(gè)人看到了C語(yǔ)言運(yùn)行一個(gè)游戲的流程和方法,我們腦中也大概有了一個(gè)思路。我們?nèi)齻€(gè)人以此程序?yàn)樘?,直接開(kāi)始對(duì)程序模塊進(jìn)行挑選,因?yàn)槲覀円呀?jīng)浪費(fèi)了兩天,所以我們決定進(jìn)行分工作業(yè),分別去尋找:筑墻模塊,加蘋果模塊,撞墻死模塊。最后我們用了一下午時(shí)間完成了三大步中的前兩大步和第三步的第一部分,剩下的就是最重要而充滿挑戰(zhàn)的改編了,從以上的操作中,讓我們明白了找對(duì)一個(gè)平臺(tái)的重要性,這個(gè)平臺(tái)就是老師給我們的程序,就是我們的前進(jìn)方向。沒(méi)有了方向了的征程,一開(kāi)始就是個(gè)錯(cuò)誤。在我們尋找程序模塊的時(shí)候,我們對(duì)于程序中的很多東西都是模模糊糊的概念,比如struck是什么,比如for語(yǔ)句的使用,以及for語(yǔ)句的循環(huán)體是什么,當(dāng)然我們也發(fā)現(xiàn)了定義字符在長(zhǎng)的程序中的方便與重要性。還有就是我們發(fā)現(xiàn)程序在編寫時(shí)的規(guī)范性很重要,比如同級(jí)別花括號(hào)的位置的對(duì)應(yīng),對(duì)應(yīng)好了,模塊就好找,對(duì)應(yīng)不好就很亂。還有定義函數(shù)及變量的時(shí)候,函數(shù)名字和變量名最好是見(jiàn)名知意,比如我們所看的程序中,gamespeed,snakecolour,food.....在最后的攻堅(jiān)階段,為了實(shí)現(xiàn)對(duì)程序的改編,我們使用控制變量猜想法是正確的選擇,比如設(shè)置墻的時(shí)候for(i=200;i<=500;i+=10);

      rectangle(i,300,i+10,309);中的200,500,300,209 代表什么呢?我們猜想:它很像是坐標(biāo)上的(x,y)的格式,是不是呢?我們先讓其他數(shù)值不變,只讓309改變,改變后發(fā)現(xiàn)上面的墻變粗了,由此我們知道這個(gè)數(shù)字控制的是一堵墻的最下面一行的坐標(biāo)。我們用這個(gè)方法知道了其他很多數(shù)值的用途。我們用這種方法先是知道了如何設(shè)置一堵墻,在我們欣喜設(shè)置一堵墻以后才發(fā)現(xiàn):蛇撞了墻后不死。在我們進(jìn)行了全局來(lái)看以后才知道,原來(lái)設(shè)計(jì)一堵墻,都要再設(shè)計(jì)一個(gè)if語(yǔ)句來(lái)使得蛇在這個(gè)范圍內(nèi)會(huì)死亡。并且我們發(fā)現(xiàn)在設(shè)計(jì)這個(gè)if語(yǔ)句的時(shí)候,不僅要計(jì)算好墻的坐標(biāo),而且還要用好邏輯語(yǔ)言(&&,||?。┩瑫r(shí)語(yǔ)句的運(yùn)算順序也很重要。剛一開(kāi)始我們忽略的&&和關(guān)系運(yùn)算符級(jí)別的高低,使得我們?cè)O(shè)計(jì)的墻,總是撞不死蛇,為此我們很是惱火,著急的組員還在這里發(fā)生了點(diǎn)小摩擦,由此可見(jiàn)C語(yǔ)言的嚴(yán)謹(jǐn)性!

      最后我們又通過(guò)在網(wǎng)上查找信息,知道了隨機(jī)數(shù)發(fā)生器randomize()的用法:rand()=x%+d 意思是說(shuō)在d~(x-1)之間隨機(jī)產(chǎn)生一個(gè)數(shù)字。我們很自然的聯(lián)想到,如果把food.x等于常數(shù)a;把food.y等于一個(gè);x%+d的隨機(jī)數(shù),那不就能固定只在某一行出現(xiàn)蘋果了嗎?所以我們覺(jué)得,充分利用手邊的資源也是很重要的,畢竟C語(yǔ)言很高深,課本上的東西總是有限的,要想知道更多的東西還需多練習(xí),多查閱資料。總之:革命尚未成功,通知還需努力??!四個(gè)人感受: 湯X:

      就我個(gè)人而言,這次課程設(shè)計(jì),我覺(jué)得我最大的收獲就是:我明白了,我們其實(shí)真的沒(méi)那么厲害,我們真的還有很多東西不會(huì),我們真的連課本上的基本東西都沒(méi)掌握,課本上的東西,真的也只是C語(yǔ)言這個(gè)大海中的一滴水而已。而在我本人還沒(méi)有掌握好課本的知識(shí)點(diǎn)的情況下,做起這個(gè)程序自然很費(fèi)事,一個(gè)簡(jiǎn)單的課本P293講到的struct結(jié)構(gòu)體,我一開(kāi)始竟然忘記它是什么意思,不知道它是什么,就更不用談怎么用它了。還有邏輯語(yǔ)言的使用。我想,現(xiàn)在肯定有很多同學(xué)還不知道邏輯運(yùn)算的優(yōu)先次序吧?這個(gè)問(wèn)題我本人在使用邏輯語(yǔ)言的時(shí)候也不太會(huì),還查看了書。像這些小的知識(shí)點(diǎn),我個(gè)人認(rèn)為如果掌握不好的話,是不可能讓整個(gè)大程序運(yùn)行起來(lái)的。還有比如我在遇到程序顯示“else多余”的警告時(shí)候不不知所措,問(wèn)了老師才知道是if()后面加了“;”而且if沒(méi)有用“{}”來(lái)固定范圍,這個(gè)錯(cuò)誤原因是分號(hào)使得if語(yǔ)句結(jié)束了,孤立的else當(dāng)然是多余的了。一個(gè)小小的分號(hào)使得程序無(wú)法運(yùn)行,由此可見(jiàn)在今后的編程中,一定要注意謹(jǐn)慎,仔細(xì)。同時(shí)要注意記住平時(shí)編程的時(shí)候,出現(xiàn)的錯(cuò)誤指示是什么意思。比如這次的“else多余”就是因?yàn)閕f后多了分號(hào)。還有在編程時(shí)候,書寫一定要規(guī)范,特別是if語(yǔ)句的花括號(hào)的位置要對(duì)應(yīng)起來(lái),因?yàn)槲恢脹Q定范圍。注意定義變量和函數(shù)要使用規(guī)范的英文單詞,這樣才能見(jiàn)名知意,為以后修改找變量節(jié)省時(shí)間。對(duì)于這次課題中,“設(shè)計(jì)一個(gè)墻,就要對(duì)應(yīng)一個(gè)函數(shù)舍得蛇撞墻死”,讓我明白,C語(yǔ)言程序中各部分的聯(lián)系性,牽一發(fā)而動(dòng)全身,所以在編程時(shí)一定要注意全局的把握。我們最后還要說(shuō)說(shuō)在編程中,好好利用網(wǎng)絡(luò)資源,因?yàn)檎n本里的東西總是有限的,而C語(yǔ)言又那么高深,像隨機(jī)數(shù)發(fā)生器,還有顏色的定都是我第一次接觸,這些東西的用處可是頗大,以后一定好好學(xué)習(xí)。多看,多練,多總結(jié)。最后還要感謝指導(dǎo)老師,楊老師對(duì)我學(xué)習(xí)的幫助和指導(dǎo)。徐XXX: 剛開(kāi)始拿到題目時(shí)候什么也不會(huì)一片茫然,從網(wǎng)上找了一個(gè)程序一看,太嚇人了,這么長(zhǎng)怎么看啊,而且還是錯(cuò)誤的。沒(méi)辦法只能硬著頭皮去改了,但是在改的過(guò)程中才發(fā)現(xiàn)其實(shí)c語(yǔ)言沒(méi)有想象的那么難而且還很有意思,只是自己平時(shí)沒(méi)有好好學(xué)所以在改的時(shí)候非常吃力,有很多簡(jiǎn)單的知識(shí)都不知道,沒(méi)有記住。沒(méi)辦法只能借助與課本了。但是幾天下來(lái)發(fā)現(xiàn)自己已經(jīng)不再像以前那樣是個(gè)菜鳥(niǎo)了,雖然很多知識(shí)還沒(méi)掌握。同時(shí)在編改程序的時(shí)候切記不能煩躁要靜心慢慢來(lái),好幾次自己都因心燥出現(xiàn)了很多不該出現(xiàn)的錯(cuò)誤浪費(fèi)了很多時(shí)間。

      對(duì)鍵盤的熟悉在編程時(shí)也是很重要的,自己在寫的時(shí)候往往就是跟一指禪差不多眼睛盯著鍵盤打,打錯(cuò)了也不知道最后導(dǎo)致整個(gè)程序都是錯(cuò)誤的,就因?yàn)橐粋€(gè)打錯(cuò)了一個(gè)字母。

      總的來(lái)說(shuō)這次課程設(shè)計(jì)收獲很多,也知道了自己的不足,在以后的學(xué)習(xí)中要多實(shí)踐,實(shí)踐很能提高自己的能力。劉XX:

      4天的C語(yǔ)言課程設(shè)計(jì)上機(jī)學(xué)習(xí)讓我感受頗多,每天都發(fā)現(xiàn)新的問(wèn)題,又不得不絞盡腦汁解決問(wèn)題,心情就像正弦函數(shù),隨著問(wèn)題的出現(xiàn)和解決一起一伏。剛開(kāi)始接觸貪吃蛇的C語(yǔ)言成尋時(shí),看著C-free上面出現(xiàn)的有十幾個(gè)錯(cuò)誤的程序,一片茫然不知所措。只能繼續(xù)在網(wǎng)上搜索錯(cuò)誤較少的程序,并結(jié)合書上的基礎(chǔ)知識(shí)查看錯(cuò)誤所在,最終發(fā)現(xiàn)是不能在C-free中運(yùn)行,只能在mytc5.6上運(yùn)行。

      作為小組中唯一的女生,明顯感覺(jué)有壓力,打字速度不如另外兩個(gè)男生,對(duì)游戲和程序的敏感也不如他們強(qiáng),有種小小的挫敗感。旁邊小組的同學(xué)也給我很大的壓力。他們自己編寫程序,我很佩服他們,越是這樣想。心里越著急,越不能解決問(wèn)題,每當(dāng)感覺(jué)有壓力的時(shí)候,就提醒自己心靜,認(rèn)真的看程序。在學(xué)習(xí)過(guò)程中,深深的發(fā)現(xiàn)了自己的不足之處,對(duì)于C語(yǔ)言,只學(xué)了一點(diǎn)點(diǎn)皮毛東西,想要學(xué)好C語(yǔ)言,編好程序,還要付出很多的努力,還要用更多的時(shí)間來(lái)學(xué)習(xí)C語(yǔ)言這門深?yuàn)W的學(xué)科?,F(xiàn)在只能借用別人已經(jīng)寫好的程序,在別人的基礎(chǔ)上,一點(diǎn)點(diǎn)進(jìn)步和學(xué)習(xí),比如程序中筑墻,需要仿照已有的程序,結(jié)合邏輯運(yùn)算,關(guān)系運(yùn)算和數(shù)學(xué)知識(shí)才能讓蛇撞墻死。蘋果位置的出現(xiàn)也同樣需要進(jìn)一步的搜索,通過(guò)更改食物的橫縱坐標(biāo)以及出現(xiàn)的概率來(lái)確定食物的位置。編寫程序時(shí),也發(fā)現(xiàn)書上的東西對(duì)于程序的某些部分來(lái)說(shuō),沒(méi)有什么作用,顯得太淺顯,想要實(shí)現(xiàn)老師給出的一些要求,還需要實(shí)踐,通過(guò)上機(jī)學(xué)習(xí),自己摸索才能成功。一次次修改,一次次失敗,就像貪吃蛇想方設(shè)法吃蘋果會(huì)Game over,我們只有認(rèn)真學(xué)好基礎(chǔ)理論,并結(jié)合實(shí)踐經(jīng)驗(yàn)才會(huì)取得進(jìn)步。

      在這次學(xué)習(xí)過(guò)程中,我很感謝我的組員,雖然有時(shí)我們的意見(jiàn)出現(xiàn)分歧,但是通過(guò)大家的共同努力,我們收獲了很多,一起討論,一起研究怎樣解決問(wèn)題,對(duì)老師提出的要求個(gè)個(gè)擊破,我們擰成一股繩共同應(yīng)對(duì)問(wèn)題,讓我感受了團(tuán)隊(duì)的力量希望在以后的學(xué)習(xí)過(guò)程中,我們依然能夠互相幫助,共同進(jìn)步。

      五 課程設(shè)計(jì)修改后的程序.加墻

      for(i=200;i<=500;i+=10)/*畫圍墻*/

      {

      rectangle(i,200,i+10,209);/*指定位置1*/

      } for(i=120;i<=200;i+=10)/*畫圍墻*/

      {

      rectangle(100,i,109,i+10);/*指定位置2*/

      } 2.指定位置加蘋果

      if(food.yes==1)/*需要出現(xiàn)新食物*/

      {

      food.x=rand()60;

      food.y=rand()%200+60;

      while(food.x%10!=0)

      food.x++;

      while(food.y%10!=0)

      food.y++;

      food.yes=0;3.指定地方撞墻死

      if(snake.x[0]>190&&snake.x[0]< 510&&snake.y[0]>=200&&

      snake.y[0]<=215)

      {

      GameOver();/*本次游戲結(jié)束*/

      snake.life=1;/*蛇死*/

      } if(snake.x[0]>90&&snake.x[0]<110&&snake.y[0]>=110&&snake.y[0]<=215)

      {

      GameOver();/*本次游戲結(jié)束*/

      snake.life=1;/*蛇死*/

      }

      }

      第五篇:操作系統(tǒng)-課程設(shè)計(jì)報(bào)告-處理機(jī)調(diào)度程序

      操作系統(tǒng)

      課程設(shè)計(jì)報(bào)告

      學(xué)校:廣州大學(xué)

      學(xué)院:計(jì)算機(jī)科學(xué)與教育軟件學(xué)院 班級(jí):計(jì)算機(jī)127班 課題:處理機(jī)調(diào)度程序

      任課老師:陶文正、陳文彬

      姓名:黃俊鵬

      學(xué)號(hào):1200002111 班內(nèi)序號(hào):27 成績(jī):

      日期:2015年1月6日

      一、設(shè)計(jì)目的

      在多道程序和多任務(wù)系統(tǒng)中,系統(tǒng)內(nèi)同時(shí)處于就緒狀態(tài)的進(jìn)程可能有若干個(gè)。也就是說(shuō)能運(yùn)行的進(jìn)程數(shù)大于處理機(jī)個(gè)數(shù)。為了使系統(tǒng)中的進(jìn)程能有條不紊地工作,必須選用某種調(diào)度策略,選擇一進(jìn)程占用處理機(jī)。要求學(xué)生設(shè)計(jì)一個(gè)模擬處理機(jī)調(diào)度算法,以鞏固和加深處理機(jī)調(diào)度的概念。

      二、設(shè)計(jì)要求

      1)進(jìn)程調(diào)度算法包括:時(shí)間片輪轉(zhuǎn)法,短作業(yè)優(yōu)先算法,動(dòng)態(tài)優(yōu)先級(jí)算法。2)可選擇進(jìn)程數(shù)量

      3)本程序包括三種算法,用C語(yǔ)言實(shí)現(xiàn),執(zhí)行時(shí)在主界面選擇算法(可用函數(shù)實(shí)現(xiàn))(進(jìn)程數(shù),運(yùn)行時(shí)間,優(yōu)先數(shù)由隨機(jī)函數(shù)產(chǎn)生)執(zhí)行,顯示結(jié)果。

      三、設(shè)計(jì)思路及算法思想

      1.界面菜單選項(xiàng)

      一級(jí)菜單提供2個(gè)選項(xiàng): ① 自動(dòng)生成進(jìn)程數(shù)量 ② 手動(dòng)輸入所需進(jìn)程數(shù)量

      一級(jí)菜單選擇完畢后進(jìn)入二級(jí)菜單: ① 重新生成進(jìn)程 ② 時(shí)間片輪轉(zhuǎn)法 ③ 短作業(yè)優(yōu)先算法 ④ 動(dòng)態(tài)優(yōu)先級(jí)算法 ⑤ 退出程序

      2.調(diào)度算法

      程序所用PCB結(jié)構(gòu)體

      需要用到的進(jìn)程結(jié)構(gòu)體如上圖所示

      1)時(shí)間片輪轉(zhuǎn)法

      主要是設(shè)置一個(gè)當(dāng)前時(shí)間變量,curTime和時(shí)間片roundTime。

      遍歷進(jìn)程組的時(shí)候,每運(yùn)行一個(gè)進(jìn)程,就把curTime += roundTime。進(jìn)程已運(yùn)行時(shí)間加roundTime

      2)短作業(yè)優(yōu)先算法

      遍歷進(jìn)程組,找到未運(yùn)行完成并且運(yùn)行時(shí)間最短的進(jìn)程,讓它一次運(yùn)行完成,如此往復(fù),直到所有進(jìn)程都運(yùn)行完成為止。

      3)動(dòng)態(tài)優(yōu)先級(jí)算法

      做法跟短作業(yè)優(yōu)先算法類似,此處主要是比較進(jìn)程的優(yōu)先數(shù),優(yōu)先級(jí)高者,先執(zhí)行。直到全部執(zhí)行完畢。當(dāng)一個(gè)進(jìn)程運(yùn)行完畢后,適當(dāng)增減其余進(jìn)程的優(yōu)先數(shù),以達(dá)到動(dòng)態(tài)調(diào)成優(yōu)先級(jí)的效果。

      3.程序流程圖

      四、運(yùn)行截圖

      1)啟動(dòng)后輸入5,生成5個(gè)進(jìn)程

      2)輸入1,選擇時(shí)間片輪轉(zhuǎn)法。

      自動(dòng)輸出結(jié)果,分別是時(shí)間片為1和4的結(jié)果

      3)輸入2,選擇短作業(yè)優(yōu)先算法

      4)輸入3,選擇動(dòng)態(tài)優(yōu)先級(jí)算法

      5)輸入0,重新生成進(jìn)程,再輸入3,生成3個(gè)進(jìn)程,選擇2.短作業(yè)優(yōu)先算法

      6)輸入q,退出

      五、心得體會(huì)

      通過(guò)這次實(shí)驗(yàn),讓我對(duì)操作系統(tǒng)的進(jìn)程調(diào)度有了更進(jìn)一步的了解。這個(gè)實(shí)驗(yàn)的模擬程度跟真實(shí)系統(tǒng)相比只是冰山一角,由此可見(jiàn)操作系統(tǒng)是何其復(fù)雜的軟件產(chǎn)品,僅進(jìn)程調(diào)度就有那么豐富和內(nèi)涵的知識(shí)需要掌握。

      但是再?gòu)?fù)雜的系統(tǒng),都是由小部件構(gòu)成的。古語(yǔ)云:不積跬步,無(wú)以至千里。不積小流,無(wú)以成江海。掌握這些基礎(chǔ)的知識(shí),可以為以后打下扎實(shí)的基礎(chǔ)。

      六、附錄(源代碼)

      //

      // main.c

      // ProcessDispatch //

      // Created by Jeans on 1/5/15.// Copyright(c)2015 Jeans.All rights reserved.//

      #include #include

      //最小進(jìn)程數(shù)

      #define MIN_PROCESS //最大進(jìn)程數(shù)

      #define MAX_PROCESS

      //最小優(yōu)先數(shù)

      #define MIN_PRIORITY

      0 //最大優(yōu)先數(shù)

      #define MAX_PRIORITY

      //最小運(yùn)行時(shí)間

      #define MIN_RUNNING_TIME

      //最大運(yùn)行時(shí)間

      #define MAX_RUNNING_TIME

      typedef struct PCB{

      char name;

      //進(jìn)程名

      int priority;

      //優(yōu)先數(shù)

      int runningTime;

      //運(yùn)行時(shí)間

      int arriveTime;

      //到達(dá)時(shí)間

      int beginTime;

      //開(kāi)始時(shí)間

      int finishTime;

      //完成時(shí)間

      int cyclingTime;

      //周轉(zhuǎn)時(shí)間

      double weigthCyclingTime;//帶權(quán)周轉(zhuǎn)時(shí)間

      int hadRunTime;

      //已經(jīng)運(yùn)行時(shí)間

      int finish;

      //是否完成 }PCB;//獲取隨機(jī)數(shù)

      int GetRandomNumber(int min,int max){

      return arc4random()%(max-min)+ min;}

      //初始化PCB組

      void InitPCBGroup(PCB p[],int num){

      char name = 'A';

      for(int i = 0;i < num;i++){

      p[i].name = name;

      p[i].priority = GetRandomNumber(MIN_PRIORITY, MAX_PRIORITY);

      p[i].runningTime = GetRandomNumber(MIN_RUNNING_TIME,MAX_RUNNING_TIME);

      name++;

      } }

      void PrintResult(PCB p[],int num){

      double avgCycTime = 0,avgWeiCycTime = 0;

      printf(“|進(jìn)程名

      到達(dá)時(shí)間

      運(yùn)行時(shí)間

      開(kāi)始時(shí)間

      完成時(shí)間

      周轉(zhuǎn)時(shí)間

      帶權(quán)周轉(zhuǎn)時(shí)間

      優(yōu)先數(shù)

      |n”);

      for(int i = 0;i < num;i++){

      printf(“|%3c

      %-4d

      %-4d

      %-4d

      %-4d

      %-4d

      %-6.2f

      %-4d|n”,p[i].name,p[i].arriveTime,p[i].runningTime,p[i].beginTime,p[i].finishTime,p[i].cyclingTime,p[i].weigthCyclingTime,p[i].priority);

      avgCycTime += p[i].cyclingTime;

      avgWeiCycTime += p[i].weigthCyclingTime;

      //還原

      p[i].arriveTime = 0;

      p[i].beginTime = 0;

      p[i].finishTime = 0;

      p[i].cyclingTime = 0;

      p[i].weigthCyclingTime = 0;

      p[i].hadRunTime = 0;

      p[i].finish = 0;

      }

      avgWeiCycTime /= num;

      avgCycTime /= num;

      printf(“平均周轉(zhuǎn)時(shí)間:%.2f

      平均帶權(quán)周轉(zhuǎn)時(shí)間:%.2fn”,avgCycTime,avgWeiCycTime);} //時(shí)間片輪轉(zhuǎn)法

      void RealRoundRobin(PCB p[],int num,int roundTime){

      printf(“nn-----------------------------時(shí)間片:%d------n”,roundTime);

      int finishNum = 0;

      int curTime = 0;

      while(finishNum!= num){

      for(int i = 0;i < num;i++){

      if(p[i].finish)continue;

      //開(kāi)始時(shí)間

      if(p[i].beginTime == 0 && i!= 0){

      p[i].beginTime = curTime;

      }

      //已經(jīng)完成

      if(p[i].hadRunTime + roundTime >= p[i].runningTime){

      p[i].finishTime = curTime + p[i].runningTimep[i].arriveTime;

      p[i].weigthCyclingTime = p[i].cyclingTime/(double)p[i].runningTime;

      p[i].finish = 1;

      finishNum ++;

      curTime += p[i].runningTimep[min].arriveTime;

      p[min].weigthCyclingTime = p[min].cyclingTime/(double)p[min].runningTime;

      p[min].finish = 1;

      finishNum++;

      curTime = p[min].finishTime;

      }

      PrintResult(p, num);}

      //動(dòng)態(tài)優(yōu)先級(jí)算法

      void DynamicPriorityFirst(PCB p[],int num){

      printf(“nn-----------------------------動(dòng)態(tài)優(yōu)先級(jí)算法--n”);

      int finishNum = 0;

      int curTime = 0;

      while(finishNum!= num){

      int min = 0;

      //查找優(yōu)先級(jí)最高下標(biāo)

      for(int i = 1;i < num;i++){

      if(p[i].finish == 0 && p[min].priority >= p[i].priority)

      min = i;

      else if(p[i].finish == 0 && p[min].finish == 1)

      min = i;

      }

      p[min].beginTime = curTime;

      p[min].hadRunTime = p[min].runningTime;

      p[min].finishTime = p[min].beginTime + p[min].runningTime;

      p[min].cyclingTime = p[min].finishTime-p[min].arriveTime;

      p[min].weigthCyclingTime = p[min].cyclingTime/(double)p[min].runningTime;

      p[min].finish = 1;

      finishNum++;

      curTime = p[min].finishTime;

      }

      PrintResult(p, num);}

      int main(int argc, const char * argv[]){

      PCB pcbGroup[30];

      //pcb數(shù)組

      int processNum = 0;//進(jìn)程數(shù)

      while(1){

      //選擇進(jìn)程數(shù)量

      while(1){

      if(processNum!= 0)

      break;

      printf(“n----------n”);

      printf(“當(dāng)前默認(rèn)進(jìn)程數(shù)范圍%d--%dn”,MIN_PROCESS,MAX_PROCESS);

      printf(“1)輸入0可隨機(jī)生成進(jìn)程數(shù)目n2)輸入%d-%d范圍內(nèi)數(shù)字,回車,可生成指定數(shù)目進(jìn)程n>>>>>>”,MIN_PROCESS,MAX_PROCESS);

      int num = 0;

      scanf(“%d”,&num);

      if(num == 0){

      processNum = GetRandomNumber(MIN_PROCESS, MAX_PROCESS);

      break;

      }else{

      if((num >= MIN_PROCESS)&&(num <= MAX_PROCESS)){

      processNum = num;

      InitPCBGroup(pcbGroup,processNum);

      break;

      }else

      printf(“n輸入有誤,請(qǐng)重新輸入.n”);

      }

      }

      //選擇算法

      printf(“n-----------------------------請(qǐng)輸入對(duì)應(yīng)選項(xiàng)序號(hào)-----------------------------n”);

      printf(“0.重新生成進(jìn)程 | 1.時(shí)間片輪轉(zhuǎn)法 | 2.短作業(yè)優(yōu)先算法 | 3.動(dòng)態(tài)優(yōu)先級(jí)算法 | q.退出n>>>>>>”);

      char ch;

      while((ch = getchar())== 'n');

      switch(ch){

      case '0'://0 重新生成進(jìn)程

      processNum = 0;break;

      case '1'://1 時(shí)間片輪轉(zhuǎn)法

      RoundRobin(pcbGroup, processNum);break;

      case '2'://2 短作業(yè)優(yōu)先算法

      ShortestJobFirst(pcbGroup, processNum);break;

      case '3'://3 動(dòng)態(tài)優(yōu)先級(jí)算法

      DynamicPriorityFirst(pcbGroup,processNum);break;

      case 'q'://q 退出

      exit(0);

      default:

      break;

      }

      }

      return 0;}

      下載Windows程序課程設(shè)計(jì)報(bào)告word格式文檔
      下載Windows程序課程設(shè)計(jì)報(bào)告.doc
      將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        操作系統(tǒng)課程設(shè)計(jì)--基于Windows進(jìn)程互斥實(shí)現(xiàn)機(jī)制

        學(xué)生姓名:班 學(xué) 號(hào):193121 指導(dǎo)教師:袁國(guó)斌 中國(guó)地質(zhì)大學(xué)計(jì)算機(jī)學(xué)院 2013年 12 月 4 日 操作系統(tǒng)課程實(shí)驗(yàn)報(bào)告 實(shí)習(xí)題目:基于Windows進(jìn)程互斥實(shí)現(xiàn)機(jī)制 【需求規(guī)格說(shuō)明】 基于Mic......

        C語(yǔ)言課程設(shè)計(jì)程序

        #include #include #include struct student { int num; char name[15]; //定義學(xué)生結(jié)構(gòu)體,st數(shù)組。int score[5]; float jqave; int rank; }st[27]; struct kecheng......

        數(shù)字鐘課程設(shè)計(jì)程序(精選5篇)

        #includevoid chuanshu(void); void shuchu(void); void saomiao(void); void delay (void);unsigned int t; unsigned char m; unsigned char shi,fen,miao;unsigned char......

        高頻課程設(shè)計(jì)報(bào)告

        一 設(shè)計(jì)課題名稱 單邊帶調(diào)制解調(diào)電路的設(shè)計(jì) 二 課程設(shè)計(jì)目的、要求與技術(shù)指標(biāo) 2.1 課程設(shè)計(jì)目的 (1) 鞏固所學(xué)的相關(guān)理論知識(shí); (2) 掌握電子系統(tǒng)的一般設(shè)計(jì)方法; (3) 會(huì)運(yùn)用multisim......

        課程設(shè)計(jì)報(bào)告

        學(xué) 期:2014-2015-2 作 業(yè):課程設(shè)計(jì)社會(huì)調(diào)研報(bào)告 班 級(jí):社會(huì)工作131 學(xué) 號(hào):1325012029 姓 名:蔣葉青 指導(dǎo)老師:錢雪飛老師 一.簡(jiǎn)介 時(shí)間:2015.5.26-5.28 地點(diǎn):中國(guó)杭州......

        課程設(shè)計(jì)報(bào)告(范文)

        一. 設(shè)計(jì)題目 WFS-601面包電話制作 二. 主要內(nèi)容 1、 分析面包電話機(jī)的功能,了解面包電話機(jī)的構(gòu)造 2、 完成面包電話機(jī)的焊接,要求焊點(diǎn)符合焊接要求。電話要實(shí)現(xiàn)接聽(tīng)與呼叫以及......

        C語(yǔ)言課程設(shè)計(jì)數(shù)字鐘程序

        C語(yǔ)言數(shù)字鐘程序 #include"stdio.h" void clock(int t); void main() { int t,i,j,n; for(t=0;t......

        數(shù)字鐘程序-c語(yǔ)言課程設(shè)計(jì)

        #include"stdio.h" void clock(int t); void main() { int t,i,j,n; for(t=0;t......