当前位置:文档之家› 中国矿业大学软件课程设计实验报告

中国矿业大学软件课程设计实验报告

编号:()字号《软件课程设计》报告班级: 12级信息安全二班姓名:李江涛学号: 08123608指导老师:徐慧中国矿业大学计算机科学与技术学院2013年 6 月软件课程设计任务书专业年级:信息安全二班学生姓名:李江涛任务下达日期:2013 年 4 月日课程设计日期:2013 年 4 月5日至200年7月 3 日课程设计题目:面向过程目录一第一阶段-----------面向过程 (4)1 --------------------人民币凑数问题 (4)1.1 需求分析 (4)1.2 概要设计 (5)1.3 详细设计与编码 (5)1.5 用户使用说明 (6)1.6 设计体会 (6)2-------------------- 日期星期转换 (7)2.1.需求分析: (7)2.2 概要设计 (7)2.4.调试分析 (10)2.5.用户使用说明 (10)2.6.测试分析 (10)2.7.设计体会: (10)二第二阶段------------面向对象 (11)1--------------------学生管理系统 (11)1.1----需求分析 (11)1.2.概要设计 (11)1.3.详细设计与编码 (11)1.4 运行结果: (17)1.5调试分析 (18)1.6用户使用说明 (18)1.7测试分析: (18)1.8 实验体会 (18)2 面向对象函数模板反向输出 (19)1--------------------函数模板反向输出 (19)1.1 需求分析: (19)1.2函数模板反向输出源代码: (19)1.4 运行结果: (21)三第三部分----------可视化 (21)1--------------------计算器: (21)用你熟悉的一种可视化编程语言实现如下图所示的计算器。

该计算器需要实现基础的数学运算,如加,减,乘,除。

(21)1.1重要程序 (21)1.3运行结果图: (22)四第四部分----------数据结构 (23)1--------------------求矩阵的转置 (23)1.1 需求分析: (23)1.2 概要设计: (24)1.3 详细设计与编码: (24)1.4 运行结果: (27)1.5 用户使用: (27)1.6 设计体会: (27)2--------------------数据结构统计选票 (27)2.1 需求分析: (28)2.2 概要设计: (28)2.3 详细设计与编码: (28)2.4 运行结果: (30)2.6 用户使用: (31)2.7 设计体会: (31)五第五部分课程总结----学与做 (31)一第一阶段-----------面向过程1 --------------------人民币凑数问题1.1 需求分析程序要求:输入正整数m,它代表一个人民币钱数(元数)。

求取这样一个方案,使用最少张数的人民币纸币,凑成上述的钱数m,并输出求取结果。

注意,现在共有7种元以上面值的人民币纸币,分别为:100,50,20,10,5,2,1。

本题的主要的任务是编制一个函数,这个函数的主要的作用是用来把一个输入的人民币的钱数,使用最少张数的人民币纸币,凑成上述的钱数。

从提供的钱数来看,本题的输入值的范围是钱数m 大于等于1 元的钱数,理论上讲没有上限,但是要看数据类型,int 型,或long 型,它们有自己的取值范围。

int 型的最大值是127,long 型的最大值是2147483647。

输出的代表100,50,20,10,5,2,1的钱的张数。

它们的值都是整数。

输入形式:整数输出形式:输入钱数m=需要100元面值的纸币数是:需要 50元面值的纸币数是:需要 20元面值的纸币数是:需要 10元面值的纸币数是:需要 5元面值的纸币数是:需要 2元面值的纸币数是:需要 1元面值的纸币数是:程序功能:输入一个代表人民币钱数的正整数m,然后使用最少的人民币纸币凑成该钱数m。

测试数据及输出结果如下:1.2 概要设计由于是面向过程的设计,所以我就用最简单的算法实现:通过不断的取模、除法运算来实现,然后输出结果。

可能过程上比较繁琐,但我觉得对于这个程序还算可以。

1.3 详细设计与编码#include <iostream>#include <iomanip>#include <string>using namespace std;int main(){ int number,i;int a[8];string name[8]={"开始","100¥","50¥","20¥","10¥","5¥","2¥","1¥"};cout <<"请输入钱的数:";number=-1;for(;number<=0;){cin>>number;if(number<=0){cout<<"输入错误请重新输入:"<<endl;}}if(number>0){ a[1]=number/100;a[2]=(number%100)/50;a[3]=(number%100%50)/20;a[4]=(number%100%50%20)/10;a[5]=(number%100%50%20%10)/5;a[6]=(number%100%50%20%10%5)/2;a[7]=(number%100%50%20%10%5%2)/1;for(i=1;i<=7;i++){if(a[i]>0){cout<<name[i]<<" "<<a[i]<<" 张"<<endl;}}}main();return 0;}1.4 调试分析:在调试过程中,可以输入一个简单的三位的正整数,然后程序自动运行,最后输出结果凑起来的和就是m 钱的总数,从而解决了问题。

