《面向对象程序设计》专周报告-成绩管理系统_第1页
《面向对象程序设计》专周报告-成绩管理系统_第2页
《面向对象程序设计》专周报告-成绩管理系统_第3页
《面向对象程序设计》专周报告-成绩管理系统_第4页
《面向对象程序设计》专周报告-成绩管理系统_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、成都工业学院专 周 报 告课程名称面向对象程序设计专周题目学生成绩管理系统姓 名junlong班 级1405173学 号38指导教师设计时间2015-06-29至 2015-07-03成都工业学院计算机工程学院目 录目 录- 2 -正 文- 3 -专周任务与要求- 3 -一、任务- 3 -二、设计要求- 3 -设计说明书- 4 -一、需求分析- 4 -二、过程分析- 4 -三、物理设计(流程图)- 5 -四、程序代码- 8-专周体会- 22-参考文献- 23-专周评审意见- 24- Ø 专周目的: 制作此学生成绩信息管理系统,更方便管理学生信息和他人查询,给大家带来方便。Ø

2、 专周任务与要求1、专周任务 用C+语言编写一系统,实现学生信息管理。 2、专周要求 (1) 信息维护,要求:学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:以文件形式读入和从键盘输入。 (2)信息查询,要求:查询时可实现按姓名查询、按学号查询。 (3)成绩统计,要求:输入任意的一个课程名编码(1、C语言成绩 2、数学成绩 3、英语成绩)和一个分数段(如60-70),统计出这科在此分数段的学生情况。 (4)排序:按降序对平均成绩进行排位。Ø 设计说明书1、需求分析: 学生基本信息:如班级、学号、姓名、性别、年龄、宿舍号码、电话号码等。学生选修课程的基本信

3、息:课程编号、课程名称、考试成绩、平时成绩、综合成绩、学分、重修否等。2、过程分析: 增加学生信息学生信息管理系统删除学生信息导入学生信息查询学生信息搜索学生信息统计学生信息保存学生信息排序学生信息按学号搜索按姓名搜索按C语言成绩统计按数学成绩统计按平时成绩统计3、 流程图1.主页面2.查询界面3.文件导入查询界面4.排序界面5.统计选择界面4、 程序代码# include <iostream> /C+基本库# include <string> /string 类型头文件# include <fstream> /对文件的操作 #include<ofst

4、ream> 和 #include <ifstream># include <list> /STL模板,容器,双向链表# include <windows.h> / Sleep(), system("cls")# include <iomanip> /固定长度输出setw(),排版using namespace std;class Student/定义学生类private:int num; /学号string name;/姓名string sex; /性别int age; /年龄string school; /学校floa

5、t eng; /C语言成绩float math; /数学成绩float pe;/体育成绩float day;/平时成绩float total; /总成绩public:Student() /默认的构造函数Student(int pnum,string pname,string psex,int page,string pschool,float peng,float ppe,float pday,float pmath)/带参数的构造函数num = pnum;name = pname;sex = psex;age = page;school = pschool;eng = peng;pe = p

6、pe;day = pday;math = pmath;void setNum(int pnum)num=pnum;/以下8个成员函数都是为了得到学生类的private数据所写的int getNum()return num;void setName(string pname)name=pname;string getName()return name;void setSex(string psex)sex=psex;string getSex()return sex;void setAge(int page)age=page;int getAge()return age;void setScho

7、ol(string pschool)school=pschool;string getSchool()return school;void setMath(float pmath)math=pmath;float getMath()return math;void setEng(float peng)eng=peng;float getEng()return eng;void setPe(float ppe)pe=ppe;float getPe()return pe;void setDay(float pday)day=pday;float getDay()return day;void se

