第一篇:面向对象程序设计—Java+ATM银行系统
南华大学
计算机科学与技术学院
课程设计报告
(2008 ~ 2009学年度
第一
学期)
课程名称 面向对象程序设计—Java 课程设计名称
组长 组员 组员
包伟辉 李
阳 包月涛
学号 学号 学号
20064440147 20064440119 20064440146 计算机061班
谭敏生
ATM银行系统
专业 计算机专业 班级 地点
宏辰7-103 教师
目 录
一、系统分析.................................................................................................................3 1.1 系统概述................................................3 1.2.系统需要解决的主要问题..................................3 1.3.系统应具备的基本功能....................................3 1.4.系统设计开发工具与环境..................................4
二、系统设计.................................................................................................................5 2.1.概要设计.................................................5 2.1.1 设计思想...............................................6 2.1.2 系统功能模块划分........................................6 2.1.3 ATM系统各模块图........................................6 2.1.4 数据库的逻辑设计........................................7 2.2详细设计.................................................8 2.2.1 管理员窗体模块组成......................................8 2.2.2 管理员模块窗体界面及相应代码.............................9 2.2.3 用户窗体模块组成.......................................17 2.2.4 用户模块窗体界面及相应代码..............................18
三、设计小结................................................23
四、参考文献:..............................................23
/ 23
一、系统分析
在信息高速发展的当今时代,ATM自动取款机已在日常生活中普遍存在,ATM是Automatic Teller Machine的缩写,意思是自动柜员机,因大部分用于取款,又称自动取款机。它是一种高度精密的机电一体化装置,利用磁性代码卡或智能卡实现金融交易的自助服务,代替银行柜台人员的工作。可提取现金、查询存款余额、进行账户之间资金划拨、余额查询等工作;还可以进行现金存款(实时入账)、支票存款(国内无)、存折补登、中间业务等工作。持卡人可以使用信用卡或储蓄卡,根据密码办理自动取款、查询余额、转账、现金存款,存折补登,购买基金,更改密码等业务。
要实现这样一个系统,首先应该进行需求分析,这样才能令设计出的软件满足用户的各项功能。下面就对在线考试系统的设计进行需求分析
1.1系统概述
ATM系统分为前台和后台,前台用于用户的登录以实现用户的取款、存款、转账、查询、修改、取卡等功能;后台用于管理员管理和维护用户的信息实现的功能为开户、销户、查询、修改用户的各种信息。
本系统主要以JAVA为开发平台,采用JAVA+ECLIPSE+ACCESS的开发模式,ATM系统以数据库为中心,由数据库控制整个系统的运作。
ATM取款系统的目的是在网络上搭建一个管理员管理系统和用户取款系统,针对不同的功能进行不同的操作。用户要取款时只需到ATM自动取款机上登录就可进行取款、存款、转账、查询、修改、取卡等操作,而管理员可在柜台前管理和维护用户的各种信息。
1.2 系统需要解决的主要问题
首先,因为ATM取款机是面向特定的某些对象的,所以用户到ATM取款机进入系统操作时应该进行身份验证,用户通过卡号验证进入ATM取款机系统后,应该能根据自己的需要进行取款、存款、转账、查询、修改、取卡等操作,对于每个用户来说,ATM自动取款机的功能都就是相同的,但个人需要操作并不相同。管理员进入管理员系统,可以查看和修改用户的信息,管理员系统是基于网络环境,卡号应从服务器的数据库随机抽取生成的。另外,管理员系统还应该对用户实现开户、销户、查询、修改等功能。
1.3 系统应具备的基本功能
1.3.1 用户基本功能
/ 23
用户登录:用户可以用卡及密码进行登录,登录后用户可以进行必要的操作。用户取款功能:用户可以根据自己的需要进行取款。用户存款功能:用户可以利用此功能存入相应的金额。用户查询功能:用户可以查询余额。
用户改密功能:用户可以用此功能修改自己银行卡的密码。用户取卡功能:用户操作完可取卡退出。
1.3.2 管理员基本功能
开户:管理员可以用此功能为用户办理银行卡。销户:管理员可取消用户对银行卡的使用权。查询:管理员可查询用户的基本信息。修改:管理员可以修改用户的基本信息。改密:管理员可进行自行改密。
1.3.3 该系统的额外功能
用户转帐功能:用户可以用这个功能进行卡与卡之间的金额转帐。管理员查看IP功能:管理员可查看当前IP地址。打印功能:可以打印出各种交易记录。
1.4 系统设计开发工具与环境
1.4.1.开发工具 Eclipse
1.4.2.开发环境 • • • • • 开发语言:Java、J2SE 数据库:Access 操作系统:Windows XP 客户端:IE 6.0 开发工具:Eclipse 硬件方面:
/ 23
处理器:Intel Pentium 166MX 或更高。
内存:512M以上。硬盘空间:1GB以上。显卡:SVGA显示适配器 软件方面:
操作系统:Windows 98/ME/2000/XP
二、系统设计
2.1 概要设计
上图为ATM银行系统总模块功能图
/ 23
2.1.1 设计思想
ATM取款系统需要满足来自两个方面的需求,这两个方面分别是管理员和用户。用户的需求是取款、存款、转账、查询、修改、取卡等功能;管理人员的功能较为复杂,包括对用户实现开户、销户、查询、修改和维护用户的各种信息。
用户可以根据自己的银行卡通过ATM机登录到用户系统,登录成功后可进行六种操作,分别是取款、存款、转账、查询、修改、取卡。不能查看他人的信息。这样就可以保证其他用户信息的保密性。
管理人员有对用户实现开户、销户、查询、修改和维护用户的各种信息等记录的权限,所以需对管理员登陆模块进行更多的考虑。
2.1.2 系统功能模块划分
一般可分为:
用户模块:包括取款模块、存款模块、转账模块、查询模块、修改模块、取卡模块。
管理员模块:包括文件模块、系统管理模块、操作模块、关于模块、交易记录模块。其中文件模块包括:开户、销户。系统模块包括:改密、注销。操作模块包括:查询、修改。关于模块包括:版本。交易模块包括:打印。(各模块功能图:见P5 2.1)
2.1.3 ATM银行系统各模块图
在概念设计阶段中,设计人员从用户的角度看待数据及处理要求和约束,产生一个反映用户观点的概念模式。然后再把概念模式转换成逻辑模式。将概念设计从设计过程中独立开来,使各阶段的任务相对单一化,设计复杂程度大大降低,不受特定DBMS的限制。
各个E-R图分析如下:
用户系统E-R实图
/ 23
管理员系统E-R实图
2.1.4 数据库的逻辑设计
由于概念设计的结果是ER图,DBMS一般采用关系型(我们所使用的MS ACCESS就是关系型的DBMS),因此数据库的逻辑设计过程就是把ER图转化为关系模式的过程。由于关系模型所具有的优点,逻辑设计可以充分运用关系数据库规范化理论,使设计过程形式化地进行。设计结果是一组关系模式的定义。1.数据字典
取款=卡号+密码+取款金额。查询=卡号+密码+查询余额。存款=卡号+密码+存款金额。改密=卡号+密码+旧密码+新密码。转账=卡号+密码+收款人卡号。
开户=客户编号+姓名+身份证+电话+地址+卡号+货币类型+存款类型+金额+密码+余额+开户日期
销户=卡号
打印=交易日期+卡号+交易类型+交易金额 2.具体表——数据库(Bank.mdb)
表一(管理员-admin)字段及内容
/ 23
表二(用户表-userInfo)字段及内容
表三(卡号表-cardInfo)字段及内容
表四(交易表-transInfo)字段及内容
2.2详细设计
2.2.1 管理员窗体模块组成
/ 23
1.文件模块
功能: 文件模块包括开户和销户两个小模块,开户可以为用户办理银行卡,销户可以取消用户的卡号。
2.系统管理模块
功能:系统管理模块包括改密和注销两个小模块,通过改密功能,管理员可自行修改密码,注销可返回到登录界。
3.操作模块
功能:操作模块包括查询、修改和查看IP三个小模块,其中,查询中还包括查询用户信息和查询卡信息模块;修改中还包括修改用户信息和修改卡信息模块;查看IP就是查看当前工作的IP。
4. 交易记录模块
功能:交易记录模块包括打印小模块,可以打印出用户各种交易情况。
2.2.2 管理员模块窗体界面及相应代码、窗体界面说明(1)登录界面
管理员登录由管理员名和密码构成,在管理员输入管理员名和密码后,系统首先验证输入字符的有效性,然后调用数据库查看此管理员名是否存在或密码是否正确,最后判断管理员权限确定操作员还是管理员,并赋与不同的权限。代码如下:
/ 23
代码如下:if(jTextField.getText().equals(“")||jPasswordField.getPassword().equals(”“)&&jPasswordField1.getPassword().equals(”“)){ JOptionPane.showMessageDialog(null, ”请先选择登陆角色!“);}else{
if(bb){ if(jTextField.getText().equals(”admin“)||jTextField.getText().equals(”admin1“)||jTextField.getText().equals(”admin2“)){
}
MFrm m=new MFrm();m.setVisible(true);close();Connection con;con=db.getConn();user=String.valueOf(jTextField.getText());String pass=String.valueOf(jPasswordField.getPassword());boolean bb=db.isValid(con, user, pass);}else{ if(i==0)else {
} } JOptionPane.showMessageDialog(null, ”该管理员不存在!“);} i--;JOptionPane.showMessageDialog(null, ”密码输错3次!请到柜台改密码!“);JOptionPane.showMessageDialog(null, ”密码错误!请重新输入!“);}else{(2)主界面
/ 23
(3)开户界面
代码如下:
public void del(){
Sql dbc = new Sql();dbc.getConn();int row = jTable.getSelectedRow();System.out.println(row);if(row < 0){ javax.swing.JOptionPane.showMessageDialog(null, ”您还没有选中要删除的信息!“);return;} Object value = jTable.getValueAt(row, 0);String id = value.toString();System.out.println(id);int returnValue;returnValue = JOptionPane.showConfirmDialog(this, ”确实要删除该记录吗?“, ”确认删除“, JOptionPane.YES_NO_OPTION);
if(returnValue == JOptionPane.YES_OPTION){ if(dbc.executeUpdateSQL(”DELETE FROM cardInfo WHERE cardID ='“ + id+”'“)){ javax.swing.JOptionPane.showMessageDialog(this,”卡号为“ + id + ”的顾客信息已成功被
/ 23
删除!请刷新!“);} else { javax.swing.JOptionPane.showMessageDialog(this, ”删除失败!请再试。“);} }else
return;}
(4)销户界面
代码如下:
if(jTextField.getText().equals(”“)
||
jTextField1.getText().equals(”“)
|| ||jTextField2.getText().equals(”“)|| jTextField4.getText().equals(”“)){
javax.swing.JOptionPane.showMessageDialog(null, ”各栏不能为空,请重填!“);} else { try { Integer.parseInt(jTextField.getText());} catch(NumberFormatException ex){
return;
jTextField3.getText().equals(”“)javax.swing.JOptionPane.showMessageDialog(null,”请确保数量栏及单价栏为数字!“);} if(Integer.parseInt(jTextField.getText())< 0){ } Sql dbc = new Sql();dbc.getConn();return;javax.swing.JOptionPane.showMessageDialog(null,”不能有负数!“);if((dbc.executeUpdateSQL(”INSERT into userInfo VALUES(“ + jTextField.getText()+”,'“ + jTextField1.getText()+ ”','“ +jTextField2.getText()+ ”','“ +jTextField3.getText()+ ”','“ +jTextField4.getText()+ ”')“))&&(dbc.executeUpdateSQL(”INSERT into cardInfo(cardID,customerID,savingType,curType,openDate,openMoney,pass,balance)VALUES('“ + jTextField5.getText()+”',“ + jTextField.getText()+”,'“+ jComboBox1.getSelectedItem()+”','“+ jComboBox.getSelectedItem()+”','“ + jTextField8.getText()+”','“+Integer.valueOf(jTextField9.getText())+”','“+String.valueOf(jPasswordField.getPassword())+”','“+Integer.valueOf(jTextField6.getText())+”')“))){javax.swing.JOptionPane
/ 23
.showMessageDialog(null, ”记录插入成功!“);jTextField.setText(”“);jTextField1.setText(”“);jTextField2.setText(”“);jTextField3.setText(”“);jTextField4.setText(”“);jTextField5.setText(”“);jTextField8.setText(”“);jTextField9.setText(”“);jTextField6.setText(”“);jPasswordField.setText(”“);} else { javax.swing.JOptionPane.showMessageDialog(null, ”该记录插入失败!请您重试。“);} }(5).改密界面
代码如下:
public void quer(){ if(jPasswordField.getPassword().equals(”“)|| jPasswordField1.getPassword().equals(”“)||jTextField.getText().equals(”“)){ avax.swing.JOptionPane.showMessageDialog(this, ”任何一栏不能为空!“);} else { Sql dbc = new Sql();dbc.getConn();boolean success = false;ResultSet rs = dbc.executeQuery(”SELECT * FROM admin“);try { while(rs.next()){ if(jTextField.getText().equals(rs.getString(”user“))|| jPasswordField.getPassword().equals(rs.getString(”pass“))){ success = true;} } if(success){ if(dbc.executeUpdateSQL(”UPDATE admin SET pass = '“
+String.valueOf(jPasswordField1.getPassword())+ ”' where user='“+UserFrm.user+”'“)){ javax.swing.JOptionPane.showMessageDialog(this,”密码修改成功。“);} else { javax.swing.JOptionPane.showMessageDialog(this, ”密码修改失败,请重试。“);} } else { javax.swing.JOptionPane.showMessageDialog(this,”用户名或原始密码错误!请重新确认!“);return;} } catch(SQLException ex)
/ 23
{ javax.swing.JOptionPane.showMessageDialog(this,ex.getMessage().toString());return;}}}(6)查询界面
代码如下:
public void select(){
if(jTextField.getText().equals(”“)){ javax.swing.JOptionPane.showMessageDialog(this,”请输入查询信息“);return;
} String sql=”“;if(((String)jComboBox.getSelectedItem()).equals(”顾客编号“)){ sql=”select * from userInfo where customerID='“+jTextField.getText()+”'“;}else if(((String)jComboBox.getSelectedItem()).equals(”顾客姓名“)){ sql=”select * from userInfo where customerName='“+jTextField.getText()+”'“;}else if(((String)jComboBox.getSelectedItem()).equals(”身份证“)){ } con=dbc.getConn();int count=0;ResultSet rs=dbc.executeQuery(sql);try{
while(rs.next()){ } rs.close();Object[][] cells=new Object[count][9];int i=0;rs=dbc.executeQuery(sql);while(rs.next()){
cells[i]=new Object[]{rs.getString(1),rs.getString(2),};i++;
/ 23 sql=”select * from userInfo where PID='“+jTextField.getText()+”'“;count++;rs.getString(3),rs.getString(4), rs.getString(5)
}
} } jTable=new JTable(cells,colnames);jScrollPane.setViewportView(jTable);javax.swing.JOptionPane.showMessageDialog(null, ex.getMessage().toString());String[] colnames={”顾客编号“,”顾客姓名“,”身份证号“,”联系电话“,”居住地址“};}catch(SQLException ex){(7)修改界面
代码如下:
public void quer(){ db.getConn();ResultSet rs = db.executeQuery(”SELECT * FROM cardInfo“);try {if(db.executeUpdateSQL(”UPDATE cardInfo SET savingType ='“ +
jComboBox1.getSelectedItem()+”',curType='“+jComboBox.getSelectedItem()+”',IsReportLoss =“ + flag+ ” WHERE cardID ='“ + jTextField.getText().trim()+”'“)){ javax.swing.JOptionPane.showMessageDialog(this,”信息修改成功。“);} else { javax.swing.JOptionPane.showMessageDialog(this, ”信息修改失败,请重试。“);} } catch(Exception ex){ javax.swing.JOptionPane.showMessageDialog(this,ex.getMessage().toString());} }(8)IP界面
代码如下:import java.net.* InetAddress id public void inet(){
/ 23
try{
id=InetAddress.getLocalHost();er.printStackTrace();}catch(Exception er){ } System.out.println(id);javax.swing.JOptionPane.showMessageDialog(null, ”本机ip地址:“+id);}(9)打印界面
代码如下:
DY d[]=new DY[1];d[0]=newDY(jTextField.getText(),jTextField1.getText(),jTextField2.getText(),jTextField3.getText());File file=new File(”D:java 作业DBATM文档.txt“);DY da=new DY();da.writerIO(d, file);da.readerIO(file);JOptionPane.showMessageDialog(null, ”交易记录打印成功“);close();try{
} DY(String cardID,String transType,String transmoney,String transDate){
} public String getcardID(){
}
/ 23
if(!file.exists())
} file.delete();file.createNewFile();e1.printStackTrace();else
}catch(Exception e1){ this.cardID=cardID;this.transType=transType;this.transMoney=transmoney;this.transDate=transDate;return cardID;public String gettransDate(){
} public String gettransMoney(){
} public String gettransType(){
} public void writerIO(DY[] d,File f){
}
} public void readerIO(File f){
} } try{
fr=new FileReader(f);dr=new BufferedReader(fr);String str;while((str=dr.readLine())!=null)System.out.println(str);dr.close();e1.printStackTrace();
} dw.close();em.printStackTrace();}catch(Exception em){ try{
if(!f.exists()){ } dw=new BufferedWriter(new FileWriter(f));for(int i=0;i / 23 1.取款模块 功能:用户可以直接到ATM取款机提取现金。2.查询模块模块 功能:用户可以查询余额。3.存款模块模块 功能:用户可以把现金存到银行。4.改密模块 功能:用户可以修改自己银行卡的密码。5. 转账模块 功能:用户可以用此功能实现与其他用户之间资金流转。6.取卡模块 功能:当用户完成操作后就可以取卡退出。 2.2.4 用户模块窗体界面及相应代码 窗体界面说明(要有界面的操作说明)(1)登录界面 此模块所要完成的就是用户和管理员的登录,只要选择哪个角色登录就可以了 用户登录由卡号和密码构成,在用户输入卡号和密码后,系统首先验证输入字符的有效性,然后调用数据库查看此用户名是否存在或密码是否正确,最后判断用户权限,管理员登录由管理员名和密码构成,在管理员输入管理员名和密码后,系统首先验证输入字符的有效性,然后调用数据库查看此管理员名是否存在或密码是否正确,最后判断管理员权限确定操作员还是管理员,并赋与不同的权限。代码如下: / 23 代码如下: if(jPasswordField1.getPassword().equals(”“)){ JOptionPane.showMessageDialog(null, ”请先选择登陆角色!“);}else{ con=db.getConn();cardID=String.valueOf(jComboBox.getSelectedItem());String pass=String.valueOf(jPasswordField1.getPassword());boolean bb=db.isValid1(con, cardID, pass); if(bb){ UMFrm ym=new UMFrm();ym.setVisible(true);close();}else{ if(i==0)JOptionPane.showMessageDialog(null, ”密码输错3次!请到柜台改密码!“);else { i--;JOptionPane.showMessageDialog(null, ”密码错误!请重新输入!“);} } } (2)用户主界面 (3)取款界面 / 23 代码如下: String a=String.valueOf(jTextField.getText());int aa=Integer.parseInt(a);try{ con=db.getConn();st=con.createStatement();ResultSet rs=db.executeQuery(”select * from cardInfo where cardID='“+UserFrm.cardID+”'“);if(rs.next()){ int ia=Integer.parseInt(rs.getString(”balance“));if(ia>aa){ int i=Integer.parseInt(rs.getString(”balance“))-aa;rs=db.executeQuery(”update cardInfo set balance='“+i+”' where cardID='“+UserFrm.cardID+”'“);if(db.executeUpdateSQL(”update transInfo set transMoney='“+i+”',transType='“+”支取“+”' where cardID='“+UserFrm.cardID+”'“))javax.swing.JOptionPane.showMessageDialog(null, ”取款成功!“);rs.close();}else javax.swing.JOptionPane.showMessageDialog(null, ”余额不足不能取款!“);} }catch(SQLException ee){ ee.printStackTrace();} UMFrm um=new UMFrm();um.setVisible(true);close();} (4)存款界面 代码如下: String a=String.valueOf(jTextField.getText()); / 23 } int aa=Integer.parseInt(a);try{ } UMFrm um=new UMFrm();um.setVisible(true);close();con=db.getConn(); st=con.createStatement();ResultSet rs=db.executeQuery(”select * from cardInfo where if(rs.next()){ int i=Integer.parseInt(rs.getString(“balance”))+aa;rs=db.executeQuery(“update cardInfo set balance='”+i+“' where if(db.executeUpdateSQL(”update transInfo set cardID='“+UserFrm.cardID+”'“);cardID='”+UserFrm.cardID+“'”);transMoney='“+aa+”',transType='“+”存入“+”' where cardID='“+UserFrm.cardID+”'“))javax.swing.JOptionPane.showMessageDialog(null, ”存款成功!“); } ee.printStackTrace();rs.close();}catch(SQLException ee){(5)查询界面 代码如下:public void yu(){ } / 23 con=db.getConn();try{ } st=con.createStatement();String sql=”select * from cardInfo where cardID='“+UserFrm.cardID+”'“;ResultSet rs=db.executeQuery(sql);if(rs.next()){ } ee.printStackTrace();jTextField.setText(rs.getString(”balance“));jTextField.setEnabled(false);}catch(SQLException ee){(6)修改界面 代码如下:if(jPasswordField.getPassword().equals(”“)||jPasswordField2.getPassword().equals(”“)||jPasswordField2.getPassword().equals(”“)){ javax.swing.JOptionPane.showMessageDialog(null,”密码不能为空!“);}else{ try{ } con=db.getConn();st=con.createStatement();ResultSet rs=db.executeQuery(”select * from cardInfo where cardID='“+UserFrm.cardID+”'“);if(rs.next()){ rs=db.executeQuery(”update cardInfo set javax.swing.JOptionPane.showMessageDialog(null, “密码修改成功!”); rs.close(); UMFrm um=new UMFrm();um.setVisible(true);close();pass='“+String.valueOf(jPasswordField2.getPassword())+”' where cardID='“+UserFrm.cardID+”'“);} } ee.printStackTrace(); }catch(SQLException ee){(7)转帐界面 代码如下:try{ con=db.getConn();st=con.createStatement();ResultSet rs=db.executeQuery(”select * from cardInfo where String aa=String.valueOf(jTextField2.getText()); / 23 cardID='“+UserFrm.cardID+”'“); } int a=Integer.parseInt(aa);if(rs.next()){ } ee.printStackTrace();if(UserFrm.cardID==UserFrm.cardID){ int i=Integer.parseInt(rs.getString(”balance“))-a;rs=db.executeQuery(”update cardInfo set balance='“+i+”' where cardID='“+UserFrm.cardID+”'“);int ii=Integer.parseInt(rs.getString(”balance“))+a;rs=db.executeQuery(”update cardInfo set balance='“+ii+”' where javax.swing.JOptionPane.showMessageDialog(null, “转帐成功!”); } rs.close();UMFrm um=new UMFrm();um.setVisible(true);close();cardID='“+jTextField.getText()+”'");}catch(SQLException ee){ } 三、设计小结 在这次课程设计中,我们第一次全面应用现代软件工程技术,从需求分析开始,通过需求收集,系统流程分析,构建数据流图和实体-关系图,对实际需求建模。然后又通过概要设计、详细设计、代码编写和系统测试等层层递进,在建立文档的同时学习编程技术,终于在小组成员的共同努力下,完成了文档的编写、代码的实现以及软件的测试。 通过这次课程设计使我们对Eclipse有了一定的了解,也对Java编程有了初步的认识,懂得如何从代码的层次上使用Eclipse图形界面及控件。代码还有许多值得优化的地方,界面的美化和可操作性上还有可以提高的余地。 四、参考文献 [1] 陈松乔等.现代软件工程.北京:清华大学出版社,2004 [2] 张白一等.面向对象程序设计——Java(第二版).西安:西安电子科技大学出版社,2006 [3] Laszlo Michael J.面向对象程序设计——图形应用实例[M].杨秀梅等,译.北京:机械工程出版社,2002 / 23 《面向对象程序设计》教学大纲 课程名称:信息内容安全 课程代码:042504 总 学 时:64 学 分:2 课程类型:专业必修课 适用专业: 信息安全专业 制 订 人:徐雪飞 审 定 人:肖 文 制订日期:2015年3月 《面向对象程序设计》教学大纲 一、课程性质、目的和任务 C#语言是.NET平台上的核心开发语言,具有简单易学、类型安全、完全面向对象等特性,是一门面向现代软件工程的主流程序设计语言。本课程系统地介绍C#语言的结构化设计、面向对象、泛型、商业开发等功能要素,使学生在掌握程序设计的基本方法和技巧,培养利用计算机解决实际问题的能力,以满足专业课应用和继续学习的需要。 二、教学基本要求 通过学习本课程,要求学生能够熟悉C#语言的语法和类型系统,掌握面向对象程序设计和泛型程序设计的基本方法,并具有商业应用开发的基本能力,能灵活地使用C#语言及Visual Studio.NET开发环境解决一般性编程问题。 三、教学内容 1、绪论(教学2学时,上机2学时) 教学内容: (1).NET技术和框架结构简介(2)C#语言概貌 (3)面向对象的基本概念 教学目的:使学生对.NET平台和C#有一个综合性的了解。 2、C#语法基础(教学6学时,上机4学时) 教学内容:(1)数据类型(2)值和方法(3)表达式(4)控制语句 教学目的:使学生基本掌握C#语言的类型系统和基本语法结构。 3、类和继承(教学4学时,上机4学时) 教学内容: (1)类的数据成员和各种函数成员(2)继承和多态(3).NET常用类型(4)接口与实现 教学目的:使学生进一步掌握类型的定义和使用方法,掌握.NET类库中一些典型类的用法;深入理解继承和多态性的概念,从而掌握面向对象软件可重用性的关键技术。 4、Windows窗体界面(教学2学时,上机2学时) 教学内容: (1)Windows Form编程技术(2)WPF编程技术 (3)绘图、动画和媒体 教学目的:使学生掌握Windows程序界面设计的基本要素,能够使用Windows Form和WPF编程技术开发交互式图形界面应用程序。 5、泛型(教学4学时,上机2学时) 教学内容: (1)泛型的定义与使用(2)元组和可空类型的用法(3)泛型集合与循环遍历 (4)匿名方法和Lambda表达式 教学目的:使学生掌握泛型程序设计的基本概念,能够利用类型抽象和操作抽象开发出高可适的软件程序。 6、异常处理(教学1学时) 教学内容: (1)C#异常处理结构 (2)主动引发异常和自定义异常 教学目的:使学生能够通过异常处理来提高程序可靠性。 7、文件操作(教学1学时,上机1学时) 教学内容: (1)驱动器、目录和文件(2)文件流和数据流 教学目的:使学生掌握在C#程序中进行磁盘文件存取的基本技术。 8、数据库访问(教学2学时,上机1学时) 教学内容: (1)ADO.NET联机数据访问(2)ADO.NET脱机数据访问 教学目的:使学生掌握C#程序中进行数据库存取的基本技术。 9、综合练习(教学2学时,上机8学时)教学内容: (1)进程和线程 (2)ASP.NET网络程序设计 (3)采用案例驱动的方式,综合运用C#编程技术开发较为完整的软件程序。教学目的:提高学生软件设计的综合能力。 五、教学方法与手段 讲授法、讨论法、多媒体教学、实验教学。 六、考核方式 考试成绩占70%,平时成绩占30%。闭卷考试。 七、推荐教材和教学参考书 教 材:《C#程序设计基础》第3版,郑宇军,石海鹤,王卫红,清华大学出版社,2014年。参考书: 1、《C#应用开发与实践》,曾宪权、李梅莲 等,清华大学出版社,2015年 2、《C#编程实战宝典》,付强、丁宁 等,清华大学出版社,2014年。 面向对象程序设计(专业限选课)Object-Oriented Programming 【课程编号】XZ26175 【学分数】3 【学时数】60=38+22 【课程类别】专业限选 【编写日期】2010.3.30 【先修课程】C语言程序设计、计算机应用基础 【适用专业】通信工程 一、教学目的、任务 通过学习,使学生深刻理解和领会面向对象的基本思想和基本特征,掌握面向对象程序设计语言C++语言的基本概念、基本语法以及面向对象程序设计的基本方法;使学生养成面向对象的编程思维习惯。 二、课程教学的基本要求 1.理解面向对象的基本概念和使用面向对象技术进行程序设计的基本思想 2.能比较熟练地用C++语言进行一般面向对象的程序设计 3.初步掌握面向对象编程环境Visual C++的使用 三、教学内容和学时分配(2 + 5 + 14 + 9 + 12 + 7 + 6 + 5 = 60)第一章 面向对象程序设计概述 2 学时(课堂讲授学时2)主要内容: 1.什么是面向对象程序设计 2.对象与类 3.封装 4.继承性 5.多态性 6.面向对象程序设计的语言 教学要求: 了解什么是面向对象程序设计;掌握对象和类的基本概念;理解面向对象程序设计的基本特征。其它教学环节: 安排课外了解面向对象程序设计方面的基本概念。第二章 C++概述 5学时(课堂讲授学时2+课程实验学时3)主要内容: 1.C++的起源和特点 2.C++源程序的构成 3.C++在非面向对象方面的一些特性 教学要求: cin和cout的使用;new和delete的运算符的使用;函数的重载;带缺省参数的函数;引用; VC++的使用。其它教学环节: 实验1: C++程序设计基础练习。实验目的和要求: 1.掌握C++程序的基本格式和规范,学会编写简单的C++程序。2.掌握C++程序结构的特点。 3.熟悉C++程序基本的输入输出操作。 4.掌握C++数据类型常量和变量以及修饰符的使用方法。5.熟悉作用域运算符的功能和基本使用方法。6.掌握C++内存的动态分配和释放方法。7.理解引用的概念,掌握引用的使用方法。 第三章 类和对象 14学时(课堂讲授学时8+课程实验学时6)主要内容: 1.类与对象的基本概念 2.构造函数与析构函数 3.对象数组与对象指针 4.向函数传递对象 5.静态成员 6.友元 7.类对象作为成员 8.常类型 教学要求: 类的声明;对象定义;对象的成员的访问。访问属性的理解和运用;构造函数和析构函数的定义;对象数组的定义和使用;this的指针的理解和使用;类的成员类型为其他类时如何理解和使用;静态成员的理解和运用。提供友元机制的目的;友元声明方法;提供常类型机制的目的;各种不同的常类型运作方式。其它教学环节: 实验2:类和对象。实验目的和要求: 1.掌握类、类的数据成员、类的成员函数的定义方式。2.理解类成员的访问控制方式。 3.掌握对象的定义和操作对象的方法。 4.理解构造函数和析构函数的定义与执行过程。5.掌握重载构造函数的方法。6.了解拷贝构造函数的方法。实验3:对象数组和对象指针。实验目的和要求: 1.掌握对象数组的定义和使用方法。 2.理解对象指针的概念,学会用指针引用对象。3.了解this指针的工作方式。 4.掌握静态数据成员和静态成员函数的基本使用方法。5.理解友元与友元函数的作用,掌握其使用方法。 第四章 派生类和继承 9学时(课堂讲授学时6+课程实验学时3)主要内容: 1.派生类的概念 2.派生类的构造函数和析构函数 3.基类成员的访问 4.多重继承 5.赋值兼容规则 教学要求: 基类和派生类的基本概念;继承成员的访问规则;派生类构造函数和析构函数的运行规则;多重继承的基本概念;多重继承中同名二义性如何消除;引入虚基类的目的;继承类和派生类之间相互赋值规则用。 其它教学环节: 实验4:派生类与继承。实验目的和要求: 1.理解类的继承的概念,能够定义和使用类的继承关系。2.掌握派生类的声明和定义方法。 3.掌握公有派生和私有派生的访问特性。4.学习虚基类在解决问题中的作用。 第五章 多态性 12学时(课堂讲授学时8+课程实验学时4)主要内容: 1.编译时的多态性与运行时的多态性 2.函数重载 3.运算符重载 4.类型转换 5.虚函数 教学要求: 多态的基本概念;实现运算符重载的方法(成员函数);实现运算符重载的方法(友元函数);静态联编和动态联编的基本概念;虚函数的作用;虚函数的运用。其它教学环节: 实验5:虚函数和多态性。实验目的和要求: 1.理解编译时的多态性和运行时的多态性。2.掌握运算符重载的基本方法。3.掌握虚函数的定义和使用方法。 第六章 模板 7学时(课堂讲授学时4+课程实验学时3)主要内容: 1.模板的概念 2.函数模板与模板函数 3.类模板和模板类 教学要求: 模板的基本概念;为什么要使用模板;函数模板和模板函数的基本概念;函数模板的声明和使用;类模板和模板类的基本概念。其它教学环节: 实验6:函数模板与类模板。实验目的和要求: 1.掌握函数模板及其声明方法。2.掌握模板函数及其生成方法。3.学习类模板的声明与使用方法。 第七章 C++的I/O流类库 6学时(课堂讲授学时3+课程实验学时3)主要内容: 1.C++建立类类库的目的 2.预定义类型的输入输出 3.用户自定义类型的输入和输出 教学要求: 掌握在各种情况下的<<和>>运算符的重载。其它教学环节: 实验7:I/O流类库。实验目的和要求: 1.掌握流及流类库的作用。 2.掌握流类库中常用的类及其成员函数的使用方法。3.掌握重载“<<”和“>>”的方法。 4.掌握控制输出宽度的函数width和setw。 5.掌握函数setosflags和resetiosflags设置和恢复对齐方式、精度、大小写等。 研究教学内容 5学时(课程讲解和讨论学时) 程序综合设计:按照面向对象程序开发的原则和方法,利用一个实例来讲解面向对象程序设计的整个过程,然后要求学生根据自己的开发经验进行分组讨论,从而帮助学生进一步理解和熟悉面向对象程序设计方法。 四、教学重点、难点及教学方法 重点:类和对象的基本概念;对象定义;对象的成员的访问。访问属性的理解和运用;构造函数和析构函数的定义;对象数组的定义和使用;this的指针的理解和使用。基类和派生类的基本概念;继承成员的访问规则;派生类构造函数和析构函数的运行规则。多态的基本概念;函数的重载。 难点:多重继承;虚函数;模板。 教学方法:课堂授课采用多媒体教学和分组讨论的方法,实验采用任务驱动方式。通过未来愿景描述和学以致用的方法来提高学生的学习兴趣,通过分组交流和师生积极互动的方式提高学生学习本门课程的学习能力。 五、考核方式及成绩评定方式:考试 六、教材及参考书目 推荐教材: [1] 《C++面向对象程序设计》,陈维兴,林小茶,清华大学出版社,第2版,2004 参考书: [1] 《C++面向对象程序设计习题解析与上机指导》,陈维兴,清华大学出版社,2003 [2] 《C++程序设计基础》,周霭如,电子工业出版社,2003 [3] 《C++语言程序设计》,郑莉,清华大学出版社,2005 修(制)订人: 审核人: 2010年 3 月30 日 《面向对象程序设计》教学大纲 课程名称:面向对象程序设计 英文名称:Object Oriented Programming)学分:2 总学时:36 实验(上机)学时: 8 开课专业:电子商务专业 一、本课程的性质、目的和培养目标 面向对象程序设计是电子商务专业的限定选修课程。面向对象程序设计是当今最为流行的程序设计方法,本课程以C++语言为核心,全面概述面向对象程序设计的基本概念和基本技术。主要内容包括:理解和掌握面向对象程序设计的基本思想和技术,掌握C++中的引用和函数重载、类与对象、静态成员与友元、运算符重载、继承与派生类、多态与虚函数等重要概念和技术。通过教学要求学生基本掌握面向对象的程序设计方法,认识C++是如何支持面向对象程序设计的,培养、训练学生运用面向对象技术进行程序设计的能力。 二、预修课程 计算机语言与程序设计 三、课程内容及学时分配 第一章 从C语言到C++语言 1.C++语言出现的历史背景(OOP思想概述)2.C++中的注释、常量和输入输出 3.C++中的变量定义与作用域 4.C++中的函数 5.C++中的指针与引用 本章学时数:4,本章习题数:4 第二章 类与对象 1.类 2.对象 3.构造函数和析构函数 4.对象及其应用 5.对象的生存期 6.再论程序结构 7.面向对象程序设计 本章学时数:6,本章习题数:6 第三章 静态成员与友元 1.拷贝构造函数 2.静态数据成员 3.静态成员函数 4.友元函数 本章学时数:6,本章习题数:6 第四章 运算符重载 1.运算符重载的概念 2.运算符重载举例 本章学时数:4,本章习题数:4 第五章 继承与多态 1.继承的概念 2.单继承 3.多态与虚函数 4.类的分解(类的层次设计)5.抽象类与纯虚函数 本章学时数:6,本章习题数:6 第六章 I/O流库简介 1.C++流库的结构 2.输入与输出 3.格式控制 4.文件 本章学时数:2,本章习题数:2 四、实验(上机)内容和建议学时分配 实验1(4学时) 要求:定义类,该类至少应包括静态数据成员和静态成员函数,要求通过本实验掌握定义类的基本方法。实验2(4学时) 要求:通过本实验掌握函数重载、友元函数、继承、虚函数等的基本使用方法。 五、教材和参考书目 1.《C++语言基础教程》,吕凤翥编著,清华大学出版社,1999 2.《C++程序设计教程》,钱 能主编,清华大学出版社,1999 3.《The C++ Programming Language》(Third Edition),Bjarne Stroustrup,Addison-Wesley,1997 六、课外学习要求 要求课前预习下一次课的讲课内容,课后复习本次课的讲课内容并通过相应的作业加以消化。 七、考核方式 本课程采用闭卷书面考试方式为主,其中期终考试占80%,期中10%,平时作业、上机及出勤率10%。 这次课程设计让我收获到很多,上个学期我们也有过课程设计,但是我们都是从网上下一个程序,连带着报告,看一遍程序,修改修改报告,然后就直接去答辩,都是糊弄糊弄就过去了,自己根本就没有付出过努力,到现在,那个程序的内容是什么全忘光了。但是这次的课程设计,虽然老师您的要求十分严格,但是却是让我切实体会到了自己动手的快乐。要我们自己设计一个管理系统,从定题目,到开始写代码,全部都是自己来。我在开始课程设计前的两周就开始考虑我课设的时候应该做什么内容,想做一般同学都能想到的学生管理系统,但是就怕会有类似的不敢做,冥思苦想了好久,最后才定下的备忘录管理系统,其实所有的管理系统的本质都是一样的,增,删,改,查,但是,这些东看似简单,做起来却难。像我在做增加的时候,就遇到了问题,最后通过老师的调试,才发现原来是我在开始定义字段名的时候就弄错了。我们其他人也一样,中间遇到的问题,也及时的请教同学和老师,原来在寝室,我们都是开着电脑上qq,水人人,看视频,但是当课程设计开始的时候,我们这个寝室都在那做这个管理系统,谁谁谁的查询不好使了,我们也都停下来帮她,当我们都不解决不了的时候,我们就和学得好的男生开语音,让他们教我们,帮我们解决,再解决不了的,我们就来找老师,在机房里大家一起努力,攻克难关。有些时候,困扰我们很长时间的,可能就是一个小小的逗号,或者是被忽略的空格,这些都是我们上课的时候没有注意的,没有好好听课的地方,都在课设的时候碰到了,我在做自己的课程设计的时候,我也经常出错,经常忘了一些细节的东西,比如登陆窗体的时候,忘记了在program.cs里把Form1改成LoginForm,我一直在调试,但是始终出现的是主窗体,登陆窗体始终出不来,最后才想起来忘了这个小步骤,但是这也让我明白,上课的点滴小事,也是非常重要的,除了上课认真听讲之外,下课了还得很认真的看代码,把代码的意思弄明白,渐渐的,像数据库里的表怎么设计,怎么连接数据库,按钮怎么设置,还有很多我都能掌握,所以感觉这次课程设计带给我很多的,课程设计不仅是检查一个人知识掌握了多少,其实更重要的实检测你的实践能力,以及看你是否细心、是否有缜密的思维,所以,我们要在课设的时候加强锻炼,磨练自己,使自己有更高的提高。第二篇:《面向对象程序设计》教学大纲
第三篇:面向对象程序设计教学大纲
第四篇:《面向对象程序设计》教学大纲
第五篇:面向对象程序设计心得体会