Nw BBS 壬天堂世界

 找回密码
 注册
搜索
热搜: 资料集合
查看: 3397|回复: 25
收起左侧

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

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

Classs Bank
{
……
}
……

Bank [ ] users=new Bank[10000];

users[0]=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[1000];
            string name, gender, address;   //声明3个字符串变量用以存储用户的姓名、性别、住址

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


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

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


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

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


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


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

使用道具 举报

发表于 2009-4-14 23:26:15 | 显示全部楼层
问UZ去.....我不是搞这范.......我搞审核的........
回复

使用道具 举报

发表于 2009-4-15 00:16:06 | 显示全部楼层
水区的学习氛围真的越来越好了= =
回复

使用道具 举报

发表于 2009-4-15 00:30:02 | 显示全部楼层
C#不会
回复

使用道具 举报

发表于 2009-4-15 00:53:13 | 显示全部楼层
C#不懂

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



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

使用道具 举报

发表于 2009-4-15 08:29:13 | 显示全部楼层
用数组结合类应该可以啊,你将相同的东西放在父类,将不同的地方放在子类,然后让数组自增,理论上是这样,实际代码怎么写,忘了
回复

使用道具 举报

 楼主| 发表于 2009-4-15 08:33:32 | 显示全部楼层
嘛,女同学的确很少,一个班也就3、4个。(反正各各都不漂亮,无所谓啦)
顺便唯一一个C成绩高过我的同学刚好是我室友,目前正在苦思冥想怎样才能消除他编的程序的1X个错误...
其他同学近一大半都还没动工,我去问谁
回复

使用道具 举报

 楼主| 发表于 2009-4-15 08:52:50 | 显示全部楼层
好吧,刚刚又改了下,发现可以正常运行
class Program
    {
        static void Main(string[] args)
        {
            Bank[] users = new Bank[1000];
            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[N]= new Bank(name, gender, address);   //初始化对象同时为Name、Gender、Address赋值(下同)
                users[N].serve();   //调用该方法实现用户对各项服务的选择
            }
        }
    }
这样算是省去了很多麻烦了,不知还能不能精简?

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

使用道具 举报

发表于 2009-4-15 08:54:54 | 显示全部楼层
满眼都是乱码...我打酱油去...
回复

使用道具 举报

发表于 2009-4-15 09:12:50 | 显示全部楼层
我是不是最近跑错区了
回复

使用道具 举报

发表于 2009-4-15 09:16:05 | 显示全部楼层
C# 如果是C++ VB JAVA我还没啥问题
回复

使用道具 举报

发表于 2009-4-15 10:26:08 | 显示全部楼层
C++我都是自学的,所以很朔,不过那个除了用循环确实也不知道有什么更好的办法。

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

使用道具 举报

发表于 2009-4-15 12:32:12 | 显示全部楼层
选择时,用户输入一个非数字的字符,这程序就挂了……

另:LS参考STL去。
回复

使用道具 举报

发表于 2009-4-15 12:33:35 | 显示全部楼层
好难啊-0-

计算机刚入门的路过
回复

使用道具 举报

发表于 2009-4-15 12:44:39 | 显示全部楼层
什么跟什么
完全看不懂啊啊啊啊
回复

使用道具 举报

发表于 2009-4-15 12:47:37 | 显示全部楼层

回复 15# 的帖子

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

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2009-4-15 17:51:24 | 显示全部楼层
原帖由 苍月草 于 2009-4-15 16:48 发表
写的还可以了,足够交差了.
当然可以完善的地方还很多...比如为啥不用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 发表
console.writeline= =这个和谐||

-。-有校内么...加来玩玩...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|手机版|Archiver|Nw壬天堂世界 ( 京ICP备05022083号-1 京公网安备11010202001397号 )

GMT+8, 2024-10-7 16:27 , Processed in 0.026816 second(s), 3 queries , Redis On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表