8、tTotal(float ptotal)total=ptotal;float getTotal()constreturn math+eng+pe+day;/ 原因在于带const修饰符的接口会把this指针转化为为const this类型。网上一种解决办法是,把需要调用的非const接口都改为const;class Dstudent:public Student/定义了一个大学生类private:string school;/学校string xibie;/系别string profession;/专业int team;/班级public:Dstudent()void setschool(in

9、t page)xibie=page;string getAge()return xibie;void setprofession(int page)profession=page;string getProfession()return profession;void setSchool(string pschool)school=pschool;string getSchool()return school;void setMath(float pmath)team=pmath;float getMath()return team;class course:public Student/定义

10、了一个课程类private:int classnum;/课程编号string classname;/课程名称string classtea;/课程教师int classscore;/课程学分public:course()void setclassnum(int page)classnum=page;int getclassnum()return classnum;void setclassname(int page)classname=page;string getclassname()return classname;void setclasstea(string pschool)class

11、tea=pschool;string getclasstea()return classtea;void setclassscore(float pmath)classscore=pmath;int getclassscore()return classscore;int True=0; /用于判断链表中是否有数据typedef list<Student> LinkList;/ LinkLise ll 相当于 list<student> ll;/list sort()重载函数,自定义排序,bool类型的返回值,1.true 2.falsebool operator &g

12、t;(Student const &student1, Student const &student2)return student1.getTotal() > student2.getTotal();class StudentManager/定义了一个管理学生信息的类private:LinkList ll;/list<Student> ll;public:StudentManager()/默认构造函数void StudentAdd(Student student)/添加学生信息ll.push_back(student);True = 1;/用于判断链表中是否

13、有数据void StudentPrint()/显示学生信息system("cls");/清屏int count=0;LinkList:iterator i;/对链表进行遍历cout<<"nn"for (i=ll.begin(); i!=ll.end(); i+)cout<<"学号:"<< setw(2) << setfill(' ') << right<<i->getNum()<<" "<<&quo

14、t;姓名:"<< setw(6) << setfill(' ') << right<<i->getName()<<" "cout<<"性别:"<< setw(2) << setfill(' ') << right<<i->getSex()<<" "<<"年龄:"<< setw(2) << setf

15、ill(' ') << right<<i->getAge()<<" "cout<<"学校:"<< setw(12) << setfill(' ') << right<<i->getSchool()<<" "<<"C语言成绩:"<< setw(3) << setfill(' ') << right<

16、<i->getEng()<<" "cout<<"数学成绩:"<< setw(3) << setfill(' ') << right<<i->getMath()<<" "<<"体育成绩:"<< setw(3) << setfill(' ') << right<<i->getPe()<<" "

17、;cout<<"平时成绩:"<< setw(3) << setfill(' ') << right<<i->getDay()<<" "<<"总成绩:"<< setw(3) << setfill(' ') << right<<i->getTotal()<<" "<<endl ;count+;cout<<&qu

18、ot;n学生总人数为:"<<count<<endl;void WriteFile()/保存到文件LinkList:iterator i;ofstream outfile("student.txt", ios:app);/新建一个“student.txt”文件if(!outfile)/默认的是打开成功返回1cout<<"outfile打开失败01"for (i=ll.begin(); i!=ll.end(); i+)outfile<<i->getNum()<<" &quo

19、t;<<i->getName()<<" "<<i->getSex()<<" "<<i->getAge()<<" "<<i->getSchool()<<" "<<i->getEng()<<" "<<i->getMath()<<" "<<i->getPe()<<"

20、 "<<i->getDay()<<" "<<i->getTotal()<<" "<<endl;/将链表中的数据存入文件outfile.close();/关闭文件cout<<"保存成功!"<<endl;void StudentDelete(int pnum)/删除学生信息LinkList:iterator i;int yes_no = 0;for (i=ll.begin(); i!=ll.end(); i+)while(i->

