C#作业(三) 【学完第二十四部分可做】

一、简答题

1、简述成员变量和局部变量的区别?

【1】成员变量(字段)在类中、方法外定义;局部变量在方法体内定义(包括形参:接收实参,生命周期为在方法调用的时候)

【2】成员变量随着对象创建而存在,随着对象的消失而消失;局部变量随着方法调用而存在,随着方法的调用完毕而消失

【3】成员变量默认初始化值,默认数值类型为0,引用类型为null;局部变量没有默认初始化值,必须在定义的时候赋值,才能使用,否则会产生编译错误

【4】局部变量和成员变量的名称可以相同,同一个作用域或方法中不能有两个相同的局部变量,在方法中使用时采用就近原则(也就是方法中的变量)

 

2、假设同一个类中定义了成员变量string name;且方法中定义局域变量string name=2,请问方法体内调用name和this.name分别代表什么意思?

name表示局部变量,this.name表示成员变量

 

3、请简述在方法中使用return关键词的规则?

【1】return 语句终止当前方法的执行,并将控制权(方法得出的值)返回给调用方(如主方法)

【2】public后加某种数据类型时,return 可以返回值,后面加常量、变量、表达式、方法等;

         public 后加void 时,return可以不写,也可以写,但不能写返回值

 

4、简述引用传参和值传参的概念,说说你对引用传参中ref和out关键词的理解?

【1】引用传递传递的是地址,值传递传递的是内容

【2】ref 参数在传递之前要初始化,out不需要,out 参数在返回时必须赋值,ref 在定义变量的时候要重新赋值

 

5、简述字段与属性的区别以及this关键词在类中的做作用?

【1】字段:对内(类的内部)

         属性:对外;可以做一些过滤(本质上也是一种方法)

         二者都属于对象,均可用this 调用

【2】this:字段、属性、方法都可以通过this 的方法在本类中使用

 

6、访问修饰符是否可以标识局部变量?谈谈访问修饰符public 与 private的使用含义?

访问修饰符不可以标识局部变量

配置信息类才会用静态标识

 

7、简述你对static关键词的作用和理解?

【1】static 修饰的内容,如:主方法、全局变量、静态方法等;全局变量(public static string name = "学生管理")在本项目的任意地方使用

【2】静态类变量,无需创建对象,可直接通过其类名引用

 

二、编程题

1、添加学生类(Student)包含字段学号、姓名、年龄、班级名称, 添加学生业务类(StudentBiz)添加一个全局的对象数组。添加AddStudent、删除(DelStudent)、修改(ModifyStudent)、显示学生信息(ShowStudent)。创建测试类(Program)调用以上四种功能方法。

//创建一个学生类
namespace demo9
{
    /// <summary>
    /// 学生类
    /// </summary>
    public class Student
    {
        public int StuNo { get; set; }//学号
        public string StuName { get; set; }//年龄
        public int StuAge { get; set; }//年龄
        public string StuClass { get; set; }//班级
    }
}
//创建一个学生业务类
namespace demo9
{
    /// <summary>
    /// 学生业务类
    /// </summary>
    public class StudentBiz
    {
        /// <summary>
        /// 用于存放学生的数组
        /// </summary>
        public Student[] students = new Student[30];//0 1 2 3 .... 29

        /// <summary>
        /// 添加学生
        /// </summary>
        /// <param name="stu"></param>
        public void AddStudent(Student stu)//包括四个属性
        {
            for (int i = 0; i < students.Length; i++)
            {
                if (students[i] == null)
                {
                    students[i] = stu;//保存好之后,跳出(终止)循环
                    break;
                }
            }
        }

        /// <summary>
        /// 显示学生信息
        /// </summary>
        public void ShowStudent()
        {
            for (int i = 0; i < students.Length; i++)
            {
                Student stu =students[i];//创建一个学生对象(简写)
                //不必每次去数组中寻找,便于打断点
                if (stu != null)
                {
                    Console.WriteLine($"学号:{stu.StuNo},姓名:{stu.StuName}," +
                        $"年龄:{stu.StuAge},班级:{stu.StuClass}");                   
                }
            }
        }

