#region   根据用户权限将菜单挂TreeView
///   <summary>
///   初始化菜单的根节点,并调用递归函数,生成菜单树
///   </summary>
///   <param   name= "strUserid "> 传入登录的用户ID </param>
///   <param   name= "strFrame "> 点击菜单时所指向的网页的strFrame </param>
///   <param   name= "treMenu "> 用于显示菜单的treeview </param>
private   void   InittreMenu(string   strUserid,   string   strFrame,   TreeView   treMenu)
{
DataSet   dsMenu   =   new   DataSet();
string   strSql   =   "select   *   from   tbMenu   where   id   = '10 ' ";  
dsMenu   =   GetDataSet.SelectSql(strSql, "MenuTable ");   //   获得树的内存表
treMenu.Nodes.Clear();//   清空树
TreeNode   tndRoot=new   TreeNode();
tndRoot.Text=dsMenu.Tables[0].Rows[0][ "fcaption "].ToString();   //   给节点绑定显示值
tndRoot.NodeData=dsMenu.Tables[0].Rows[0][ "id "].ToString();   //   给节点绑定key值
tndRoot.Expanded=true;   // 默认根结点为展开
tndRoot.Target   =   strFrame;
if   (   dsMenu.Tables[0].Rows[0][ "fparameter "].ToString()   ==   " ")
{
tndRoot.NavigateUrl   =   dsMenu.Tables[0].Rows[0][ "furl "].ToString();
}
else
{
tndRoot.NavigateUrl   =   dsMenu.Tables[0].Rows[0][ "furl "].ToString()   + "? "+PageParams(dsMenu.Tables[0].Rows[0][ "fparameter "].ToString(),dsMenu.Tables[0].Rows[0][ "fvalue "].ToString());
}
treMenu.Nodes.Add(tndRoot);
string   strParentid=dsMenu.Tables[0].Rows[0][ "id "].ToString();   // 他子节点的strParentid字段值
CreateChildNode(strUserid,strFrame,strParentid,tndRoot);// 加入所有根结点以下的结点
}

///   <summary>
///   通过递归生成菜单树
///   </summary>
///   <param   name= "strUserid "> 传入登录的用户ID </param>
///   <param   name= "strFrame "> 点击菜单时所指向的页面的strFrame </param>
///   <param   name= "strParentid "> 上一级菜单的结点ID </param>
///   <param   name= "parentnode "> 上一级菜单结点 </param>
private   void   CreateChildNode(string   strUserid,string     strFrame,string   strParentid,TreeNode   parentnode)
{
DataSet   dsMenus   =   new   DataSet();// 选出所有子节点
string   strSql   =   "select   *   from   tbMenu   where   id   in   (select   Menuid   from   tbUsersMenu   where   Userid   =   "   +   " ' "+strUserid   + " ' "+   ")   and   fParentid   = "+ " ' "+strParentid+ " ' ";
//遍历所有子节点
dsMenus   =   GetDataSet.SelectSql(strSql,   "MenusTable ");
foreach(   DataRow   r   in   dsMenus.Tables[0].Rows   )
{
TreeNode   tndChild   =   new   TreeNode();
tndChild.Text   =   r[ "fcaption "].ToString();
tndChild.NodeData   =   r[ "id "].ToString();
parentnode.Nodes.Add(tndChild);
tndChild.Expanded=false;
tndChild.Target   =   strFrame;
if   (   r[ "fparameter "].ToString()   ==   " ")
{
tndChild.NavigateUrl   =   r[ "furl "].ToString();
}
else
{
tndChild.NavigateUrl   =   r[ "furl "].ToString()   + "? "+PageParams(r[ "fparameter "].ToString(),r[ "fvalue "].ToString());
}
strParentid=r[ "id "].ToString();
CreateChildNode(strUserid,strFrame,strParentid,tndChild);//递归下一级节点
}
}
#endregion
好的,下面是利用栈求表达式值的代码实现,包括以上要求的所有功能函数: ```c++ #include <iostream> #include <stack> #include <string> using namespace std; stack<int> numStack; // 存储操作数的栈 stack<char> opStack; // 存储运算符的栈 // 初始化栈 void initstack0() { while (!numStack.empty()) { numStack.pop(); } while (!opStack.empty()) { opStack.pop(); } } // 将字符型运算符转换成优先级 int change_opnd(char op) { if (op == '+' || op == '-') { return 1; } else if (op == '*' || op == '/') { return 2; } else { return -1; // 非法运算符 } } // 处理运算符 int procede(char op) { while (!opStack.empty() && change_opnd(opStack.top()) >= change_opnd(op)) { int b = numStack.top(); numStack.pop(); int a = numStack.top(); numStack.pop(); char c = opStack.top(); opStack.pop(); int res; if (c == '+') { res = a + b; } else if (c == '-') { res = a - b; } else if (c == '*') { res = a * b; } else if (c == '/') { res = a / b; } numStack.push(res); } opStack.push(op); return 0; } // 将运算符压入栈 int push_operator(char op) { if (op == '(') { opStack.push(op); } else if (op == ')') { while (!opStack.empty() && opStack.top() != '(') { int b = numStack.top(); numStack.pop(); int a = numStack.top(); numStack.pop(); char c = opStack.top(); opStack.pop(); int res; if (c == '+') { res = a + b; } else if (c == '-') { res = a - b; } else if (c == '*') { res = a * b; } else if (c == '/') { res = a / b; } numStack.push(res); } opStack.pop(); } else { procede(op); } return 0; } // 将运算数压入栈 int push_num(int num) { numStack.push(num); return 0; } // 弹出运算符 int pop_operator() { char op = opStack.top(); opStack.pop(); return op; } // 简单计算+,一,* int calculate(int a, int b, char op) { int res; if (op == '+') { res = a + b; } else if (op == '-') { res = a - b; } else if (op == '*') { res = a * b; } else if (op == '/') { res = a / b; } return res; } // 弹出运算数 int pop_num() { int num = numStack.top(); numStack.pop(); return num; } // 语法检查并计算 int Nake_str0(string str) { int len = str.size(); int i = 0; while (i < len) { if (str[i] >= '0' && str[i] <= '9') { // 如果是数字 int num = 0; while (i < len && str[i] >= '0' && str[i] <= '9') { // 继续读取数字 num = num * 10 + (str[i] - '0'); i++; } push_num(num); } else if (str[i] == '+' || str[i] == '-' || str[i] == '*' || str[i] == '/') { // 如果是运算符 push_operator(str[i]); i++; } else if (str[i] == '(' || str[i] == ')') { // 如果是括号 push_operator(str[i]); i++; } else { // 非法字符 cout << "Invalid character" << endl; return -1; } } while (!opStack.empty()) { // 计算剩余的表达式 int b = pop_num(); int a = pop_num(); char op = pop_operator(); push_num(calculate(a, b, op)); } int res = pop_num(); cout << "Result: " << res << endl; return res; } int main() { string str; cout << "Please enter the expression: "; getline(cin, str); // 读取一行字符串 initstack0(); Nake_str0(str); return 0; } ``` 这段代码实现了利用栈求表达式值,支持加减乘除及带括号的四则混合整数运算,同时包含了以上要求的所有功能函数,如初始化栈、语法检查并计算、将运算符和运算数压入栈等。输入一个合法的表达式后,程序能够给出计算结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值