Windows程序课程设计报告

时间:2019-05-14 00:00:43下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《Windows程序课程设计报告》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《Windows程序课程设计报告》。

第一篇:Windows程序课程设计报告

window程序课程设计

简单的学生信息 管理应用程序

学生姓名: 韩 慧 学生学号: 031140312 班 级: 031140--3

二〇一三年十二月

简单的学生信息管理应用程序

一、设计目的、内容及要求 1.1设计目的

1.了解Windows编程的基础知识,掌握MFC应用程序的基本知识;2.基本掌握面向对象程序设计的基本思路和方法; 3.掌握用VC++开发应用程序的的一般步骤和方法;

1.2设计内容

利用所学的基本知识, 设计一个简单的学生信息管理应用程序,具有以下功能:①实现学生信息的存储,可以用文件来实现。②编程实现学生信息的添加、删除、修改、浏览和查询等功能。

1.3设计要求

1.用VC++进行编码,实现应用程序的功能。注重编码质量,代码要有适当的注释;

2.采用单文档多视图方式,左边为树视图,右边为列表视图,左边一级节点为中原工学院,二级节点为计算机学院和软件学院,三级节点为计算机学院的三个专业。要求可以动态增加节点。楼便为列表视图,包含学生的学号、性别、姓名各科成绩等。右边也可以实现动态增加

3.当选中节点时,显示对应的学生信息。如当选中”中原工学院”时选中所用的学生信息,选中“计算机学院”时,显示所有计算机学院学生信息 4.采用序列化方式保存和读取学生信息

二、主要的数据结构

1.数组集合类: CObArray m_stuObArray;2.树:

3.序列化类数据

三、基本思路

基于树视图类建立单文档应用程序,插入列表视图类,切分窗口,左边为树视图,右边为列表视图。插入学生信息对话框,创建序列化类,并利用数组集合类储存学生信息。在主菜单中添加添加、修改、删除、查询菜单,并在文 3 档类中一一添加其映射函数。在列表视图类写入输出函数,在树视图类中添加click映射函数,调用列表试图中的输出函数,是两个视图之间建立关系。

四、步骤及主要代码

4.1设计并创建切分窗口完善视图

1.用MFC AppWizard(exe)创建一个单文档应用程序Student。在第六步中将视图类的基类选择为CtreeView。

2.用MFC ClassWizard添加一个新的ClistView的派生类ClistView。打开CmainFrame.h文件,为CmainFrame类添加下列变量成员: public: CSplitterWnd m_wndSplitter;3.用MFC ClassWizard为CMainFrame类添加OnCreatClient函数,并添加下列代码:

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的前面添加下列语句: #include “MainFrm.h” #include “StudentView.h” #include “listView.h” 在StudentView.cpp的前面添加下列下列语句: #include “StudentDoc.h” 4 #include “StudentView.h” #include “listView.h” 在StudentDoc.cpp的前面添加: #include “StudentDoc.h” #include “listView.h” #include “StudentView.h” 打开StudentView.h文件,在class CStudentView : public CtreeView语句前面添加: class CStudentDoc;class CStudentView : public CTreeView 5.为CstudentView添加void类型函数creatTree()函数,并添加下列代码

void CStudentView::creatTree(){ CTreeCtrl& m_TreeCtrl = GetTreeCtrl();m_TreeCtrl.DeleteAllItems();HTREEITEM hRoot,hParent,hChild,pS;hRoot=m_TreeCtrl.InsertItem(“中原工学院”,0,1);hParent=m_TreeCtrl.InsertItem(“计算机学院”,hRoot);m_TreeCtrl.InsertItem(“网络工程”,hParent);

m_TreeCtrl.InsertItem(“软件工程”,hParent);m_TreeCtrl.InsertItem(“计算机科学”,hParent);hParent=m_TreeCtrl.InsertItem(“软件学院”,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))//判断根节点是否有子节点

{

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))//判断是否有子节点

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)函数,并写入下列代码:

void CStudentView::SetCtrlStyle(HWND hWnd, DWORD dwNewStyle){ LONG lStyle;lStyle = GetWindowLong(hWnd, GWL_STYLE);//获取当前窗口style

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

lStyle |= dwNewStyle;//设置style

SetWindowLong(hWnd, GWL_STYLE, lStyle);//设置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)函数,并添入下列代码: 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]={“姓名”,“学号”,“性别”,“出生年月”,“学院”,“专业”,“英语”,“计算机”};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.选择“文件”→“新建”菜单命令,显示出“新建”对话框。单击“文件”标签在左边的列表框中选择C/C++ Header File项,在右边的“文件”下的编辑框中键入StudentInfo.h,单击“确定”按钮。

2.在文档窗口中输入下列代码: class CStudentInfo:public CObject { public: CString strName;

//姓名

CString strNO;

//学号

BOOL

bMale;//性别,是否为男

CTime

tBirth;//出生年月

CString strAcademy;//学院

CString strSpecial;//专业

int English;

//英语成绩

int Computer;//计算机成绩

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.再次选择““文件”→“新建”菜单命令,显示出“新建”对话框。单击“文件”标签在左边的列表框中选择C++ Source File项,在右边的“文件”下的编辑框中键入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添加并处理对话框

1.向应用程序中添加一个对话框资源,标题定为“学生信息管理”,创建此对话框为CstuInfoDlg。

2.打开对话框网格,参照下图为对话框添加控件:

3.为各个控件增加成员变量:

4.为CstuInfoDlg类添加一个BOOL型成员变量m_bMale,并设置该变量的初始值:

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.再添加一个对话框资源,标题认定为“学生信息管理”,创建此对话框类为CstuDlg。按下图添加控件,并为控件增加成员变量:

4.4添加并处理菜单项

1.在StudentDoc.cpp文件的开始处,添加包含CStuInfoDlg和CstuDlg类的头文件包含。

#include “StudentDoc.h” #include “StuInfoDlg.h” #include “StuDlg.h” 2.在菜单资源的主菜单中添加顶层菜单项“学生信息管理(&M)”,在该顶层菜单项中添加子菜单“添加(&A)”(ID_STUINFO_ADD),“修改(&X)”(ID_STUINFO_MODIFY),“删除(&D)”(ID_STUINFO_DELETE),“查询(&Q)”(ID_STUINFO_QUERY)。

3.用MFC ClassWizard为CstudentDoc添加处理菜单项ID_STUINFO_ADD,ID_STUINFO_MODIFY,ID_STUINFO_DELETE和ID_STUINFO_QUERY的 COMMAND的消息,并添加下列代码: void CStudentDoc::OnStuinfoAdd()//添加 { CStuInfoDlg dlg;BOOL flag=TRUE;//根据姓名判断是否已存在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(“此学生信息已存在”);

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();//设置文档更改标志

UpdateAllViews(NULL);//更新视图

} }

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

