C#程序设计实验指导书
第二部分 实战提高
建立名为Shape的基类,要求是抽象类,在该类中提供一个public abstract double Area()的抽象方法,建立名为Circle的派生类,包括半径属性,实现面积计算,再建立一个名为Rectangle的派生类,包括长和宽两个属性,实现面积的计算。
第三部分 知识总结
学生总结 完成上机训练模块花费的时间 完成实战提高模块花费的时间 请将问题答案写在下面空白处 31
C#程序设计实验指导书
本次实验对你而言的难点 本次实验的收获 希望老师强化讲解的知识要点 希望老师帮助回答的问题 本次实验自评分数 (五分制) 教师评价 请将评语、分数等写在下面空白处 问题答疑 实验评语 实验得分
任务七 掌握多态的应用
实验目的
理解多态的意义
32
C#程序设计实验指导书
了解多态的应用 掌握多态的C#实现
第一部分 上机训练
1、在俄罗斯方块程序中,有L形,T形,田形等多种形状,它们是图形的多种形态,可以创建一个名为Shape的基类,而后派生L形,T形等,之后可以在运行时动态绘制各种形状。
1)创建一个名位Teris的控制台应用程序、 2)各个类之间的关系如下图所示:
3)创建名为Shape的抽象类,包括ShapeType属性和显示信息方法,以及抽象方法绘制:
using System;
using System.Collections.Generic; using System.Text;
namespace Teris {
public abstract class Shape {
private string shapeType;
public string ShapeType {
get { return shapeType; } set { shapeType = value; } }
33
C#程序设计实验指导书
public void DisplayInfo() {
Console.WriteLine(\当前图形类型\ + shapeType); }
public abstract void Draw(); } }
4)创建名为ShapeL的派生类,实现基类的绘制
using System;
using System.Collections.Generic; using System.Text;
namespace Teris {
public class ShapeL : Shape {
public ShapeL() {
ShapeType = \形\; }
public override void Draw() {
Console.WriteLine(\); Console.WriteLine(\); Console.Write(\); Console.WriteLine(\); } } }
5)创建名为ShapeT的派生类,实现基类的绘制
using System;
using System.Collections.Generic; using System.Text;
namespace Teris {
public class ShapeT : Shape {
public ShapeT()
34
C#程序设计实验指导书
{
ShapeType = \形\; }
public override void Draw() {
Console.WriteLine(\); Console.WriteLine(\); Console.WriteLine(\); } } }
6)创建名为ShapeZ的派生类,实现基类的绘制
using System;
using System.Collections.Generic; using System.Text;
namespace Teris {
public class ShapeZ : Shape {
public ShapeZ() {
ShapeType = \形\; }
public override void Draw() {
Console.WriteLine(\); Console.WriteLine(\); Console.WriteLine(\); Console.WriteLine(\); } } }
7)创建名为ShapeBlock(田字形)的派生类,实现基类的绘制
using System;
using System.Collections.Generic; using System.Text;
namespace Teris {
35
长春理工大学计算机科学与技术专业C#程序设
计实验指导
C#程序设计实验指导书
实 验 须 知
1. 实验前,应认真阅读实验指导书,明确实验目的、实验内容和实验步骤,做好实验准备。 2.
实验中,积极思考,及时记录,有疑问及时解决,当堂完成
实验内容和实验报告。 3.
实验中严格遵守实验室管理规则,珍惜实验时间,不做与实
验无关 的事。 4.
实验结束,按要求填写实验机器使用记录单,正确关闭实验
用机,整理好键盘和椅子,值日生认真打扫实验室卫生。
目 录
任务一 熟悉VS2005开发环境 ................................................................................ 1 任务二 掌握基本程序逻辑 ....................................................................................... 8 任务三 掌握循环语句 ............................................................................................... 3 任务四 创建类与对象 ............................................................................................. 10 任务五 创建静态类与静态方法 ............................................................................. 17 任务六 实现继承和抽象类 ..................................................................................... 25 任务七 掌握多态的应用 ......................................................................................... 32 任务八 掌握接口的实现 ......................................................................................... 41 任务九 实现对数组的操作 ..................................................................................... 52 任务十 实现队列、栈的操作 ................................................................................. 60 任务十一 实现进销存系统供应商信息维护 ......................................................... 65 任务十二 掌握开发WinForms应用程序的步骤 .................................................. 71 任务十三 掌握系统主界面设计 ............................................................................. 89 任务十四 掌握委托与事件处理机制 ................................................................... 100 任务十五 访问SQL Server数据库 ..................................................................... 108 任务十六 访问Access数据库 ............................................................................. 122 任务十七 了解字符串操作(选做) ................................................................... 131 任务十八 掌握文件操作(选做) ....................................................................... 138
C#程序设计实验指导书
任务一 熟悉VS2005开发环境
实验目的
掌握VS2005开发C#应用程序的步骤 掌握VS2005调试器的使用
第一部分 上机训练
1、采用VS2005编写Hello World应用程序 1)打开VS2005开发工具
2)在VS2005主界面下选择菜单【文件】|【新建】|【项目】
3)在新建项目对话框中选择Visual C#,模板选择控制台应用程序,给项目命名为HelloWorld,然后点“浏览”按钮,选择项目的存储目录
1
C#程序设计实验指导书
namespace SchoolManagement {
public class User {
private string userName;//用户名
public string Name {
get { return userName; } set { userName = value; } }
private string password;//密码
public string Password {
get { return password; } set { password = value; } }
private string userType;//用户类型
public string UserType {
get { return userType; } set { userType = value; } }
public void Login() {
if (userName.Equals(\) && password.Equals(\)) {
DisplayPersonInfo(); } }
public virtual void DisplayPersonInfo() //注意virtual关键字 {
Console.WriteLine(\姓名:{0}\, userName);
26
C#程序设计实验指导书
Console.WriteLine(\用户类型:{0}\, userType); } } }
2)创建名为Student的派生类,具备班级和成绩两个特殊属性,以及查询成绩的特殊方法,覆盖基类的显示个人信息方法
using System;
using System.Collections.Generic; using System.Text;
namespace SchoolManagement {
public class Student : User {
private string classID;
public string ClassID {
get { return classID; } set { classID = value; } }
private float stuScore;
public float StuScore {
get { return stuScore; } set { stuScore = value; } }
public Student() {
UserType = \学生\; }
public override void DisplayPersonInfo() {
base.DisplayPersonInfo();
Console.WriteLine(\班级:{0}\, classID ); }
public void CheckScore() {
27
C#程序设计实验指导书
Console.WriteLine(\成绩:{0}\, this.stuScore); } } }
3)创建名为Teacher的派生类,具备部门和工资两个特殊属性,以及查询工资的特殊方法,覆盖基类的显示个人信息方法。
using System;
using System.Collections.Generic; using System.Text;
namespace SchoolManagement {
public class Teacher : User {
private string department;//部门
public string Department {
get { return department; } set { department = value; } }
private float salary;//工资
public float Salary {
get { return salary; } set { salary = value; } }
public Teacher() {
UserType = \教师\; }
public override void DisplayPersonInfo() {
base.DisplayPersonInfo();
Console.WriteLine(\部门:\ + this.department); }
public void checkSalary() {
Console.WriteLine(\工资:\ + this.salary);
28
C#程序设计实验指导书
} } }
4)创建名为SysManager的派生类,具备插入学生信息和插入教师信息两个方法
using System;
using System.Collections.Generic; using System.Text;
namespace SchoolManagement {
public class SysManager : User {
public SysManager() {
UserType = \管理员\; }
public Student InsertStudent() {
Student stu = new Student(); stu.Name = \张郭郭\; stu.UserType = \教师\; stu.ClassID = \; stu.StuScore = 70; return stu; }
public Teacher InsertTeacher() {
Teacher teacher = new Teacher(); teacher.Name = \李沙沙\;
teacher.Department = \计算机系\; teacher.Salary = 5000; return teacher; } } }
5)在Program.cs的Main方法中调用以上类,测试效果如下:
using System;
using System.Collections.Generic; using System.Text;
29
C#程序设计实验指导书
namespace SchoolManagement {
class Program {
static void Main(string[] args) {
//系统管理员登录
SysManager sys = new SysManager(); sys.Name = \; sys.Password = \; sys.Login();
Console.WriteLine(\); //系统管理员录入学生和教师信息
Teacher teacher = sys.InsertTeacher(); Student stu = sys.InsertStudent(); //显示教师信息,查询工资 teacher.DisplayPersonInfo(); teacher.checkSalary();
Console.WriteLine(\); //显示学生信息,查询成绩 stu.DisplayPersonInfo(); stu.CheckScore();
Console.WriteLine(\);
} } }
6)最终运行效果如下
30
C#程序设计实验指导书
第三部分 知识总结
学生总结 完成上机训练模块花费的时间 完成实战提高模块花费的时间 本次实验对你而言的难点 本次实验的收获 请将问题答案写在下面空白处 希望老师强化讲解的知识要点 希望老师帮助回答的问题 本次实验自评分数 (五分制) 教师评价 请将评语、分数等写在下面空白处 问题答疑 实验评语 实验得分 16
C#程序设计实验指导书
任务五 创建静态类与静态方法
实验目的
掌握this的使用
掌握静态成员和静态方法的应用 掌握构造方法的使用
第一部分 上机训练
1、个人银行业务主要由存款、取款、查询余额、转帐组成,一般银行为我们办理个人业务时,需要我们实现存入一部分钱方可为我们开户,创建一个PersonalAccount类,实现以上功能。 1)创建一个名为Bank的控制台应用程序 2)对于一个软件系统,我们需要显示其版本号,软件名称,注册码等信息,这些信息可以用静态成员变量保存。因此首先我们可以建一个GlobalSettings类存储这些一般信息,类的创建方法和实验四相同,注意不要忘记类名前加public,GlobalSettings类的代码如下:
using System;
using System.Collections.Generic; using System.Text;
namespace Bank {
public class GlobalSettings {
private static string softwareName = \创新银行个人业务管理系统\; public static string SoftwareName {
get { return GlobalSettings.softwareName; } set { GlobalSettings.softwareName = value; } }
private static string softwareVersion = \版\; public static string SoftwareVersion {
get { return GlobalSettings.softwareVersion; } set { GlobalSettings.softwareVersion = value; }
17
C#程序设计实验指导书
}
private static string softwareCompany = \淮安信息职业技术学院计算机系创新实验室--宋桂岭\;
public static string SoftwareCompany {
get { return GlobalSettings.softwareCompany; } set { GlobalSettings.softwareCompany = value; } }
private static string softwareDescribe = \本系统的创意、著作权均归作者本人所有,任何单位和个人如果引用本系统的任何内容,\\n作者保留追究其法律责任的权利,特此声明。\;
public static string SoftwareDescribe {
get { return GlobalSettings.softwareDescribe; } set { GlobalSettings.softwareDescribe = value; } } } }
3)创建PersonalAccount类,利用构造方法实现开户,利用成员方法实现余额查询、存入、提取、转帐等功能,完整代码如下:
using System;
using System.Collections.Generic; using System.Text;
namespace Bank {
public class PersonalAccount {
private double accountRemainValue;//余额 private string accountName;//姓名
public double AccountRemainValue {
get { return accountRemainValue; } set { accountRemainValue = value; } }
public string AccountName
18
C#程序设计实验指导书
{
get { return accountName; } set { accountName = value; } }
#region 开户
//利用构造方法实现开户
public PersonalAccount(string accountName, double accountRemainValue) {
//注意this用法
this.accountName = accountName;
this.accountRemainValue = accountRemainValue; }
#endregion
#region 存、取、转帐
public void Deposit(double value) {
this.accountRemainValue += value; }
public void WithDraw(double value) {
this.accountRemainValue -= value; }
public void Transfer(PersonalAccount toAccount, double value) {
this.accountRemainValue -= value; toAccount.AccountRemainValue += value; }
#endregion #region 显示余额
public void DisplayRemainAccount() {
Console.WriteLine(\尊敬的{0}先生/女士,您好,您的帐户余额为{1:0.00}元\, accountName, AccountRemainValue); }
#endregion } }
4)在Program.cs中输入如下代码,实现系统功能:
using System;
19
C#程序设计实验指导书
using System.Collections.Generic; using System.Text;
namespace Bank {
class Program {
static void Main(string[] args) {
Console.WriteLine(\###########\);
Console.WriteLine();
Console.WriteLine(\ + GlobalSettings.SoftwareName + GlobalSettings.SoftwareVersion); Console.WriteLine();
Console.WriteLine(\ + \制作单位:\ + GlobalSettings.SoftwareCompany); Console.WriteLine();
Console.WriteLine(\ + GlobalSettings.SoftwareDescribe); Console.WriteLine();
Console.WriteLine(\###########\); //开户
PersonalAccount myAccount = new PersonalAccount(\关羽\, 200); PersonalAccount sheAccount = new PersonalAccount(\关夫人\, 30000); //业务
bool op = true; while (op) {
Console.WriteLine();
Console.WriteLine(\请输入您要办理的业务:1.存款2.提款3.转帐4.退出\); string cmd = Console.ReadLine(); switch (cmd) {
case \:
HandleDesposit(myAccount); break;
20
C#程序设计实验指导书
case \:
HandleWithDraw(myAccount); break; case \:
HandleTransfer(myAccount, sheAccount); break; case \: op = false; break; } }
}
static void HandleDesposit(PersonalAccount account) {
Console.Write(\请输入存款金额:\);
double value = double.Parse(Console.ReadLine()); account.AccountRemainValue += value; Console.WriteLine(\存款操作完成!\); account.DisplayRemainAccount(); }
static void HandleWithDraw(PersonalAccount account) {
Console.Write(\请输入取款金额:\);
double value = double.Parse(Console.ReadLine()); if (account.AccountRemainValue < value) {
Console.WriteLine(\帐户余额不足,取款操作失败!\); return; }
account.AccountRemainValue -= value; Console.WriteLine(\取款操作完成!\); account.DisplayRemainAccount(); }
static void HandleTransfer(PersonalAccount fromAccount, PersonalAccount toAccount) {
Console.Write(\请输入转帐金额:\);
double value = double.Parse(Console.ReadLine()); if (fromAccount.AccountRemainValue < value)
21
C#程序设计实验指导书
{
Console.WriteLine(\帐户余额不足,取款操作失败!\); return; }
fromAccount.AccountRemainValue -= value; toAccount.AccountRemainValue += value; Console.WriteLine(\转帐操作完成!\); fromAccount.DisplayRemainAccount();
toAccount.DisplayRemainAccount();//实际中你是看不到对方的余额的,所以运行结果有点奇怪,不是吗? } } }
第二部分 实战提高
本实验内容较多,故希望同学能仔细理解上述代码,分析清楚,将自己对代码的理解写在下面,写清代码是如何完成银行个人业务系统的功能的(定义了哪些类,业务流程控制等等)。 答:
首先创建了一个名为“关羽”和“关夫人”的用户用来测试程序。进入用户界面,看到银行信息介绍及提供的业务,由while构成的循环用户可以持续选择办理各种业务直至选择“4退出”.
选择1,则进入“存款”操作,调用函数HandleDesposit。输入存款金额并更改账户余额信息,提示操作成功。调用DisplayRemainAccount函数显示操作后的账户信息。
选择2,则进入“提款”操作,调用HandleWithDraw函数。根据提示输入提款金额,通过if条件判断,若输入金额大于余额,则提示操作失败。若合法,则从账户中减去提款金额,提示操作成功。并调用DisplayRemainValue函数显示操作后的账户信息。
选择3,则进入“转账”操作,调用函数HandleTransfer,此函数有两个参数,一个是转出账户,一个是转入账户。通过if 条件判断合法性,若合法则对相应的转出和转入账户的余额进行加减。(此程序默认由关羽账户转入关夫人账户) 选择4,则循环结束,程序结束运行
此程序定义了一个PersonalAccount的类,成员为一个账户的基本信息
定义了一个GlobalSettings的类,成员为此程序,银行和创建者的相关信息。
22
C#程序设计实验指导书
23
C#程序设计实验指导书
第三部分 知识总结
学生总结 完成上机训练模块花费的时间 完成实战提高模块花费的时间 本次实验对你而言的难点 本次实验的收获 请将问题答案写在下面空白处 希望老师强化讲解的知识要点 希望老师帮助回答的问题 本次实验自评分数 (五分制) 教师评价 请将评语、分数等写在下面空白处 问题答疑 实验评语 实验得分 24
C#程序设计实验指导书
任务六 实现继承和抽象类
实验目的
编写一个单一继承的C#程序
编写一个抽象类,并用一个类继承这个抽象类
第一部分 上机训练
1、在学校教务管理系统中,有三种用户,一种是系统管理员,一种是学生,一种是教师,编写C#类实现该继承关系。系统管理员/学生/教师都有用户名和密码属性,并都有Login和显示自身信息的方法,另外,学生拥有班级和成绩两个特殊属性以及查询成绩这一方法,教师拥有部门和工资两个特殊属性以及查询工资这一方法,系统管理员可以添加学生和教师信息。由于教师和学生个人信息不同,所以学生和教师重载基类的DisplayInfo方法。(本例和教材一致,再次出现的目的是通过反复训练,理解继承的作用) 1)类的继承关系可以表示如下:
2)创建控制台应用程序,命名为SchoolManagement 3)创建名为User的基类,基类定义了用户名和密码属性,以及Login和DisplayInfo方法
using System;
using System.Collections.Generic; using System.Text;
25