建立student类,并建立一个student对象数组
- 格式:doc
- 大小:57.50 KB
- 文档页数:4
Java语言程序设计第六章课后习题答案1.将本章例6-1至6-18中出现的文件的构造方法均改为使用File类对象作为参数实现。
个人理解:File类只能对整文件性质进行处理,而没法通过自己直接使用file.Read()或者是file.write()类似方法对文件内容进行写或者读取。
注意:是直接;下面只提供一个例2变化,其他的你自己做,10几道啊,出这题的人真他妈有病。
import java.io.*;public class test6_2{public static void main(String[] args) throws IOException { String fileName = "D:\\Hello.txt";File writer=new File(fileName);writer.createNewFile();BufferedWriter input = new BufferedWriter(newFileWriter(writer));input.write("Hello !\n");input.write("this is my first text file,\n");input.write("你还好吗?\n");input.close();}}运行结果:(电脑系统问题,没法换行,所以一般使用BuffereWriter中newLine()实现换行)2.模仿文本文件复制的例题,编写对二进制文件进行复制的程序.// CopyMaker类import java.io.*;class CopyMaker {String sourceName, destName;BufferedInputStream source;BufferedOutputStream dest;int line;//打开源文件和目标文件,无异常返回trueprivate boolean openFiles() {try {source = new BufferedInputStream(newFileInputStream( sourceName ));}catch ( IOException iox ) {System.out.println("Problem opening " + sourceName );return false;}try {dest = new BufferedOutputStream(newFileOutputStream( destName ));}catch ( IOException iox ){System.out.println("Problem opening " + destName );return false;}return true;}//复制文件private boolean copyFiles() {try {line = source.read();while ( line != -1 ) {dest.write(line);line = source.read();}}catch ( IOException iox ) {System.out.println("Problem reading or writing" );return false;}return true;}//关闭源文件和目标文件private boolean closeFiles() {boolean retVal=true;try { source.close(); }catch ( IOException iox ) {System.out.println("Problem closing " + sourceName );retVal = false;}try { dest.close(); }catch ( IOException iox ) {System.out.println("Problem closing " + destName );retVal = false;}return retVal;}//执行复制public boolean copy(String src, String dst ) {sourceName = src ;destName = dst ;return openFiles() && copyFiles() && closeFiles();}}//test6_2public class test6_2{public static void main ( String[] args ) {String s1="lin.txt",s2="newlin.txt";if(new CopyMaker().copy(s1, s2))S ystem.out.print("复制成功");elseS ystem.out.print("复制失败");}}运行前的两个文本:lin.txt和newlin.txt(为空)运行后:3.创建一存储若干随机整数的文本文件,文件名、整数的个数及范围均由键盘输入。
类和对象01. 分析以下程序执行的结果#include<iostream.h>#include<stdlib.h>class Sample{public:int x,y;Sample(){x=y=0;}Sample(int a,int b){x=a;y=b;}void disp(){cout<<"x="<<x<<",y="<<y<<endl;}};void main(){Sample s1(2,3);s1.disp();}解:本题说明了重载构造函数的定义方法。
首先定义了一个类Sample,在main()中定义了它的一个对象,定义s1对象时调用其重载构造函数(x=2,y=3),然后,调用其成员函数输出数据成员。
所以输出为:x=2,y=3。
注意:构造函数是唯一不能被显式调用的成员函数,它在定义类的对象时自动调用,也称为隐式调用。
02. 分析以下程序的执行结果#include<iostream.h>class Sample{int x,y;public:Sample(){x=y=0;}Sample(int a,int b){x=a;y=b;}~Sample(){if(x==y)cout<<"x=y"<<endl;elsecout<<"x!=y"<<endl;}void disp(){cout<<"x="<<x<<",y="<<y<<endl;}};void main(){Sample s1(2,3);s1.disp();}解:本题说明了析构函数的定义方法。
首先定义了一个类Sample,在main()中定义了它的一个对象,定义s1对象时调用其重载构造函数(x=2,y=3),然后,调用其成员函数输出数据成员,最后在退出程序时自动调用析构函数。
目录目录 (1)二(1)求球的体积。
(3)二(2)求矩形周长和面积。
(3)三(1)从键盘输入一整数,根据是奇数还是偶数分别输出odd和even。
(4)三(2)输入3个整数,从小到大输出。
(5)第五章 (6)1.编写一个代表三角形的类,其中,3条边为三角形的属性,并封装有求三角形的面积和周长的方法。
分别针对3条边为3,4,5和7,8,9的两个三角形进行测试。
(6)5_2 编写一个学生类Student,包含的属性有学号、姓名、年龄,将所有学生 (7)五、(3)编写一个Person类,其中包括人的姓名、性别、年龄、子女等属性,并封装有获得姓名、获得年龄、增加1岁、获得子女、设置子女等方法,其中,子女为一个Person数组。
(10)5-4.编写一个代表日期的类,其中有代表年月日的三个属性,创建日期对象时要判断参数提供的年月日是否合法,不合法要进行纠正,年默认值为2000;月的值在1到12之间,默认值为1;日由一个对应12个月的整型数组给出合法值,特别的,对于二月,通常为28天,但闰年的二月最多29天,该年的值为400的倍数,或者为4的倍数但不为4的倍数但不为100的倍数的年份为闰年。
将创建的日期对象输出时,年月日之间用“/”分隔。
(12)5-5 编写一个矩阵类,其中封装有一个代表矩阵的二维数组,并提供一个实现两个相同行、列的矩阵的相加方法。
利用随机函数产生两个3行4列的矩阵,验证类设计。
(14)五、(6)创建简单的银行账户类。
(16)5-7(7)n只猴子要选大王,选举方法如下’:所有猴子按1,2,...,n编号并按照顺序围 .. 18 六(1)给point类添加以下几个求两点间距的多态方法,并进行调用测试。
(20)六(2)定义person类,子类student类。
(25)六(3)circle类,求圆面积。
(27)六(4)复数类,测试两复数的加、乘、求模方法。
(30)8(1)定义一个接口,包含一个Display()方法用于显示信息:通知类,汽车类,广告类...... .. (33)8(2)定义Shape,其中包括一个方法size(),设计矩形、圆、圆柱体等,实现Shape接口。
第3章面向对象程序设计基础【1】什么是Java程序使用的类?什么是类库?[解答]:Java程序的基本单位是类。
对象是对事物的抽象,而类是对对象的抽象和归纳,找出事物的共性,把具有共同性质的事物归结为一类,得出一个抽象的概念——类。
类是具有相同属性和方法的一组对象的集合,类是在对象之上的抽象,对象则是类的具体化,一旦建立类之后,就可用它来建立许多你需要的对象。
Java的类库是系统提供的已实现的标准类的集合,是Java编程的API(Application Program Interface),它可以帮助开发者方便、快捷地开发Java程序。
【2】如何定义方法?在面向对象程序设计中方法有什么作用?[解答]:方法的定义由两部分组成:方法声明和方法体。
方法声明的基本格式如下:返回类型方法名(形式参数){… //方法体内容}方法声明包括方法名、返回类型和形式参数,方法的小括号是方法的标志;方法体为实现方法行为的Java语句。
在面向对象程序设计中,方法所起的作用是完成对类和对象属性操作。
【3】简述构造方法的功能和特点。
下面的程序片段是某学生为student类编写的构造方法,请指出其中的错误。
void Student(int no,String name){studentNo=no;studentName=name;return no;}[解答]:构造方法是一个特殊的方法,主要用于初始化新创建的对象。
构造方法的方法名要求与类名相同,用户不能直接调用,只能通过new运算符调用,而且构造方法是不返回任何数据类型,甚至也不返回void数据类型,即不能在构造方法前加void。
以上的代码段出错于:①构造方法Student()前不能加void ②不能用return语句【4】定义一个表示学生的student类,包括的域有学号、姓名、性别、年龄,包括的方法有获得学号、姓名、性别、年龄及修改年龄。
编写Java程序创建student类的对象及测试其方法的功能。
江西财经大学10-11第一学期期末考试上机考试100题一、第一类题目(20道,每题7分,在word中保留代码并将输出结果窗口保留)1.定义盒子Box类,要求具有以下成员:长、宽、高分别为x,y,z,可设置盒子形状;可计算盒子体积;可计算盒子的表面积。
2.有两个长方柱,其长、宽、高分别为:(1)30,20,10;(2)12,10,20。
分别求他们的体积。
编一个基于对象的程序,在类中用带参数的构造函数。
3.有两个长方柱,其长、宽、高分别为:(1)12,20,25;(2)10,30,20。
分别求他们的体积。
编一个基于对象的程序,且定义两个构造函数,其中一个有参数,一个无参数。
4.声明一个类模板,利用它分别实现两个整数、浮点数和字符的比较,求出大数和小数。
5.建立一个对象数组,内放5个学生的数据(学号、成绩),用指针指向数组首元素,输出第1,3,5个学生的数据。
初值自拟。
6.建立一个对象数组,内放5个学生的数据(学号、成绩),设立一个函数max,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并输出其学号。
初值自拟。
7.用new建立一个动态一维数组,并初始化int[10]={1,2,3,4,5,6,7,8,9,10},用指针输出,最后销毁数组所占空间。
8.定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。
将运算符函数重载为非成员、非友元的普通函数。
编写程序,求两个复数之和。
初值自拟。
9.定义一个复数类Complex,重载运算符“+”,“—”,使之能用于复数的加,减运算,运算符重载函数作为Complex类的成员函数。
编程序,分别求出两个复数之和,差。
初值自拟。
10.定义一个复数类Complex,重载运算符“*”,“/”,使之能用于复数的乘,除。
运算符重载函数作为Complex类的成员函数。
编程序,分别求出两个复数之积和商。
初值自拟。
提示:两复数相乘的计算公式为:(a+bi)*(c+di)=(ac-bd)+(ad+bc)i。
实验一,补充题:1.设计一个Student (学生)类,并使Student类具有以下要求:(bsy1_1.cpp)( 1 )该类具有学生姓名、学号、程序设计、信息处理、数据结构三门课程的成绩;( 2)学生全部信息由键盘键入;( 3)通过成员函数统计学生平均成绩,当课程数量增加时,成员函数无须修改仍可求取平均成绩;( 4)输出学生的各科成绩与平均成绩;( 5)学生对象的定义采用对象数组实现;( 6)统计不及格学生人数;( 7)能以最方便的方式实现对课程数量和学生人数的修改。
#include <iostream>#include <string>using namespacestd;constint N=3;constint M=2;class Student{public:Student();~Student();void display();double get_avg();bool no_pass();protected:char name[20];char id[10];double course[N];double avg_score;};Student::Student(){cout<<" 请输入学生姓名及学号:"<<endl;cin>>name>>id;for(int i=0;i<N;i++){cin>>course[i];}}Student::~Student(){cout<<" 执行析构函数"<<endl;}void Student::display()cout<<name<<"cout<<id<<" ";for(int i=0;i<N;i++){cout<<course[i]<<"}cout<<get_avg(); cout<<endl;}double Student::get_avg(){avg_score=0;for(int i=0;i<N;i++){avg_score+=course[i];}avg_score=avg_score/N; return avg_score;}bool Student::no_pass(){for(int i=0;i<N;i++){ if(course[i]<60) return true;} return false;}void main(){int i,no_pass=0;cout<<" 输入学生信息,不同数据之间以空格分隔:"<<endl;cout<<" 姓名学号程序设计信号处理数据结构"<<endl;Student s[M];cout<<endl;cout<<endl<<" 以下是输出信息与统计信息:"<<endl;cout<<" 姓名学号程序设计信号处理数据结构平均成绩"<<endl;for(i=0;i<M;i++){s[i].display(); if(s[i].no_pass()==true) no_pass++;cout<<" 不及格人数为: "<<no_pass<<" 人。
(理工类)课程名称: C#程序设计专业班级:学生学号:学生姓名:所属院部:信息技术学院指导教师:20 12 ——20 13 学年第 1 学期金陵科技学院教务处制实验报告书写要求实验报告原则上要求学生手写,要求书写工整。
若因课程特点需打印的,标题采用四号黑体,正文采用小四号宋体,单倍行距。
纸张一律采用A4的纸张。
实验报告书写说明实验报告中实验目的和要求、实验仪器和设备、实验内容与过程、实验结果与分析这四项内容为必需项。
教师可根据学科特点和实验具体要求增加项目。
填写注意事项(1)细致观察,及时、准确、如实记录。
(2)准确说明,层次清晰。
(3)尽量采用专用术语来说明事物。
(4)外文、符号、公式要准确,应使用统一规定的名词和符号。
(5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。
实验报告批改说明实验报告的批改要及时、认真、仔细,一律用红色笔批改。
实验报告的批改成绩采用五级记分制或百分制,按《金陵科技学院课堂教学实施细则》中作业批阅成绩评定要求执行。
实验报告装订要求实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。
实验项目名称: C#编程基础实验学时: 6学时同组学生姓名:无实验地点:实验日期:实验成绩:批改教师:批改时间:实验1 C#编程基础一、实验目的(1)熟悉Visual 集成开发环境(IDE),熟悉C#源程序语言的编辑、编译和运行过程;(2)学会创建简单的控制台应用程序和windows窗体应用程序;(3)能够使用C#选择、循环等流程控制语句编写并调试程序;(4)掌握使用数组来求解一些现实问题的步骤和方法。
二、实验要求(1)编写程序要规范、正确,上机调试过程和结果要有记录;(2)做完实验后给出本实验的实验报告。
三、实验设备、环境安装有 2005以上版本软件。
四、实验步骤1. 采用VS2010编写一个简单的控制台应用程序(1)打开VS2010开发工具。
students student=new students()
这句代码是使用Java(或类似的面向对象编程语言)创建了一个新的students对象,并将其引用赋值给student变量。
详细解释如下:
1.students:这是类的名称。
假设已经有一个定义好的
students类。
2.student:这是一个变量名,用于引用students类的对
象。
3.=:赋值操作符。
用于将右侧的对象引用赋值给左侧的
变量。
4.new:这是Java中的关键字,用于创建对象的实例。
5.students():这是students类的构造函数,用于初始化
新创建的对象。
所以,整句代码的意思是:创建一个新的students对象,并使用students类的默认构造函数进行初始化,然后将这个新创建的对象的引用赋值给student变量。
注意:通常,Java的类名应该以大写字母开头,以区分变量和类。
所以,更标准的写法可能是Students student = new Students();。
Python⾯向对象编程类和实例Python是⼀门⾯向对象的编程语⾔,所以也有类的概念,类是⼀系列具有相同特征和⾏为事物的统称,Python中使⽤class关键字定义类。
类的定义语法:class 类名():代码...⽰例:class Student:def __init__(self, name, age): = nameself.age = agedef get_name(self):print("我的名字是{name}".format(name=))获取类的名字:我们定义了⼀个名字叫Student的类,可以__name__属性来访问它。
print(Student.__name__) # Student实例化对象语法:对象名 = 类名()⽰例:# 创建对象s = Student("张三", 10)print(s) # <__main__.Student object at 0x000002A925707288>类中的self可以看到类中定义的每个⽅法都有self参数,指的是调⽤该函数的对象,该参数在⽅法被调⽤时是不需要传参的,self参数是对类的当前实例的引⽤,⽤于访问属于该类的变量。
class Student:def __init__(self, name, age): = nameself.age = agedef get_name(self):print(self)# print("我的名字是{name}".format(name=))s = Student("张三", 10)print(s) # <__main__.Student object at 0x0000020349307148># self和对象的地址⼀致s.get_name() # <__main__.Student object at 0x0000020349307148>添加和获取对象属性类外⾯添加对象属性:对象名.属性名 = 值⽰例:class Student():def study(self):print("正在学习")s = Student() = "张三"s.age = 18类外⾯获取对象属性:对象名.属性名⽰例:class Student():def study(self):print("正在学习")s = Student() = "张三"s.age = 18print(f'姓名为{}') # 姓名为张三print(f'年龄为{s.age}') # 年龄为18类⾥⾯获取对象属性:self.属性名⽰例:class Student():def study(self):print("正在学习")def print_info(self):print(f'您的姓名是{}')print(f'您的年龄是{self.age}')s = Student() = "张三"s.age = 18s.print_info()类属性类属性就是类对象所拥有的属性,它被该类的所有实例对象所共有,可以通过类名或者对象访问。
第5章类与对象5.1 选择题1. 在下列结构变量的定义中,不正确的是( d )。
(a) struct employee{ char name[ 20 ] ;long code ;} emp ;(b) struct{ char name[ 20 ] ;long code ;} emp ;(c) struct employee{ char name[20];long code;} ;employee emp;(d) struct{ char name[20];long code;} employee;employee emp;2.已知有职工情况结构变量emp定义为:struct employee{ char name[ 20 ] ;long code ;struct{ int year ;int month ;int day ;} birth ;} emp ;下列对 emp 的 birth 正确赋值方法是( d )。
(a) year = 1980 ; month = 5 ; day = 1 ;(b) birth.year = 1980 ; birth.month = 5 ; birth.day = 1 ;(c) emp.year = 1980 ; emp.month = 5 ; emp.day = 1 ;(d) emp.birth.year = 1980 ; emp.birth.month = 5 ; emp.birth.day= 1 ;3.假定有以下声明和定义,则下面引用形式错误的是( b )。
1struct student{ int num ;float score ;} stu[3] = {{1001,80},{1002,75},{1003,91}}, *p = stu ; (a) p->num (b) (p++).num (c) (p++)->num (d) (*p).num4.下列四个运算符中,优先级最低的是( a )。
《Java基础入门》课后习题及答案《Java基础入门》课后习题第1章Java开发入门一、填空题1、Java的三大体系分别是_JavaSE_____、_JavaEE_____、_JavaME_____。
2、Java程序的运行环境简称之为JRE_____。
3、编译Java程序需要使用_javac_____命令。
4、javac.exe和java.exe两个可执行程序存放在JDK 安装目录的bin______目录下。
5、path______环境变量用来存储Java的编译和运行工具所在的路径,而_classpath_____环境变量则用来保存保存Java虚拟机要运行的“.class”文件路径。
二、选择题1、以下选项中,哪些属于JDK工具?(多选)ABCDA、Java编译器B、Java运行工具C、Java文档生成工具D、Java打包工具2、Java属于以下哪种语言?CA、机器语言B、汇编语言C、高级语言D、以上都不对3、下面哪种类型的文件可以在Java虚拟机中运行?DA、.javaB、.jreC、.exeD、.class4、安装好JDK后,在其bin目录下有许多exe可执行文件,其中java.exe命令的作用是以下哪一种?BA、Java文档制作工具B、Java解释器C、Java编译器D、Java启动器5、如果jdk的安装路径为:d:\jdk,若想在命令窗口中任何当前路径下,都可以直接使用javac和java命令,需要将环境变量path设置为以下哪个选项?BA.d:\jdk; B.d :\jdk\bin; C.d:\jre\bin; D.d:\jre;三、问答题1、简述Java的特点。
面向对象、跨平台性、健壮性、安全性、可移植性、多线程性、动态性等。
2、简述JRE与JDK的区别。
JRE(Java Runtime Environment,Java运行时环境),它相当于操作系统部分,提供了Java程序运行时所需要的基本条件和许多Java基础类,例如,IO 类、GUI控件类、网络类等。
python⾯向对象编程实例1.编写程序, 编写⼀个学⽣类, 要求有⼀个计数器的属性, 统计总共实例化了多少个学⽣class Student:"""学⽣类"""count = 0 # 计数def__init__(self, name, age): = nameself.age = ageStudent.count += 1 # 要使得变量全局有效,就定义为类的属性def learn(self):print("is learning")stu1 = Student("jack", 33)stu2 = Student("amy", 24)stu3 = Student("lucy", 22)stu4 = Student("lulu", 45)print("实例化了%s个学⽣" % Student.count)输出:实例化了4个学⽣View Code2.编写程序, A 继承了 B, 俩个类都实现了 handle ⽅法, 在 A 中的 handle ⽅法中调⽤ B 的 handle ⽅法class B:"""类B"""def__init__(self):passdef handle(self):print("B.handle")class A(B):"""类A"""def__init__(self):super().__init__()def handle(self):super().handle() # super依赖于继承a = A()a.handle()输出:B.handleView Code3.编写程序, 如下有三点要求:1. ⾃定义⽤户信息数据结构,写⼊⽂件, 然后读取出内容, 利⽤json模块进⾏数据的序列化和反序列化2. 定义⽤户类,定义⽅法db,例如执⾏obj.db可以拿到⽤户数据结构3. 在该类中实现登录、退出⽅法, 登录成功将状态(status)修改为True, 退出将状态修改为False(退出要判断是否处于登录状态).密码输⼊错误三次将设置锁定时间(下次登录如果和当前时间⽐较⼤于30秒即不允许登录)⽤户数据结构:user_info{"egon":{"password":"123",'status':False,'timeout':0},"alex":{"password":"456",'status':False,'timeout':0},}import jsonimport time# data = {# "egon":{"password":"123",'status':False,'timeout':0},# "alex":{"password":"456",'status':False,'timeout':0},# }## with open("user_info", "w", encoding="utf-8") as f:# json.dump(data, f) # 序列化class User:"""⽤户类"""def__init__(self):er_dic = self.read() # 初始化时将⽤户信息读取出来ername = ""# 记录当前登录⽤户def write(self):"""序列化"""with open("user_info", "w", encoding="utf-8") as f:json.dump(er_dic, f) # 序列化def read(self):"""拿到⽤户数据"""with open("user_info", "r", encoding="utf-8") as f:user_dic = json.load(f) # 反序列化return user_dicdef db(self):print("⽤户数据结构:", er_dic)def login(self):"""登录"""i = 0while i < 3:username = input("username:").strip()password = input("password:").strip()if username in er_dic and password == er_dic[username]["password"]: time_now = time.time() # 获取当前时间period = time_now - er_dic[username]["timeout"] # 时间差if period >= 30: # 判断时间间隔是否满⾜登录条件print("------%s登陆成功-----" % username)ername = usernameer_dic[username]["status"] = True # 记录⽤户登录状态self.write() # 将修改保存到⽂件breakelse:print("⽤户处于锁定状态,请%s S后再试" % (30 - period))breakelse:print("⽤户名或密码错误!")i += 1if i == 3 and username in er_dic:er_dic[username]["timeout"] = time.time() # 记录3次登录失败的时间点 self.write() # 将修改保存到⽂件exit("退出")def exit(self):"""退出"""if ername: # ⽤户处于登录状态er_dic[ername]["status"] = False # 修改⽤户登录状态self.write() # 将修改保存到⽂件exit("⽤户%s退出登录" % ername)def help_info(self):"""帮助信息"""print("""命令列表:查看数据结构:db登录:login退出登录:exit""")def handle(self):"""处理⽤户输⼊命令"""while True:cmd = input("请输⼊命令:").strip()cmd = cmd.split()if hasattr(self, cmd[0]): # 使⽤反射func = getattr(self, cmd[0]) # 拿到⽅法名func()else:self.help_info() # 打印帮助信息user = User()if__name__ == "__main__":user.handle()"""输出:请输⼊命令:loginusername:egonpassword:123------egon登陆成功-----请输⼊命令:exit⽤户egon退出登录"""View Code4.⽤⾯向对象的形式编写⼀个⽼师⾓⾊, 并实现以下功能, 获取⽼师列表, 创建⽼师、删除⽼师、创建成功之后通过 pickle 序列化保存到⽂件⾥,并在下⼀次重启程序时能读取到创建的⽼师, 例如程序⽬录结构如下.proj|-- bin/| |-- start.py 程序启动⽂件|-- config/| |-- settings.py 程序配置(例如: 配置存储创建⽼师的路径相关等)|-- db 数据存储(持久化, 使得每次再重启程序时, 相关数据对应保留)| |-- teachers/ 存储所有⽼师的⽂件| |-- ... ...|-- src/ 程序主体模块存放| |-- __init__.py| |-- teacher.py 例如: 实现⽼师相关功能的⽂件| |-- group.py 例如: 实现班级相关的功能的⽂件|-- main.py 程序运⾏主体程序(可进⾏菜单选择等)|-- README.md 程序说明⽂件代码:# start.py"""程序启动⽂件"""import osimport sysBASE_PATH = os.path.dirname(os.getcwd())sys.path.insert(0, BASE_PATH) # 将proj的路径添加到模块搜索路径中from src import mainif__name__ == "__main__":main.main()# settings.py"""定义⼀些常量"""import osBASE_PATH = os.path.dirname(os.getcwd())teacher_file = os.path.join(BASE_PATH, "db", "teacher_info") # 教师⽂件路径# main.py"""程序运⾏主体,可进⾏菜单选择"""from src.manager import Managerdef main():li = for i in range(len(li)):print(i+1, li[i][0])while True:ch = input("输⼊序号进⾏操作:").strip()getattr(Manager(), li[int(ch)-1][1])() # 反射,找到对象相应的⽅法并执⾏# manager.py"""创建教师,删除教师,查看教师"""from src.my_pickle import MyPicklefrom config.settings import *from src.teacher import Teacherclass Manager:"""管理员类"""info = [("查看教师", "show_teacher"),("创建教师", "create_teacher"),("删除教师", "delete_teacher"), ("退出", "exit")]def__init__(self):self.teacher_pickle_obj = MyPickle(teacher_file) # 实例化MyPickle类,teacher_file是settings中的教师⽂件路径def show(self, pickle_obj):"""从⽂件中读取信息"""pick_obj = getattr(self, pickle_obj)data_g = pick_obj.readiter() # 读取对象信息for teacher_obj in data_g:for key in teacher_obj.__dict__:print(key, teacher_obj.__dict__[key]) # 打印对象信息print("-" * 50)def show_teacher(self):"""查看教师信息"""print("教师信息".center(45, "-"))self.show("teacher_pickle_obj")def create_teacher(self):"""创建教师信息"""name = input("输⼊要创建的教师姓名:").strip()school = input("输⼊教师所在学校:").strip()teacher = Teacher(name, school) # 实例化⼀个教师对象self.teacher_pickle_obj.write(teacher) # 将对象写⼊⽂件print("创建教师成功!")def delete_teacher(self):"""删除教师信息"""self.show_teacher()inp = input("输⼊要删除的教师姓名:").strip()self.teacher_pickle_obj.delete(inp) # 删除print("删除成功!")def exit(self):exit()# my_pickle.py"""读写⽂件信息"""import pickleimport osfrom config.settings import *class MyPickle:def__init__(self, filename):self.filename = filenamedef write(self, data): # 写⼊with open(self.filename, "ab") as f:pickle.dump(data, f)def readiter(self): # 读取with open(self.filename, "rb") as f:while True:try:data = pickle.load(f)yield dataexcept:breakdef delete(self, name): # 删除f2 = MyPickle(self.filename+".bak") # 新建⼀个⽂件for item in self.readiter(): # 从⽂件中load数据if == name:pass# 找到了就不写⼊else:f2.write(item) # 没找到就将对象写⼊⽂件os.remove(self.filename) # 删除旧⽂件os.rename(self.filename+".bak", self.filename) # 新⽂件名重命名为旧⽂件名# teacher.pyclass Teacher:"""教师类"""def__init__(self, name, school): = nameself.school = schoolView Code5、定义MySQL类要求:1.对象有id、host、port三个属性2.定义⼯具create_id,在实例化时为每个对象随机⽣成id,保证id唯⼀3.提供两种实例化⽅式,⽅式⼀:⽤户传⼊host和port ⽅式⼆:从配置⽂件中读取host和port进⾏实例化4.为对象定制⽅法,save和get_obj_by_id,save能⾃动将对象序列化到⽂件中,⽂件路径为配置⽂件中DB_PATH,⽂件名为id号,保存之前验证对象是否已经存在,若存在则抛出异常,;get_obj_by_id⽅法⽤来从⽂件中反序列化出对象mysql.py"""以时间戳作为对象的id"""import timeimport pickleimport osimport settingsclass MySql:"""MySql类"""def__init__(self, host=settings.HOST, port=settings.PORT):self.host = hostself.port = portself.id = self.create_id() # 为对象⽣成iddef create_id(self):"""为对象⽣成id"""return int(time.time())def save(self):"""将对象序列化到⽂件中"""if not os.path.isfile(os.path.join(settings.DB_PATH, str(self.id))): # 判断⽂件是否存在with open(os.path.join(settings.DB_PATH, str(self.id)), "wb") as f:pickle.dump(self, f)else:raise TabError("the id has already existed")def get_obj_by_id(self, obj_id):"""反序列化对象"""with open(os.path.join(settings.DB_PATH, str(obj_id)), "rb") as f:mysql_obj = pickle.load(f)print(mysql_obj)print(mysql_obj.id,mysql_obj.host, mysql_obj.port)mysql = MySql() # 默认从配置⽂件中读取host和portmysql1 = MySql("192.168.0.11", 8089) # ⽤户传⼊host和portmysql1.save()mysql.get_obj_by_id(1528189434)View Codesettings.pyimport osDB_PATH = os.path.join(os.getcwd(), "db") # 序列化的⽂件存放位置HOST = "127.0.0.1"PORT = 8080View Code。
面向对象程序设计作业参考答案习题一5、分析下面程序运行的结果。
#using namespace std;int main(){cout<<”This”<<”is”;cout<<”a”<<”C++”;cout<<”program.”<<endl;< p="">return 0;}输出结果:ThisisaC++program.6、分析下面程序运行的结果。
#includeusing namespace std;int main(){int a,b,c;a = 10;b = 23;c = a + b;cout<<'a + b =";cout<<c;< p="">cout<<endl;< p="">return 0;}输出结果:a + b = 338、在你所用的C++系统上,输入以下程序,进行编译,观察编译情况,如果有错误,请修改程序,在进行编译,直到没有错误,然后进行连接和运行,分析运行结果。
修改后的程序如下:#includeusing namespace std;int main(){int a, b;a =b = 0;int c = a + b;cout<<”a + b =”<return 0;}9、输入以下程序,进行编译,观察编译情况,如果有错误,请修改程序,在进行编译,直到没有错误,然后进行连接和运行,分析运行结果。
修改后的程序如下:#includeusing namespace std;int add(int x,int y);int main(){int a = 0, b = 0;int c = add(a,b);cout<<" a + b ="<<c<<endl;< p="">return 0;}int add(int x,int y){int z = x + y;return z;}习题二1、请检查下面的程序,找出其中的错误(先不要上机,在纸面上作人工检查),并改正之。