C++程序设计大作业含源代码_第1页
C++程序设计大作业含源代码_第2页
C++程序设计大作业含源代码_第3页
C++程序设计大作业含源代码_第4页
C++程序设计大作业含源代码_第5页
已阅读5页,还剩5页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、面 向 对 象 程 序 设 计 大 作 业姓名:叶尔凯西 学院(系):计科系 班级:计科系 07-1 班 学号: 设计本程序的目的: 关于一些并不太复杂的集体来说,一般需要管理集体中的每个人的基本信息的,本程序专门为一些在校 学生的基本信息的管理而设计的,主要目的是通过本程序来实现简单的记录和查找学生的基本信息; 程序功能简介: 本程序是通过面向对象的最重要的特点“类”来设计出来的,其功能是实现简单的学生基本信息管理。 包括一些要求用户从键盘输入(记录)学生的基本信息、输出学生的基本信息和用学生的学号来查找学生信 息表中的某个学生的基本信息等功能;程序功能的详细介绍: 本人设计程序时考虑到的很

2、所内容,其中输入输出学生的基本信息是最基本的功能。下面来给大家介绍 程序的核心类的构建: 在程序中共建立了两种类,分别是 person 类和 student 类。 person 作为 student 类的基类,其内部 是如下设计的: class person public: 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

4、:SetPersonSex(char *SexFromMain) strcpy(Sex,SexFromMain);通过 strcpy 把字符指针 SexFromMain 的内容作为地址的存储单元中的内容送入 person 类 中 Sex 数据成员。( 3) 输出地址成员函数:void person:ShowPersonAddress() cout<<Address<<endl;输出 person 类中的 Address 数据成员的内容;( 4) 输出性别的成员函数:void person:ShowPersonSex() cout<<Sex<<en

5、dl;输出 person 类中的 Sex 数据成员的内容;接下来就是 person 基类的派生类 student 类的内部设计如下:class student: public personpublic:void SetStudentInformation(char*NameFromMain,char *StudentAddressFromMain,char *StudentSexFromMain,char *StudentNumberFromMain, int *score);void ShowStudentInformation();friend void FindStudentNumber

6、(student *data);friend void FindStudentName(student *data);private:int MathResult,EnglishResult,CResult,CompilationLanguageResult,DigitalLogicResult,MarksismResu lt;char StudentNumber25;char Name25;float Average;int total;当设计 student 派生类的时候,最主要的特点就是利用了“类”的一个特点继承。 所以说派生出来的 student 类也具有基类 person 的一些特点

7、。在继承的方式上本人使用了共有继承方式public ),下面来给大家介绍 student 类的内部构造: 成员函数共有设置 ( 输入 ) 学生信息、输出学生信息等两个。还有一个非成员函数的一个函数,它为 该 student 类的友元函数,其功能是实现查找。除此之外还有从基类 person 类继承下来的一些成员函数;数据成员分别为整形变量的学生成绩(包括数学成绩、英语成绩、C+成绩、汇编语言成绩、数字逻辑成绩、马克思哲学成绩等) ,字符数组的学生学号和学生姓名以及整型变量的学生的总分和单精度 变量的平均分;下面介绍 student 派生类中的各个成员函数的定义部分: 设置(输入 )学生信息的成员