AfxMessageBox(“无学生信息”);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(“无此学生信息”);} } void CStudentDoc::OnStuinfoDelete()//删除 { CStuDlg dlg;BOOL flag=TRUE;if(dlg.DoModal()!=IDOK)return;int nIndex=m_stuObArray.GetSize();if(nIndex==0)

AfxMessageBox(“无学生信息”);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();//设置文档更改标志

UpdateAllViews(NULL);//更新视图

}

} 15

//判断是否找到

if(flag)

AfxMessageBox(“无此学生信息”);} }

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

AfxMessageBox(“无学生信息”);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();//设置文档更改标志

UpdateAllViews(NULL);//更新视图

flag=FALSE;} } //判断是否找到 if(flag)AfxMessageBox(“无此学生信息”);4.5修改CStudentDoc类代码

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

#include “StudentInfo.h” 2.为CStudentDoc类添加成员变量: public: CObArray m_stuObArray;3.在CstudentDoc类析构函数CStudentDoc::~CstudentDoc中添加下列代码: CStudentDoc::~CStudentDoc(){ int nIndex=m_stuObArray.GetSize();while(nIndex--)

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

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

m_stuObArray.Serialize(ar);} else {

m_stuObArray.Serialize(ar);} } 5.编译。

心得体会及参考文献

1、心得体会

两周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,与同学不断的探讨、学习、推敲,无形中提高了对Visual C++的理解。

课程设计是对我们这门课程知识综合应用的实践训练,考察了我们对所学知识的掌握与应用程度。对于编程,老师一直强调要注重上机操作,通过课程设计,我对此有了更深的理解。书本上的理论知识固然重要,但从真正的操作中我们会收获更多,有时自认为很合理的逻辑,到了电脑上就是不能运行,或得到的并不是自己想要的结果,这就需要我们不断的调试,纠错,找出问题所在并一一解答,从中我们受益匪浅。

如今我不再认为编程枯燥反而觉得它很有趣,而且越来越觉得这门学问很精深,当自己的程序很好的运行时,会有一种小小的成就感。在以后的学习中我一定会再接再厉,不断提高自己。感谢老师这一学期的辛勤教导。

2、参考文献

高等院校程序设计规划教材 《Visual C++ 教程》郑阿奇 主编 丁有和 编著。

第二篇:Windows程序设计课程设计doc

Windows程序设计课程设计任务书 ,课程设计题目1: 设计一个简单的学生信息管理应用程序

一、设计目标与内容:

1.了解Windows编程的基础知识,掌握MFC应用程序的基本知识;2.基本掌握面向对象程序设计的基本思路和方法; 3.掌握用VC++开发应用程序的的一般步骤和方法;

4.能够利用所学的基本知识, 设计一个简单的学生信息管理应用程序,具有以下功能:①实现学生信息的存储,可以用文件来实现。②编程实现学生信息的添加、删除、修改、浏览和查询等功能(必须实现的功能)。二,设计要求:

1.用VC++进行编码,实现应用程序的功能。注重编码质量,代码要有适当的注释;

2.采用单文档多视图方式,左边为树视图,右边为列表视图,左边一级节点为湖南科技学院,二级节点为计算机与通信工程系,三级节点为计算机系的三个专业。要求可以动态增加节点。楼便为列表视图,包含学生的学号、性别、姓名各科成绩等。右边也可以实现动态增加

3.当选中节点时,显示对应的学生信息。选中“计算机系”时,显示所有计算机系学生信息,如当选中”软件工程专业”时,显示本专业所有的的学生信息,4.采用序列化方式保存和读取学生信息

提交设计报告一份(课程设计任务书、目录、主要的数据结构、设计的基本思路、设计的步骤及主要代码、心得体会、参考文献)。Windows程序设计课程设计任务书 ,课程设计题目2: 设计一个简单的通讯录应用程序

一、设计目标与内容:

1.了解Windows编程的基础知识,掌握MFC应用程序的基本知识;2.基本掌握面向对象程序设计的基本思路和方法; 3.掌握用VC++开发应用程序的的一般步骤和方法;

4.能够利用所学的基本知识,设计一个简单的通讯录应用程序,具有以下功能:①用文件来保存通讯录信息(必须实现的功能)②编程实现通讯录记录的添加、删除、修改、浏览和查询(必须实现的功能)。二,设计要求:

1.用VC++进行编码,实现应用程序的功能。注重编码质量,代码要有适当的注释;

2.提交设计报告一份(课程设计任务书、目录、主要的数据结构、设计的基本思路、设计的步骤及主要代码、心得体会、参考文献)。Windows程序设计课程设计任务书 ,课程设计题目3: 设计一个简单的计算器应用程序

一、设计目标与内容:

1. 了解Windows编程的基础知识,掌握MFC应用程序的基本知识;2. 基本掌握面向对象程序设计的基本思路和方法; 3. 掌握用VC++开发应用程序的的一般步骤和方法;

4. 能够利用所学的基本知识,设计一个简单的计算器应用程序,实现基本的加、减、乘、除、求平方根,求倒数等基本运算(必须实现的功能),实现求角度的正弦、余弦、正切等基本运算、实现求指数、自然对数、常用对数等基本运算(这部分功能选做)。

5. 在程序中注意处理数据和运算符的输入,计算结果的显示。二,设计要求:

1. 用VC++进行编码,实现应用程序的功能。注重编码质量,代码要有适当的注释;

