C#课程设计报告

C#课程设计报告
C#课程设计报告

一、设计内容与设计要求

1.课程设计目的:

全面熟悉、掌握C#编程、面向对象的基础知识,较熟练地编写基于C#的windows应用程序,了解C#的常用类库、编程技巧、异常处理。联系已学的内容,巩固所学的理论,增强独立工作能力。通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。为后继课程()的实验以及课程设计打下较扎实的基础。

2.课题题目

(1)银行业务管理系统设计与实现

3.设计要求:

(1)课程设计环境要求

操作系统:Windows XP SP3或是Windows 7,

内存要求:至少512MB。

开发环境要求:安装了VS2008 SP1的VS 2008 Professional简体中文版。(2)设计内容要求

在银行业务管理中,不同银行规定有不同的账户类型,如整存整取、零存整取、存本取息、通知存款、定额定期、订货两便和活期储蓄等。

本课程设计不处理这么复杂的内容,而是假定只提供三种账户,活期存

款账户、定期存款账户和零存整取账户。

1)活期存款账户规定

创建活期账户时,必须提供帐户名和开户金额,而账号则根据存款分类自动生成,活期存款账号的范围为10001~19999(包括10001和19999),默认为%,每次取款时,不论存款时间多长,都要根据当前余额结算一次

利息,并将利息附加到现有余额中,然后再从中取出指定的款数。向现

有账户追加存款时,不进行结算。

2)定期存款账户规定

创建定期账户时,必须提供帐户名和开户金额,而账号则根据存款分

类自动生成,定期存款账号的范围为20001~29999(包括20001和2999),定期存款要求一次性存款、一次性取款,100元起存,期限规定为只提供1年、3年和5年三种定期。三种到期利率默认分别为%、%和%,如果到期后客户没有取款、超出存款期限部分的利率按%计算。如果客户提前取款,取款时利率全部按%计算。每次取款时,不论存款时间多长,都要根据当前余额结算一次利息,并将利息附加到现有余额中,然后再从中取出指定的款数。向现有账户追加存款时,不进行结算。

[

利息结算方式为:

到期利息=定期利率*存款金额

超期利息=(存款金额+到期利息)*超期利率

3)零存整取规定

创建零存整取账户时,必须提供帐户名和开户金额,而账号则根据存款分类自动生成,零存整取账号的范围为30001~39999(包括30001和3999),零存整取要求每月都必须存固定的金额,5元起存,一次取款,存款期限规定为只提供1年、3年和5年三种,到期利率默认为%、%和%,如果到期后客户没有取款,超出存款期限部分的利率按%。如果客户没有按规定存款,取款时利率全部按%计算。每次取款时,不论存款时间多长,都要根据当前余额结算一次利息,并将利息附加到现有余额中,然后再从中取出指定的款数。向现有账户追加存款时,不进行结算。

利息结算方式为:

到期利息=到期利率*每月固定金额*月数

超期利息=(总存款金额+到期利息)*超期利率

'

4)要允许用户随时查询自己的存取款信息。查询时要求提供用户名、存款类型和账户。

5)程序要易于扩充,即需要增加存款业务类型时,要能够利用已经实现的功能,通过尽量少的代码快速实现。

(3)课程设计文档要求

1)每位同学提交一份打印的课程设计报告。

2)报告内容要求

系统功能介绍,并用viso画出系统整体框架图

主要模块划分,并用viso画出系统功能模块图

*

程序运行界面截图及说明。

系统主要亮点介绍。

设计中遇到的问题、难点及解决方法。

3)按规定格式完成课程设计报告,将其打印稿(A4纸)上交给老师存档。

4)不得抄袭他人课程设计报告,每个人应体现自己的个性设计。二、进度安排

第 1 周星期三 8时:00分——12时:00分

第 1 周星期四 8时:00分——12时:00分

第 1 周星期五 8时:00分——12时:00分

附:

课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。

正文的格式:一级标题用3号黑体,二级标题用4号宋体加粗,正文用小四号宋体,行距为22.

/

目录

1、系统开发背景 0

2、系统功能模块 0

3、主要模块划分 (1)

、活期存款账户规定 (1)

、定期存款账户规定 (1)

、零存整取账户规定 (2)

