本人马上要暑期实习,暑期实习要用到C#,但之前并未教过,所以实习前几天在校练习,并布置了任务,然而遇到了点问题…
问题如下:
第一个模块是主菜单模块:
#region 菜单界面
private void MainMenu()
{
{
Console.WriteLine(“欢迎使用访问控制管理系统”);
Console.WriteLine(“1 权限信息管理”);
Console.WriteLine(“2 角色信息管理”);
Console.WriteLine(“3 用户信息管理”);
Console.WriteLine(“0 退出系统”);
}
string m = Console.ReadLine();
int c = Convert.ToInt32(m);
bool e = true;
while (e)
{
switch (c)
{
case 1:
AuthorityMenu();
break;
case 2:
RoleMenu();
break;
case 3:
UserMenu();
break;
case 0:
e = false;
break;
}
}
}
#endregion
第二个模块是权限管理子菜单模块:
#region 权限菜单
private void AuthorityMenu()
{
{
Console.WriteLine(“欢迎使用权限信息管理”);
Console.WriteLine(“1 权限信息增加”);
Console.WriteLine(“2 权限信息删除”);
Console.WriteLine(“3 权限信息修改”);
Console.WriteLine(“0 返回系统”);
}
string n = Console.ReadLine();
int d = Convert.ToInt32(n);
bool t = true;
while (t)
{
switch (d)
{
case 1:
Authority a = new Authority();
Console.WriteLine(“输入权限编号:”);
a.Authority_No = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(“输入权限名:”);
a.Authority_Name = Console.ReadLine();
AddAuthority(a);
bool p1 = true;
Console.WriteLine(“能否继续添加?1为是,0为否”);
string sure1 = Console.ReadLine();
int sureint1 = Convert.ToInt32(sure1);
while (p1)
{
switch (sureint1)
{
case 1:
p1 = false;
break;
case 0:
p1 = false;
AuthorityMenu();
break;
}
}
break;
case 2:
Authority a2 = new Authority();
Console.WriteLine(“输入权限编号:”);
a2.Authority_No = Convert.ToInt32(Console.ReadLine());
DeleteAuthority(a2);
bool p2 = true;
Console.WriteLine(“能否继续删除?1为是,0为否”);
string sure2 = Console.ReadLine();
int sureint2 = Convert.ToInt32(sure2);
while (p2)
{
switch (sureint2)
{
case 1:
p2 = false;
break;
case 0:
p2 = false;
AuthorityMenu();
break;
}
}
break;
case 3:
Authority a3 = new Authority();
Console.WriteLine(“输入权限编号:”);
a3.Authority_No = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(“输入权限名:”);
a3.Authority_Name = Console.ReadLine();
ChangeAuthority(a3);
bool p3 = true;
Console.WriteLine(“能否继续更改?1为是,0为否”);
string sure3 = Console.ReadLine();
int sureint3 = Convert.ToInt32(sure3);
while (p3)
{
switch (sureint3)
{
case 1:
p3 = false;
break;
case 0:
p3 = false;
AuthorityMenu();
break;
}
}
break;
case 0:
t = false;
MainMenu();
break;
}
}
}
#endregion
(原因是其他子菜单模块也是一样的结果所以只放一个)
第三个是系统运行模块:
#region 系统运行
public void Run()
{
//根据用户输入进入下级菜单
MainMenu();
}
#endregion
然后执行的时候出了问题,假如啥都不做直接退出可以直接退出,但只要点开了功能再返回就不能正常退出,会显示刚才点开的功能,如下图所示:
这是为什么?本人该怎么样修改代码?
问题如下:
第一个模块是主菜单模块:
#region 菜单界面
private void MainMenu()
{
{
Console.WriteLine(“欢迎使用访问控制管理系统”);
Console.WriteLine(“1 权限信息管理”);
Console.WriteLine(“2 角色信息管理”);
Console.WriteLine(“3 用户信息管理”);
Console.WriteLine(“0 退出系统”);
}
string m = Console.ReadLine();
int c = Convert.ToInt32(m);
bool e = true;
while (e)
{
switch (c)
{
case 1:
AuthorityMenu();
break;
case 2:
RoleMenu();
break;
case 3:
UserMenu();
break;
case 0:
e = false;
break;
}
}
}
#endregion
第二个模块是权限管理子菜单模块:
#region 权限菜单
private void AuthorityMenu()
{
{
Console.WriteLine(“欢迎使用权限信息管理”);
Console.WriteLine(“1 权限信息增加”);
Console.WriteLine(“2 权限信息删除”);
Console.WriteLine(“3 权限信息修改”);
Console.WriteLine(“0 返回系统”);
}
string n = Console.ReadLine();
int d = Convert.ToInt32(n);
bool t = true;
while (t)
{
switch (d)
{
case 1:
Authority a = new Authority();
Console.WriteLine(“输入权限编号:”);
a.Authority_No = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(“输入权限名:”);
a.Authority_Name = Console.ReadLine();
AddAuthority(a);
bool p1 = true;
Console.WriteLine(“能否继续添加?1为是,0为否”);
string sure1 = Console.ReadLine();
int sureint1 = Convert.ToInt32(sure1);
while (p1)
{
switch (sureint1)
{
case 1:
p1 = false;
break;
case 0:
p1 = false;
AuthorityMenu();
break;
}
}
break;
case 2:
Authority a2 = new Authority();
Console.WriteLine(“输入权限编号:”);
a2.Authority_No = Convert.ToInt32(Console.ReadLine());
DeleteAuthority(a2);
bool p2 = true;
Console.WriteLine(“能否继续删除?1为是,0为否”);
string sure2 = Console.ReadLine();
int sureint2 = Convert.ToInt32(sure2);
while (p2)
{
switch (sureint2)
{
case 1:
p2 = false;
break;
case 0:
p2 = false;
AuthorityMenu();
break;
}
}
break;
case 3:
Authority a3 = new Authority();
Console.WriteLine(“输入权限编号:”);
a3.Authority_No = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(“输入权限名:”);
a3.Authority_Name = Console.ReadLine();
ChangeAuthority(a3);
bool p3 = true;
Console.WriteLine(“能否继续更改?1为是,0为否”);
string sure3 = Console.ReadLine();
int sureint3 = Convert.ToInt32(sure3);
while (p3)
{
switch (sureint3)
{
case 1:
p3 = false;
break;
case 0:
p3 = false;
AuthorityMenu();
break;
}
}
break;
case 0:
t = false;
MainMenu();
break;
}
}
}
#endregion
(原因是其他子菜单模块也是一样的结果所以只放一个)
第三个是系统运行模块:
#region 系统运行
public void Run()
{
//根据用户输入进入下级菜单
MainMenu();
}
#endregion
然后执行的时候出了问题,假如啥都不做直接退出可以直接退出,但只要点开了功能再返回就不能正常退出,会显示刚才点开的功能,如下图所示:
这是为什么?本人该怎么样修改代码?
解决方案
30
你的d没有更新或是清理,while循环里面找合适的地方添加readline,更新d的值
10
你在编程方面,所学的东西“还是很坑的”,还没有学到一些基本的工程知识。在编程中,最令人作呕的就是“习惯于写一个大大的while循环”,这种垃圾代码是最误事儿的。更何况你还要弄出来好几大while循环,然后再来纠缠它们一点相互牵制、相互嵌套之后的什么诡异的“关系”。
设计实用的应用软件(而不是业余的学数学的那些人简单的编个数学计算小函数),最主要学会的是“抽象”。然后你要接触一些“菜单驱动、命令行驱动、图形驱动、事件驱动、时钟驱动”等等基本的设计元素的概念。
例如说对于命令行驱动,同时你又有多个嵌套在一起的菜单,那么你就应该把全部的菜单都抽象出一个类型,然后设计出此命令行菜单怎么样“进入”、怎么样显示、怎么样等待用户录入、怎么样返回(上一级)、怎么样进入下一级、怎么样执行命令。而这是一个 abstract 类型。然后,全部的菜单都是这个类型的子类。
你应该面向对象地设计“菜单”类,而不是面向过程来设计它。
设计实用的应用软件(而不是业余的学数学的那些人简单的编个数学计算小函数),最主要学会的是“抽象”。然后你要接触一些“菜单驱动、命令行驱动、图形驱动、事件驱动、时钟驱动”等等基本的设计元素的概念。
例如说对于命令行驱动,同时你又有多个嵌套在一起的菜单,那么你就应该把全部的菜单都抽象出一个类型,然后设计出此命令行菜单怎么样“进入”、怎么样显示、怎么样等待用户录入、怎么样返回(上一级)、怎么样进入下一级、怎么样执行命令。而这是一个 abstract 类型。然后,全部的菜单都是这个类型的子类。
你应该面向对象地设计“菜单”类,而不是面向过程来设计它。