一、用户管理页面
1.窗体间数据传输
一、用户管理页面(Frmmain.cs)
- 用户管理:工具箱——菜单和工具栏——MenuStrip(有二级目录)
- 显示当前登录用户|登陆时间|系统时间:StatusStrip(同上)
- 登陆时间(静态):双击空白处进入代码区
private void Frmmain_Load(object sender, EventArgs e)
{
this.sllogintime.Text = DateTime.Now.ToString(); //静态时间显示;将前面内容转换成字符串
timer1.Enabled = true;
}
- 系统时间(动态):
组件——timer控件——属性
闪电logo(事件):双击,进入
private void timer1_Tick(object sender, EventArgs e)
{
this.slsystemtime.Text = DateTime.Now.ToString(); //动态时间,每秒触发 1000ms
}
- 跨页面数据传输信息
- 登录文本框内容——放入 用户管理页面( FORM1传给Frmmain页面)
Form1页面:在Frmmain()中添加:txtusername.Text——Frmmain上右键——转到定义
else if(user.logininfofind(txtusername.Text,txtpassward.Text,comflag.Text)==1) //调用logininfofind验证身份是否正确或存在
{
Frmmain frn = new Frmmain(txtusername.Text); //int a=new 用drmmian定义了frn 分配了构造函数new frmmain 类名和构造函数名相同
// 类是用户自定义的 功能比结构体和联合体强大 可以包含方法函数
frn.Show(); //无参函数 显示窗体
this.Hide(); //对象指针 指向当前操作对象form1 hide隐藏
}
- frmmain页面:
Frmmain添加赋值 sname = username;—— Frmmain_Load添加调用:this.slusername.Text = sname; ——class下 添加全局变量名字string sname;
public partial class Frmmain : Form
{
string sname; //++增加全局变量名字 从FORM1传递的
public Frmmain(string username)
{
InitializeComponent();
sname = username; //当前登录的用户名,局部变量 //++赋值FORM1名字
}
private void Frmmain_Load(object sender, EventArgs e)
{
this.sllogintime.Text = DateTime.Now.ToString(); //静态时间显示;将前面内容转换成字符串
timer1.Enabled = true;
this.slusername.Text = sname; //++调用FORM1名字
}

2. 新建用户界面
1. 窗口设计 :新建Frmnewuser.cs窗体
- 1.窗体text值+icon图标;
2.label的text改变;
3.textbox+combobox表格;
4.清空:button1;text,name:btclear
取消:button2;text,name:btch
确定:button3;text,name:btok;
5.txtusername/txtuserpwd/tetuserpwd2/?;(用户名、密码、重复密码、身份)
items:结合 普通用户+管理员;
Windowsstate :设置窗口最大化
2. 代码
- Frmnewuser中:
//清空按钮
private void btclear_Click(object sender, EventArgs e)
{
txtusername.Text = "";
txtuserpwd.Text = "";
txtuserpwd2.Text = "";
comid.Text = "";
}
//取消按钮 Application.Exit();会直接退出界面 用this.Hide();当前隐藏
private void btch_Click(object sender, EventArgs e)
{
this.Hide();
}
- Classuser.cs类中(在Frmnewuser中newuser上右键转到定义)
//数据库连接放在开始,方便引用
SqlConnection con = null; //数据库连接
SqlCommand cmd = null; //执行sql操作
SqlDataReader qlddr = null; //sql执行结果存放缓冲区域
#region //新建用户的方法,对用户信息表的插入操作 insert
public int newuser(string un, string up, string up2, int uid) //返回值username userpasswd userid userflag
{
int flag = 0; //初始行数为0,操作成功为1,只插入1行
try
{
string s = "insert into Table_user values('" + un + "','" + up + "','" + up2 + "','" + uid + "')";
getsql gc = new getsql(); //数据库连接
con = gc.getcon();
cmd = new SqlCommand(s, con);
flag=cmd.ExecuteNonQuery(); //返回受影响的行数
return flag;
}
catch (Exception ee)
{
MessageBox.Show(ee.ToString());
return flag;
}
}
#endregion
- Frmnewuser中:
//确定按钮
private void btok_Click(object sender, EventArgs e)
{
Classuser user=new Classuser();
if(txtusername.Text == "") //判断用户名是否为空
{
MessageBox.Show("请输入用户名!", "ERROR", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
return;
}
else if(txtuserpwd.Text == "") //判断密码是否为空
{
MessageBox.Show("请输入密码!", "ERROR", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
return;
}
else if(txtuserpwd2.Text == "") //判断第二次密码是否为空
{
MessageBox.Show("请再次输入密码!", "ERROR", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
return;
}
else if(txtuserpwd.Text!=txtuserpwd2.Text) //判断两次输入的密码是否一致
{
MessageBox.Show("两次输入的密码不一致!请重新输入!", "ERROR", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
return;
}
else if(comid.Text=="") //判断身份是否为空
{
MessageBox.Show("请选择用户的身份!", "ERROR", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
return;
}
else if (user.newuser(txtusername.Text,txtuserpwd.Text,comid.Text,1) == 1) //新建用户,将用户信息插入到数据库对应的用户信息表中
{
MessageBox.Show("新建用户成功!");
return;
}
else
{
MessageBox.Show("新建用户失败!","ERROR", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
return;
}

3. 窗口密码操作设置
密码* :属性窗口——PasswardChar
密码长度:MaxLength
窗口隐藏显示密码:checkbox
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked == true)
{
txtpassward.PasswordChar='\0';
}
else
{
txtpassward.Text = "*";
}
}
- md5密码加密
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked == true)
{
txtpassward.PasswordChar='\0';
}
else
{
txtpassward.Text = "*";
}
}
增加:
using myproject.method;
MD5 md5=new MD5(); //实例化出一个用于加密解密的对象
up = md5.Md5Encrypt(up);
using myproject.method;
namespace myproject.method
{
class Classuser //用户操作类
{
MD5 md5=new MD5(); //实例化出一个用于加密解密的对象
//newuser中
up = md5.Md5Encrypt(up);
MD5.CS:直接用即可
```csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Security.Cryptography;
namespace myproject.method
{
class MD5
{
//加密函数
public string Md5Encrypt(string strSource)
{
//把字符串放到数组中
byte[] bytIn = System.Text.Encoding.Default.GetBytes(strSource);
//建立加密对的密钥和偏移量
byte[] iv = { 102, 16, 93, 156, 78, 4, 218, 32 };//定义偏移量
byte[] key = { 55, 103, 246, 79, 36, 99, 167, 3 };//定义密钥
//实例加密类
DESCryptoServiceProvider mobjCryptoService = new DESCryptoServiceProvider();
mobjCryptoService.Key = iv;
mobjCryptoService.IV = key;
ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();
//实例MemoryStream流加密密文件
System.IO.MemoryStream ms = new System.IO.MemoryStream();
CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
cs.Write(bytIn, 0, bytIn.Length);
cs.FlushFinalBlock();
string strOut = System.Convert.ToBase64String(ms.ToArray());
return strOut;
}
//解密函数
public string Md5Decrypt(string Source)
{
//将解密字符串转换成字节数组
byte[] bytIn = System.Convert.FromBase64String(Source);
//给出解密的密钥和偏移量密钥和偏移量必须与加密时的密钥和偏移量相同
byte[] iv = { 102, 16, 93, 156, 78, 4, 218, 32 };//定义偏移量
byte[] key = { 55, 103, 246, 79, 36, 99, 167, 3 };//定义密钥
DESCryptoServiceProvider mobjCryptoService = new DESCryptoServiceProvider();
mobjCryptoService.Key = iv;
mobjCryptoService.IV = key;
//实例流进行解密
System.IO.MemoryStream ms = new System.IO.MemoryStream(bytIn, 0, bytIn.Length);
ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();
CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
StreamReader strd = new StreamReader(cs, Encoding.Default);
return strd.ReadToEnd();
}
}
}
Form1:
else if(user.loginpwd(txtusername.Text,txtpassward.Text)!=1)
{
MessageBox.Show("该用户密码错误!");
return;
}
Classuser.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using myproject.method;
#region //登录时用户的密码的验证
public int loginpwd(string uname, string upwd)
{
MD5 md5=new MD5();
int flag = 0;
string str=""; //存放解密后密码
string s = "select * from Table_user where username='"+uname+"'";
SqlConnection con = null; //数据库连接
SqlCommand cmd = null; //执行sql操作
SqlDataReader qlddr = null; //sql执行结果存放缓冲区域
getsql gc = new getsql();
con = gc.getcon();
cmd = new SqlCommand(s, con);
qlddr = cmd.ExecuteReader(); //读取sql语句执行结果数据(数据库表中符合条件的记录),暂时存放在qlddr数据缓冲区
//qlddr数据缓冲区读取数据
if (qlddr.Read()) //如果qlddr中有数据,说明select语句查询到的记录符合条件,说明数据库有对应信息/查看行数,确定是否有数据
{
str=md5.Md5Decrypt(qlddr[1].ToString());
}
if (str==upwd)
{
return flag = 1;
}
else
{
return flag;
}
}
#endregion
以及修改本页最后一行
public int logininfofind(string uname, string upwd, string uid) //登录信息查找,设成int型 找到返回1,未找到返回0
{
int flag = 0; //整型变量 初量为零
string s;
SqlConnection con = null; //数据库连接
SqlCommand cmd = null; //执行sql操作
SqlDataReader qlddr = null; //sql执行结果存放缓冲区域
try
{
if (upwd==""&&uid=="")
s = "select * from Table_user where username='" + uname + "'";
else if(uid=="")
s = "select * from Table_user where username='" + uname + "'and userpasswd='" + upwd + "'";
else
s = "select * from Table_user where username='" + uname + "'and userid='" + uid + "'";//字符串用来放sql语句
判断该用户是否存在:插入如下代码
else if(user.logininfofind(txtusername.Text,"","")==1) //判断该用户是否存在
{
MessageBox.Show("该用户名已经存在,请重新输入新建用户名!");
}
else if (user.newuser(txtusername.Text,txtuserpwd.Text,comid.Text,1) == 1) //新建用户,将用户信息插入到数据库对应的用户信息表中
{
MessageBox.Show("新建用户成功!");
return;
}
3.搜索用户页面

1. 精确查找
Classuser:
#region //根据用户名精确查询用户详细信息
public void userselect(string uname,DataGridView dv)
{
string s;
int i = 0;
try
{
s = "select * from Table_user where username='" + uname + "'";
getsql gc = new getsql(); //动态实例化 getsql()是getsql的构造函数 是系统自动生成的
con = gc.getcon(); //↑这两行是连接数据库
cmd = new SqlCommand(s, con); //执行sql语句(增删改查)
qlddr = cmd.ExecuteReader(); //读取sql语句执行结果数据(数据库表中符合条件的记录),暂时存放在qlddr数据缓冲区
while (qlddr.Read()) //qlddr数据缓冲区读取数据
{
dv[0,i].Value=qlddr[0].ToString(); //i列数,j行数 没有1 不读密码
dv[1,i].Value=qlddr[2].ToString();
dv[2,i].Value=qlddr[3].ToString();
i++;
}
qlddr.Close(); //记得关 会被偷家
}
catch (Exception ee) //抛出异常
{
MessageBox.Show(ee.Message.ToString());
}
}
#endregion
Frmuserselect.cs:
private void button1_Click(object sender, EventArgs e) //精确查找
{
Classuser user = new Classuser();
//user.userselect(txtusername.Text,dvmhselect);
Classdvclear dvc = new Classdvclear();
dvc.dvclear(dvmhselect, 3);
user.usermhselect(txtusername.Text, dvmhselect);
}
2.模糊查找
Classuser:
#region //根据用户名模糊查询用户详细信息
public void usermhselect(string uname, DataGridView dv)
{
string s;
int i = 0;
try
{
s = "select * from Table_user where username like'%" + uname + "%'"; //like %%
getsql gc = new getsql(); //动态实例化 getsql()是getsql的构造函数 是系统自动生成的
con = gc.getcon(); //↑这两行是连接数据库
cmd = new SqlCommand(s, con); //执行sql语句(增删改查)
qlddr = cmd.ExecuteReader(); //读取sql语句执行结果数据(数据库表中符合条件的记录),暂时存放在qlddr数据缓冲区
while (qlddr.Read()) //qlddr数据缓冲区读取数据
{
dv[0, i].Value = qlddr[0].ToString(); //i列数,j行数 没有1 不读密码
dv[1, i].Value = qlddr[2].ToString();
dv[2, i].Value = qlddr[3].ToString();
i++;
}
qlddr.Close(); //记得关 会被偷家
}
catch (Exception ee) //抛出异常
{
MessageBox.Show(ee.Message.ToString());
}
}
#endregion
Frmuserselect.cs:
private void txtusername_TextChanged(object sender, EventArgs e) //模糊查找
{
Classuser user = new Classuser();
Classdvclear dvc = new Classdvclear();
dvc.dvclear(dvmhselect, 3);
user.usermhselect(txtusername.Text, dvmhselect);
}
3.根据用户身份查找
Classuser:
#region //根据用户身份精确查询用户详细信息
public void useridselect(string uid, DataGridView dv)
{
string s;
int i = 0;
try
{
s = "select * from Table_user where userid='" + uid + "'";
getsql gc = new getsql(); //动态实例化 getsql()是getsql的构造函数 是系统自动生成的
con = gc.getcon(); //↑这两行是连接数据库
cmd = new SqlCommand(s, con); //执行sql语句(增删改查)
qlddr = cmd.ExecuteReader(); //读取sql语句执行结果数据(数据库表中符合条件的记录),暂时存放在qlddr数据缓冲区
while (qlddr.Read()) //qlddr数据缓冲区读取数据
{
dv[0, i].Value = qlddr[0].ToString(); //i列数,j行数 没有1 不读密码
dv[1, i].Value = qlddr[2].ToString();
dv[2, i].Value = qlddr[3].ToString();
i++;
}
qlddr.Close(); //记得关 会被偷家
}
catch (Exception ee) //抛出异常
{
MessageBox.Show(ee.Message.ToString());
}
}
#endregion
Frmuserselect.cs:
private void comid_SelectedIndexChanged(object sender, EventArgs e) //根据id查找
{
Classuser user = new Classuser();
Classdvclear dvc = new Classdvclear();
user.useridselect(comid.Text,dvmhselect);
}
4. 退出系统
Frmmain.cs:
private void 退出系统ToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
5.删除用户
Frmmain:
private void 注销当前用户ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Hide();
Form1 frm = new Form1();
frm.Show();
}
6.修改密码页面
- 新建页面

- Classuser
#region //修改用户密码
public int useruppwd(string un,string up)
{
int flag = 0;
try
{
string s;
up=md5.Md5Encrypt(up);
//根据当前用户名查看数据库中该用户名的状态,为0则提示用户该用户已不存在,否则进入后面的操作,完成该用户密码的修改
s = "update Table_user set userpasswd='" + up+ "'where username='" + un + "'";
getsql gs = new getsql();
con = gs.getcon();
cmd = new SqlCommand(s, con);
flag = cmd.ExecuteNonQuery(); //返回受影响的行数,只插入一行所以是1
return flag;
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
return flag=2;
}
}
#endregion
3.Frmuppws.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using myproject.method; //定义
namespace myproject
{
public partial class Frmuppws : Form
{
public Frmuppws()
{
InitializeComponent();
}
private void btok_Click(object sender, EventArgs e) //确定按钮
{
Classuser user=new Classuser();
//用户名、密码不能为空
if (txtname.Text == "" || txtpwcon.Text == "" || txtpwd.Text == "")
MessageBox.Show("用户名密码不能为空!");
else if (txtpwd.Text != txtpwcon.Text)
MessageBox.Show("两次输入的密码不一致!");
//修改密码成功/失败
if (user.useruppwd(txtname.Text,txtpwd.Text)==1)
MessageBox.Show(txtname.Text+"用户密码修改成功");
else
MessageBox.Show("用户名输入错误!");
}
private void btclear_Click(object sender, EventArgs e) //清空按钮
{
txtname.Text = "";
txtpwcon.Text = "";
txtpwd.Text = "";
}
private void btcancle_Click(object sender, EventArgs e) //取消按钮
{
this.Hide();
}
}
}
7修改用户
1与main页面链接
Frmmain:
private void 修改用户ToolStripMenuItem_Click(object sender, EventArgs e)
{
Frmuserup2 frm = new Frmuserup2();
frm.Show();
}

2修改Classuser
1.修改用户身份状态
#region //修改用户身份
public int usermhselect2(string un,string uid,string uflag)
{
string s;
int flag = 0;
try
{
s = "update Table_user set userid='" + uid + "',userflag='" + uflag + "'where username='" + un + "'";
getsql gs = new getsql();
con = gs.getcon();
cmd = new SqlCommand(s, con);
flag = cmd.ExecuteNonQuery(); //返回受影响的行数,只插入一行所以是1
return flag;
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
return flag = 2;
}
}
#endregion
3新建窗体Frmuserup2.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using myproject.method;
namespace myproject
{
public partial class Frmuserup2 : Form
{
Classuser user = new Classuser();
Classdvclear dvc = new Classdvclear();
public Frmuserup2()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
this.Hide();
}
private void Frmuserup2_Load(object sender, EventArgs e)
{
dv1.RowCount = 100; //行数显示100行(用户显示列表显示行数)
}
private void textBox1_TextChanged(object sender, EventArgs e) //清空
{
dvc.dvclear(dv1,3);
user.usermhselect(txtname.Text, dv1);
}
private void dv1_CellClick(object sender, DataGridViewCellEventArgs e) //点击事件
{
txtname.Text=dv1[0,dv1.CurrentCell.RowIndex].Value.ToString();
comid.Text = dv1[1, dv1.CurrentCell.RowIndex].Value.ToString();
comflag.Text = dv1[2, dv1.CurrentCell.RowIndex].Value.ToString();
}
private void button1_Click(object sender, EventArgs e) //确定按钮
{
Classuser user = new Classuser();
if (user.usermhselect2(txtname.Text,comid.Text,comflag.Text)==1)
{
MessageBox.Show(txtname.Text+"用户信息修改成功!");
//更新数据表的信息
user.userselect(txtname.Text, dv1); //表里的信息更新给用户显示
}
else if (txtname.Text == "") //判断用户名是否为空
{
MessageBox.Show("请输入用户名!", "ERROR", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
return;
}
else if (comid.Text == "") //判断身份是否为空
{
MessageBox.Show("请输入身份!", "ERROR", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
return;
}
else if (comflag.Text == "") //判断用户状态是否为空
{
MessageBox.Show("请输入身份状态!", "ERROR", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
return;
}
else if (user.logininfofind(txtname.Text, "", "") == 0) //判断该用户是否存在
{
MessageBox.Show("该用户不存在,请重新输入用户名!");
}
else
{
MessageBox.Show("用户信息修改失败!", "ERROR", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button3);
return;
}
}
}
}
二 药品基本信息模块
1.药品基本信息管理页面+数据库medical
1新建窗体Frmmedicalinfor
- main页面新加药品管理


Frmmain:
private void 药品基本信息管理ToolStripMenuItem_Click(object sender, EventArgs e)
{
Frmmedicalinfor frm = new Frmmedicalinfor();
frm.Show();
}
-新建Frmmedicalinfor窗体
- 框架:容器groupbox (基本信息+基本操作)
- 数据视图 :dategridview(详情展示)
- 时间列表:DateTimePicker

2数据库建表Table-medical

3新建类Classmedical
- 药品基本信息的插入
- 参数太多:建实体类Classinfo 对参数打包
private string medicalname; 点击medicalname 右键 重构 封装字段 应用
本文档详述了医学信息系统的用户管理模块,包括窗体间数据传输、新建用户、搜索用户、退出系统、删除用户及修改密码等功能的实现。同时,介绍了药品基本信息管理页面的构建,涉及数据库medical的建表和类Classmedical的设计。

被折叠的 条评论
为什么被折叠?



