说明:程序是在.NET 4.0下用C#语言编写

COM组件也是用C#编写

转载请标明出处:http://blog.csdn.net/u012027907

一.  功能需求: 

1. 能存款

2. 能取款

3. 能查询余额及交易明细

4. 能转账

5. 能修改密码

二.  总体设计计:

1.    客户端设计:

(1)  Admin类(登录窗体)

(2)  MainForm类(主窗体)

(3)  WithDraw类(取款窗体)

(4)  Deposit类(存款窗体)

(5)  TransForm类(转账窗体)

(6)  Query类(查询余额及明细窗体)

(7)  ModifyPwd类(修改密码窗体)

(8)  OpenAccountInfo类(开户窗体)

2.    COM组件端的函数设计:

(1)  连接数据库函数组

A.  ReadSqlConnString()(读取连接字符串)

B.  GetConnection()(打开与数据库的连接)

C.  Con_Close()(关闭与数据库的连接)

D.  GetDataSet()(将查询结果表填充在DataSet中)

(2)  Proc_Admin()(用户登录验证)

(3)  Manager_Admin(管理员登录验证)

(4)  WhithDraw()(取款)

(5)  Deposit()(存款)

(6)  TransForm()(转账)

(7)  Query()(查询)

(8)  ModifyPwd()(修改密码)

(9)  Proc_CreateAccount()(开户)

3.    数据库设计:

(1)     表设计

userInfo(用户信息表)

cardInfo(卡信息表)

transInfo(交易信息表)

manager(管理员信息表)

(2)     增加约束条件

如:设置主键

电话号码必须为数字

身份证号为18位

存款类型:活期、定期及定活两便三者之一

等约束。

(3)    创建存储过程

(proc_createAccount)开户存储过程

(proc_takeMoney)存取款存储过程

(proc_randCardNo)随机产生卡号存储过程

(proc_tranMoney)转账存储过程

三.  详细设计:

   1. 客户端设计:

(1)  登录窗体

(2)主窗体

(3)取款窗体

(4)存款窗体

(5)查询余额及明细窗体

(6)修改密码窗体

(7)开户窗体

2.COM组件端的函数设计:

(8) 连接数据库函数组

A.  ReadSqlConnString()(读取连接字符串)

