Yu~Gi~Oh! 发表于 2009-4-14 23:24:29

【水区万能】求助改进一个C#小程序

貌似水区搞程序的人还不少吧?(昨天讨论那道极限题时就看到有几位用C/C#编程来计算的)
小弟我这学期开始学的C#,这几天导师出了道题,要求模拟银行账户的管理,以下是题目要求:
定义一个银行账户类Bank,该类有No(账户编号)(可以定义成静态类型完成自增变化)、Name(用户名字)、Gender(用户性别)、Address(用户地址)、Banlance(账户金额)等属性,提供方法:完成用户的存钱、取钱、查询账户金额、查询用户信息(以账户编号查询)。假设定义3个账户信息(信息由自己从键盘输入),然后完成账户的存钱操作(存钱金额自己定)、取钱操作(金额自己定)、金额查询操作、用户信息查询操作等。
当创建账户对象时,用构造函数实现属性的初始化,尤其是编号为静态的自增型数值,初值为0开始自增和账户金额属性为0。提示:银行账户有多个,编程用数组实现,数组元素的类型为Bank类的对象。例:
Classs Bank{
……}……
Bank [ ] users=new Bank;
users=new Bank( );
//第一个账户对象,依次类推
。。。。。。

不过我并没有完全按照题目中的要求来做,比如需要输入的信息我都改成了让用户自己来输入,而存/取款以及查询等功能我也改成了由用户来决定是否执行,而且实现各种操作的方法我几乎都集合到了Bank.serve里。
全部如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
    class Bank
    {
      static public int No;   //除静态成员No外其余成员属性都为私有,外界无法直接访问
      string Name;
      string Gender;
      string Address;
      int Banlance;

      public Bank(string Name,string Gender,string Address)   //Bank类的构造函数,其中Name、Gender、Address在初始化对象时由外界给其赋值
      {
            No++;   //每次初始化对象时No自加1
            this.Name = Name;
            this.Gender = Gender;
            this.Address = Address;
            this.Banlance = 0;
      }

      public int getBanlance()   //获取Banlance的值的方法
      {
            return Banlance;
      }

      public void printInformation()   //将个人信息显示出来的方法
      {
            Console.WriteLine("个人信息\n账号:{0} 姓名:{1} 性别:{2} 住址:{3}",No,Name,Gender,Address);
      }   

      public void serve()   //提供服务的方法
      {
            int way;   //声明一个整型变量用以存储用户选择的服务种类
            for (; ; )   //设置一个无限循环使用户可以重复选择服务,最后设置一个跳出点
            {
                Console.WriteLine("\n请选择您想要的服务\n输入1:存款 输入2:取款 输入3:查询余额 输入4:查询个人信息 输入5:退出");
                way = Convert.ToInt32(Console.ReadLine());   //给way赋值(由用户输入)
                switch (way)   //根据way的值来判断用户选择的是哪一种服务
                {
                  case (1):
                        Console.WriteLine("请输入存款的数额");
                        int a = Convert.ToInt32(Console.ReadLine());
                        if (a <= 0)   //对存款的数额进行逻辑判断
                            Console.WriteLine("存款金额不能为非正数!");
                        else
                            Banlance +=a;
                        break;
                  case (2):
                        Console.WriteLine("请输入取款的数额");
                        int b = Convert.ToInt32(Console.ReadLine());
                        if (b <= 0)   //对取款的数额进行逻辑判断(下同)
                            Console.WriteLine("取款金额不能为非正数!");
                        else if (b>Banlance)   
                            Console.WriteLine("当前余额不足!");
                        else
                            Banlance -=b;
                        break;
                  case (3):
                        Console.WriteLine("当前余额为\n"+Banlance);
                        break;
                  case (4):
                        printInformation();   //直接调用此方法将个人信息显示出来
                        break;
                }
                if (way== 5)   //跳出无限循环
                  break;               
            }
      }
    }
    class Program
    {
      static void Main(string[] args)
      {
            Bank[] users = new Bank;
            string name, gender, address;   //声明3个字符串变量用以存储用户的姓名、性别、住址

            Console.WriteLine("建立第一个帐户:\n请输入您的姓名");
            name = Console.ReadLine();
            Console.WriteLine("请输入您的性别");
            gender = Console.ReadLine();
            Console.WriteLine("请输入您的住址");
            address = Console.ReadLine();

            users = new Bank(name, gender, address);   //初始化对象同时为Name、Gender、Address赋值(下同)
            users.serve();   //调用该方法实现用户对各项服务的选择

            Console.WriteLine("建立第二个帐户:\n请输入您的姓名");
            name = Console.ReadLine();
            Console.WriteLine("请输入您的性别");
            gender = Console.ReadLine();
            Console.WriteLine("请输入您的住址");
            address = Console.ReadLine();

            users = new Bank(name, gender, address);
            users.serve();

            Console.WriteLine("建立第三个帐户:\n请输入您的姓名");
            name = Console.ReadLine();
            Console.WriteLine("请输入您的性别");
            gender = Console.ReadLine();
            Console.WriteLine("请输入您的住址");
            address = Console.ReadLine();

            users = new Bank(name, gender, address);
            users.serve();
      }
    }
}


