版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 面向对象程序设计大作业姓名:叶尔凯西 学院(系):计科系 班级:计科系07-1班学号:08080605227设计本程序的目的:关于一些并不太复杂的集体来说,一般需要管理集体中的每个人的基本信息的,本程序专门为一些在校学生的基本信息的管理而设计的,主要目的是通过本程序来实现简单的记录和查找学生的基本信息;程序功能简介:本程序是通过面向对象的最重要的特点“类”来设计出来的,其功能是实现简单的学生基本信息管理。包括一些要求用户从键盘输入(记录)学生的基本信息、输出学生的基本信息和用学生的学号来查找学生信息表中的某个学生的基本信息等功能;程序功能的详细介绍:本人设计程序时考虑到的很所内容,其中输入输
2、出学生的基本信息是最基本的功能。下面来给大家介绍程序的核心类的构建: 在程序中共建立了两种类,分别是person类和student类。person作为student类的基类,其内部是如下设计的:class personpublic:void SetPersonAddress(char *AddressFromMain); void SetPersonSex(char *SexFromMain); void ShowPersonSex();void ShowPersonAddress();private:char Address25;char Sex2;可以看到,在上面分别声明了四个成员函数和两
3、个数据成员。四个成员函数的作用是对私有数据成员进行访问(包括输入和输出)。所以当建立了一个person类之后就可以通过它的对象来访问该类的数据成员。下面分别说明每一个成员函数的具体定义:(1) 设置(输入)人地址的成员函数: void person:SetPersonAddress(char *AddressFromMain)strcpy(Address,AddressFromMain);通过strcpy把字符指针的内容送入person类中的数据成员Address。(2) 设置(输入)人性别的成员函数: void person:SetPersonSex(char *SexFromMain)st
4、rcpy(Sex,SexFromMain); 通过strcpy把字符指针SexFromMain的内容作为地址的存储单元中的内容送入person类中Sex数据成员。(3) 输出地址成员函数: void person:ShowPersonAddress()cout<<Address<<endl;输出person类中的Address数据成员的内容;(4) 输出性别的成员函数: void person:ShowPersonSex()cout<<Sex<<endl;输出person类中的Sex数据成员的内容;接下来就是person基类的派生类student
5、类的内部设计如下:class student: public personpublic:void SetStudentInformation(char*NameFromMain,char *StudentAddressFromMain,char *StudentSexFromMain,char *StudentNumberFromMain, int *score);void ShowStudentInformation();friend void FindStudentNumber(student *data);friend void FindStudentName(student *data
6、);private:int MathResult,EnglishResult,CResult,CompilationLanguageResult,DigitalLogicResult,MarksismResult;char StudentNumber25;char Name25;float Average;int total;当设计student派生类的时候,最主要的特点就是利用了“类”的一个特点继承。所以说派生出来的student类也具有基类person的一些特点。在继承的方式上本人使用了共有继承方式(public),下面来给大家介绍student类的内部构造: 成员函数共有设置(输入)学生
7、信息、输出学生信息等两个。还有一个非成员函数的一个函数,它为该student类的友元函数,其功能是实现查找。除此之外还有从基类person类继承下来的一些成员函数; 数据成员分别为整形变量的学生成绩(包括数学成绩、英语成绩、C+成绩、汇编语言成绩、数字逻辑成绩、马克思哲学成绩等),字符数组的学生学号和学生姓名以及整型变量的学生的总分和单精度变量的平均分;下面介绍student派生类中的各个成员函数的定义部分:设置(输入)学生信息的成员函数:Void student:SetStudentInformation(char*NameFromMain,char*StudentAddressFromMa
8、in,char* StudentSexFromMain,char *StudentNumberFromMain, int *score)strcpy(Name,NameFromMain);SetPersonAddress(StudentAddressFromMain);SetPersonSex(StudentSexFromMain);strcpy(StudentNumber ,StudentNumberFromMain);for(int i=0; i<6; i+)switch(i)case 0: MathResult=score0;case 1: EnglishResult=score1
9、;case 2: CResult=score2;case 3: CompilationLanguageResult=score3;case 4: DigitalLogicResult=score4;case 5: MarksismResult=score5;total=MathResult+EnglishResult+CResult+CompilationLanguageResult+DigitalLogicResult+MarksismResult;Average=total/6.0;可以看到在设计student类的输入成员函数时其内部同时调用了从基类继承下来的一些成员函数,这就是继承的特点
10、。下面将会详细地介绍该成员函数的功能:首先是student类的两个字符数组变量学生姓名和学生学号的赋值通过strcpy来直接实现,也就是可通过该类的成员函数来给数据成员赋值。还有两个数据成员是不能够被继承下来的基类的两个字符数组学生性别和家庭地址,它们是通过student派生类的成员函数中调用从基类person中继承下来的成员函数,从而改变对不能被继承下来的基类的数据成员赋值。接着就是对student类中自己的数据成员学生成绩的赋值,它们是通过一个简单的switch case语句来实现的。输出学生信息的成员函数:void student:ShowStudentInformation()cout
11、<<endl;cout<<"学生的基本信息如下: "<<endl<<endl;cout<<"学生的姓名: "<<Name<<endl<<endl; cout<<"学生的学号为: "<<StudentNumber<<endl<<endl;cout<<"学生的家庭地址为: "ShowPersonAddress();cout<<endl;cout<&
12、lt;"学生的性别为: "ShowPersonSex();cout<<endl;cout<<"学生的考试课程成绩如下: "<<endl<<endl;cout<<"学生的离散数学课程成绩为: "<<MathResult<<"分"<<endl<<endl;cout<<"学生的英语课程成绩为: "<<EnglishResult<<"分"&l
13、t;<endl<<endl;cout<<"学生的C+课程成绩为: "<<CResult<<"分"<<endl<<endl;cout<<"学生的汇编语言课程成绩为: "<<CompilationLanguageResult<<"分"<<endl<<endl;cout<<"学生的数字逻辑课程成绩为: "<<DigitalLogicResul
14、t<<"分"<<endl<<endl;cout<<"学生的马克思主义哲学课程成绩为: "<<MarksismResult<<"分"<<endl<<endl;cout<<"学生的总分为:"<<total<<"分"<<endl<<endl;cout<<"学生的平均分为:"<<Average<<
15、;"分"<<endl<<endl;输出学生信息的成员函数的定义中不难发现输出时不仅会输出student派生类自己的数据成员的值还会同时输出不能被继承下来的基类person中的数据成员的值。这显然只能通过继承下来的成员函数来实现(如ShowPersonAddress()和ShowPersonSex()。下面来介绍三个非成员函数,其中两个为student类的友元函数。它就是实现查找功能的(分别用学生学号和学生姓名来进行查找),另一个是一个单独的普通函数。其功能是当程序运行时保持一个用户界面的功能。Student类共有两个友元函数,分别是friend vo
16、id FindStudentNumber(student *data)和friend void FindStudentName(student *data),它们两个都有查找功能,只是一个用学生的学号另一个用学生的姓名进行查找。下面详细介绍student类的两个友元函数中的用学号查找的函数是如何的定义:void FindStudentNumber(student *data)char findnum25;cout<<"请输入学号:"cin>>findnum;int i=0;for(i;i<StuNum;i+)if(strcmp(datai.St
17、udentNumber,findnum)=0)cout<<"在第"<<i+1<<"个编号里有您查找的记录:"<<endl;datai.ShowStudentInformation();if(strcmp(datai.StudentNumber,findnum)<0)|(strcmp(datai.StudentNumber,findnum)>0)cout<<"在编号"<<i+1<<"里没有您查找的记录!"<<e
18、ndl; 下面详细介绍student类的两个友元函数中的用姓名查找的函数是如何的定义:void FindStudentName(student *data)char findname25;cout<<"请输入姓名:"cin>>findname;int i=0;for(i;i<StuNum;i+)if(strcmp(datai.Name,findname)=0)cout<<"在第"<<i+1<<"个编号里有您查找的记录:"<<endl;datai.ShowSt
19、udentInformation();if(strcmp(datai.Name,findname)<0)|(strcmp(datai.Name,findname)>0)cout<<"在编号"<<i+1<<"里没有您查找的记录!"<<endl; 可以看出student类的两个友元函数即查找(分别用学号和姓名)函数的定义都很相似,主要是算法是一致。因为在student类中数据成员学生姓名和学生学号都是用字符数组来定义的,所以上面的两个分别用学号和姓名来查找的函数的算法是基本一致的,只是一个是用stu
20、dent类的一个对象中里面的name(姓名)去查找,另一个是用student类的一个对象中里面的StudentNumber(学生姓名)去查找。在整个查找函数先是在函数的参数表中声明student类的对象指针,在主函数main中当调用查找函数时把main函数中定义的student类的数组的首地址传送给查找函数。在查找函数中先定义一个字符数组,再提示用户输入要查找的学生的姓名或学号,当姓名或学号在相应的学生编号里的相应的name(姓名)和StudentNumber(学生学号)相等时查找便成功并提示用户该学号或姓名为基本信息的学生信息输出在屏幕上,当不相等时查找不成功并提示用户没有找到学生的记录。下
21、面介绍非成员函数即普通函数(程序运行时保持一个用户界面功能的函数):void paint() int i; cout<<" 学生信息管理系统"<<endl; for (i = 0; i<80; i+) putchar('%'); cout<<endl; cout<<"(1) 输入学生的信息 (3)用学号查找学生基本信息 "<<endl; cout<<endl; cout<<"(2) 输出学生信息 (4)用姓名查找学生基本信息 "&
22、lt;<endl; cout<<endl; cout<<"(0) 退出程序 "<<endl; cout<<" 备注:如果您还没有输入任何信息,请先输入信息再输出!"<<endl; cout<<endl; for (i = 0; i<80; i+) putchar('%'); cout<<endl;上面的普通函数只是一个简单的函数,其功能只是在屏幕上保持如下一个画面:学生信息管理系统%(1) 输入学生的信息 (3)用学号查找学生基本信息(2) 输
23、出学生信息 (4)用姓名查找学生基本信息(0) 退出程序备注:如果您还没有输入任何信息,请先输入信息再输出!%接着给大家介绍主函数main的定义部分:void main()char StuSex2,StuName25 ,StuAddress25,StuNumber25;int StuScore6,ctrl;int i=0,j;student stuStuNum;paint();cout<<"请选择一个序号 "<<endl;cin>>ctrl;while (ctrl != 0) switch(ctrl) case 1:for(i; i<
24、;StuNum; i+ )system("cls");cout<<"请输入第"<<i+1<<"个学生的基本信息:"<<endl;cout<<"请输入学生的姓名:"cin>>StuName;cout<<endl;cout<<"请输入学生的性别: "cin>>StuSex;cout<<endl;cout<<"请输入学生的学号: "cin>>
25、;StuNumber;cout<<endl;cout<<"请输入学生的家庭地址: "cin>>StuAddress;cout<<endl;cout<<"请按顺序输入学生的考试成绩"<<endl;cout<<endl;cout<<"离散数学课程成绩: "cin>>StuScore0;cout<<endl;cout<<"英语课程成绩: "cin>>StuScore1;cout&
26、lt;<endl;cout<<"C+课程成绩: "cin>>StuScore2;cout<<endl;cout<<"汇编语言课程成绩: "cin>>StuScore3;cout<<endl;cout<<"数字逻辑课程成绩: "cin>>StuScore4;cout<<endl;cout<<"马克思主义哲学课程成绩: " cin>>StuScore5;cout<<end
27、l<<endl;stui.SetStudentInformation(StuName,StuAddress,StuSex,StuNumber,StuScore); break; case 2:cout<<endl;system("cls");for(j=0; j<StuNum; j+)stuj.ShowStudentInformation(); system("pause");break; case 3: cout<<endl;system("cls");FindStudentNumber(s
28、tu);system("pause");break; case 4:cout<<endl;system("cls");FindStudentName(stu);system("pause");break;if (ctrl != 'n')system("cls");paint();cout<<"请选择一个序号"<<endl;cin>>ctrl;main主函数的实现比较长,主要是因为在main函数中不仅仅定义了普通变量(基本变量)用来暂
29、时存放从键盘输入的学生基本信息,还定义了student类的对象数组,且使用了while循环和switch case语句来不停地进行选择,case的每一个分句分别实现不同的功能,case 1主要实现输入,用for循环来把student对象数组的每一个对象本别进行赋值;case 2主要实现输出功能,输出时用for循环调用每一个student数组对象的ShowStudentInformation()函数(输出学生信息的成员函数);case 3和case 4主要就是实现查找功能,只是因为查找函数不是student类的成员函数,所以可以直接调用函数,在实参表里写了student对象数组的首地址,把stu
30、dent对象数组的首地址传递给查找函数;程序源代码:#include<iostream>#include<iomanip>using namespace std;const int StuNum=1;class personpublic:void SetPersonAddress(char *AddressFromMain); void SetPersonSex(char *SexFromMain); void ShowPersonSex();void ShowPersonAddress();private:char Address25;char Sex2;void p
31、erson:SetPersonAddress(char *AddressFromMain)strcpy(Address,AddressFromMain);void person:SetPersonSex(char *SexFromMain)strcpy(Sex,SexFromMain); void person:ShowPersonAddress()cout<<Address<<endl;void person:ShowPersonSex()cout<<Sex<<endl;class student: public personpublic:vo
32、id SetStudentInformation(char *NameFromMain,char *StudentAddressFromMain,char *StudentSexFromMain,char *StudentNumberFromMain, int *score);void ShowStudentInformation();friend void FindStudentNumber(student *data);friend void FindStudentName(student *data);private:int MathResult,EnglishResult,CResul
33、t,CompilationLanguageResult,DigitalLogicResult,MarksismResult;char StudentNumber25;char Name25;float Average;int total;void student:SetStudentInformation(char *NameFromMain,char *StudentAddressFromMain,char* StudentSexFromMain,char *StudentNumberFromMain, int *score)strcpy(Name,NameFromMain);SetPers
34、onAddress(StudentAddressFromMain);SetPersonSex(StudentSexFromMain);strcpy(StudentNumber ,StudentNumberFromMain);for(int i=0; i<6; i+)switch(i)case 0: MathResult=score0;case 1: EnglishResult=score1;case 2: CResult=score2;case 3: CompilationLanguageResult=score3;case 4: DigitalLogicResult=score4;ca
35、se 5: MarksismResult=score5;total=MathResult+EnglishResult+CResult+CompilationLanguageResult+DigitalLogicResult+MarksismResult;Average=total/6.0;void student:ShowStudentInformation()cout<<endl;cout<<"学生的基本信息如下: "<<endl<<endl;cout<<"学生的姓名: "<<Na
36、me<<endl<<endl; cout<<"学生的学号为: "<<StudentNumber<<endl<<endl;cout<<"学生的家庭地址为: "ShowPersonAddress();cout<<endl;cout<<"学生的性别为: "ShowPersonSex();cout<<endl;cout<<"学生的考试课程成绩如下: "<<endl<<e
37、ndl;cout<<"学生的离散数学课程成绩为: "<<MathResult<<"分"<<endl<<endl;cout<<"学生的英语课程成绩为: "<<EnglishResult<<"分"<<endl<<endl;cout<<"学生的C+课程成绩为: "<<CResult<<"分"<<endl<<
38、;endl;cout<<"学生的汇编语言课程成绩为: "<<CompilationLanguageResult<<"分"<<endl<<endl;cout<<"学生的数字逻辑课程成绩为: "<<DigitalLogicResult<<"分"<<endl<<endl;cout<<"学生的马克思主义哲学课程成绩为: "<<MarksismResult<
39、<"分"<<endl<<endl;cout<<"学生的总分为:"<<total<<"分"<<endl<<endl;cout<<"学生的平均分为:"<<Average<<"分"<<endl<<endl;void FindStudentNumber(student *data)char findnum25;cout<<"请输入学号
40、:"cin>>findnum;int i=0;for(i;i<StuNum;i+)if(strcmp(datai.StudentNumber,findnum)=0)cout<<"在第"<<i+1<<"个编号里有您查找的记录:"<<endl;datai.ShowStudentInformation();if(strcmp(datai.StudentNumber,findnum)<0)|(strcmp(datai.StudentNumber,findnum)>0)cout
41、<<"在编号"<<i+1<<"里没有您查找的记录!"<<endl; void FindStudentName(student *data)char findname25;cout<<"请输入姓名:"cin>>findname;int i=0;for(i;i<StuNum;i+)if(strcmp(datai.Name,findname)=0)cout<<"在第"<<i+1<<"个编号里有您查找
42、的记录:"<<endl;datai.ShowStudentInformation();if(strcmp(datai.Name,findname)<0)|(strcmp(datai.Name,findname)>0)cout<<"在编号"<<i+1<<"里没有您查找的记录!"<<endl; void paint() int i; cout<<" 学生信息管理系统"<<endl; for (i = 0; i<80; i+) p
43、utchar('%'); cout<<endl; cout<<"(1) 输入学生的信息 (3)用学号查找学生基本信息 "<<endl; cout<<endl; cout<<"(2) 输出学生信息 (4)用姓名查找学生基本信息 "<<endl; cout<<endl; cout<<"(0) 退出程序 "<<endl; cout<<" 备注:如果您还没有输入任何信息,请先输入信息再输出!&quo
44、t;<<endl; cout<<endl; for (i = 0; i<80; i+) putchar('%'); cout<<endl;void main()char StuSex2,StuName25 ,StuAddress25,StuNumber25;int StuScore6,ctrl;int i=0,j;student stuStuNum;paint();cout<<"请选择一个序号 "<<endl;cin>>ctrl;while (ctrl != 0) switch(ctrl) case
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024股权抵押借款合同范本格式
- 2024商品买卖合同范本
- 2024年度甲方聘请乙方进行市场推广服务的合同
- 工厂用工合同协议书(2024年)
- 2024年建筑劳务分包主体结构合同
- 个人质押担保借款合同模板
- 2024年度金融服务与投资咨询合同
- 标准版工程居间合同格式
- 合法劳务施工协议书样式
- 精美施工合同模板
- 表 3.0.12-4 单位(子单位)工程质量竣工验收记录
- 新能源汽车技术职业生涯规划
- 新版查对制度专项检查表(涵盖患者身份识别、临床诊疗行为、设备设施运行和医疗环境安全等相关方面)
- 企业法律合规与纠纷解决策略课件
- 分析当前不同类别商品生活必须品奢侈品价格变动对居民消费的影响
- 社会工作大数据分析与应用
- 医院季度投诉分析报告模板
- 《心脏听诊》课件
- JJG(交通) 169-2020 动力触探仪
- 《新疆大学版学术期刊目录》(人文社科)
- 建造冷库可行性报告
评论
0/150
提交评论