1.5 用户使用说明根据输出提示输入你要转换的钱数的值,经过程序的判断运算,就会得到问题的答案。

1.6 设计体会这一题的程序实现不难,结构比较明确,只要了解了运算符 / 和 % 问题就很容易解决。

但是这样的程序没有什么特别之处,我个人觉得如果能够用一个循环体编制,那么程序的代码就比较有价值,因为如果可以实现的话,效率会比较高!2-------------------- 日期星期转换2.1.需求分析:先判断输入一正整数年份,再输入一个1-7的数字表示1.1日的的日期是星期几,再输入一个合理日期。

利用函数计算输入日期是今年的第几天,然后对7求余,计算星期几编程序,使用户任意输入一个年份以及该年的1月1日是星期几,而后任意指定某一天(再输入该年的任意一个月份日期),由程序计算出这一天是星期几。

注意,2月份闰年为29天,非闰年为28天;可被4整除而不可被100整除的年份、或者可被400整除的年份均为闰年。

思考:利用元年元月元日(即1年1月1日)是星期一的已知事实,可对程序进行改造,让用户仅输入一个表示日期的年月日,则程序就应计算出那一天是星期几。

2.2 概要设计(1)在主函数中用switch语句计算天数,先定义2月是28天,然后判断用户输入的年份是平年还是闰年。

闰年则再加1。

(2)利用(sum%7+weekday-1) 判断用户输入的日期是星期几。

2.3.详细设计与编码#include <iostream>using namespace std;int runnian(int n);int jiange(int month, int day, bool b); //函数声明int weeks(int zhouji,int days);int main(){int year,month,day,week,user,days,jieguo,all;bool b;cout<<"请输入日期"<<endl;cin>>year>>month>>day;cout<<"请输入"<<year<<"1-1是周几"<<endl;cout<<"周"; //是输出周几cin>>week;b=runnian(year); //调用函数判断年份all=jiange(month,day,b); //调用函数求返回日期到1-1间隔多少天days=all%7; //调用函数求间隔天数除7后剩余天数jieguo=weeks(week,days); //调用函数判断是周几cout<<year<<"年"<<month<<"月"<<day<<"日"<<"是周:"<<jieguo<<endl; //最后输出所求结果main(); //为测试时程序不断循环return 0;}int runnian(int n) //判断是否为闰年{bool a; //定义bool变量a=false;if((n%4==0&&n%100!=0)||(n%400==0)) {a=true;}else a=false;return a; //设有返回值以为后需编程使用}int jiange(int month, int day, bool b) //判断间隔天数{int sum,m2;if(b==true) m2=29;else m2=28;switch(month){case 12:sum=day+31*6+30*4+m2;break;case 11:sum=day+31*6+30*3+m2;break;case 10:sum=day+31*5+30*3+m2;break;case 9:sum=day+31*5+30*2+m2;break;case 8:sum=day+31*4+30*2+m2;break;case 7:sum=day+31*3+30*2+m2;break;case 6:sum=day+31*3+30*1+m2;break;case 5:sum=day+31*2+30*1+m2;break;case 4:sum=day+31*2+m2;break;case 3:sum=day+31*1+m2;break;case 2:sum=day+31*1;break;case 1:sum=day;break;}return sum; //设有返回值以为后续编程使用}int weeks(int zhouji,int days) //求日期周几{int i;int a[7];days;a[1]=zhouji;for(i=1;i<=7,days>=1;i++,days--){if(days==0){cout<<a[i];}if(a[i]>7){a[i]=1;}a[i+1]=a[i]+1;if(days==1){break;}}return a[i]; //设有返回值以为后续编程使用}2.4.调试分析在调试时,最开始输出的日期有星期9的情况,才知道如果sum%7+weekday-1>7,则它的星期数应该再减去7才对2.5.用户使用说明用户打开程序后,窗口会自动的显示出提示信息:请输入year,用户输入一正确年份后按enter键,窗口会再自动的显示出提示信息:请输入某年1月1日, 用户输入1-7中数字代表星期,一样按enter键结束,之后窗口会显示:请输入month,day,用户输入正确日期并以空格隔开,最后按enter键运行程序显示结果。

相关主题