8、函数:Void student:SetStudentInformation(char*NameFromMain,char*StudentAddressFromMain,char*StudentSexFromMain,char *StudentNumberFromMain, int *score)strcpy(Name,NameFromMain);SetPersonAddress(StudentAddressFromMain);SetPersonSex(StudentSexFromMain);strcpy(StudentNumber ,StudentNumberFromMain);for(int

9、 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;case 5:MarksismResult=score5;total=MathResult+EnglishResult+CResult+CompilationLanguageResult+DigitalLogicResult+MarksismResul

10、t;Average=total/6.0;可以看到在设计 student 类的输入成员函数时其内部同时调用了从基类继承下来的一些成员函数,这就 是继承的特点。下面将会详细地介绍该成员函数的功能:首先是 student 类的两个字符数组变量学生姓名和学生学号的赋值通过 strcpy 来直接实现, 也就是可通 过该类的成员函数来给数据成员赋值。还有两个数据成员是不能够被继承下来的基类的两个字符数组学生性 别和家庭地址, 它们是通过 student 派生类的成员函数中调用从基类 person 中继承下来的成员函数, 从而改 变对不能被继承下来的基类的数据成员赋值。接着就是对 student 类中自己的

11、数据成员学生成绩的赋值,它 们是通过一个简单的 switch case 语句来实现的。输出学生信息的成员函数:void student:ShowStudentInformation()cout<<endl;cout<<" 学生的基本信息如下 : "<<endl<<endl;cout<<" 学生的姓名 : "<<Name<<endl<<endl;cout<<" 学生的学号为 : "<<StudentNumber<

12、<endl<<endl;cout<<" 学生的家庭地址为 : "ShowPersonAddress();cout<<endl;cout<<" 学生的性别为 : "ShowPersonSex(); cout<<endl;cout<<" 学生的考试课程成绩如下 : "<<endl<<endl;cout<<" 学生的离散数学课程成绩为 : "<<MathResult<<"分

13、"<<endl<<endl;cout<<" 学生的英语课程成绩为 : "<<EnglishResult<<" 分 "<<endl<<endl;cout<<"学生的 C+课程成绩为:"<<CResult<<" 分"<<endl<<endl;cout<<"学生的汇编语言课程成绩为:"<<CompilationLanguage

14、Result<<"分"<<endl<<endl;cout<<"学生的数字逻辑课程成绩为:"<<DigitalLogicResult<<" 分"<<endl<<endl;cout<<"学生的马克思主义哲学课程成绩为:"<<MarksismResult<<"分"<<endl<<endl;cout<<"学生的总分为:"

15、;<<total<<"分"<<endl<<endl;cout<<"学生的平均分为:"<<Average<<"分"<<endl<<endl;输出学生信息的成员函数的定义中不难发现输出时不仅会输出student 派生类自己的数据成员的值还会同时输出不能被继承下来的基类 person 中的数据成员的值。 这显然只能通过继承下来的成员函数来实现 (如 ShowPersonAddress ()和 ShowPersonSex()。下面来介绍

16、三个非成员函数,其中两个为 student 类的友元函数。它就是实现查找功能的(分别用学生 学号和学生姓名来进行查找) ,另一个是一个单独的普通函数。 其功能是当程序运行时保持一个用户界面的功 能。Student 类共有两个友元函数,分别是 friend void FindStudentNumber(student *data)和 friendvoid FindStudentName(student *data) ,它们两个都有查找功能,只是一个用学生的学号另一个用学生的姓 名进行查找。下面详细介绍 student 类的两个友元函数中的用学号查找的函数是如何的定义:void FindStude

17、ntNumber(student *data) char findnum25;cout<<" 请输入学号: " 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.Stu

18、dentNumber,findnum)<0)|(strcmp(datai.StudentNumber,findnum)>0)cout<<" 在编号 "<<i+1<<" 里没有您查找的记录 !"<<endl; 下面详细介绍 student 类的两个友元函数中的用姓名查找的函数是如何的定义: void FindStudentName(student *data)char findname25; cout<<" 请输入姓名: " cin>>findname;

19、int i=0; for(i;i<StuNum;i+) if(strcmp(datai.Name,findname)=0) cout<<" 在第 "<<i+1<<" 个编号里有您查找的记录: "<<endl; datai.ShowStudentInformation(); if(strcmp(datai.Name,findname)<0)|(strcmp(datai.Name,findname)>0) cout<<" 在编号 "<<i+1<

20、<" 里没有您查找的记录 !"<<endl;可以看出 student 类的两个友元函数即查找(分别用学号和姓名)函数的定义都很相似,主要是算法是 一致。因为在 student 类中数据成员学生姓名和学生学号都是用字符数组来定义的,所以上面的两个分别用 学号和姓名来查找的函数的算法是基本一致的,只是一个是用student类的一个对象中里面的name (姓名)去查找,另一个是用 student 类的一个对象中里面的 StudentNumber (学生姓名)去查找。在整个查找函数 先是在函数的参数表中声明 student 类的对象指针,在主函数 main 中当调

21、用查找函数时把 main 函数中定义 的 student 类的数组的首地址传送给查找函数。在查找函数中先定义一个字符数组,再提示用户输入要查找 的学生的姓名或学号,当姓名或学号在相应的学生编号里的相应的name (姓名)和StudentNumber (学生学号)相等时查找便成功并提示用户该学号或姓名为基本信息的学生信息输出在屏幕上,当不相等时查找不成 功并提示用户没有找到学生的记录。下面介绍非成员函数即普通函数(程序运行时保持一个用户界面功能的函数) void paint()int i;cout<<"学生信息管理系统 "<<endl;for (i =

22、 0; i<80; i+)putchar('%');cout<<endl;cout<<"(1)输入学生的信息(3)用学号查找学生基本信息"<<endl;cout<<endl;cout<<"(2)输出学生信息(4)用姓名查找学生基本信息"<<endl;cout<<endl;cout<<"(0)退出程序 "<<endl;cout<<"备注:如果您还没有输入任何信息,请先输入信息再输出&qu

23、ot;<<endl; cout<<endl;for (i = 0; i<80; i+) putchar('%'); cout<<endl;上面的普通函数只是一个简单的函数,其功能只是在屏幕上保持如下一个画面:学生信息管理系统%(1) 输入学生的信息(3)用学号查找学生基本信息(2) 输出学生信息(4)用姓名查找学生基本信息(0) 退出程序 备注:如果您还没有输入任何信息,请先输入信息再输出!% 接着给大家介绍主函数 main 的定义部分:void main()char StuSex2,StuName25 ,StuAddress25,St

24、uNumber25;int StuScore6,ctrl;int i=0,j;student stuStuNum;paint();cout<<" 请选择一个序号 "<<endl;cin>>ctrl;while (ctrl != 0)switch(ctrl)case 1:for(i; i<StuNum; i+ )system("cls");"<<endl;cout<<" 请输入第 "<<i+1<<" 个学生的基本信息:cout&