4、程序运行界面截图及说明 (2)

、开户 (2)

、存款和取款 (2)

、显示界面 (3)

5、源代码: (3)

6、调试过程中的问题、难点及解决方法 (14)

7、评分表 (15)

注意:

1. 此目录供参考。(目录中的页码要写好。)

2. 课设报告的装订顺序:此文档的前五页->目录->正文->评分表。起始页码从正文开始。(注意:前四页的内容中的课题题目需列出具体题目)

1、系统开发背景

全面熟悉、掌握C#编程、面向对象的基础知识,较熟练地编写基于C#的windows 应用程序,了解C#的常用类库、编程技巧、异常处理。联系已学的内容,巩固所学的理论,增强独立工作能力。通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。为后继课程()的实验以及课程设计打下较扎实的基础。

2、系统功能模块

用户可以根据需求选择不同的银行,然后在银行里面选择不同的存款类型,一般的存储类型有:整存整取、零存整取、存本取息、通知存款、定额定期、订货两便和活期储蓄等。本课程设计不处理这么复杂的内容,而是假定只提供三种账户,活期存款账户、定期存款账户和零存整取账户。这样用户选择存储类型后,就可以开户,存款和取款等业务了。

3、主要模块划分

、活期存款账户规定

创建活期账户时,必须提供帐户名和开户金额,而账号则根据存款分类自动生成,活期存款账号的范围为10001~19999(包括10001和19999),默认为%,每次取款时,不论存款时间多长,都要根据当前余额结算一次利息,并将利息附加到现有余额中,然后再从中取出指定的款数。向现有账户追加存款时,不进行结算。

、定期存款账户规定

创建定期账户时,必须提供帐户名和开户金额,而账号则根据存款分类自动生成,定期存款账号的范围为20001~29999(包括20001和2999),定期存款要求一次性存款、一次性取款,100元起存,期限规定为只提供1年、3年和5年三种定期。三种到期利率默认分别为%、%和%,如果到期后客户没有取款、超出存款期限部分的利率按%计算。如果客户提前取款,取款时利率全部按%计算。每次取款时,不论存款时间多长,都要根据当前余额结算一次利息,并将利息附加到现有余额中,然后再从中取出指定的款数。向现有账户追加存款时,不进行结算。利息结算方式为:

到期利息=定期利率*存款金额

超期利息=(存款金额+到期利息)*超期利率

、零存整取账户规定

创建零存整取账户时,必须提供帐户名和开户金额,而账号则根据存款分类自动生成,零存整取账号的范围为30001~39999(包括30001和3999),零存整取要求每月都必须存固定的金额,5元起存,一次取款,存款期限规定为只提供1年、3年和5年三种,到期利率默认为%、%和%,如果到期后客户没有取款,超出存款期限部分的利率按%。如果客户没有按规定存款,取款时利率全部按%计算。每次取款时,不论存款时间多长,都要根据当前余额结算一次利息,并将利息附加到现有余额中,然后再从中取出指定的款数。向现有账户追加存款时,不进行结算。

利息结算方式为:

到期利息=到期利率*每月固定金额*月数

超期利息=(总存款金额+到期利息)*超期利率

4、程序运行界面截图及说明

、开户

、存款和取款

、显示界面

5、源代码:

/* */

class Customs

{

private string accountName;

public CustomType BankCustomType { get; protected set; }

public string AccountNumber { get; protected set; }

public float AccountBalence { get; protected set; }

public string Time ;

public int flag;

public float benjin;

public int Year;

public string AccountName

{

get

{

return accountName;

}

set

{

if (value))

{ throw new Exception("账号名不能为null或者空字符串"); }

else

{

for (int i = 0; i < ; i++)

{

if (value[i]) == false)

{ throw new

Exception("zhuanghuzjiyunxuzhimuhuohanzizucheng"); }

else { accountName = value; }

}

}

}

}

public List PerAccountList { get;set ; }

public void Diposit(float money)

{

if (money <= 0)

{ throw new Exception("存款金额不能为零或负值"); }

else { AccountBalence += money; AddList("存款", money); } }

protected void AddList(string typeInfo, float money)