2. 提交设计报告一份(课程设计任务书、目录、设计的基本思路、设计的步骤及主要代码、心得体会、参考文献)。Windows程序设计课程设计任务书 ,课程设计题目4: 设计一个简单的绘图应用程序

一、设计目标与内容:

1. 了解Windows编程的基础知识,掌握MFC应用程序的基本知识;2. 基本掌握面向对象程序设计的基本思路和方法; 3. 掌握用VC++开发应用程序的的一般步骤和方法;

4. 能够利用所学的基本知识,设计一个简单的绘图应用程序,具有以下功能:①具备基本的图形绘制功能:直线、圆、矩形;(必须实现的功能)②编辑功能包括:具有橡皮拉线功能,允许鼠标拖放,能双击选中图形元素,能删除和剪切图形元素,能撤消最近的修改等;(这部分功能选做)③数据保存功能:能够把图形数据保存到文件中必须实现的功能)。二,设计要求:

1.用VC++进行编码,实现应用程序的功能。注重编码质量,代码要有适当的注释;

2.提交设计报告一份(课程设计任务书、目录、主要的数据结构、设计的基本思路、设计的步骤及主要代码、心得体会、参考文献)。Windows程序设计课程设计任务书 ,课程设计题目5: 设计一个简单的聊天应用程序

一、设计目标与内容: 1.了解Windows编程的基础知识,掌握MFC应用程序的基本知识;2.基本掌握面向对象程序设计的基本思路和方法; 3.掌握用VC++开发应用程序的的一般步骤和方法;

4.能够利用所学的基本知识,设计一个简单的聊天应用程序,包括服务器端和客户端两部分,具有以下功能:①实现局域网内多个人聊天,可以在同一台机器上启动多个客户端。客户端显示所有在线用户的聊天称呼和头像,用户可以通过它选择谈话对象;②用户也可以选择多个动作,设置字体颜色,“悄悄”地对某人说,对信息进行过滤。③服务器端可以“踢”人,并可以防止用户名称的重复。二,设计要求: 1.用VC++进行编码,实现应用程序的功能。注重编码质量,代码要有适当的注释;

2.提交设计报告一份(课程设计任务书、目录、主要的数据结构、设计的基本思路、设计的步骤及主要代码、心得体会、参考文献)。

说明:由于此程序工作量大,可以两人一组,一人做客户端程序,一人做服务器端程序。Windows程序设计课程设计任务书 ,课程设计题目6: 设计一个简单的五子棋游戏

一、设计目标与内容:

1.了解Windows编程的基础知识,掌握MFC应用程序的基本知识;2.基本掌握面向对象程序设计的基本思路和方法; 3.掌握用VC++开发应用程序的的一般步骤和方法;

4.能够利用所学的基本知识, 设计一个简单的学生信息管理应用程序,具有以下功能:①数据结构的设计;五子棋棋盘的绘制。②人机下棋时,计算机下棋算法的设计。③人机下棋时,判断任一方获胜的算法的设计。二,设计要求:

1.用VC++进行编码,实现应用程序的功能。注重编码质量,代码要有适当的注释;

2.提交设计报告一份(课程设计任务书、目录、主要的数据结构、设计的基本思路、设计的步骤及主要代码、心得体会、参考文献)。

第三篇:仿windows JAVA 课程设计 记事本

前言

随时着科学技术的快速发展,计算机程序设计早已成为了趋势,JAVA是计算机专业的核心课程,是计算机科学的算法理论基础和软件设计的技术基础。JAVA是实践性很强的课程。课程设计是加强实践能力的一个强有力手段。要求掌握JAVA的应用、编写、上机调试的基本方法。本课程设计就是主要利用java语言编写的一个模仿windows 记事本的较简单的程序,实现了一些基本功能,要求打开文件,读取文件中的文本信息;显示、编辑修改文本信息;实现输入文本文件、控制保存文本信息到指定的文件的功能。

目 录

一、需求分析„„„„„„„„„„„„„„1

二、概要设计„„„„„„„„„„„„„„1

三、详细设计„„„„„„„„„„„„„„2

四、系统调试分析„„„„„„„„„„„„6

五、课程设计心得体会„„„„„„„„„„7

六、使用说明„„„„„„„„„„„„„„7

七、参考文献及致谢„„„„„„„„„„„7

八、附录(程序源代码)„„„„„„„„„7

一、需求分析

第 1 页

该课程设计报告里的简易记事本程序是使用Java程序设计语言编写的,要求实现记事本的基本功能,参考了windows中记事本的一些功能。要求打开文件,读取文件中的文本信息;显示、编辑修改文本信息;实现新建、打开、保存文本文件以及控制保存文本信息到指定的文件的一些基本功能。

二、概要设计

1.1 系统主要功能

本程序是利用java程序设计语言编写的一个简单的记事本程序。可以通过菜单栏和工具栏实现以下功能:如文件的新建,打开,保存和退出;对文件的编辑,如复制,剪切,粘贴;以及帮助菜单;执行完操作后,能够顺利关闭记事本。

1.2运行环境要求

(1)实现设计的系统硬件需求

硬件配置的基本要求:

* 586以上的计算机 * 32MB以上的内存 * 彩色显示器

* 3.5寸高密软盘驱动器 * 光盘驱动器

* 4G以上硬盘空间 * 鼠标

(2)实现设计的系统软件

* WINDOWS95或WINDOWS98 * Jcreator Pro全套软件

三、详细设计

设计思路:设计一个EditorDemo类,继承自JFrame类,并在EditorDemo类利用JtextPane创建面板窗口textPane,利用Jlabel创建状态栏 statusBar,利用JFileChooser 创建文件选择器filechooser,利用JMenuBar创建并实例化菜单栏,利用JToolBar创建工具栏,再通过一些具体方法实现各功能键的功能。建立构造函数public EditorDemo();通过该构造函数实现记事本程序的主要功能,运行时在主类中通过调用该构造函数来实现对记事本程序的基本操作。1:窗口设计

在主接口中设计一个EditorDemo容器继承自JFrame,并在其中加入菜单栏、工具栏和一个文本域控件。