25、lt;<" 请输入学生的姓名: " cin>>StuName;cout<<endl;cout<<" 请输入学生的性别 : "cin>>StuSex;cout<<endl;cout<<" 请输入学生的学号 : " cin>>StuNumber;cout<<endl;cout<<" 请输入学生的家庭地址 : "cin>>StuAddress;cout<<endl;cout<&l

26、t;" 请按顺序输入学生的考试成绩 "<<endl; cout<<endl;cout<<" 离散数学课程成绩 : "cin>>StuScore0;cout<<endl;cout<<" 英语课程成绩 : "cin>>StuScore1;cout<<endl;cout<<"C+ 课程成绩 : "cin>>StuScore2;cout<<endl;cout<<" 汇编语

27、言课程成绩 : "cin>>StuScore3;cout<<endl;cout<<" 数字逻辑课程成绩 : "cin>>StuScore4;cout<<endl;cout<<" 马克思主义哲学课程成绩 : "cin>>StuScore5;cout<<endl<<endl;stui.SetStudentInformation(StuName,StuAddress,StuSex,StuNumber,StuScore);case 2:break

28、;cout<<endl; system("cls"); for(j=0; j<StuNum; j+) stuj.ShowStudentInformation();system("pause"); break;case 3: cout<<endl; system("cls");FindStudentNumber(stu); system("pause"); break;case 4: cout<<endl; system("cls");FindStuden

29、tName(stu); system("pause");if (ctrl != 'n')break;system("cls");paint();cout<<" 请选择一个序号 "<<endl;cin>>ctrl;main 主函数的实现比较长,主要是因为在 main 函数中不仅仅定义了普通变量(基本变量)用来暂 时存放从键盘输入的学生基本信息,还定义了 student 类的对象数组,且使用了 while 循环和 switch case 语句来不停地进行选择, case 的每一个分句分别

30、实现不同的功能, case 1 主要实现输入,用 for 循环来把 student 对象数组的每一个对象本别进行赋值; case 2 主要实现输出功能,输出时用 for 循环调用每一个 student 数组对象的 ShowStudentInformation() 函数(输出学生信息的成员函数) ; case 3 和 case 4 主要就 是实现查找功能,只是因为查找函数不是 student 类的成员函数,所以可以直接调用函数,在实参表里写了 student 对象数组的首地址,把 student 对象数组的首地址传递给查找函数;程序源代码: #include<iostream> #i

31、nclude<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 person:SetPersonAddress(char *AddressFromMain)strcpy(A

32、ddress,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:void SetStudentInformation(char *NameFromMain,char *Stud

33、entAddressFromMain,char *StudentSexFromMain,char *StudentNumberFromMain, int *score);void ShowStudentInformation();friend void FindStudentNumber(student *data);friend void FindStudentName(student *data);private:int MathResult,EnglishResult,CResult,CompilationLanguageResult,DigitalLogicResult,Marksis

34、mResult;char StudentNumber25;char Name25;float Average;int total;void student:SetStudentInformation(char *NameFromMain,char *StudentAddressFromMain,char*StudentSexFromMain,char *StudentNumberFromMain, int *score)strcpy(Name,NameFromMain);SetPersonAddress(StudentAddressFromMain);SetPersonSex(StudentS

35、exFromMain);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;case 5:MarksismResult=score5;total=MathResult+EnglishResult+CR

36、esult+CompilationLanguageResu lt+DigitalLogicResult+MarksismResult;Average=total/6.0;void student:ShowStudentInformation()cout<<endl;cout<<" 学生的基本信息如下 : "<<endl<<endl;cout<<" 学生的姓名 : "<<Name<<endl<<endl;cout<<" 学生的学号为 : &

37、quot;<<StudentNumber<<endl<<endl;cout<<" 学生的家庭地址为 : "ShowPersonAddress();cout<<endl;cout<<" 学生的性别为 : "ShowPersonSex();cout<<endl;cout<<" 学生的考试课程成绩如下 : "<<endl<<endl;分分分分cout<<" 学 生 的 离 散 数 学 课 程 成 绩

38、为 : "<<MathResult<<" "<<endl<<endl;cout<<" 学 生 的 英 语 课 程 成 绩 为 : "<<EnglishResult<<" "<<endl<<endl;cout<<"学生的 C+课程成绩为:"<<CResult<<"分"<<endl<<endl;cout<<&qu

39、ot; 学 生 的 汇 编 语 言 课 程 成 绩 为 "<<Compilati onLan guageResult<<"分"<<e ndl<<e ndl;cout<<" 学生 的 数 字 逻 辑课 程 成 绩 为 : "<<DigitalLogicResult<<" "<<endl<<endl;cout<<" 学生的马克思主义哲学课程成绩为 : "<<MarksismRes

40、ult<<""<<endl<<endl;cout<<"学生的总分为:"<<total<<"分"<<endl<<endl;cout<<"学生的平均分为:"<<Average<<"分"<<endl<<endl;void FindStudentNumber(student *data)char findnum25;cout<<" 请输入学号: "cin>>findnum;int i=0;for(i;i<StuNum;i+)if(strcmp(datai.Student

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论