        /// <summary>
        /// 根据学号删除学生信息
        /// </summary>
        /// <param name="stuno"></param>
        /// <returns></returns>
        public bool DelByStuno(int stuno) //1001
        {
            bool result = false;//默认删除失败
            for (int i = 0; i < students.Length; i++)//循环查找
            {
                if (students[i] != null)
                {
                    if (students[i].StuNo == stuno)
                    {
                        students[i] = null;//由于数组长度不可变
                        result = true;//删除成功
                        break;
                    }
                }
            }
            return result;
        }

        /// <summary>
        /// 修改学生信息
        /// </summary>
        /// <param name="stu"></param>
        public void ModifyStudent(Student stu)//传入的是修改后的信息
        {
            for (int i = 0; i < students.Length; i++)
            {
                if (students[i] != null)
                {
                    //判断是否找到
                    if (students[i].StuNo == stu.StuNo)
                    {
                        //替换信息
                        students[i] = stu;//认为就是此人,将修改后的信息替换过去
                        break;
                    }
                }
            }
        }

        /// <summary>
        /// 根据学生编号查询对应的学生
        /// </summary>
        /// <param name="stuno"></param>
        /// <returns></returns>
        public Student GetStuByStuNo(int stuno)
        {
            Student stu = null;
            for (int i = 0; i < students.Length; i++)
            {
                if (students[i] != null)
                {
                    if (students[i].StuNo == stuno)
                    {
                        stu = students[i];//找到该学生后,将这个学生的信息赋给stu这个对象
                        break;
                    }
                }
            }
            return stu;
        }

    }
}
//在main()方法中调用
namespace demo9
{
    class Program
    {
        static void Main(string[] args)
        {
            StudentBiz studentBiz = new StudentBiz();
            //添加
            studentBiz.AddStudent(new Student() { StuNo = 1001, StuName = "lily", StuAge = 21, StuClass = "17信管1班" });
            studentBiz.AddStudent(new Student() { StuNo = 1002, StuName = "john", StuAge = 19, StuClass = "17信管2班" });
            studentBiz.AddStudent(new Student() { StuNo = 1003, StuName = "sharry", StuAge = 23, StuClass = "17信管3班" });
            //显示
            studentBiz.ShowStudent();

            //删除前
            Console.WriteLine("删除前:");
            studentBiz.ShowStudent();
            //删除
            bool result = studentBiz.DelByStuno(1002);//1002为实参
            if (result)
            {
                Console.WriteLine("删除成功!");
            }
            else
            {
                Console.WriteLine("删除失败!查无此人!");
            }
            //删除后
            Console.WriteLine("删除后:");
            studentBiz.ShowStudent();
            
            //修改学号为1003的学生信息            
            studentBiz.ModifyStudent(new Student() { StuNo = 1003, StuName = "king", StuAge = 23, StuClass = "17信管4班" });
            Console.WriteLine("修改后:");
            studentBiz.ShowStudent();

            //查询某一学生
            Student stu = studentBiz.GetStuByStuNo(1001);
            Console.WriteLine($"找到了学号为{stu.StuNo}的学生信息:姓名:{stu.StuName},年龄:{stu.StuAge},班级:{stu.StuClass}");

            Console.ReadLine();
        }
    }
}

 

2、实现银行系统中登录与转账的业务,首先初始化三个账号信息,然后使用其中一个账号登录,实现给另外一位用户转账,转行成功之后显示结果信息。如图所示:

//创建银行信息表
namespace demo9_2
{
    /// <summary>
    /// 银行卡类
    /// </summary>
    public class Account
    {
        /// <summary>
        /// 银行账号表
        /// </summary>       
        public string Name { get; set; }//账户姓名
        public string AccountNo { get; set; }//账号       
        public double Money { get; set; }//存款余额
        public string Password { get; set; }//密码
        public string CardId { get; set; }//身份证号
    }
}
//创建ATM服务类
namespace demo9_2
{
    /// <summary>
    /// ATM机服务类
    /// </summary>
    public class ATMService
    {
        Account[] accounts = new Account[3];//在ATM机上创建3个银行账号
        /// <summary>
        /// 登录人
        /// </summary>
        Account LoginAccount;//若要使用户登录后能够进行存款、取款、转账等功能,就不能把其放在某一方法中,而是将其提取为成员变量

        /// <summary>
        /// 初始化
        /// </summary>
        public void Init()
        {
            accounts[0] = new Account() { AccountNo = "179708064356", Name = "王丽丽",Money = 1000, Password = "1234", CardId = "210050619890808185" };
            accounts[1] = new Account() { AccountNo = "179708064359", Name = "张颖颖",Money = 2000, Password = "4321", CardId = "510010619891231127" };
            accounts[2] = new Account() { AccountNo = "179708064368", Name = "刘华",Money = 8000, Password = "4567", CardId = "410207198904051271" };
            Show();

            int i = 1;//定义登录次数
            while(!Login())//Login()的结果为true时不进入,为false时才进入
            {
                Console.WriteLine($"账号或密码错误{i}次,请重新输入!");
                if (i > 3)
                {
                    Console.WriteLine("密码错误3次!请等待10分钟后重新操作!");
                    return;//Init()方法结束
                }
                i++;
            }

            Console.WriteLine("====================================欢迎使用自动银行服务===================================");
            Console.WriteLine("1:存款 2:取款 3:转账 4:查询余额 5:退出");
            Console.WriteLine("===========================================================================================");
            int result = int.Parse(Console.ReadLine());
            switch(result)
            {
                case 3:
                    Transfer();
                    break;
                default:
                    Console.WriteLine("银行尚未开通此业务,敬请期待!");
                    break;
            }

        }

        /// <summary>
        /// 登录
        /// </summary>
        /// <returns></returns>
        public bool Login()
        {
            Console.WriteLine("======================================欢迎进入登陆界面=====================================");
            bool result = false;
            Console.WriteLine("请输入账号:");
            string accountNo = Console.ReadLine();//用户输入的账号
            Console.WriteLine("请输入密码:");
            string password = Console.ReadLine();//用户输入的密码
            for (int i = 0; i < accounts.Length; i++)
            {
                Account account = accounts[i];
                if (account.AccountNo == accountNo && account.Password == password)
                {
                    LoginAccount = account;
                    result = true;
                    break;
                }
            }
            return result;
        }

        /// <summary>
        /// 显示
        /// </summary>
        public void Show()
        {
            for (int i = 0; i < accounts.Length; i++)
            {
                Account account = accounts[i];
                Console.WriteLine($"账户姓名:{account.Name},账号:{account.AccountNo},存款余额:{account.Money},密码:{account.Password},身份证号:{account.CardId}");
            }
        }

        /// <summary>
        /// 转账
        /// </summary>
        public void Transfer()
        {
            Console.WriteLine("======================================欢迎进入转账界面=====================================");
            Console.WriteLine("请输入收款人账号:");
            string accountNo = Console.ReadLine();
            Console.WriteLine("请输入收款金额:");
            double money = double.Parse(Console.ReadLine());
            for (int i = 0; i < accounts.Length; i++)
            {
                Account account = accounts[i];
                if (account.AccountNo == accountNo)
                {
                    account.Money += money;
                    LoginAccount.Money -= money;
                    break;
                }
            }
            Show();
        }

    }
}
//在mian()方法中调用
namespace demo9_2
{
    class Program
    {
        static void Main(string[] args)
        {
            ATMService service = new ATMService();
            service.Init();
            
            Console.ReadLine();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值