数据结构课程设计实习报告-银行业务模拟

2024-08-26

数据结构课程设计实习报告-银行业务模拟(精选6篇)

篇1:数据结构课程设计实习报告-银行业务模拟

数据库课程设计

—全国铁路咨询系统

目录

一.需求分析****************************************** 3

二.概要设计******************************************

三.储存结构设计**************************************

四.详细设计******************************************

五.用户手册******************************************

六.测试数据******************************************

七.心得体会****************************************** 8 11 17 18 26

一、需求分析

1、问题描述

由于不同目的的旅客对交通工具有不同的要求。例如,因公出差的旅客希望在旅途中 的时间尽可能短,出门旅游的游客则期望旅费尽可能省。编制一个全国城市间的交通咨询程 序,为旅客提供两种最优决策的交通咨询。

根据铁路的特征,数据的储存需要使用图的结构。每个城市之间有不同的车次,每个车次的始发站、路过车站和终点站都不一样,所以两个城市之间就有指向明确的边,是一个有向图;而由于车次的不一样,所以发车时间,到站时间,价格等也会不一样;所以每两个点之间不止两条边,可能存在不同的多条边。

2、功能需求

铁路咨询的对象是用户,所以,需要一个对用户友好的功能菜单,根据用户可能需要的实际需求,功能菜单中可能会包括以下要点:

1:显示所有车站信息

2: 显示所有车次信息(包括时刻表)

3: 查询车站信息

4: 查询两个城市之间的铁路信息

5: 增加或删除车站

6: 增加或删除铁路信息

7: 增加、删除或修改时刻表、距离和价格

8:寻找两城市间最省钱的一条路径

9:寻找两城市间最省时间的一条路径 10:寻找两城市间所有路径(按费用从低到高排序输出)

11:寻找两城市间所有路径(按所用时间从少到多排序输出)

12:退出咨询系统

图的初始数据从文本中读入,文本是老师给的标准数据。

3、输入及输出格式

(1):输入格式:

A:图的初始数据输入

数据的初始化是需要从文本中读入的,所以不需要有专门的文本输入函数,只需要给出读文本的函数input();使用input()函数从测试数据的三个文本中读入数据,然后使用创建图的函数CreateGraph()创建起整个图。初始数据的读入,分别是从station.txt中读入每个城市站点的名称的城市编号,从iinformation.txt中读入每个城市间的铁路信息,从railway.txt中读入所有铁路线的信息。

如:

以下从station.txt中节选部分

0 北京广州石家庄郑州武汉长沙

以下从information.txt中节选部分

出发城市编号 到达城市编号 车次 里程

费用

出发时刻

到达时刻

0

1000 287

62.5

0000

0246

0

1016 287

0060

0275

0

1001 137

23.5

0000

0117

0

1017 137

28.5

0060

0163

0

1002 1199 156.5 0000

1028

1008 1257 162.5 0000

1077

以下从railway.txt中节选部分

各条铁路线上城市编号(此行可去掉)

京广线 0 2 3 4 5 6 1

京九线 0 13 14 12

京沪线 0 8 9 10 11 7

陇海线 18 10 3 20 24 19

B:用户要求输入

用户在使用本程序时,会要求用户输入各种数据,如城市编号id、抉择选项y/n等;用户只需要按照程序菜单的要求输入即可。如城市编号id就是初始化数据(文本数据)中每个城市就有的编号,用户在不知道城市编号之前先查看一下城市信息就可以清楚明了的知道城市id了。

(2):输出格式

在系统的管理下,为了用户的查询方便,需要有多重输出方式。如每条铁路线上信息的输出。这里面就包括了,在每条铁路上所有车次信息,每个车次始发站信息、过站信息和终点站信息。

样例如下:

兰新线中有以下车次:

1005次列车运行情况:

出发城市

到达城市

车次

距离(km)出发时间

到达时间

费用(元)

兰州

酒泉

1005

748

0:0

10:41

酒泉

乌鲁木齐

1005

797

10:51 22:14

152.5

乌鲁木齐

阿拉山口

1005

477

22:24

5:13

64.5

1013次列车运行情况:

出发城市

到达城市

车次

距离(km)出发时间

到达时间

费用(元)

阿拉山口

乌鲁木齐

1013

477

0: 0

6:49

64.5

乌鲁木齐

酒泉

1013

797

6:59

18:22

152.5

酒泉

兰州

1013

748

18:32

5:13

对于每个城市信息的输出,只需要输出经过每个城市的铁路新路即可,当然必须得输出城市站点的id,方便用户的查询和管理

样例如下:

城市编号

城市名称

过站铁路线

0

北京

京广线

京九线

京沪线

广州

京广线

石家庄

京广线

郑州

京广线

陇海线

武汉

京广线

长沙

京广线

株洲

京广线

沪昆线

上海

京沪线

沪昆线

二、概要设计

1.数据特性分析

(1):整体结构分析

铁路交通咨询模拟系统管理的是全国的各个城市间的铁路信息。对于整体的全

国铁路信息来说,每一个城市站点就是一个顶点节点,城市与城市之间的每一个车

次信息就是一条有向边。所有整个咨询系统应该是一个有向图结构。从A城市出发

到B城市,可能会有多个车次。

如下例:

出发城市

到达城市

车次

距离(km)出发时间

到达时间

费用(元)

北京

石家庄

1000

287

0: 0

4: 6

62.5

北京

石家庄

1016

287

1: 0

4:35

所以每两个城市顶点之间就可能会有多条有向边,所以这个图也不会是 一个有

向简单图了。为了城市节点能够动态的扩充和删除不受影响,我对于顶点的储存采

用链表结构不使用顺序表结构,定义一个顶点链表类VertexList。这样,虽然链表查

询和其节点的删除的时间复杂度受到了一定的影响,但这样设计出来的铁路网图才

更具有一般性个实用性。对于查找的时间复杂度问题的解决,我在后面也会给出方案。

(2):城市顶点分析

对于每一城市来说,在全国的铁路网中,它就是一个火车站节点。每一个火车,它都应该会有自己的名字,过站的铁路线等。为了咨询系统管理和维护的方便,在 文本数据中,我们就人为的给每一个城市都编上序号id,每一个不同id对应了一

个不同的城市节点。由于每个城市的id都是唯一的,所以在顶点的链表结构里面,完全可以定义一个哈希表haxi[n],对于haxi[i]来说,它存储的就是id为i的城市

在内存中地址。这样,顶点链表在哈希表的支持下,就能完美解决查找、添加、删除的时间复杂度问题了。

在整个铁路网中,每一个城市就是顶点,每一个顶点,就是应该有一个边链表

用于储存此城市能到达所有城市的各个不同车次的信息,也就是各个不同的边。如:

出发城市编号 到达城市编号 车次 里程

费用

出发时刻

到达时刻

0

1000 287

62.5

0000

0246

0

1016 287

0060

0275

从上例我们可以看出,对于每个顶点的不同边来说,每一个不同的边就有一个独有

的车次。所以这样,对于边的储存,我们也可以采用哈希表结构。经观察发现,每 一车次都大于1000,所以,哈希表的id=车次-1000;对于编号为a的城市节点haxi[k]

来说,它储存的是为城市a中车次为:1000+k的一条边,边里面就有到达城市、出发和到达时间、费用、距离等等。

(3):边数据分析

对于图来讲,边就是一个逻辑结构,沟通顶点与顶点之间的关系。同时了,边还有其物理特性。他需要储存边的权值等,它需要开辟储存空间来存储数

据。在铁路网中,每两个城市之间不同的车次信息就是一条不同的边,所以,我需要把物理特性给单独列出来,成为一个类LineInformation,用于表示边

的物理信息。对于图中抽象的边,也需要定义一个类EdgeNode,用于沟通

图中原本孤立的顶点,使之变成一个完整的图

2.整体概要设计

前面,我提到了有顶点类station、顶点链表类VertexList、边的物理类LineInformation和边的逻辑类EdgeNode、火车线路类railway;对于整个完整的图类来说,还有两个主要的类没有提及,那就是图类RailwayNet和管理图类的类management。当然对于图中需要完成各个不同功能的时候,我还写了许多的辅助类。如查找两个车站之间所有路径时需要用到的LinStack,当然还有LinStack的类的基石StackNode类。整个咨询系统还有许多的结构体,这些结构体的功能我就不一一叙述了,详细可见源代码的注释。下面我就列出各个类的关系图

三.储存结构设计

1、存储结构的确定

数据结构的目的是有效组织和处理数据。为了有效组织和处理数据,先要分析多项式操作的特点和指针所占空间比例,然后确定最优的存储结构。

1.铁路网是由铁路和火车站构成,每个火车站相当于一个定点,每新建一条铁路就相当于新建定点之间的边

2.车站之间可以任意到达,可直接相连,也可以间接相连,且怎么连接是不固定的。3.综上所述,资源管理器的存储结构采用树形结构。

2、类的结构设计图:

management类图:

RailWay类图:

VertexList类图:

RailWay类图:

LineInformation类图:

EdgeNode结构图:

Station类图;

四、详细设计

1.管理类management

class management{ private:

vector m_city;vector m_edge;vector m_rail;RailwayNet m_graph;void input();void VertexDisplay();//边的输出函数,输出一条边的信息 void EdgeDisplay(EdgeNode *edge);//输出函数,被 RailwayDisplay()调用

void NextDisplay(EdgeNode* edge, LinStack & UsedTrainNumber, int a);void RailwayDisplay();void SearchStation();void SearchRail();void EditStation();void EditRail();void EditInformation();void ShortestCost();void ShortestTime();void SearchAll(vector & AllPath);void PathDispaly(vector & path);void OrderOnCost();void OrderOnTime();public: 2.图类RailwayNet //全国铁路信息网类(邻接表图类)class RailwayNet{ private:

//私有的函数,以深度优先遍历的方式寻找两点之间的所有路径

void DepthFirstSearchPath(vector & pa, time_and_cost_path & p, VertexList vertex;//顶点链表 vector m_rail;EdgeNode *edge, int terminal, LinStack & UsedVertex);

//私有函数,以Dijkastra算法寻找最节省时间的路径

void ShortestCost(vector & OptimalPath, int origin, int terminal);// 获取起点origin到终点terminal的最少用时 void ShortestTime(int origin, int terminal);void ShortestTime2(vector & OptimalPath, int origin, int terminal);//快速排序

void QuickSort(vector & AllPath, int low, int high, int option);public:

};

VertexList & Vertex(){ return vertex;} vector & GetRail(){ return m_rail;} //插入顶点

void InsertVertex(station* s);//在顶点v1和v2之间插入一条边(边的起点为v1,终点为v2)void InsertEdge(int v1, int v2, EdgeNode* & ed);//删除编号为id的城市顶点 void DeleteVertex(int id);//删除边edge

void DeleteEdge(int v1, int v2);//创建一个邻接表图

void CreateGraph(RailwayNet & graph, vector & city, vector //输出图

void display(RailwayNet & graph);//返回顶点v1和v2的第一条边

EdgeNode* const GetFirstEdge(int v1, int v2);//获取起点origin到终点terminal的最少费用

float GetShortestCost(int origin, int terminal, LineInformation & edge);//获取边路径path中的用时

int GetPathTime(vector & path);//获取边路径path中的费用

float GetPathCost(vector & path);//对vector中的元素按照要求排序【option为 1 表示以最省钱方式,为 2 表示以最省时方式】 void Sort(vector & AllPath, int option);//求点origin到terminal的所有路径

void GetAllPath(vector & AllPath, int origin, int terminal);//求点origin到terminal的最短“路径”(路程最短或时间最省)【使用Dijkastra算法】 void BestOption(vector & OptimalPath, int option, int origin, int & edge, vector & rail);terminal);3.顶点链表类

//顶点链表类 class VertexList{ private:

station *head;//头指针

int size;//链表的大小(元素的个数)

station* haxi[1000];//哈希表,内存有节点的地址(哈希表中的下标与对应城市节点的ID相等)public:

};VertexList();~VertexList();station* & GetHead(){ return head;} int & GetSize(){ return size;} //按照id从小到大的顺序将city插入链表中 void insert(station* city);//删除城市编号为id的节点 void Delete(int id);//根据城市的id获取城市节点 station* GetVertex(int id);station** GetVertexHaxi(){ return haxi;} int IsVertexExist(int id);

4.顶点类

class station{ private:

int m_size;//边链表的大小

EdgeNode* haxi[100];//以此车站为始发站的边的哈希表(下标为:车次-1000)vector ha2;//以此车站为终点的边在其哈希表中的下标 station();//默认构造函数

station(string na, int i);//构造函数 station(const station & sta);//复制构造函数 void Delete();//删除函数 //接口函数 station* prior;//指向上一个车站 station *next;//指向下一个车站 EdgeNode *head;//指向第一条边节点 string m_name;int m_id;vector m_rail;public:

};string & GetName(){ return m_name;} int & GetId(){ return m_id;} vector & GetRail(){ return m_rail;} station* & GetPrior(){ return prior;} station* & GetNext(){ return next;} EdgeNode* & GetHead(){ return head;} int & GetSize(){ return m_size;} EdgeNode** GetHaxi(){ return haxi;} vector & GetHa(){ return ha2;} 5.边节点类EdgeNode //边结点结构体 struct EdgeNode{

LineInformation information;EdgeNode *next;//下一个边结点 EdgeNode *prior;//上一个边节点

};

