C#课程设计报告
![C#课程设计报告](https://img.360docs.net/img40/17ibz0s3dl8ale4z65uqu3mc869f3yi3-01.webp)
![C#课程设计报告](https://img.360docs.net/img40/17ibz0s3dl8ale4z65uqu3mc869f3yi3-42.webp)
一、设计内容与设计要求
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
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
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函数,再根据存款开始的时间与现在取款的时间来作比较,用它们俩的时间差来解决不同情况下取款时利息结算问题。