public class EditorDemo extends JFrame

第 2 页 JTextPane textPane = new JTextPane();//创建文本窗格,编辑窗口 JFileChooser filechooser = new JFileChooser();//文件选择器 setJMenuBar(createJMenuBar(actions));//设置菜单栏 Container container = getContentPane();//得到容器

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

container.add(textPane, BorderLayout.CENTER);//增加文本窗格 2:功能设计

(1)在下拉菜单中加入子菜单并进行监听,分别实现对文件的操作功能。点击不同菜单项时,显示不同接口。

private JMenuBar createJMenuBar(Action[] actions)//创建菜单栏

JMenuBar menubar = new JMenuBar();//实例化菜单栏

JMenu menuFile = new JMenu(“文件(F)”);//实例化菜单 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]));//增加新菜单项

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 页

(2)加入工具栏的功能键,通过工具栏实现对文本的基本操作。

Action[] actions = //Action数组,各种操作命令

new NewAction(), new OpenAction(), new SaveAction(), new CutAction(),第 4 页

new CopyAction(), new PasteAction(), new AboutAction(), new ExitAction(), private JToolBar createJToolBar(Action[] actions)//创建工具条

JToolBar toolBar = new JToolBar();//实例化工具条

JButton bt = new JButton(actions[i]);//实例化新的按钮

toolBar.add(bt);//增加按钮到工具栏 如图所示:

(3)对每个菜单项进行注册监听。点击不同功能键时,实现不同的操作,显示不同的窗口。主要实现方法代码如下:

class NewAction extends AbstractAction { //实现新建文件命令功能

第 5 页 public NewAction(){

}} public OpenAction(){

super(“打开文本”);} int i = filechooser.showOpenDialog(EditorDemo.this);if(i == JFileChooser.APPROVE_OPTION){ //点击对话框中打开选项

File f = filechooser.getSelectedFile();//得到选择的文件 InputStream is = new FileInputStream(f);//得到文件输入流

textPane.read(is, “d”);//读入文件到文本窗格 ex.printStackTrace();//输出出错信息 } catch(Exception ex){ }}}} try { public void actionPerformed(ActionEvent e){ super(“新建文本”);} textPane.setDocument(new DefaultStyledDocument());//清空文档 public void actionPerformed(ActionEvent e){ class OpenAction extends AbstractAction { //实现打开文件命令功能

//显示打开文件对话框

如下图:

class SaveAction extends AbstractAction { //实现保存文本命令

public SaveAction(){ super(“保存文本”);} public void actionPerformed(ActionEvent e){ int i = filechooser.showSaveDialog(EditorDemo.this);//显示保存文件对话框

if(i == JFileChooser.APPROVE_OPTION){ //点击对话框中保存按钮

File f = filechooser.getSelectedFile();//得到选择的文件 try { FileOutputStream out = new FileOutputStream(f);//得到文件输出流

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

} catch(Exception ex){ ex.printStackTrace();//输出出错信息

}}}} 如下图:

第 6 页

class ExitAction extends AbstractAction { //实现退出命令

public ExitAction(){ super(“退出系统”);} public void actionPerformed(ActionEvent e){ System.exit(0);//退出程序}} class CutAction extends AbstractAction { //实现剪切命令

public CutAction(){ super(“剪切”);} public void actionPerformed(ActionEvent e){ textPane.cut();//调用文本窗格的剪切命令}} class CopyAction extends AbstractAction { //实现拷贝命令

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

第 7 页 {textPane.copy();//调用文本窗格的拷贝命令

class PasteAction extends AbstractAction { //实现粘贴命令 public PasteAction(){

super(“粘贴”);} public void actionPerformed(ActionEvent e){ textPane.paste();//调用文本窗格的粘贴命令}} class AboutAction extends AbstractAction { //关于版本命令

public AboutAction(){ super(“版本”);} public void actionPerformed(ActionEvent e){ String str=“简易记事本n版本:1.0n作者:郭孔明n主要功能:实现简单文本编辑。JOptionPane.showMessageDialog(EditorDemo.this, str);//显示软件信息 }} 如下图:

四、系统调试分析 1:窗口调试

确定主窗体,设置主窗体的属性,对窗体进行布局,加入所需控件并对控件进行初始化。在完成所有方法的源代码编辑后,对程序进行编译、运行!会出现窗体如下图:

第 8 页

2:功能调试

对所有菜单项进行注册监听。在编写触发事件时执行各项操作,包括了一些常用部分的事件处理,实现各功能键的操作。例如 当点击“文件“按钮是显示如下窗口:

当需要打开已存在的文件时,点击“打开文本”按钮会出现如下窗口:

第 9 页

当输入完文本是要保存的话,点击“保存文本”会出现下面的窗口:

依次调试其他功能键及窗口,直至达到符合要求的能实现简易的记事本的功能!

第 10 页

五、课程设计心得

经过java记事本的课程设计,我在老师的指导下,顺利完成该课程设计。通过这次课程设计,我收获到了很多,这次JAVA课程设计给我的最大的印象就是如果自己有了兴趣,就动手去做。我加深了对Java语言的理论知识的理解;我更加熟练的掌握了Java语言的设计能力并且有了实践经验;在设计过程中,学到了许多老师没有在课堂上没有教授的知识;加强了对Java语言的学习兴趣和好感,很是受益匪浅。

六、使用说明

本课程设计的简易计算本通过在JAVA平台编译、运行源代码,打开计算本窗口,在编辑区进行文本的输入,可以使用剪切、拷贝、粘贴等功能键,当文本输入完毕后点击“文件”菜单,选择下拉菜单中的“保存文本”打开“保存”窗口,选择保存文件的根目录进行保存。当需要关闭窗口时可通过“文件”菜单下的“退出系统”选项,或者选择“工具栏”中的“退出系统”按钮,也可以直接点击窗口右上角的关闭图标进行关闭。

七.参考文献及致谢

参考文献:

洪维恩 何嘉 java 2面向对象程序设计.中国铁道出版社,2004.2 致谢:

在本次设计的过程中,各位老师给了我很大的帮助,不仅使我在规定的时间内完成了系统的设计,同时还使我学到了很多有益的知识和宝贵的经验。在此,我向帮助我的老师们表示最衷心的感谢。由于本人水平有限,其中肯定会有一些不当之处,请老师批评指正。

第 11 页

八、附录(程序源代码)

程序源代码:

//简单的文本编辑器 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();//状态栏

JFileChooser filechooser = new JFileChooser();//文件选择器 public EditorDemo(){ //构造函数

}

第 12 页 super(”简易记事本“);//调用父类构造函数 Action[] actions = //Action数组,各种操作命令

{

};new NewAction(), new OpenAction(), new SaveAction(), new CutAction(), new CopyAction(), new PasteAction(), new AboutAction(), new ExitAction(), setJMenuBar(createJMenuBar(actions));//设置菜单栏 Container container = getContentPane();//得到容器

container.add(createJToolBar(actions), BorderLayout.NORTH);//增加工具栏 container.add(textPane, BorderLayout.CENTER);//增加文本窗格 container.add(statusBar, BorderLayout.SOUTH);//增加状态栏 setVisible(true);//设置窗口可视

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口时退出程序

setSize(500, 400);//设置窗口尺寸

private JMenuBar createJMenuBar(Action[] actions){ //创建菜单栏

} private JToolBar createJToolBar(Action[] actions){ //创建工具条

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

第 13 页 JMenuBar menubar = new JMenuBar();//实例化菜单栏 JMenu menuFile = new JMenu(”文件(F)“);//实例化菜单 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]));//增加新菜单项 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();//实例化工具条 for(int i = 0;i < actions.length;i++){

} JButton bt = new JButton(actions[i]);//实例化新的按钮 bt.setRequestFocusEnabled(false);//设置不需要焦点 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 { //打开文件命令

} public OpenAction(){ super(”打开文本“);} public void actionPerformed(ActionEvent e){

} int i = filechooser.showOpenDialog(EditorDemo.this);//显示打开文件对话框 if(i == JFileChooser.APPROVE_OPTION){ //点击对话框中打开选项

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

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

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

int i = filechooser.showSaveDialog(EditorDemo.this);//显示保存文件对话框 if(i == JFileChooser.APPROVE_OPTION){ //点击对话框中保存按钮

File f = filechooser.getSelectedFile();//得到选择的文件 try { FileOutputStream out = new FileOutputStream(f);//得到文件输出流

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

第 14 页

}

}

} } ex.printStackTrace();//输出出错信息

