《面向对象程序设计》课程设计
面向对象程序设计》课程设计
编程工具: 可以用 VC++6.0、C++ Builder 、Visual Studio 2005。推荐用
Visual
Studio 2005
。
要求:
1、使用面向对象方法进行课程设计。要求使用对象 /
类,继承,多态性等技 术
2、程序设计语言使用 C++
3
、程序的界面、逻辑功能和数据的存储进可能的分开
4
、完成课程设计报告报告记录设计的过程。课程设计报告的内容应当包括以下 内容:要
完成的功能;设计的具体描述; 设计的源代码 ;执行的结果 等功能。 根据结合自己的
实际情况,酌情选择相关的功能,并完成设计。课程设计报告 样例请参考附件。
题目: 在控制台程序或图形界面程序中任意一个作为课程设计题目,设计过程 中要求独
立完成,不能再网上 COPY 代码,题目在附件里
控制台程序
2•自定义一个示意性的复数类型 complex
,其中含有若干个成员函数,使用该类 可以完
成复数的加法以及对复数的输出。请完成类定义,并编制主函数, 说明complex类
对象,对定义的各成员函数进行调用。
进一步,在类中添加对复数进行其他基本运算(如,复数减、乘、除、取模 等)的相应成
员函数,并通过主函数处的调用来验证各函数的使用正确性。
3. 利用虚函数手段,按照 3
种不同的计算方法来求出
Fib on acci数列的第n
项
(的具体项值)并输出。具体地说,可通过在基类baseCla及其派生类 fib1Cla、
fib2Cla 和 fib3Cla 中说明如下的同一个虚函数“ virtual double fib(int
n)。”,来实现求Fib on acci数列第n项值并返回的3
种不同求解方法。
4. 设计一个类CStuden
,类中包含一个学生的基本数据如下:
class complex{
double real
。
double imag
。
public:
complex()
。
complex(double r, double
i)。 complex addCom(complex c2)
。
complex
类对象
void outCom ()
。 量)
}
。
//
复数实部
//
复数虚部
//
无参构造函数
//2
参构造函数
//调用者对象与对象 c2
相加,返回
//
输出调用者对象的有关数据(各分
编号,姓名,性别,年龄,数学成绩,计算机成绩,外语成绩。 并假设编号为整
数,且从 1 号往后连续编码;姓名为字符串,性别为字 符。如:
1 LiPing m 18 89 98 94
请采用 binary 文件形式,并使用随机读写处理方式,对自定义 CStudent 类的对象数
据进行存储与读写处理(即是说,总按具有连续编码的编号 num为
“序”来对文件中的各对象数据进行随机读写处理)。并设计该类的成员函 数,而且对输
出运算符“ <<”进行重载,使该运算符能够完成将一个学生的信 息输出到屏幕上。要求
成员函数完成以下功能:
(1) 从键盘输入一个学生的有关信息,并将它们存入到数据文件中(按 编号来确
定写出位置)。
( 2) 按编号对学生信息进行检索并将检索结果显示在屏幕上。
( 3) 按姓名对学生信息进行检索并将检索结果显示在屏幕上。
(4) 计算某编号学生的总成绩与平均成绩。
(5) 列出所有总成绩超过 n 分的性别为 s 同学的有关信息 (n,s 由用户从 键
盘输入 ) 。
思考:可进一步对上述程序进行扩充,如,添加学生基本数据(籍贯,专 业,班
级,其他各门成绩,奖惩记录等),并添加所需要的其他相关处理函数 (如可通过咨询教
案办公室管理人员后确立),进而将其编制成为一个简单而 实用的小型学籍与成绩管理软
件。
5.
编写程序实现一个简单的电话记录簿,要求记录的个人信息包括:姓名,单
位,家庭电话,移动电话。具体功能如下:
1.
创建信息链表并以磁盘文件保存。
2.
读取磁盘文件并显示输出所有人的移动电话。
3.
按姓名或单位查询家庭电话。
4.
通过姓名和单位确定个人,修改其电话信息并存盘。
图形界面程序
1
.实现一个计算器
参考 Windows 的计算器应用程序。
2
.设计一个通信录
参考 Outlook 通信录,或自行设计。
3.
实现以下绘图程序
要求:
(1)
程序中包含菜单项和工具栏;
(2)
先选择菜单项或单击工具栏上的命令按钮,然后在窗体空白区域单击鼠 标
后,绘制相应菜单项或命令按钮指定的图形、文字。
扩充:
1
) 能够选择、移动、删除、拷贝、剪切图元
2)完成图形文件的保存、打开、打印 4■
用你熟悉的一种可视化编程语言实现以下汉
诺塔演示程序
:dldi■中T・i ■ :, I 1 ■ ■ r
T flit J-
5■
单机版俄罗斯方块
游戏规则:在方块从屏幕上方落下来时,玩家可以移动和旋转窗口内落下 的方块,
巧妙地安排布置,达到充分利用屏幕空间的目的。每当屏幕的一整行 被方块积木排满时,
作为奖赏,整行从屏幕上消失,剩余的积木依次往下降一 行。当积木堆积达到屏幕顶端的
时候,游戏结束。
扩充:多人联机游戏。
C-shap课程设计报告
《面向对象程序设计C#》期末课程设计报告 / 学年第学期姓名:______________学号:______________班级:______________指导教师:______________计算机科学与工程学院2012一、主要内容及要求:创建一个应用程序,实现下面的UML图。
Step1:(共60分,其中Account类编写10分,SavingAccount和Checking类的编写分别25分)创建Account类,作为各种账户的基类。
然后用继承来创建两个专用的账户类:SavingAccount(储蓄账户)类和CheckingAccount(支票账户)类。
(1)SavingAccount类,从Account派生其新特征:A.储蓄账户能获得利息,增加一个属性interestRate 表示利率。
B.着时间的推移,储蓄账户可以获得利息,所以为SavingAccount类增加一个addInterest()方法(注:未在UML图中画出),用于把利息增加到原balance上。
利息的计算规则为interestRate*balance;(2)CheckingAccount类,从Account派生新特征:A.帐户允许有透支额度,增加属性overdraftProtection表示最大透支额度。
B.取款规则发生了改变:如果当前余额足够支付要提取的金额amount ,按照常规进行处理。
如果当前余额不够,但帐户有透支额度,那么所差的部分作为透支处理。
透支处理规则:比较amount(当前提款金额)和balance(当前帐户余额)若当前透支额amount-balance>overdraftProtection,那么整个交易应该放弃,提款失败。
否则提款后的balance应为0,提款后的最大透支额度overdraftProtection应该为原有最大透支额度减去(amount-balance )。
(3)再看Account类其withdraw行为要在其具体的子类中才能确定,故将其withdraw方法设计成一个抽象方法,由子类去改写。
连连看游戏的设计与实现
3.课程设计说明书
面向对象课程设计报告 一.概要设计 (1)用例图
第
3
直线
页,共
17
页
图片消去 一拐角
两拐角 难易选择 简单 中等 时间计时 难度
用户
漏斗 分数累加
(2)游戏结构图
开始
难度选择 游戏 关于
开 始 否
演 示
判 断 是 否 是满 足 要求
刷新 全部消除 消除图片 提示 游戏结束
(3)游戏详细流程
面向对象课程设计报告
第
12
页,共
17
页
public boolean zhejiaocheck(int y1,int x1,int y2,int x2) //判断能否折角相连 { if(linecheck(y1,x1,y2,x1)&&linecheck(y2,x1,y2,x2)&&map[y2][x1]==0) { return true; } if(linecheck(y1,x1,y1, x2)&&linecheck(y1,x2,y2,x2)&&map[y1][x2]==0) //一条线上 { return true; } return false; } //判断能否两次折角相连 public boolean liangcizhejiaocheck(int y1,int x1,int y2,int x2) //判断能否两次折角相连 { for(int i=0;i<9;i++) { if(x2+1+i<10&&map[y2][x2+1+i]==0&&linecheck(y2, x2, y2, x2+1+i)) { if(zhejiaocheck(y1, x1, y2, x2+1+i)) return true; } if(x2-1-i>=0&&map[y2][x2-1-i]==0&&linecheck(y2, x2, y2, x2-1-i)) { if(zhejiaocheck(y1, x1, y2, x2-1-i)) return true; } if(y2+1+i<10&&map[y2+1+i][x2]==0&&linecheck(y2, x2, y2+1+i, x2)) { if(zhejiaocheck(y1, x1, y2+1+i, x2)) return true; } if(y2-1-i>=0&&map[y2-1-i][x2]==0&&linecheck(y2, x2, y2-1-i, x2)) { if(zhejiaocheck(y1, x1, y2-1-i, x2)) return true; } } return false; }
Java语言与面向对象程序设计课程设计
Java语言与面向对象程序设计课程设计近年来,Java语言已经成为了企业级应用开发的首选编程语言之一。
而面向对象程序设计则已成为了Java编程的重要思想和核心思路。
本次课程设计将围绕Java语言和面向对象程序设计展开,帮助学生了解Java编程的基础知识和实践技巧,以及面向对象程序设计的基本概念和方法。
课程设计背景在当前的信息社会中,软件开发已成为了一项企业竞争的关键因素。
面向对象程序设计是现代软件开发中应用最广泛的编程范式之一,其核心思想是把现实世界中的事物视为对象,通过对象之间的交互来实现复杂系统的设计和实现。
Java语言作为一种跨平台的编程语言,在企业级应用中得到了广泛的应用,其强大的面向对象编程特性也成为了Java编程的重要优势。
课程目标本次课程设计的主要目标是帮助学生掌握Java语言和面向对象程序设计的基本原理和实践技巧。
具体目标包括:•掌握Java语言的基本语法和程序结构;•熟悉Java编程环境和开发工具;•理解面向对象编程的基本概念和原则;•掌握Java中面向对象编程的相关技术和思想;•实现一个基于Java的简单应用程序,综合应用所学知识。
课程内容本次课程设计主要包括以下内容:•Java基本语法和程序结构;•面向对象编程概念和原则;•Java编程环境和开发工具的使用;•继承、多态、抽象类和接口等面向对象编程的相关技术和思想;•Java中常用的标准类库和工具。
课程安排本次课程设计按照如下安排进行:第一周•介绍Java语言和面向对象程序设计的概念;•熟悉Java编程环境和开发工具;•学习Java基本语法和程序结构。
第二周•学习Java中的数组、字符串和输入输出;•掌握Java中的分支和循环语句;•实现一个简单的命令行程序。
第三周•学习Java中的面向对象编程概念和原则;•了解类、对象、方法和属性的概念;•学习如何定义和使用类。
第四周•学习Java中的继承和多态;•熟悉抽象类和接口的概念;•实现一个基于继承和多态的简单程序。
中小学生学业信息管理系统课程设计报告word版
课程设计报告设计名称:面向对象课程设计选题名称:中小学生学业信息管理系统(2).建立学生成绩表(含学号、课程号以及分数)(3).建立学生信息表(含学生学号、姓名、年龄、性别以及年级)(4).建立教师课程表(含教师号、课程号及上课时间)(5).建立教师信息表(含教师号、教师名、教师年龄、性别以及所教年级)(6).建立管理员信息(含管理号、密码以及管理身份)(7).建立虚拟表(含学号、姓名、课程号、课程名、成绩、教师号以及教师姓名)3.3.2模块实现(1)成绩添加模块(2)课程添加模块(3)添加学生模块(4)添加教师模块(5)成绩统计模块(6)注销信息模块(7)成绩修改模块(8)学生删除模块(9)系统退出模块(10)系统帮助模块(11)系统登录模块(12)管理员操作模块(13)家长会信息模块(14)系统信息模块(15)系统注册模块(16)重置密码模块(17)信息查询模块(18)学生操作模块(19)教师操作模块3.4 调试分析3.4.1登录界面3.4.2管理员用户界面(1)总界面(2)查询界面(3)添加信息界面A.添加学生B.添加教师C.添加课程(4)注册用户界面(5)统计界面A.排序(6)注销用户界面(7)修改密码界面(8)退出系统界面3.4.3教师操作界面(1)总界面(2)添加界面(与管理员相似)(3)修改界面(4)删除界面(5)统计界面(与管理员相同)(6)查询界面(与管理员相同)(7)修改密码界面(与管理员相同)(8)退出系统界面(与管理员相同)3.5.3学生操作界面(1)总界面(2)查询界面(3)家长会界面(4)修改密码界面(与管理员相同)(5)退出系统界面(与管理员相同)毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
(完整word版)斗地主--Java课程设计
《面向对象程序设计》课程设计报告题目:斗地主软件设计与实现院(系):信息科学与工程学院专业班级:计算机科学与技术1201班学生姓名:程伟学号:20121183011指导教师:吴奕20 14 年 12 月 29 日至20 15 年 1 月 9 日华中科技大学武昌分校制面向对象程序设计课程设计任务书目录1需求与总体设计 (1)1.1需求分析 (1)1.2总体设计 (1)1.3功能图 (1)1.4类图 (2)2详细设计 (3)2.1主类Main (3)2.2类Card (3)2.3类CardType (4)2.4类Common (4)2.5类Model (5)2.6类Time (5)3编码实现 (6)3.1 JAVA编码实现 (6)4系统测试 (44)4.1测试结果 (44)4.2排错处理 (47)总结 (47)1需求与总体设计1.1需求分析游戏设计需要用到牌Card的正反面及牌的移动,还有CardType设计出牌种类,还有各种牌的形式,还要设计几个人玩游戏,抢地主的方法,出牌倒计时,出牌和不出牌等等,另外还要设计54张牌,打牌出现的各种结果。
1.2总体设计本游戏实现了图形界面的设计、游戏区模块,游戏控制模块,级别设置模块和帮助模块。
为玩家提供主体游戏功能,能够处理玩家的各种游戏操作,并最终显示游戏结果。
1.3功能图1.4类图2详细设计2.1主类Main图表说明如下:2.2类Card(1)类图(2)说明:该类主要是设计牌面的正反、牌之间的距离、移动(即出牌时向前移动纸牌),其中有:boolean up;//是否正反面;boolean canClick=false;//是否可被点击boolean clicked=false;//是否点击过;String name;//图片url名字Main main;//Main类的引用2.3类CardTypepublic enum CardType 列出各种出牌的类型2.4类Common1)判断牌型public static CardType jugdeType()2)移动效果的函数,用于发牌public static void move()3)对牌的排序public static void order()4)重新定位 flag代表电脑1 ,2 或者是我public static void rePosition()5)地主牌权值,看是否抢地主public static int getScore()6)返回花色public static int getColor()7)得到最大相同数public static void getMax()8)拆牌public static Model getModel()各种对子、顺子、飞机、炸弹9)拆连子public static void get123()10)拆双顺public static void getTwoTwo()11)拆飞机public static void getPlane()12)拆炸弹public static void getBoomb()13)拆3带public static void getThree()14)拆对子public static void getTwo()15)拆单牌public static void getSingle()16)隐藏之前出过的牌public static void hideCards()17)检查牌的是否能出public static int checkCards()2.5类Model各种牌型public class ModelList<String> a1=new ArrayList<String>(); //单张List<String> a2=new ArrayList<String>(); //对子List<String> a3=new ArrayList<String>(); //3带List<String> a123=new ArrayList<String>(); //连子List<String> a112233=new ArrayList<String>(); //连牌List<String> a111222=new ArrayList<String>(); //飞机List<String> a4=new ArrayList<String>(); //炸弹2.6类Time// 等待i秒public void second(int i)//时间如何走public void run()if (i == -1)// 正常终结,说明超时// 开始游戏根据地主不同顺序不同main.turn=main.dizhuFlag;// 出牌按钮 --我出牌turnOn(true);// 我自己的定时器timeWait(30, 1);//选完关闭turnOn(false);3编码实现3.1JAVA编码实现(1)Main.java主要代码public class Main extends JFrame implements ActionListener{public Container container = null; // 定义容器JMenuItem start, exit, about; // 定义菜单按钮JButton landlord[]=new JButton[2]; //抢地主按钮JButton publishCard[]=new JButton[2]; //出牌按钮int dizhuFlag; //地主标志int turn;JLabel dizhu; //地主图标List<Card> currentList[] =new ArrayList[3]; // 当前的出牌List<Card> playerList[] = new ArrayList[3]; // 定义3个玩家表List<Card> lordList;//地主牌Card card[] = new Card[56]; // 定义54张牌JTextField time[]=new JTextField[3]; //计时器Time t; //定时器(线程)boolean nextPlayer=false; //转换角色public Main(){Init();// 初始化SetMenu();// 创建菜单按钮(抢地主,发牌,计时器)this.setVisible(true);CardInit();//发牌getLord(); //发完牌开始抢地主time[1].setVisible(true);//线程安全性,把非主线程的UI控制放到里面SwingUtilities.invokeLater(new NewTimer(this,10));}public void getLord()// 抢地主{//System.out.println(CardType.c0.toString());for(int i=0;i<2;i++) //当没有人抢地主时或者一个人和当前的人抢地主时landlord[i].setVisible(true);}//初始化牌// 发牌洗牌public void CardInit()//初始化牌{int count = 1;for (int i = 1; i <= 5; i++){for (int j = 1; j <= 13; j++){if ((i == 5) && (j > 2))break;else {card[count] = new Card(this, i + "-" + j, false);card[count].setLocation(350, 50);container.add(card[count]);count++;}}}//打乱顺序for(int i=0;i<100;i++){Random random=new Random();int a=random.nextInt(54)+1;int b=random.nextInt(54)+1;Card k=card[a]; //赋值语句,打乱牌序card[a]=card[b];card[b]=k;}//开始发牌for(int i=0;i<3;i++) //三张底牌playerList[i]=new ArrayList<Card>(); //玩家牌lordList=new ArrayList<Card>();//地主牌三张int t=0;for(int i=1;i<=54;i++) //进行发牌{if(i>=52)//地主牌{Common.move(card[i], card[i].getLocation(),new Point(300+(i-52)*80,10));lordList.add(card[i]);continue;}switch ((t++)%3) {case 0://显示各边的玩家,这是左边玩家Common.move(card[i], card[i].getLocation(),new Point(50,60+i*5));playerList[0].add(card[i]);break;case 1://玩家:我Common.move(card[i], card[i].getLocation(),new Point(180+i*7,450));playerList[1].add(card[i]);card[i].turnFront(); //显示正面break;case 2://右边玩家Common.move(card[i], card[i].getLocation(),new Point(700,60+i*5));playerList[2].add(card[i]);break;}//card[i].turnFront(); //显示正面container.setComponentZOrder(card[i], 0);}//发完牌排序,从大到小for(int i=0;i<3;i++){Common.order(playerList[i]);Common.rePosition(this,playerList[i],i);//重新定位}dizhu=new JLabel(new ImageIcon("images/dizhu.gif"));//地主最后要加入底牌dizhu.setVisible(false);dizhu.setSize(40, 40);container.add(dizhu);}// 初始化窗体public void Init(){this.setTitle("斗地主游戏---by程宵");this.setSize(830, 620);setResizable(false);setLocationRelativeTo(getOwner()); // 屏幕居中container = this.getContentPane();container.setLayout(null);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);container.setBackground(new Color(0, 112, 26)); // 背景为绿色}// 创建菜单功能按钮public void SetMenu(){JMenuBar jMenuBar = new JMenuBar();JMenu game = new JMenu("游戏");JMenu help = new JMenu("帮助");start = new JMenuItem("新游戏");exit = new JMenuItem("退出");about = new JMenuItem("关于");start.addActionListener(this);exit.addActionListener(this);about.addActionListener(this);game.add(start);game.add(exit);help.add(about);jMenuBar.add(game);jMenuBar.add(help);this.setJMenuBar(jMenuBar);landlord[0]=new JButton("抢地主");landlord[1]=new JButton("不抢");publishCard[0]= new JButton("出牌");publishCard[1]= new JButton("不要");for(int i=0;i<2;i++){publishCard[i].setBounds(320+i*100, 400, 60, 20);landlord[i].setBounds(320+i*100, 400,75,20);container.add(landlord[i]);landlord[i].addActionListener(this);landlord[i].setVisible(false);container.add(publishCard[i]);publishCard[i].setVisible(false);publishCard[i].addActionListener(this);}for(int i=0;i<3;i++){time[i]=new JTextField("倒计时:");time[i].setVisible(false);container.add(time[i]);}time[0].setBounds(140, 230, 60, 20);time[1].setBounds(374, 360, 60, 20);time[2].setBounds(620, 230, 60, 20);for(int i=0;i<3;i++){currentList[i]=new ArrayList<Card>();}}@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubif (e.getSource() == exit) {this.dispose();}if (e.getSource() == about) {JOptionPane.showMessageDialog(this, "20121183026,程宵"); }if (e.getSource() == start) {// this.restart();}if(e.getSource()==landlord[0]){time[1].setText("抢地主");t.isRun=false; //时钟终结}if(e.getSource()==landlord[1]){time[1].setText("不抢");t.isRun=false; //时钟终结}//如果是不要if(e.getSource()==publishCard[1]){this.nextPlayer=true;currentList[1].clear();time[1].setText("不要");}//如果是出牌按钮if(e.getSource()==publishCard[0]){List<Card> c=new ArrayList<Card>();//点选出牌for(int i=0;i<playerList[1].size();i++){Card card=playerList[1].get(i);if(card.clicked){c.add(card);}}int flag=0;//如果我主动出牌if(time[0].getText().equals("不要")&&time[2].getText().equals("不要")) {if(Common.jugdeType(c)!=CardType.c0)flag=1;//表示可以出牌}//如果我跟牌else{flag=Common.checkCards(c,currentList);}//判断是否符合出牌if(flag==1){currentList[1]=c;playerList[1].removeAll(currentList[1]);//移除走的牌//定位出牌Point point=new Point();point.x=(770/2)-(currentList[1].size()+1)*15/2;;point.y=300;for(int i=0,len=currentList[1].size();i<len;i++){Card card=currentList[1].get(i);Common.move(card, card.getLocation(), point);point.x+=15;}//抽完牌后重新整理牌Common.rePosition(this, playerList[1], 1);time[1].setVisible(false);this.nextPlayer=true;}}}public static void main(String args[]){new Main();}}class NewTimer implements Runnable{Main main;int i;public NewTimer(Main m,int i){this.main=m;this.i=i;}@Overridepublic void run(){// TODO Auto-generated method stubmain.t=new Time(main,10);//从10开始倒计时main.t.start();}}(2)Card.java主要代码如下:public class Card extends JLabel implements MouseListener {Main main;//Main类的引用String name;//图片url名字boolean up;//是否正反面boolean canClick=false;//是否可被点击boolean clicked=false;//是否点击过public Card(Main m,String name,boolean up){this.main=m;=name;this.up=up;if(this.up)this.turnFront();else {this.turnRear();}this.setSize(71, 96);this.setVisible(true);this.addMouseListener(this);}//正面public void turnFront(){this.setIcon(new ImageIcon("images/" + name + ".gif"));this.up = true;}public void turnFront(){反面代码类似正面,这里就不附带了}@Overridepublic void mouseClicked(MouseEvent e){// TODO Auto-generated method stubif(canClick){Point from=this.getLocation();int step; //移动的距离if(clicked)step=-20;else {step=20;}clicked=!clicked; //反向//当被选中的时候,向前移动一步/后退一步Common.move(this,from,new Point(from.x,from.y-step));}}public void mouseEntered(MouseEvent arg0) {}public void mouseExited(MouseEvent arg0) {}public void mousePressed(MouseEvent arg0) {}public void mouseReleased(MouseEvent arg0) {}}(3)Common.java主要代码如下public class Common {//判断牌型public static CardType jugdeType(List<Card> list){//因为之前排序过所以比较好判断int len=list.size();//单牌,对子,3不带,4个一样炸弹if(len<=4){ //如果第一个和最后个相同,说明全部相同if(list.size()>0&&Common.getValue(list.get(0))==Common.getValue(list.get(l en-1))){switch (len) {case 1:return CardType.c1;case 2:return CardType.c2;case 3:return CardType.c3;case 4:return CardType.c4;}}//双王,化为对子返回if(len==2&&Common.getColor(list.get(1))==5)return CardType.c2;//当第一个和最后个不同时,3带1if(len==4&&((Common.getValue(list.get(0))==Common.getValue(list.get(len-2)))||Common.getValue(list.get(1))==Common.getValue(list.get(len-1))))return CardType.c31;else {return CardType.c0;}}//当5张以上时,连字,3带2,飞机,2顺,4带2等等if(len>=5){//现在按相同数字最大出现次数Card_index card_index=new Card_index();for(int i=0;i<4;i++)card_index.a[i]=new ArrayList<Integer>();//求出各种数字出现频率Common.getMax( card_index,list); //a[0,1,2,3]分别表示重复1,2,3,4次的牌//3带2 -----必含重复3次的牌if(card_index.a[2].size()==1 &&card_index.a[1].size()==1 && len==5) return CardType.c32;//4带2(单,双)if(card_index.a[3].size()==1 && len==6)return CardType.c411;if(card_index.a[3].size()==1 && card_index.a[1].size()==2 &&len==8) return CardType.c422;//单连,保证不存在王if((Common.getColor(list.get(0))!=5)&&(card_index.a[0].size()==len) &&(Common.getValue(list.get(0))-Common.getValue(list.get(len-1))==len-1)) return CardType.c123;//连队if(card_index.a[1].size()==len/2 && len%2==0 && len/2>=3&&(Common.getValue(list.get(0))-Common.getValue(list.get(len-1))==(len/2-1 )))return CardType.c1122;//飞机if(card_index.a[2].size()==len/3 && (len%3==0) &&(Common.getValue(list.get(0))-Common.getValue(list.get(len-1))==(len/3-1)) )return CardType.c111222;//飞机带n单,n/2对if(card_index.a[2].size()==len/4 &&((Integer)(card_index.a[2].get(len/4-1))-(Integer)(card_index.a[2].get(0)) ==len/4-1))return CardType.c11122234;//飞机带n双if(card_index.a[2].size()==len/5 && card_index.a[2].size()==len/5 &&((Integer)(card_index.a[2].get(len/5-1))-(Integer)(card_index.a[2].get(0)) ==len/5-1))return CardType.c1112223344;}return CardType.c0;}//移动效果的函数,用于发牌public static void move(Card card,Point from,Point to){if(to.x!=from.x){double k=(1.0)*(to.y-from.y)/(to.x-from.x);double b=to.y-to.x*k;int flag=0;//判断向左还是向右移动步幅if(from.x<to.x)flag=20;else {flag=-20;}for(int i=from.x;Math.abs(i-to.x)>20;i+=flag){double y=k*i+b;//这里主要用的数学中的线性函数card.setLocation(i,(int)y);try {Thread.sleep(5); //延迟,可自己设置} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}//位置校准card.setLocation(to);}//对list排序public static void order(List<Card> list){Collections.sort(list,new Comparator<Card>() {@Overridepublic int compare(Card o1, Card o2) {// TODO Auto-generated method stubint a1=Integer.parseInt(.substring(0, 1));//花色int a2=Integer.parseInt(.substring(0,1));intb1=Integer.parseInt(.substring(2,.length()));//数值int b2=Integer.parseInt(.substring(2,.length()));int flag=0;//如果是王的话if(a1==5) b1+=100;if(a1==5&&b1==1) b1+=50;if(a2==5) b2+=100;if(a2==5&&b2==1) b2+=50;//如果是A或者2if(b1==1) b1+=20;if(b2==1) b2+=20;if(b1==2) b1+=30;if(b2==2) b2+=30;flag=b2-b1;if(flag==0)return a2-a1;else {return flag;}}});}//重新定位 flag代表电脑1 ,2 或者是我public static void rePosition(Main m,List<Card> list,int flag){ Point p=new Point();if(flag==0){p.x=50;p.y=(450/2)-(list.size()+1)*15/2;}if(flag==1){//我的排序 _y=450 width=830p.x=(800/2)-(list.size()+1)*21/2;p.y=450;}if(flag==2){p.x=700;p.y=(450/2)-(list.size()+1)*15/2;}int len=list.size();for(int i=0;i<len;i++){Card card=list.get(i);Common.move(card, card.getLocation(), p);m.container.setComponentZOrder(card, 0);if(flag==1)p.x+=21;else p.y+=15;}}//地主牌权值,看是否抢地主public static int getScore(List<Card> list){int count=0;for(int i=0,len=list.size();i<len;i++){Card card=list.get(i);if(.substring(0, 1).equals("5")){//System.out.println(.substring(0, 1));count+=5;}if(.substring(2, .length()).equals("2")){//System.out.println(2);count+=2;}}return count;}//返回花色public static int getColor(Card card){return Integer.parseInt(.substring(0,1));}//返回值public static int getValue(Card card){int i= Integer.parseInt(.substring(2,.length()));if(.substring(2,.length()).equals("2")) i+=13;if(.substring(2,.length()).equals("1")) i+=13;if(Common.getColor(card)==5)i+=2;//是王return i;}//得到最大相同数public static void getMax(Card_index card_index,List<Card> list){ int count[]=new int[14];//1-13各算一种,王算第14种for(int i=0;i<14;i++)count[i]=0;for(int i=0,len=list.size();i<len;i++){if(Common.getColor(list.get(i))==5)count[13]++;elsecount[Common.getValue(list.get(i))-1]++;}for(int i=0;i<14;i++){switch (count[i]) {case 1:card_index.a[0].add(i+1);break;case 2:card_index.a[1].add(i+1);break;case 3:card_index.a[2].add(i+1);break;case 4:card_index.a[3].add(i+1);break;}}}//拆牌public static Model getModel(List<Card> list){//先复制一个listList list2=new ArrayList<Card>(list);Model model=new Model();//------先拆炸弹Common.getBoomb(list2, model); //ok//------拆3带Common.getThree(list2, model);//拆飞机Common.getPlane(list2, model);//------拆对子Common.getTwo(list2, model);//拆连队Common.getTwoTwo(list2, model);//拆顺子Common.get123(list2, model);//拆单Common.getSingle(list2, model);return model;}//拆连子public static void get123(List<Card> list,Model model){List<Card> del=new ArrayList<Card>();//要删除的Cardsif(list.size()>0&&(Common.getValue(list.get(0))<7||Common.getValue(list.get(list.size()-1))>10))return;if(list.size()<5)return;for(int i=0,len=list.size();i<len;i++){int k=i;for(int j=i;j<len;j++){if(Common.getValue(list.get(i))-Common.getValue(list.get(j))==j-i) {k=j;}}if(k-i>=4){String s="";for(int j=i;j<k;j++)s+=list.get(j).name+",";del.add(list.get(j));}s+=list.get(k).name;del.add(list.get(k));model.a123.add(s);i=k;}}list.removeAll(del);}//拆双顺public static void getTwoTwo(List<Card> list,Model model){ List<String> del=new ArrayList<String>();//要删除的Cards//从model里面的对子找List<String> l=model.a2;if(l.size()<3)return ;Integer s[]=new Integer[l.size()];for(int i=0,len=l.size();i<len;i++){String []name=l.get(i).split(",");s[i]=Integer.parseInt(name[0].substring(2,name[0].length()));}//s0,1,2,3,4 13,9,8,7,6for(int i=0,len=l.size();i<len;i++){int k=i;for(int j=i;j<len;j++){if(s[i]-s[j]==j-i)k=j;}if(k-i>=2)//k=4 i=1{//说明从i到k是连队String ss="";for(int j=i;j<k;j++)ss+=l.get(j)+",";del.add(l.get(j));}ss+=l.get(k);model.a112233.add(ss);del.add(l.get(k));i=k;}}l.removeAll(del);}//拆飞机public static void getPlane(List<Card> list,Model model){ List<String> del=new ArrayList<String>();//要删除的Cards//从model里面的3带找List<String> l=model.a3;if(l.size()<2)return ;Integer s[]=new Integer[l.size()];for(int i=0,len=l.size();i<len;i++){String []name=l.get(i).split(",");s[i]=Integer.parseInt(name[0].substring(2,name[0].length()));}for(int i=0,len=l.size();i<len;i++){int k=i;for(int j=i;j<len;j++){if(s[i]-s[j]==j-i)k=j;}if(k!=i){//说明从i到k是飞机String ss="";for(int j=i;j<k;j++){ss+=l.get(j)+",";del.add(l.get(j));}ss+=l.get(k);model.a111222.add(ss);del.add(l.get(k));i=k;}}l.removeAll(del);}//拆炸弹public static void getBoomb(List<Card> list,Model model){List<Card> del=new ArrayList<Card>();//要删除的Cards//王炸if(list.size()>=2 &&Common.getColor(list.get(0))==5 && Common.getColor(list.get(1))==5){model.a4.add(list.get(0).name+","+list.get(1).name); //按名字加入del.add(list.get(0));del.add(list.get(1));}//如果王不构成炸弹咋先拆单if(Common.getColor(list.get(0))==5&&Common.getColor(list.get(1))!=5){del.add(list.get(0));model.a1.add(list.get(0).name);}list.removeAll(del);//一般的炸弹for(int i=0,len=list.size();i<len;i++){if(i+3<len && Common.getValue(list.get(i))==Common.getValue(list.get(i+3))){String s=list.get(i).name+",";s+=list.get(i+1).name+",";s+=list.get(i+2).name+",";s+=list.get(i+3).name;model.a4.add(s);for(int j=i;j<=i+3;j++)del.add(list.get(j));i=i+3;}}list.removeAll(del);}//拆3带public static void getThree(List<Card> list,Model model){List<Card> del=new ArrayList<Card>();//要删除的Cards//连续3张相同for(int i=0,len=list.size();i<len;i++){if(i+2<len&&Common.getValue(list.get(i))==Common.getValue(list.get(i+2))) {String s=list.get(i).name+",";s+=list.get(i+1).name+",";s+=list.get(i+2).name;model.a3.add(s);for(int j=i;j<=i+2;j++)del.add(list.get(j));i=i+2;}}list.removeAll(del);}//拆对子public static void getTwo(List<Card> list,Model model){List<Card> del=new ArrayList<Card>();//要删除的Cards//连续2张相同for(int i=0,len=list.size();i<len;i++){if(i+1<len&&Common.getValue(list.get(i))==Common.getValue(list.get(i+1))){String s=list.get(i).name+",";s+=list.get(i+1).name;model.a2.add(s);for(int j=i;j<=i+1;j++)del.add(list.get(j));i=i+1;}}list.removeAll(del);}//拆单牌public static void getSingle(List<Card> list,Model model){ List<Card> del=new ArrayList<Card>();//要删除的Cards//1for(int i=0,len=list.size();i<len;i++){model.a1.add(list.get(i).name);del.add(list.get(i));}list.removeAll(del);}//隐藏之前出过的牌public static void hideCards(List<Card> list){for(int i=0,len=list.size();i<len;i++){list.get(i).setVisible(false);}}//检查牌的是否能出public static int checkCards(List<Card> c,List<Card>[] current){ //找出当前最大的牌是哪个电脑出的,c是点选的牌List<Card> currentlist=(current[0].size()>0)?current[0]:current[2];CardType cType=Common.jugdeType(c);//如果张数不同直接过滤if(cType!=CardType.c4&&c.size()!=currentlist.size())return 0;//比较我的出牌类型if(Common.jugdeType(c)!=Common.jugdeType(currentlist)){return 0;}//比较出的牌是否要大//王炸弹if(cType==CardType.c4){if(c.size()==2)return 1;if(currentlist.size()==2)return 0;}//单牌,对子,3带,4炸弹if(cType==CardType.c1||cType==CardType.c2||cType==CardType.c3||cType==Card Type.c4){if(Common.getValue(c.get(0))<=Common.getValue(currentlist.get(0))){return 0;}else {return 1;}}//顺子,连队,飞机裸if(cType==CardType.c123||cType==CardType.c1122||cType==CardType.c111222) {if(Common.getValue(c.get(0))<=Common.getValue(currentlist.get(0))) return 0;elsereturn 1;}//按重复多少排序//3带1,3带2 ,飞机带单,双,4带1,2,只需比较第一个就行,独一无二的if(cType==CardType.c31||cType==CardType.c32||cType==CardType.c411||cType== CardType.c422||cType==CardType.c11122234||cType==CardType.c1112223344){ List<Card> a1=Common.getOrder2(c); //我出的牌List<Card> a2=Common.getOrder2(currentlist);//当前最大牌if(Common.getValue(a1.get(0))<Common.getValue(a2.get(0)))return 0;}return 1;}//按照重复次数排序public static List getOrder2(List<Card> list){List<Card> list2=new ArrayList<Card>(list);List<Card> list3=new ArrayList<Card>();List<Integer> list4=new ArrayList<Integer>();int len=list2.size();int a[]=new int[20];for(int i=0;i<20;i++)a[i]=0;for(int i=0;i<len;i++){a[Common.getValue(list2.get(i))]++;}int max=0;for(int i=0;i<20;i++){max=0;for(int j=19;j>=0;j--){if(a[j]>a[max])max=j;}for(int k=0;k<len;k++){if(Common.getValue(list2.get(k))==max){list3.add(list2.get(k));}}list2.remove(list3);a[max]=0;}return list3;}}class Card_index{List a[]=new ArrayList[4];//单张}(4)Time.java主要代码public class Time extends Thread {Main main;boolean isRun = true;int i = 10;public Time(Main m, int i) {this.main = m;this.i = i;}@Overridepublic void run() {while (i > -1 && isRun) {main.time[1].setText("倒计时:" + i--);second(1);// 等一秒}if (i == -1)// 正常终结,说明超时main.time[1].setText("不抢");ndlord[0].setVisible(false);ndlord[1].setVisible(false);for (Card card2 : main.playerList[1])card2.canClick = true;// 可被点击// 如果自己抢到地主if (main.time[1].getText().equals("抢地主")) { // 得到地主牌main.playerList[1].addAll(main.lordList);openlord(true);second(2);// 等待五秒Common.order(main.playerList[1]);Common.rePosition(main, main.playerList[1], 1);setlord(1);} else {// 电脑选地主if (Common.getScore(main.playerList[0]) < Common .getScore(main.playerList[2])) {main.time[2].setText("抢地主");main.time[2].setVisible(true);setlord(2);// 设定地主openlord(true);second(3);main.playerList[2].addAll(main.lordList);Common.order(main.playerList[2]);Common.rePosition(main, main.playerList[2], 2);openlord(false);} else {main.time[0].setText("抢地主");main.time[0].setVisible(true);setlord(0);// 设定地主openlord(true);second(3);main.playerList[0].addAll(main.lordList);Common.order(main.playerList[0]);Common.rePosition(main, main.playerList[0], 0);//openlord(false);}}// 选完地主后关闭地主按钮ndlord[0].setVisible(false);ndlord[1].setVisible(false);turnOn(false);for (int i = 0; i < 3; i++){main.time[i].setText("不要");main.time[i].setVisible(false);}// 开始游戏根据地主不同顺序不同main.turn=main.dizhuFlag;while (true) {if(main.turn==1) //我{turnOn(true);// 出牌按钮 --我出牌timeWait(30, 1);// 我自己的定时器turnOn(false);//选完关闭main.turn=(main.turn+1)%3;if(win())//判断输赢break;}if (main.turn==0){computer0();main.turn=(main.turn+1)%3;if(win())//判断输赢break;}if(main.turn==2){computer2();main.turn=(main.turn+1)%3;if(win())//判断输赢break;}}}// 等待i秒public void second(int i) {try {Thread.sleep(i * 1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}// 地主牌翻看public void openlord(boolean is) {for (int i = 0; i < 3; i++) {if (is)main.lordList.get(i).turnFront(); // 地主牌翻看else {main.lordList.get(i).turnRear(); // 地主牌闭合}main.lordList.get(i).canClick = true;// 可被点击}}// 设定地主public void setlord(int i) {Point point = new Point();if (i == 1)// 我是地主{point.x = 80;point.y = 430;main.dizhuFlag = 1;// 设定地主}if (i == 0) {point.x = 80;point.y = 20;main.dizhuFlag = 0;}if (i == 2) {point.x = 700;point.y = 20;main.dizhuFlag = 2;}main.dizhu.setLocation(point);main.dizhu.setVisible(true);}// 打开出牌按钮public void turnOn(boolean flag) {main.publishCard[0].setVisible(flag);main.publishCard[1].setVisible(flag);}// 电脑0走牌(我代表1)public void computer0() {timeWait(1, 0); // 定时ShowCard(0); // 出牌}// 电脑2走牌(我代表1)public void computer2() {timeWait(1, 2); // 定时ShowCard(2); // 出牌}// 走牌public void ShowCard(int role) {Model model = Common.getModel(main.playerList[role]);// 待走的牌List<String> list = new ArrayList();// 如果是主动出牌if (main.time[(role + 1) % 3].getText().equals("不要")&& main.time[(role + 2) % 3].getText().equals("不要")) { // 有单出单 (除开3带,飞机能带的单牌)if (model.a1.size() > (model.a111222.size() * 2 + model.a3.size())) { list.add(model.a1.get(model.a1.size() - 1));}// 有对子出对子 (除开3带,飞机)else if (model.a2.size() > (model.a111222.size() * 2 + model.a3 .size())) {list.add(model.a2.get(model.a2.size() - 1));}// 有顺子出顺子else if (model.a123.size() > 0) {list.add(model.a123.get(model.a123.size() - 1));}// 有3带就出3带,没有就出光3else if (model.a3.size() > 0) {// 3带单,且非关键时刻不能带王,2if (model.a1.size() > 0) {list.add(model.a1.get(model.a1.size() - 1));}// 3带对else if (model.a2.size() > 0) {list.add(model.a2.get(model.a2.size() - 1));}list.add(model.a3.get(model.a3.size() - 1));}// 有双顺出双顺else if (model.a112233.size() > 0) {list.add(model.a112233.get(model.a112233.size() - 1));}// 有飞机出飞机else if (model.a111222.size() > 0) {String name[] = model.a111222.get(0).split(",");// 带单if (name.length / 3 <= model.a1.size()) {list.add(model.a111222.get(model.a111222.size() - 1));for (int i = 0; i < name.length / 3; i++)list.add(model.a1.get(i));} else if (name.length / 3 <= model.a2.size())// 带双{list.add(model.a111222.get(model.a111222.size() - 1));for (int i = 0; i < name.length / 3; i++)list.add(model.a2.get(i));}// 有炸弹出炸弹} else if (model.a4.size() > 0) {// 4带2,1int sizea1 = model.a1.size();int sizea2 = model.a2.size();if (sizea1 >= 2) {list.add(model.a1.get(sizea1 - 1));。
DVD仿真程序的设计面向对象程序课程设计说明书
科技大学课程设计说明书课程名称面向对象程序课程设计题目DVD仿真程序设计院系电子信息工程学院班级计101学生梦鸽指导教师中华、晓玲、艳霞日期2013.3.3~2013.3.17课程设计任务书任课教师:中华、晓玲、艳霞时间:2013.3.3课程设计报告文档题目:DVD仿真程序设计一.引言1.编写目的:实现模拟DVD的功能需要包含①数据显示区域(相当于显示类的产品),②DVD模拟区域,实现模拟DVD的快进,快退,播放,暂停,菜单,上一首,下一首,音量的加,音量减的功能。
此外模拟了一个接口按钮,用于DVD 向显示设备的数据输入。
还模拟了一个DVD的电源开关。
至此,实现此次DVD仿真模拟的设计目的。
2. 定义:MFC (Microsoft Foundation Classes):是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。
其中包含的类包含大量Windows句柄封装类和很多Windows的建控件和组件的封装类3.参考资料:[1] 秋生. c/c++程序设计教程—面向对象分册. :电子工业,2012[2] 邱勇、肖春宝、白秀玲. 《可视化程序设计》. :清华大学[3] 黄维通. visual c++面向对象与可视化程序设计. :清华大学二.任务的描述1.目标:通过本课程设计,使学生巩固面向对象程序设计的基本概念、原理和技术,学会使用C++语言进行简单程序的开发,将理论与实际相结合,完成一个小型程序的设计与实现,并在此基础上强化学生的实践意识,提高其实际动手能力和创新能力。
2. 功能描述:DVD的仿真模拟分为①数据显示区域(相当于显示类的产品),②DVD 模拟区域,模拟DVD的快进,快退,播放,暂停,菜单,上一首,下一首,音量的加,音量减的功能。
此外模拟了一个接口按钮,用于DVD向显示设备的数据输入。
面向对象编程java课程设计
面向对象编程java课程设计一、课程目标知识目标:1. 让学生掌握面向对象编程的基本概念,如类、对象、继承、封装和多态;2. 使学生了解Java语言中面向对象编程的基本语法和结构;3. 帮助学生理解面向对象编程在实际软件开发中的应用场景和优势。
技能目标:1. 培养学生运用Java语言编写面向对象程序的能力;2. 使学生能够运用继承、封装和多态等面向对象编程技术进行程序设计;3. 培养学生分析问题、设计并实现面向对象解决方案的能力。
情感态度价值观目标:1. 激发学生对编程的兴趣,提高他们学习Java语言的积极性;2. 培养学生良好的编程习惯,强调代码规范和程序结构的重要性;3. 培养学生的团队协作能力,让他们在编程实践中学会分工与协作。
分析课程性质、学生特点和教学要求,本课程将目标分解为以下具体学习成果:1. 学生能够独立编写简单的面向对象Java程序;2. 学生能够利用面向对象编程技术解决实际问题;3. 学生能够在团队项目中发挥自己的优势,与团队成员共同完成项目任务;4. 学生能够理解面向对象编程在实际应用中的价值,提高编程兴趣和自信心。
二、教学内容1. 面向对象编程基本概念:介绍类、对象、属性、方法等基本概念,以及面向对象编程的特点和优势。
教材章节:第一章 面向对象编程概述2. Java类与对象:讲解如何定义类、创建对象,以及对象的初始化和引用。
教材章节:第二章 Java类与对象3. 继承与多态:阐述继承的概念、实现方法,以及多态的原理和应用。
教材章节:第三章 继承与多态4. 封装:介绍封装的概念,讲解如何通过访问权限控制、构造方法等实现封装。
教材章节:第四章 封装5. Java集合框架:介绍Java集合框架的基本概念,如List、Set、Map等,以及集合的使用场景。
教材章节:第五章 Java集合框架6. 异常处理:讲解异常处理的基本概念、分类,以及如何使用try-catch语句进行异常处理。
面向对象课程设计论文
面向对象课程设计论文一、教学目标本课程的教学目标是使学生掌握面向对象编程的基本概念、原理和方法,培养学生独立思考、动手实践的能力,提高学生运用面向对象技术解决实际问题的综合素质。
1.理解面向对象编程的基本概念,如类、对象、封装、继承、多态等。
2.熟悉面向对象编程的语法和结构,能够运用面向对象的思想编写简单的程序。
3.能够使用面向对象编程语言(如Java、C++等)编写简单的程序。
4.能够运用面向对象技术解决实际问题,如设计类、创建对象、实现方法等。
情感态度价值观目标:1.培养学生对编程的兴趣和热情,提高学生主动学习和探索的精神。
2.培养学生团队协作、相互帮助的意识,提高学生的沟通能力和团队协作能力。
二、教学内容根据课程目标,本课程的教学内容主要包括面向对象编程的基本概念、语法和应用。
1.面向对象编程的基本概念:类、对象、封装、继承、多态等。
2.面向对象编程的语法:类和对象的定义、成员变量和成员方法、构造方法、继承和多态等。
3.面向对象编程的应用:设计类、创建对象、实现方法、解决实际问题等。
三、教学方法本课程采用多种教学方法,包括讲授法、讨论法、案例分析法、实验法等,以激发学生的学习兴趣和主动性。
1.讲授法:通过讲解面向对象编程的基本概念和语法,使学生掌握相关知识。
2.讨论法:学生进行小组讨论,引导学生主动思考和探索面向对象编程的应用。
3.案例分析法:分析实际案例,让学生了解面向对象编程在实际问题中的应用。
4.实验法:让学生动手实践,编写面向对象的程序,提高学生的实际操作能力。
四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备等。
1.教材:选用权威、实用的面向对象编程教材,为学生提供系统的学习资料。
2.参考书:提供相关的参考书籍,拓展学生的知识面。
3.多媒体资料:制作精美的PPT、视频等多媒体资料,提高学生的学习兴趣。
4.实验设备:提供足够的计算机设备,让学生进行实验和动手实践。
五、教学评估本课程的评估方式包括平时表现、作业和考试等,旨在全面、客观地评价学生的学习成果。
JAVA课程设计报告_完整版
《JAVA面向对象程序设计》课程设计报告(2011-2012学年第2学期)系别:厦门理工学院计算机科学与技术系专业名称:10级网络工程1班课程设计科目:《JAVA面向对象程序设计》课程设计学生姓名:学号:指导教师:***成绩:完成时间:2012年7月6日题目JAVA程序课程设计任务一手机号码检测器(一)设计任务与目标任务:手机号码是由11位数字构成,用户在输入手机号码时经常混乱输入若干位数字或字母,要求你编写一个程序检测用户所输入的手机号码是否符合规则。
要求目标:检测所输入的手机号码是否是11位检测每一位是否都为数字。
分析论证:本题目要求对用户输入的手机号码进行检测,判断输入的正确性。
曾经有做过类似字符比较的题目,可以借鉴。
将字符的比较运用进来,把用户的输入字符和正确的进行比较。
但是必须满足多次输入和错误提醒。
同时还可以添加提示错误的位置和错误字符是什么。
程序正确运行时可以满足以上功能,基本可以达到题目要求了。
(二)方案设计与论证为了满足多次输入的要求,将提示和输入的操作放在一个循环体中,我采用了do_whiele()循环。
每次输入结束后提示是否继续输入。
在循环中逐步对输入的号码位数和字符类型进行检测。
位数可以分超出和不足,并均给出错误提示。
如果位数满足要求后对手机号码类型进行检测。
一般手机号在0~9之间,所以不满足的字符将报错。
通过将输入的整个字符串调用charAt(int i)方法对字符串逐位比较。
本程序的特点在于可以满足了多次输入和错误字符的显示(内容和位置)。
在程序的调试过程中,有过多次输入正确的号码也会报错(还会报错0位错误),这是因为记录错误位子的变量放在错误条件下并且未在循环体中初始化为0。
最终解决了此问题。
(三)程序框图或流程图,程序清单与调用关系(四)程序运行的测试与分析实现了多次输入和错误提示,可以判断输入的号码的错误位置及字符,错误类型,满足了设计构思要求。
最终结果如下图:实验结果截图:(五)结论心得实验过程中对于判断条件的选择出现了问题,开始时觉得要对输入的字符一个一个的比较,这样增加了难度也不方便实现。
记事本课程设计报告 613
衡阳师范学院《面向对象程序设计(VC++)》课程设计报告题目:记事本程序班级:1101学号:11190112 11190127 11190115作者姓名:付娜舒浪黄莹融指导教师:陈琼2012年6月目录1设计题目与要求 (3)1.1实验目的 (3)1.2设计要求 (3)1.3 初始条件 (3)2总体设计思想及相关知识 (3)2.1总体设计思想 (3)2.2 临界区互斥编程原理 (3)2.3开发环境与工具 (4)3有关方法及模块说明 (4)3.1 文档类方法 (4)3.2视图类方法 (5)3.3文档的建立、打开或保存 (5)4源程序代码 (6)5测试及结果 (10)6总结 (11)7小组成员任务分配 (13)参考文献 (14)1.设计题目与要求1.1实验目的通过对记事本程序的设计编写,深入了解和掌握MFC原理与方法。
1.2设计要求设计一个方便、美观的记事本程序,具有编辑文本、实现字数统计、设置背景/前景颜色等功能。
1.3 初始条件(1)操作系统:MFC AppWizard 应用程序(2)程序设计语言:C++(3)在原有菜单的基础上增加新功能菜单2.总体设计思想及相关知识2.1总体设计思想记事本在电脑中有很大的作用。
可以储存文字信息,在利用小空间的情况下,记事本是个很好的选择。
设计一个程序,使用MFC AppWizard创建基于SDI项目NotePad的应用程序框架。
创建背景颜色、字体等对话框,添加菜单项,利用MFC应用程序类向导对消息映射进行管理,再添加代码,完成程序设计。
主要用到的主要是文档类与视图类的结合。
2.2 MFC应用程序原理MFC提供了一个标准化的程序框架和实现基本功能的类。
它生成一般的应用程序所需要的基本骨架,定制了程序的结构和源代码。
MFC能够简化大部分Windows API的使用。
MFC采用了API中的一些功能,例如窗口管理、图形输出或消息路由选择,并利用对程序更有好处的C++类进行封装,使之更易于使用。
