星空网 > 软件开发 > ASP.net

平凡的KTV后台,不平凡的KTV数据

    之前就是说过“一个项目有很多重要的步骤以及功能”,那我们现在就来看看对于KTV项目来说;后台是处于什么样的重要作用!

    首先就得了解KTV后台的一些功能了:

    1.歌曲管理 、歌手管理 、设置资源路径

    2.新增歌手、歌手查询、新增歌曲、歌曲查询、更改歌曲路径以及退出点歌系统

   

    一.后台登录界面

  平凡的KTV后台,不平凡的KTV数据

 

 01.判断登录

 }    //登陆    private void btnlogin_Click(object sender, EventArgs e)    {      SqlConnection con = new SqlConnection(DBHelp.str);      string sql = "select count(1) from admin_info where admin_name='" + txtuser.Text + "' and admin_pwd='" + txtpwd.Text + "'";      SqlCommand cmd = new SqlCommand(sql, con);      try      {        con.Open();        int count = Convert.ToInt32(cmd.ExecuteScalar());        if (count > 0)        {          this.Hide();          FrmMain frm = new FrmMain();          frm.Show();        }      }      catch (Exception)      {        MessageBox.Show("失败");      }      finally      {        con.Close();
}
}

 

    二.主界面窗体

   平凡的KTV后台,不平凡的KTV数据

    01.新增歌手

    平凡的KTV后台,不平凡的KTV数据

   

     001.添加歌手

 //添加    public void SongInfoAdd()    {      string name = txtname.Text;//歌手姓名      string type = "";//类别      if (ramale.Checked)      {        type = "男";      }      else if (rafemale.Checked)      {        type = "女";      }      else if (raguoup.Checked)      {        type = "组合";      }      int id = Convert.ToInt32(cbotype.SelectedValue);//类型            string description = txtdescrp.Text;//描述      SqlConnection con = new SqlConnection(DBHelp.str);      string sql = "insert into singer_info values('" + name + "'," + id + ",'" + type + "','" + fileName + "','" + description + "')";      SqlCommand cmd = new SqlCommand(sql,con);      try      {        con.Open();        int count = cmd.ExecuteNonQuery();        if (count > 0)        {          File.Copy(fullName, Commod.DBsongurl + "\\" + fileName, true);          MessageBox.Show("歌手添加成功");        }        else        {          MessageBox.Show("歌手添加失败");        }      }      catch (Exception)      {        MessageBox.Show("歌手加载失败"); ;      }      finally      {        con.Close();//关闭      }    }

 

    002.添加图片

 string fileName = "";    string fullName = "";    private void btnView_Click(object sender, EventArgs e)    {      //浏览      if (this.ofdlist.ShowDialog() == DialogResult.OK)      {        fileName = this.ofdlist.SafeFileName; // 文件名        fullName = this.ofdlist.FileName;        picphoto.Image = Image.FromFile(fullName);        txtdescrp.Text = fullName;      }    }

 

   02.查询歌手

 平凡的KTV后台,不平凡的KTV数据

 

 平凡的KTV后台,不平凡的KTV数据

 

平凡的KTV后台,不平凡的KTV数据

 

平凡的KTV后台,不平凡的KTV数据

 

001.按歌手条件查询

 private void btnselect_Click(object sender, EventArgs e)    {      //判定用歌手名或歌手类型查询      if (txtname.Text != ""&&cbotype.Text=="请选择")      {        //歌手名        string sql = @"select singer_name,singertype_name,singer_gender,singer_description                from singer_type,singer_info          where singer_type.singertype_id=singer_info.singertype_id           and singer_name like '%" + txtname.Text + "%'";        Selectsong(sql);      }      else if (txtname.Text=="")      {        //类型        string sql = @"select singer_name,singertype_name,singer_gender,singer_description                from singer_type,singer_info          where singer_type.singertype_id=singer_info.singertype_id           and singertype_name like '%" + cbotype.Text + "%'";        Selectsong(sql);      }      else      {        string sql = @"select singer_name,singertype_name,singer_gender,singer_description                from singer_type,singer_info          where singer_type.singertype_id=singer_info.singertype_id           and singer_name like '%" + txtname.Text + "%' and singertype_name like '" + cbotype.Text +"'";        Selectsong(sql);      }          }

 

 002.给下拉框赋值

 

 //下拉框    public void Singerselect()    {      string str = DBHelp.str;      //连接数据库      SqlConnection con = new SqlConnection(str);      string sql = "select singertype_id,singertype_name from singer_type";      //数据集和数据库连接      SqlDataAdapter da = new SqlDataAdapter(sql, con);      DataSet ds = new DataSet();      try      {        da.Fill(ds);        //绑定数据源        DataTable dt = ds.Tables[0];        DataRow dr = dt.NewRow();        //给该行赋值        dr[0] = -1;        dr[1] = "请选择";        dt.Rows.InsertAt(dr, 0);        cbotype.DataSource = ds.Tables[0];        //下拉框显示值        cbotype.DisplayMember = "singertype_name";        //下拉框隐藏值        cbotype.ValueMember = "singertype_id";      }      catch (Exception)      {        MessageBox.Show("加载失败!");      }      finally      {        con.Close();      }    }

 

   003.右键修改和删除并及时刷新

   平凡的KTV后台,不平凡的KTV数据

 

  代码:

 //修改    private void tsupdate_Click(object sender, EventArgs e)    {      string uname = dgvlist.SelectedRows[0].Cells[0].Value.ToString();      this.Hide();      frmAddSinger frm = new frmAddSinger();      frm.Text = "修改歌手信息";      frm.uname = uname;      frm.Show();    }    //删除    private void tsdelete_Click(object sender, EventArgs e)    {      string names = dgvlist.SelectedRows[0].Cells[0].Value.ToString();      string sql = "delete singer_info where singer_name='" + names + "'";      Selectsong(sql);      string sql1 = @"select singer_name,singertype_name,singer_gender,singer_description              from singer_type,singer_info            where singer_type.singertype_id=singer_info.singertype_id";      Selectsong(sql1);    }

 

   修改歌手

   平凡的KTV后台,不平凡的KTV数据

 

  修改代码:

 //修改    public void Update()    {      int songid = Convert.ToInt32(cbotype.SelectedValue);      int num = txtname.Text.Length;      SqlConnection con = new SqlConnection(DBHelp.str);      //singer_id, singer_name, singertype_id, singer_gender, singer_photo_url, singer_description      string sql = @"update singer_info set singer_name='" + txtname.Text + "',singer_gender='" + ch + "',singer_photo_url='" + fileName +             "',singertype_id=" + type + ",singer_description='"+txtdescrp.Text+"' where singer_name ='" + uname + "'";      SqlCommand cmd = new SqlCommand(sql, con);      try      {        con.Open();        int count = cmd.ExecuteNonQuery();        if (count > 0)        {          MessageBox.Show("修改成功");        }      }      catch (Exception)      {        MessageBox.Show("加载失败"); ;      }      finally      {        con.Close();      }    }

 

  修改与添加的关键判断代码:

 private void btnadd_Click(object sender, EventArgs e)    {      if (this.Text=="修改歌手信息")      {        Update();//修改      }      else      {        SongInfoAdd();//保存功能      }          }

 private void frmAddSinger_Load(object sender, EventArgs e)    {      Singerselect(); //默认查询代码      Commod.DBsongurl=OldLoadWays();      if (this.Text=="修改歌手信息")      {        btnadd.Text = "修改";        //MessageBox.Show(uname);        Load_information();      }      else      {        this.Text = "编辑歌手信息";        btnadd.Text = "保存";      }    }

 

 03.新增歌曲

 平凡的KTV后台,不平凡的KTV数据

  001.查询代码

 //查询    private void btnsearch_Click(object sender, EventArgs e)    {      //歌手      FrmSelectSinger frm = new FrmSelectSinger();      frm.Show();      this.Close();    }  //歌手添加       string singer = dgvlist.SelectedRows[0].Cells[0].Value.ToString();            FrmAdd frm = new FrmAdd();      frm.name = singer;      frm.Show();      this.Close();

 

 

 002.自动形成缩写代码

 

public class Song_ab  {      private static int[] pyValue = new int[]  {  -20319,-20317,-20304,-20295,-20292,-20283,-20265,-20257,-20242,-20230,-20051,-20036,  -20032,-20026,-20002,-19990,-19986,-19982,-19976,-19805,-19784,-19775,-19774,-19763,  -19756,-19751,-19746,-19741,-19739,-19728,-19725,-19715,-19540,-19531,-19525,-19515,  -19500,-19484,-19479,-19467,-19289,-19288,-19281,-19275,-19270,-19263,-19261,-19249,  -19243,-19242,-19238,-19235,-19227,-19224,-19218,-19212,-19038,-19023,-19018,-19006,  -19003,-18996,-18977,-18961,-18952,-18783,-18774,-18773,-18763,-18756,-18741,-18735,  -18731,-18722,-18710,-18697,-18696,-18526,-18518,-18501,-18490,-18478,-18463,-18448,  -18447,-18446,-18239,-18237,-18231,-18220,-18211,-18201,-18184,-18183, -18181,-18012,  -17997,-17988,-17970,-17964,-17961,-17950,-17947,-17931,-17928,-17922,-17759,-17752,  -17733,-17730,-17721,-17703,-17701,-17697,-17692,-17683,-17676,-17496,-17487,-17482,  -17468,-17454,-17433,-17427,-17417,-17202,-17185,-16983,-16970,-16942,-16915,-16733,  -16708,-16706,-16689,-16664,-16657,-16647,-16474,-16470,-16465,-16459,-16452,-16448,  -16433,-16429,-16427,-16423,-16419,-16412,-16407,-16403,-16401,-16393,-16220,-16216,  -16212,-16205,-16202,-16187,-16180,-16171,-16169,-16158,-16155,-15959,-15958,-15944,  -15933,-15920,-15915,-15903,-15889,-15878,-15707,-15701,-15681,-15667,-15661,-15659,  -15652,-15640,-15631,-15625,-15454,-15448,-15436,-15435,-15419,-15416,-15408,-15394,  -15385,-15377,-15375,-15369,-15363,-15362,-15183,-15180,-15165,-15158,-15153,-15150,  -15149,-15144,-15143,-15141,-15140,-15139,-15128,-15121,-15119,-15117,-15110,-15109,  -14941,-14937,-14933,-14930,-14929,-14928,-14926,-14922,-14921,-14914,-14908,-14902,  -14894,-14889,-14882,-14873,-14871,-14857,-14678,-14674,-14670,-14668,-14663,-14654,  -14645,-14630,-14594,-14429,-14407,-14399,-14384,-14379,-14368,-14355,-14353,-14345,  -14170,-14159,-14151,-14149,-14145,-14140,-14137,-14135,-14125,-14123,-14122,-14112,  -14109,-14099,-14097,-14094,-14092,-14090,-14087,-14083,-13917,-13914,-13910,-13907,  -13906,-13905,-13896,-13894,-13878,-13870,-13859,-13847,-13831,-13658,-13611,-13601,  -13406,-13404,-13400,-13398,-13395,-13391,-13387,-13383,-13367,-13359,-13356,-13343,  -13340,-13329,-13326,-13318,-13147,-13138,-13120,-13107,-13096,-13095,-13091,-13076,  -13068,-13063,-13060,-12888,-12875,-12871,-12860,-12858,-12852,-12849,-12838,-12831,  -12829,-12812,-12802,-12607,-12597,-12594,-12585,-12556,-12359,-12346,-12320,-12300,  -12120,-12099,-12089,-12074,-12067,-12058,-12039,-11867,-11861,-11847,-11831,-11798,  -11781,-11604,-11589,-11536,-11358,-11340,-11339,-11324,-11303,-11097,-11077,-11067,  -11055,-11052,-11045,-11041,-11038,-11024,-11020,-11019,-11018,-11014,-10838,-10832,  -10815,-10800,-10790,-10780,-10764,-10587,-10544,-10533,-10519,-10331,-10329,-10328,  -10322,-10315,-10309,-10307,-10296,-10281,-10274,-10270,-10262,-10260,-10256,-10254  };    private static string[] pyName = new string[]  {  "A","Ai","An","Ang","Ao","Ba","Bai","Ban","Bang","Bao","Bei","Ben",  "Beng","Bi","Bian","Biao","Bie","Bin","Bing","Bo","Bu","Ba","Cai","Can",  "Cang","Cao","Ce","Ceng","Cha","Chai","Chan","Chang","Chao","Che","Chen","Cheng",  "Chi","Chong","Chou","Chu","Chuai","Chuan","Chuang","Chui","Chun","Chuo","Ci","Cong",  "Cou","Cu","Cuan","Cui","Cun","Cuo","Da","Dai","Dan","Dang","Dao","De",  "Deng","Di","Dian","Diao","Die","Ding","Diu","Dong","Dou","Du","Duan","Dui",  "Dun","Duo","E","En","Er","Fa","Fan","Fang","Fei","Fen","Feng","Fo",  "Fou","Fu","Ga","Gai","Gan","Gang","Gao","Ge","Gei","Gen","Geng","Gong",  "Gou","Gu","Gua","Guai","Guan","Guang","Gui","Gun","Guo","Ha","Hai","Han",  "Hang","Hao","He","Hei","Hen","Heng","Hong","Hou","Hu","Hua","Huai","Huan",  "Huang","Hui","Hun","Huo","Ji","Jia","Jian","Jiang","Jiao","Jie","Jin","Jing",  "Jiong","Jiu","Ju","Juan","Jue","Jun","Ka","Kai","Kan","Kang","Kao","Ke",  "Ken","Keng","Kong","Kou","Ku","Kua","Kuai","Kuan","Kuang","Kui","Kun","Kuo",  "La","Lai","Lan","Lang","Lao","Le","Lei","Leng","Li","Lia","Lian","Liang",  "Liao","Lie","Lin","Ling","Liu","Long","Lou","Lu","Lv","Luan","Lue","Lun",  "Luo","Ma","Mai","Man","Mang","Mao","Me","Mei","Men","Meng","Mi","Mian",  "Miao","Mie","Min","Ming","Miu","Mo","Mou","Mu","Na","Nai","Nan","Nang",  "Nao","Ne","Nei","Nen","Neng","Ni","Nian","Niang","Niao","Nie","Nin","Ning",  "Niu","Nong","Nu","Nv","Nuan","Nue","Nuo","O","Ou","Pa","Pai","Pan",  "Pang","Pao","Pei","Pen","Peng","Pi","Pian","Piao","Pie","Pin","Ping","Po",  "Pu","Qi","Qia","Qian","Qiang","Qiao","Qie","Qin","Qing","Qiong","Qiu","Qu",  "Quan","Que","Qun","Ran","Rang","Rao","Re","Ren","Reng","Ri","Rong","Rou",  "Ru","Ruan","Rui","Run","Ruo","Sa","Sai","San","Sang","Sao","Se","Sen",  "Seng","Sha","Shai","Shan","Shang","Shao","She","Shen","Sheng","Shi","Shou","Shu",  "Shua","Shuai","Shuan","Shuang","Shui","Shun","Shuo","Si","Song","Sou","Su","Suan",  "Sui","Sun","Suo","Ta","Tai","Tan","Tang","Tao","Te","Teng","Ti","Tian",  "Tiao","Tie","Ting","Tong","Tou","Tu","Tuan","Tui","Tun","Tuo","Wa","Wai",  "Wan","Wang","Wei","Wen","Weng","Wo","Wu","Xi","Xia","Xian","Xiang","Xiao",  "Xie","Xin","Xing","Xiong","Xiu","Xu","Xuan","Xue","Xun","Ya","Yan","Yang",  "Yao","Ye","Yi","Yin","Ying","Yo","Yong","You","Yu","Yuan","Yue","Yun",  "Za", "Zai","Zan","Zang","Zao","Ze","Zei","Zen","Zeng","Zha","Zhai","Zhan",  "Zhang","Zhao","Zhe","Zhen","Zheng","Zhi","Zhong","Zhou","Zhu","Zhua","Zhuai","Zhuan",  "Zhuang","Zhui","Zhun","Zhuo","Zi","Zong","Zou","Zu","Zuan","Zui","Zun","Zuo"  };    /// <summary>    /// 把汉字转换成拼音(全拼)    /// </summary>    /// <param name="hzString">汉字字符串</param>    /// <returns>转换后的拼音(全拼)字符串</returns>    public static string CharacterConvertString(string hzString)    {      // 匹配中文字符      Regex regex = new Regex("^[\u4e00-\u9fa5]$");      byte[] array = new byte[2];      string pyString = "";      int chrAsc = 0;      int i1 = 0;      int i2 = 0;      char[] noWChar = hzString.ToCharArray();      for (int j = 0; j < noWChar.Length; j++)      {        // 中文字符        if (regex.IsMatch(noWChar[j].ToString()))        {          array = System.Text.Encoding.Default.GetBytes(noWChar[j].ToString());          i1 = (short)(array[0]);          i2 = (short)(array[1]);          chrAsc = i1 * 256 + i2 - 65536;          if (chrAsc > 0 && chrAsc < 160)          {            pyString += noWChar[j];          }          else          {            // 修正部分文字            if (chrAsc == -9254) // 修正“圳”字            {              pyString += "Zhen";            }            else            {              for (int i = (pyValue.Length - 1); i >= 0; i--)              {                if (pyValue[i] <= chrAsc)                {                  pyString += pyName[i];                  break;                }              }            }          }        }        // 非中文字符        else        {          pyString += noWChar[j].ToString();        }      }      return pyString;    }    /// <summary>    /// 只转换每个汉字首字母(大写)    /// </summary>    /// <param name="strText"></param>    /// <returns></returns>    public static string GetChineseSpell(string strText)    {      int len = strText.Length;      string myStr = "";      for (int i = 0; i < len; i++)      {        myStr += getSpell(strText.Substring(i, 1));      }      return myStr;    }    /// <summary>    /// 获得第一个汉字的首字母(大写);    /// </summary>    /// <param name="cnChar"></param>    /// <returns></returns>    public static string getSpell(string cnChar)    {      byte[] arrCN = Encoding.Default.GetBytes(cnChar);      if (arrCN.Length > 1)      {        int area = (short)arrCN[0];        int pos = (short)arrCN[1];        int code = (area << 8) + pos;        int[] areacode = { 45217, 45253, 45761, 46318, 46826, 47010, 47297, 47614, 48119, 48119, 49062, 49324, 49896, 50371, 50614, 50622, 50906, 51387, 51446, 52218, 52698, 52698, 52698, 52980, 53689, 54481 };        for (int i = 0; i < 26; i++)        {          int max = 55290;          if (i != 25) max = areacode[i + 1];          if (areacode[i] <= code && code < max)          {            return Encoding.Default.GetString(new byte[] { (byte)(65 + i) });          }        }        return "*";      }      else return cnChar;    }  }

 

 

 //歌曲文本框事件    private void txtname_TextChanged(object sender, EventArgs e)    {      txtsong.Text=Song_ab.GetChineseSpell(txtname.Text);    }

 

 

003.保存代码

 

 //保存    public void Save()    {      string names = txtname.Text;//歌曲个数      int num = names.Length;      int id = SelectidByName();//歌手id      int sid = Convert.ToInt32(cbotype.SelectedValue);//歌曲类型      SqlConnection con = new SqlConnection(DBHelp.str);      string sql = "insert into song_info values('" + txtname.Text + "','" + txtsong.Text + "'," + num + "," + sid + "," + id + ",'" + txtsongname.Text + "',default)";      SqlCommand cmd = new SqlCommand(sql, con);      try      {        con.Open();        int count = cmd.ExecuteNonQuery();        if (count > 0)        {          File.Copy(fullName, Commod.DBphotourl + "\\" + this.txtsongname.Text, true);          MessageBox.Show("保存成功");        }        else        {          MessageBox.Show("保存失败");        }      }      catch (Exception)      {        MessageBox.Show("信息未完善"); ;      }      finally      {        con.Close();      }    }

 

04.查询歌曲

001.默认查询全部

 平凡的KTV后台,不平凡的KTV数据

 002.按地区查询

平凡的KTV后台,不平凡的KTV数据

003.歌曲模糊查询

平凡的KTV后台,不平凡的KTV数据

 

004.歌曲和类型同时查询

平凡的KTV后台,不平凡的KTV数据

005.判断查询的选择

 private void btnselect_Click(object sender, EventArgs e)    {      //判定用歌曲名或类型查询      if (txtname.Text != ""&&cbotype.Text=="请选择")      {        //歌曲名        string sql = @"select song_name,song_play_count,songtype_name              from song_type,song_info            where song_type.songtype_id=song_info.songtype_id and song_name like '%" + txtname.Text + "%'";        Selectsong(sql);      }      else if (txtname.Text=="")      {        //歌曲类型        string sql = @"select song_name,song_play_count,songtype_name              from song_type,song_info            where song_type.songtype_id=song_info.songtype_id and songtype_name like '%" + cbotype.Text + "%'";        Selectsong(sql);      }      else      {        //歌曲名        string sql = @"select song_name,song_play_count,songtype_name              from song_type,song_info            where song_type.songtype_id=song_info.songtype_id and song_name like '%" + txtname.Text +              "%' and songtype_name like '%" + cbotype.Text + "%'";        Selectsong(sql);      }        }    //修改    private void tsupdate_Click(object sender, EventArgs e)    {      string gname = dgvlist.SelectedRows[0].Cells[0].Value.ToString();      this.Hide();      FrmAdd frm = new FrmAdd();      frm.Text = "修改歌曲信息";      frm.gname = gname;      frm.Show();    }    //删除    private void tsdelete_Click(object sender, EventArgs e)    {      string names = dgvlist.SelectedRows[0].Cells[0].Value.ToString();      string sql = "delete song_info where song_name='"+names+"'";      Selectsong(sql);      string sql1 = @"select song_name,song_play_count,songtype_name              from song_type,song_info            where song_type.songtype_id=song_info.songtype_id";      Selectsong(sql1);    }

 

 05.右键修改窗体以及删除歌曲套上及时刷新数据

平凡的KTV后台,不平凡的KTV数据

  //修改    public void Update()    {      int songid=Convert.ToInt32(cbotype.SelectedValue);      int num=txtname.Text.Length;      SqlConnection con = new SqlConnection(DBHelp.str);      //song_id, song_name, song_ab, song_word_count, songtype_id, singer_id, song_url, song_play_count      string sql = @"update song_info set song_name='" + txtname.Text + "',song_ab='" + txtsong.Text +           "',singer_id=" + fid + ",songtype_id=" + songid + ",song_url='"+txtsongname.Text+           "',song_word_count=" + num + " where song_name='" + gname + "'";      SqlCommand cmd = new SqlCommand(sql,con);      try      {        con.Open();        int count = cmd.ExecuteNonQuery();        if (count > 0)        {          File.Copy(fullName, Commod.DBphotourl + "\\" + this.txtsongname.Text, true);          MessageBox.Show("修改成功");        }      }      catch (Exception)      {        MessageBox.Show("加载失败"); ;      }      finally      {        con.Close();      }    }

 

  06.设置资源路径

001.歌曲路径

平凡的KTV后台,不平凡的KTV数据

0001. 浏览

 private void btnview_Click(object sender, EventArgs e)    {      //浏览      if (this.fbdlist.ShowDialog() == DialogResult.OK)      {        this.txtnewurl.Text = this.fbdlist.SelectedPath;      }    }

 

 0002.保存

  //更新歌曲路径    private void btnsave_Click(object sender, EventArgs e)    {       if (txtnewurl.Text!="")      {        if (Commod.DBphotourl!="")        {        // 将原路径下的文件复制到新路径下                      string[] files = Directory.GetFiles(Commod.DBphotourl);                      string fileName = ""; // 文件名(不含路径)        string dest = "";  // 目标文件名(含路径)        foreach (string source in files)        {          fileName = Path.GetFileName(source);          dest = this.txtnewurl.Text.Trim() + "\\" + fileName;          File.Copy(source, dest,true);        }        }        SqlConnection con = new SqlConnection(DBHelp.str);        string sql = "update resource_path set resource_path = '" + txtnewurl.Text + "\\" + "' where resource_id=2";        con.Open();        SqlCommand cmd = new SqlCommand(sql, con);        int count = cmd.ExecuteNonQuery();        if (count > 0)        {          //// 删除原目录中的文件          if (Commod.DBphotourl != "")          {            Directory.Delete(Commod.DBphotourl, true);          }          MessageBox.Show("更新歌曲路径成功");        }        con.Close();        }      else      {        MessageBox.Show("新路径空了!");      }              }

 

003.原路径以及数据

平凡的KTV后台,不平凡的KTV数据

 

 004.设置新路径

平凡的KTV后台,不平凡的KTV数据

 

005.修改成功的路径以及数据

平凡的KTV后台,不平凡的KTV数据

平凡的KTV后台,不平凡的KTV数据

 

  003.原路径以及数据被删除

 平凡的KTV后台,不平凡的KTV数据

   

       好了,MyKTV项目总算是完成了,后台主要就管理ktv项目的数据,所以它的作用也就不言而喻了,如果觉得不足可以给我建议,我相信我们都会不完美;

就像有人说的那样:“这个项目有很多人都在写,都要被写烂了”!但是我觉得学习的东西不在于多而在于精,如果你们能多认真点去浏览,我想你会学到很多你所不知道的东西的。




原标题:平凡的KTV后台,不平凡的KTV数据

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

vova政策:https://www.goluckyvip.com/tag/27088.html
vova支付:https://www.goluckyvip.com/tag/27089.html
霸权主义:https://www.goluckyvip.com/tag/2709.html
Voyager:https://www.goluckyvip.com/tag/27091.html
V preca:https://www.goluckyvip.com/tag/27092.html
Vrai & Oro:https://www.goluckyvip.com/tag/27094.html
十月北方旅游最佳去处?:https://www.vstour.cn/a/365184.html
缅甸电子签证口岸 缅甸电子签证在线申请:https://www.vstour.cn/a/365185.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流