class ExitAction extends AbstractAction { //退出命令

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

class CutAction extends AbstractAction { //剪切命令

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

class CopyAction extends AbstractAction { //拷贝命令

public CopyAction(){

} super(”拷贝“);} public void actionPerformed(ActionEvent e){ } textPane.copy();//调用文本窗格的拷贝命令

class PasteAction extends AbstractAction { //粘贴命令

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

第 15 页

} } textPane.paste();//调用文本窗格的粘贴命令

class AboutAction extends AbstractAction { //关于选项命令

public AboutAction(){ super(”版本“);} public void actionPerformed(ActionEvent e){ String str=”简易记事本nn版本:1.0n作者:郭孔明n主要功能:实现简单文本编辑。";

}

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

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

第 16 页

第四篇:c语言程序贪吃蛇课程设计报告

高级语言程序设计 课程设计报告

Experiment Designing reporter 课程名称:高级语言程序设计

英文名称

: C Program Experiment Designing 专业:自动化 111 学号: XXX 姓名: XXX 指导教师: XXX

日期:

2012 年 6月 17日至 2011 年6 月 20 日 山东工商学院信电学院 一:课程设计内容 程序功能介绍

贪吃蛇游戏是一个经典小游戏,深受众多玩家喜爱,其规则是:一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。此游戏不仅能锻炼人的思维敏捷性,而且还可以提高玩家的逻辑判断能力。设计思路

我们小组称设计本次课题——贪吃蛇的思路为“贪快速上手贪吃蛇三步曲”: 第一步:

寻找到一个真正可以运行的已用C编好的贪吃蛇。因为我们毕竟从未看到过用C编游戏的程序,让我们两手一抹黑的开始编写是有一定的困难的,如果我们自己找一个已经设计好的程序,以此为跳板实现我们想要达到的效果,那么肯定是高效的。所以我们组统一决定,去寻找一个可以运行的C编译的贪吃蛇。第二步:

运行游戏并了解游戏程序。

我们认为,只有你运行并了解一个游戏,才能知道游戏里需要什么样的改进和创新,如果你自己本身就没玩过这个游戏,那么你就是再有技术,你也永远改进和改编不了一个游戏,因为你根本不知道你在干什么。

同样重要的是了解游戏程序。因为只有看懂了程序,才能实现对他的改编,才能游刃有余。第三步:

寻找模块并分类,而后进行改编。

寻找到你想要改变的游戏内容的控制模块,比如,我想要增加一堵墙,那么就应该找到 void DrawK(void){

setcolor(11);

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

rectangle(i,200,i+10,209);} 然后要找到:改变蛇初始长度、颜色、初始位置的模块,改变苹果出现位置的模块,让蛇见墙死的模块,让蛇吃苹果加长的模块„„„.并且进行分类,这样下次再想实现某个目标时,可以一目了然的进行改编。对于找到的模块如何进行改编呢?怎么才能知道某个数值或函数代表什么呢? 我们有两个方法:

1.)看名字,比如snakecolor(),很明显他的意思是蛇的颜色。2.)控制变量猜想,比如设置墙的时候for(i=200;i<=500;i+=10);

rectangle(i,300,i+10,309);中的200,500,300,209 代表什么呢?我们可以猜想:它很像是坐标上的(x,y)的格式,是不是呢?可可以先让其他数值不变,只让309改变,改变后发现上面的墙变粗了,由此可见这个数字控制的是一堵墙的最下面一行的坐标。

关于该程序的相关分析思路答题模板:

1.贪吃蛇程序流程图如下:

二.贪吃蛇程序的改编:

经过小组成员的认真研究我们对其进行了如下改编 第一步加墙 void DrawK(void){ /*setbkcolor(MAGENTA);*/

setcolor(5);//

可以改变颜色

setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/ 横向上的墙:

for(i=100;i<=600;i+=10)// 本行代表行坐标上:100代表墙的初始位置,i<=600代表墙的结尾。

{

rectangle(i,60,i+10,69);//本行代表纵坐标上:60代表墙的最上面一行的位置,69代表墙最下面一行的位置。69-60=9,9代表墙块的厚度 } 纵向上的墙:

for(i=100;i<=400;i+=10)//本行代表纵坐标上:100代表墙的初始位置,i<=400代表墙的结尾

{

rectangle(100,i,109,i+10);//本行代表纵坐标上:100代表墙的最左边面一行的位置,69代表墙最右面一行的位置。69-60=9,9代表墙块的宽度

} 我们认为本模块最重要的是for语句控制的坐标代表的意思。只要明白了坐标的意思,就可以实现对游戏的改编。

第二步就是进行对新加入的墙蛇是否撞上死亡

让蛇撞墙死

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

snake.y[0]<=215)

/*其中,对x,y范围的控制,实际是对蛇撞击的死亡区域的限制。*/

{

GameOver();/*本次游戏结束*/

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

} 相应的新添加的墙。

for(i=200;i<=500;i+=10)/*画围墙*/

{

rectangle(i,200,i+10,209);/*指定位置*/ 第三步食物的定点出现

if(food.yes==1)/*需要出现新食物*/ 这里说明一下:rand()产生0-65535的数,在limits.h里有定义%400后产生一个0-399的数+60 则为 60 –459,即:%400+60意思是在60~399之间随机产生一个数。

{

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

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

while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/

food.x++;

while(food.y%10!=0)

food.y++;

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

} 如果将food.x=(常数a)那么食物就会出现在x=a行的随机列,对于food.y=(常数b)那么食物就出现在y=b列的随机行。

第四步对食物墙壁的颜色以及对蛇的运动速个性化调节

setcolor(4);// 对颜色的调整 int gamespeed=50000;/*游戏速度自己调整*/

通过改变变量的值,就可以个性化选择自己喜欢的颜色,这将是一场别开生面的游戏界面。* 红色代表解析浅蓝代表提示 三.课程设计总结 有言曰:“实践出真知”,在这几天的课程设计实践中,我们组三人真正的体会到了这句话的真谛。

在经历了一学期的C语言学习后,我们从以往的“纸上谈兵”直接过渡到“实际作战”。我们实现了让静态的程序变成动态的游戏效果,虽然我们只是改编了一下别人做好的程序,但我们同样由此获益匪浅,感触颇深,当然也发现了许多自己的不足。

首先,在我们刚刚进行第一步“寻找程序”的时候,就被搁浅了,因为我们发现,在网上能找到一个真正符合我们使用标准的程序很难,就是找到了几个也没有能运行它们的程序。我们花费了前两天的时间来寻找能够使用的程序和软件,但最后还是一无所获,正当我们一筹莫展的时候,我们的导师——杨老师给我们带来了曙光,使得我们在黑暗中找到了希望的光明,杨老师给我们传来了一个上届师哥做好的程序,并且把它的运行软件也给了我们,这对我们来说无疑是雪中送炭,得到这个程序后,我们三个人看到了C语言运行一个游戏的流程和方法,我们脑中也大概有了一个思路。我们三个人以此程序为跳板,直接开始对程序模块进行挑选,因为我们已经浪费了两天,所以我们决定进行分工作业,分别去寻找:筑墙模块,加苹果模块,撞墙死模块。最后我们用了一下午时间完成了三大步中的前两大步和第三步的第一部分,剩下的就是最重要而充满挑战的改编了,从以上的操作中,让我们明白了找对一个平台的重要性,这个平台就是老师给我们的程序,就是我们的前进方向。没有了方向了的征程,一开始就是个错误。在我们寻找程序模块的时候,我们对于程序中的很多东西都是模模糊糊的概念,比如struck是什么,比如for语句的使用,以及for语句的循环体是什么,当然我们也发现了定义字符在长的程序中的方便与重要性。还有就是我们发现程序在编写时的规范性很重要,比如同级别花括号的位置的对应,对应好了,模块就好找,对应不好就很乱。还有定义函数及变量的时候,函数名字和变量名最好是见名知意,比如我们所看的程序中,gamespeed,snakecolour,food.....在最后的攻坚阶段,为了实现对程序的改编,我们使用控制变量猜想法是正确的选择,比如设置墙的时候for(i=200;i<=500;i+=10);

rectangle(i,300,i+10,309);中的200,500,300,209 代表什么呢?我们猜想:它很像是坐标上的(x,y)的格式,是不是呢?我们先让其他数值不变,只让309改变,改变后发现上面的墙变粗了,由此我们知道这个数字控制的是一堵墙的最下面一行的坐标。我们用这个方法知道了其他很多数值的用途。我们用这种方法先是知道了如何设置一堵墙,在我们欣喜设置一堵墙以后才发现:蛇撞了墙后不死。在我们进行了全局来看以后才知道,原来设计一堵墙,都要再设计一个if语句来使得蛇在这个范围内会死亡。并且我们发现在设计这个if语句的时候,不仅要计算好墙的坐标,而且还要用好逻辑语言(&&,||!)同时语句的运算顺序也很重要。刚一开始我们忽略的&&和关系运算符级别的高低,使得我们设计的墙,总是撞不死蛇,为此我们很是恼火,着急的组员还在这里发生了点小摩擦,由此可见C语言的严谨性!

最后我们又通过在网上查找信息,知道了随机数发生器randomize()的用法:rand()=x%+d 意思是说在d~(x-1)之间随机产生一个数字。我们很自然的联想到,如果把food.x等于常数a;把food.y等于一个;x%+d的随机数,那不就能固定只在某一行出现苹果了吗?所以我们觉得,充分利用手边的资源也是很重要的,毕竟C语言很高深,课本上的东西总是有限的,要想知道更多的东西还需多练习,多查阅资料。总之:革命尚未成功,通知还需努力啊!四个人感受: 汤X:

就我个人而言,这次课程设计,我觉得我最大的收获就是:我明白了,我们其实真的没那么厉害,我们真的还有很多东西不会,我们真的连课本上的基本东西都没掌握,课本上的东西,真的也只是C语言这个大海中的一滴水而已。而在我本人还没有掌握好课本的知识点的情况下,做起这个程序自然很费事,一个简单的课本P293讲到的struct结构体,我一开始竟然忘记它是什么意思,不知道它是什么,就更不用谈怎么用它了。还有逻辑语言的使用。我想,现在肯定有很多同学还不知道逻辑运算的优先次序吧?这个问题我本人在使用逻辑语言的时候也不太会,还查看了书。像这些小的知识点,我个人认为如果掌握不好的话,是不可能让整个大程序运行起来的。还有比如我在遇到程序显示“else多余”的警告时候不不知所措,问了老师才知道是if()后面加了“;”而且if没有用“{}”来固定范围,这个错误原因是分号使得if语句结束了,孤立的else当然是多余的了。一个小小的分号使得程序无法运行,由此可见在今后的编程中,一定要注意谨慎,仔细。同时要注意记住平时编程的时候,出现的错误指示是什么意思。比如这次的“else多余”就是因为if后多了分号。还有在编程时候,书写一定要规范,特别是if语句的花括号的位置要对应起来,因为位置决定范围。注意定义变量和函数要使用规范的英文单词,这样才能见名知意,为以后修改找变量节省时间。对于这次课题中,“设计一个墙,就要对应一个函数舍得蛇撞墙死”,让我明白,C语言程序中各部分的联系性,牵一发而动全身,所以在编程时一定要注意全局的把握。我们最后还要说说在编程中,好好利用网络资源,因为课本里的东西总是有限的,而C语言又那么高深,像随机数发生器,还有颜色的定都是我第一次接触,这些东西的用处可是颇大,以后一定好好学习。多看,多练,多总结。最后还要感谢指导老师,杨老师对我学习的帮助和指导。徐XXX: 刚开始拿到题目时候什么也不会一片茫然,从网上找了一个程序一看,太吓人了,这么长怎么看啊,而且还是错误的。没办法只能硬着头皮去改了,但是在改的过程中才发现其实c语言没有想象的那么难而且还很有意思,只是自己平时没有好好学所以在改的时候非常吃力,有很多简单的知识都不知道,没有记住。没办法只能借助与课本了。但是几天下来发现自己已经不再像以前那样是个菜鸟了,虽然很多知识还没掌握。同时在编改程序的时候切记不能烦躁要静心慢慢来,好几次自己都因心燥出现了很多不该出现的错误浪费了很多时间。

对键盘的熟悉在编程时也是很重要的,自己在写的时候往往就是跟一指禅差不多眼睛盯着键盘打,打错了也不知道最后导致整个程序都是错误的,就因为一个打错了一个字母。

总的来说这次课程设计收获很多,也知道了自己的不足,在以后的学习中要多实践,实践很能提高自己的能力。刘XX:

4天的C语言课程设计上机学习让我感受颇多,每天都发现新的问题,又不得不绞尽脑汁解决问题,心情就像正弦函数,随着问题的出现和解决一起一伏。刚开始接触贪吃蛇的C语言成寻时,看着C-free上面出现的有十几个错误的程序,一片茫然不知所措。只能继续在网上搜索错误较少的程序,并结合书上的基础知识查看错误所在,最终发现是不能在C-free中运行,只能在mytc5.6上运行。

作为小组中唯一的女生,明显感觉有压力,打字速度不如另外两个男生,对游戏和程序的敏感也不如他们强,有种小小的挫败感。旁边小组的同学也给我很大的压力。他们自己编写程序,我很佩服他们,越是这样想。心里越着急,越不能解决问题,每当感觉有压力的时候,就提醒自己心静,认真的看程序。在学习过程中,深深的发现了自己的不足之处,对于C语言,只学了一点点皮毛东西,想要学好C语言,编好程序,还要付出很多的努力,还要用更多的时间来学习C语言这门深奥的学科。现在只能借用别人已经写好的程序,在别人的基础上,一点点进步和学习,比如程序中筑墙,需要仿照已有的程序,结合逻辑运算,关系运算和数学知识才能让蛇撞墙死。苹果位置的出现也同样需要进一步的搜索,通过更改食物的横纵坐标以及出现的概率来确定食物的位置。编写程序时,也发现书上的东西对于程序的某些部分来说,没有什么作用,显得太浅显,想要实现老师给出的一些要求,还需要实践,通过上机学习,自己摸索才能成功。一次次修改,一次次失败,就像贪吃蛇想方设法吃苹果会Game over,我们只有认真学好基础理论,并结合实践经验才会取得进步。

在这次学习过程中,我很感谢我的组员,虽然有时我们的意见出现分歧,但是通过大家的共同努力,我们收获了很多,一起讨论,一起研究怎样解决问题,对老师提出的要求个个击破,我们拧成一股绳共同应对问题,让我感受了团队的力量希望在以后的学习过程中,我们依然能够互相帮助,共同进步。

五 课程设计修改后的程序.加墙

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)/*需要出现新食物*/

{

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();/*本次游戏结束*/

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

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

{

GameOver();/*本次游戏结束*/

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

}

}

第五篇:操作系统-课程设计报告-处理机调度程序

操作系统

课程设计报告

学校:广州大学

学院:计算机科学与教育软件学院 班级:计算机127班 课题:处理机调度程序

任课老师:陶文正、陈文彬

姓名:黄俊鹏

学号:1200002111 班内序号:27 成绩:

日期:2015年1月6日

一、设计目的

在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。也就是说能运行的进程数大于处理机个数。为了使系统中的进程能有条不紊地工作,必须选用某种调度策略,选择一进程占用处理机。要求学生设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念。

二、设计要求

1)进程调度算法包括:时间片轮转法,短作业优先算法,动态优先级算法。2)可选择进程数量

