本文基于ASP.NET制作大学生就业咨询系统,包括增删改查以及部分前端设计(首先需要确保你的SQLserver登陆服务是开启的)。数据库截图我放在最后
运行效果图
一、MyDataTools工具类(最后展示完整代码)
(一)工具类简介
MyDataTools涵盖大部分我在开发中会使用到的函数,包括读取数据库读取到的字段填充到下拉框、将查询到的数据库信息填充到表格、连接数据库、增删改信息返回。注意此工具类是在解决方案处右键新建的cs文件。
(二)函数展示
1.将VS2019与数据库连接起来并且能够读取sql语句
static string cnstr = "server=张; database=答辩作业; uid=sa;pwd=030217;";
SqlConnection cn = new SqlConnection(cnstr);
public MyDataTools()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public DataTable getTable(string sql)
{
cn.Open();
DataSet ds = new DataSet(); //内存数据库,保在存放多个查询结果视图
SqlDataAdapter dap = new SqlDataAdapter(sql, cn);
dap.Fill(ds, "t"); //把CN连接的数据库的SQL查询结果填充到dataset中,取名为t
DataTable T = ds.Tables["t"];
cn.Close();
return T;
}
2.将sql语句查询到的数据库结果填充到table控件当中
通过循环读取查询到的数据库表的将其插入到table控件
public void Mydisp1(DataTable T, Table Table1)// 把数据库查询结果T,展示到前端表格Table1
{
// 向前台展示所有数据列 ,把查询结果显示在一个动态table(table1)对象中
//先输出表头
int col = T.Columns.Count;
//生成表头行
TableRow tr0 = new TableRow();
for (int j = 0; j < col; j++)
{
TableCell td0 = new TableCell();
td0.Text = T.Columns[j].Caption;//取列名字段名
tr0.Cells.Add(td0);
}
Table1.Rows.Add(tr0);
//生成行对象,通用为多行
for (int i = 0; i < T.Rows.Count; i++)
{
TableRow tr = new TableRow();
for (int j = 0; j < col; j++)
{
TableCell td = new TableCell();
td.Text = T.Rows[i][j].ToString().Trim();
tr.Cells.Add(td);
}
Table1.Rows.Add(tr);
}
}
public void Mydisp2(string sql, Table Table1)// 把数据库查询结果T,展示到前端表格Table1
{
DataTable T = getTable(sql);
// 向前台展示所有数据列 ,把查询结果显示在一个动态table(table1)对象中
//先输出表头
int col = T.Columns.Count;
//生成表头行
TableRow tr0 = new TableRow();
for (int j = 0; j < col; j++)
{
TableCell td0 = new TableCell();
td0.Text = T.Columns[j].Caption;//取列名字段名
tr0.Cells.Add(td0);
}
Table1.Rows.Add(tr0);
//生成行对象,通用为多行
for (int i = 0; i < T.Rows.Count; i++)
{
TableRow tr = new TableRow();
for (int j = 0; j < col; j++)
{
TableCell td = new TableCell();
td.Text = T.Rows[i][j].ToString().Trim();
//td.BackColor = System.Drawing.Color.FromArgb(120, 0, 0);
tr.Cells.Add(td);
}
Table1.Rows.Add(tr);
}
}
3.读取查询到的数据库字段然后填充到下拉框控件当中
public void fillList(string sqlstr, DropDownList List1)
{//把sql的查询结果填充到下拉框内
DataTable t = new MyDataTools().getTable(sqlstr);
List1.DataSource = t;
List1.DataTextField = "keyName";
List1.DataValueField = "keyValue";
List1.DataBind();
}
4.返回增删改是否成功
public int MynoQuery(string sql)//除查询外都可以用这种
{
int re = -1;
cn.Open();
SqlCommand cmd = new SqlCommand(sql, cn);
re = cmd.ExecuteNonQuery();//操作成功并返回被操作的行号
cn.Close();
return re;
}
(三)完整代码展示(注意using部分的引用)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI.WebControls;// 网页前端界面中UI控件支持
using System.Reflection;
/// <summary>
/// MyDataTools 的摘要说明
/// </summary>
public class MyDataTools
{
static string cnstr = "server=张; database=答辩作业; uid=sa;pwd=030217;";
SqlConnection cn = new SqlConnection(cnstr);
public MyDataTools()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public DataTable getTable(string sql)
{
cn.Open();
DataSet ds = new DataSet(); //内存数据库,保在存放多个查询结果视图
SqlDataAdapter dap = new SqlDataAdapter(sql, cn);
dap.Fill(ds, "t"); //把CN连接的数据库的SQL查询结果填充到dataset中,取名为t
DataTable T = ds.Tables["t"];
cn.Close();
return T;
}
public void Mydisp1(DataTable T, Table Table1)// 把数据库查询结果T,展示到前端表格Table1
{
// 向前台展示所有数据列 ,把查询结果显示在一个动态table(table1)对象中
//先输出表头
int col = T.Columns.Count;
//生成表头行
TableRow tr0 = new TableRow();
for (int j = 0; j < col; j++)
{
TableCell td0 = new TableCell();
td0.Text = T.Columns[j].Caption;//取列名字段名
tr0.Cells.Add(td0);
}
Table1.Rows.Add(tr0);
//生成行对象,通用为多行
for (int i = 0; i < T.Rows.Count; i++)
{
TableRow tr = new TableRow();
for (int j = 0; j < col; j++)
{
TableCell td = new TableCell();
td.Text = T.Rows[i][j].ToString().Trim();
tr.Cells.Add(td);
}
Table1.Rows.Add(tr);
}
}
public void Mydisp2(string sql, Table Table1)// 把数据库查询结果T,展示到前端表格Table1
{
DataTable T = getTable(sql);
// 向前台展示所有数据列 ,把查询结果显示在一个动态table(table1)对象中
//先输出表头
int col = T.Columns.Count;
//生成表头行
TableRow tr0 = new TableRow();
for (int j = 0; j < col; j++)
{
TableCell td0 = new TableCell();
td0.Text = T.Columns[j].Caption;//取列名字段名
tr0.Cells.Add(td0);
}
Table1.Rows.Add(tr0);
//生成行对象,通用为多行
for (int i = 0; i < T.Rows.Count; i++)
{
TableRow tr = new TableRow();
for (int j = 0; j < col; j++)
{
TableCell td = new TableCell();
td.Text = T.Rows[i][j].ToString().Trim();
//td.BackColor = System.Drawing.Color.FromArgb(120, 0, 0);
tr.Cells.Add(td);
}
Table1.Rows.Add(tr);
}
}
public void fillList(string sqlstr, DropDownList List1)
{//把sql的查询结果填充到下拉框内
DataTable t = new MyDataTools().getTable(sqlstr);
List1.DataSource = t;
List1.DataTextField = "keyName";
List1.DataValueField = "keyValue";
List1.DataBind();
}
public int MynoQuery(string sql)//除查询外都可以用这种
{
int re = -1;
cn.Open();
SqlCommand cmd = new SqlCommand(sql, cn);
re = cmd.ExecuteNonQuery();//操作成功并返回被操作的行号
cn.Close();
return re;
}
}
二、登陆界面设计
(一)前端设计
注意事项
顶行需要时你自己建立的网页名称,不要照搬俺的!会报错、会报错、会报错
style当中使用控件将你创建的按钮以及textbox放在网页中间(没有这个玩意就会放在网页左上角),背景图需要你自己右边创建文件夹放入背景图,并且填入正确的地址(实在设置不好你就别搞背景图好了)
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="login.aspx.cs" Inherits="JYXQ.login" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<style type="text/css">
.auto-style1 {
height: 31px;
}
.login-wrapper {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh; /* 设置最小高度以适应内容 */
}
.login-container {
position:center;
transform: translate(8%, 0%);
width: 40%; /* 控件宽度 */
max-width: 1000px; /* 最大宽度 */
padding: 5px;
background-color: #E8E9CB;
}
body {
background-image:url(../assets/images/DL.jpg);
background-size:cover;
}
</style>
</head>
<body style="align-content:center" >
<form id="form1" runat="server">
<div class="login-wrapper">
<div style="align-content:center" class="login-container">
<table style="border:double;text-align:center;font-size:large;background-color:antiquewhite;width:100%"/>
<tr>
<td colspan="2">用户登录</td><td></td>
</tr>
<tr>
<td class="auto-style1">用户名:</td><td class="auto-style1">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td class="auto-style1">密码:</td><td class="auto-style1">
<asp:TextBox ID="TextBox2" runat="server" TextMode="Password"></asp:TextBox>
</td>
</tr>
<tr><td colspan="2">
<br />
<asp:Button ID="Button1" runat="server" Text="登录" OnClick="Button1_Click" Font-Size="Large"/>
<asp:Button ID="Button2" runat="server" Text="注册" OnClick="Button2_Click" Font-Size="Large"/>
</td></tr>
</div>
</div>
</form>
</body>
</html>
(二)后端设计
注意事项
你的SQL命令别拼写错误,怕自己拼写错误的先放在SQLserver里面看能不能运行,或者你用response.write()函数检验,最下面的STmessage.aspx以及STadd.aspx都是需要跳转的下一个网页的网页名(你自己命名的别用我的),另外跳转到STmessage的时候携带学生的id不要看不懂,方便下一个页面读取到你的登录的id识别你。发现函数报错记得看看using是不是都引用上了。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI.WebControls;// 网页前端界面中UI控件支持
using System.Reflection;
namespace JYXQ
{
public partial class login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
string xh = TextBox1.Text.Trim();
string mm = TextBox2.Text.Trim();
string sqlstr = "select *from 毕业生基础信息表 where 学生ID='" + xh + "'";
//ID不对跳转注册;ID对密码不对,重输密码;ID密码对,转到软件主页
DataTable T = new MyDataTools().getTable(sqlstr);
if (T.Rows.Count == 0)
{
Response.Write("<script>alert('未存在该用户!请注册账户后重试')</script>");
}
else
if (T.Rows[0]["密码"].ToString().Trim() == mm)
{
Session["username"] = T.Rows[0]["姓名"].ToString().Trim();
Response.Redirect("STmessage.aspx?id=" + xh);//转到软件主页`
}
else//ID对密码不对
{
Response.Write("<script>alert('密码错误!')</script>");
TextBox2.Text = "";
TextBox2.Focus();//清空密码,将光标焦点移到密码
}
}
protected void Button2_Click(object sender, EventArgs e)
{
Response.Redirect("STadd.aspx");
}
}
}
(三)运行效果图
三、学生添加界面
(一)前端设计
注意事项
这里的mouth控件绑定了后端的一个函数(因为闰年的2月日期不一样,所以这个复选框会改变)
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="STadd.aspx.cs" Inherits="JYXQ.STadd" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<style type="text/css">
.login-wrapper {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh; /* 设置最小高度以适应内容 */
}
.login-container {
position: relative;
transform: translate(8.5%, 0%);
width: 100%; /* 控件宽度 */
max-width: 400px; /* 最大宽度 */
padding: 20px;
background-color: #E8E9CB;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);
}
body {
background-image:url(../assets/images/DL.jpg);
background-size:cover;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div class="login-wrapper">
<div class="login-container">
添加学生信息:<br />
<br />
学生ID: <asp:TextBox ID="ID" runat="server"></asp:TextBox>
<br />
<br />
学生姓名: <asp:TextBox ID="xm" runat="server"></asp:TextBox>
<br />
<br />
专业信息: <asp:DropDownList ID="zy" runat="server">
</asp:DropDownList>
<br />
<br />
毕业年份:
<asp:DropDownList ID="year" runat="server">
</asp:DropDownList>
年
<asp:DropDownList ID="month" runat="server" AutoPostBack="true" OnSelectedIndexChanged="month_SelectedIndexChanged">
</asp:DropDownList>
日:<asp:DropDownList ID="day" runat="server">
</asp:DropDownList>
<br />
<br />
毕业生所在地: <asp:DropDownList ID="DropDownList1" runat="server">
</asp:DropDownList>
<br />
<br />
设置登陆密码:
<asp:TextBox ID="mm" runat="server" TextMode="Password"></asp:TextBox>
<br />
<br />
<br />
<asp:Button ID="Button1" runat="server" Text="确认添加" OnClick="Button1_Click" Font-Size="Large" />
<asp:Button ID="Button2" runat="server" Text="返回登陆" Font-Size="Large" OnClick="Button2_Click"/>
</div>
</div>
</form>
</body>
</html>
(二)后端设计
注意事项
日期的函数是和前端mouth控件绑定的那个函数一样的,别乱设计。并且初始化函数中if(!IsPostBack)只要有下拉框就是一定要将下拉框填充放在里面的,不然你选一个按按钮直接就刷新成第一个了。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI.WebControls;// 网页前端界面中UI控件支持
using System.Reflection;
using System.Text.RegularExpressions;
namespace JYXQ
{
public partial class STadd : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
int y = DateTime.Now.Year;//取出今天的年份存入y
for (int i = y; i >= y - 30; i--)
{
year.Items.Add(i.ToString());//在year控件当中加入倒退30年的年份,用tostring转换为字符串
}
for (int j = 12; j >= 1; j--)
{
month.Items.Add(j.ToString());//复选框中加入month的十二个月
}
string sql1 = "select 地区名称 as keyName,地区名称 as keyValue from 地区信息表";
new MyDataTools().fillList(sql1, DropDownList1);
string sql2 = "select 专业名称 as keyName,专业名称 as keyValue from 学生专业信息表";
new MyDataTools().fillList(sql2, zy);
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string id = ID.Text.Trim();
string xm0 = xm.Text.Trim();
string zy0 = zy.Text.Trim();
string year0 = year.SelectedValue.Trim();
string month0 = month.SelectedValue.Trim();
string day0 = day.SelectedValue.Trim();
string dq0 = DropDownList1.SelectedValue.Trim();
string mm0 = mm.Text.Trim();
PasswordValidator validator = new PasswordValidator();
bool isStrong = validator.IsPasswordStrong(mm0);
if (isStrong)
{
string sql = "insert into 毕业生基础信息表 values (" + id + ",'" + xm0 + "','" + zy0 + "','" + year0 + "." + month0 + "." + day0 + "','" + mm0 + "','" + dq0 + "')";
//Response.Write(sql);
int flag = new MyDataTools().MynoQuery(sql);
if (flag > 0)
{
Response.Write("<script>alert('注册成功!')</script>");
}
}
else
{
Response.Write("<script>alert('密码强度过低,请输入8字符以上且至少包含大小写字母以及一个数字!')</script>");
}
}
protected void month_SelectedIndexChanged(object sender, EventArgs e)
{
int y = int.Parse(year.SelectedValue);//int输入的需要int转换
int m = int.Parse(month.SelectedValue);
int day0 = 31;//默认为大月天数
if (m == 4 || m == 6 || m == 9 || m == 11)
day0 = 30;//4、6、9、11月不会随年份变化而变化可以直接设置
if (m == 2)
{
if (m == 2 && (y % 400 == 0) || (y % 4 == 0 && y % 100 != 0))//闰年的判断,如果是闰年则2月的日期需要改为29天
day0 = 29;
else day0 = 28;//不是闰年则为28天
}
day.Items.Clear();//清空形成的复选框内的内容,避免造成出现2*20个年份或者2*12个月份的情况
for (int i = 1; i <= day0; i++)
day.Items.Add(i.ToString());//将经过是否闰年判断的日期填入日期的复选框
}
protected void Button2_Click(object sender, EventArgs e)
{
Response.Redirect("login.aspx");
}
public class PasswordValidator
{
public bool IsPasswordStrong(string password)
{
// 定义密码强度规则:包含至少8个字符,至少一个大写字母、一个小写字母和一个数字
string pattern = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d).{8,}$";
// 使用正则表达式进行匹配
Match match = Regex.Match(password, pattern);
// 返回匹配结果
return match.Success;
}
}
}
}
(三)运行效果图
四、信息查询和展示界面
(一)前端设计
注意事项
建立RadioButton控件之后你别忘记把这几个控件放在同一个组当中,还有table控件,是展示信息的关键。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="STmessage.aspx.cs" Inherits="JYXQ.STmessage" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<style type="text/css">
.login-wrapper {
display: flex;
justify-content: center;
align-items: center;
min-height: 90vh; /* 设置最小高度以适应内容 */
}
.login-container {
position: relative;
transform: translate(8.5%, 0%);
width: 100%; /* 控件宽度 */
max-width: 600px; /* 最大宽度 */
padding: 20px;
background-color:#E8E9CB;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);
}
body {
background-image:url(../assets/images/DL.jpg);
background-size:cover;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div class="login-wrapper">
<div class="login-container">
学生信息展示<br />
<br />
<asp:Table ID="Table1" runat="server" Width="99%" BorderWidth="1px" GridLines="Both">
</asp:Table>
<p>
请选择你想要查询的内容</p>
<p>
</p>
<p>
<asp:RadioButton ID="nf" runat="server" GroupName="zp"/>
各年份招聘信息</p>
<p>
<asp:RadioButton ID="dq" runat="server" GroupName="zp"/>
各地区招聘信息</p>
<p>
<asp:RadioButton ID="zy" runat="server" GroupName="zp"/>
各专业招聘信息</p>
<p>
<asp:RadioButton ID="xg" runat="server" GroupName="zp"/>
修改学生信息</p>
<p>
</p>
<p>
<asp:Button ID="Button1" runat="server" Text="查询" OnClick="Button1_Click" />
<asp:Button ID="Button2" runat="server" Text="返回登录窗口" OnClick="Button2_Click" />
</p>
</div>
</div>
</form>
<p>
</p>
</body>
</html>
(二)后端设计
注意事项
这里接收的id是从一开始你的登录界面传输过来的,可不是什么乱来的,你自己做的时候别一上来就是id,先看看你传输的时候是传输的什么字符。其次如果是引用的函数缺失的话首先你看看你的using有没有引用完全,再看看你的工具类里面的函数有没有写错。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI.WebControls;// 网页前端界面中UI控件支持
using System.Reflection;
namespace JYXQ
{
public partial class STmessage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string xh = Request.QueryString["id"].Trim();
string sql = "select * from 毕业生基础信息表 where 学生ID='" + xh + "'";
MyDataTools Ob = new MyDataTools();
DataTable T = Ob.getTable(sql);
Ob.Mydisp1(T, Table1);
}
protected void Button1_Click(object sender, EventArgs e)
{
string xh = Request.QueryString["id"].Trim();
if (nf.Checked == true)
{
Response.Redirect("NFmessage.aspx?id=" + xh);
}
if(dq.Checked == true)
{
Response.Redirect("DQmessage.aspx?id=" + xh);
}
if (zy.Checked == true)
{
Response.Redirect("ZYmessage.aspx?id=" + xh);
}
if (xg.Checked == true)
{
Response.Redirect("STupdate.aspx?id=" + xh);
}
}
protected void Button2_Click(object sender, EventArgs e)
{
Response.Redirect("login.aspx");
}
}
}
(三)运行效果图
五、查询之后的信息展示
(一)前端设计
注意事项
查询页面一共有三个,但是三个都一样的无非是修改一下sql语句
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DQmessage.aspx.cs" Inherits="JYXQ.DQmessage" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<style type="text/css">
.login-wrapper {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh; /* 设置最小高度以适应内容 */
}
.login-container {
position: relative;
transform: translate(10%, 0%);
width: 100%; /* 控件宽度 */
max-width: 600px; /* 最大宽度 */
padding: 20px;
background-color: #E8E9CB;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);
}
body {
background-image:url(../assets/images/DL.jpg);
background-size:cover;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div class="login-wrapper">
<div class="login-container">
<asp:Table ID="Table1" runat="server" Width="99%" BorderWidth="1px" GridLines="Both">
</asp:Table>
<p>
请选择生源地:<asp:DropDownList ID="dq" runat="server">
</asp:DropDownList>
</p>
<p>
共计招聘:<asp:TextBox ID="tj" runat="server" Width="72px"></asp:TextBox>
人</p>
<p>
<asp:Button ID="Button1" runat="server" Text="查询" OnClick="Button1_Click" />
<asp:Button ID="Button2" runat="server" Text="返回主页" OnClick="Button2_Click" />
</p>
</div>
</div>
</form>
</body>
</html>
(二)后端设计
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI.WebControls;// 网页前端界面中UI控件支持
using System.Reflection;
namespace JYXQ
{
public partial class DQmessage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
string sql1 = "select 地区名称 as keyName,地区名称 as keyValue from 地区信息表";
new MyDataTools().fillList(sql1, dq);
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string dq0 = dq.SelectedValue.Trim();
string sql0 = "select*from 需求信息表 where 需求地区='" + dq0 + "'";
new MyDataTools().Mydisp2(sql0, Table1);
string sql1 = "select count(*) as 人数 from 需求信息表 where 需求地区='"+dq0+"'";
DataTable t = new MyDataTools().getTable(sql1);
tj.Text= t.Rows[0]["人数"].ToString().Trim();
}
protected void Button2_Click(object sender, EventArgs e)
{
string xh = Request.QueryString["id"].Trim();
Response.Redirect("STmessage.aspx?id="+xh);
}
}
}
(三)运行效果图
六、学生信息修改和删除
(一)前端设计
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="STupdate.aspx.cs" Inherits="JYXQ.STupdate" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<style type="text/css">
.login-wrapper {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh; /* 设置最小高度以适应内容 */
}
.login-container {
position: relative;
transform: translate(10%, 0%);
width: 100%; /* 控件宽度 */
max-width: 600px; /* 最大宽度 */
padding: 20px;
background-color: #E8E9CB;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);
}
body {
background-image:url(../assets/images/DL.jpg);
background-size:cover;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div class="login-wrapper">
<div class="login-container">
学生信息修改<br />
<br />
学生ID:
<asp:TextBox ID="id" runat="server" ReadOnly="true"></asp:TextBox>
<br />
<br />
姓名:
<asp:TextBox ID="xm" runat="server"></asp:TextBox>
<br />
<br />
专业信息:
<asp:TextBox ID="zy" runat="server"></asp:TextBox>
<asp:DropDownList ID="DropDownList1" runat="server">
</asp:DropDownList>
(修改)<br />
<br />
毕业年份:
<asp:TextBox ID="nf" runat="server"></asp:TextBox>
<asp:DropDownList ID="year" runat="server">
</asp:DropDownList>
年
<asp:DropDownList ID="month" runat="server" AutoPostBack="true" OnSelectedIndexChanged="month_SelectedIndexChanged">
</asp:DropDownList>
月
<asp:DropDownList ID="day" runat="server">
</asp:DropDownList>
日(修改)<br />
<br />
密码:
<asp:TextBox ID="mm" runat="server"></asp:TextBox>
<br />
<br />
生源地:
<asp:TextBox ID="syd" runat="server"></asp:TextBox>
<asp:DropDownList ID="DropDownList2" runat="server">
</asp:DropDownList>
(修改)<br />
<br />
<asp:Button ID="Button3" runat="server" Text="刷新" OnClick="Button3_Click" />
<asp:Button ID="Button1" runat="server" Text="修改信息" OnClick="Button1_Click" />
<asp:Button ID="Button2" runat="server" Text="删除该学生" OnClick="Button2_Click" />
<asp:Button ID="Button4" runat="server" Text="返回主页" OnClick="Button4_Click" />
</div>
</div>
</form>
</body>
</html>
(二)后端设计
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI.WebControls;// 网页前端界面中UI控件支持
using System.Reflection;
using System.Text.RegularExpressions;
namespace JYXQ
{
public partial class STupdate : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string xh = Request.QueryString["id"].Trim();
string sqlstr = "select*from 毕业生基础信息表 where 学生ID='" + xh + "'";
DataTable t = new MyDataTools().getTable(sqlstr);
id.Text = t.Rows[0]["学生ID"].ToString().Trim();
xm.Text = t.Rows[0]["姓名"].ToString().Trim();
zy.Text = t.Rows[0]["专业信息"].ToString().Trim();
nf.Text = t.Rows[0]["毕业年份"].ToString().Trim();
mm.Text = t.Rows[0]["密码"].ToString().Trim();
syd.Text = t.Rows[0]["生源地"].ToString().Trim();
string sql1 = "select 专业名称 as keyName,专业名称 as keyValue from 学生专业信息表";
new MyDataTools().fillList(sql1, DropDownList1);
string sql2 = "select 地区名称 as keyName,地区名称 as keyValue from 地区信息表";
new MyDataTools().fillList(sql2, DropDownList2);
int y = DateTime.Now.Year;//取出今天的年份存入y
for (int i = y; i >= y - 30; i--)
{
year.Items.Add(i.ToString());//在year控件当中加入倒退30年的年份,用tostring转换为字符串
}
for (int j = 12; j >= 1; j--)
{
month.Items.Add(j.ToString());//复选框中加入month的十二个月
}
}
}
protected void Button2_Click(object sender, EventArgs e)
{
string xh = Request.QueryString["id"].Trim();
string sql = "delete from 毕业生基础信息表 where 学生ID='"+xh+"'";
int flag = new MyDataTools().MynoQuery(sql);
if (flag > 0)
{
Response.Write("<script>alert('删除成功')</script>");
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string id0 = id.Text.Trim();
string xm0 = xm.Text.Trim();
string zy0 = DropDownList1.SelectedValue.Trim();
string mm0 = mm.Text.Trim();
string syd0 = DropDownList2.Text.Trim();
string year0 = year.SelectedValue.Trim();
string month0 = month.SelectedValue.Trim();
string day0 = day.SelectedValue.Trim();
PasswordValidator validator = new PasswordValidator();
bool isStrong = validator.IsPasswordStrong(mm0);
if (isStrong)
{
string sql = "update 毕业生基础信息表 set 姓名='" + xm0 + "',专业信息='" + zy0 + "',毕业年份='" + year0 + "." + month0 + "." + day0 + "',密码='" + mm0 + "',生源地='" + syd0 + "' where 学生ID='" + id0 + "'";
int flag = new MyDataTools().MynoQuery(sql);
if (flag > 0)
{
Response.Write("<script>alert('修改成功')</script>");
}
}
else
{
Response.Write("<script>alert('密码强度过低,请输入8字符以上且至少包含大小写字母以及一个数字!')</script>");
}
}
protected void month_SelectedIndexChanged(object sender, EventArgs e)
{
int y = int.Parse(year.SelectedValue);//int输入的需要int转换
int m = int.Parse(month.SelectedValue);
int day0 = 31;//默认为大月天数
if (m == 4 || m == 6 || m == 9 || m == 11)
day0 = 30;//4、6、9、11月不会随年份变化而变化可以直接设置
if (m == 2)
{
if (m == 2 && (y % 400 == 0) || (y % 4 == 0 && y % 100 != 0))//闰年的判断,如果是闰年则2月的日期需要改为29天
day0 = 29;
else day0 = 28;//不是闰年则为28天
}
day.Items.Clear();//清空形成的复选框内的内容,避免造成出现2*20个年份或者2*12个月份的情况
for (int i = 1; i <= day0; i++)
day.Items.Add(i.ToString());//将经过是否闰年判断的日期填入日期的复选框
}
protected void Button3_Click(object sender, EventArgs e)
{
string xh = Request.QueryString["id"].Trim();
string sqlstr = "select*from 毕业生基础信息表 where 学生ID='" + xh + "'";
DataTable t = new MyDataTools().getTable(sqlstr);
id.Text = t.Rows[0]["学生ID"].ToString().Trim();
xm.Text = t.Rows[0]["姓名"].ToString().Trim();
zy.Text = t.Rows[0]["专业信息"].ToString().Trim();
nf.Text = t.Rows[0]["毕业年份"].ToString().Trim();
mm.Text = t.Rows[0]["密码"].ToString().Trim();
syd.Text = t.Rows[0]["生源地"].ToString().Trim();
}
protected void Button4_Click(object sender, EventArgs e)
{
string xh = Request.QueryString["id"].Trim();
Response.Redirect("STmessage.aspx?id="+xh);
}
public class PasswordValidator
{
public bool IsPasswordStrong(string password)
{
// 定义密码强度规则:包含至少8个字符,至少一个大写字母、一个小写字母和一个数字
string pattern = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d).{8,}$";
// 使用正则表达式进行匹配
Match match = Regex.Match(password, pattern);
// 返回匹配结果
return match.Success;
}
}
}
}