中国矿业大学软件课程设计报告.docx
《中国矿业大学软件课程设计报告.docx》由会员分享,可在线阅读,更多相关《中国矿业大学软件课程设计报告.docx(56页珍藏版)》请在冰豆网上搜索。
![中国矿业大学软件课程设计报告.docx](https://file1.bdocx.com/fileroot1/2023-1/10/0b9857f4-5e4a-49a5-b0cc-2a6688957661/0b9857f4-5e4a-49a5-b0cc-2a66889576611.gif)
中国矿业大学软件课程设计报告
编号:
()字号
《软件课程设计》报告
班级:
计科09-1
姓名:
禹勇
学号:
08093343
指导老师:
张振环____
中国矿业大学计算机科学与技术学院
2010年12月
软件课程设计任务书
专业年级:
计科09-1
学生姓名:
禹勇
任务下达日期:
2010年10月11日
课程设计日期:
2010年10月11日至2010年12月16日
课程设计题目:
类别
题目序号
成绩
面向过程
2、7、
面向对象
2、5、
图形界面
1、
数据结构
1、2
软件课程设计指导教师评阅书
指导教师评语(①基础理论及基本技能的掌握;②独立解决实际问题的能力;③研究内容的理论依据和技术方法;④取得的主要成果及创新点;⑤工作态度及工作量;⑥总体评价及建议成绩;⑦存在问题等):
成绩:
指导教师签字:
年月日
一、面向过程设计题2-------编程序,从键盘输入正整数n,求出n与其反序数之和并输出(第一阶段第二题.cpp)
1.1需求分析……………………………………………………………………….…9
1.2概要设计………………………………………………………………………...10
1.3详细设计与编码………………………………………………………………...11
1.4调试分析………………………………………………………………………...13
1.5用户使用说明………………………………………………………………….13
1.6设计心得………………………………………………………………………...13
二、面向过程设计题7------将输入的罗马数据化为10进制数(第一阶段第七题.cpp)
2.1需求分析…………………………………………………………………………13
2.2概要设计………………………………………………………………………...14
2.3详细设计与编码………………………………………………………………...16
2.4调试分析………………………………………………………………………...17
2.5用户使用说明………………………………………………………………….17
2.6设计心得………………………………………………………………………...17
三、面向对象设计题2------自定义一个简单的日期类DateType
(第二阶段第二题.cpp)
3.1需求分析…………………………………………………………………………17
3.2概要设计………………………………………………………………………...19
3.3详细设计与编码………………………………………………………………...21
3.4调试分析………………………………………………………………………...22
3.5用户使用说明………………………………………………………………….22
3.6设计心得………………………………………………………………………...22
四、面向过程设计题5---------设计一个类CStudent(第二阶段第五题.cpp)
4.1需求分析…………………………………………………………………………22
4.2概要设计………………………………………………………………………...23
4.3详细设计与编码………………………………………………………………...25
4.4调试分析………………………………………………………………………...25
4.5用户使用说明………………………………………………………………….25
4.6设计心得………………………………………………………………………...25
五、图形界面1---------计算器(禹勇的计算器.exe)
5.1需求分析…………………………………………………………………………26
5.2概要设计………………………………………………………………………...26
5.3详细设计与编码………………………………………………………………...27
5.4调试分析………………………………………………………………………...27
5.5用户使用说明………………………………………………………………….28
5.6设计心得………………………………………………………………………...29
六、数据结构1------用链表和数组两种方式分别实现栈的出栈、入栈、取栈顶元素、判空、查找等操作(第四阶段第一题.cpp)
6.1需求分析…………………………………………………………………………30
6.2概要设计………………………………………………………………………...30
6.3详细设计与编码………………………………………………………………...34
6.4调试分析………………………………………………………………………...35
6.5用户使用说明………………………………………………………………….35
6.6设计心得………………………………………………………………………...35
七、数据结构2--------假设有一个循环链表的长度大于1,且表中既无头结点也无头指针(第四阶段第二题.cpp)
7.需求分析………………………………………………………..………….……36
7.概要设计………………………………………………………………………...37
7.详细设计与编码………………………………………………………………...39
7.调试分析………………………………………………………………………...41
7.用户使用说明………………………………………………………………….41
7.设计心得………………………………………………………………………...41
八、课程设计总结………………………………………………………………42
1、面向过程设计题2
1.1需求分析:
编程序,从键盘输入正整数n,求出n与其反序数之和并输出根据题目要求,规定如下:
测试数据:
【输入数据】:
2038
【输出数据】:
10340
【输入数据】:
1234
【输出数据】:
5555
1.2概要设计:
(1)定义整形变量n为用户输入值;
(2)输出反序数;
(3)定义整形变量sum求和;
(4)输出sum的值。
(5)主程序流程:
step1:
让用户输入一个整数n;
step2:
进入for循环计算其反序数;
step3:
求和并输出。
1.3详细设计与编码:
(1)流程图:
进入for循环
yes
判断条件
no
(2)源程序
#include
usingnamespacestd;
intmain()
{
intn,a,b,c,sum;
cout<<"请输入一个整数n:
";//输入要求的整数n
cin>>n;
a=n;
cout<for(c=0;n!
=0;)//求n的反序数
{
b=n%10;
c=c*10+b;
n=n/10;
}
sum=a+c;//求n与其反序数之和
cout<<"n和它的反序数之和为:
"<return0;
}
1.4调试分析:
step1:
输入2038
step2:
输入1234
分析:
经过输入多次实验后,都取得了预期值,这说明了程序的正确性。
1.5用户使用说明:
step1:
打开程序;
step2:
输入要求的数;
step3:
得出结果;
1.6设计心得:
通过此次实验加深了对for循环的使用方法!
从小程序开始逐渐把以前遗忘的内容捡起。
2、面向过程设计题7
2.1需求分析:
实现罗马数据与10进制数之间的相互转换
根据实验要求,规定如下:
测试数据
【输入数据】LXXXVII
【输出结果】87
【输入数据】99
【输出结果】LXXXXVIIII
2.2概要设计:
(1)定义整形数组变量ROME_DATA[7]={1000,500,100,50,10,5,1};
(2)定义字符串ROME="MDCLXVI";
(3)定义“罗马数据转换为十进制数据”函数voidROME_INT();
(4)定义“十进制数据转换为罗马数据”函数voidINT_ROME();
(5)主函数调用ROME_INT()、INT_ROME()。
2.3详细设计与编码:
(1)流程图
主函数
调用ROME_INT()函数调用INT_ROME()函数
输入罗马数据输入10进制数
进入for循环进入for循环
输出10进制数
输出罗马数据
(2)源程序
#include
#include
usingnamespacestd;
charc[50],d[50];
inti,j,a,NUMBER;
stringROME="MDCLXVI";
intROME_DATA[7]={1000,500,100,50,10,5,1};
voidROME_INT();
voidINT_ROME();
intmain()
{
ROME_INT();
INT_ROME();
return0;
}
//将罗马数据转换为十进制数据
voidROME_INT()
{
cout<<"请输入要换算的罗马数据:
";
cin>>c;
for(a=0,i=0;c[i]!
=0;i++)
{
switch(c[i])
{
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<<"转换成十进制为:
"<}
//将十进制数据转换为罗马数据
voidINT_ROME()
{
cout<<"请输入要换算的十进制数据:
";
cin>>NUMBER;
cout<<"转换成的罗马数据为:
";
for(i=0;i<7;i++)
{
d[i]=NUMBER/ROME_DATA[i];
NUMBER=NUMBER%ROME_DATA[i];
for(j=0;jcout<}
cout<}
2.4调试分析:
2.5用户使用说明:
step1:
打开程序;
step2:
输入要求的数;
step3:
得出结果;
2.6设计心得:
经过此次试验进一步加深了对for循环和switch语句的使用,而且熟悉了主函数对函数的调用。
3、面向对象设计题2
3.1需求分析:
本题目要求编写类成员函数,来实现日期的增加、日期的比较、日期的输入、日期的输出。
根据实验要求输入一组测试数据,规定如下:
【输入数据】200811
其余数据采用程序中默认的函数;
【输出】dt1的日期为:
1年1月1日
dt2的日期为:
2008年12月31日
dt3的日期为:
2008年12月31日
dt1的日期为:
2008年1月1日
dt2的日期增加一天为:
2009年1月1日
dt2与dt3的日期相同!
dt2与dt4的日期不同!
3.2概要设计:
(1)完成类的各成员函数的编码;
(2)编写主函数,首先由用户输入一组日期;
(3)然后主函数调用默认的构造函数,再进行一系列的调用类的成员函数;
3.3详细设计与编码:
(1)流程图
主函数
调用一系列的构造函数
输入dt4的数据元素
调用一系列的输出函数
调用日期比较函数比较dt2与dt3、dt2与dt4
(2)源程序:
#include
usingnamespacestd;
classDateType
{//自定义的日期类DateType
inty,m,d;//数据成员,表示当前日期的年、月、日
public:
DateType(inty0=1,intm0=1,intd0=1);//构造函数,设定年、月、日;并设置参数默认值
voidset_DateType()
{
cin>>y>>m>>d;
}
voidincrementDay();//增加1天
boolequal(DateTypedt2);//判断二日期是否相等
voidprintDate();//屏幕输出日期对象的有关数据(年、月、日)
};
DateType:
:
DateType(inty0,intm0,intd0)//构造函数
{
y=y0;
m=m0;
d=d0;
}
voidDateType:
:
incrementDay()//增加一天
{
inta[]={31,28,31,30,31,30,31,31,30,31,30,31};
if((y%4==0&&y%100!
=0)||y%400==0)
a[1]=29;
if(d==31&&m==12)
{
y++;
m=1;
d=1;
}
elseif(d==a[m-1])
{
m++;
d=1;
}
elseif(dd++;
cout<}
boolDateType:
:
equal(DateTypedt2)//比较日期
{
if(y==dt2.y&&m==dt2.m&&d==dt2.d)
returntrue;
else
returnfalse;
}
voidDateType:
:
printDate()//输出日期
{
cout<}
intmain()
{
DateTypedt1,dt2(2008,12,31),dt3(2008,12,31),dt4;
dt4.set_DateType();
cout<<"dt1的日期为:
";
dt1.printDate();
cout<<"dt2的日期为:
";
dt2.printDate();
cout<<"dt3的日期为:
";
dt3.printDate();
cout<<"dt4的日期为:
";
dt4.printDate();
cout<<"dt2增加一天为:
";
dt2.incrementDay();
if(dt2.equal(dt3))
cout<<"dt2与dt3日期相同!
"<else
cout<<"dt2与dt3日期不同!
"<if(dt2.equal(dt4))
cout<<"dt2与dt4日期相同!
"<else
cout<<"dt2与dt4日期不同!
"<return0;
}
3.4调试分析:
分析:
输出结果与预设值完全一致,证实了程序的正确性!
3.5用户使用说明:
【step1】打开源程序
【step2】输入一个日期
3.6设计心得:
通过此题的编写加深了对类的了解以及对类成员函数的调用,对瑞年的判断的算法也更为熟悉。
4、面向对象设计题7
4.1需求分析:
本题目要设计一个Cstudent类,类中包含学生的基本信息,而且要采用binary文件形式,使用随机读写处理方式对类的对象数据进行存储与读写处理。
而且要有输入函数、输出函数,而且还可以计算总成绩!
根据实验要求,设置一组测试数据如下:
【输入数据】
1
001禹勇男19898592
002刘菲女19887695
2
3
【输出数据】编号姓名性别年龄数学成绩计算机成绩外语成绩总分
1禹勇男20898592266
2刘菲女19887695259
4.2概要设计:
(1)建一个Cstudent类,定义类中的数据元素Num、Name[10]、Sex[10]、Age、Math、Com、Eng、Total;
(2)设置类的成员函数:
输入类元素getdata()、输出类元素outdate()、把数据输入到磁盘中get()、把数据从磁盘中输出put();
(3)编写类的成员函数的代码;
(4)编写主函数,并调用get()、put()函数;
4.3详细设计与编码:
(1)流程图
主函数
do语句
switch语句
case1case2
yes
调用get()函数调用put()函数
判断语句
no
主函数结束
get()函数
打开磁盘
调用getdata()函数输入数据
关闭磁盘
put()函数
打开磁盘
调用putdata()函数输出数据
关闭磁盘
(2)源程序
#include
#include
#include
usingnamespacestd;
classCStudent
{
intNum;
charName[10];
charSex[10];
intAge;
intMath,Com,Eng,Total;
public:
voidgetdata()//输入类元素
{
cout<<"编号:
";
cin>>Num;
cout<";
cin>>Name;
cout<";
cin>>Sex;
cout<";
cin>>Age;
cout<";
cin>>Math;
cout<";
cin>>Com;
cout<";
cin>>Eng;
cout<}
voidoutdate()//输出类元素
{
Total=Math+Com+Eng;
cout<<