3)本程序包括三种算法,用C语言实现,执行时在主界面选择算法(可用函数实现)(进程数,运行时间,优先数由随机函数产生)执行,显示结果。

三、设计思路及算法思想

1.界面菜单选项

一级菜单提供2个选项: ① 自动生成进程数量 ② 手动输入所需进程数量

一级菜单选择完毕后进入二级菜单: ① 重新生成进程 ② 时间片轮转法 ③ 短作业优先算法 ④ 动态优先级算法 ⑤ 退出程序

2.调度算法

程序所用PCB结构体

需要用到的进程结构体如上图所示

1)时间片轮转法

主要是设置一个当前时间变量,curTime和时间片roundTime。

遍历进程组的时候,每运行一个进程,就把curTime += roundTime。进程已运行时间加roundTime

2)短作业优先算法

遍历进程组,找到未运行完成并且运行时间最短的进程,让它一次运行完成,如此往复,直到所有进程都运行完成为止。

3)动态优先级算法

做法跟短作业优先算法类似,此处主要是比较进程的优先数,优先级高者,先执行。直到全部执行完毕。当一个进程运行完毕后,适当增减其余进程的优先数,以达到动态调成优先级的效果。

3.程序流程图

四、运行截图

1)启动后输入5,生成5个进程

2)输入1,选择时间片轮转法。