{

(

"账号:{0}.姓名:{1},存款金额:{2},"+

"{3:yyyy-MM-dd[HH:mm:ss]} {4}{5:f2}元,余额{6:f2}元", AccountNumber ,

AccountName ,

BankCustomType ,

DateTime .Now ,

typeInfo ,

money ,

AccountBalence

));

}

protected void AddList(string typeInfo, float money,string year)

{

(

"账号:{0}.姓名:{1},存款金额:{2}," +

"{3:yyyy-MM-dd[HH:mm:ss]} {4}{5:f2}元,余额{6:f2}元;

期限 :{7}",

AccountNumber,

AccountName,

BankCustomType,

,

typeInfo,

money,

AccountBalence,

Time

));

}

public bool ValidBeforeWithdraw(float money)

{

if (money <= 0)

{

("qukuangjinebunengweilinhuofuzhi");

return false;

}

if (money > AccountBalence)

{

("qukuangjinebunengfayuyue");

return false;

}

return true;

}

public virtual void Withdraw(float money)

{

AccountBalence -= money;

AddList("取款",money );

}

}

\* *\

class CheckingCostoms :Customs

{

private static int newAccountNumber = 10001;

public float InterestRate

{

get

{ return ; }

}

public CheckingCostoms(string accountName, float accountBalence)

{

if (newAccountNumber > 19999)

{ throw new Exception("huoqicunkuangzhuanghu"); } else

{

= accountName;

= accountBalence;

= CustomType.活期存款;

= ();

newAccountNumber++;

PerAccountList = new List();

AddList("kaihu",accountBalence );

}

}

public override void Withdraw(float money)

{

if (ValidBeforeWithdraw(money) == false) return;

float rate = InterestRate * AccountBalence;

AccountBalence += rate;

AddList("jiesuanlixi",rate );

(money);

}

}

\* *\

class FixedCustoms:Customs

{

private static int newAccountNumber=20001;

public float InterestRate

{

get

{

string s1; int s2,s3;

s1= .ToString ("yyyy");

s2=Convert .ToInt32 (s1);

if(Time =="一年")

{

s3 = s2 - Year;

if (s3 < 1)

{ flag = -1; return ; }

else if (s3 == 1)

{ flag = 0; return ; }

else

{ flag = 1; return ; }

}

else if (Time == "三年")

{

s3 = s2 - Year;

if (s3 < 3)

{ flag = -1; return ; }

else if (s3 == 3)

{ flag = 0; return ; }

else

{ flag = 1; return ; }

}

else

{

s3 = s2 - Year;

if (s3 < 5)

{ flag = -1; return ; }

else if (s3 == 1)

{ flag = 0; return ; }

else

{ flag = 1; return ; }

}

}

}

public FixedCustoms (string accountName,float accountBalence,string year)

{

if (newAccountNumber > 29999)

{ throw new Exception("dingqicunhaoyijinyongwan"); } else

{

string s1; int s2;

s1 = "yyyy");

s2 = (s1);

= accountName;

= accountBalence;

= CustomType.定期存款;

= year;

= s2;

= ();

newAccountNumber++;

PerAccountList = new List();

AddList("开户",accountBalence,year );

}

}

public override void Withdraw(float money)

{

if (ValidBeforeWithdraw(money) == false) return;

float rate=0,rate1=0;

if (flag == 0 && flag == -1)

{

rate = InterestRate * AccountBalence;

AccountBalence += rate;

AddList("利息结算", rate);

(money);

}

else

{

rate = InterestRate * AccountBalence;

AccountBalence += rate;

rate1 = * AccountBalence;

AccountBalence += rate1;

AddList("利息结算", rate1);

(money);

}

}

}

\* *\

class Lingcunzhengqu:Customs