#region 读取连接字符串
///<summary>
///
///</summary>
public static string ReadSqlConString()
{
StreamReader sr = new StreamReader("DatabaseLinkString.ini");
string DatabaseLinkString = "";
while (!sr.EndOfStream)
{
DatabaseLinkString += sr.ReadLine();
}
sr.Close();
return DatabaseLinkString;
}
#endregion
B.GetConnection()(打开与数据库的连接)
#region 打开与数据库的连接
///<summary>
///打䨰开a与®?数ºy据Y库a的Ì?连¢?接¨®
///</summary>
///<returns>返¤¦Ì回?SqlConnection对?象¨®</returns>
public static SqlConnection GetConnection()
{
try
{
// StrConn = ReadSqlConString1(ID,Pwd);
StrConn = ReadSqlConString();
conn = new SqlConnection(StrConn); //用®?SqlConnection对?
if (conn.State != ConnectionState.Open)
conn.Open(); //打开与数据库的连接¨®
return conn; //返¤¦Ì回?SqlConnection对?象¨®
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
#endregion
C.Con_Close()(关闭与数据库的连接)
  #region 关?闭À?数ºy据Y库a连¢?接¨®
///<summary>
///关?闭À?数ºy据Y库a连¢?接¨®
///</summary>
public void Con_Close()
{
if (conn.State == ConnectionState.Open) //判D断?数ºy据Y库a是º?否¤
{
conn.Close();   //关?闭À?数ºy据Y库a连¢?接¨®
conn.Dispose(); //释º¨ª放¤?My_con
}
}
#endregion
D.GetDataSet()(将查询结果表填充在DataSet中)
#region 执¡ä行DSQL语®?句?,返¤¦Ì回?DataSet对?象¨®
/// <summary>
/// 执¡ä行DSQL语®?句?,返¤¦Ì回?DataSet对?象¨®
/// </summary>
/// <param name="sql">Sql语®?句?</param>
/// <returns>DataSet对?象¨®</returns>
public DataSet GetDataSet(string sql)
{
GetConnection();
try
{
var da = new SqlDataAdapter(sql, conn);                  var ds = new DataSet();                         //
da.Fill(ds);                                                        Con_Close();
return ds;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
Con_Close();
}
}
#endregion
(9)Proc_Admin()(用户登录验证)
#region 用户登录验证
/// <summary>
/// 用®?户¡ì登Ì?录?验¨¦证¡è
/// </summary>
/// <param name="userName">用®?户¡ì名?</param>
/// <param name="passWord">密¨¹码?</param>
/// <param name="cardId">卡¡§号?</param>
/// <returns>返¤¦Ì回?值¦Ì为a 1 则¨°登Ì?录?成¨¦功|,ê?为a 0 则¨°登Ì?录?失º¡ì败㨹</returns>
public DataTable Proc_Admin(string userName, string passWord, string cardId)
{
string sql = "Select * from cardInfo where cardID = '" + cardId + "' and password = '" + passWord + "'";
var getds = GetDataSet(sql);
var dt = getds.Tables[0];
return dt;
}
#endregion
(10)Manager_Admin(管理员登录验证)
#region 管¨¹理¤¨ª员¡À登Ì?录?验¨¦证¡è
/// <summary>
/// 管¨¹理¤¨ª员¡À登Ì?录?验¨¦证¡è
/// </summary>
/// <param name="userName">管¨¹理¤¨ª员¡À名?</param>
/// <param name="passWord">密¨¹码?</param>
/// <param name="cardId">卡¡§号?</param>
/// <returns>返¤¦Ì回?值¦Ì为a 1 则¨°登Ì?录?成¨¦功|,ê?为a 0 则¨°登Ì?录?失º¡ì败㨹</returns>
public DataTable Manager_Admin(string managerName, string passWord, string cardId)
{
string sql = "Select * from manager where managerId = '" + cardId + "' and managePwd = '" + passWord + "' and managerName = '"+managerName+"'";
var getds = GetDataSet(sql);
var dt = getds.Tables[0];
return dt;
}
#endregion
(11)Proc_TransForm(转账)
#region 转Áa账?
/// <summary>
/// 转Áa账?
/// </summary>
/// <param name="fromCardId">转Áa出?的Ì?卡¡§号?</param>
/// <param name="toCardId">转Áa入¨?的Ì?卡¡§号?</param>
/// <param name="money">金e额?</param>
/// <param name="passWord">转Áa出?卡¡§的Ì?密¨¹码?</param>
/// <returns>返¤¦Ì回?存ä?储ä¡é过y程¨¬的Ì?提¬¨¢示º?信?息¡é</returns>
public string Proc_TransForm(string fromCardId,string toCardId,string money,string passWord)
{
string message = "";//提¬¨¢示º?信?息¡é
try
{
GetConnection();
cmd = new SqlCommand("proc_tranMoney", conn);
//设¦¨¨置?命¨¹令¢?的Ì?类¤¨¤型¨ª为a存ä?储ä¡é过y程¨¬
cmd.CommandType = CommandType.StoredProcedure;
//设¦¨¨置?参?数ºy
cmd.Parameters.Add("@fromCard", SqlDbType.VarChar,19).Value = fromCardId;
//注Á¡é意°a输º?出?参?数ºy要°a设¦¨¨置?大䨮小?,否¤?则¨°size默?认¨?为a0,
cmd.Parameters.Add("@toCard", SqlDbType.VarChar, 19).Value = toCardId;
cmd.Parameters.Add("@money", SqlDbType.Money).Value = money;
cmd.Parameters.Add("@pass", SqlDbType.VarChar, 6).Value = passWord;
cmd.Parameters.Add("@Tips", SqlDbType.NVarChar, 50);
//设¦¨¨置?参?数ºy的Ì?类¤¨¤型¨ª为a输º?出?参?数ºy,默?认¨?情¨¦况?下?是º?输º?入¨?,
cmd.Parameters["@Tips"].Direction = ParameterDirection.Output;
//执¡ä行D
cmd.ExecuteNonQuery();
//得Ì?到Ì?输º?出?参?数ºy的Ì?值¦Ì,把ã?赋3值¦Ì给?name,注Á¡é意°a,这a里¤?得Ì?到Ì?的Ì?是º?object类¤¨¤型¨ª的Ì?,要°a进?行D相¨¤应®|的Ì?类¤¨¤型¨ª轮?换?
message = cmd.Parameters["@Tips"].Value.ToString();
Con_Close();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return message;
}
#endregion
(11)WhithDraw()(取款)
#region 取¨?款?
/// <summary>
/// 取¨?款?
/// </summary>
/// <param name="cardId">卡¡§号?</param>
/// <param name="balance">金e额?</param>
/// <param name="passWord">密¨¹码?</param>
/// <returns>返¤¦Ì回?查¨¦询¡¥的Ì?表À¨ª</returns>
public DataTable WithDraw(string cardId, string balance,string passWord)
{
//查¨¦询¡¥的Ì?Sql语®?句?
string sql = "EXEC proc_takeMoney '" + cardId + "'," + balance + ",'支¡ì出?','" + passWord + "'";
sql += "Select * from cardInfo where cardID = '" + cardId + "'";
var getds = GetDataSet(sql); //将?查¨¦询¡¥结¨¢果?存ä?入¨?DataSet对?象¨®中D
var dt = getds.Tables[0];    //将?查¨¦询¡¥结¨¢果?存ä?入¨?DataTable对?象¨®中D
return dt;
}
#endregion
(12)Deposit(存款)
#region 存ä?款?
/// <summary>
/// 存ä?款?
/// </summary>
/// <param name="cardId">卡¡§号?</param>
/// <param name="balance">金e额?</param>
/// <returns>返¤¦Ì回?查¨¦询¡¥表À¨ª</returns>
public DataTable Deposit(string cardId, string balance)
{
//Sql查¨¦询¡¥语®?句?
string sql = "Update cardInfo set balance = balance +" + balance + " where cardID = '" + cardId + "'";
sql += " Insert Into transInfo(transType,cardID,transMoney) values ('存ä?入¨?','" + cardId + "'," + balance + ")";
sql += " Select * from cardInfo where cardID = '" + cardId + "'";
var getds = GetDataSet(sql);
var dt = getds.Tables[0];
return dt;
}
#endregion
(13)Query(查询)
#region 查¨¦询¡¥
/// <summary>
/// 查¨¦询¡¥
/// </summary>
/// <param name="tableType">查¨¦询¡¥那?个?表À¨ª</param>
/// <param name="cardID">卡¡§号?</param>
/// <returns>查¨¦询¡¥结¨¢果?</returns>
public DataTable QueryData(string tableType, string cardID)
{
string sql;
if (tableType == "cardInfo")//查¨¦询¡¥卡¡§信?息¡é表À¨ª
{
sql = "Select customerID 客¨ª户¡ì编À¨¤号?,balance 账?户¡ì余®¨¤额?,cardType 币À¨°种?,savingType 存ä?款?类¤¨¤型¨ª,openDate 开a户¡ì日¨?期¨²"
+ "  from " + tableType + " where cardID = '" + cardID + "'";
}
else  //查¨¦询¡¥transInfo (转Áa账?及¡ã余®¨¤额?表À¨ª)ê?
{
sql = "Select transID 交?易°¡Á明¡Â细?编À¨¤号?,transDate 交?易°¡Á日¨?期¨²,transType 交?易°¡Á类¤¨¤型¨ª,transMoney 交?易°¡Á金e额?"
+ " from " + tableType + " where cardID = '" + cardID + "' Order by transID";
}
var connect = new ConnectDB();
var dt = connect.GetDataSet(sql).Tables[0];
return dt;
}
#endregion
(14)ModifyPwd(修改密码)
        #region 修T改?密¨¹码?
/// <summary>
/// 修T改?密¨¹码?
/// </summary>
/// <param name="cardId">卡¡§号?</param>
/// <param name="newPwd">新?密¨¹码?</param>
/// <returns>返¤¦Ì回?查¨¦询¡¥设¦¨¨定¡§新?密¨¹码?的Ì?结¨¢果?</returns>
public DataTable ModifyPwd(string cardId, string newPwd)
{
string sql = "Update cardInfo set password = '" + newPwd + "' where cardID = '" + cardId + "'";
sql += " Select * from cardInfo where cardID = '" + cardId + "' and password = '" + newPwd + "'";
var getds = GetDataSet(sql);
var dt = getds.Tables[0];
return dt;
}
#endregion
(15)Proc_CreateAccount(开户)
#region 开a户¡ì
public string Proc_CreateAccount(string customerName, string customerPid,
string telephone, string openMoney, string savingType,
string address)
{
string message = "";//提¬¨¢示º?信?息¡é
try
{
GetConnection();
cmd = new SqlCommand("proc_createAccount", conn);
//设¦¨¨置?命¨¹令¢?的Ì?类¤¨¤型¨ª为a存ä?储ä¡é过y程¨¬
cmd.CommandType = CommandType.StoredProcedure;
//设¦¨¨置?参?数ºy
cmd.Parameters.Add("@customerName", SqlDbType.VarChar, 10).Value = customerName;
//注Á¡é意°a输º?出?参?数ºy要°a设¦¨¨置?大䨮小?,否¤?则¨°size默?认¨?为a0,
cmd.Parameters.Add("@customerPID", SqlDbType.VarChar, 18).Value = customerPid;
cmd.Parameters.Add("@telephone", SqlDbType.VarChar,13).Value = telephone;
cmd.Parameters.Add("@openMoney", SqlDbType.Money).Value = openMoney;
cmd.Parameters.Add("@savingType", SqlDbType.VarChar, 8).Value = savingType;
cmd.Parameters.Add("@address", SqlDbType.VarChar, 50).Value = address;
cmd.Parameters.Add("@Tips", SqlDbType.NVarChar, 500);
//设¦¨¨置?参?数ºy的Ì?类¤¨¤型¨ª为a输º?出?参?数ºy,默?认¨?情¨¦况?下?是º?输º?入¨?,
cmd.Parameters["@Tips"].Direction = ParameterDirection.Output;
//执¡ä行D
cmd.ExecuteNonQuery();
//得Ì?到Ì?输º?出?参?数ºy的Ì?值¦Ì,把ã?赋3值¦Ì给?name,注Á¡é意°a,这a里¤?得Ì?到Ì?的Ì?是º?object类¤¨¤型¨ª的Ì?,要°a进?行D相¨¤应®|的Ì?类¤¨¤型¨ª轮?换?
message = cmd.Parameters["@Tips"].Value.ToString();
Con_Close();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return message;
}
#endregion

3.数据库设计:

(1)     表设计

A.userInfo(用户信息表)

B.cardInfo(卡信息表)

C.transInfo(交易信息表)

D.manager(管理员信息表)

(2)     增加约束条件

A.为UserInfo表增加约束

 --为UserInfo表增加约束
ALTER TABLE UserInfo
--为UserInfo表customerID列增加主键约束
ADD constraint PK_ID PRIMARY KEY(customerID),
--为customerPID列增加检查约束,用到系统函数len()
constraint CK_PID CHECK(len(customerPID) = 15 or len(customerPID) = 18),
--确保身份证列数据唯一
constraint UQ_PID UNIQUE(customerPID),
--约束电话号码为-2530102或
constraint CK_TELEPHONE CHECK(telephone like '[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
or telephone like '1[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
GO

B.为cardInfo表增加约束

--为cardInfo表增加约束
ALTER TABLE cardInfo
ADD CONSTRAINT PK_CARDID PRIMARY KEY(cardID),
CONSTRAINT CK_CARDID CHECK(cardID like '1234[0-9][0-9][0-9][0-9]'),
--增加默认约束,默认值为“RMB”
CONSTRAINT DF_CARDTYPE DEFAULT('RMB') FOR cardType,
--增加检查约束,用IN限制可以输入的数据
CONSTRAINT CK_SAVINGTYPE CHECK(savingType IN ('活期','定活两便','定期')),
--调用日期函数获得当前时间设为默认值
CONSTRAINT DF_OPENTYPE DEFAULT(GETDATE()) FOR openDate,
CONSTRAINT CK_OPENMONEY CHECK(openMoney>1),
CONSTRAINT CK_BALANCE CHECK(balance>1),
CONSTRAINT CK_PASS CHECK(passWord like '[0-9][0-9][0-9][0-9][0-9][0-9]'),
CONSTRAINT DF_PASS DEFAULT('888888') FOR password,
CONSTRAINT DF_LOSS DEFAULT(0) FOR isLossbit,
CONSTRAINT FK_customerID FOREIGN KEY(customerID) REFERENCES UserInfo(customerID)
GO

C.为表transInfo表增加约束

--为表transInfo表增加约束
ALTER TABLE transInfo
ADD CONSTRAINT PK_ID PRIMARY KEY(transID),
--增加检查约束,设置该列的值只能是“存入","支出”
CONSTRAINT CK_TRANSTYPE CHECK(transType IN ('存入','支出')),
CONSTRAINT CK_TRANSMONEY CHECK(transMoney>1),
CONSTRAINT DF_TRANSDATE DEFAULT(GETDATE()) FOR transDate,
--增加外键约束,transInfo表的cardID受cardID的cardID列约束
CONSTRAINT FK_CARDID FOREIGN KEY(cardID) REFERENCES cardInfo(cardID)
GO

(3)  创建存储过程

(proc_createAccount)开户存储过程
--系统对象中存在此存储过程名则删除
if exists(SELECT * FROM sysobjects WHERE name = 'proc_createAccount')
drop PROC proc_createAccount
GO
--创建卡户存储过程
CREATE PROC proc_createAccount @customerName char(10),@customerPID char(18),@telephone varchar(13)
,@openMoney money,@savingType char(8),@address varchar(50) = ''
,@Tips varchar(500)='' output
AS
--声明局部变量
DECLARE @mycardID nvarchar(19),@cur_customerID int
--调用产生随机卡号的存储过程,生成随机卡号
EXEC dbo.proc_randCardNo @mycardID output
--产生的卡号已存在,就一直产生,知道没有重复
while exists(SELECT * FROM cardInfo WHERE cardID = @mycardID)
EXEC proc_randCardNo @mycardID output
SET @Tips = '尊敬的用户,您开户成功!系统为您产生的随机卡号为:'+@mycardID
+ '开户日期:'+CONVERT(char(10),getdate(),111)
+ '开户金额:'+CONVERT(varchar(20),@openMoney)
PRINT @Tips
IF not exists(SELECT * FROM UserInfo WHERE customerPID = @customerPID)
BEGIN
--插入客户信息
INSERT INTO UserInfo(customerName,customerPID,telephone,address)
VALUES(@customerName,@customerPID,@telephone,@address)
--查询出最后一次插入的自增列值
SELECT @cur_customerID = @@IDENTITY FROM UserInfo
--插入卡信息
INSERT INTO cardInfo(cardID,savingType,openMoney,balance,customerID)
VALUES(@mycardID,@savingType,@openMoney,@openMoney,@cur_customerID)
--插入明细账
INSERT INTO transInfo(transType,cardID,transMoney)
VALUES('存入',@mycardID,@openMoney)
END
GO
(proc_takeMoney)存取款存储过程
if exists(select * from sysobjects where name = 'proc_takemoney')
drop proc proc_takemoney
go
create procedure proc_takeMoney(@card char(19),@money money,@type char(4),@passWord char(6)='')
AS
print '交易正在进行,请稍后...'
if((select isLoss From carcInfo where cardID = @card) = 1) --检测卡是否被锁定
begin
raiserror('卡已被锁定,请联系工作人员',16,1)
return
end
if(@type = '支出')
if((select passWord from cardID where cardID = @card) <> @passWord) --检测密码是否正确
begin
raiserror('密码错误后卡已被锁定!',16,1)
return
end
DECLARE @balance money
select @balance = balance From cardID where cardID = @card
if(@type = '支出')
if(@balance > @money+1) --判断余额是否足够
update cardInfo set balance = balance - @money where cardID = @card
else
begin
raiserror('余额不足!不能交易!',16,1)
print '卡号'+@card+'  余额:'+convert(varchar(20),@balance)
return
end
else
update cardInfo set balance = balance +@money where cardID = @card
INSERT INTO transInfo(transType,cardID,transMoney)
VALUES(@type,@card,@money) --插入交易明细
print '交易成功! 交易金额:'+convert(varchar(20),@money)
select @balance = balance from cardInfo where cardID = @card
print '卡号'+@card+' 的余额是:'+convert(varchar(20),@balance)
GO
(proc_randCardNo)随机产生卡号存储过程
--系统对象中存在此存储过程名则删除
if exists(SELECT * FROM sysobjects WHERE name = 'proc_randCardNo')
drop PROC proc_randCardNo
GO
--创建产生卡号的存储过程
CREATE PROC proc_randCardNo(@randCardID nvarchar(19) output)
AS
DECLARE @str char(10)
DECLARE @r numeric(10,8)
--在单个查询中反复调用RAND()函数将产生相同的值,所以使用rand([seed])时,每次要修改种子seed的值
--才能得出不一样的随机数
--这里采用毫秒做种子来取随机数
SELECT @r = RAND(DATEPART(ms,GETDATE()))
SELECT @str = CAST(@r as CHAR(10)) --转化为char型
--截取.XXXXXXXX的小数点后-4为组成为规定格式的卡号
SET @randCardID = '1234'+SUBSTRING(@str,3,4)
GO
(proc_tranMoney)转账存储过程
--系统对象中存在此存储过程名则删除
if exists(SELECT * FROM sysobjects WHERE name = 'proc_createAccount')
drop PROC proc_createAccount
GO
--创建卡户存储过程
CREATE PROC proc_createAccount @customerName char(10),@customerPID char(18),@telephone varchar(13)
,@openMoney money,@savingType char(8),@address varchar(50) = ''
,@Tips varchar(500)='' output
AS
--声明局部变量
DECLARE @mycardID nvarchar(19),@cur_customerID int
--调用产生随机卡号的存储过程,生成随机卡号
EXEC dbo.proc_randCardNo @mycardID output
--产生的卡号已存在,就一直产生,知道没有重复
while exists(SELECT * FROM cardInfo WHERE cardID = @mycardID)
EXEC proc_randCardNo @mycardID output
SET @Tips = '尊敬的用户,您开户成功!系统为您产生的随机卡号为:'+@mycardID
+ '开户日期:'+CONVERT(char(10),getdate(),111)
+ '开户金额:'+CONVERT(varchar(20),@openMoney)
PRINT @Tips
IF not exists(SELECT * FROM UserInfo WHERE customerPID = @customerPID)
BEGIN
--插入客户信息
INSERT INTO UserInfo(customerName,customerPID,telephone,address)
VALUES(@customerName,@customerPID,@telephone,@address)
--查询出最后一次插入的自增列值
SELECT @cur_customerID = @@IDENTITY FROM UserInfo
--插入卡信息
INSERT INTO cardInfo(cardID,savingType,openMoney,balance,customerID)
VALUES(@mycardID,@savingType,@openMoney,@openMoney,@cur_customerID)
--插入明细账
INSERT INTO transInfo(transType,cardID,transMoney)
VALUES('存入',@mycardID,@openMoney)
END
GO

四.  测试与实现:

五.  总结:

通过对基于COM组件技术的练习,是我对COM组件的通用性有了进一步的了解,这样的技术的使用为代码更高级别的重用提供了良好的契机。同时,我也掌握了用.NET下C#语言创建组件及ADO.NET技术连接并操作数据库的技术,是我受益匪浅

本程序的优点:实现了ATM的基本功能,界面友好,用户输入限制较完善。

本程序的缺点:对数据库的操作使用了sa登录,安全性有待提高,其他功能不完善等。

转载请标明出处:http://blog.csdn.net/u012027907

基于COM技术的ATM自动存款机实现(C#版)相关推荐

  1. java编写的ATM自动存款机项目

    自动取款机项目(ATMTest是测试类) ATMTest类 /*** @author colin**/ public class ATMTest {public static void main(St ...

  2. atm机存款场景图_atm存钱(自动存款机存钱演示图)

    钱并不是只有到柜台才能存的,跟取钱一样,存钱也能在机器上完成. 各银行都推出了自动存款机(CDM),客户可直接在上面存款,操作跟自动柜员机(ATM)差不多. 存款要用 自动存款机或者存取款一体机 存款 ...

  3. atm机存款场景图_atm机可以存钱吗(自动存款机存钱演示图)

    同上...... 对银行来说,自助存款机能有效分流柜台的人流,提高效率:对市民而言,自助存款. 而且只要你需要,随时可以存款.但是,从目前的情况来看,银行的自助存款机可以. 可是附近没有建行 想就近存 ...

  4. 计算机课是怎样查出勤的,基于计算机视觉技术的课堂自动考勤系统研究

    张帆++龚翠艳++时德才++汪星航 [摘要]高校学生上课出勤率是学风建设的基础,同时也是课堂管理的必要环节.本文利用计算机视觉技术,通过OpenCV开源库设计了一套课堂自动考勤系统.该系统利用数字图像 ...

  5. 用JAVA写模拟自动存款机系统

    一共只写了三个类分别是Personal,CRS,BankSystem,个人文档数据存在项目下文件里,和src同级.每个人创建一个txt,有一个用户集.txt,里面存储着所有人的ID. 个人信息只有三个 ...

  6. 基于机器视觉技术的快递自动分拣

    快递自动化分拣引入机器视觉技术已经进入了快速发展的阶段.目前,国内大型物流运转中心已开始釆用全自动化分拣,多数快递公司处于半自动化状态,中小型物流分拣中心目前仍靠人工录入地址信息.扫描进行分拣. 快递 ...

  7. 基于pxe技术实现linux自动安装原理,网络安装Linux的技术原理分析及实现

    网络安装Linux的技术原理分析及实现 李怀刚;邱建新 [期刊名称]<计算机应用与软件> [年(卷),期]2006(023)009 [摘要]对自动化Linux网络安装所使用的相关技术原理进 ...

  8. atm机是专用计算机吗,计算机网络中的ATM技术和ATM自动取款机的ATM意思一样吗

    elizabethshen 回答于:2018-03-31 不一样! ATM(Asynchronous Transfer Mode)顾名思义就是异步传输模式,就是国际电信联盟ITU-T制定的标准,实际上 ...

  9. atm机存款场景图_怎么在自动存款机上存款?有图具体步骤的更好?

    展开全部 1.在标有现金存取的自动存取款机前,将银行储蓄卡插入自动存款机的32313133353236313431303231363533e59b9ee7ad9431333365666138插卡口(下 ...

最新文章

  1. CRF算法中辅助概念 团 极大团 最大团
  2. 如何让您的php也支持pthreads多线程
  3. Chapter 3 Phenomenon——24
  4. ML之PLiR之LARS:利用LARS算法求解ElasticNet回归类型问题(实数值评分预测)
  5. 使用numpy与matplotlib.pyplot画图
  6. AES-256 加密 PHP实现
  7. 公司间交易学习笔记---概述
  8. php获取表单ip,PHP获取用户IP代码实现
  9. 量化投资(数据分析)
  10. 剑指offer——面试题39-2:平衡二叉树
  11. 【Kaldi例子】Librispeech数据整理
  12. 数字城市地理信息公共平台软件测评大纲
  13. 年初五,迎财神 | 一张码如何实现多渠道(微信、支付宝、云闪付...)收款
  14. NLP之语言词素Morpheme(形态学)
  15. python实现奇异值分解_如何用python实现SVD分解呢?
  16. Android应用开发转车载工程师——串口通信学习
  17. mysql 嵌套_MySQL嵌套查询(子查询)
  18. 北京工商大学计算机专业校友评价,北京工商大学英语校友返校聚会
  19. PTA 直捣黄龙(30分)
  20. goZero入门使用及注意事项

热门文章

  1. 爱奇艺视频标签技术解析
  2. 【多模块聚合工程】IDEA搭建SpringBoot多模块聚合工程详细步骤
  3. 糊涂工具包的一些常用方法
  4. 9月14日计算机视觉基础学习笔记——基本图像处理
  5. 什么是异常?出现异常怎么处理?
  6. 1.22 时态 过去完成时 副词比较级
  7. dnf服务器宕机维护公告,7月29日服务器例行维护更新公告
  8. mybatis的一对多和多对多查询
  9. C/C++类库大全(附github连接)
  10. 基于ssm健身俱乐部网站