C#教学经验谈(3):储蓄计算器的源程序

程序

在C#教学的第二个案例前,先介绍了一个储蓄计算器的实验,该实验项目是从微软的教学光盘中取出的,部分源程序已经给出,要求学生完成事务处理部分。在做这个实验的时候,要求学生最好能够独立设计此项目。在这里,将该项目的代码给出如下。有特点的是,控件的名称使用的是中文。

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace Saving
{
enum Compound
{
每月计算利息,
每季度计算利息
}
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Label label1;
private System.Windows.Forms.NumericUpDown 初始金额;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.NumericUpDown 利率;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.ComboBox 计算规则;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Button 计算;
private System.Windows.Forms.NumericUpDown 存期;
private System.Windows.Forms.NumericUpDown 每月存入;
private System.Windows.Forms.NumericUpDown 存款总额;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;

public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();

//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
计算规则.Items.Add(Compound.每月计算利息);
计算规则.Items.Add(Compound.每季度计算利息);
计算规则.SelectedItem = 计算规则.Items[0];
}

/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.初始金额 = new System.Windows.Forms.NumericUpDown();
this.label2 = new System.Windows.Forms.Label();
this.利率 = new System.Windows.Forms.NumericUpDown();
this.label3 = new System.Windows.Forms.Label();
this.存期 = new System.Windows.Forms.NumericUpDown();
this.label4 = new System.Windows.Forms.Label();
this.计算规则 = new System.Windows.Forms.ComboBox();
this.label5 = new System.Windows.Forms.Label();
this.每月存入 = new System.Windows.Forms.NumericUpDown();
this.label6 = new System.Windows.Forms.Label();
this.存款总额 = new System.Windows.Forms.NumericUpDown();
this.计算 = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.初始金额)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.利率)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.存期)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.每月存入)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.存款总额)).BeginInit();
this.SuspendLayout();
//
// label1
//
this.label1.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(134)));
this.label1.Location = new System.Drawing.Point(32, 32);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(88, 16);
this.label1.TabIndex = 0;
this.label1.Text = "初始金额:";
//
// 初始金额
//
this.初始金额.DecimalPlaces = 2;
this.初始金额.Increment = new System.Decimal(new int[] {
100,
0,
0,
0});
this.初始金额.Location = new System.Drawing.Point(112, 32);
this.初始金额.Maximum = new System.Decimal(new int[] {
-1156317184,
46566128,
0,
0});
this.初始金额.Name = "初始金额";
this.初始金额.Size = new System.Drawing.Size(168, 21);
this.初始金额.TabIndex = 1;
this.初始金额.ThousandsSeparator = true;
this.初始金额.Value = new System.Decimal(new int[] {
1000,
0,
0,
0});
//
// label2
//
this.label2.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(134)));
this.label2.Location = new System.Drawing.Point(32, 72);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(88, 16);
this.label2.TabIndex = 0;
this.label2.Text = "利率(%):";
//
// 利率
//
this.利率.DecimalPlaces = 2;
this.利率.Increment = new System.Decimal(new int[] {
1,
0,
0,
65536});
this.利率.Location = new System.Drawing.Point(112, 72);
this.利率.Name = "利率";
this.利率.Size = new System.Drawing.Size(168, 21);
this.利率.TabIndex = 1;
this.利率.ThousandsSeparator = true;
this.利率.Value = new System.Decimal(new int[] {
20,
0,
0,
65536});
//
// label3
//
this.label3.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(134)));
this.label3.Location = new System.Drawing.Point(32, 112);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(88, 16);
this.label3.TabIndex = 0;
this.label3.Text = "存期(年):";
//
// 存期
//
this.存期.Location = new System.Drawing.Point(112, 112);
this.存期.Name = "存期";
this.存期.Size = new System.Drawing.Size(168, 21);
this.存期.TabIndex = 1;
this.存期.ThousandsSeparator = true;
this.存期.Value = new System.Decimal(new int[] {
5,
0,
0,
0});
//
// label4
//
this.label4.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(134)));
this.label4.Location = new System.Drawing.Point(32, 152);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(88, 16);
this.label4.TabIndex = 0;
this.label4.Text = "计算规则:";
//
// 计算规则
//
this.计算规则.Location = new System.Drawing.Point(112, 152);
this.计算规则.MaxDropDownItems = 2;
this.计算规则.Name = "计算规则";
this.计算规则.Size = new System.Drawing.Size(168, 20);
this.计算规则.TabIndex = 2;
//
// label5
//
this.label5.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(134)));
this.label5.Location = new System.Drawing.Point(32, 192);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(88, 16);
this.label5.TabIndex = 0;
this.label5.Text = "每月存入:";
//
// 每月存入
//
this.每月存入.DecimalPlaces = 2;
this.每月存入.Location = new System.Drawing.Point(112, 192);
this.每月存入.Maximum = new System.Decimal(new int[] {
-1156317184,
46566128,
0,
0});
this.每月存入.Name = "每月存入";
this.每月存入.Size = new System.Drawing.Size(168, 21);
this.每月存入.TabIndex = 1;
this.每月存入.ThousandsSeparator = true;
//
// label6
//
this.label6.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(134)));
this.label6.Location = new System.Drawing.Point(32, 264);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(88, 16);
this.label6.TabIndex = 0;
this.label6.Text = "存款总额:";
//
// 存款总额
//
this.存款总额.DecimalPlaces = 2;
this.存款总额.Increment = new System.Decimal(new int[] {
100,
0,
0,
0});
this.存款总额.Location = new System.Drawing.Point(112, 264);
this.存款总额.Maximum = new System.Decimal(new int[] {
-1156317184,
46566128,
0,
0});
this.存款总额.Name = "存款总额";
this.存款总额.ReadOnly = true;
this.存款总额.Size = new System.Drawing.Size(168, 21);
this.存款总额.TabIndex = 1;
this.存款总额.ThousandsSeparator = true;
//
// 计算
//
this.计算.Location = new System.Drawing.Point(248, 320);
this.计算.Name = "计算";
this.计算.TabIndex = 3;
this.计算.Text = "计算存款";
this.计算.Click += new System.EventHandler(this.计算_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(360, 373);
this.Controls.Add(this.计算);
this.Controls.Add(this.存款总额);
this.Controls.Add(this.每月存入);
this.Controls.Add(this.计算规则);
this.Controls.Add(this.存期);
this.Controls.Add(this.利率);
this.Controls.Add(this.初始金额);
this.Controls.Add(this.label1);
this.Controls.Add(this.label2);
this.Controls.Add(this.label3);
this.Controls.Add(this.label4);
this.Controls.Add(this.label5);
this.Controls.Add(this.label6);
this.Name = "Form1";
this.Text = "储蓄利率计算器";
((System.ComponentModel.ISupportInitialize)(this.初始金额)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.利率)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.存期)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.每月存入)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.存款总额)).EndInit();
this.ResumeLayout(false);

}
#endregion