6.边物理类LineInformation

class LineInformation{ private:

int m_DepartId;//出发城市编号 int m_ArriveId;//到达城市编号 int m_TrainNumber;//车次 int m_distance;//车程 float m_cost;//费用 int m_DepartTime;//出发时间 int m_ArriveTime;//到达时间

//默认构造函数 int DepartId=0, int ArriveId=0,LineInformation(int DepartId = 0, int ArriveId = 0, int Train = 0, int distance =-1, //复制构造函数

LineInformation(const LineInformation & l);~LineInformation(){};LineInformation operator=(const LineInformation& e);//接口函数

int & GetDepartTime(){ return m_DepartTime;} int & GetArriveTime(){ return m_ArriveTime;} int & GetTrainNumber(){ return m_TrainNumber;} public: float cost = 0, int DepartTime =-1, int ArriveTime =-1);

};int & GetDepartId(){ return m_DepartId;} int & GetArriveId(){ return m_ArriveId;} int & GetDistance(){ return m_distance;} float & GetCost(){ return m_cost;}

7.火车线路类railway

class railway{ private:

};string m_name;//火车线名

vector m_station;//线路进过的火车站的id railway(string s = “ ”):m_name(s){} string & GetName();vector & GetStation();void Delete(int a);public:

8.自定义栈类

template class LinStack;template class StackNode{

};

template class LinStack{ private: friend class LinStack;T data;

//定义类LinStack为友元

//数据元素 private: StackNode *next;

//指针

//前视定义,否则友元无法定义

//模板类型为T

public: //构造函数1,用于构造头结点

StackNode(StackNode *ptrNext = NULL);//构造函数2,用于构造其他结点

StackNode(const T& item, StackNode *ptrNext = NULL);~StackNode(){};

};StackNode *head;int size;

//头指针 //数据元素个数 //构造函数 public: LinStack(void);~LinStack(void);T Pop(void);

//析构函数 //入栈 //出栈 //取栈顶元素 //堆栈非空否 void Push(const T& item);T GetTop(void)const;

int NotEmpty(void)const;

bool IsInStack(T a);//判断元素a是否在栈中 void Empty();//清空栈

int GetSize();//获取栈中元素的个数 void display();//输出栈中元素

五、用户手册

1.本程序运行在Windows操作系统下,VS2013,按F7编译,F5运行。

2.在程序运行前有预设函数,最好选择预设函数,然后进行测试。

3.在菜单中选择你想进的功能,然后输入前面的数字即可。

用户菜单如下:

*****************************全国铁路交通咨询模拟**************************** 1: 显示所有车站信息

2: 显示所有车次信息(包括时刻表)

3: 查询车站信息“

4: 查询两个城市之间的铁路信息

5: 增加或删除车站

6: 增加或删除铁路信息

7: 增加、删除或修改时刻表、距离和价格

8: 寻找两城市间最省钱的一条路径

9: 寻找两城市间最省时间的一条路径

10:寻找两城市间所有路径(按费用从低到高排序输出)

11:寻找两城市间所有路径(按所用时间从少到多排序输出)

12: 退出咨询系统”

*****************************************************************************"

六、测试数据

1.用户菜单

在输入指令一栏输入你想要使用的功能的数字编号。如:输入1 功能为:显示所有车站信息

由于数据过多,这里只截取部分输出

输入指令:2 功能:查询所有车次信息

数据量太大,也只截取部分输出。

输入指令:3 功能:查询车站信息

车站信息有:

1.从此车站出发各个车次信息。2.从其他车站出发到达此车站的信息

输入指令:4 功能:查询两个车站之间的信息

查询的时候,是由先后顺序的,先输入的是出发城市,后输入的到达城市

输入指令:5 功能:增加或删除车站

样例1:增加成功

样例2:增加失败

错误原因:编号输入错误 编号id为12:九龙

所以此编号已有城市占用,输入错误

样例3:删除成功

现在可查询广州的信息

发现广州此时已不存在,删除成功

样例4:删除失败

错误原因:id为31 的城市不存在

输入指令:6 功能:增加或删除铁路信息

样例1:增加失败

失败原因:id为1的城市已删除,不能再城市1余城市6之间增加铁路

样例2:增加成功

此时新建铁路状态:还有铁路线,没有车次 注:想要铁路线有火车运行,必须补充车次信息

样例3:删除成功

样例4:删除失败

失败原因:不存在从城市9到城市13的铁路

输入指令:7 功能:增加、删除或修改时刻表、距离和价格

测试样例:

可查询修改后的价格 出发城市:6 株洲 到达城市:5 长沙

车次为:1022的信息中 价格:999 修改成功!

输入指令:8 功能:寻找两城市间最省钱的路劲

输入指令:9 功能:寻找两城市间最省时间的路劲

输入指令:10 功能:寻找两城市间所有路径(按费用从低到高排序输出)

数据过多,取前二十条显示,我也只截取前一部分数据

输入指令:11 功能:寻找两城市间所有路径(按所用时间从少到多排序输出)

数据过多,取前二十条显示,我也只截取前一部分数据

注:后面的测试时前面面修改后的结果,所以,计算的结果和初始化数据计算的结果可能会不一致,这是因为只是可能计算会用到我修改后的数据,所以存在不一致的问题。

七、心得体会

篇2:数据结构课程设计实习报告-银行业务模拟

课程设计报告

题 目: ATM模拟银行

学生姓名(学号): 代小龙(20***1)安梓玮(20***7)侯硕(20***5)

专 业: 信息管理与信息系统

班 级: 18信管(一)班

指导教师: 申晨

信息管理与工程系

2019年01月02日

基于Java的ATM模拟银行开发与设计

摘要:

自动取款机又称ATM,意思是自动柜员机,因大部分用于取款,又称自动取款机。它是一种利用磁性代码卡或智能卡实现金融交易的自助服务,代替银行柜面人员的工作。可提取现金、查询存款余额、进行账户之间资金转账、余额查询等工作;还可以进行现金存款(实时入账)、中间业务等工作。持卡人可以根据密码办理自动取款、查询余额、转账、现金存款,更改密码,缴纳手机话费等业务。我们在这次课程设计上运用了JAVA以及 SQL Server 2012进行设计。.该系统是站在用户的角度来实现取款,存款,转账,修改密码,定期存款,查询余额多个页面的实现,页面的实现满足了银行基本的业务需求,使银行工作规范化,自动化,在系统页面设计方面,我们使得系统的功能操作简单,用户体验较好。

窗体底端

关键字:ATM模拟机,用户,管理员,页面设计,JAVA,sql server,Eclipse集成开发环境下开发系统

目 录 项目简介与分工 1

1.1 项目简介 1

1.1.1 系统开发需求 1

1.1.2系统具体事务 1

1.1.3 系统开发环境要求 1

1.2 项目分工 2 项目设计方案 3 项目功能实现 4

3.1数据库的实现 4

3.2主要功能实现 5

3.2.1主界面 5

3.2.2普通用户存款界面 9

3.2.3用户转账 11

3.2.4手机缴费 16

3.2.5用户取款 19

3.2.6冻结 24

3.2.7开户 26

3.2.8销户 30项目总结及展望 33 心得体会 34

参 考 文 献 35 项目简介与分工

1.1 项目简介

本系统采用JAVA语言编写测试完成,基本上在字符界面下模拟了ATM系统的相关实现。主要模拟银行ATM机系统功能,主要有查阅、转账、取款、存款、添加用户、删除用户、修改密码、冻结用户,管理员解冻、手动手机费缴费等功能

1.1.1 系统开发需求

随着市场经济的发展,经济信息化程度的不断深入,银行的传统业务己愈来

愈不能满足银行客户的需要。同时,随着国内银行机构的大量增加,我国的银行业面临更加激烈的同业竞争,如何提供更多的金融产品和更优质的服务,如何吸引更多的客户,如何利用计算机技术加强银行帐户信息管理,提高银行的工作效率和业务竟争能力是摆在各家银行面前的一个迫切需要解诀的问题。随着信息技术对银行业的渗透和促进,银行卡业务近年来得到“迅猛发展,银行卡发卡量、交易量大幅激增,ATM设备数量也随之增加。

1.1.2系统具体事务

用户:用户存款、取款、转账、余额信息查询、修改密码、手机话费的缴费并与数据库实时同步。

管理员:对用户账号的冻结以及解冻并询问是否修改密码、开户与销户、与数据库实时同步。

1.1.3 系统开发环境要求

    .操作系统:Windows系统

    .开发语言:Java、SQL server

    .数据库:SQLServer2012

    .软件:eclipse

1.2 项目分工

代小龙:管理员的开户,销户,冻结,用户明细,JDBC的连接

安梓玮:存款,转账,查询余额,电话缴费,撰写报告

侯硕:取款,用户界面美化,撰写报告 项目设计方案

实现ATM机的基本功能,包括:查询余额、存款、取款、转账、用户明细、手机缴费以及管理员开户、销户等操作,等基本功能;

查询余额:连接数据库,根据与数据库内数据相同的正确的用户名和密码登录查询对应的余额;转账,存取款的金额必须为100或者是100的整数倍,操作完成后会实时更新数据库内相应的内容。

修改密码:在旧密码相同的情况下,新密码和确认密码也相同的情况下,密码修改完成。

转账:可以转账任何金额,但是当转账金额小于余额时,转账失败。

手机缴费:需要缴费的手机号需时已经存在的,可以存任意金额。

管理员操作的基本功能包括对银行卡开户、销户、冻结、解冻、修改管理员密码等的操作,并在数据库内实时更新。项目功能实现

3.1数据库的实现

card表:主要是用户银行卡的信息,包括账号、密码、余额、是否被冻结、存款余额,其中account是varchar型的主键。

details表:主要是户主名account,日期和资金明细。

GLY表:包含所有管理员的信息。并对管理员的account设为主键。

3.2主要功能实现

3.2.1登录界面

package atm_client;

import java.awt.Font;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.InetAddress;

import java.net.Socket;

import java.net.UnknownHostException;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JPasswordField;

import javax.swing.JTextField;

import comm.Card;

import comm.CardGLY;