{

private static int newAccountNumber=30001;

public float InterestRate

{

get

{

string s1; int s2;

s1= .ToString ("yyyy");

s2=Convert .ToInt32 (s1);

if(Time =="一年")

{

if (AccountBalence < benjin * 12)

{

flag = -1; return ;

}

else if (AccountBalence == benjin * 12) { flag = 0; return ; }

else

{ flag = 1;return ; }

}

else if (Time == "三年")

{

if (AccountBalence < benjin * 36)

{

flag = -1; return ;

}

else if (AccountBalence == benjin * 36) { flag = 0; return ; }

else

{ flag = 1; return ; }

}

else

{

if (AccountBalence < benjin * 60)

{

flag = -1; return ;

}

else if (AccountBalence == benjin * 12)

{ flag = 0; return ; }

else

{ flag = 1; return ; }

}

}

}

public Lingcunzhengqu (string accountName,float accountBalence,string year)

{

if (newAccountNumber > 39999)

{ throw new Exception("dingqicunhaoyijinyongwan"); }

else

{

string s1; int s2;

s1 = "yyyy");

s2 = (s1);

= accountName;

= accountBalence;

= CustomType.零存整取;

= year;

= s2;

= accountBalence;

= ();

newAccountNumber++;

PerAccountList = new List();

AddList("开户",accountBalence,year );

}

}

public override void Withdraw(float money)

{

if (ValidBeforeWithdraw(money) == false) return;

float rate=0,rate1=0;

int yueshu;

yueshu = (int )(AccountBalence / benjin);

if (flag == 0 && flag == -1)

{

rate = InterestRate * benjin *yueshu ;

AccountBalence += rate;

AddList("利息结算", rate);

(money);

else

{

rate = InterestRate *benjin *yueshu ;

rate1 = * (AccountBalence+rate );

AccountBalence += rate1;

AddList("利息结算", rate1);

(money);

}

}

}

\* *\

public partial class MainForm1 : Form

{

private static SortedDictionary customers = new SortedDictionary();

public MainForm1()

{

InitializeComponent();

string[] accountTypeString = (typeof(CustomType));

= 0;

= ;

}

private void MainForm1_Load(object sender, EventArgs e)

{

}

private void button1_Click(object sender, EventArgs e)

{

float money;

if , out money) == false)

{

("开户金额不正确","无法开户", , );

return;

CreateCustom, , money,;

}

private void CreateCustom(string customTypeString, string userName, float initMoney,string year)

{

Customs newCustom = null;

if (customTypeString == "活期存款")

{

try { newCustom = new CheckingCostoms(userName, initMoney); }

catch (Exception ex) { ()); }

}

else if (customTypeString == "定期存款")

{

if < 100)

{ ("开户金额不足", "无法开户", , ; }

else

{

try { newCustom = new FixedCustoms(userName, initMoney, year); }

catch (Exception ex) { ()); return; }

}

}

else

{

if < 5)

{ ("开户金额不足", "无法开户", , ; }

else

{

try { newCustom = new Lingcunzhengqu (userName, initMoney, year); }

catch (Exception ex) { ()); return; }

}

}

if (newCustom != null)

{ , newCustom);

UpdateAccountInfo;

}

}

private void UpdateAccountInfo(string account)

{

Customs custom = customers[account];

foreach (var info in

{

);

}

}

private void button2_Click(object sender, EventArgs e)

{

float money;

if (!ParseMoney, "存款", out money)) return;

Customs custom = GetCustom;

if (custom == null) return;

try { (money); UpdateAccountInfo; }

catch (Exception ex) { ()); }

}

private bool ParseMoney(string moneyString, string typeInfo, out float money)

{

if (float .TryParse (moneyString,out money )==false )

{

(typeInfo +"金额不正确","",MessageBoxButtons .OK , ); return false;

}

return true;

}

private Customs GetCustom(string key)

{

if (!(key))

{

("无此账户,请先开户!");

return null;

}

else { return customers[key]; }

}

private void button3_Click(object sender, EventArgs e)

{

float money;

if (!ParseMoney, "存款", out money)) return;

Customs custom = null;

custom = GetCustom(textBox3 .Text );

if (custom == null)

{ return; }

try { (money); UpdateAccountInfo; }

catch (Exception ex) { ()); }

}

6、调试过程中的问题、难点及解决方法

在做这个银行业务管理信息系统中,存储时间是我遇到的最大的一个问题。因为对c#中关于时间周期的函数不熟悉,所以为了解决存储时间问题,我去请教了老师和同学,查阅了网上有关的资料,最后千辛万苦把它解决了。主要运用了C#中的DataTime函数,再根据存款开始的时间与现在取款的时间来作比较,用它们俩的时间差来解决不同情况下取款时利息结算问题。

相关主题
相关文档
最新文档