/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}

private void 计算_Click(object sender, System.EventArgs e)
{
double startAmount=(double)初始金额.Value;
double rate=(double)利率.Value;
int years=(int)存期.Value;
Compound calcFrequency=(Compound) 计算规则.SelectedItem;
double additional=(double)每月存入.Value;

decimal totalValue=0;
rate=rate/100;

int months=12*years;

switch (calcFrequency)
{
case Compound.每月计算利息:
double monthlyRate=rate/12;
for (int i=1; i<=months; i++)
{
startAmount+=startAmount*monthlyRate;
startAmount+=additional;
}
break;
case Compound.每季度计算利息:
double quarterlyRate=rate/4;
for (int i=1; i<=months; i++)
{
if (i%3==0)
{
startAmount+=startAmount*quarterlyRate;
}
startAmount+=additional;
}
break;
default:
MessageBox.Show("该项工作尚未实现!");
break;
}
totalValue=(decimal)startAmount;
存款总额.Value=totalValue;
}
}
}

时间: 2024-10-24 02:14:42

C#教学经验谈(3):储蓄计算器的源程序的相关文章

C#教学经验谈(2):会跑的按钮

为了让学生对事件有一个初步的印象,特意设计了一个趣味程序,界面较简单,就是提一个简单的问题,要你点Yes或No按钮来回答问题.但当你去点Yes按钮的时候,这个Yes按钮会满窗口的跑,不让你去点它. 这个趣味程序是在教学过程中临时穿插进去的.使用这个程序的目的,是让学生对C#中对事件的处理有一个初步的印象,了解事件要经过注册和实现这两步,另外通过这个趣味程序,让学生了解Random类和Point类的使用. 本程序的全部代码如下,请注意红字的代码,其余的代码都是设计器自动生成的.using Syst

Javascript实现计算个人所得税_javascript技巧

