完整代码如下,问题还存在于 小数位数的金额 不能处理!望众高手指点小弟!谢谢!
可以执行下面代码 ~~~~~~~~~~~~
using System;
using System.Collections;namespace ConsoleApplication12
{
class CheckingAccount
{
static private int Account=100000;//系统已有的帐户数的当前值,静态的,公共的
private string name;   //帐户姓名
private int account;   //帐户号
private double balance;//帐户余额
private int password;
//构造函数,初始化对象时使用(新开帐户时使用)

public CheckingAccount(string na,double ba,int pw)
{
account=Account++;
name=na;
balance=ba;
password=pw;
Console.WriteLine("尊敬{0}先生,您的帐号为{1},现有余额{2}元",name,account,balance);
}
//该方法用于签发支票
public void OrderCheckBook()
{

Console.WriteLine ("你可以签发支票了.");
}
//该方法用于存钱
public void Deposit(double dp)
{
if (dp>0) balance+=dp;
}
//该方法用于取钱
public void Withdraw(double wd)

{

if (balance>=wd) 
{
balance-=wd;
Console.WriteLine ("请核对现金!");
}
else 
{
Console.WriteLine("余额不足!");
}
}
//该方法返回帐户余额
public double CheckAccount()
{
return(balance);
}
//该方法返回帐户号
public int GetAccount()
{
return account;
}
//该方法返回帐户姓名
public string GetName()
{
return name;
}
//列表用于存放所有帐户
public int GetPassword()
{
return password;
}
}
class Class1
{
static int Password()
{
string pas="";
int pas1;
bool flag=false;

do
{
flag=false;
Console.WriteLine("请输入6位数字密码:");
pas=Console.ReadLine();
foreach(char x in pas)
{
if(!char.IsDigit(x))
{
flag=true;
break;
}
}
}while(pas.Length!=6 || flag==true);
pas1 = Convert.ToInt32(pas);
return pas1;

//该方法用于设定用户密码
}
static double inputN()
{
string input="";

bool flag=false;
do
{
flag=false;
input=Console.ReadLine();
if(input.Length<=0){Console.WriteLine("请重新输入");}
else
{
foreach(char x in input)
{
if(!char.IsDigit(x))
{
flag=true;
Console.WriteLine("请重新输入");
}
}
}
}while(input.Length<=0 || flag==true);
double input1=Convert.ToDouble(input);
return input1; 
//该方法用于限制输入金额只能为数字


static ArrayList checkingAccountList=new ArrayList();
static ArrayList checkingPasswordList=new ArrayList(); //验证帐号是否存在,存在返回在列表中的索引号,不存在返回-1
static int VerifyAccount(int account,int password)
{
int returnValue=-1;//没有找到相同的帐号,返回值为-1
for(int i=0;i<checkingAccountList.Count;i++)
{
/*取出列表中的每个帐户,把每个帐户的帐户号与传入的参数account(输入的帐号)比较,
  相等就是我们的返回值,在列表中的索引号,returnValue的值被改变等于i,并退出循环,
  不相等,继续比较,直到比较完整个列表,
  所有帐户的帐户号都不相等,返回值为retrunValue的初始值-1;*/
CheckingAccount ca0=(CheckingAccount)checkingAccountList[i];
if(ca0.GetAccount()==account && ca0.GetPassword()==password)
{
returnValue=i;
break;
}
}
return returnValue;
}
static void Main()
{
string con;
do
{
Console.WriteLine("请选择你需要的操作:\n1-新开户    2-老帐户    3-退出");
con=Console.ReadLine();
switch(con)
{
case "1"://新开户
Console.Write("请输入您姓名:");
string uname=Console.ReadLine();
Console.Write("请输入开户初始金额:");
double money0=inputN();

CheckingAccount ca1=new CheckingAccount(uname,money0,Password());
checkingAccountList.Add(ca1);
break;
case "2"://老帐户
Console.WriteLine("请输入您的帐号:");
int account=Convert.ToInt32(inputN());
int password=Password();
if(VerifyAccount(account,password)!=-1)
{   //调用方法VerifyAccount(account)返回值不等于-1帐户存在
CheckingAccount ca=(CheckingAccount)checkingAccountList[VerifyAccount(account,password)];//从列表中取出与输入帐号对应的帐户和密码
Console.WriteLine("欢迎您,{0}光临!",ca.GetName());
string choice;
do
{
Console.WriteLine("请选择你需要的操作:\n1-签发支票    2-存钱    3-取钱    4-查询余额    5-退出");
choice=Console.ReadLine();
switch(choice)
{
case "1":
Password();
ca.OrderCheckBook();
break;
case "2":
Console.WriteLine("请输入您要存入的金额:");
double money1=inputN();
ca.Deposit(money1);
break;
case "3":
Password();
Console.WriteLine("请输入您要取出的金额:");
double money2=inputN();
ca.Withdraw(money2);
break;
case "4":
Console.WriteLine("您的余额是:{0}元",ca.CheckAccount());
break;
case "5":
break;
default:
Console.WriteLine("输入错误,请重新输入!");
break;
}
}while(choice!="5");
}
else
{   //方法VerifyAccount(account)的返回值等于-1,帐户不存在
Console.WriteLine("帐户不存在,或密码错误!");
}
break;
case "3"://退出
break;
default://方法VerifyAccount(account)的返回值等于-1,帐户不存在
Console.WriteLine("输入错误!");
break;
}
}while(con!="3");
}

解决方案 »

  1.   

    private double balance;//帐户余额
    public CheckingAccount(string na,double ba,int pw)
    {
    account=Account++;
    name=na;
    balance=ba;
    password=pw;
    Console.WriteLine
    还有这个 限制 输入金额的方法!
    static double inputN()
    {
    string input="";bool flag=false;
    do
    {
    flag=false;
    input=Console.ReadLine();
    if(input.Length<=0){Console.WriteLine("请重新输入");}
    else
    {
    foreach(char x in input)
    {
    if(!char.IsDigit(x))
    {
    flag=true;
    Console.WriteLine("请重新输入");
    }
    }
    }
    }while(input.Length<=0 || flag==true);
    double input1=Convert.ToDouble(input);
    return input1; 怎样可以让它balance 能输入并计算 小数位数!case "1"://新开户
    Console.Write("请输入您姓名:");
    string uname=Console.ReadLine();
    Console.Write("请输入开户初始金额:");
    double money0=inputN();CheckingAccount ca1=new CheckingAccount(uname,money0,Password());
    checkingAccountList.Add(ca1);
    break;
      

  2.   

    这样改下,用正则表达式来判断:
    using System.Text.RegularExpressions;static double inputN()
    {
    Regex rx = new Regex(@"^-?\d+(\.\d{2})?$");//定义货币正则表达式
    string input="";bool flag=false;
    do
    {
    flag=false;
    input=Console.ReadLine();
    if(input.Length<=0){Console.WriteLine("请重新输入");}
    else
    {
    //foreach (char x in input)
                        //{
                        //    if (!char.IsDigit(x))
                        //    {
                        //        flag = true;
                        //        Console.WriteLine("请重新输入");
                        //    }
                        //}//改成如下:
                  if (!rx.IsMatch(input))
                        {
                            flag = true;
                            Console.WriteLine("请重新输入");
                        }
    }
    }while(input.Length<=0 || flag==true);
    double input1=Convert.ToDouble(input);
    也就是说你输入的形式应该是比如说:12,12.23,369,867.12等等不能输入比如12.356,12.3,或者14sd.wew等等...
      

  3.   

    注意引入这个命名空间:using System.Text.RegularExpressions;
      

  4.   

    我上面写的正则式:
    Regex rx = new Regex(@"^-?\d+(\.\d{2})?$");
    还允许输入负数,且要么没有小数,要么小数位数是两位,不能够是一位...如果不允许有负数可以改成:
    Regex rx = new Regex(@"^\d+(\.\d{2})?$");如果不允许负数,但允许小数位数为1位,可以改成:
    Regex rx = new Regex(@"^\d+(\.\d{1,2})?$");
      

  5.   

    谢谢 各位 问题已解决!
    using System;
    using System.Collections;
    using System.Threading;
    using System.Globalization;
    namespace ConsoleApplication12
    {
    class CheckingAccount
    {
    static private int Account=100000;//系统已有的帐户数的当前值,静态的,公共的
    private string name;   //帐户姓名
    private int account;   //帐户号
    private double balance;//帐户余额
    private int password;
    //构造函数,初始化对象时使用(新开帐户时使用)

    public CheckingAccount(string na,double ba,int pw)
    {
    account=Account++;
    name=na;
    balance=ba;
    password=pw;
    Console.WriteLine("尊敬{0}先生,您的帐号为{1},现有余额{2:c}元",name,account,balance);
    }
    //该方法用于签发支票
    public void OrderCheckBook()
    {

    Console.WriteLine ("你可以签发支票了.");
    }
    //该方法用于存钱
    public void Deposit(double dp)
    {
    if (dp>0) balance+=dp;
    }
    //该方法用于取钱
    public void Withdraw(double wd)

    {

    if (balance>=wd) 
    {
    balance-=wd;
    Console.WriteLine ("请核对现金!");
    }
    else 
    {
    Console.WriteLine("余额不足!");
    }
    }
    //该方法返回帐户余额
    public double CheckAccount()
    {
    return(balance);
    }
    //该方法返回帐户号
    public int GetAccount()
    {
    return account;
    }
    //该方法返回帐户姓名
    public string GetName()
    {
    return name;
    }
    //列表用于存放所有帐户
    public int GetPassword()
    {
    return password;
    }
    }
    class Class1
    {
    static int Password()
    {
    string pas="";
    int pas1;
    bool flag=false;

    do
    {
    flag=false;
    Console.WriteLine("请输入6位数字密码:");
    pas=Console.ReadLine();
    foreach(char x in pas)
    {
    if(!char.IsDigit(x))
    {
    flag=true;
    break;
    }
    }
    }while(pas.Length!=6 || flag==true);
    pas1 = Convert.ToInt32(pas);
    return pas1;

    //该方法用于设定用户密码
    }
    static double inputN()
    {
    string input="";
    bool flag=false;
    do
    {
    flag=false;
    input=Console.ReadLine();
    if(input.Length<=0){Console.WriteLine("请重新输入");}
    else
    {
    foreach(char x in input)
    {

    if(!char.IsDigit(x))
    {
    flag=true;
    Console.WriteLine("请重新输入");
    break;
    }

    }
    }
    }while(input.Length<=0 || flag==true);
    double input1=Convert.ToDouble(input);
    return input1; 
    //该方法用于限制输入用户名只能为数字

    static double inputB()
    {
    string input="";
    int dian=0;
    bool flag=false;
    do
    {
    dian=0;
    flag=false;
    input=Console.ReadLine();
    if(input.Length<=0){Console.WriteLine("请重新输入");}
    else
    {
    foreach(char x in input)
    {
    if('.'==x)
    {
    dian++; }
    else
    {
    if(!char.IsDigit(x) || dian>1)
    {
    flag=true;
    Console.WriteLine("请重新输入");
    break;
    }
    }
    }
    }
    }while(input.Length<=0 || flag==true);
    double input1=Convert.ToDouble(input);
    return input1; 
    //该方法用于限制输入金额只能为数字或者小数


    static ArrayList checkingAccountList=new ArrayList(); //验证帐号是否存在,存在返回在列表中的索引号,不存在返回-1
    static int VerifyAccount(int account,int password)
    {
    int returnValue=-1;//没有找到相同的帐号,返回值为-1
    for(int i=0;i<checkingAccountList.Count;i++)
    {
    /*取出列表中的每个帐户,把每个帐户的帐户号与传入的参数account(输入的帐号)比较,
      相等就是我们的返回值,在列表中的索引号,returnValue的值被改变等于i,并退出循环,
      不相等,继续比较,直到比较完整个列表,
      所有帐户的帐户号都不相等,返回值为retrunValue的初始值-1;*/
    CheckingAccount ca0=(CheckingAccount)checkingAccountList[i];
    if(ca0.GetAccount()==account && ca0.GetPassword()==password)
    {
    returnValue=i;
    break;
    }
    }
    return returnValue;
    }
    static void Main()
    {
    string con;
    do
    {
    Console.WriteLine("请选择你需要的操作:\n1-新开户    2-老帐户    3-退出");
    con=Console.ReadLine();
    switch(con)
    {
    case "1"://新开户
    Console.Write("请输入您姓名:");
    string uname=Console.ReadLine();
    Console.Write("请输入开户初始金额:");
    double money0=inputB();

    CheckingAccount ca1=new CheckingAccount(uname,money0,Password());
    checkingAccountList.Add(ca1);
    break;
    case "2"://老帐户
    Console.WriteLine("请输入您的帐号:");
    int account=Convert.ToInt32(inputN());
    int password=Password();
    if(VerifyAccount(account,password)!=-1)
    {   //调用方法VerifyAccount(account)返回值不等于-1帐户存在
    CheckingAccount ca=(CheckingAccount)checkingAccountList[VerifyAccount(account,password)];//从列表中取出与输入帐号对应的帐户和密码
    Console.WriteLine("欢迎您,{0}光临!",ca.GetName());
    string choice;
    do
    {
    Console.WriteLine("请选择你需要的操作:\n1-签发支票    2-存钱    3-取钱    4-查询余额    5-退出");
    choice=Console.ReadLine();
    switch(choice)
    {
    case "1":
    ca.OrderCheckBook();
    break;
    case "2":
    Console.WriteLine("请输入您要存入的金额:");
    double money1=inputB();
    ca.Deposit(money1);
    break;
    case "3":
    Console.WriteLine("请输入您要取出的金额:");
    double money2=inputB();
    ca.Withdraw(money2);
    break;
    case "4":
    double mydouble=ca.CheckAccount();
    Console.WriteLine("您的余额是:");
    Console.WriteLine(mydouble.ToString("c"));
    break;
    case "5":
    break;
    default:
    Console.WriteLine("输入错误,请重新输入!");
    break;
    }
    }while(choice!="5");
    }
    else
    {   //方法VerifyAccount(account)的返回值等于-1,帐户不存在
    Console.WriteLine("帐户不存在,或密码错误!");
    }
    break;
    case "3"://退出
    break;
    default://方法VerifyAccount(account)的返回值等于-1,帐户不存在
    Console.WriteLine("输入错误!");
    break;
    }
    }while(con!="3");
    }
    }