首页 c 实训文档软件

c 实训文档软件

举报
开通vip

c 实训文档软件c 实训文档软件 + 实训项目: 李晓文 个人银行账户管理系统 答辩人 : 1503班 李晓文 (20151611644) 实训时间: 2016年1月9日 实训教师 (签名) 辅导教师 (签名) 1 山西农业大学软件工程专业程序设计基础实训文档 目 录 1.个人银行账户程序(一)........................................ 5 1.1简单需求分析.............................................. 5 1.2系统功能模...

c  实训文档软件
c 实训文档软件 + 实训项目: 李晓文 个人银行账户 管理系统 工资管理系统慧云智能化管理系统免费考勤管理系统员工工资计算excel病人信息管理系统 答辩人 : 1503班 李晓文 (20151611644) 实训时间: 2016年1月9日 实训教师 (签名) 辅导教师 (签名) 1 山西农业大学软件工程专业程序设计基础实训文档 目 录 1.个人银行账户程序(一)........................................ 5 1.1简单需求分析.............................................. 5 1.2系统功能模块划分 .......................................... 6 1.3实现 ..................................................... 7 1.3.1类的设计 .......................................... 7 1.3.2功能实现 .......................................... 7 1.3.3主函数 ............................................ 8 1(4测试 ................................................... 10 1.4.1 源代码一般性检查 ................................. 10 1.4.2 功能测试 ........................................ 10 1.5实训日记 ................................................ 11 2.个人银行账户程序(二)....................................... 12 2.1简单需求分析............................................. 12 2.2系统功能模块划分 ......................................... 13 2.3实现 .................................................... 14 2.3.1类的设计 ......................................... 14 2.3.2功能实现 ......................................... 15 2.3.3主函数 ........................................... 15 2.4测试 .................................................... 16 2 Time New Roman 李晓文 个人银行账户管理程序 2.4.1 源代码一般性检查 ................................. 16 2.4.2 功能测试 ........................................ 16 2.5实训日记 ................................................ 17 3.个人银行账户程序(三)....................................... 18 3.1简单需求分析............................................. 18 3.2系统功能模块划分 ......................................... 19 3.3实现 .................................................... 20 3.3.1类的设计 ......................................... 20 3.3.2功能实现 ......................................... 20 3.3.3主函数 ........................................... 21 3.4测试 .................................................... 22 3.4.1 源代码一般性检查 ................................. 22 3.4.2 功能测试 ........................................ 22 3.5实训日记 ................................................ 23 4.个人银行账户程序(四)....................................... 24 4.1简单需求分析............................................. 24 4.2系统功能模块划分 ......................................... 25 4.3实现 ..................................... 错误~未定义书签。 4.3.1类的设计 ......................................... 25 4.3.2功能实现 ......................................... 26 4.3.3主函数 ........................................... 26 3 Times New Roman 山西农业大学软件工程专业程序设计基础实训文档 4.4测试 .................................................... 28 4.4.1 源代码一般性检查 ................................. 28 4.4.2 功能测试 ........................................ 28 4.5实训日记 ................................................ 29 心得体会.................................................... 30 附录:程序清单 .............................................. 33 附录1:个人银行账户程序(一) ................................. 33 附录2:个人银行账户程序(二) ................................. 37 附录3:个人银行账户程序(三) ................................. 41 附录4:个人银行账户程序(一) ................................. 49 4 Time New Roman 李晓文 个人银行账户管理程序 1.个人银行账户程序(一) 1.1简单需求分析 本系统是个人银行账户管理系统,开发一个银行个人账户管理系统银行账户管理系统开发一个银行个人账户管理系统银行账户管理系,设计的指导思想是一切为使用者着想。 系统功能: 1. 定义帐户:定义两个用户,分别进行各种操作。 2. 存款: 3. 取款: 4. 利息结算: 5. 数据输出: 系统采用面向对象程序设计,使用VC++开发工具。 5 Times New Roman 山西农业大学软件工程专业程序设计基础实训文档 1.2系统功能模块划分 本系统包括三部分: 1.类的设计:设置成员变量表示各种数据 2.用成员函数完成存款、取款、利息结算、数据输出的功能 3.main函数完成两个用户的初始化、操作和输出。 (1)类的设计 成员变量设置为私有,包括:帐号、利率、余额, 用整数表示日期,用双精度实型 计算利息 (2)成员函数 1. 定义帐户:用构造函数初始化。 2. 存款:deposit函数 3. 取款:withdraw函数 4. 利息结算:settle函数 5. 数据输出:show函数 函数getId,getBalance,getRate, 返回成员变量 函数record,修改余额 函数settle和函数accumulate, 完成利息的分段累加计算 (3)主函数 1. 定义两个用户,使用构造函数初始化数据。 2. 两个用户进行存取操作 3. 计算利息 4. 输出每个用户的帐户信息 6 Time New Roman 李晓文 个人银行账户管理程序 1.3实现 1.3.1类的设计 成员变量(私有权限private): 帐号id是一个整数编号,用整型表示 利率是双精度实型 balance表示余额,在构造函数中初始化为0 lastDation是双精度实型,记录余额按日累加之和 成员函数(私有权限private): int id; double balance; double rate; int lastDate; double accumulation; 成员函数(公有权限public): SavingsAccount(int date,int id, double rate); int getId(){return id;} double getBalance(){return balance;} double getRate(){return rate;} void deposit(int date,double amount); void withdraw(int date,double amount); //结算利息,每年一月一日调用一次该函数 void settle(int date); //显示账户信息 void show(); 1.3.2功能实现 内部实现:accumulate 计算利息 getId(),getBalance(), getRate()返回成员变量,读取数据 外部实现: 构造函数: 带参数,带初始化列表 存,取,record改变余额 计算利息,输出信息 1. 存钱deposit,调用record函数, 参数是正数. 7 Times New Roman 山西农业大学软件工程专业程序设计基础实训文档 2. 取钱withdraw,调用record函数, 参数是负数 3. record函数 余额改变: balance+=amount; 两位小数的处理: floor是系统函数, 对参数取整, 需要预处理#include amout=floor(amout*100+0.5)/100; 代入100.234, 得100.23, 不仅保留两位小数, 还实现了四舍五入 4. 利息计算: 采用分段累加的方式,计算利息总和 函数settle和函数accumulate, 完成利息的分段累加计算。 例如: 用户sa0: 5000存了40天(45-5) 10500存了45天(90-45) (5000x40 + 10500x45)x0.015/365 函数accumulate完成数据的累加部分。 1.3.3主函数 1. 定义对象sa0,sa1, 表示两个用户,使用构造函数初始化数据。 2. sa0,sa1调用存取函数,进行存取操作 3. 对sa0,sa1计算利息(存储到第90天的利息) 4. 输出sa0,sa1的帐户信息 8 Time New Roman 李晓文 个人银行账户管理程序 9 Times New Roman 山西农业大学软件工程专业程序设计基础实训文档 1,4测试 1.4.1 源代码一般性检查 ? 命名规范检查 源代码中的变量、函数、对象、过程等的命名符合规范。 ? 注释检查 程序中的注释以“//”开头,注释量达到30,左右,改善了可读性。 1.4.2 功能测试 定义帐户:账户定义正确,数据初始化正确 存款:金额正确存入 取款:金额正确取出 利息结算:采用分段累加,利息计算正确 数据输出:数据输出正确 10 Time New Roman 李晓文 个人银行账户管理程序 1.5实训日记 2016年1月4日 本次是第一次实训,实训任务是对个人银行账户管理系统程序的初步编写,初步完成了类的定义、函数实现、main函数等内容,理解每一段程序的作用,写好后保存。 在定义Savingsaccount类的时候,对成员函数的运用不过熟练(例如,对public和private中函数类型,功能,形参的把握不够熟练),通过参考书中内容才完成。在程序编写中,有部分标点错误,例如缺少分号、小括号,大括号等问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 ,和同学共同查找才找出问题并改正。除此之外还有语句错误,例如函数参数个数不一致,变量名、大小写不一致。通过请教老师后查出错误改正后,程序正确、输出结果正确。误是程序错误引起,其它错误是连带错误。在老师、同学的帮助下,程序编写正确。误是程序错误引起,其它错误是连带错误。在老师、同学的帮助下,程序编写正确。程序运行出错时往往是因为几处小错误而导致后续很多错误,所以在程序中适当添加换行,在代码中添加空行、注释,方便阅读和改正错误。 经过本次实训,我复习了类的定义与运用,熟悉了第四章类和对象的很多专业术语,理解了课程内容,但是编写程序时不够注重细节问题,程序执行的细节还不是很懂。 这次实训将我在C++编程中的不足之处暴露了很多,使我受益匪浅。 11 Times New Roman 山西农业大学软件工程专业程序设计基础实训文档 2.个人银行账户程序(二) 2.1简单需求分析 本系统是个人银行账户管理系统,开发一个银行个人账户管理系统银行账户管理系统开发一个银行个人账户管理系统银行账户管理系。在原有基础上为SavingsAccount 类增加一个静态数据成员total以及相应的静态成员函数getTotal,,设计的指导思想是一切为使用者着想。 系统功能: 1. 定义帐户:定义两个用户,分别进行各种操作。 2. 存款: 3. 取款: 4. 利息结算: 5. 余额变更日期 6. 余额按日累加之和 7. 账户总金额 8. 数据输出: 系统采用面向对象程序设计,使用VC++开发工具。 12 Time New Roman 李晓文 个人银行账户管理程序 2.2系统功能模块划分 本系统包括三部分: 1.类的设计:设置成员变量表示各种数据 2.用成员函数完成存款、取款、利息结算、记录上次变更余额的日期、计算余额按日 累加之和、记录所有账户总金额、数据输出的功能 3.main函数完成两个用户的初始化、操作和输出。 (1)类的设计 成员变量设置为私有,包括:帐号、利率、余额, 上次变更余额的日期,记录所有 账户总金额用整数表示日期,记录所有账户总金额、用双精度实型计算利息 (2)成员函数 1. 定义帐户:用构造函数初始化。 2. 存款:deposit函数 3. 取款:withdraw函数 4. 利息结算:settle函数 5. 数据输出:show函数 6. lastDate函数:表示上次变更余额的日期, 7. total表示所有账户的总金额。 函数getId,getBalance,getRate,getTotal 返回成员变量 函数record,修改余额 函数settle和函数accumulate, 完成利息的分段累加计算 (3)主函数 1. 定义两个用户,使用构造函数初始化数据。 2. 两个用户进行存取操作 3. 计算利息 4. 记录日期 5. 输出每个用户的帐户信息 13 Times New Roman 山西农业大学软件工程专业程序设计基础实训文档 2.3实现 2.3.1类的设计 成员变量(私有权限private): 帐号id是一个整数编号,用整型表示 rate利率是双精度实型 balance表示余额,在构造函数中初始化为0 lastDate是整型,用整数表示第几天,记录操作日期 lastDate表示上次变更余额的日期,是一个整数,用整型表示,记录操作日期。 accumulation表示余额按日累加之和,是一个精确数字,用双精度表示。 total表示所有账户的总金额。 成员函数(私有权限private): int id; double balance; double rate; int lastDate; double accumulation; //记录一笔账,date为日期,amount为金额,desc为说明 static double total; void record(int date,double amount); //获得到指定日期为止的存款金额按日累积值 double accumulate(int date) 成员函数(公有权限public)SavingsAccount(int date,int id, double rate); int getId() const{return id;} double getBalance() const{return balance;} double getRate() const{return rate;} static double getTotal(){return total;} void deposit(int date,double amount);//存入现金 void withdraw(int date,double amount);//取出现金 //结算利息,每年一月一日调用一次该函数 void settle(int date); //显示账户信息 void show() const; 14 Time New Roman 李晓文 个人银行账户管理程序 2.3.2功能实现 内部实现:accumulate 计算利息 函数 getId,getBalance,getRate,getTotal, 返回成员变量,读取数据 外部实现: 构造函数: 带参数,带初始化列表 存,取,record改变余额 计算利息,输出信息 1. 存钱deposit,调用record函数, 参数是正数. 2. 取钱withdraw,调用record函数, 参数是负数 3. record函数 余额改变: balance+=amount; 两位小数的处理: floor是系统函数, 对参数取整, 需要预处理#include amout=floor(amout*100+0.5)/100; 代入100.234, 得100.23, 不仅保留两位小数, 还实现了四舍五入 4. 利息计算: 采用分段累加的方式,计算利息总和 函数settle和函数accumulate, 完成利息的分段累加计算。 例如: 用户sa0: 5000存了40天(45-5) 10500存了45天(90-45) (5000x40 + 10500x45)x0.015/365 函数accumulate完成数据的累加部分。 2.3.3主函数 1. 定义对象sa0,sa1, 表示两个用户,使用构造函数初始化数据。 2. sa0,sa1调用存取函数,进行存取操作 3. 对sa0,sa1计算利息(存储到第90天的利息) 4. 输出sa0,sa1的帐户信息 15 Times New Roman 山西农业大学软件工程专业程序设计基础实训文档 2.4测试 2.4.1 源代码一般性检查 ? 命名规范检查 源代码中的变量、函数、对象、过程等的命名符合规范。 ? 注释检查 程序中的注释以“//”开头,注释量达到30,左右,改善了可读性。 2.4.2 功能测试 定义帐户:账户定义正确,数据初始化正确 存款:金额正确存入 取款:金额正确取出 利息结算:采用分段累加,利息计算正确 记录日期:账户金额变动日期正确 数据输出:数据输出正确 16 Time New Roman 李晓文 个人银行账户管理程序 2.5实训日记 2016年1月5日 本次是第二次实训,实训任务是对个人银行账户管理系统程序进一步熟悉并进行改进,为Savingsaccount类增加静态数据成员和静态函数成员,并用const修饰一些类的成员函数。并建立两个新文件account.h和account.cpp,用来分别存放Savingsaccount类的定义和实现。 在定义静态数据成员和静态函数成员时较为盲目,不理解起作用以及用法,通过看书以及询问老师清楚了这块知识。在编完程序后,运行时出现了很多错误,通过自己仔细地检查更正了一部分,并发现我的错误有很大一部分是细节问题,例如,单词拼写错误以及调用函数时的格式错误。然后就是一些大问题了,例如,实现函数时没有赋初值。在老师和同学的帮助下,最终找到错误并改正。 通过这次实训,加深了对类的定义以及类的实现这块知识的印象,并且学会了运用其他文件存储程序以及运行。 17 Times New Roman 山西农业大学软件工程专业程序设计基础实训文档 3.个人银行账户程序(三) 3.1简单需求分析 本系统是个人银行账户管理系统,开发一个银行个人账户管理系统银行账户管理系统 开发一个银行个人账户管理系统银行账户管理系。在原有基础上增加一个date类,专门 用来记录详细日期,日期之差等。另外,将描述账号的数据类型由int型变为string,并 且增加了一个专用于输出错误的error函数。 系统功能: 定义帐户:定义两个用户,分别进行各种操作。 1. 记录一笔账 2. 报告错误信息 3. 获得到指定日期为止的存款金额按日累积值 4. 存款: 5. 取款: 6. 利息结算: 7. 余额变更日期 8. 余额按日累加之和 9. 账户总金额 10. 数据输出: 系统采用面向对象程序设计,使用VC++开发工具。 18 Time New Roman 李晓文 个人银行账户管理程序 3.2系统功能模块划分 本系统包括三部分: 1.类的设计:定义类并设置公有成员和私有成员,以及用成员变量表示各种数据。 2.用成员函数完成存款、取款、利息结算、记录日期,支出情况,数据输出的功能。 其中有些函数声明为静态(static),有些成员变量声明为常量(const) 3.main函数完成两个用户的初始化、操作和输出等。 (1)类的设计 成员变量设置为私有,1)Savingsaccount类的私有成员包括:帐号、利率、余额, 用 整数表示日期,用双精度(double),用实型(int)计算利息. 2)date类的私有成员包 括:(均为整型变量)年,月,日以及totaldays(//该日期是从公元元年1月1日开始的 第几天)。 (2)成员函数 1) Savingsaccount类 1. 定义帐户:用构造函数初始化。 2. 存款:deposit函数。 3. 取款:withdraw函数。 4. 记录日期,支出情况:用record函数。 5. 利息结算:settle函数 6. 数据输出:show函数 函数getId,getBalance,getRate, getmaxday返回成员变量 函数record,修改余额 函数settle和函数accumulate, 完成利息的分段累加计算 2) date类 1. 定义日期,用构造函数初始化 2. 函数getyear,getmonth,getday,返回成员变量 3. 函数isleapyear 判断当年是否为闰年 4. 函数show,输出数据 5. 函数diatance,计算两个日期之间差多少天 (3)主函数 1. 定义两个用户,分别使用构造函数初始化数据。 2. 两个用户分别进行存取操作。 3. 计算年利息。 4. 计算并记录日期,支出情况。 19 Times New Roman 山西农业大学软件工程专业程序设计基础实训文档 5. 输出每个用户的帐户信息。 3.3实现 根据实训的进程,完成实训顺序。处理好以下内容:1)先实现那些于其他类无关联的类模块;2)然后实训与其他类有关联的类,具体有哪些关联(例如:全局变量、友元等)。 对照上详细设计的结果,详细地描述每一个模块是如何实现的,不仅仅是代码,更重要的是实现过程,所以需要有代码分析。详细实现过程及代码(附录:代码清单)。 3.3.1类的设计 1)成员变量(私有权限private)。 Id表示账号,是一个整数编号,用整型表示。 rate表示利率,是一个精确数字,用双精度表示。 balance表示余额, 是一个精确数字,用双精度表示,在构造函数中初始化为0。 lastDate表示上次变更余额的日期,是一个整数,用整型表示,记录操作日期。 accumulation表示余额按日累加之和,是一个精确数字,用双精度表示。 total表示所有账户的总金额。 2)成员函数(私有权限private): record函数记录日期,金额等 error函数报告错误信息 accumulate函数获得到指定日期为止的存款金额按日累加值 3)成员函数(公有权限public): 1. 定义帐户:用构造函数初始化。 2. 存款:deposit函数。 3. 取款:withdraw函数。 4. 记录日期,支出情况:用record函数。 5. 利息结算:settle函数 6. 数据输出:show函数 函数getId,getBalance,getRate, getmaxday返回成员变量 函数record,修改余额 函数settle和函数accumulate, 完成利息的分段累加计算 date类 1. 定义日期,用构造函数初始化 2. 函数getyear,getmonth,getday,返回成员变量 3. 函数isleapyear 判断当年是否为闰年 4. 函数show,输出数据 5. 函数diatance,计算两个日期之间差多少天。 3.3.2功能实现 Savingsaccount类 内部实现:函数accumulate计算利息 函数getId,getBalance,getRate, getmaxday, 返回成员变量,读取数据 外部实现: 1. 构造函数: 带参数,带初始化列表。实现初始化。 20 Time New Roman 李晓文 个人银行账户管理程序 2. 存,取函数:实现账户金额的变化。1) 存钱deposit,调用record函数, 参数是正数 ; 2) 取钱withdraw,调用record函数, 参数是负数 3.计算年息函数(settle):实现应得利息的变化。 4.记录函数(record):实现账户变化中的日期,支出情况的记录。 5.显示函数(show):实现所有账户信息的输出。 6.余额改变: balance+=amount; 7.两位小数的处理: floor(浮点型)是系统函数, 对参数取整, 需要预处理#include amout=floor(amout*100+0.5)/100; 代入100.234, 得100.23, 不仅保留两位小数, 还实现了四舍五入。 1. 利息计算: 采用分段累加的方式,计算利息总和 函数settle和函数accumulate, 完成利息的分段累加计算。 例如: 用户sa0: 5000存了40天(45-5) 10500存了45天(90-45) (5000x40 + 10500x45)x0.015/365 函数accumulate完成数据的累加部分。 date类 内部实现: 1. distance函数,计算两个日期之间相差多少天。 2. isleapyear函数,判断当年是否为闰年。 3. getyear,getmonth,getday,getmaxday函数, 返回成员变量,读取数据. 外部实现: 1. 构造函数: 带参数,带初始化列表,实现初始化。若输入的日期错误,直接调用函数exit(新增头文件),并退出程序。 2. totalday函数实现计算当年的天数。 3. getmaxday函数实现判断当年是否为闰年,若是闰年返回二月的天数29。 4. 显示函数(show):实现所有账户日期信息的输出。 3.3.3主函数 1 1. 定义一个类date的对象date,并使用date类的构造函数初始化对象date。 2. 定义一个类Savingsaccount类的对象account[],用两组实参分别初始化account[], 得到两个账户account[0],account[1]。 21 Times New Roman 山西农业大学软件工程专业程序设计基础实训文档 3.定义一个常量n表示账户总数。 3. 用两组实参分别初始化account[],得到两个账户account[0],account[1]. 4. 运用for循环结算所以账户并输出各个账户信息,在for循环中调用settle函数计算利息和年费(每月一日调用一次该函数);再调用show函数,输出两个账户信息。 3.4测试 3.4.1 源代码一般性检查 ? 命名规范检查 源代码中的变量、函数、对象的命名符合规范。 ? 注释检查 程序中的注释以“//”开头,注释量达到30,左右,改善了可读性。 3.4.2 功能测试 定义帐户:账户定义正确,数据初始化正确 存款:金额正确存入 取款:金额正确取出 利息结算:采用分段累加,利息计算正确 数据输出:数据输出正确 22 Time New Roman 李晓文 个人银行账户管理程序 3.5实训日记 2016年1月6日 本次是第三次实训,实训任务是,一.在实训二基础上新增日期类date,用该类的数据成员和函数成员以及类的实现来使程序更加完善,能显示出账户的日期。二.将整个程序分为五个文件,date.h,date.cpp, accout.h,account.cpp,6_25.cpp。用来分别存放Savingsaccount类的定义和实现。 在这次实训中,最主要的难题是定义一个新类date,并用主函数调用显示。在写date类时,对于public和private的定义以及其成员较为熟练,。在程序的实现中,对于成员函数的功能编写不准确,对平,闰年的天数判断不准确,导致后续结果的错误。在老师的讲解、指导下理解并学会了方法。对于细节方面的错误少了很多,只是在用数组定义账户时出现了越界错误以及数组的输出,使用for循环,错误。通过电脑提示和查阅书中有关内容自己解决了错误,并且能够运行。 通过这次实训,又一次练习了类的定义和实现,还复习了数组的内容。收获颇多。 23 Times New Roman 山西农业大学软件工程专业程序设计基础实训文档 4.个人银行账户程序(四) 4.1简单需求分析 .1简单需求分析 本系统是个人银行账户管理系统,开发一个银行个人账户管理系统银行账户管理系 统开发一个银行个人账户管理系统银行账户管理系。在原有基础上将record和error成 员函数的访问控制权限修改为protected。另外在基类Account中设立几个保护的成员来 协助利息计算,在派生类中调用函数来计算函数。 系统功能: 定义帐户:定义几个用户,分别进行各种操作。 1. 记录一笔账,包括日期 2. 报告错误信息 3. 信用卡结算 4. 账户信息结算 5. 存款: 6. 取款: 7. 利息结算: 8. 日期显示 9. 账户总金额 10 数据输出: 系统采用面向对象程序设计,使用VC++开发工具。 24 Time New Roman 李晓文 个人银行账户管理程序 4.2系统功能模块划分 本系统包括三部分: 1.类的设计:定义类并设置公有成员和私有成员,以及用成员变量表示各种数据。 用成员函数完成存款、取款、利息结算、记录日期,支出情况,数据输出等功能。 2. 3.main函数完成几个用户的初始化、操作和输出等。 (1)类的设计 成员变量设置为私有,1)Accumulator类的私有成员包括:lastdate(上次变更数值的日期)、value(数值的当前值)、sum(数值按日累加之和),value和sum均为双精度(double), 2)date类的私有成员包括:(均为整型变量)年,月,日以及totaldays(//该日期是从公元元年1月1日开始的第几天)。3)account类。4)creditAccount类 (2)成员函数 1)Accumulator 类 1 .构造函数Accumulator 2. 函数getSum,获得日期date的累加结果 3. 函数chsnge,在date日期将数值变更为value 4. 函数reset,初始化,将日期变为date,数值变为value,累加器清零 2) date类 定义日期,用构造函数初始化 1. 2. 函数getyear,getmonth,getday,返回成员变量 3. 函数isleapyear 判断当年是否为闰年 4. 函数show,输出数据 5. 函数diatance,计算两个日期之间差多少天 3) account类 4) creditAccount类 (3)主函数 1. 建立账户 2. 记录一笔账,包括日期 3. 报告错误信息 4. 信用卡结算 5. 账户信息结算 4.3类的实现 4.3.1类的设计 1)Accumulator 类 1 .构造函数Accumulator 2. 函数getSum,获得日期date的累加结果 3. 函数change,在date日期将数值变更为value 4. 函数reset,初始化,将日期变为date,数值变为value,累加器清零 2) date类 25 Times New Roman 山西农业大学软件工程专业程序设计基础实训文档 1. 定义日期,用构造函数初始化 2. 函数getyear,getmonth,getday,返回成员变量 3. 函数isleapyear 判断当年是否为闰年 4. 函数show,输出数据 5. 函数diatance,计算两个日期之间差多少天 3) account类 成员函数(公有权限public): 4.3.2功能实现 Account类 1. Account(形参)对信用账户初始化 2. record(形参,),计算支出金额以及余额,并显示日期 3. SavingsAccount(形参)对账户初始化 4. 存、取以及有关操作 5. 利息结算(settle) 6. 支出结算,余额结算 CreditAccount类 1. CreditAccount(形参)对信用卡账户初始化 2. 余额结算,利息结算(settle) 3. 输出数据 。 4.3.3主函数 1. 记录开户日期 2. 建立几个账户 3. 结算信用卡 4. 结算所以账户 5. 输出各个账户信息 26 Time New Roman 李晓文 个人银行账户管理程序 27 Times New Roman 山西农业大学软件工程专业程序设计基础实训文档 4.4测试 4.4.1 源代码一般性检查 ? 命名规范检查 源代码中的变量、函数、对象、过程等的命名符合规范。 ? 注释检查 程序中的注释以“//”开头,注释量达到30,左右,改善了可读性。 4.4.2 功能测试 定义帐户:账户定义正确,数据初始化正确 存款:金额正确存入 取款:金额正确取出 利息结算:采用分段累加,利息计算正确 数据输出:数据输出正确 日期记录:日期输出正确 28 Time New Roman 李晓文 个人银行账户管理程序 4.5实训日记 2016年1月7号 本次是第四次实训,实训任务是,新增信用账户,同时使用继承和派生。具体为,设计一个基类Account用来描述所有账户的共性,然后将Savingsaccount类变为其派生类,此外再从中派生出用来表示信用账户的类CreditAccount。同时整个程序分为6个文件,date.h,date.cpp,accumulator.h,accout.h,account.cpp,7_10.cpp。 这次实训的难点是加入继承与派生方面的知识。对于新增的类继承基类的成员方法和功能不熟练,尤其是将继承类对基类的访问关系搞混。对于这一难点,我仔细地阅读了课本,并将其中不懂之处向老师求教。例如,派生类不可访问基类的私有成员等。编程中,将派生类与基类甚至以前的SavingsAccount类混淆,造成了许多问题。在老师的帮助下,我一遍一遍的对程序疏通,在此过程中,老师在一旁对我的不足之处进行纠正以及改进,在老师的帮助下我最终编写出了新增的派生类,并成功运用主函数调用。 通过这次实训,让我弥补了对继承与派生的不足之处,对编程中的需要注意的问题,例如细节问题,有了“警惕性”。 29 Times New Roman 山西农业大学软件工程专业程序设计基础实训文档 心得体会 通过一个星期的折腾,总算把课程设计给完成了,这是一个坚苦而又漫长的过程。刚开始,可以说是没有头绪,于是就去看书,问老师,并且上网查找到了些与我们题目相似的问题,并且通过与书上的程序对比,终于在自己的的努力下,完成了这个程序。 在实训期间,在程序设计的过程中,让我了解到要设计一个大型程序,查找资料与同学,老师的帮助是至关重要的,在他人的基础上,再根据自己所学进行修改与调试,最后设计出需要的程序。 另外平时扎实的基础也很关键,因为如果你平时学得就不怎么样,那么你面对这么一个比较有难度的程序,你可能会望而却步,看他人的程序都是个难点,更别说让你自己去设计。为了解决此类问题,最好就是多向同学,老师请教,不要怕难为情。尤其是老师,因为他们有着多年的编写程序的经验。在老师帮助我们改程序的过程中,我们会学到很多。 在设计这个程序时,我们刚开始是根据老师给我们提供的资料,但是接下去便无从下手了,计算是个关键和难点,我们查了相应的资料,并且问了老师,这样计算问题解决了。接下来就是程序设计问题,经过自己的反复尝试以及与同学,老师的讨论,将程序初步设计了出来。只要你自己愿意去尝试,问题都可以迎刃而解的。加油~ 从这一个多星期的设计过程中,我看到了大家的拼搏与努力,也让我知道团队精神得难能可贵。在遇到问题时,和他人讨论是至关重要的,你不会的问题他人可能会,通过这样是合作方式,我们每个人才能取众人之长补自己之短。 接下来几天的主要任务是将程序不断完善、加工。 C++语言课程设计实训是一个很好的学习和锻炼的过程。使我们巩固了原有的理论知识,培养了我们灵活运用和组合集成所学过知识及技能来分析、解决实际问题的能力。使我们体会到自身知识和能力能在实际中的应用和发挥。不但可以激发创新意识,还可以开发创造能力、培养沟通能力。这次实训时间虽然仅有五天,但确实使我受益非浅。通过实训丰富了计算机操作经验,更加深了对C语言的了解,熟悉了其环境,更增强了同学之间的友谊。 另外,实习中老师对我们进行了细心、耐心的指导,鼓励我们对程序进行合理改进,培养了我们的创新意识和创新能力。原来是我认为可30 Time New Roman 李晓文 个人银行账户管理程序 怕的课程设计,就在种种辅助条件下完成了,心里有说不出的高兴。 最后小结:程序设计过程有如解决一实际问题,从解决实际问题的角度,我们可以这样来看:首先要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;其次,从问题的要害入手,从前到后的解决问题的每个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的变量、数组、函数,然后确定处理过程,,算法。可得最后结论。 一个多礼拜中,我们有过山穷水尽的困惑;有过柳暗花明的惊喜;有过唇枪舌剑的辩论;有过相互鼓励的安慰。一个多礼拜的时间我们经历了很多,也收获了很多。与其说它是体力与脑力的作业,不如说它是合作精神和毅力的考验。经过这次课程设计,我不仅学到了很多知识和技能,更重要的是我们学会了如何运用所学知识去解决实际问题. 总之,这次设计程序让我受益良多,我会好好珍惜像这种难得的机会 31 Times New Roman 山西农业大学软件工程专业程序设计基础实训文档 32 Time New Roman 李晓文 个人银行账户管理程序 附录,程序清单 附录1,个人银行账户程序(一) #include #include using namespace std; class SavingsAccount{ private: int id; double balance; double rate; int lastDate; double accumulation; //记录一笔账,date为日期,amount为金额,desc为说明 void record(int date,double amount); //获得到指定日期为止的存款金额按日累积值 double accumulate(int date) const{ return accumulation+balance*(date-lastDate); } public: //构造函数 SavingsAccount(int date,int id, double rate); int getId(){return id;} double getBalance(){return balance;} double getRate(){return rate;} void deposit(int date,double amount);//存入现金 33 Times New Roman 山西农业大学软件工程专业程序设计基础实训文档 void withdraw(int date,double amount);//取出现金 //结算利息,每年一月一日调用一次该函数 void settle(int date); //显示账户信息 void show(); }; //SavingsAccount类相关成员函数的实现 SavingsAccount::SavingsAccount(int date,int id, double rate):id(id),balance(0),rate(rate),lastDate(date),accumulation(0){ cout<getBalance()) cout<<"Error:not enough money"< #include using namespace std; //SavingsAccount类相关成员函数的实现 SavingsAccount::SavingsAccount(int date,int id, double rate):id(id),balance(0),rate(rate),lastDate(date),accumulation(0){ cout<getBalance()) cout<<"Error:not enough money"< 39 Times New Roman 山西农业大学软件工程专业程序设计基础实训文档 using namespace std; int main(){ //建立几个账户 SavingsAccount sa0(4,19940607,0.15); SavingsAccount sa1(4,20140901,0.15); //几笔账目 sa0.deposit(3,10000); sa1.deposit(30,20000); sa0.deposit(55,4500); sa1.withdraw(60,5500); //开户后第100天到了银行的计息日,结算所有账户的年息 sa0.settle(100); sa1.settle(100); //输出各个账户信息 sa0.show(); cout< 31. #include 32. using namespace std; 33. namespace{ //namespace使下面的定义只在当前文件中有效 34. //存储平年中的某个月一日之前有多少天,为便于getmaxday函数的实现,该数组多出一项 35. const int DAYS_BEFORE_MONTH[]={0,31,59,90,120,151,181,212,243,273,304,334,365}; 36. } 37. date::date(int year, int month,int day):year(year),month(month),day(day){ 38. if(day<=0||day>getmaxday()){ 39. cout<<"invalid date:"; 40. show(); 41. cout< 61. class SavingsAccount { //储蓄账户类 62. private: 63. std::string id; //帐号 64. double balance; //余额 65. double rate; //存款的年利率 66. Date lastDate; //上次变更余额的时期 67. double accumulation; //余额按日累加之和 68. static double total; //所有账户的总金额 69. 70. //记录一笔帐,date为日期,amount为金额,desc为说明 71. void record(const Date &date, double amount, const std::string &desc); 72. //报告错误信息 43 Times New Roman 山西农业大学软件工程专业程序设计基础实训文档 73. void error(const std::string &msg) const; 74. //获得到指定日期为止的存款金额按日累积值 75. double accumulate(const Date& date) const { 76. return accumulation + balance * date.distance(lastDate); 77. } 78. public:SavingsAccount(const Date &date, const std::string &id, double rate); // 构造函数 79. const std::string &getId() const { return id; } 80. double getBalance() const { return balance; } 81. double getRate() const { return rate; } 82. static double getTotal() { return total; } 83. void deposit(const Date &date, double amount, const std::string &desc); //存入现金 84. void withdraw(const Date &date, double amount, const std::string &desc); // 取出现金 85. //结算利息,每年1月1日调用一次该函数 86. void settle(const Date &date); 87. void show() const; //显示账户信息 88. }; 89. #endif //__ACCOUNT_H__ 90. 91. 92. 93. //account.cpp 94. #include "account.h" 95. #include 44 Time New Roman 李晓文 个人银行账户管理程序 96. #include 97. using namespace std; 98. double SavingsAccount::total = 0; 99. //SavingsAccount类相关成员函数的实现 100. SavingsAccount::SavingsAccount(const Date &date, const string &id, double rate) 101. : id(id), balance(0), rate(rate), lastDate(date), accumulation(0) { 102. date.show(); 103. cout << "\t#" << id << " created" << endl; 104. //account.cpp 105. #include "account.h" 106. #include 107. #include 108. using namespace std; 109. double SavingsAccount::total = 0; 110. //SavingsAccount类相关成员函数的实现 111. SavingsAccount::SavingsAccount(const Date &date, const string &id, double rate) 112. : id(id), balance(0), rate(rate), lastDate(date), accumulation(0) { 113. date.show(); 114. cout << "\t#" << id << " created" << endl; 115. void SavingsAccount::record(const Date &date, double amount, const string &desc) { 116. accumulation = accumulate(date); 117. lastDate = date; 118. amount = floor(amount * 100 + 0.5) / 100; 119. balance += amount; 45 Times New Roman 山西农业大学软件工程专业程序设计基础实训文档 120. total += amount; 121. date.show(); 122. cout << "\t#" << id << "\t" << amount << "\t" << balance << "\t" << desc << endl; 123. } 124. void SavingsAccount::record(const Date &date, double amount, const string &desc) { 125. accumulation = accumulate(date); 126. lastDate = date; 127. amount = floor(amount * 100 + 0.5) / 100; 128. balance += amount; 129. total += amount; 130. date.show(); 131. cout << "\t#" << id << "\t" << amount << "\t" << balance << "\t" << desc << endl; 132. } 133. void SavingsAccount::error(const string &msg) const {cout << "Error(#" << id << "): " << msg << endl; 134. } 135. void SavingsAccount::deposit(const Date &date, double amount, const string &desc) { 136. record(date, amount, desc); 137. } 138. void SavingsAccount::withdraw(const Date &date, double amount, const string &desc) { 139. if (amount > getBalance()) 140. error("not enough money"); 141. else record(date, -amount, desc); 46 Time New Roman 李晓文 个人银行账户管理程序 142. } 143. void SavingsAccount::settle(const Date &date) { 144. double interest = accumulate(date) * rate / date.distance(Date(date.getYear() - 1, 1, 1)); //计算年息 145. if (interest != 0) 146. record(date, interest, "interest"); 147. accumulation = 0; 148. } 149. void SavingsAccount::show() const { 150. cout << id << "\tBalance: " << balance; 151. } 152. 153. 154. 155. //6_25.cpp 156. #include "account.h" 157. #include 158. using namespace std; 159. int main() { 160. Date date(2008, 11, 1); //起始日期 建立几个账户 161. // 162. SavingsAccount accounts[] = { 163. SavingsAccount(date, "03755217", 0.015), 164. SavingsAccount(date, "02342342", 0.015) 165. }; 47 Times New Roman 山西农业大学软件工程专业程序设计基础实训文档 166. 167. //账户总数 168. const int n = sizeof(accounts) / sizeof(SavingsAccount); 169. //11月份的几笔账目 170. accounts[0].deposit(Date(2008, 11, 5), 5000, "salary"); 171. accounts[1].deposit(Date(2008, 11, 25), 10000, "sell stock 0323"); 172. //12月份的几笔账目 173. accounts[0].deposit(Date(2008, 12, 5), 5500, "salary"); 174. accounts[1].withdraw(Date(2008, 12, 20), 4000, "buy a laptop"); 175. //结算所有账户并输出各个账户信息 176. cout << endl; 177. for (int i = 0; i < n; i++) { 178. accounts[i].settle(Date(2009, 1, 1)); 179. accounts[i].show(); 180. cout << endl; 181. } 182. cout << "Total: " << SavingsAccount::getTotal() << endl; 183. return 0; } 48 Time New Roman 李晓文 个人银行账户管理程序 附录4,个人银行账户程序(一) //date.h #ifndef _DATE_H_ #define _DATE_H_ class date{ private: int year; int month; int day; int totaldays; //该日期是从公元元年一月一日开始的第几天 public: date(int year,int month,int day); //构造函数 int getyear() const{return year;} int getmonth() const{return month;} int getday() const{return day;} int getmaxday() const; //获得当月有多少天 bool isleapyear() const{ //判断是否为闰年 return year%4==0&&year%100!=0||year%400==0; } void show() const; //输出当前的日期 //计算两个日期之间相差多少天 int distance(const date& date) const{ date.totaldays; return totaldays- } }; #endif //_DATE_H_ //date.cpp #include"date.h" #include #include using namespace std; namespace{ //namespace使下面的定义只在当前文件中有效 //存储平年中的某个月一日之前有多少天,为便于getmaxday函数的实现,该数组多出一项 const int DAYS_BEFORE_MONTH[]={0,31,59,90,120,151,181,212,243,273,304,334,365}; } date::date(int year, int month,int day):year(year),month(month),day(day){ if(day<=0||day>getmaxday()){ cout<<"invalid date:"; show(); cout<value = value; } // //accumulator.h #ifndef __ACCUMULATOR_H__ #define __ACCUMULATOR_H__ #include "date.h" class Accumulator { //将某个数值按日累加 50 Time New Roman 李晓文 个人银行账户管理程序 private: Date lastDate; //上次变更数值的时期 double value; //数值的当前值 double sum; //数值按日累加之和 public: //构造函数,date为开始累加的日期,value为初始值 Accumulator(const Date &date, double value) : lastDate(date), value(value), sum(0) { } //获得到日期date的累加结果 double getSum(const Date &date) const { return sum + value * date.distance(lastDate); } //在date将数值变更为value void change(const Date &date, double value) { sum = getSum(date); lastDate = date; this->value = value; } //初始化,将日期变为date,数值变为value,累加器清零 void reset(const Date &date, double value) { lastDate = date; this->value = value; sum = 0; } }; #endif //__ACCUMULATOR_H__ //account.h #ifndef __ACCOUNT_H__ #define __ACCOUNT_H__ #include "date.h" #include "accumulator.h" #include class Account { //账户类 private: std::string id; //帐号 double balance; //余额 static double total; //所有账户的总金额 protected: //供派生类调用的构造函数,id为账户 Account(const Date &date, const std::string &id); //记录一笔帐,date为日期,amount为金额,desc为说明 void record(const Date &date, double amount, const std::string &desc); //报告错误信息 51 Times New Roman 山西农业大学软件工程专业程序设计基础实训文档 void error(const std::string &msg) const; public: const std::string &getId() const { return id; } double getBalance() const { return balance; } static double getTotal() { return total; } //显示账户信息 void show() const; }; class SavingsAccount : public Account { //储蓄账户类 private: Accumulator acc; //辅助计算利息的累加器 double rate; //存款的年利率 public: //构造函数 SavingsAccount(const Date &date, const std::string &id, double rate); double getRate() const { return rate; } void deposit(const Date &date, double amount, const std::string &desc); //存入现金 //取出现金 void withdraw(const Date &date, double amount, const std::string &desc); void settle(const Date &date); //结算利息,每年1月1日调用一次该函数 }; class CreditAccount : public Account { //信用账户类 private: Accumulator acc; //辅助计算利息的累加器 double credit; //信用额度 double rate; //欠款的日利率 double fee; //信用卡年费 double getDebt() const { //获得欠款额 double balance = getBalance(); return (balance < 0 ? balance : 0); } public: //构造函数 CreditAccount(const Date &date, const std::string &id, double credit, double rate, double fee); double getCredit() const { return credit; } double getRate() const { return rate; } double getFee() const { return fee; } double getAvailableCredit() const { //获得可用信用 if (getBalance() < 0) return credit + getBalance(); else 52 Time New Roman 李晓文 个人银行账户管理程序 return credit; } //存入现金 void deposit(const Date &date, double amount, const std::string &desc); //取出现金 void withdraw(const Date &date, double amount, const std::string &desc); void settle(const Date &date); //结算利息和年费,每月1日调用一次该函数 void show() const; }; #endif //__ACCOUNT_H__ //account.cpp #include "account.h" #include #include using namespace std; double Account::total = 0; //Account类的实现 Account::Account(const Date &date, const string &id) : id(id), balance(0) { date.show(); cout << "\t#" << id << " created" << endl; } void Account::record(const Date &date, double amount, const string &desc) { amount = floor(amount * 100 + 0.5) / 100;//保留小数点后两位 balance += amount; total += amount; date.show(); cout << "\t#" << id << "\t" << amount << "\t" << balance << "\t" << desc << endl; } void Account::show() const { cout << id << "\tBalance: " << balance; } void Account::error(const string &msg) const { cout << "Error(#" < getBalance()) { error("not enough money"); } else { record(date, -amount, desc); acc.change(date, getBalance()); } } void SavingsAccount::settle(const Date &date) { double interest = acc.getSum(date) * rate //计算年息 / date.distance(Date(date.getYear() - 1, 1, 1)); if (interest != 0) record(date, interest, "interest"); acc.reset(date, getBalance());} //CreditAccount类相关成员函数的实现 CreditAccount::CreditAccount(const Date& date, const string& id, double credit, double rate, double fee) : Account(date, id), credit(credit), rate(rate), fee(fee), acc(date, 0) { } void CreditAccount::deposit(const Date &date, double amount, const string &desc) { record(date, amount, desc); acc.change(date, getDebt()); } void CreditAccount::withdraw(const Date &date, double amount, const string &desc) { if (amount - getBalance() > credit) { error("not enough credit"); } else { record(date, -amount, desc); acc.change(date, getDebt()); } } void CreditAccount::settle(const Date &date) { double interest = acc.getSum(date) * rate; if (interest != 0) record(date, interest, "interest"); if (date.getMonth() == 1) //第一个月付年费 record(date, -fee, "annual fee"); acc.reset(date, getDebt()); } void CreditAccount::show() const { Account::show(); cout << "\tAvailable credit:" << getAvailableCredit(); } 54 Time New Roman 李晓文 个人银行账户管理程序 //7_10.cpp #include "account.h" #include using namespace std; int main() { Date date(2008, 11, 1); //起始日期 //建立几个账户 SavingsAccount sa1(date, "S3755217", 0.015); SavingsAccount sa2(date, "02342342", 0.015); CreditAccount ca(date, "C5392394", 10000, 0.0005, 50); //11月份的几笔账目 sa1.deposit(Date(2008, 11, 5), 5000, "salary"); ca.withdraw(Date(2008, 11, 15), 2000, "buy a cell"); sa2.deposit(Date(2008, 11, 25), 10000, "sell stock 0323"); ca.settle(Date(2008, 12, 1)); //结算信用卡 //12月份的几笔账目 ca.deposit(Date(2008, 12, 1), 2016, "repay the credit"); sa1.deposit(Date(2008, 12, 5), 5500, "salary"); //结算所有账户 sa1.settle(Date(2009, 1, 1)); sa2.settle(Date(2009, 1, 1)); ca.settle(Date(2009, 1, 1)); //输出各个账户信息 cout << endl; sa1.show(); cout << endl; sa2.show(); cout << endl; ca.show(); cout << endl; cout << "Total: " << Account::getTotal() << endl; return 0; } 55 Times New Roman
本文档为【c 实训文档软件】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_597436
暂无简介~
格式:doc
大小:180KB
软件:Word
页数:59
分类:企业经营
上传时间:2017-09-20
浏览量:65