TABLE {     BORDER-RIGHT: medium none; PADDING-RIGHT: 0px; BORDER-TOP: medium none; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; BORDER-LEFT: medium none; PADDING-TOP: 0px; CSS: BORDER-BOTTOM: medium none } TD {     BORDER-RIGHT: medium none;

用C#写计算器程序

程序   一.设计思路       用C#写的比较基础的Windows Form 程序,该计算器实现了基础的数学运算,如加,减,乘,除等任务.主要是通过该程序学习VS.net的       编程环境,以及windows Form程序.主要针对初学者       我们分两部份来实现程序,       第一部份.程序界面       1,以下控件表      控件类型 Name Text   form calcForm 计算器   button button1 0    .....    butto

Smarty实例教学 实例篇

Smarty实例教学 实例篇(三.使用ADODB连接数据库) 前两个月因为工作上的原因一直很忙,所以没有及时完成这个教程,正好今天周六不用加班,抽个空完成它吧! 在开始新的的教程的时候,我 先把以前的我写的那个教程中的一些错误的地方修改过来,在这里要感谢 nesta2001zhang兄弟,是他找出了文章中的一些错误,否则真的被别人 骂"误人子弟了"(说来真是惭愧,我的初稿发布后后就发现在一大堆的问题,后来一些时候发重新修改后的文件中居然也出现了错误,真是不应 该...)在上几篇教程中的

用Win32 SDK写一个简单的计算器

用MFC做计算器非常容易,大家都认为用SDK做非常难, 但是我认为只要你的思路正确,做起来也是一样得心应手. 由于SDK做工程也是有规律可寻,就是建立框架然后再对框架进行消息处理. 所以我学VC++一个多月来编出来了我的第一个小程序,在这里和各位VC爱好者交流交流. 做计算器之前,首先要了解下面二个函数:字符串转换为双精度和双精度转换为字符串. 字符串转换为双精度函数为double strtod( const char *nptr, char **endptr ),其中nptr表示要转换的字符串

2020年业务峰值提前3年出现,中国邮政上云实战经验谈

"情系万家,信达天下",中国邮政一直都在身边,与我们的工作和生活密不可分.但很少有人知道,作为世界邮政排名第2,世界500强第105位的中国邮政的信息化建设历程也很长.3月13日"2016云栖奖"获奖者采访时,谈到这些历程,中国邮政集团信息技术局总经理石纯斌如数家珍:"中国邮政集团信息技术局已经成立近20年,承担着中国邮政集团信息化工作.与邮政业务一起发展起来的还有历经'从无到有,从有到全,从全到好'三个阶段的信息化建设." **[视频采访]20

WinCE USB驱动开发经验谈

WinCE USB驱动开发经验谈 随着USB2.0设备的不断增加,USB设备驱动开发在嵌入式开发中变的越来越重要.Windows CE支持USB 2.0更是对这一波新技术浪潮产生巨大的推动.近期我负责一个这样的项目,在WinCE下开发USB接口的外围设备驱动.当时做这个项目花费了我相当多的时间和精力,错走许多冤枉路使我精疲力尽. 项目需求是在已调好的ARM9板子上开发USB WiFi无线网卡的驱动程序,具体要求是驱动程序平台是WinCE,CPU类型支持ARM构架,要能比较方便地移植到X86:驱动

《C++语言基础》实践项目——银行储蓄系统开发

返回:贺老师课程教学链接 教学目标 通过完成一个有实用价值的应用程序,体会利用C++语言解决问题的过程: 多次迭代,逐步完善,用可以运行的程序,鼓舞自己的学习 实训安排 看视频"18 应用系统开发:银行储蓄系统",并阅读博客中提供的参考解答,了解基本系统的开发. 基本要求:定义了用户类(User)和银行类(Bank),用成员函数实现各种功能,多文件组织程序,能用文本文件存取数据(如示例中给出的技术): 拓展方向: 序号 加分项目 细       则 1 改变Bank类中用户信息的存储方

跟老男孩学Linux运维:Shell编程实战1.3 如何才能学好Shell编程之“老鸟”经验谈

1.3 如何才能学好Shell编程之"老鸟"经验谈 学好Shell编程的核心:多练→多思考→再练→再思考,坚持如此循环即可! 从老男孩IT教育毕业的一名学生曾在工作多年后返校分享了一篇"如何学好Shell编程"的讲稿,经过老男孩的整理后和读者分享如下. (1)掌握Shell脚本基本语法的方法 最简单有效的方法就是将语法敲n+1遍.为什么不是n遍呢?因为这里的n指的是你刚开始为掌握语法而练习的那些天(21天法则),而1则是指在确定掌握语法后每天都要写一写.想一想,至少