统计学生成绩课程设计.doc_第1页
统计学生成绩课程设计.doc_第2页
统计学生成绩课程设计.doc_第3页
统计学生成绩课程设计.doc_第4页
统计学生成绩课程设计.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

沈阳理工大学课程设计专用纸 No29 成 绩 评 定 表学生姓名张益鸣班级学号1203050129专 业计算机科学与技术课程设计题目统计学生成绩评语组长签字:成绩日期 20 年 月 日课程设计任务书学 院信息科学与工程学院专 业计算机科学与技术学生姓名张益鸣班级学号1203050129课程设计题目统计学生成绩实践教学要求与任务:要求编写一个“Student”类及用来存取文件的save()和load()函数,使用函数及运算符重载技术完成如下操作: (1)计算每个学生的平均成绩,将数据存入文件stud.dat中并验证是否正确地存入了文件。(2)要求对“”运算符进行重载。(3)把学生姓名和平均成绩抽取出来,建立一个简明文件stud_mean.dat,并验证是否正确地存入了。(4)从文件stud.dat按如下格式输出大于等于平均成绩的学生信息:学号 姓名 算术 语文 平均(5)将两门功课成绩都不及格的学生信息从文件中删除并另外存入文件bad.dat中。(6)编写能检索文件中某个学生信息的子程序。如无此学生,输出“未查到”信息。(7)使用多文件编程和菜单操作。工作计划与进度安排:第17周星期一:设计任务分析和总体设计星期二:软件算法和流程设计星期三、四、五:软件编码实现第18周周一:软件总体调试周二:软件运行分析周三:答辩、验收程序周四:答辩、验收程序周五:书写课程设计报告,提交指导教师: 201 年 月 日专业负责人:201 年 月 日学院教学副院长:201 年 月 日目 录1 题目内容及设计要求12 总体设计12.1 总体功能框图12.2 类的设计说明12.3 主要算法流程图13程序清单及注释14运行结果与分析15总结26参考文献2沈阳理工大学1 题目内容及设计要求题目: 统计学生成绩内容及要求:要求编写一个“Student”类及用来存取文件的save()和load()函数,使用函数及运算符重载技术完成如下操作:(1)计算每个学生的平均成绩,将数据存入文件stud.dat中并验证是否正确地存入了文件。(2)要求对“”运算符进行重载。(3)把学生姓名和平均成绩抽取出来,建立一个简明文件stud_mean.dat,并验证是否正确地存入了。(4)从文件stud.dat按如下格式输出大于等于平均成绩的学生信息:学号 姓名 算术 语文 平均(5)将两门功课成绩都不及格的学生信息从文件中删除并另外存入文件bad.dat中。(6)编写能检索文件中某个学生信息的子程序。如无此学生,输出“未查到”信息。(7)使用多文件编程和菜单操作。2 总体设计2.1 总体功能框图 统计学生成绩 建立简明文件 删除原始记录 显示各种文件 增加原始记录 结束程序运行 寻找原始记录 均不及格文件 读取原始文件 保存原始文件图2-1总体功能框图2.2 类的设计说明 设计一个菜单,通过菜单选择实现相应的操作,对于输入的原始信息,使用链表存储它们,这样做的好处是,可以随时增加内容,也容易将两门功课不及格的学生从文件中删除。为学生设计一个类,单独设计完成这个这个文件读写的成员函数。使用结构数组作为学生信息简表和两门不及格的学生的存储器,由它们和文件建立读写关系,需要显示它们时,现将文件读入内存,然后再显示。需要显示输出大于等于平均成绩的学生信息时,则直接从内存链表中筛选。当然,需要显示原始信息时,也通过直接显示链表信息的方法实现。这四种数据的显示问题均通过一个成员函数来实现。为了操作方便,原始数据可以单独存取.修改和查询。开始2.3 主要算法流程图增加原始记录输入学生成绩并保存计算平均成绩是否及格?输出成绩Yes删除增加新文件结束No图2-2 算法流程图开始输入数据查找是否找到?输出数据输出“没有记录”NoYes结束图2-3算法流程图-3 程序清单及注释Header FilesCpp9.h#if !defined(CPP9_H) #define CPP9_H #include /对文件操作 文件输入输出#include /标准库头文件 定义杂项函数及内存分配函数#include /定义输入输出函数#include /字符串处理#include /数据输入输出#define ASK(p) do p = new Student; if (p = NULL) cout memory fail! endl; exit(-1);while(0); /宏定义static struct shorts /静态结构体声明 定义变量char name16;double ave;sm10= ,0; /给静态结构体变量赋初值static struct bads / 静态结构体声明 定义变量char no10; /定义学生总数char name16; /定义学生姓名int math; /定义数学成绩int chi; /定义语文成绩double ave; /定义平均成绩bad10= , ,0,0; /给静态结构体变量赋初值class Student /定义一个学生类 private: /定义私有成员 char no10; char name16;int math;int chi;double ave;Student *next; /定义对象指针int menu_select(void); /声明菜单选择函数 public: /定义公有成员 static int count; /定义了一个静态对象 Student(); /构造函数的声明Student(); /析构函数的声明Student *input(Student *); /输入信息函数的声明void display(Student *); /显示数据信息函数的声明void save(Student *); /文件存储操作函数的声明Student *load(Student *); /文件读取操作函数的声明void handle_menu(Student *); /菜单处理函数的声明Student *delete_record(Student *); /删除学生信息函数的声明void short_record(Student *); /建立简明文件的声明 Student *bad_record(Student *top); /建立不及格文件的声明 void Student:find_record(Student *); /查询学生信息文件的声明 friend ostream &operator ( ostream &os, Student &ob); /重载( istream &is, Student &ob);/重载运算符函数声明;#endifSource FilesCpp9.cpp#include cpp9.hint Student:count=0;/声明静态成员记录计数变量/*构造函数*/Student:Student() /定义构造函数next=NULL;name0=0;no0= ;math=0;chi=0;ave=0.0;/*析构函数*/Student:Student() /定义析构函数if (next !=NULL)delete next; /缺省析构函数体为空void main() /定义主函数Student *top; /定义对象指针 ASK(top); top-handle_menu(top);/*菜单处理函数*/void Student:handle_menu(Student *top) /定义菜单处理函数for ( ; ; ) /相当于while(1)语句(死循环) switch(menu_select() case 1:top = input(top); /调用输入信息函数break; case 2:display(top); /调用显示数据信息函数break; case 3:save(top); /调用文件存储操作函数break; case 4:top=load(top); /调用文件读取操作函数break; case 5:top=delete_record(top); /调用删除学生信息数据函数break; case 6:short_record(top); /调用生成简明文件函数break; case 7:top=bad_record(top); /调用查询学生信息函数break; case 8:find_record(top);break; case 9:coutt退出操作,再见!endl;delete top;return; /退出函数 /*菜单选择函数*/int Student:menu_select() /定义菜单选择函数char s2;int cn=0;coutnt1,增加原始记录nt2,显示各种文件nt3,保存原始文件nt4,读取原始文件nt5,删除原始记录nt6,建立简明文件nt7,均不及格文件nt8,寻找原始记录nt9,结束程序运行nnt左边数字对应功能选择,请选择19:flush; for( ; ; ) gets(s); /从键盘接受字符串,并放入数组s中 cn=atoi(s); if(cn9) coutnt输入错误,重选1- 9:name0=0) /如果指针指向对象的name等于0,那么就直接退出函数 coutt没有记录可存!endl; return; /退出函数 ofstream out; /建立输出流对象 out.open(stud.dat,ios:out); /与stud.dat关联并制定以输出方式打开 if (!out) /如果文件不能打开 coutt不能打开文件!endl; exit(1); /非正常退出 coutnt存文件endl; outcountn; /重载运算符 Student *p=top; /定义对象指针 while(p!=NULL) /当p不为空时 out *p; /重载next; /对象访问成员 out.close(); /关闭文件 couttcount条记录已经存入文件,请继续操作。endl;/* 文件读取操作函数*/Student *Student:load(Student *top) /定义文件读取操作函数 ifstream in; /建立输入流对象 in.open(stud.dat,ios:in|ios:nocreate);/与stud.dat关联并制定以输入方式打开/如果文件不存在,则打开文件失败 if(!in) /如果打开文件失败 coutt文件不存在!endl; return top; coutnt取文件.top-count; in.ignore(); Student *p=top; Student *old; for(int i=0;icount;i+) in*p; ASK(p-next); old=p; p=p-next; in.ignore(); old-next=NULL; in.close(); /关闭文件 coutt取入count条记录.运算符函数*/istream & operator (istream &is,Student &ob) /重载运算符函数声明 is.getline(ob.no,10,n); /使其能够读入字符串中的空格 is.getline(,16,n); /使其能够读入字符串中的空格 isob.math; isob.chi; isob.ave; return is; /退出函数/* 重载运算符函数*/ostream & operator(ostream &os,Student &ob) /重载运算符函数声明 osob.non; n; osob.mathn; osob.chin; osob.aven; return os; /退出函数Input_disp.cpp#includecpp9.h/* * 输入信息函数 */Student *Student:input(Student *top) /定义输入信息函数ifstream in; /建立输入流对象in.open(sname,ios:in|ios:nocreate); /与sname关联并制定以输入方式打开/如果文件不存在,则打开文件失败if(!in) /判断是否已有文件coutt还没有建文件,退出时别忘记存文件。count=0) /如果指针指向对象的count等于0,那么就直接退出函数 coutt请稍候,取已有文件.next!=NULL)old=old-next;coutt输入数据,输入0时结束。count;do +top-count; coutt学号:no); /从键盘接受学号 if(strcmp(star-no,0)=0) /比较字符串 break; coutt名字:name); /从键盘接受名字 coutt数学:star-math; /输入数学成绩 coutt语文:star-chi; /输入语文成绩 star-ave=(star-chi+star-math)/2; /计算平均成绩 if(top-count=0) top=star; old-next=star; old=star; ASK(star);while(1); old-next=NULL;return(top); /退出函数/* * 显示数据信息的函数 */void Student:display(Student *top) /定义显示数据信息函数char choose2;/,input30; int cn=0;coutt选择要看到的文件类型endl;coutt1.原文件endl;coutt2.简明文件endl; coutt3.均不及格文件endl; coutt4.输出高于或等于平均成绩的学生名单flush; coutt请选择1-4:flush;gets(choose) ; /从键盘接受字符串while(1)cn=atoi(choose);if(cn4) coutt输入错误,重选1-4:count=0) coutnt现在没有记录!endl;return; Student*p=top; coutnt现在共有如下count条记录:n; coutt学号t名字t数学t语文t平均n; while(p!=NULL) /当p为非空时 couttnotnamet mathtchitavenext; coutendl; break; case 2: /显示简明文件 ifstream in; /建立输入流对象 in.open(stud_mean.dat,ios:in|ios:nocreate);/与stud_mean.dat关联并制定以输入方式打开/如果文件不存在,则打开文件失败 if(!in) /判断是否已有文件 coutt文件不存在!endl;return; /退出函数 coutnt取文件.endl; in.read(char*)sm,sizeof sm); in.close(); /关闭文件 coutt名字t平均成绩n; for(int i=0;inext) if(smi.ave=0) break;tsmi.aveendl; break; case 3: /显示均不及格文件 ifstream in; /建立输入流对象 in.open(bad.dat,ios:in|ios:nocreate);/与bad.dat关联并制定以输入方式打开/如果文件不存在,则打开文件失败 if(!in) /判断是否已有文件 coutt文件不存在!endl;return; /退出函数 coutnt取文件.endl; in.read(char*)bad,sizeof bad); in.close(); /关闭文件 coutt学号t名字t数学t语文t平均n; for(int i=0;i10;i+) if(badi.ave=0) break; tbadi.mathtbadi.chi tbadi.avecount=0) coutnt现在没有记录!endl; return; /退出函数 Student *p=top; /定义对象指针访问对象 coutnt现在共有如下countave; /计算平均分之和 p=p-next; mean=mean/num; /计算全部学生的平均分 coutt平均成绩为:mean分endl; coutt其中高于或等于平均成绩的学生信息如下:n; coutave=mean) couttnotnamet mathtchitavenext; coutcount=0)coutt内存中没有可用记录endl;return;for(int i=0;icount;i+,p=p-next)strcpy(,p-name);smi.ave=p-ave;ofstream out; /建立输出流对象out.open(stud_mean.dat,ios:out);if(!out) /如果文件不能打开coutt不能打开文件!endl;return;coutnt存文件endl;out.write(char *)sm,sizeof sm);out.close(); / 打开文件couttcount条记录已经存入文件,内容如下:endl;coutt名字t平均成绩n;for(i=0;icount;i+)tsmi.avecount=0) coutt内存中没有可用记录mathchino);strcpy(,star-name);badcb.math=star-math;badcb.chi=star-chi; badcb.ave=star-ave; if(top=star) top=star-next; else old-next=star-next; star=star-next; +cb; -count; else old=star; star=star-next; coutnt两科均不及格的学生信息如下:endl;coutt学号t名字t数学t语文t平均n; /输出两科均不及格的学生信息for( i=0;icb;i+)if(badi.ave=0) break; t badi.mathtbadi.chitbadi.aveendl; /存入文件 ofstream out; /建立输出流对象out.open(bad.dat,ios:out);if(!out) /如果文件不能打开coutt不能打开文件!endl;return top; out.write(char *)bad,sizeof bad);out.close(); /打开文件coutnt文件存储成功endl;if(count=0) /说明链表已空,需要重新初始化ASK(top); /重新初始化coutt原文件在内存中的记录已经删空endl;return top;Find.cpp#include cpp9.h/* 查找学生信息函数*/void Student:find_record(Student *top) /定义查找学生信息函数char choose2,input30;int cn=0;coutt1.通过学号寻找endl; coutt2.通过名字寻找endl;coutt请选择1-2:flush;gets(choose); /从键盘接受字符串while(1)cn=atoi(choose);if(cn!=1&cn!=2)coutt输入错误,重选1-2:flush;gets(choose); /从键盘接受字符串else break;switch(cn) case 1:coutt请输入学号:flush; /输入学号break; case 2:coutt请输入名字:no)=0)|(cn=2&strcmp(input,p-name)=0)coutt找到的信息如下:endl;coutt学号t名字t数学t语文t平均n;couttnotnametmathtchitavenext;coutt没有找到相应的记录。endl;return;Delete_record.cpp#include cpp9.h/*删除学生信息处理函数*/Student *Student:delete_record(Student *top) /定义删除学生信息处理声明char choose2,input30;int cn =0;cout1.通过学号endl;cout2.通过名字endl;cout请输入学号:flush;gets(choose); /从键盘接受字符串while(1)cn=atoi(choose)

温馨提示

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

评论

0/150

提交评论