软件课程设计l总结论文.doc_第1页
软件课程设计l总结论文.doc_第2页
软件课程设计l总结论文.doc_第3页
软件课程设计l总结论文.doc_第4页
软件课程设计l总结论文.doc_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

编号:( )字 号软件课程设计报告班 级:姓 名: 学 号: 指导老师: 张振环 中国矿业大学计算机科学与技术学院 2012年 12月36软件课程设计任务书专业年级: 学生姓名: 任务下达日期: 2012 年 10月 20 日课程设计日期: 2012 年 1月 日至 2013年 1 月 10 日课程设计题目: 面向过程 类别题目序号成绩面向过程5.判断日期与星期7数制转化()面向对象5. 设计一个类cstudent 3.利用虚函数手段,按照3种不同的计算方法来求出fibonacci数列的第n项(的具体项值)并输出。图形界面1.通过mfcappwizard创建一个简单的可视化()数据结构2. 假设有一个循环链表的长度大于1,且表中既无头结点也无头指针。已知p为指向链表中某结点的指针,试编写算法在链表中删除结点p 的前趋结点。4.设计一个统计选票的算法,输出每个候选的得票结果(假设采用单链表存放选票,候选人编号依次为1,2,3,n,且每张选票选且只选一人)(1、3。).软件课程设计指导教师评阅书指导教师评语(基础理论及基本技能的掌握;独立解决实际问题的能力;研究内容的理论依据和技术方法;取得的主要成果及创新点;工作态度及工作量;总体评价及建议成绩;存在问题等):成 绩: 指导教师签字: 年 月 日目录1.1过程设计题5-判断日期与星期(第一阶段.5)1.1 需求分析.61.2 概要设计.61.3 详细设计与编码.71.4 调试分析.81.5 用户使用说明 .91.6 设计心得.91.2面向过程设计题7-数制转化(sy7.cpp)2.1 需求分析92.2 概要设计.102.3 详细设计与编码.112.4 调试分析.112.5 用户使用说明 .122.6 设计心得.122.1面向对象设计题5-设计一个类cstudent(第二阶段5.cpp)3.1 需求分析123.2 概要设计.133.3 详细设计与编码.143.4 调试分析.163.5 用户使用说明 .193.6 设计心得.202.2面向对象设计题7-关于磁盘文档的输入输出(7.cpp)4.1 需求分析214.2 概要设计.214.3 详细设计与编码.224.4 调试分析.224.5 用户使用说明 .234.6 设计心得.243.1图形界面1-简单可视化()5.1 需求分析 .245.2 概要设计.245.3 详细设计与编码.255.4 调试分析.255.5 用户使用说明 .265.6 设计心得.264.1数据结构2-删除结点p 的前趋结点(数据结构2.cpp)6.1 需求分析276.2 概要设计.276.3 详细设计与编码.286.4 调试分析.286.5 用户使用说明 .296.6 设计心得.294.2数据结构4-统计选票(数据结构3.cpp)7.需求分析.297.概要设计.307.详细设计与编码.317.调试分析.327.用户使用说明 .437.设计心得.34五课程设计总结 341.1面向过程 第五题 让用户仅输入一个表示日期的年月日,则程序就应计算出那一天是星期几。(1)需求分析:当我们处理查找具体年份月日是周几的问题,往往会遇到闰年平年的问题,还有七天一循环的问题。因此实现此类算法是很有必要的。(2) 概要设计: 1.对于指定具体年月日所在本年的第多少天,有如下算法。switch(m)/判断该日期是该年的第几天case 1:j=d; break;case 2:j=31+d; break;case 3:j=59+d; break;case 4:j=90+d; break;case 5:j=120+d; break;case 6:j=151+d; break;case 7:j=181+d; break;case 8:j=212+d;break;case 9:j=243+d; break;case 10:j=273+d; break;case 11:j=304+d; break;case 12:j=334+d; break; 2.求解平年还是闰年的算法如下:int leap(int year)int leap;leap=(year%4=0&year%100!=0)|(year%400=0);return (leap);(3) 详细设计与编码: /* copyright (c), 2012- , mekinglong of cumtcs file name:软件设计普通题 5(软设普5.cpp) author:计科11-2 刘凯宁 version: 1.00 date: 12.10.16 description:该程序让用户仅输入一个表示日期的年月日,则程序就应计算出那一天是星期几: 采用函数方法,先判断y年的第一天是星期几,再求具体日期是星期几 others: . function list: / 主要函数列表,每条记录应包括函数名及功能简要说明1.main() 完成各种提示与主操作输入输出 开始 history: cinyears;cinmonthday;*/#includeusing namespace std;int main()int a=1;计算出该月日是第多少天g=f*366+(y1-f)*365+1;while(a=1)int y1,m,d,y,e,f,g,h,i,j,k;bool leap;cout该程序可以判断你输入的日期是星期几。endl;cout也可以判断该年的1月1日是星期几。endl;cout*endl;先判断y年的第一天是星期几cout*endl;cout请输入year:y;if(y%4=0&y%100!=0)|(y%400=0) leap=true;/判断y是不是闰年else leap=false;cout请输入month:m;先判断y年的该天是星期几if(m12|m1)cout输入错误,请重新输入:m;cout请输入day:d;if(!leap&m=2&d=29)couty是平年,二月份只有28天,请重新输入day:d;y1=y-1;e=(y1/400)*3+y1%400/100;/e为百年不闰的年数f=y1/4-e;/f为第1年到第y年的闰年数 g=f*366+(y1-f)*365+1;/g为第1年到第y年的天数h=g%7;switch(h)/先判断y年的第一天是星期几 case 0:i=7;couty年的1月1日是星期天。endl; break; case 1:i=1;couty年的1月1日是星期一。endl; break;case 2:i=2;couty年的1月1日是星期二。endl; break;case 3:i=3;couty年的1月1日是星期三。endl; break;case 4:i=4;couty年的1月1日是星期四。endl; break;case 5:i=5;couty年的1月1日是星期五。endl; break; case 6:i=6;couty年的1月1日是星期六。endl; break;cout2)j=j+1;k=(j%7+i-1)%7; switch(k)/判断具体日期是星期几case 0:couty年m月d日是星期日endl; break; case 1:couty年m月d日是星期一endl; break;case 2:couty年m月d日是星期二endl; break;case 3:couty年m月d日是星期三endl; break;case 4:couty年m月d日是星期四endl; break;case 5:couty年m月d日是星期五endl; break;case 6:couty年m月d日是星期六endl; break;cout-endl;cout-endl;cout选择是否继续运行程序:1(继续运行)/0(跳出程序) a;return 0;if(leap(year)&month=3)days=days+1;s=s+(days-1)%7;if(s7)s=s%7;coutsendl;return 0;(4)运行结果(5)试调分析一定要确定old1,old2, 1. year,month,day,days,s的类型是int型的。 1 2对于平年闰年的分析,要分别对待,加以区分。 3. 注意体会尝试程序的健壮性。 4尝试用其他方法完成该程序。(6)用户说明该程序可以判断你输入的日期是星期几;也可以判断该年的1月1日是星期几。(7) 设计心得本程序主要是求出n的反序数,利用do-while循环语句可容易求出n的反序数。程序设计中要联系所学知识,本题较简单,因此可以用简单的语句求出结果。1.2面向过程 第七题 将输入的罗马数据化为10进制数。假设罗马数据中只使用如下7个“基值”字母:m、d、c、l、x、v、i,分别用来表示1000、500、100、50、10、5、1。(1) 需求分析:我们经常会遇到一些数制间的转化,这些繁杂但有规律可循的计算,可以编写程序让计算机来完成。(2) 设计概要1.罗马型转成十进制for(a=0,i=0;stri!=0;i+)/对输入的罗马数据即字母逐个判断,再用for循环求值 switch (stri) case m:a=a+1000;break; case d:a=a+500;break; case c:a=a+100;break; case l:a=a+50;break; case x:a=a+10;break; case v:a=a+5;break; case i:a=a+1;break; default :break;2.十进制转化成罗马型for(i=0;i7;i+)numi=n/date1i;/用数组记录每个基值的个数n=n%date1i;/求每除一次基值后的余数for(j=0;jnumi;j+)/输出每个基值总数coutdatei;(3)详细设计与编码:/* file name:软件设计普通题 7(软设普7.cpp) author:计科11-2 刘凯宁 description:该程序罗马数据化为10进制数,0进制正整数转换为罗马数据: 采用函数,数组,循环,选择等方法 function list: 1.main()/ 主要函数列表,每条记录应包括函数名及功能简要说明完成各种提示与主操作输入输出2.void rome()/将罗马数据转换成十进制3.void number()/将十进制转换成罗马数据 */#include#include开始using namespace std;string date=mdclxvi;int date17=1000,500,100,50,10,5,1;int i,a,j,n,m; 输入1/2string str;int num10;void rome();void number();判断输入的值int main()/主函数int a=1;12while(a)十进制cout选择转化类型(1为转成十进制/2为转成罗马型):m;if(m=1) rome();/判断是哪种数据的转换else number();cout选择是否继续运行程序:1(继续运行)/0(跳出程序a; return 0;void rome()/将罗马数据转换成十进制cout输入罗马数据(m d c l x v i):str;for(a=0,i=0;stri!=0;i+)/对输入的罗马数据即字母逐个判断,再用for循环求值 switch (stri) case m:a=a+1000;break; case d:a=a+500;break; case c:a=a+100;break; case l:a=a+50;break; case x:a=a+10;break; case v:a=a+5;break; case i:a=a+1;break; default :break;cout转化成十进制:aendl;void number()/将十进制转换成罗马数据coutn;for(i=0;i7;i+)numi=n/date1i;/用数组记录每个基值的个数n=n%date1i;/求每除一次基值后的余数for(j=0;jnumi;j+)/输出每个基值总数coutdatei;coutendl;(4) 调试分析1程序开始不可少语句 int f(char);int m=0;char x,y;/设“基值”并作零初始化,若不做初始化,字母输出任意值。2将对应的字母返回对应的值,然后把数值累加起来,除了对应之外没有其他难点3尝试着用其他方法编写2.5用户使用说明: 用户直接从键盘输入罗马数字,按回车键可以方便得到输出的阿拉伯数字。用户直接从键盘输入十进制数字,按回车键可以方便得到输出的罗马数字2.6设计心得:此程序在设计之前,一定要分析好设计思路,分析每个罗马字母中返回的数值,做好相应的处理。2.1面向对象第五题 设计一个类cstudent,类中包含一个学生的基本数据如下:编号,姓名,性别,年龄,数学成绩,计算机成绩,外语成绩。并假设编号为整数,且从1号往后连续编码;姓名为字符串,性别为字符。(1) 需求分析在信息化的时代,电脑越来越成为了人们的帮手。面对大量的数据管理,计算机能帮我们很大的忙。(2) 设计概要1. 类cstudent,类中包含一个学生的基本数据如下:编号,姓名,性别,年龄,数学成绩,计算机成绩,外语成绩protected:int num;char name30;char sex;int age;double math;double computer;double english;2. 处理函数void addstudent();void findname(char);void findnum(int);void grade(int);void display(int , char); 3.存盘ofstream ofile(student1.txt,ios:app|ios:binary);/以输出的方式打开一个二进制文件,若文件不存在建立一个新文件if(!ofile)cerrendl学生信息文件打开错误!全部重建#include#includeusing namespace std;class cstudent/声明一个类cstudentprotected:int num;char name30;char sex;int age;double math;double computer;double english;public:void addstudent();void findname(char);void findnum(int);void grade(int);void display(int , char);struct stu_struct/声明一个结构体类型stu_structint num;char name30;char sex;int age;double math;double computer;double english;sstruct;/定义一个结构体类对象void cstudent:addstudent()/cstudent成员函数,对cstudent数据成员赋值coutendlnum;coutendlname;coutendlsex;if(sex=m|sex=f)cout输入正确!endl;elsecoutsex;coutendlmathcomputerenglish;sstruct.num=num;/将类cstudent数据成员的值赋给stu_struct 的值赋给sstruct的数据成员strcpy(,name);sstruct.sex=sex;sstruct.age=age;sstruct.math=math;puter=computer;sstruct.english=english;ofstream ofile(student1.txt,ios:app|ios:binary);/以输出的方式打开一个二进制文件,若文件不存在建立一个新文件if(!ofile)cerrendl学生信息文件打开错误!endl;abort();/异常终止一个进程ofile.write(char*)&sstruct,sizeof(sstruct);/把sstruct的数据写入文件,(char*)&sstruct取出sstruct中的地址并转换为char指针,sizeof(sstruct)获取sstruct中数据ofile.close();/关闭文件/=根据编号查找学生信息=/void cstudent:findnum(int number1)ifstream ifile(student1.txt,ios:in|ios:binary);/ifstream用来支持从磁盘文件的输入,ios:in|ios:binary:以输入的方式打开二进制文件if(!ifile)cerrendl学生信息文件打开错误!endl;abort();int i;while(!ifile.eof()/判断是不是文件结尾ifile.read(char*)&sstruct,sizeof(sstruct);/读入文件中的数据if(!ifile.eof()if(sstruct.num=number1)/判断编号是否相等 i=0;cout编号:sstruct.numendl;cout姓名:endl;cout性别:sstruct.sexendl;cout数学:sstruct.mathendl;cout计算机:puterendl;cout英语:sstruct.englishendl;if(i!=0) cout无此学生信息!endl;/=根据学生名字查找学生信息=/void cstudent:findname(char nam30)int i; ifstream ifile(student1.txt,ios:in|ios:binary);if(!ifile)cerrendl学生信息文件打开错误!endl;abort();while(!ifile.eof()ifile.read(char*)&sstruct,sizeof(sstruct);i=strcmp(,nam);/字符串比较函数if(!ifile.eof()/加入此语句可以使最后一个学生信息不会输出两遍if(i=0) cout编号:sstruct.numendl;cout姓名:endl;cout性别:sstruct.sexendl;cout数学:sstruct.mathendl;cout计算机:puterendl;cout英语:sstruct.englishendl;ifile.close();if(i!=0)cout未发现该学生信息!endl;/=计算某编号的学生的总成绩和平均成绩=/void cstudent:grade(int number)double i;/long inpos;ifstream iofile(student1.txt,ios:in|ios:binary|ios:out);/打开二进制文件student.txt,可读可写if(!iofile)cerrendl学生信息文件打开错误!endl;abort();while(!iofile.eof()iofile.read(char*)&sstruct,sizeof(sstruct);if(!iofile.eof()if(sstruct.num=number)cout姓名:endl; i=sstruct.math+puter+sstruct.english;cout总成绩:iendl;cout平均成绩:i/3endl;iofile.close();cerr无此学生信息!;/=列出总成绩超出n分的性别为s的同学的信息=/void cstudent:display(int n,char s)double i;ifstream ifile(student1.txt,ios:in|ios:binary);/打开文件if(!ifile)cerrendl学生信息文件打开错误!n)cout编号:sstruct.numendl;cout姓名:endl;cout性别:sstruct.sexendl;cout数学:sstruct.mathendl;cout计算机:puterendl;cout英语:sstruct.englishendl;ifile.close();cerr无其它学生信息!;int main()cstudent cs1;char ch1,ch2,nam30;int numb,fen,numbe;coutendl;cout=学生信息管理系统=endl;while(true)cout请选择操作:1.输入学生信息;2.按编号查找;3.按姓名查找;endl;cout4.按编号查找总成绩和平均成绩;5.列出总成绩超出n分的性别为s的同学的信息;6.退出。ch1;while(ch1!=1&ch1!=2&ch1!=3&ch1!=4&ch1!=5&ch1!=6)coutch1;if(ch1=1) cs1.addstudent();else if(ch1=2)coutnumb;cs1.findnum(numb);else if(ch1=3)coutnam;cs1.findname(nam);else if(ch1=4)coutnumbe;cs1.grade(numbe);else if(ch1=5)coutfench2;cs1.display(fen,ch2);else break;return 0;(4) 运行结果1.输入信息2.按编号查找(5) 使用说明运行程序,根据提示完成操作。(6) 设计心得用结构体来记录学生信息,并存入磁盘文件中。需要注意的是读取磁盘文件时,文件的结束信息,以防止最后一个信息连续输出两遍。2.2面向对象第三题利用虚函数手段,按照3种不同的计算方法来求出fibonacci数列的第n项(的具体项值)并输出。具体地说,可通过在基类basecla及其派生类fib1cla、fib2cla和fib3cla中说明如下的同一个虚函数“virtual double fib(int n);”,来实现求fibonacci数列第n项值并返回的3种不同求解方法。例如,可设计并使用已经在第4和第5章的练习中所实现的求解方法:简单变量“数据平移”法、使用数组的实现法以及使用递归函数的实现法。(1) 需求分析fibonacci数列第n项是经典的数学问题,因此有必要设计此类程序。(2) 设计概要1. 三种方法fib(int n)2. 利用虚函数virtual double fib(int n)(3) 详细设计/* copyright (c), 2012-10- , mekinglong of cumtcs file name:软件设计普通题 3(软设普3.cpp) author:计科11-2 刘凯宁 version: 1.00 date: 12.10.22 description:该程序利用虚函数手段,按照3种不同的计算方法来求出fibonacci数列的第n项(的具体项值)并输出。 采用面向对象的方法 others: . function list: / history: */#include#includeusing namespace std;class basecalpublic:virtual double fib(int n)=0;/数据平移法class fib1cal:public basecalpublic:virtual double fib(int n);double fib1cal:fib(int n)double newitem=1,f1=1,f2=1;int i;for(i=3;i=n;i+)/循环语句 newitem=f1+f2;/距它最近的前两项f1=f2;/把后一项赋值给前一项f2=newitem;/把距它最近的前两项和赋值给后一项return newitem;/数组法class fib2cal:public basecalpublic:virtual double fib(int n);double fib2cal:fib(int n)int i ;double f1000=1,1;for(i=2;ifib(n);cout.flags(ios:scientific);cout.precision(15);coutfib(n)=dendl;int main()fib1cal obj1;fib2cal obj2;fib3cal obj3;double n;char ch1;while(true)cout请选择操作:1数据平移法,2数组法,3递归法,4退出ch1;while(ch1!=1&ch1!=2&ch1!=3&ch1!=4)coutch1;if(ch1=1)cout请输入n值n;fun(&obj1 ,n);else if(ch1=2)cout请输入n值n;fun(&obj2 ,n);else if(ch1=3)cout请输入n值n;fun(&obj3 ,n);else break;return 0;(4) 运行结果(5) 设计心得通过编写这个程序让我学会了如何用多种方法去解决一个问题。3.1可视化 1. 需求分析 可视化能够更直观地反映问题。2. 设计概要1从appwizard开始-“hello”;2菜单和加速键;3对话框;4windows消息;添加菜单,加速器1添加菜单资源,设置菜单属性(包括菜单名和它的id标识)这要在菜单编辑器中进行过。2类向导,classwizard建立消息和成员函数的映射。3手工编辑成员函数。对话框的设计在mfc中对话框的功能被封装在cdialog类中,对话框分为模态对话框和非模态对话框。控件作为对话框独立的小

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论