《C程序设计大作业(含源代码).pdf》由会员分享,可在线阅读,更多相关《C程序设计大作业(含源代码).pdf(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、面向对象程序设计大作业姓名:叶尔凯西学院(系):计科系班级:计科系 07-1 班学号:0271设计本程序的目的:关于一些并不太复杂的集体来说,一般需要管理集体中的每个人的基本信息的,本程序专门为一些在校学生的基本信息的管理而设计的,主要目的是通过本程序来实现简单的记录和查找学生的基本信息;程序功能简介:本程序是通过面向对象的最重要的特点“类”来设计出来的,其功能是实现简单的学生基本信息管理。包括一些要求用户从键盘输入(记录)学生的基本信息、输出学生的基本信息和用学生的学号来查找学生信息表中的某个学生的基本信息等功能;程序功能的详细介绍:本人设计程序时考虑到的很所内容,其中输入输出学生的基本信息
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)strcpy(Sex
4、,SexFromMain);2通过 strcpy 把字符指针 SexFromMain 的内容作为地址的存储单元中的内容送入 person 类中 Sex 数据成员。(3)输出地址成员函数:void person:ShowPersonAddress()coutAddressendl;输出 person 类中的 Address 数据成员的内容;(4)输出性别的成员函数:void person:ShowPersonSex()coutSexendl;输出 person 类中的 Sex 数据成员的内容;接下来就是 person 基类的派生类 student 类的内部设计如下:class student:p
5、ublic 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);private:intMathResult,EnglishR
6、esult,CResult,CompilationLanguageResult,DigitalLogicResult,MarksismResult;char StudentNumber25;char Name25;float Average;int total;当设计 student 派生类的时候,最主要的特点就是利用了“类”的一个特点继承。所以说派生出来的 student 类也具有基类 person 的一些特点。在继承的方式上本人使用了共有继承方式(public),下面来给大家介绍 student 类的内部构造:成员函数共有设置(输入)学生信息、输出学生信息等两个。还有一个非成员函数的一个函
7、数,它为该 student 类的友元函数,其功能是实现查找。除此之外还有从基类 person 类继承下来的一些成员函数;数据成员分别为整形变量的学生成绩(包括数学成绩、英语成绩、C+成绩、汇编语言成绩、数字逻辑成绩、马克思哲学成绩等),字符数组的学生学号和学生姓名以及整型变量的学生的总分和单精度变量的平均分;3下面介绍 student 派生类中的各个成员函数的定义部分:设置(输入)学生信息的成员函数:Voidstudent:SetStudentInformation(char*NameFromMain,char*StudentAddressFromMain,char*StudentSexFro
8、mMain,char*StudentNumberFromMain,int*score)strcpy(Name,NameFromMain);SetPersonAddress(StudentAddressFromMain);SetPersonSex(StudentSexFromMain);strcpy(StudentNumber,StudentNumberFromMain);for(int i=0;i6;i+)switch(i)case 0:MathResult=score0;case 1:EnglishResult=score1;case 2:CResult=score2;case 3:Comp
9、ilationLanguageResult=score3;case 4:DigitalLogicResult=score4;case 5:MarksismResult=score5;total=MathResult+EnglishResult+CResult+CompilationLanguageResult+DigitalLogicResult+MarksismResult;Average=total/6.0;可以看到在设计 student 类的输入成员函数时其内部同时调用了从基类继承下来的一些成员函数,这就是继承的特点。下面将会详细地介绍该成员函数的功能:首先是 student 类的两个字
10、符数组变量学生姓名和学生学号的赋值通过strcpy 来直接实现,也就是可通过该类的成员函数来给数据成员赋值。还有两个数据成员是不能够被继承下来的基类的两个字符数组学生性别和家庭地址,它们是通过 student 派生类的成员函数中调用从基类 person 中继承下来的成员函数,从而改变对不能被继承下来的基类的数据成员赋值。接着就是对 student 类中自己的数据成员学生成绩的赋值,它们是通过一个简单的switch case 语句来实现的。4输出学生信息的成员函数:void student:ShowStudentInformation()coutendl;cout学生的基本信息如下:endlen
11、dl;cout学生的姓名:Nameendlendl;cout学生的学号为:StudentNumberendlendl;cout学生的家庭地址为:;ShowPersonAddress();coutendl;cout学生的性别为:;ShowPersonSex();coutendl;cout学生的考试课程成绩如下:endlendl;cout学生的离散数学课程成绩为:MathResult分endlendl;cout学生的英语课程成绩为:EnglishResult分endlendl;cout学生的 C+课程成绩为:CResult分endlendl;cout 学 生 的 汇 编 语 言 课 程 成 绩 为
12、:CompilationLanguageResult 分endlendl;cout学生的数字逻辑课程成绩为:DigitalLogicResult分endlendl;cout学生的马克思主义哲学课程成绩为:MarksismResult分endlendl;cout学生的总分为:total分endlendl;cout学生的平均分为:Average分endlendl;输出学生信息的成员函数的定义中不难发现输出时不仅会输出 student 派生类自己的数据成员的值还会同时输出不能被继承下来的基类person 中的数据成员的值。这显然只能通过继承下来的成员函数来实现(如ShowPersonAddress(
13、)和 ShowPersonSex()。下面来介绍三个非成员函数,其中两个为 student 类的友元函数。它就是实现查找功能的(分别用学生学号和学生姓名来进行查找),另一个是一个单独的普通函数。其功能是当程序运行时保持一个用户界面的功能。Student 类共有两个友元函数,分别是 friend void FindStudentNumber(student5*data)和 friend void FindStudentName(student*data),它们两个都有查找功能,只是一个用学生的学号另一个用学生的姓名进行查找。下面详细介绍 student 类的两个友元函数中的用学号查找的函数是如何
14、的定义:void FindStudentNumber(student*data)char findnum25;coutfindnum;int i=0;for(i;iStuNum;i+)if(strcmp(datai.StudentNumber,findnum)=0)cout在第i+1个编号里有您查找的记录:endl;datai.ShowStudentInformation();if(strcmp(datai.StudentNumber,findnum)0)cout在编号i+1里没有您查找的记录endl;下面详细介绍 student 类的两个友元函数中的用姓名查找的函数是如何的定义:void F
15、indStudentName(student*data)char findname25;coutfindname;int i=0;for(i;iStuNum;i+)if(strcmp(datai.Name,findname)=0)cout在第i+1个编号里有您查找的记录:endl;datai.ShowStudentInformation();if(strcmp(datai.Name,findname)0)cout在编号i+1里没有您查找的记录endl;可以看出 student 类的两个友元函数即查找(分别用学号和姓名)函数的定义都很相似,主要是算法是一致。因为在 student 类中数据成员学
16、生姓名和学生学号都是用字符数组来定6义的,所以上面的两个分别用学号和姓名来查找的函数的算法是基本一致的,只是一个是用student 类的一个对象中里面的name(姓名)去查找,另一个是用 student 类的一个对象中里面的 StudentNumber(学生姓名)去查找。在整个查找函数先是在函数的参数表中声明student 类的对象指针,在主函数main 中当调用查找函数时把 main 函数中定义的 student类的数组的首地址传送给查找函数。在查找函数中先定义一个字符数组,再提示用户输入要查找的学生的姓名或学号,当姓名或学号在相应的学生编号里的相应的name(姓名)和StudentNumb
17、er(学生学号)相等时查找便成功并提示用户该学号或姓名为基本信息的学生信息输出在屏幕上,当不相等时查找不成功并提示用户没有找到学生的记录。下面介绍非成员函数即普通函数(程序运行时保持一个用户界面功能的函数):void paint()int i;cout学生信息管理系统endl;for(i=0;i80;i+)putchar(%);coutendl;cout(1)输入学生的信息 (3)用学号查找学生基本信息 endl;coutendl;cout(2)输出学生信息 (4)用姓名查找学生基本信息 endl;coutendl;cout(0)退出程序 endl;cout备注:如果您还没有输入任何信息,请先
18、输入信息再输出!endl;coutendl;for(i=0;i80;i+)putchar(%);coutendl;上面的普通函数只是一个简单的函数,其功能只是在屏幕上保持如下一个画面:学生信息管理系统%(1)输入学生的信息 (3)用学号查找学生基本信息(2)输出学生信息 (4)用姓名查找学生基本信息(0)退出程序备注:如果您还没有输入任何信息,请先输入信息再输出!%接着给大家介绍主函数 main 的定义部分:void main()7char StuSex2,StuName25,StuAddress25,StuNumber25;int StuScore6,ctrl;int i=0,j;stude
19、nt stuStuNum;paint();cout请选择一个序号 ctrl;while(ctrl!=0)endl;switch(ctrl)case 1:for(i;iStuNum;i+)system(cls);cout请输入第i+1个学生的基本信息:coutStuName;coutendl;coutStuSex;coutendl;coutStuNumber;coutendl;coutStuAddress;coutendl;cout请按顺序输入学生的考试成绩endl;coutendl;coutStuScore0;coutendl;coutStuScore1;coutendl;coutStuSco
20、re2;coutendl;coutStuScore3;8coutendl;coutStuScore4;coutendl;coutStuScore5;coutendlendl;stui.SetStudentInformation(StuName,StuAddress,StuSex,StuNumber,StuScore);break;case 2:coutendl;system(cls);for(j=0;jStuNum;j+)stuj.ShowStudentInformation();system(pause);break;case 3:coutendl;system(cls);FindStude
21、ntNumber(stu);system(pause);break;case 4:coutendl;system(cls);FindStudentName(stu);system(pause);break;if(ctrl!=n)system(cls);paint();cout请选择一个序号ctrl;9main 主函数的实现比较长,主要是因为在main 函数中不仅仅定义了普通变量(基本变量)用来暂时存放从键盘输入的学生基本信息,还定义了 student 类的对象数组,且使用了 while 循环和 switch case 语句来不停地进行选择,case 的每一个分句分别实现不同的功能,case 1
22、 主要实现输入,用 for 循环来把 student 对象数组的每一个对象本别进行赋值;case 2 主要实现输出功能,输出时用for 循环调用每一个 student 数组对象的ShowStudentInformation()函数(输出学生信息的成员函数);case 3 和 case 4 主要就是实现查找功能,只是因为查找函数不是 student 类的成员函数,所以可以直接调用函数,在实参表里写了 student 对象数组的首地址,把student 对象数组的首地址传递给查找函数;程序源代码:#include#includeusing namespace std;const int StuNu
23、m=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(Address,AddressFromMain);void person:SetPersonSex(char*SexFro
24、mMain)strcpy(Sex,SexFromMain);void person:ShowPersonAddress()coutAddressendl;10void person:ShowPersonSex()coutSexendl;class student:public personpublic:voidSetStudentInformation(char*NameFromMain,char*StudentAddressFromMain,char*StudentSexFromMain,char*StudentNumberFromMain,int*score);void ShowStude
25、ntInformation();friend void FindStudentNumber(student*data);friend void FindStudentName(student*data);private:intMathResult,EnglishResult,CResult,CompilationLanguageResult,DigitalLogicResult,MarksismResult;char StudentNumber25;char Name25;float Average;int total;voidstudent:SetStudentInformation(cha
26、r*NameFromMain,char*StudentAddressFromMain,char*StudentSexFromMain,char*StudentNumberFromMain,int*score)strcpy(Name,NameFromMain);SetPersonAddress(StudentAddressFromMain);SetPersonSex(StudentSexFromMain);strcpy(StudentNumber,StudentNumberFromMain);for(int i=0;i6;i+)switch(i)case 0:MathResult=score0;
27、case 1:EnglishResult=score1;case 2:11CResult=score2;case 3:CompilationLanguageResult=score3;case 4:DigitalLogicResult=score4;case 5:MarksismResult=score5;total=MathResult+EnglishResult+CResult+CompilationLanguageResult+DigitalLogicResult+MarksismResult;Average=total/6.0;void student:ShowStudentInfor
28、mation()coutendl;cout学生的基本信息如下:endlendl;cout学生的姓名:Nameendlendl;cout学生的学号为:StudentNumberendlendl;cout学生的家庭地址为:;ShowPersonAddress();coutendl;cout学生的性别为:;ShowPersonSex();coutendl;cout学生的考试课程成绩如下:endlendl;cout 学 生 的 离 散 数 学 课 程 成 绩 为:MathResult分endlendl;cout学生的英语课程成绩为:EnglishResult分endlendl;cout学生的 C+课程
29、成绩为:CResult分endlendl;cout 学 生 的 汇 编 语 言 课 程 成 绩 为:CompilationLanguageResult分endlendl;cout 学 生 的 数 字 逻 辑 课 程 成 绩 为:12DigitalLogicResult分endlendl;cout 学 生 的 马 克 思 主 义 哲 学 课 程 成 绩 为:MarksismResult分endlendl;cout学生的总分为:total分endlendl;cout 学 生 的 平 均 分 为:Average 分endlendl;void FindStudentNumber(student*dat
30、a)char findnum25;coutfindnum;int i=0;for(i;iStuNum;i+)if(strcmp(datai.StudentNumber,findnum)=0)cout在第i+1个编号里有您查找的记录:endl;datai.ShowStudentInformation();if(strcmp(datai.StudentNumber,findnum)0)cout 在 编 号 i+1 里 没 有 您 查 找 的 记录endl;void FindStudentName(student*data)char findname25;coutfindname;int i=0;f
31、or(i;iStuNum;i+)if(strcmp(datai.Name,findname)=0)cout在第i+1个编号里有您查找的记录:13endl;datai.ShowStudentInformation();if(strcmp(datai.Name,findname)0)cout 在 编 号 i+1 里 没 有 您 查 找 的 记录endl;void paint()int i;cout学生信息管理系统endl;for(i=0;i80;i+)putchar(%);coutendl;cout(1)输入学生的信息 (3)用学号查找学生基本信息 endl;coutendl;cout(2)输出学
32、生信息 (4)用姓名查找学生基本信息 endl;coutendl;cout(0)退出程序 endl;cout备注:如果您还没有输入任何信息,请先输入信息再输出!endl;coutendl;for(i=0;i80;i+)putchar(%);coutendl;void main()charStuSex2,StuName25,StuAddress25,StuNumber25;int StuScore6,ctrl;int i=0,j;student stuStuNum;paint();cout请选择一个序号 ctrl;while(ctrl!=0)14switch(ctrl)学生的基本信息:endl;
33、试成绩endl;绩:;case 1:for(i;iStuNum;i+)system(cls);cout请输入第 i+1个coutStuName;coutendl;coutStuSex;coutendl;coutStuNumber;coutendl;coutStuAddress;coutendl;cout请按顺序输入学生的考coutendl;coutStuScore0;coutendl;coutStuScore1;coutendl;coutStuScore2;coutendl;coutStuScore3;coutendl;coutStuScore4;coutendl;coutStuScore5;
34、coutendlendl;15,StuSex,StuNumber,StuScore);stui.SetStudentInformation(StuName,StuAddressbreak;case 2:coutendl;system(cls);for(j=0;jStuNum;j+)stuj.ShowStudentInformation();system(pause);break;case 3:coutendl;system(cls);FindStudentNumber(stu);system(pause);break;case 4:coutendl;system(cls);FindStudentName(stu);system(pause);break;if(ctrl!=n)system(cls);paint();cout请选择一个序号ctrl;16