21、getNum() = pnum)i = ll.erase(i);/删除该节点yes_no = 1;if(yes_no)cout<<"删除成功!"<<endl;elsecout<<"没有找到该学生信息!"<<endl;void StudentSelectname(string pname)/查找学生信息(按姓名)int yes_no = 0;/用于判断该学生是否存在LinkList:iterator i;system("cls");for (i=ll.begin(); i!=ll.end(

22、); i+)while(i->getName() = pname)cout<<"存在此学生!"<<endl;cout<<"此学生的信息为:n"<<endl;cout<<"学号:"<< setw(2) << setfill(' ') << right<<i->getNum()<<" "<<"姓名:"<< setw(6) <

23、< setfill(' ') << right<<i->getName()<<" "cout<<"性别:"<< setw(2) << setfill(' ') << right<<i->getSex()<<" "<<"年龄:"<< setw(2) << setfill(' ') << right&

24、lt;<i->getAge()<<" "cout<<"学校:"<< setw(12) << setfill(' ') << right<<i->getSchool()<<" "<<"C语言成绩:"<< setw(3) << setfill(' ') << right<<i->getEng()<<"

25、 "cout<<"数学成绩:"<< setw(3) << setfill(' ') << right<<i->getMath()<<" "<<"体育成绩:"<< setw(3) << setfill(' ') << right<<i->getPe()<<" "cout<<"平时成绩:"&l

26、t;< setw(3) << setfill(' ') << right<<i->getDay()<<" "<<"总成绩:"<< setw(3) << setfill(' ') << right<<i->getTotal()<<" "<<endl ;yes_no = 1;break;if(!yes_no)cout<<"不存在此学生!&

27、quot;<<endl;void StudentSelectnum(int pnum)/查找学生信息(按学号)int yes_no = 0;/用于判断该学生是否存在LinkList:iterator i;system("cls");for(i=ll.begin(); i!=ll.end(); i+)while(i->getNum() = pnum)cout<<"存在此学生!"<<endl;cout<<"此学生的信息为:n"<<endl;cout<<"

28、;学号:"<< setw(2) << setfill(' ') << right<<i->getNum()<<" "<<"姓名:"<< setw(6) << setfill(' ') << right<<i->getName()<<" "cout<<"性别:"<< setw(2) << setfi

29、ll(' ') << right<<i->getSex()<<" "<<"年龄:"<< setw(2) << setfill(' ') << right<<i->getAge()<<" "cout<<"学校:"<< setw(12) << setfill(' ') << right<<i-&

30、gt;getSchool()<<" "<<"C语言成绩:"<< setw(3) << setfill(' ') << right<<i->getEng()<<" "cout<<"数学成绩:"<< setw(3) << setfill(' ') << right<<i->getMath()<<" "&

31、lt;<"体育成绩:"<< setw(3) << setfill(' ') << right<<i->getPe()<<" "cout<<"平时成绩:"<< setw(3) << setfill(' ') << right<<i->getDay()<<" "<<"总成绩:"<< setw(3)

32、 << setfill(' ') << right<<i->getTotal()<<" "<<endl ;yes_no = 1;break;if(!yes_no)cout<<"不存在此学生!"<<endl;void ReadFile()/从文件读取学生信息Student student;LinkList:iterator i;int num;string name;string sex;int age;string school;float eng;

33、float math;float pe;float day;float total;ifstream infile("student.txt",ios:in);/输入文件数据if(infile)/输入成功默认返回1/将文件中的数据依次存入链表中while(infile>>num>>name>>sex>>age>>school>>eng>>math>>pe>>day>>total)student.setNum(num);/单个进行赋值student.setN

34、ame(name);student.setSex(sex);student.setAge(age);student.setSchool(school);student.setEng(eng);student.setMath(math);student.setPe(pe);student.setDay(day);student.setTotal(total);ll.push_back(student);/将链表串起来cout<<"导入文件成功!"<<endl;True=1;/用于判断链表中是否有数据elsecout<<"导入文件失

35、败!"<<endl;infile.close();/关闭文件void StudentCppeng()/统计学生成绩(C语言成绩)float min,max;/分数段int count=0;/人数计数器LinkList:iterator i;cout<<"请输入您要查询分段的最低分:(C语言)"<<endl;cin>>min;cout<<"请输入您要查询分段的最高分:(C语言)"<<endl;cin>>max;for(i=ll.begin(); i!=ll.end