我的问题就是每建立一个新对象就要重新写段同样的语句(红字部分)来“给name、gender、address赋值”,当需要建立的对象非常多时就非常麻烦了,能不能改进下?

dinapc 发表于 2009-4-14 23:26:15

问UZ去.....我不是搞这范.......我搞审核的........

soccerone 发表于 2009-4-15 00:16:06

水区的学习氛围真的越来越好了= =

原始恶魔 发表于 2009-4-15 00:30:02

C#不会

帕伽索斯 发表于 2009-4-15 00:53:13

C#不懂

不过编程原理来说,重复的部分你不能编成一个函数接口么



顺便,学习氛围不能这么重啊啊啊啊啊啊~学习上不会的问题去问同学啊啊啊啊啊啊啊~不要浪费搭讪的机会啊啊啊啊啊啊啊啊~虽然学计算机的估计没啥女同学

ivan1979 发表于 2009-4-15 08:29:13

用数组结合类应该可以啊,你将相同的东西放在父类,将不同的地方放在子类,然后让数组自增,理论上是这样,实际代码怎么写,忘了

Yu~Gi~Oh! 发表于 2009-4-15 08:33:32

嘛,女同学的确很少,一个班也就3、4个。(反正各各都不漂亮,无所谓啦)
顺便唯一一个C成绩高过我的同学刚好是我室友,目前正在苦思冥想怎样才能消除他编的程序的1X个错误...
其他同学近一大半都还没动工,我去问谁

Yu~Gi~Oh! 发表于 2009-4-15 08:52:50

好吧,刚刚又改了下,发现可以正常运行
class Program
    {
      static void Main(string[] args)
      {
            Bank[] users = new Bank;
            string name, gender, address;   //声明3个字符串变量用以存储用户的姓名、性别、住址
            for (int N= 0; N<= 999; N++)
            {
                Console.WriteLine("建立第" + (N+1) + "个新账户\n请输入您的姓名");
                name = Console.ReadLine();
                Console.WriteLine("请输入您的性别");
                gender = Console.ReadLine();
                Console.WriteLine("请输入您的住址");
                address = Console.ReadLine();
                users= new Bank(name, gender, address);   //初始化对象同时为Name、Gender、Address赋值(下同)
                users.serve();   //调用该方法实现用户对各项服务的选择
            }
      }
    }
这样算是省去了很多麻烦了,不知还能不能精简?

[ 本帖最后由 Yu~Gi~Oh! 于 2009-4-15 09:55 编辑 ]

我只是客人 发表于 2009-4-15 08:54:54

满眼都是乱码...我打酱油去...

yusjzz 发表于 2009-4-15 09:12:50

我是不是最近跑错区了

英雄凯撒流 发表于 2009-4-15 09:16:05

C# 如果是C++ VB JAVA我还没啥问题

eherochaos 发表于 2009-4-15 10:26:08

C++我都是自学的,所以很朔,不过那个除了用循环确实也不知道有什么更好的办法。

其实我一直有一个问题,用TC定义数组的时候,能不能不定义常量,我有时候还是蛮想让数组的大小由一只自变量决定的

vinbey 发表于 2009-4-15 12:32:12

选择时,用户输入一个非数字的字符,这程序就挂了……

另:LS参考STL去。

完美魔法师C.C 发表于 2009-4-15 12:33:35

好难啊-0-

计算机刚入门的路过

NDS小弟 发表于 2009-4-15 12:44:39

什么跟什么
完全看不懂啊啊啊啊

soccerone 发表于 2009-4-15 12:47:37

回复 15# 的帖子

正太,一般说来这是你上大学才会触及的领域

苍月草 发表于 2009-4-15 16:48:25

写的还可以了,足够交差了.
当然可以完善的地方还很多...比如为啥不用Property, balance字段应该是decimal, exception处理. 不要都用for来循环,特别是那个for(,,)太恶心了, bank class里不应该有调用console的地方.
不过总的来说,功能上已经实现了,让偶是老师的话,偶给个75分-0-

Yu~Gi~Oh! 发表于 2009-4-15 17:51:24

原帖由 苍月草 于 2009-4-15 16:48 发表 http://bbs.newwise.com/images/common/back.gif
写的还可以了,足够交差了.
当然可以完善的地方还很多...比如为啥不用Property, balance字段应该是decimal, exception处理. 不要都用for来循环,特别是那个for(,,)太恶心了, bank class里不应该有调用console的地方.
...

不太理解,我初学的说。明天就要交了。

林原幽助 发表于 2009-4-15 20:43:24

console.writeline= =这个和谐||

英雄凯撒流 发表于 2009-4-15 20:44:17

原帖由 林原幽助 于 2009-4-15 20:43 发表 http://bbs.newwise.com/images/common/back.gif
console.writeline= =这个和谐||
-。-有校内么...加来玩玩...
页: [1] 2
查看完整版本: 【水区万能】求助改进一个C#小程序