C#应用实训|任务3 查询、充值功能实现
发布者:唯众
布时间:2020-12-10 16:05:34
点击量:
任务描述
用户名和密码验证通过后,系统显示主菜单,如果用户选择查询菜单,则要求用户输入要查询的手机号,系统对手机号进行验证,验证不通过,提示错误信息,验证通过,显示当前手机号对应余额,如果用户选择充值菜单,则要求用户输入要充值的手机号,系统对手机号进行验证,验证不通过,提示错误信息,验证通过,要求输入充值金额,系统对金额数据进行判断,如果数据无效,提示错误信息,如果数据有效,则将输入的充值金额累加到当前手机用户余额中。
知识引入
- 数组
在程序设计中,对于同一类型相关联的一组数如果分别为每一个数定义一个变量名,既不利于程序的易读性,也不利于表达一组数据之间的相互关系,这时,可以使用数组来定义这些数据。
数组的定义:
数据类型[数组长度] 数组名
例: int[10] a; int [] arr=new int[5];
【
例2-8】
输入5名评委给选手的评分,去掉一个最高分,去掉一个最低分,其它评分求平均分作为选手的最后得分,输出选手的最终成绩。
class Demo2_8
{
static void Main(string[] args)
{
float[] score = new float[5];
float max,min, result, sum=0;
Console.WriteLine("请输入5名评委的评分:");
for (int i=0;i<score.Length;i++)
{
score[i] = float.Parse(Console.ReadLine());
}
max = min = score[0];
for (int i = 0; i < score.Length; i++)
{
sum += score[i];
if(max<score[i])
{ max = score[i]; }
if (min > score[i])
{ min = score[i]; }
}
result = (sum - max - min) / 3;
Console.WriteLine("去掉一个最高分:"+max+ "分,去掉一个最低分:"+min+"分");
Console.WriteLine("选手最后得分为:"+result+"分");
}
}
- 字符串函数
- ToLower():得到字符串的小写形。
- ToUpper():得到字符串的大写形。
- Trim():去掉字符串两边的空白字。
- Substring(index,length):获取从字符串index位置开始,长度为length的子字符。
- IndexOf(char value):获取字符串第一次出现value字符的位置。
- Equals():判断两个字符串是否相同。如果用“==”判断两个字符串是否相同,则不区别大小写。
- 方法
在程序设计过程中,如果相同的一系列语句或具有选定功能的一段代码块在整个项目中需要重复使用多次,为了提高程序的易读性及代码块的复用性,应该将该代码块定义为一个方法,当代码块定义为方法后,可以达到定义一次,调用多次的效果,而调用方法只需要一条简单的语句。
方法的定义:[修饰符] 方法的返回值 方法名([方法的参数列表])
{
代码块
}
方法的调用: 方法名([实参值])
注意:方法的参数传递分为值传递和引用传递,基本数据类型作实参进行传递是值传递,传递的值,形参值的改变不影响实参的值,数组作为实参进行传递是引用传递,传递的是数组在内存中存储的地址,方法执行后,实参数数组与形参数组共用同一存储空间,因此数组作参数时,形参值的改变会影响实参值。
【
例2-9】
定义一个方法求两个数的较大值,输入两个数,调用该方法输出较大值。
class Demo2_9
{
public static int add(int a,int b)
{
return (a>b?a:b);
}
static void Main(string[] args)
{
int a, b;
Console.WriteLine("请输入两个数:");
a = int.Parse(Console.ReadLine());
b = int.Parse(Console.ReadLine());
Console.WriteLine("较大值为:"+add(a,b));
}
}
任务实现
- 定义初始化数据方法
静态方法,返回值为数组,在方法内部使用字符串数组模拟已有数据,元素存储形式为字符串“手机号,余额”。在程序设计中使用Substring()方法分别获取手机号和余额。
public static string[] init() { …… }
- 定义手机号有效性验证方法
静态方法,返回值为整数,如果手机号码不是联通手机号码或手机号码不在初始化数据中,则返回值为-1,否则返回值为该手机号在初始化数据中的下标。
public static int testPhone(string phone,string[] unicomData)
{ …….. }
- 定义查询方法
静态方法,没有返回值,实现余额查询功能,要求输入手机号,调用手机号有效性验证方法,如果手机号码有效,则输出该手机号余额。
public static void chaxun( string[] unicomData)
{…….. }
- 定义充值方法
静态方法,没有返回值,实现余额查询功能,要求输入手机号,调用手机号有效性验证方法,如果手机号码有效,则要求输出充值金额,如果充值金额有效,则将充值金额累加至该手机号现有余额。
public static void chonzhi ( string[] unicomData)
{…….. }
- 定义主菜单方法
静态方法,没有返回值,实现菜单的输出,当选择菜单1时,调用查询方法,当选择菜单2时调用充值方法。
public static void menu(string[] unicomData)
{…….. }
- 定义登陆方法
静态方法,没有返回值,实现登陆验证功能,如果登陆验证通过,调用主菜单,输出主菜单供用户选择。
public static void load(string[] unicomData)
{…….. }
- 编写调试项目二
新建控制台项目,项目名lesson2,解决方案名lesson2,添加类Demo2_10,设置启动对象为Demo2_10,编写调试项目二,程序如下:
【
例2-10】
using System;
namespace lesson2
{
class Demo2_10
{
/// <summary>
/// 方法--数据初始化
/// </summary>
public static string[] init()
{
string[] unicomData = new string[5];
unicomData[0] = "13071991110,100";
unicomData[1] = "13179991119,50";
unicomData[2] = "15578881120,70";
unicomData[3] = "15677771112,120";
unicomData[4] = "13271991117,30";
return unicomData;
}
/// <summary>
/// 方法--手机号码有效性验证
/// </summary>
/// <param name="phone"></param>
/// <param name="unicomData"></param>
/// <returns></returns>
public static int testPhone(string phone,string[] unicomData)
{
int result = -1,i;
string[] subphone = new string[] { "130", "131", "132", "145", "155", "156", "166", "171", "175", "176", "185", "186" };
for(i=0;i<subphone.Length;i++)
{
if(phone.Length==11&&phone.Substring(0,3).Equals(subphone[i]))
{
break;
}
}
if(i < subphone.Length)
{
for(int j=0;j<unicomData.Length;j++)
{
if (phone.Equals(unicomData[j].Substring(0, 11))){
result = j;
break;
}
}
}
return result;
}
/// <summary>
/// 方法--查询菜单实现
/// </summary>
/// <param name="unicomData"></param>
public static void chaxun( string[] unicomData)
{
string phoneCode;
Console.WriteLine("您选择的是查询菜单");
Console.WriteLine("请输入您要查询的手机号码:");
phoneCode = Console.ReadLine();
int i = testPhone(phoneCode, unicomData);
if ( i==-1)
{
Console.WriteLine("您输入的手机号错误,系统将自动退出!谢谢使用!");
}
else
{
Console.WriteLine("您的余额为:"+ unicomData[i].Substring(12));
menu(unicomData);
}
}
/// <summary>
/// 方法--充值菜单实现
/// </summary>
/// <param name="unicomData"></param>
public static void chonzhi( string[] unicomData)
{
string phoneCode;
Console.WriteLine("您选择的是充值菜单");
Console.WriteLine("请输入您要充值的手机号码:");
phoneCode = Console.ReadLine();
int i = testPhone(phoneCode, unicomData);
if (i == -1)
{
Console.WriteLine("您输入的手机号错误,系统将自动退出!谢谢使用!");
}
else
{
Console.WriteLine("请输入您要充值的金额:");
int num =int.Parse(Console.ReadLine());
if (num < 0)
{
Console.WriteLine("您输入的金额无效,不能充值,系统将自动退出!谢谢使用!");
}
else
{
Console.WriteLine("充值成功,您的充值金额为:"+num);
num += int.Parse(unicomData[i].Substring(12));
unicomData[i] = unicomData[i].Substring(0, 12) + num;
menu(unicomData);
}
}
}
/// <summary>
/// 方法--主菜单
/// </summary>
/// <param name="unicomData"></param>
public static void menu(string[] unicomData)
{
Console.WriteLine("联通手机充值系统");
Console.WriteLine("****************************");
Console.WriteLine("1.------查询");
Console.WriteLine("2.------充值");
Console.WriteLine("3.------退出");
Console.WriteLine("****************************");
Console.WriteLine("请输入您的选择:");
int i;
i = int.Parse(Console.ReadLine());
switch (i)
{
case 1:
chaxun(unicomData);
break;
case 2:
chonzhi(unicomData);
break;
case 3:
Console.WriteLine("谢谢使用!再见!");
break;
default:
Console.WriteLine("您输入的菜单不存在!谢谢使用!再见!");
break;
}
}
/// <summary>
/// 方法--登陆
/// </summary>
/// <param name="unicomData"></param>
public static void load(string[] unicomData)
{
int i = 1;
string userName, pwd;
Console.WriteLine("欢迎进入联通手机充值系统");
Console.WriteLine("请输入用户名:");
userName = Console.ReadLine();
Console.WriteLine("请输入密码:");
pwd = Console.ReadLine();
while (i < 3)
{
if (userName.Equals("admin") && pwd.Equals("123456"))
{
menu(unicomData);
break;
}
else
{
Console.WriteLine("您输入的用户名或密码错误,请重新输入:");
Console.WriteLine("请输入用户名:");
userName = Console.ReadLine();
Console.WriteLine("请输入密码:");
pwd = Console.ReadLine();
i++;
}
}
if (i > 2)
{
Console.WriteLine("用户名或密码输入错误已达三次!系统将自动退出!");
}
}
static void Main(string[] args)
{
string[] unicomData = init();
load(unicomData);
}
}
}
任务小结
- 数组表示相同类型的一组数,数组的下标由0开始。
- 方法用来组织具有一定功能的代码块,方法在定义后可以通过语句进行调用,提高代码的复用性。
上一篇:C#应用实训|任务2 登陆验证
下一篇:C#应用实训|项目二 知识拓展