36、(); +i)while(i->getEng() <= max && i->getEng() >=min )count+;break;cout<<"在此分数段的学生有"<<count<<"人"<<endl;void StudentCppmath()/统计学生成绩(数学成绩)float min,max;/注释和StudentCppeng类似int count=0;LinkList:iterator i;cout<<"请输入您要查询分段的最低分:(数

37、学)"<<endl;cin>>min;cout<<"请输入您要查询分段的最高分:(数学)"<<endl;cin>>max;for(i=ll.begin(); i!=ll.end(); +i)while(i->getMath() <= max && i->getMath() >=min )count+;break;cout<<"在此分数段的学生有"<<count<<"人"<<end

38、l;void StudentCpptotal()/统计学生成绩(总成绩)float min,max;/注释和StudentCppeng类似int count=0;LinkList:iterator i;cout<<"请输入您要查询分段的最低分:(总成绩)"<<endl;cin>>min;cout<<"请输入您要查询分段的最高分:(总成绩)"<<endl;cin>>max;for(i=ll.begin(); i!=ll.end(); +i)while(i->getTotal()

39、<= max && i->getTotal() >=min )count+;break;cout<<"在此分数段的学生有"<<count<<"人"<<endl;void StudentSort()/按总成绩排序(升序)system("cls");LinkList:iterator i;cout<<"排序之前:"<<endl;for (i=ll.begin(); i!=ll.end(); i+)cout<&

40、lt;"学号:"<< setw(2) << setfill(' ') << right<<i->getNum()<<" "<<"姓名:"<< setw(6) << setfill(' ') << right<<i->getName()<<" "cout<<"性别:"<< setw(2) <&l

41、t; setfill(' ') << right<<i->getSex()<<" "<<"年龄:"<< setw(2) << setfill(' ') << right<<i->getAge()<<" "cout<<"学校:"<< setw(12) << setfill(' ') << right<

42、;<i->getSchool()<<" "<<"C语言成绩:"<< setw(3) << setfill(' ') << right<<i->getEng()<<" "cout<<"数学成绩:"<< setw(3) << setfill(' ') << right<<i->getMath()<<"

43、 "<<"体育成绩:"<< setw(3) << setfill(' ') << right<<i->getPe()<<" "cout<<"平时成绩:"<< setw(3) << setfill(' ') << right<<i->getDay()<<" "<<"总成绩:"<<

