版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编号:( )字 号软件课程设计报告班 级: 姓 名: 学 号: 指导老师: 年 月软件课程设计任务书专业年级: 学生姓名: 任务下达日期: 课程设计日期:目录一、 面向过程设计题21.1 需求分析.41.2 概要设计.41.3 详细设计与编码.41.4 调试分析.41.5 用户使用说明 .51.6 设计心得.5二、面向过程设计题42.1 需求分析.52.2 概要设计.52.3 详细设计与编码.52.4 调试分析.62.5 用户使用说明 .62.6 设计心得.6三、面向对象设计题1-复数的加法以及对复数的输出3.1 需求分析.73.2 概要设计.73.3 详细设计与编码.73.4 调试分析.83
2、.5 用户使用说明 .83.6 设计心得.8四、面向过程设计题2-日期的输出和比较等4.1 需求分析.84.2 概要设计.84.3 详细设计与编码.84.4 调试分析.114.5 用户使用说明 .114.6 设计心得.11五、图形界面1-mfc视频步骤5.1 mfc视频步骤12六、数据结构设计题4-统计选票(4.cpp)6.1 需求分析.236.2 概要设计.236.3 详细设计与编码.236.4 调试分析.286.5 用户使用说明 286.6 设计心得.28七、数据结构设计题9-9:暗记扑克牌(9.cpp)7.1 需求分析287.2 概要设计.287.3 详细设计与编码.297.4 调试分析
3、.387.5 用户使用说明 .387.6 设计心得.39八、课程设计总结 .39第一阶段 面向过程程序设计一 面向过程设计题21.1 需求分析编程序,从键盘输入正整数n,求出n与其反序数之和并输出。利用循环语句求出n的反序数。1.2 概要设计利用do-while循环语句求出n的反序数。doa=c%10;m=m*10+a;c=c/10;while(c!=0);然后再求n与n的反序数的和。1.3 详细设计与编码#includeusing namespace std;int main()int n,a,m=0,c,b; / 定义所需变量 coutplease input a number that
4、more than zeron; / 输入正整数nc=n;do a=c%10;m=m*10+a;c=c/10;while(c!=0); / 求出n的反序数b=n+m;coutn+m = bendl;return 0;1.4 调试分析do-while语句中结束条件要做对,否则程序运行错误。调试时若出现错误,双击错误,即指示出错误所在行,检查错误,修改。1.5 用户使用说明(1) 打开程序,输入正整数n(2) 按回车键可得出结果1.6 设计心得本程序主要是求出n的反序数,利用do-while循环语句可容易求出n的反序数。程序设计中要联系所学知识,本题较简单,因此可以用简单的语句求出结果。二 面向过
5、程设计题42.1 需求分析编程序,输入正整数m,它代表一个人民币钱数(元数)。求取这样一个方案,使用最少张数的人民币纸币,凑成上述的钱数m,并输出求取结果。2.2 概要设计给出不同的变量对应不同的金钱面额,根据输入的正整数m,把m每个位置的数字分别求出,既得出所需的最少张数的人民币。2.3 详细设计与编码#includeusing namespace std;int main() int output(int m); / 函数声明int m; coutplease enter a number:m; / 输入正整数mif(m=0) couterrorendl;else output(m); /
6、 调用函数return 0;int output(int m) / 定义函数 int hun,fif,twen,te,fiv,tw,on; / 定义变量 hun=m/100; fif=(m-hun*100)/50; twen=(m-hun*100-fif*50)/20; te=(m-hun*100-fif*50-twen*20)/10; fiv=(m-hun*100-fif*50-twen*20-te*10)/5; tw=(m-hun*100-fif*50-twen*20-te*10-fiv*5)/2; on=m-hun*100-fif*50-twen*20-te*10-fiv*5-tw*2;
7、 couthun张100元 fif张50元 twen张20元 te张10元 fiv张5元tw张2元 on张1元 endl; return 0;2.4 调试分析不同的变量对应不同面额的纸币,书写代码时注意不要混乱,以免引起程序错误。程序中“/”和“%”的代表的含义不要弄反。2.5 用户使用说明(1) 打开程序,输入正整数m(2) 按回车键可得出结果2.6 设计心得本程序主要是求出正整数m每个位置上的数字,通过调用函数和if语句可求出所需的人民币张数。另外编写程序时要仔细认真,尽量不出错误。第二阶段 面向对象程序设计三、面向对象设计题1-复数的加法以及对复数的输出3.1 需求分析自定义一个示意性的
8、复数类型complex,其中含有若干个成员函数,使用该类可以完成复数的加法以及对复数的输出。3.2概要设计定义一个类complex以及无参数构造函数和带参数构造函数,设计函数让复数的实部和虚部分别相加,通过输出函数输出运算的值3.3详细设计与编码#includeusing namespace std;class complexpublic:complex()real=0;imag=0;/无参构造函数complex(double r, double i)real=r;imag=i; /2参构造函数complex addcom(complex &c2); /调用者对象与对象c2相加,返回compl
9、ex类对象void outcom (); /输出调用者对象的有关数据(各分量)private:double real; /复数实部double imag; /复数虚部;complex complex:addcom(complex &c2)complex c;c.real=real+c2.real;c.imag=imag+c2.imag;return c;void complex:outcom()cout(real,imagi)endl;int main()complex c1(3,4);complex c2(5,-10);complex c3;c3=c1.addcom(c2);coutc1=;
10、c1.outcom();coutc2=;c2.outcom();coutc1+c2=;c3.outcom();return 0;3.4调试分析输入代码后,进行调试,代码中容易遗漏一些符号,特别是分号和花括号,容易出错。代码中会出新一些语法错误,改正后继续调试,最终结果正确。3.5 用户使用说明1运行程序,在代码中已经对构造函数赋值。3.6 设计心得程序设计要耐心仔细,不怕出错,及时修改程序四、面向过程设计题2日期的输出和比较等4.1 需求分析自定义一个简单的日期类datetype,它具有数据成员y、m、d,用来表示当前日期的年、月、日。而后设计该类欲实现(完成)的功能,进而设计出相应的类成员函
11、数。4.2 概要设计定义一个类,定义数组,数组成员为12个月的天数,需要指出的是闰年的2月有29当日超过当月的天数的时候,月就加一,当月的数量超过12的时候,年就加一。再设计一个比较比较日期相等的函数,如果日期相等就返回true,如果日期不相等就返回false.4.3 详细设计与编码#includeusing namespace std;class datetype /定义日期类private : int y,m,d; /定义数据成员分别表示日期的年,月,日public: datetype(int y0=1,int m0=1,int d0=1);/设置有默认参数的构造函数 void incre
12、mentday(); /增加一天的函数的声明 bool equal(datetype dt2); /比较是否相等的函数声明 void printdate(); /输出日期的函数声明;datetype:datetype(int y0,int m0,int d0) /构造函数的实现 y=y0;m=m0;d=d0;void datetype:incrementday() /增加一天的函数的实现 int d1; if(m=2) if(y%4=0&y%100!=0)|(y%400=0) /判断该年是否是闰年 d1=29; /闰年二月有29天 else d1=28; /非闰年二月28天 else swit
13、ch(m) /由于月份的不同每月的天数有可能不同 case 1 : case 3 : case 5 : case 7 : case 8 : case 10: case 12: d1=31;break; /大月31天 case 4 : case 6 : case 9 : case 11: d1=30;break; /小月30天 if (+d=d1) /增加一天,如果超过该月的天数就增加一个月 d=d-d1; m+; /增加一个月 if(m12) /如果月数大于12 就增加一年 m=m-12; y+; /增加一年 bool datetype:equal(datetype dt2) /比较是否相等的
14、函数实现 if(y=dt2.y)&(m=dt2.m)&(d=dt2.d) return true; /如果年,月,日都相同就返回true return false ; / 否则就返回falsevoid datetype:printdate() /输出日期的函数实现 couty/m/dendl; /输出“年/月/日”形式int main() datetype d1(2000,2,29),d2(2005,12,31),d3(2006,7,3),d4; /定义datetype类对象 d1.printdate(); d1.incrementday(); cout增加一天变为: ; d1.printda
15、te(); d2.printdate(); d2.incrementday(); cout增加一天变为: ; d2.printdate(); d3.printdate(); d3.incrementday(); cout增加一天变为: ; d3.printdate(); d2.printdate(); cout与; d3.printdate(); if(d2.equal(d3) cout相等endl; else cout不相等endl;/ compare(d2,d3); /coutendl; d4=d3; d3.printdate(); cout与; d4.printdate(); if(d3
16、.equal(d4) cout相等endl; else cout不相等textout(200,200,hello,world!);/在窗口的(200,200)位置输出文字 4 添加完成后编译、运行,就出现了了如下界面:mfc视频操作3添加菜单项的步骤在菜单编辑器中添加菜单资源,设置菜单属性(包括菜单名和它的id标识)。使用类向导classwizard建立菜单消息和成员函数的映射。手工编辑成员函数,加入需要的菜单消息处理代码。1. 在菜单编辑器中添加菜单资源:打开操作2中建立的“hello”工程,选择workspace的resourceview面板后,单击hello resource前面的+号展
17、开,点击menu文件夹,双击idr_hellotype打开菜单编辑器。做相应的插入、删除、编辑处理。添加的“问候”与“画圆”相关信息如下:2. 为“问候”与“画圆”这两个菜单项添加快捷键:在resourceview面板中单击accelerator前的加号,展开快捷键资源夹后双击idr_mainframe打开快捷键编辑器。双击空白项,弹出快捷键属性对话框,设置相关信息如下:3. 使用类向导classwizard建立菜单消息和成员函数的映射:在messages栏中双击command,弹出add member function对话框,框中给出缺省的成员函数名onhellohi,单击ok接受。从cla
18、ss name下拉列表中选择chelloview类,在object ids中选择id_hello_hi。选择菜单viewclasswizard弹出mfc classwizard对话框。选择message maps(管理消息和成员函数之间的映射关系,实现对成员函数添加、删除、编辑操作)标签。此时onhellohi成员函数就出现在member functions列表框中,后面是其映射的消息(如右所示)。member functions列表中双击onhellohi,返回到“资源编辑区”,并定位到onhellohi函数定义的开始位置。在onhellohi函数体中编写语句。添加消息id_hello_ci
19、rcle的处理函数同上。【附】onhellohi函数中的语句afxmessagebox(hi,大家好!);/ afxmessagebox为消息框函数,它用来弹出一个消息框【附】onhellocircle函数中的语句cclientdc dc(this);/创建客户区dcdc.ellipse(0,0,100,100);/在客户区dc的一个矩形区域内画一个圆4. 添加右键快捷菜单:首先新建一个菜单资源,在主窗口菜单中选择:insertresource。在弹出的对话框中选择menu,单击new按钮,这就在resourceview面板的menu资源夹中插入了idr_menu1。在idr_menu1上右击
20、,选择最后一项properties,在properties对话框中将id:idr_menu1改为idr_hello。双击idr_hello打开菜单编辑器,编辑方法同步骤1。添加内容如下:之后启动类向导classwizard,弹出adding a class对话框,选中select an existing class项,单击ok。弹出select class对话框,选择chelloview类,单击select按钮。返回mfc classwizard对话框,在object ids中选择chelloview,在messages栏中双击wm_contextmenu,将其添加到member functi
21、ons列表中,双击进行编辑。【附】oncontextmenu函数中的语句cmenu mymenu;cpoint m_ptmsg=point;/鼠标单击的位置screentoclient(&m_ptmsg);/转化为客户区坐标mymenu.loadmenu(idr_hello);/加载快捷菜单cmenu *ppopup=mymenu.getsubmenu(0);ppopup-trackpopupmenu(tpm_leftalign|tpm_rightbutton,point.x,point.y,this);/跟踪并显示快捷菜单/该段程序的作用是产生鼠标右键点击空白处可弹出快捷菜单的功能接着给“画
22、线”菜单项建立消息映射和添加函数代码,方法同步骤2。【附】onhelloline函数中的语句cclientdc dc(this);/创建客户区dcdc.lineto(100,100);/从客户区的左上角到(100,100)之间画一条直线5完成之后编译运行结果如下:可视化4:如何在状态栏中显示滚动文字具体操作分为八个步骤:创建应用程序框架添加字符串资源id_scroll_text给cmainframe类增加成员变量m_strscrolltext,用于设定带显示的字符串用classwizard给cmai frame类添加wm_timer和wm_destroy消息映射和处理函数在indicator数
23、组中添加状态栏新的指示器窗格id添加定时器消息处理函数代码编译运行添加撤销定时器代码在cmainframe类的oncreate函数中添加滚动文体的初始化的启动定时器实现状态栏的第一个窗格也和其他处窗格一样具有立体边框,并使窗格具有可伸展性step1. 创建应用程序框架1. 选择菜单file new.在projects标签中选mfc appwizard(exe),在project name 中输入工程名:startscrltext.按ok键启动mfc用程序2. 在mfc appwizard第一步中选择“single document”,然后在下面各步中均接受默认设置,最后生成startscrlt
24、ext.工程。 step2. 在indicator数组中添加状态栏新的指示器窗格id1. 选择工程工作区的fileview面板。2. 单击加号展开文件列表,再单击sorce file前的加号,展开startscrltext工程中的实现文件列表。3. 双击mainfrane.cpp.文件。4. 移动光标,找到indicator数组,在其中添加如下代码step3添加字符串资源id_scroll_text1. 选择工程工作取得resourceview面板。2. 展开该工程资源列表,单击string table前加号,展开startscrltext工程的字符串资源列表。3. 双击string tabl
25、e,然后双击资源编辑器最后面的空白行,再打开的对话框的id编辑框中输入:id_scroll_text.4. 在caption编辑框中输入若干空格,空格长度即为所要现实的窗格的大小step4给cmainframe类增加成员变量m_strscrolltext,用于设定带显示的字符串1. 选择classview面板并展开,然后再cmainframe类名称中右击鼠标,从弹出来的快捷菜单中选add member variable.2. 在变量类型编辑框中输入cstring.3. 在变量名称一栏中输入m_strscrolltext4. 在access一栏中选择publicstep5用classwizard
26、给cmai frame类添加wm_timer和wm_destroy消息映射和处理函数1. 按ctrl +w打开classwizard对话框,选择message maps标签2. 在class name 下拉列表中选cmainframe在object ids列表框中选cmainframe再到messag列表中选wm_destroy消息3. 单击add fuction按钮,则ondestroy函数出现在下面的成员函数列表中4. 再从message列表中双击wm_timer消息,添加相应的处理函数:ontimer然后单击edit code 按钮step6. 添加定时器消息处理函数代码1. 定位到cm
27、ainframe类中的ontimer函数,在其中添加如下代码step7. 添加撤销定时器代码在该文件中找到ondestroy函数,然后添加销毁定时器代码。step8在cmainframe类的oncreate函数中添加滚动文体的初始化的启动定时器移动光标,在该文件中找到oncreat函数。然后在函数最后添加如下代码:step9实现状态栏的第一个窗格也和其他处窗格一样具有立体边框,并使窗格具有可伸展性step10编译运行第四阶段六、数据结构设计题46.1需求分析1、设计一个统计选票的算法,输出每个候选人的得票结果2、假设采用单链表存放选票,候选人编号依次为1,2,3,n,且每张选票选且只选一人3、
28、以单链表存放选票,每个结点的data域存放该选票所选的候选人。用一个数组a统计得票结果。6.2概要设计用函数createlist ( )动态建立一个单链表,链表中每个节点的data域为空,返回头节点。statistics( )函数统计各个后选人所得票数。在主函数中先输入候选人数n,然后动态建立一维数组an来存放每个候选人所得票数(如ai表示第i+1号候选人所得票数),统计选票时调用statistics( )函数,将整个单链表全部遍历一遍,将各个候选人的得票个数计入到数组an中,最后输出各个候选人的得票情况。6.3详细设计与编码流程图开始输入候选人人数动态建立一维数组an来存放每个候选人所得票数
29、输入选票张数用createlist()函数动态建立一个单链表,并返回头节点调用statistics( )函数进行票数统计,将各个候选人的得票个数计入到数组an中输出各个候选人的得票情况结束程序代码#include using namespace std; typedef struct nodeint data;struct node *next;lnode;int n;lnode *createlist() /构建单链表,每投一票插入一个节点,节点data域存放所选的候选人号码lnode *l,*p,*t;int m,i;l=new lnode;l-next=null;l-data=null;
30、 /头结点data域中为空t=l; coutm; cout请投选票:endl;for(i=0;im;i+) p=new lnode; coutp-data; p-next=null; t-next=p; t=p; return l; /返回头结点void statistics(lnode *l,int *a) /统计投票情况lnode *p;p=l-next;while(p!=null) ap-data-1+; /ai中存放第i+1号候选人的得票个数 p=p-next;void main()int i;lnode *l;coutn; int *a=new intn; /动态建立数组,用来存放候
31、选人得票个数for(i=0;in;i+) ai=0;l=createlist(); /构建单链表,返回头结点 statistics(l,a); /统计投票情况for(i=0;in;i+) /输出得票结果cout第i+1个候选人的得票数为:aiendl; 运行结果6.4调试分析由于候选人数不确定,所以要根据输入的候选人人数动态建立数组来存放得票情况。在动态建立单链表的过程中系统出现过内存分配错误的问题,所以在建立链表时要保证尾节点的指针域始终为空,另设一个指针始终指向插入的节点,为下一个节点的插入做准备。创建单链表的函数返回头节点的地址,所以函数类型为指针类型。6.5用户使用说明用户进入界面后,
32、先输入候选人数,在输入要投票数,接着开始投票,每输入一个号码后按回车,最终得到投票结果。6.6设计心得本题是一道简单的数据结构链表创建和遍历问题。通过本题的练习和思考,行我了单链表和循环链表的创建以及创建链表时应该注意的问题,了解了链表在解决一些问题时的优越性,尤其是在删除或插入节点时(如约瑟夫问题)比线性表处理此类问题时的算法复杂度要简单很多。二叉树和图,本质上都是链表,所以链表是数据结构的灵魂,也是重点和难点,重视链表的学习对学好数据结构起着剧组轻重的作用。七、数据结构设计题97.1需求分析1、从一副扑克牌(54张)中任意抽出27张(不重复),摆放在不同的三行上(每行9张),用户“暗记”某
33、张纸牌,输入所“暗记”的那张纸牌处于哪一行。2、之后计算机再两次将纸牌重新摆放,并让用户再回答两次相同的提问(那张纸牌在重新摆放后又处在哪一行上)。3将用户所“暗记”的那张纸牌给挑出来,显示到屏幕上。7.2概要设计定义一个结构体pk,pk中存放扑克牌的数码和花色;成员函数有display( ),用来输出扑克牌的布局;int_char1( )函数用来将随机生成的整数转化为扑克牌的数码;int_char2 ( )函数用来将随机生成的整数转化为扑克牌的花色;move ( )函数用来重新摆放扑克牌,整数115对应的扑克牌数码依此为 a 1 2 3 4 5 6 7 8 9 10 j q k x z,整数
34、14对应扑克牌花色依此为a b c d (红桃、黑桃、梅花、方块)。在主函数中定义结构体数组p27用来存放取出的27张牌的数码和花色。先自动生成一张牌,之后每生成一张牌都要与前几张生成的牌进行比较,如果相同均要重新生成,直至生成27张不同的扑克牌为止;然后分三行显示这27张牌。之后调用move ( )函数,用户暗记一张牌并输入改牌所在的行数,然后计算机根据用户输入的行数决定重新洗牌的方式,洗完牌后将重新摆放的扑克牌布局显示到屏幕上,用户继续输入所记扑克牌的行数,计算机第二次将牌重新摆放,输出摆放的布局,用户再次回答提问,最终计算机将用户暗记的牌挑出来显示到屏幕上。7.3详细设计与编码流程图开始
35、自动生成27张不同的扑克牌,存放到结构体数组p27中分三行输出扑克牌的摆放布局用户暗记一张牌,并输入该牌所在行数计算机重新洗牌,并分三行输出扑克牌的摆放布局用户输入所记扑克牌的所在行数计算机重新洗牌,并分三行输出扑克牌的摆放布局用户输入所记扑克牌的所在行数计算机输出用户暗记的那张牌结束程序代码#include#includeusing namespace std;struct pkchar data; /扑克牌上的数码char hs; /扑克牌的花色;void display(pk); /输出扑克牌的摆放情况char int_char1(int); /将随机生成的数字转化为扑克牌上的数码cha
36、r int_char2(int); /将随机生成的数字转化为扑克牌上的花色void move(pk*); /重新摆放扑克牌void main()pk p27;for(;)p0.data=int_char1(rand()%15+1); /生成第 1 张扑克牌的数码p0.hs=int_char2(rand()%4+1); /生成第 1 张扑克牌的花色 for(int i=1;i27;)pk g;g.data=int_char1(rand()%15+1); /生成第 i+1 张扑克牌的数码g.hs=int_char2(rand()%4+1); /生成第 i+1 张扑克牌的花色bool prime=t
37、rue;for(int j=0;ji;j+) /将生成的扑克牌与前i张进行比较,出现相同的则重新生成扑克牌if(g.data=pj.data&g.hs=pj.hs)|g.data=x&pj.data=x|g.data=z&pj.data=z)prime=false;break;if(prime) pi.data=g.data;pi.hs=g.hs;i+;int l=1;int k;cout-endl;for( k=0;k27;k+)if(k=0|k=9|k=18)coutlinel ;l+;display(pk); /将扑克牌分行显示在屏幕上if(k+1)%9=0)coutendl; move
38、(p); char a;couta;while(a!=y&a!=n)couta;if(a=n)break;char int_char1(int i)char p;switch(i) / 将随机生成的数字转化为扑克牌上的数码,大小王为x和z case 1:p=a;break;case 2:p=2;break;case 3:p=3;break;case 4:p=4;break;case 5:p=5;break;case 6:p=6;break;case 7:p=7;break;case 8:p=8;break;case 9:p=9;break;case 10:p=w;break;case 11:p
39、=j;break;case 12:p=q;break;case 13:p=k;break;case 14:p=x;break; case 15:p=z;break; return p;char int_char2(int i)char p;switch(i) /将随机生成的数字转化为扑克牌上的数码case 1:p=a;break;case 2:p=b;break;case 3:p=c;break;case 4:p=d;break;return p;void display(pk h) /除了大小王,其余扑克牌均要输出数码和花色if(h.data=x)coutsetw(8)king2;else if(h.data=z)couts
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《土木工程资料》课件
- 2024-2025学年学年高三地理上学期第10周说课稿(人口的数量变化和人口的合理容量)
- 2024年度医疗设备公司与医院采购合同2篇
- 黑龙江省重点中学2024届高三4月阶段测试数学试题
- 《导尿及注意事项》课件
- 《金融学之保险公司》课件
- 《图形的标注》课件
- 《前列腺癌的治疗》课件
- 2024年度企业咨询服务及战略规划合同2篇
- 二零二四年度员工股权激励计划2篇
- 比亚迪汽车企业战略(swot分析)
- 工作交接表(模版)
- 高中学生社区服务活动记录表
- 数据模型与决策案例分析报告
- EXCEL桥涵水文计算公式大全
- 标签打印机验证方案(共20页)
- XRF定性和定量分析ppt课件
- 小学生宪法知识主题班会PPT专题教学
- 运营高速公路风险评价报告
- 1到13之内的24点全题及解(整理版
- 学校规章制度之语言文字规范化管理规章制度
评论
0/150
提交评论