public class Login extends JFrame {

JTextField tfAccount;

JPasswordField tfPwd;

JButton btOK,btCancel,btGLY;

Card currCard;

CardGLY currCardGLY;

private int count=0;

public void init(){

//界面

JLabel IAccount,IPwd,Itag;

IAccount= new JLabel(”账号:“);

IPwd= new JLabel(”密码:“);

Itag=new JLabel(”欢迎登录ATM系统“);

tfAccount = new JTextField();

tfPwd =new JPasswordField();

btOK=new JButton(”普通登录“);

btGLY=new JButton(”管理员登录“);

btCancel =new JButton(”取消“);

Itag.setFont(new Font(”“,Font.CENTER_BASELINE, 20));

btGLY.setFont(new Font(”“,Font.CENTER_BASELINE, 12));

btOK.setFont(new Font(”“,Font.CENTER_BASELINE, 12));

btCancel.setFont(new Font(”“,Font.CENTER_BASELINE, 12));

IAccount.setFont(new Font(”“,Font.CENTER_BASELINE, 18));

tfAccount.setFont(new Font(”“,Font.CENTER_BASELINE, 18));

tfPwd.setFont(new Font(”“,Font.CENTER_BASELINE, 18));

IPwd.setFont(new Font(”“,Font.CENTER_BASELINE, 18));

JPanel panelOne = new JPanel(null);

panelOne.setOpaque(false);

Itag.setBounds(120,15,350,30);

btOK.setBounds(40, 270, 100, 40);

btGLY.setBounds(160,270,100,40);

btCancel.setBounds(280,270,100,40);

tfAccount.setBounds(160,100,160,40);

IAccount.setBounds(90,105,80,40);

IPwd.setBounds(90, 165,80, 40);

tfPwd.setBounds(160,160,160,40);

panelOne.add(Itag);

panelOne.add(IPwd);

panelOne.add(IAccount);

panelOne.add(btCancel);

panelOne.add(btGLY);

panelOne.add(btOK);

panelOne.add(tfAccount);

panelOne.add(tfPwd);

this.add(panelOne);

this.setTitle(”精神小伙银行“);

this.setBounds(700, 250, 450, 400);

this.setVisible(true);

//监听

//普通用户登录

btOK.addActionListener(new ActionListener(){

@Override

public void actionPerformed(ActionEvent e){

// TODO Auto-generated method stub

String account=tfAccount.getText();

String pwd=new String(tfPwd.getPassword());

BufferedReader br=null;

PrintWriter pw=null;

String strEcho=”“;

try {

Socket s=new Socket(InetAddress.getByName(”127.0.0.1“), 8009);

br=new BufferedReader(new InputStreamReader(s.getInputStream()));

pw=new PrintWriter(s.getOutputStream());

pw.write(”Loginrn“);

pw.write(account+”rn“);

pw.write(pwd+”rn“);

pw.flush();

strEcho=br.readLine();

if(strEcho.equals(”1“)){

JOptionPane.showMessageDialog(Login.this, ”对不起,您的账号有误!“);

tfAccount.setText(”“);

tfPwd.setText(”“);

}else if(strEcho.equals(”2“)){

float money =Float.parseFloat(br.readLine());

String dongjie=br.readLine();

String name=br.readLine();

currCard=new Card(account,pwd,money,dongjie,name);

JOptionPane.showMessageDialog(Login.this, ”欢迎登录河北金苑银行!“);

Login.this.dispose();

new MainFrame(br,pw,currCard).init();

}else if(strEcho.equals(”3“)){

count++;

if(count==3){

JOptionPane.showMessageDialog(Login.this, ”对不起,密码错误3次,您的卡已被冻结!请联系管理员“);

pw.write(”dongjiern“);

pw.flush();

Login.this.dispose();

}else {

JOptionPane.showMessageDialog(Login.this,”密码错误,请重新输入“);

String c=String.valueOf(count);

pw.write(c+”rn“);

pw.flush();

}

}else if(strEcho.equals(”4“)){

JOptionPane.showMessageDialog(Login.this,”对不起,您的卡已被冻结,请联系管理员“);

Login.this.dispose();

}

} catch(UnknownHostException e1){

// TODO Auto-generated catch block

e1.printStackTrace();

} catch(IOException e1){

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

});

//管理员登录

btGLY.addActionListener(new ActionListener(){

@Override

public void actionPerformed(ActionEvent e){

// TODO Auto-generated method stub

String account=tfAccount.getText();

String pwd=new String(tfPwd.getPassword());

BufferedReader br=null;

PrintWriter pw=null;

String strEcho=”“;

try {

Socket s=new Socket(InetAddress.getByName(”127.0.0.1“), 8009);

br=new BufferedReader(new InputStreamReader(s.getInputStream()));

pw=new PrintWriter(s.getOutputStream());

pw.write(”GLYrn“);

pw.write(account+”rn“);

pw.write(pwd+”rn“);

pw.flush();

strEcho=br.readLine();

if(strEcho.equals(”9“)){

JOptionPane.showMessageDialog(Login.this, ”对不起,您的账号有误!“);

tfAccount.setText(”“);

tfPwd.setText(”“);

}else if(strEcho.equals(”8“)){

JOptionPane.showMessageDialog(Login.this,”您已经以管理员身份登录!“);

Login.this.dispose();

new MainFrameGLY(br,pw,currCardGLY).init();

}else if(strEcho.equals(”7“)){

JOptionPane.showMessageDialog(Login.this,”您的密码错误“);

}

} catch(UnknownHostException e1){

// TODO Auto-generated catch block

e1.printStackTrace();

} catch(IOException e1){

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

});

btCancel.addActionListener(new ActionListener(){

@Override

public void actionPerformed(ActionEvent e){

// TODO Auto-generated method stub

Login.this.dispose();

}

});

}

public static void main(String[] args){

new Login().init();

}

}

3.2.2普通存款界面

package atm_client;

import java.awt.Color;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.PrintWriter;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JTextField;

import comm.Card;

import atm_client.Take;

public class Save extends JFrame implements ActionListener{

// 存款界面按钮

JTextField tfmoney;

private JButton bt000,bt001,bt002,bt003,bt004,bt005,bt006,bt007,bt008,bt009;

private JButton bt100,bt200,bt300,bt500,bt1000;

private JButton btOK,btCancel,btRetry;

BufferedReader br;

PrintWriter pw;

Card currCard;

public Save(BufferedReader br,PrintWriter pw,Card currCard){

this.br=br;

this.pw=pw;

this.currCard=currCard;

}

public void init(){

JPanel panelTake = new JPanel(null);

panelTake.setBackground(new Color(119,119,253));

JLabel lblqukuan = new JLabel(”请输入您的存款数:“);

panelTake.add(lblqukuan);

lblqukuan.setBounds(115, 20, 150, 30);

lblqukuan=new JLabel(”提示:只能是100元或100元的整数倍。“);

panelTake.add(lblqukuan);

lblqukuan.setBounds(115, 50, 300, 30);

tfmoney=new JTextField(12);

tfmoney.setEnabled(false);

panelTake.add(tfmoney);

tfmoney.setBounds(115,90,200,30);

bt100=new JButton(”100“);

panelTake.add(bt100);

bt100.addActionListener(this);

bt100.setBounds(45,190,60,30);

bt200=new JButton(”200“);

panelTake.add(bt200);

bt200.addActionListener(this);

bt200.setBounds(115,190,60,30);

bt300=new JButton(”300“);

panelTake.add(bt300);

bt300.addActionListener(this);

bt300.setBounds(185,190,60,30);

bt500=new JButton(”500“);

panelTake.add(bt500);

bt500.addActionListener(this);

bt500.setBounds(255,190,60,30);

bt1000=new JButton(”1000“);

panelTake.add(bt1000);

bt1000.addActionListener(this);

bt1000.setBounds(325,190,65,30);

bt001=new JButton(”1“);

panelTake.add(bt001);

bt001.addActionListener(this);

bt001.setBounds(45,230,60,30);

bt002=new JButton(”2“);

panelTake.add(bt002);

bt002.addActionListener(this);

bt002.setBounds(115,230,60,30);

bt003=new JButton(”3“);

panelTake.add(bt003);

bt003.addActionListener(this);

bt003.setBounds(185,230,60,30);

bt004=new JButton(”4“);

panelTake.add(bt004);

bt004.addActionListener(this);

bt004.setBounds(255,230,60,30);

bt005=new JButton(”5“);

panelTake.add(bt005);

bt005.addActionListener(this);

bt005.setBounds(325,230,65,30);

bt006=new JButton(”6“);

panelTake.add(bt006);

bt006.addActionListener(this);

bt006.setBounds(45,270,60,30);

bt007=new JButton(”7“);

panelTake.add(bt007);

bt007.addActionListener(this);

bt007.setBounds(115,270,60,30);

bt008=new JButton(”8“);

panelTake.add(bt008);

bt008.addActionListener(this);

bt008.setBounds(185,270,60,30);

bt009=new JButton(”9“);

panelTake.add(bt009);

bt009.addActionListener(this);

bt009.setBounds(255,270,60,30);

bt000=new JButton(”0“);

panelTake.add(bt000);

bt000.addActionListener(this);

bt000.setBounds(325,270,65,30);

btOK=new JButton(”确定“);

panelTake.add(btOK);

btOK.addActionListener(this);

btOK.setBounds(70,140,80,30);

btRetry=new JButton(”重输“);

panelTake.add(btRetry);

btRetry.addActionListener(this);

btRetry.setBounds(175,140,80,30);

btCancel=new JButton(”返回“);

panelTake.add(btCancel);

btCancel.addActionListener(this);

btCancel.setBounds(280,140,80,30);

this.setTitle(”存款!“);

this.add(panelTake);

this.setSize(435,350);

this.setVisible(true);

this.setLocation(500, 250);

}

@Override

public void actionPerformed(ActionEvent arg0){

// TODO Auto-generated method stub

if(arg0.getSource()==bt100||arg0.getSource()==bt200||arg0.getSource()==bt300||arg0.getSource()==bt500||arg0.getSource()==bt1000)

tfmoney.setText(arg0.getActionCommand());

else if(arg0.getSource()==bt000||arg0.getSource()==bt001||arg0.getSource()==bt002||arg0.getSource()==bt003||arg0.getSource()==bt004||arg0.getSource()==bt005||arg0.getSource()==bt006||arg0.getSource()==bt007||arg0.getSource()==bt008||arg0.getSource()==bt009){

tfmoney.setText(tfmoney.getText()+arg0.getActionCommand());

}else if(arg0.getSource()==btOK){

int saveMoney=Integer.parseInt(tfmoney.getText());

if(saveMoney%100!=0){

JOptionPane.showMessageDialog(Save.this, ”对不起,您输入的金额不符合规定!“);

tfmoney.setText(”“);

}

else{

//发送新的账户信息给服务器

pw.write(”savern“);

pw.write(saveMoney+”rn“);

pw.flush();

//等待响应,更新当前登录账号

String strEcho=”“;

try {

strEcho = br.readLine();

if(strEcho.equals(”Success“)){

currCard.setMoney(currCard.getMoney()+saveMoney);

JOptionPane.showMessageDialog(null, ”恭喜你成功存款“+saveMoney+”元n当前账户余额为:“+currCard.getMoney());

tfmoney.setText(”“);

} else if(strEcho.equals(”Failure“)){

JOptionPane.showMessageDialog(Save.this,”存款失败“);

}

} catch(IOException e){

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}else if(arg0.getSource()==btCancel){

Save.this.dispose();

new MainFrame(br,pw,currCard).init();

}else if(arg0.getSource()==btRetry){

tfmoney.setText(”“);

}

}

}

3.2.3用户转账界面

package atm_client;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.PrintWriter;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JTextField;

import comm.Card;

public class Trans extends JFrame {

JTextField Taccount,Tmoney;

JButton btOk,btCancel;

JLabel lAccount,lMoney;

BufferedReader br;

PrintWriter pw;

Card currCard;

public Trans(BufferedReader br,PrintWriter pw,Card currCard){

this.br=br;

this.pw=pw;

this.currCard=currCard;

}

public void init(){

JPanel panelTrans=new JPanel(null);

panelTrans.setLayout(new GridLayout(3,2));

lAccount =new JLabel(”账户:“);

lMoney =new JLabel(”金额:“);

btOk = new JButton(”确定“);

btCancel = new JButton(”取消“);

Taccount=new JTextField();

Tmoney = new JTextField();

panelTrans.add(lAccount);

panelTrans.add(Taccount);

panelTrans.add(lMoney);

panelTrans.add(Tmoney);

panelTrans.add(btOk);

panelTrans.add(btCancel);

this.add(panelTrans);

this.setTitle(”转账!“);

this.setSize(300,160);

this.setLocation(500, 250);

this.setVisible(true);

//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

btOk.addActionListener(new ActionListener(){

@Override

public void actionPerformed(ActionEvent e){

// TODO Auto-generated method stub

if(Taccount.getText().equals(”“)){

JOptionPane.showMessageDialog(Trans.this, ”请输入账号“);

}else if(Tmoney.getText().equals(”“)){

JOptionPane.showMessageDialog(Trans.this, ”请输入金额“);

}else {

pw.write(”transrn“);

pw.write(Taccount.getText()+”rn“);

pw.write(Tmoney.getText()+”rn“);

pw.flush();

String strEcho=”“;

try {

strEcho=br.readLine();

if(strEcho.equals(”Success“)){

currCard.setMoney(currCard.getMoney()-Float.parseFloat(Tmoney.getText()));

JOptionPane.showMessageDialog(Trans.this, ”转账成功“);

}else if(strEcho.equals(”1“)){

JOptionPane.showMessageDialog(Trans.this, ”账号不存在“);

}else if(strEcho.equals(”2“)){

JOptionPane.showMessageDialog(Trans.this,”不能向自己转账“);

}else if(strEcho.equals(”3“)){

JOptionPane.showMessageDialog(Trans.this,”余额不足“);

}else if(strEcho.equals(”Fuilure“)){

JOptionPane.showMessageDialog(Trans.this,”转账失败“);

}

} catch(IOException e1){

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

}

});

btCancel.addActionListener(new ActionListener(){

@Override

public void actionPerformed(ActionEvent e){

// TODO Auto-generated method stub

Trans.this.dispose();

}

});

}

}

3.2.4手机缴费

package atm_client;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.PrintWriter;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JTextField;

import comm.Card;

public class Communi extends JFrame{

JTextField TNumber,Tmoney;

JButton btOk,btCancel;

JLabel INumber,lMoney;

BufferedReader br;

PrintWriter pw;

Card currCard;

public Communi(BufferedReader br,PrintWriter pw,Card currCard){

this.br=br;

this.pw=pw;

this.currCard=currCard;

}

public void init(){

JPanel panelTrans=new JPanel(null);

panelTrans.setLayout(new GridLayout(3,2));

INumber =new JLabel(”账户:“);

lMoney =new JLabel(”金额:“);

btOk = new JButton(”确定“);

btCancel = new JButton(”取消“);

TNumber=new JTextField();

Tmoney = new JTextField();

panelTrans.add(INumber);

panelTrans.add(TNumber);

panelTrans.add(lMoney);

panelTrans.add(Tmoney);

panelTrans.add(btOk);

panelTrans.add(btCancel);

this.add(panelTrans);

this.setTitle(”手机缴费!“);

this.setSize(300,160);

this.setLocation(500, 250);

this.setVisible(true);

//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

btOk.addActionListener(new ActionListener(){

@Override

public void actionPerformed(ActionEvent e){

// TODO Auto-generated method stub

if(TNumber.getText().equals(”“)){

JOptionPane.showMessageDialog(Communi.this, ”请输入手机号“);//导入类——消息对话框

}else if(Tmoney.getText().equals(”“)){

JOptionPane.showMessageDialog(Communi.this, ”请输入金额“);

}else {

pw.write(”communirn“);

pw.write(TNumber.getText()+”rn“);

pw.write(Tmoney.getText()+”rn“);

pw.flush();

String strEcho=”“;

try {

strEcho=br.readLine();

if(strEcho.equals(”Success“)){

currCard.setMoney(currCard.getMoney()-Float.parseFloat(Tmoney.getText()));

JOptionPane.showMessageDialog(Communi.this, ”充值成功“);

Communi.this.dispose();

}else if(strEcho.equals(”1“)){

JOptionPane.showMessageDialog(Communi.this, ”手机号不存在“);

}else if(strEcho.equals(”2“)){

JOptionPane.showMessageDialog(Communi.this,”余额不足“);

}else if(strEcho.equals(”Fuilure“)){

JOptionPane.showMessageDialog(Communi.this,”充值失败“);

}

} catch(IOException e1){

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

}

});

btCancel.addActionListener(new ActionListener(){

@Override

public void actionPerformed(ActionEvent e){

// TODO Auto-generated method stub

Communi.this.dispose();

}

});

}

}

3.2.5用户取款

package atm_client;

import java.awt.Color;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.PrintWriter;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JTextField;

import comm.Card;

import atm_client.Take;

public class Take extends JFrame implements ActionListener{

// 取款界面按钮

JTextField tfmoney;

private JButton bt000,bt001,bt002,bt003,bt004,bt005,bt006,bt007,bt008,bt009;

private JButton bt100,bt200,bt300,bt500,bt1000;

private JButton btOK,btCancel,btRetry;

BufferedReader br;

PrintWriter pw;

Card currCard;

public Take(BufferedReader br,PrintWriter pw,Card currCard){

this.br=br;

this.pw=pw;

this.currCard=currCard;

}

public void init(){

JPanel panelTake = new JPanel(null);

panelTake.setBackground(new Color(119,119,253));

JLabel lblqukuan = new JLabel(”请输入您要取的钱数:“);

panelTake.add(lblqukuan);

lblqukuan.setBounds(115, 20, 150, 30);

lblqukuan=new JLabel(”提示:只能是100元或100元的整数倍。“);

panelTake.add(lblqukuan);

lblqukuan.setBounds(115, 50, 300, 30);

tfmoney=new JTextField(12);

tfmoney.setEnabled(false);

panelTake.add(tfmoney);

tfmoney.setBounds(115,90,200,30);

bt100=new JButton(”100“);

panelTake.add(bt100);

bt100.addActionListener(this);

bt100.setBounds(45,190,60,30);

bt200=new JButton(”200“);

panelTake.add(bt200);

bt200.addActionListener(this);

bt200.setBounds(115,190,60,30);

bt300=new JButton(”300“);

panelTake.add(bt300);

bt300.addActionListener(this);

bt300.setBounds(185,190,60,30);

bt500=new JButton(”500“);

panelTake.add(bt500);

bt500.addActionListener(this);

bt500.setBounds(255,190,60,30);

bt1000=new JButton(”1000“);

panelTake.add(bt1000);

bt1000.addActionListener(this);

bt1000.setBounds(325,190,65,30);

bt001=new JButton(”1“);

panelTake.add(bt001);

bt001.addActionListener(this);

bt001.setBounds(45,230,60,30);

bt002=new JButton(”2“);

panelTake.add(bt002);

bt002.addActionListener(this);

bt002.setBounds(115,230,60,30);

bt003=new JButton(”3“);

panelTake.add(bt003);

bt003.addActionListener(this);

bt003.setBounds(185,230,60,30);

bt004=new JButton(”4“);

panelTake.add(bt004);

bt004.addActionListener(this);

bt004.setBounds(255,230,60,30);

bt005=new JButton(”5“);

panelTake.add(bt005);

bt005.addActionListener(this);

bt005.setBounds(325,230,65,30);

bt006=new JButton(”6“);

panelTake.add(bt006);

bt006.addActionListener(this);

bt006.setBounds(45,270,60,30);

bt007=new JButton(”7“);

panelTake.add(bt007);

bt007.addActionListener(this);

bt007.setBounds(115,270,60,30);

bt008=new JButton(”8“);

panelTake.add(bt008);

bt008.addActionListener(this);

bt008.setBounds(185,270,60,30);

bt009=new JButton(”9“);

panelTake.add(bt009);

bt009.addActionListener(this);

bt009.setBounds(255,270,60,30);

bt000=new JButton(”0“);

panelTake.add(bt000);

bt000.addActionListener(this);

bt000.setBounds(325,270,65,30);

btOK=new JButton(”确定“);

panelTake.add(btOK);

btOK.addActionListener(this);

btOK.setBounds(70,140,80,30);

btRetry=new JButton(”重输“);

panelTake.add(btRetry);

btRetry.addActionListener(this);

btRetry.setBounds(175,140,80,30);

btCancel=new JButton(”返回“);

panelTake.add(btCancel);

btCancel.addActionListener(this);

btCancel.setBounds(280,140,80,30);

this.setTitle(”取款!“);

this.add(panelTake);

this.setSize(435,350);

this.setVisible(true);

this.setLocation(500, 250);

}

@Override

public void actionPerformed(ActionEvent arg0){

// TODO Auto-generated method stub

if(arg0.getSource()==bt100||arg0.getSource()==bt200||arg0.getSource()==bt300||arg0.getSource()==bt500||arg0.getSource()==bt1000)

tfmoney.setText(arg0.getActionCommand());

else if(arg0.getSource()==bt000||arg0.getSource()==bt001||arg0.getSource()==bt002||arg0.getSource()==bt003||arg0.getSource()==bt004||arg0.getSource()==bt005||arg0.getSource()==bt006||arg0.getSource()==bt007||arg0.getSource()==bt008||arg0.getSource()==bt009){

tfmoney.setText(tfmoney.getText()+arg0.getActionCommand());

}else if(arg0.getSource()==btOK){

int takeMoney=Integer.parseInt(tfmoney.getText());

if(currCard.getMoney()

JOptionPane.showMessageDialog(Take.this, ”对不起,您的余额不足!“);

tfmoney.setText(”“);

}else if(takeMoney%100!=0){

JOptionPane.showMessageDialog(Take.this, ”对不起,您输入的金额不符合规定!“);

tfmoney.setText(”“);

}

else{

//发送新的账户信息给服务器

pw.write(”takern“);

pw.write(takeMoney+”rn“);

pw.flush();

//等待响应,更新当前登录账号

String strEcho=”“;

try {

strEcho = br.readLine();

if(strEcho.equals(”Success“)){

currCard.setMoney(currCard.getMoney()-takeMoney);

JOptionPane.showMessageDialog(null, ”恭喜你成功取款“+takeMoney+”元n当前账户余额为:“+currCard.getMoney());

tfmoney.setText(”“);

} else if(strEcho.equals(”Failure“)){

JOptionPane.showMessageDialog(Take.this,”取款失败“);

}

} catch(IOException e){

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}else if(arg0.getSource()==btCancel){

Take.this.dispose();

}else if(arg0.getSource()==btRetry){

tfmoney.setText(”“);

}

}

}

}

3.2.6冻结

package atm_client;

import java.awt.Font;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.PrintWriter;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JTextField;

import comm.CardGLY;

public class DongJie extends JFrame implements ActionListener{

JButton btOK,btCancel;

JTextField Account,Name;

BufferedReader br;

PrintWriter pw;

CardGLY currCardGLY;

public DongJie(BufferedReader br,PrintWriter pw,CardGLY currCardGLY){

this.br=br;

this.pw=pw;

this.currCardGLY=currCardGLY;

}

public void init(){

JLabel IAccount,IName,Itag;

IAccount =new JLabel(”账号“);

IName=new JLabel(”用户名“);

Itag=new JLabel(”请输入要冻结的账号及用户名“);

Account =new JTextField();

Name =new JTextField();

btOK=new JButton(”确定“);

btCancel=new JButton(”取消“);

Itag.setFont(new Font(”“,Font.CENTER_BASELINE, 20));

btOK.setFont(new Font(”“,Font.CENTER_BASELINE, 12));

btCancel.setFont(new Font(”“,Font.CENTER_BASELINE, 12));

IAccount.setFont(new Font(”“,Font.CENTER_BASELINE, 18));

Account.setFont(new Font(”“,Font.CENTER_BASELINE, 18));

Name.setFont(new Font(”“,Font.CENTER_BASELINE, 18));

IName.setFont(new Font(”“,Font.CENTER_BASELINE, 18));

JPanel panelOne = new JPanel(null);

panelOne.setOpaque(false);

Itag.setBounds(80,15,350,30);

btOK.setBounds(80, 270, 100, 40);

btCancel.setBounds(240,270,100,40);

Account.setBounds(160,100,160,40);

IAccount.setBounds(90,105,80,40);

IName.setBounds(90, 165,80, 40);

Name.setBounds(160,160,160,40);

btCancel.addActionListener(this);

btOK.addActionListener(this);

panelOne.add(Itag);

panelOne.add(IName);

panelOne.add(IAccount);

panelOne.add(btCancel);

panelOne.add(btOK);

panelOne.add(Account);

panelOne.add(Name);

this.add(panelOne);

this.setTitle(”代小龙+安梓玮+侯硕“);

this.setBounds(700, 250, 450, 400);

this.setVisible(true);

}

@Override

public void actionPerformed(ActionEvent arg0){

// TODO Auto-generated method stub

if(arg0.getSource()==btOK){

if(Account.getText().equals(”“)||Name.getText().equals(”“)){

JOptionPane.showMessageDialog(DongJie.this,”用户名和账号不能为空“);

}else {

pw.write(”dongjiern“);

pw.write(Account.getText()+”rn“);

pw.write(Name.getText()+”rn“);

pw.flush();

System.out.println(Name.getText()+Name.getText());

try {

String strEcho=br.readLine();

if(strEcho.equals(”9“)){

JOptionPane.showMessageDialog(DongJie.this, ”账号不存在,请重新输入“);

Account.setText(”“);

Name.setText(”“);

}else if(strEcho.equals(”7“)){

JOptionPane.showMessageDialog(DongJie.this, ”冻结成功“);

DongJie.this.dispose();

new Ask(br, pw, currCardGLY).init();

}else if(strEcho.equals(”5“)){

JOptionPane.showMessageDialog(DongJie.this, ”用户名错误“);

Name.setText(”“);

}else if(strEcho.equals(”6“)){

JOptionPane.showMessageDialog(DongJie.this, ”您的账号已被冻结“);

DongJie.this.dispose();

}else if(strEcho.equals(”8“)){

JOptionPane.showMessageDialog(DongJie.this, ”冻结失败“);

}

} catch(IOException e){

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}else if(arg0.getSource()==btCancel){

DongJie.this.dispose();

}

}

}

3.2.7开户

package atm_client;

import java.awt.Font;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.PrintWriter;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JPasswordField;

import javax.swing.JTextField;

import comm.CardGLY;

public class Open extends JFrame implements ActionListener{

JTextField tfname;//文本框

JTextField tfmoney;

JPasswordField tfpwd;//密码框

JPasswordField tfpwd1;

JButton btOK,btCancel;

CardGLY currCardGLY;

BufferedReader br;

PrintWriter pw;

public Open(BufferedReader br,PrintWriter pw,CardGLY currCardGLY){

this.br=br;

this.pw=pw;//文本字节流写入

this.currCardGLY=currCardGLY;

}

//初始化

public void init(){

JLabel Iname;//标签组件

JLabel Imoney;

JLabel Ipwd,Ipwd1;

JLabel Itag=new JLabel(”请输入要开户用户的基本信息“);

Ipwd=new JLabel(”密码:“);

Ipwd1=new JLabel(”确认密码“);

Iname=new JLabel(”姓名:“);

Imoney=new JLabel(”预存金额“);

tfname=new JTextField();

tfmoney=new JTextField();

btOK=new JButton(”确定“);

btCancel=new JButton(”取消“);

tfpwd=new JPasswordField();

tfpwd1=new JPasswordField();

Itag.setFont(new Font(”“,Font.CENTER_BASELINE, 20));

Iname.setFont(new Font(”“,Font.CENTER_BASELINE, 18));

tfmoney.setFont(new Font(”“,Font.CENTER_BASELINE, 18));

tfname.setFont(new Font(”“,Font.CENTER_BASELINE, 18));

tfpwd.setFont(new Font(”“,Font.CENTER_BASELINE, 18));

tfpwd1.setFont(new Font(”“,Font.CENTER_BASELINE, 18));

Ipwd.setFont(new Font(”“,Font.CENTER_BASELINE, 18));

Ipwd1.setFont(new Font(”“,Font.CENTER_BASELINE, 18));

Imoney.setFont(new Font(”“,Font.CENTER_BASELINE, 18));

btOK.setFont(new Font(”“,Font.CENTER_BASELINE, 12));

btCancel.setFont(new Font(”“,Font.CENTER_BASELINE, 12));

JPanel panelOne = new JPanel(null);

panelOne.setOpaque(false);//设置控件透明

Itag.setBounds(80,15,350,30);

Iname.setBounds(70,85,80,40);

tfname.setBounds(200,80,160,40);

Ipwd.setBounds(70, 135, 80, 40);

tfpwd.setBounds(200, 130, 160, 40);

Ipwd1.setBounds(70, 185,80, 40);

tfpwd1.setBounds(200, 180, 160, 40);

Imoney.setBounds(70, 235, 80, 40);

tfmoney.setBounds(200, 230, 160, 40);

btOK.setBounds(80, 280, 100, 40);

btCancel.setBounds(240,280,100,40);

btOK.addActionListener(this);

btCancel.addActionListener(this);

panelOne.add(Itag);

panelOne.add(Iname);

panelOne.add(Ipwd);

panelOne.add(Ipwd1);

panelOne.add(Imoney);

panelOne.add(tfname);

panelOne.add(tfpwd);

panelOne.add(tfpwd1);

panelOne.add(tfmoney);

panelOne.add(btCancel);

panelOne.add(btOK);

this.add(panelOne);

this.setTitle(”代小龙+安梓玮+侯硕“);

this.setBounds(700, 250, 450, 400);

this.setVisible(true);

}

//监听button.@Override //socket编程,client发出消息,在Server中接收,并且在接收时采用readline()方法时需要注意,//readline()方法要读到分隔符才会完成读取操作,用pw.write,或者pw.println

public void actionPerformed(ActionEvent arg0){

// TODO Auto-generated method stub

if(arg0.getSource()==btOK){ //如果事件源始按钮OK,则进行下面操作

if(tfname.getText().equals(”“)||tfpwd.getText().equals(”“)||tfpwd.getText().equals(”“)){

JOptionPane.showMessageDialog(Open.this,”账号密码不能为空“);//导入类——消息对话框

}else if(!tfpwd.getText().equals(tfpwd1.getText())){

JOptionPane.showMessageDialog(Open.this,”两次输入的密码不相同“);

tfpwd.setText(”“);

tfpwd1.setText(”“);

}else if(tfmoney.getText().equals(”“)){

JOptionPane.showMessageDialog(Open.this,”若不需要存钱,请输入0“);

}else if(tfpwd.getText().equals(tfpwd1.getText())&&!tfname.getText().equals(”“)&&!tfmoney.getText().equals(”“)){

pw.write(”openrn“);//在服务器获取输入流写入一段字符

pw.write(tfname.getText()+”rn“);

pw.write(tfpwd.getText()+”rn“);

pw.write(tfmoney.getText()+”rn“);

pw.flush();

try {

String strEcho=br.readLine();

if(strEcho.equals(”1“)){

JOptionPane.showMessageDialog(Open.this,”开户失败!有用户名重复的可能!“);

}else if(strEcho.equals(”2“)){

String account=br.readLine();

JOptionPane.showMessageDialog(Open.this,”开户成功!您的账号为“+account+”,请牢记您的账号“);

Open.this.dispose();

}

} catch(IOException e){

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}else if(arg0.getSource()==btCancel){

Open.this.dispose();

}

}

}

3.2.8销户

package atm_client;

import java.awt.Font;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.PrintWriter;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JPasswordField;

import javax.swing.JTextField;

import comm.CardGLY;

public class Close extends JFrame implements ActionListener {

BufferedReader br;

PrintWriter pw;

CardGLY currCardGLY;

private JButton btOK,btCancel;

private JTextField tfAccount;

private JPasswordField tfPwd;

public Close(BufferedReader br,PrintWriter pw,CardGLY currCardGLY){

this.br=br;

this.pw=pw;

this.currCardGLY=currCardGLY;

}

public void init(){

JLabel IAccount,IPwd,Itag;

IAccount= new JLabel(”账号:“);

IPwd= new JLabel(”密码:“);

Itag=new JLabel(”请输入要销户的账号及密码“);

tfAccount=new JTextField();

tfPwd=new JPasswordField();

btOK=new JButton(”确定“);

btCancel=new JButton(”取消“);

Itag.setFont(new Font(”“,Font.CENTER_BASELINE, 20));

btOK.setFont(new Font(”“,Font.CENTER_BASELINE, 12));

btCancel.setFont(new Font(”“,Font.CENTER_BASELINE, 12));

IAccount.setFont(new Font(”“,Font.CENTER_BASELINE, 18));

tfAccount.setFont(new Font(”“,Font.CENTER_BASELINE, 18));

tfPwd.setFont(new Font(”“,Font.CENTER_BASELINE, 18));

IPwd.setFont(new Font(”“,Font.CENTER_BASELINE, 18));

JPanel panelOne = new JPanel(null);

panelOne.setOpaque(false);

Itag.setBounds(120,15,350,30);

btOK.setBounds(80, 270, 100, 40);

btCancel.setBounds(240,270,100,40);

tfAccount.setBounds(160,100,160,40);

IAccount.setBounds(90,105,80,40);

IPwd.setBounds(90, 165,80, 40);

tfPwd.setBounds(160,160,160,40);

btCancel.addActionListener(this);

btOK.addActionListener(this);

panelOne.add(Itag);

panelOne.add(IPwd);

panelOne.add(IAccount);

panelOne.add(btCancel);

panelOne.add(btOK);

panelOne.add(tfAccount);

panelOne.add(tfPwd);

this.add(panelOne);

this.setTitle(”代小龙+安梓玮+侯硕“);

this.setBounds(700, 250, 450, 400);

this.setVisible(true);

}

@Override

public void actionPerformed(ActionEvent arg0){

// TODO Auto-generated method stub

if(arg0.getSource()==btOK){

String account=tfAccount.getText();

String pwd=new String(tfPwd.getPassword());

pw.write(”closern“);

pw.write(account+”rn“);

pw.write(pwd+”rn“);

pw.flush();

String strEcho;

try {

strEcho=br.readLine();

if(strEcho.equals(”7“)){

JOptionPane.showMessageDialog(Close.this, ”销户成功“);

}else if(strEcho.equals(”9“)){

JOptionPane.showMessageDialog(Close.this, ”您输入的账号不存在“);

tfAccount.setText(”“);

tfPwd.setText(”“);

}else if(strEcho.equals(”8“)){

JOptionPane.showMessageDialog(Close.this, ”销户失败“);

}else if(strEcho.equals(”6“)){

JOptionPane.showMessageDialog(Close.this, ”您的密码错误“);

tfPwd.setText(”");

}

} catch(IOException e){

// TODO Auto-generated catch block

e.printStackTrace();

}

}else if(arg0.getSource()==btCancel){

Close.this.dispose();

}

}

}项目总结及展望

本次课程设计主要做的是模拟ATM机,在实现传统的ATM机基础功能的情况下,我们还增添新的内容,用户明细以及话费缴费。实现了普通用户与管理员登录。管理员对用户账号的冻结,解冻。连接数据库并实时更新。将普通用户和管理员的信息分别放在两个表中。

在实现过程中,由于考虑和实现不充分,表的结构过于简单。在实现话费充值上号码预存实现的不人性化,我们后续会加以完善。在接下来的学习中,我们想更加完善ATM功能,并增加新的特色,完善界面。心得体会

通过这次的c/s程序设计,从了解用户需求,到设计数据库,编写代码,连接数据库,调试程序,实现功能我们都得到了很大的进步,我们遇到过很多Bug,我们请教别人,上网查询,最终可以说是得到解决,把老师在课上所授的知识应用到实践中去。c/s程序设计中,是java与连接数据库的统一。为了防止开户生成的账号重复,我们在数据库中对相应的表设置主键,以免重复,在明细中,我们修复了很多问题,克服了很多困难,最终得以实现,感谢申晨老师的帮助,让我们更加深入了解Java语言设计并应用到实践中去。感受到了Java语言编程的魅力,在接下来的时间中,我们不会停止对Java网络项目编程的探索和学习。

参 考 文 献

[1] Eric.Java编程思想[M].第4版.机械工业出版社, 机械工业出版社

[2] JAVA从入门到精通[M].北京:清华大学出版社, 2005.4

[3]萨师煊,王珊.《数据库系统概论》.高等教育出版社,2002.2

[4] Brown.JAVA编程指南(第二版)[M].电子工业出版社,2003.3

[5] 清宏计算机工作室.JAVA编程技巧[M].机械工业出版社,2004.5

篇3:数据结构课程设计实习报告-银行业务模拟

1.设置背景

最近10年,我国城镇化率以每年增加1.35个百分点速度快速推进,正处于城镇化高速发展时期。 面对市民不断增加的休闲游憩设施需求和不断增强的改善人居环境意愿,风景园林专业设计人才在持续增加,迫切需要加快对风景园林专业人才的培养, 以有效缩短学校到设计岗位的过渡期,更好更快地适应社会发展的需要。

快速城镇化加大了城市建设力度,风景园林专业人才需求急剧膨胀。在企业发展中,对刚应聘到单位的应届毕业生,要了解设计院所及企业的组织结构、业务特点、工作要求以及人员构成等多方面的情况,普遍有1-2年的适应期。部分应届毕业生由于没有对设计单位工作特点的足够认知或思想准备,所需要的时间甚至更长,更有甚者会重复选择单位、盲目选择单位等,造成个人发展障碍和企业成本上升等一系列突出的问题。

2.设置课程的安排

本课程安排在园林专业四年级上学期,为期8周的时间。主要了解风景园林规划与设计从前期准备到概念方案、方案成果设计、扩初设计、施工设计、 现场施工配合与验收的相关内容特点与要求。综合了解园林规划与设计、施工组织与管理等环节对知识结构和能力需求。园林设计师业务实践实习采取将学生分派到设计院(所、公司),由院方指定园林设计师负责带培。

3.课程设置的积极效应

通过对往届园林专业学生实习状况的总结,以及对指导教师、实习单位指导教师的相关了解,在实习单位、学生、教师三方面均具有明显的积极作用。

3.1就实习单位而言

(1)提前对设计人员选定和了解。通过接收业务实践实习的学生,有目标的对学生进行跟踪和考察,通过对其适应能力、团队意识、创新能力、性格爱好的评估,确定实习学生是否适合企业单位, 减少了简单通过招聘会面试简单考评的盲目性和随机性,为企业找到更多更适合的人选。

(2)加强对教学理论知识的认知。在校生虽然在动手能力、交流交际方面略显薄弱,但经过长期的在校学习,尤其是对专业知识的认知程度相对较深、较为熟练,正处于理论结合或转化为实践的过程。 而企业员工尤其是资历较老的员工对书本知识,尤其是更新较快的新理论,接触或接收渠道相对偏少。 为此,在指导实习学生的过程中,通过频度较高的、 多方面的相互交流,对原有理论知识或新的理论,也是一个较好的再认识、再审视的过程。

(3)密切了与专业教师的联系。作为学校在校学习和在企业实习的负责人,企业与专业教师有了更多的接触机会和交流话题,相互联系增多,为相关企业的业务攻关、项目合作等,提供了更多的智力技术支撑或来源的渠道,有利于企业更好更快地发展。

3.2就实习学生而言

(1)了解设计院所业务流程。通过一段时间的学习与观察,针对设计院所或相关企业的工作模式、 业务流程、时间需要等方面有了直观的认识,并对其中的知识需求、行为方式等有了一定的了解,为后期学习或继续深造,增加了阅历积累。

(2)强化了学习目标。通过对学生的观察以及对任课教师的了解,经过业务实践实习,学生学习积极性明显提高,以前下课一哄而散、讨论一言不发、 提问一无所知的现象明显改善,课上商议方案十分投入、课后围住老师咨询成为常态。针对实用性较强的苏州传统宅园设计、生态规划等课程的学习目标极为明确、积极性尤为突出。

(3)提升了实践知识。在校期间对于专业知识的接触与学习较多,实践机会依然相对较少,在企业期间很多学生从看现场、资料收集整理等最基础工作做起,到方案形成、设计修改、交流研讨、投标竞标、甚至是施工组织和后期的养护管理等不同环节,均有不同程度的涉及,对相关实践知识也有了一定的接触和积累,为后期找工作或学习打下了基础。

3.3就实习指导教师而言

(1)明确了教学重点与应用性。实践实习是对以往教学成果及效果的检验手段之一,通过对学生实习所反馈问题的总结,可以有效对教学手段、教学方法进行改进和提高,考察部分教学内容是否为学生所很好掌握。此外,也可以更好的提示教师, 在兼顾教学内容完整、全面的基础上,结合当前实践需要及社会发展,明确突出教学重点,增加新的教学内容,服务业社会行业需求。

(2)简化了学习积极性的调动。学生实习将“要学生学”转变为“学生要学”,学生的主动性、积极性明显提高,目的性更强,以往教学中要“扯着耳朵灌输”的现象大为改观,教与学的过程更为轻松和流畅。

(3)拓展了专业技术服务空间。教学过程相对封闭,所服务对象更多为学生,而通过扩展与企业的交流,相关技术或研究成果可以更好地服务实践、 服务社会,加快了转化过程;同时当前许多项目的申报或研究,也要求校企联合、校地合作,本身也是一个互利互惠、合作双赢的过程。

4.课程设置存在的问题

(1)设计院所提供的实践机会相对较少、待遇偏低

设计院所针对临时性实习学生的安排也存在一定问题,学生受到自身知识水平和能力相对较弱的限制,在实习单位所能胜任或接触的工作也大部分较为简单或十分有限,为此,锻炼效果或机会获取整体还相对较差;此外实习学生由于以学习为主, 工作量相对较少,实习单位所提供待遇也相对较少, 部分单位可以提供基本生活费,为数不少单位未给予物质待遇。

(2)学生对所学习知识的转化意识、能力较差

学生在实习单位遇到业务问题或具体实践操作往往存在一定畏惧或信心不足的心理。尽管大多问题或所需知识在校上课期间均有涉及或反复强调, 对知识转化的能力和意识相对较弱,比如制图的标准性问题、规划设计的规范性问题等,仍有必要不断加强。

(3)教师对实习单位学生的管理与辅导相对受限

受到地理距离的限制以教师数量及精力的影响, 教师对外出实习学生的指导相对偏少或明显滞后, 学生遇到业务问题或生活困难时,也难以及时有效地的通过异地的教师得到解决,更多是通过实习单位指导教师或后期指导教师集中回复。

5.课程发展对策

5.1优化教学培养计划

(1)适当调整理论实践教学环节比例。通过多种渠道开展对培养计划的调整,尽可能增加实践环节课时数量,部分课程可以在室外公园、广场、居住区或是古典园林开展,也可以让学生进入到一线工程施工现场,认知施工流程,抑或是加长业务实践实习时间,让学生更多参与实践。

(2)增加校外兼职教师对培养的参与。通过评聘校外兼职教师的手段,吸引更多具有一线实践经验的设计师走进校园,将最新的行业发展动向、企业实际需求、专业技术知识介绍给学生或者专业教师,有利于学生对专业动态的了解、有利于教师对教学内容的优化。

(3)鼓励学生业余、假期到企业实习。学校教育与企业实习在目的性和应用性上存在一定差异, 从二年级开始,有针对性地加强对学生到风景园林相关设计公司去认知、实习的引导,鼓励假期等业余时间更多接触实践。

5.2加强校企合作平台建设

(1)加强与高水平、知名设计院所的合作。高水平、知名设计院所,尤其是设计大师,是当前行业发展的引领者和风向标,对教学导向的影响力、 学生学习的号召力均具有举足轻重的作用。同时, 良好校企合作平台的建设对于学科发展实力的提升、 服务于地方社会经济发展服务水平,同样具有积极的推动作用。此外,还可以有效提高学生实践学习水平,提高培养质量,进一步强化学生的就业渠道。

(2)加大对小微设计企业的技术支持力度。当前,国家高度重视自主创业及小微企业发展,不仅能够有效解决大学生就业问题,也是经济、产业发展的必要基础。学校可通过在人才支撑、技术投入方面的优惠,助力设计类小微企业发展。

5.3充实师资力量

(1)加大“双师型”教师的引进。学科队伍建设中,不仅需要引进学术领军人物、知名院校博士, 更应注重具有丰富一线实践经历工程师、高级工程师的吸引,尤其是从事过诸多重大风景园林项目的主要规划设计、管理人才,形成实践、学术两根主线, 两个方面又互补、互促的优良氛围。

(2)提高实践实习指导教师的投入力度。在条件允许的情况下,不断增加参与实践环节的教师数量,达到一对十,甚至是一对五,教师实践环节课时工作量考评亦可适当增加权重系数,提升教师投入实践环节积极性,提供更为细致、周到的指导和及时的问题解决咨询。

5.4建立对实习单位的遴选机制

(1)完善与实习单位的联系渠道。采取专人负责的形式,分派教师与若干固定单位的夫人联系, 主要负责学生实习的数量、形式以及主要存在问题等,并就校企合作、人才交流、创业基地等事宜开展合作,以此稳定联系渠道与机制,破解渠道不畅、 联系滞后、人员变动等一系列问题。

(2)积极吸收学生对实习单位的评价意见。学生是实习单位与学校的纽带、直接参与者,学生对实习单位的真实状态、满意度的评价,具有重要的参考,重点吸收学生对单位参与实习的积极性、责任感、学习深度、规范性以及生活待遇等的建议, 以此作为今后校企合作、技术服务对象遴选的重要参考。

篇4:数据结构课程设计实习报告-银行业务模拟

关键词:旅行社 业务模拟教学 模块

2012年9月,在校企深度融合的合作机制带动下,笔者学校与市一家旅行社共同在校园内建立了旅行社营业部。校企合作共建营业部的目标十分明确:旅行社可以扩大自身经营网点,同时就近学校,又可以在用人方面得到便利条件。学校热衷于旅行社营业部的建立则是想为学生提供一个具有实践课堂、为学生服务的场所。

在学校主体目标的指导下,笔者积极开展了旅行社业务模拟课程。它对于笔者学校导游专业而言是一门崭新的课程,在课堂设计上也要求有创新性、实践性。因此在课程展开的过程中,笔者充分利用旅行社营业部这一间 “实景教室”,采用模拟工作的教学方法,将旅行社业务有关内容教给学生,学生也通过实际操作深刻体会和掌握了旅行社的相关业务的操作。通过两年的教学改进过程,笔者将旅行社业务模拟课程总结为设计线路、推销线路、前厅接待、途中障碍处理、客户关系跟踪五个模块,供同行参考。

一、设计线路

旅行社的产品是线路和服务,而且必然是先有线路,并且线路在有效实施后才能有服务的机会。因此,设计旅游线路是学生学习中要实现的第一个教学模块。笔者按照以下几个步骤完成该部分教学。

步骤一:让学生谈一下自己的旅游需求,让学生从客户的角度分析游客的旅游需求。

完成这个步骤需要2个课时。每个学生或者每个小组都可以谈出自己的旅游想法。在讲述想法的同时,教师帮助学生整理并总结旅游需求要点,形成清晰的旅游需求表达思路,为设计线路打下基础。

在这一环节中,教师要明确达到的教学目的包括:锻炼学生提炼想法及有序表达的能力;引导学生共同总结表述内容,将内容提纲化,为线路的设计提供清晰思路;如果是团队完成的话,在讨论旅游想法的过程中,学生要学会放弃个人想法,向团队目标妥协,强化学生团队合作的意识和能力。

步骤二:了解如何设计线路,有针对性地设计出旅游线路。

在步骤一顺利有效完成的前提下,步骤二的完成就会水到渠成。第二步骤需要2个课时,必须要分小组来完成。

在本环节中,教师要明确达到的教学目的包括:通过小组讨论,锻炼学生积极表达自己想法的胆量;通过老师对学生初步设计线路的整理和总结,提高学生对设计线路要素的深刻理解;通过进行线路的设计,上网查找资料,可以有力激发学生的主动学习潜力,调动他们学习的积极性。

在教学成果方面则体现为若干条相对完整的线路。在条件允许的情况下,选择一条线路进行体验,使学生体会到自己的设计成果并寻找不足,从而可以进一步完善战略。

二、推销线路

线路设计出来后,要面向市场宣传。宣传的形式有很多,目前旅行社采用比较多的是大众传媒广告、户外广告、自办宣传广告等。在众多的宣传推介方法中,便于学习和体验的是散发旅游线路宣传页。因此在第二个教学模块中,笔者主要是让学生通过散发宣传页推销线路的形式体验推销过程。同样在此模块中有如下几个步骤需要完成。

步骤一:学习线路。

本步骤需要2课时。为了使体验活动更真实,在教学前与旅行社联系,得到大量宣传页支持。学习线路从认识景点开始,例如旅游目的地的特色景点、特色物产,甚至当地的风情民俗都要求学生了解,以便在给顾客解释线路时能应对自如。资料查找结束后,学生按要求进行提炼总结以方便最后的宣传介绍。

本次课程要明确达到的教学目的包括:通过小组成员分工协作,利用网络查找资料,对资料进行整理,使学生体会完成工作任务时,要互帮互助,分工合理;通过自主学习的方式,提高学生的学习能力,也能进一步强化有关景点的知识,扩大学生知识面;将所查找资料有序整理,锻炼学生的总结概括能力。

教学成果是小组代表利用小组预先在大白纸上提炼出的提纲性内容,对旅游线路进行现场脱稿陈诉。

步骤二:向路人推销线路。

在学习了线路知识后,教师组织学生走出校园,到社会中分区域进行线路宣传。此步骤最少需要6课时。此时教师可以给学生制定工作任务,例如:经过宣传,每小组能有10位顾客打电话或亲自到旅行社再次咨询旅游线路。

本次课程要明确达到的教学目的包括:锻炼学生接触陌生人,并向他们主动介绍线路的勇气;复习前期准备的景点知识;尝试有目的地与陌生人沟通。

以学生宣传记录作为此步骤的成果,宣传记录中要有顾客姓名、联系电话以及顾客的签字。

三、前厅接待

步骤一:模拟接待。

完成宣传后,会有部分顾客打电话再次咨询或直接到旅行社营业部进行咨询。因此接下来的教学模块便是前厅接待。在营业部内,学生模拟旅行社前厅接待员,企业工作人员模拟顾客,由这两个角色完成前厅接待的模拟课程。当模拟咨询结束后,工作人员要进行点评,现场为学生指出不足的地方和正确的接待方法。

本次课程要达到的教学目的包括:模拟解决顾客提出的问题,锻炼学生灵活应答的能力;通过工作人员的点评,认识到自己在咨询过程中的不足,为后期改正打基础。

在教学成果展示方面,将教师在整个模拟咨询环节中所拍照片做成PPT(有条件的话可以制作成视频)供学生观看,使学生看到自己在工作时的真实情景,提高学生的职业归属感。

步骤二:真实接待。

这一步骤需要明确说明让学生轮流接待真实顾客的要求。本次课程需要8课时。

本次课程要达到教学目的包括:让学生真实体验旅行社前厅接待工作,对自己将来可能要从事的职业能有初步感受;面对游客的刁难问题,锻炼学生对困难的承受能力和随机应变的能力。

教学成果展示同步骤一。

四、途中障碍处理

当顾客认同某一条线路并与旅行社签订合同后,旅行社接下来将会安排导游负责游客的整个行程。在旅游行程进行中,会遇到一些突发事件,需要导游及时有效地妥善解决。因此在途中障碍处理课程上,要着重培养学生处理突发事件的能力,锻炼学生处理问题的操作能力。此步骤需要8课时完成,课堂将采用情景模拟的方式完成。

本次课程要达到教学目的包括:提高处理突发事件的操作能力;培养学生妥善处理突发事件的能力。

教学成果展示过程为:学生以情景剧的方式,展示如何处理突发事件,并邀请企业业务骨干进行评价总结。

五、客户关系跟踪

在旅行社中有专人负责客户关系整理和跟踪的工作。这一工作在稳定老客户、挖掘潜在客户方面发挥着极其重要的作用,需要4课时。在完成这一环节时,主要是通过案例讲解的方法来完成。通过对相关案例的分析,让学生清醒地认识到客户关系跟踪做好,能够使旅行社保证稳定的客源,但要做好客户关系跟踪,则需要采用对新老客户不同的推介方法。

本次课程教师要达到的教学目的包括:使学生深刻体会到“客户关系跟踪”工作的重要性;初步掌握部分客户关系跟踪的工作方法。

教学成果展示过程为:每位学生整理出一份有关客户关系跟踪的方法以及要达到的效果说明。

以上是笔者对旅行社业务模拟课程授课过程的深刻体会,其中还有很多不足的地方,例如导游在行程中如何提高服务质量、旅行社如何提供特色服务等方面还需继续探索完成。

篇5:数据结构课程设计实习报告-银行业务模拟

课程名称:

操作系统原理

目:

编程序模拟银行家算法

名:

信息工程系

专业班级:

软件

名:

号:

指导教师:

2013年

X

X

学院信息工程系

课程名称:

操作系统原理课程设计

指导教师:

班级名称:

软件

开课系、教研室:

软件与信息安全

一、课程设计目的与任务

操作系统课程设计是《操作系统原理》课程的后续实践课程,旨在通过一周的实践训练,加深学生对理论课程中操作系统概念,原理和方法的理解,加强学生综合运用操作系统原理、Linux系统、C语言程序设计技术进行实际问题处理的能力,进一步提高学生进行分析问题和解决问题的能力,包含系统分析、系统设计、系统实现和系统测试的能力。

学生将在指导老师的指导下,完成从需求分析,系统设计,编码到测试的全过程。

二、课程设计的内容与基本要求

1、课程设计题目

编程序模拟银行家算法

2、课程设计内容

本课程设计要求在Linux操作系统,GCC编译环境下开发。

银行家算法是避免死锁的一种重要方法,本实验要求用用c/c++语言在Linux操作系统环境下编写和调试一个简单的银行家算法程序。加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。

思想:将一定数量的资金供多个用户周转使用,当用户对资金的最大申请量不超过现存资金时可接纳一个新客户,客户可以分期借款,但借款总数不能超过最大的申请量。银行家对客户的借款可以推迟支付,但是能够使客户在有限的时间内得到借款,客户得到所有的借款后能在有限的时间内归还。用银行家算法分配资源时,测试进程对资源的最大需求量,若现存资源能满足最大需求就满足当前进程的申请,否则推迟分配,这样能够保证至少有一个进程可以得到所需的全部资源而执行到结束,然后归还资源,若OS能保证所有进程在有限的时间内得到所需资源则称系统处于安全状态。

3、设计报告撰写格式要求:

1设计题目与要求

设计思想

3系统结构

数据结构的说明和模块的算法流程图

使用说明书(即用户手册):内容包含如何登录、退出、读、写等操作说明

运行结果和结果分析(其中包括实验的检查结果、程序的运行情况)

自我评价与总结

附录:程序清单,注意加注释(包括关键字、方法、变量等),在每个模块前加注释;

三、课程设计步骤及时间进度和场地安排

本课程设计将安排在第15周,教育技术中心。具体安排如下:

第一天

下发任务书,学生查阅资料

第二天

系统设计和原型开发

第三,四天

系统功能实现

第五天

系统调试

测试

打包和验收

四、课程设计考核及评分标准

课程设计考核将综合考虑学生考勤和参与度,系统设计方案正确性,系统设计和开发效果以及课程设计报告书的质量。具体评分标准如下:

设置六个评分点

(1)设计方案正确,具有可行性、创新性;

25分

(2)系统开发效果较好;

25分

(3)态度认真、刻苦钻研、遵守纪律;

10分

(4)设计报告规范、课程设计报告质量高、参考文献充分

20分

(5)课程设计答辩概念清晰,内容正确

10分

(6)课程设计期间的课堂考勤、答疑与统筹考虑。

10分

按上述六项分别记分后求和,总分按五级记分法记载最后成绩。

优秀(100~90分),良好(80~89分),中等(70~79分),及格(60~69分),不及格(0~59分)

1.题目要求与实验目的1.1

实验目的:

1.1.1进一步理解利用银行家算法避免死锁的问题;

1.1.2在了解和掌握银行家算法。

1.1.3理解和掌握安全序列、安全性算法

1.2

设计题目:

编程序模拟银行家算法

1.3

要求

本实验要求用用

c/c语言在Linux

操作系统环境下编写和调试一个简单的银行家算法程序。加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。

1.4

实验内容

1.4.1编写安全性算法;

1.4.2编写银行家算法,并编制银行家算法通用程序,将调试结果显示在计算机屏幕上,再检测和笔算的一致性。

设计思想

将一定数量的资金供多个用户周转使用,当用户对资金的最大申请量不超过现存资金时可接纳一个新客户,客户可以分期借款,但借款总数不能超过最大的申请量。银行家对客户的借款可以推迟支付,但是能够使客户在有限的时间内得到借款,客户得到所有的借款后能在有限的时间内归还。

用银行家算法分配资源时,测试进程对资源的最大需求量,若现存资源能满足最大需求就满足当前进程的申请,否则推迟分配,这样能够保证至少有一个进程可以得到所需的全部资源而执行到结束,然后归还资源,若OS能保证所有进程在有限的时间内得到所需资源则称系统处于安全状态。

3.需求分析

3.1问题描述:利用银行家算法模拟计算机系统分配资源的过程。

3.2要求:

3.2.11、以课本例题中数据为例,模拟资源分配过程。

3.2.2、系统中资源种类,各类资源数目,进程申请资源数目可任意输入,模拟资源分配过程。

4.系统结构

初始化函数init()开始

输入进程的数目m

输入资源种类n

输入每个进程最多所需的各种资源数

输入每个进程分配的资源数

输入各个资源现有数目

初始化函数init()结束

输入提示:

输入有误重新输入

5.数据结构的说明和模块的算法流程图

5.1

数据结构:

①可利用资源向量

Available

是个含有

m

个元素的数组,其中的每一个元素代表一类可利用的资源数目。如果

AvailablejK,则表示系统中现有

Rj

类资源

K

个。

②最大需求矩阵

Max

这是一个

n×m的矩阵,它定义了系统中

n

个进程中的每一个进程对

m

类资源的最大需求。如果

MaxijK,则表示进程

i

需要

Rj

类资源的最大数目为

K。

③分配矩阵

Allocation

这也是一个

n×m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果

AllocationijK,则表示进程

i

当前已分得

Rj

类资源的数目为

K。

④需求矩阵

Need。

这也是一个

n×m的矩阵,用以表示每一个进程尚需的各类资源数。如果NeedijK,则表示进程

i

还需要

Rj

类资源

K

个,才可以完成其任务。

5.2

程序流程图:

①、系统主要过程流程

预分配

安全?

实际分配打印输出

退出系统

Request[i]>Available[i]?

Request[i]>need[i]?

提出申请

打印输出此时刻资源分配情况

进入系统

输入:

1.继续分配

2.退出

进入初始化

②、安全性算法流程图

调用safty()函数

Work[]=Available[],Finish[]=False

Need[]<=work[]且Finsh[]=Falsse?

Work[]=work[]+Alloccation[],Finish[]=Ture

所有进程的Finsh[]=Ture?

实际分配输出安全序列并打印出

输出提示系统不安全

调用结束

用户手册

6.1

首先在终端中使用

vi

编辑器建立

c的源文件

6.2

然后使用

gcc

编辑器编译生成可执行文件

6.3

使用命令./当前名字,来执行

7.运行结果和结果分析

7.1

运行结果:

申请成功如图

2,申请失败如图

3:

申请金额在需求范围之内同意

申请金额在需求范围之外拒绝

7.2

结果分析

首先是自己定义

个用户所需的金额数,银行可以给用户贷款的总金额数是100,用户

Id

号的范围是在0

4,超过

之后的id

请求贷款,会显示拒绝提示信息,每个客户的贷款数量必须是在之前定义的范围之内,如果超出,也会出现错误提示,只有在规定的用户

id

和在客户所要求金额的范围之内请求,才会给予贷款,并且输出安全序列号。

8.自我评价与总结

一周的课程设计结束了。在这一周里,我收获很多,以前都是在自己的教室由我们自己的老师进行讲课,这次学校没有这样做,而是请的校外的老师给我们做课程设计,让我们体会一下真正的公司是怎样做业务的。在这一周里我做一个模拟银行家算法。我觉得在着手设计前设计的思路是很重要的。只有思路清晰才能进行下一阶段的设计。这样才能完成整个程序的设计,完成整个文报告的书写。

课程设计这几天学到的东西还真不少。以前不清楚的现在都暴露出来了。以前认为学了没用的东西现在也用到了。这次的课程设计使我进一步了解了调度与死锁的问题。以及有关资源申请的问题、避免死锁的具体实施方法。深入了解了银行家算法的资源申请和资源分配的过程及原则。保证系统处于安全状态。

经过本周的课程设计,我对操作系统的掌握又进了一步,收获了很多知识。,终于我了由于对

c

语言不够熟练,在试验过程中,进行了反复的修改和调试,解银行家算法的基本原理,并且在此次的课程设计中我又复习了一下

c

语言,加深了对它的了解,而且在课程设计的过程中我们同样学会了如何简单的操作与使用

Linux

操作系统,学习到了许多

Linux

操作系统中常用的一些密令。

这次的设计数据是通过一道实际的题目来体现银行家算法避免死锁的问题,先用银行家算法给其中一个进程分配资源,看它所请求的资源是否大于它的需求量,才和系统所能给的资源相比较.让进程形成一个安全队列看系统是否安全.再利用安全性算法检查此时系统是否安全。

操作系统的基本特征是并发与共享。系统允许多个进程并发执行,并且共享系统的软、硬件资源。为了最大限度的利用计算机系统的资源,操作系统应采用动态分配的策略,但是这样就容易因资源不足,分配不当而引起“死锁”。而我本次课程设计就是得用银行家算法来避免“死锁”。银行家算法就是一个分配资源的过程,使分配的序列不会产生死锁。此算法的中心思想是:按该法分配资源时,每次分配后总存在着一个进程,如果让它单独运行下去,必然可以获得它所需要的全部资源,也就是说,它能结束,而它结束后可以归还这类资源以满足其他申请者的需要。

通过这次实验,我体会到银行家算法的重要性,银行家算法是避免死锁的主要方法,其思路在很多方面都非常值得我来学习借鉴。

附录:

主要源程序

参考文献

[1]

张尧学主编.计算机操作系统教程(第三版).北京:清华大学出版社,2006

[2]

张尧学编.计算机操作系统教程(第三版)习题解答与实验指导.北京:清华大学出版社,2006

[3]

汤子瀛主编.计算机操作系统(第三版).西安:西安电子科技大学出版社,2001

[4]

张坤等编.操作系统实验教程.北京:清华大学出版社,2008

[5]

张丽芬等编.操作系统实验教程.北京:清华大学出版社,2006

[6]

屠祁等编.操作系统基础(第三版).北京:清华大学出版社,2000

[7]

冯耀霖等编.操作系统.西安:西安电子科技大学出版社,2001

[8]

左万历.计算机操作系统教程(第二版).北京:高等教育出版社,2004

[9]谭浩强.《C语言程序设计》.北京:清华大学出版社2003

[8]

庞丽华.《操作系统原理》(第四版).北京.华中科技大学出版社

2002

设计过程中质疑(或答辩)记载:

1.银行家算法的主要思想是什么?

答:一个进程进入系统时分配资源之前,判断系统是否是安全的,即看它所请求的资源是否大于它的最大需求量,若正常,则判断该进程所需剩余剩余量(包括本次申请)是否超出系统所掌握的剩余资源量,若不超出,则分配,否则等待。

2.银行家算法的主要问题是什么?

答:要求每个进程必须事先知道资源的最大需求量,而且,在系统运行过程中,考查每个进程对各类资源的申请需花费较多的时间。

3.在银行家算法中各个资源存在什么关系?

答:该进程所需要的资源数NEED[m][n]=MAX[m][n](该进程所需要的最多的资源数)-----ALLOCATION[m][n](该进程所占有的资源数)

指导教师评语:

签名:

篇6:数据结构课程设计实习报告-银行业务模拟

本学期的最后一门课程是进出口的实践模拟设计,我们在为期一周多的时间里,通过进入Simtrade模拟平台,进行模拟操作,主要是采用上机和指导老师随堂解答的实习模式,系统地对外贸进出口业务的流程进行了模拟实践。由于是通过电子商务的形式,再加上同学们可以自由地选择贸易对象、贸易方式、以及贸易规模和出口产品,并且同学之间讨价还价、安排生产和进行交易,可以根据自己的要求来赚钱,因此整个实习过程充满了趣味性。个人觉得这次的模拟实习既让我们增强了实践性,也让我们对以前学习过的知识更加的巩固了。

在实习中,我们利用simtrade这个虚拟贸易平台中,按照实习计划扮演进出口业务流程中的不同当事人,从而共同组成了模拟贸易环境。通过这样相互竞争和协作的角色扮演,我们将面对出口商、进口商、供应商甚至银行的日常工作,熟练掌握各种业务技巧,体会客户、供应商、银行和政府机构的互动关系,了解了国际贸易的物流、资金流和业务流的运作方式。在实习过程中,自己经历了从起初的不了解,到渐渐熟悉,到最后的非常快速的制单交易的适应过程,对此也是感慨良多,对贸易的五个角色也有了更深刻的认识,首先是出口商,这个角色是Simtrade里最难的了,有大量的单据要填,而且一不小心就会出错,但经过几笔业务练习,我已经能正确的填写各种单据;然后是进口商,进口商必须紧跟本国消费市场和国际贸易市场的变化,合理调配有限的资金,不断变化思路,凭借敏锐的感觉,选择最有利润的项目,加快公司的资金周转率,同时还要从选择可靠的业务伙伴开始,逐步完成具体的事务。这可是一项充满挑战和乐趣的工作;然后是供应商(工厂)供应商通过生产商品并且出售获得利润,所以对于他们来说,生产出市场需求的产品是最重要的,冒然生产产品会面对巨大的风险,而准确预测市场变化又有很大的困难,以销定产是一个很好的方式,又需要有广泛和稳定的客户资源;进出口地银行的工作是比较少的,只要开立信用证,转发信用证,审核单据付款就可以了,是比较简单的工作。

尽管实习的过程比较顺利,但在实习的过程中我也遇到了很多问题与困难,首先是预算与实际相差较大,在做贸易前一定要计算好了一切费用,选好贸易术语,最后再签定合同。但刚开始我们都是比较懵懂的,经常就是做出口商的在还没有调查进口商所在地市场的情况下就先去工厂进货了。如果工厂角色也没有做好预算,草草就签订了合同,那么可能出口商和工厂都赚不到钱。结果一看实习日志,预算能力还是相当地的差。为此,我仔细看了帮助材料,了解了预算表的制作方法,在以后的业务过程中,我认真制作每一份预算,使自己的预算能力大有提高;其次是填单错误量大,一次通过率较低。因为以前没有接触过各种单据,刚开始填的时候感觉很是麻烦,所以我们每个人在开始填单时都很慢。幸好这个实验有帮助,而且帮助很详细,我们开始都是参照这个帮助才能耐心把这个业务做下去。同时也找到了各种单据的填写方法,好多单据也有相同的部分,要做到完全一致,免得以后发生不必要的麻烦。但软件必定有其疏漏之处,有时我们明明填的很对,但正确率只有99%,给实验的继续进行带来了一定的困难;还有就是邮件问题,写的邮件太少,邮件内容过简单,这都是我们所没注意的问题。掌握外贸英文函电是非常重要的,在商务英语中,有的同学发的邮件不符合商务英语的规范,没有进行严格的还盘与发盘,仅仅经过一两次磋商就把业务做成了,这是不对的,也是不严谨的。如果不是实验而是真的贸易,正因为我们少发几个邮件,没有磋商仔细,可能会对方或自己造成很大的损失的。所以以后进入工作,一定要注意这个问题。

本次的进出口实习让我对国际贸易有了更深刻的体会,国际贸易的中间环节多,涉及面广,除交易双方当事人外,还涉及商检、运输、保险、金融、车站、港口和海关等部门以及各种中间商和代理商。如果哪个环节出了问题,就会影响整笔交易的正常进行,并有可能引起法律上的纠纷。另外,在国际贸易中,交易双方的成交量通常都比较大,而且交易的商品在运输过程中可能遭到各种自然灾害、意外事故和其它外来风险。所以通常还需要办理各种保险,以避免或减少经济损失。

作为专业课程的一部分,这次实习不但巩固了我们平时所学,也为我们日后的专业工作提供了非常实际的便利。作为一名大学生,应当具备较强的举一反三的能力,而在这些实习中,恰有不少单证的填写是相互联系、相互依靠的。因此,我们应当举一反三,利用诸多单证格式和填写原理类似这一特点,将各类单证的填制和审核紧密联系到一起。这样做无疑可以大大提高我们的学习效率。也可以使我们的实习结果相互对应,利于即使查缺补漏,保证单证记录内容的准确有效。我们也必须严格注意各类单据记载内容的一致,以单单一致、单证一致来求得结汇工作的顺利进行。

最后我认为,这次实习收获是丰富的。实习中的各类单证如信用证、汇票、海运提单、商业发票等等都是我们专业知识的凝聚和承载。因此,认真地履行实习要求,努力完成实习,不仅有利于我们巩固所学到的国际贸易实务专业知识,更利于我们预先观察日后工作中的主要内容、方法以及各种困难,利于我们察觉到自身存在的不足和缺陷,以便我们更好地进行学习和工作,利于我们更快地把所思所学转化为实践动手的能力,把专业知识和技能转变成工作能力和实际经验。

综上所述,通过这次实习,我掌握了很多日后工作所需的基本技能,检验了平时所学习的基础知识,衡量了个人的业务能力和水平,对贸易流程有了更深刻的理解,发觉了自身存在的不足和缺点。这于我来说无疑是受益匪浅的。虽然真正的贸易不会像这样顺利,但我相信,这次实习让我获得的经验、心得会促进我在以后的学习、工作中寻找到合理的方法和正确的方向。这次实习,使我不仅从个人能力,业务知识上有所提高,也了解到了团队精神、协作精神的重要性。

上一篇:销售员应有的十种心态下一篇:以就业为导向的高职教育论文