44、 setw(3) << setfill(' ') << right<<i->getTotal()<<" "<<endl ;/显示排序之前的数据ll.sort(greater<Student>();cout<<"nn"cout<<"排序之后:"<<endl;for (i=ll.begin(); i!=ll.end(); i+)cout<<"学号:"<< setw(2

45、) << setfill(' ') << right<<i->getNum()<<" "<<"姓名:"<< setw(6) << setfill(' ') << right<<i->getName()<<" "cout<<"性别:"<< setw(2) << setfill(' ') <<

46、right<<i->getSex()<<" "<<"年龄:"<< setw(2) << setfill(' ') << right<<i->getAge()<<" "cout<<"学校:"<< setw(12) << setfill(' ') << right<<i->getSchool()<<&qu

47、ot; "<<"C语言成绩:"<< setw(3) << setfill(' ') << right<<i->getEng()<<" "cout<<"数学成绩:"<< setw(3) << setfill(' ') << right<<i->getMath()<<" "<<"体育成绩:"&

48、lt;< setw(3) << setfill(' ') << right<<i->getPe()<<" "cout<<"平时成绩:"<< setw(3) << setfill(' ') << right<<i->getDay()<<" "<<"总成绩:"<< setw(3) << setfill(' &

49、#39;) << right<<i->getTotal()<<" "<<endl ;/显示排好序后的数据cout<<"nn"/函数声明void menu();void menu()/菜单system("cls");cout<<"tt - n"cout<<"tt | 学生成绩查询系统 |n"cout<<"tt - n"cout<<"tt | |n"

50、;cout<<"tt | 1.增加 学生信息 |n"cout<<"tt | 2.删除 学生信息 |n"cout<<"tt | 3.查询 学生信息 |n"cout<<"tt | 4.搜索 学生信息 |n"cout<<"tt | 5.导入 学生信息 |n"cout<<"tt | 6.统计 学生成绩 |n"cout<<"tt | 7.按 成 绩 排 序 |n"cout<&l

51、t;"tt | 8.保存 学生信息 |n"cout<<"tt | 0. 退 出 |n"cout<<"tt | |n"cout<<"tt - n"cout<<"选择相关操作请输入相对数字:"int main(void)int num;/申请了和类的数据成员类似的值,好对他进行赋值string name;string sex;int age;string school;float eng;float math;float pe;float day;in

52、t choose,choose2,choose3;/再子菜单进行选择的时候使用char yes_no;LinkList ll;/申请一个叫ll的双向链表StudentManager student;/申请一个管理学生的类,叫studentdomenu();while(1)cin>>choose;if(choose <0|choose>9)cout<<"请重新输入"elsebreak;switch(choose)case 1:/增加 学生信息system("cls");docout<<"请输入学生学

53、号:"<<endl;while(1)if(cin >> num) break;fflush(stdin);cin.clear();cout << "错误 数字类型的值:n"/使用这个输入的目的是为了防止输入汉字或者字母进去死循环cout<<"请输入学生姓名:"<<endl;cin>>name;cout<<"请输入学生性别:"<<endl;cin>>sex;cout<<"请输入学生年龄:"

54、<<endl;cin>>age;cout<<"请输入学生所在学校:"<<endl;cin>>school;cout<<"请输入学生C语言成绩:"<<endl;while(1)if(cin >> eng) break;fflush(stdin);cin.clear();cout << "错误 数字类型的值:n"cout<<"请输入学生数学成绩:"<<endl;while(1)if(cin

55、 >> math) break;fflush(stdin);cin.clear();cout << "错误 数字类型的值:n"cout<<"请输入学生体育成绩:"<<endl;while(1)if(cin >> pe) break;fflush(stdin);cin.clear();cout << "错误 数字类型的值:n"cout<<"请输入学生平时成绩:"<<endl;while(1)if(cin >>

56、day) break;fflush(stdin);cin.clear();cout << "错误 数字类型的值:n"Student *s = new Student(num,name,sex,age,school,eng,math,pe,day);student.StudentAdd(*s); cout<<"是否想继续添加学生信息(Y/N)"<<endl;while(1)cin>>yes_no;if(yes_no!='Y' && yes_no!='y' &am

57、p;& yes_no!='N' && yes_no!='n')cout<<"输入有误,请重新输入:"elsebreak;while(yes_no='Y'|yes_no='y');break; case 2:/删除 学生信息if(True = 0)cout<<"请先添加学生信息或者导入学生信息!n"elsecout<<"请输入所要删除的学生学号:"<<endl;cin>>num;studen

58、t.StudentDelete(num);break;case 3:/输出学生信息if(True = 0)cout<<"请先添加学生信息或者导入学生信息!n"elsestudent.StudentPrint();break;case 4:/查询学生信息if(True = 0)cout<<"请先添加学生信息或者导入学生信息!n"elsesystem("cls");cout<<"tt - n"cout<<"tt | 1.按学号查询 |n" cout&l

59、t;<"tt | 2.按姓名查询 |n"cout<<"tt - n"cout<<"请选择您的操作:"cin>>choose2;while(choose2!=1 && choose2!=2)cout<<"菜单里没有你输入的选项,请重新输入:"cin>>choose2;if(choose2 =1 )cout<<"请输入你要查询的学号:"cin>>num;student.StudentSelectnum(num);break;if(choose

温馨提示

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

评论

0/150

提交评论