自动输出结果,分别是时间片为1和4的结果

3)输入2,选择短作业优先算法

4)输入3,选择动态优先级算法

5)输入0,重新生成进程,再输入3,生成3个进程,选择2.短作业优先算法

6)输入q,退出

五、心得体会

通过这次实验,让我对操作系统的进程调度有了更进一步的了解。这个实验的模拟程度跟真实系统相比只是冰山一角,由此可见操作系统是何其复杂的软件产品,仅进程调度就有那么丰富和内涵的知识需要掌握。

但是再复杂的系统,都是由小部件构成的。古语云:不积跬步,无以至千里。不积小流,无以成江海。掌握这些基础的知识,可以为以后打下扎实的基础。

六、附录(源代码)

//

// main.c

// ProcessDispatch //

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

#include #include

//最小进程数

#define MIN_PROCESS //最大进程数

#define MAX_PROCESS

//最小优先数

#define MIN_PRIORITY

0 //最大优先数

#define MAX_PRIORITY

//最小运行时间

#define MIN_RUNNING_TIME

//最大运行时间

#define MAX_RUNNING_TIME

typedef struct PCB{

char name;

//进程名

int priority;

//优先数

int runningTime;

//运行时间

int arriveTime;

//到达时间

int beginTime;

//开始时间

int finishTime;

//完成时间

int cyclingTime;

//周转时间

double weigthCyclingTime;//带权周转时间

int hadRunTime;

//已经运行时间

int finish;

//是否完成 }PCB;//获取随机数

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(“|进程名

到达时间

运行时间

开始时间

完成时间

周转时间

带权周转时间

优先数

|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(“平均周转时间:%.2f

平均带权周转时间:%.2fn”,avgCycTime,avgWeiCycTime);} //时间片轮转法

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

printf(“nn-----------------------------时间片:%d------n”,roundTime);

int finishNum = 0;

int curTime = 0;

while(finishNum!= num){

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

if(p[i].finish)continue;

//开始时间

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

p[i].beginTime = curTime;

}

//已经完成

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);}

//动态优先级算法

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

printf(“nn-----------------------------动态优先级算法--n”);

int finishNum = 0;

int curTime = 0;

while(finishNum!= num){

int min = 0;

//查找优先级最高下标

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数组

int processNum = 0;//进程数

while(1){

//选择进程数量

while(1){

if(processNum!= 0)

break;

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

printf(“当前默认进程数范围%d--%dn”,MIN_PROCESS,MAX_PROCESS);

printf(“1)输入0可随机生成进程数目n2)输入%d-%d范围内数字,回车,可生成指定数目进程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输入有误,请重新输入.n”);

}

}

//选择算法

printf(“n-----------------------------请输入对应选项序号-----------------------------n”);

printf(“0.重新生成进程 | 1.时间片轮转法 | 2.短作业优先算法 | 3.动态优先级算法 | q.退出n>>>>>>”);

char ch;

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

switch(ch){

case '0'://0 重新生成进程

processNum = 0;break;

case '1'://1 时间片轮转法

RoundRobin(pcbGroup, processNum);break;

case '2'://2 短作业优先算法

ShortestJobFirst(pcbGroup, processNum);break;

case '3'://3 动态优先级算法

DynamicPriorityFirst(pcbGroup,processNum);break;

case 'q'://q 退出

exit(0);

default:

break;

}

}

return 0;}

下载Windows程序课程设计报告word格式文档
下载Windows程序课程设计报告.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    操作系统课程设计--基于Windows进程互斥实现机制

    学生姓名:班 学 号:193121 指导教师:袁国斌 中国地质大学计算机学院 2013年 12 月 4 日 操作系统课程实验报告 实习题目:基于Windows进程互斥实现机制 【需求规格说明】 基于Mic......

    C语言课程设计程序

    #include #include #include struct student { int num; char name[15]; //定义学生结构体,st数组。int score[5]; float jqave; int rank; }st[27]; struct kecheng......

    数字钟课程设计程序(精选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......

    高频课程设计报告

    一 设计课题名称 单边带调制解调电路的设计 二 课程设计目的、要求与技术指标 2.1 课程设计目的 (1) 巩固所学的相关理论知识; (2) 掌握电子系统的一般设计方法; (3) 会运用multisim......

    课程设计报告

    学 期:2014-2015-2 作 业:课程设计社会调研报告 班 级:社会工作131 学 号:1325012029 姓 名:蒋叶青 指导老师:钱雪飞老师 一.简介 时间:2015.5.26-5.28 地点:中国杭州......

    课程设计报告(范文)

    一. 设计题目 WFS-601面包电话制作 二. 主要内容 1、 分析面包电话机的功能,了解面包电话机的构造 2、 完成面包电话机的焊接,要求焊点符合焊接要求。电话要实现接听与呼叫以及......

    C语言课程设计数字钟程序

    C语言数字钟程序 #include"stdio.h" void clock(int t); void main() { int t,i,j,n; for(t=0;t......

    数字钟程序-c语言课程设计

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