统计学生成绩课程设计.docx
- 文档编号:9895120
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:40
- 大小:572.41KB
统计学生成绩课程设计.docx
《统计学生成绩课程设计.docx》由会员分享,可在线阅读,更多相关《统计学生成绩课程设计.docx(40页珍藏版)》请在冰点文库上搜索。
统计学生成绩课程设计
统计学生成绩课程设计
成绩评定表
学生姓名
张益鸣
班级学号
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题目内容及设计要求
题目:
统计学生成绩
内容及要求:
要求编写一个“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主要算法流程图
图2-2算法流程图
图2-3算法流程图
-
3程序清单及注释
HeaderFiles
Cpp9.h
#if!
defined(CPP9_H)
#defineCPP9_H
#include
#include
#include
#include
#include
#defineASK(p){do{p=newStudent;if(p==NULL){cout<<"memoryfail!
"< staticstructshorts{//静态结构体声明定义变量 charname[16]; doubleave; }sm[10]={{"",0}};//给静态结构体变量赋初值 staticstructbads{//静态结构体声明定义变量 charno[10];//定义学生总数 charname[16];//定义学生姓名 intmath;//定义数学成绩 intchi;//定义语文成绩 doubleave;//定义平均成绩 }bad[10]={{"","",0,0}};//给静态结构体变量赋初值 classStudent//定义一个学生类 { private: //定义私有成员 charno[10]; charname[16]; intmath; intchi; doubleave; Student*next;//定义对象指针 intmenu_select(void);//声明菜单选择函数 public: //定义公有成员 staticintcount;//定义了一个静态对象 Student();//构造函数的声明 ~Student();//析构函数的声明 Student*input(Student*);//输入信息函数的声明 voiddisplay(Student*);//显示数据信息函数的声明 voidsave(Student*);//文件存储操作函数的声明 Student*load(Student*);//文件读取操作函数的声明 voidhandle_menu(Student*);//菜单处理函数的声明 Student*delete_record(Student*);//删除学生信息函数的声明 voidshort_record(Student*);//建立简明文件的声明 Student*bad_record(Student*top);//建立不及格文件的声明 voidStudent: : find_record(Student*);//查询学生信息文件的声明 friendostream&operator<<(ostream&os,Student&ob);//重载"<<"运算符函数声明 friendistream&operator>>(istream&is,Student&ob);//重载">>"运算符函数声明 }; #endif SourceFiles Cpp9.cpp #include"cpp9.h" intStudent: : count=0;//声明静态成员记录计数变量 /*************************************** *构造函数 ***************************************/ Student: : Student()//定义构造函数 { next=NULL; name[0]='0'; no[0]=''; math=0; chi=0; ave=0.0; } /*************************************** *析构函数 ***************************************/ Student: : ~Student()//定义析构函数 { if(next! =NULL) deletenext; }//缺省析构函数体为空 voidmain()//定义主函数 { Student*top;//定义对象指针 ASK(top); top->handle_menu(top); } /*********************************** *菜单处理函数 ***********************************/ voidStudent: : handle_menu(Student*top)//定义菜单处理函数 { for(;;)//相当于while (1)语句(死循环) { switch(menu_select()) { case1: top=input(top);//调用输入信息函数 break; case2: display(top);//调用显示数据信息函数 break; case3: save(top);//调用文件存储操作函数 break; case4: top=load(top);//调用文件读取操作函数 break; case5: top=delete_record(top);//调用删除学生信息数据函数 break; case6: short_record(top);//调用生成简明文件函数 break; case7: top=bad_record(top);//调用查询学生信息函数 break; case8: find_record(top); break; case9: cout<<"\t退出操作,再见! "< deletetop; return;//退出函数 } } } /*********************************** *菜单选择函数 ***********************************/ intStudent: : menu_select()//定义菜单选择函数 { chars[2]; intcn=0; cout<<'\n' <<"\t1,增加原始记录\n" <<"\t2,显示各种文件\n" <<"\t3,保存原始文件\n" <<"\t4,读取原始文件\n" <<"\t5,删除原始记录\n" <<"\t6,建立简明文件\n" <<"\t7,均不及格文件\n" <<"\t8,寻找原始记录\n" <<"\t9,结束程序运行\n" <<"\n\t左边数字对应功能选择,请选择1~9: "< for(;;) { gets(s);//从键盘接受字符串,并放入数组s中 cn=atoi(s); if(cn<1||cn>9)cout<<"\n\t输入错误,重选1-9: "< elsebreak; } returncn;//退出函数 } Save_load.cpp #include"cpp9.h" /******************* *文件存储操作函数 *******************/ voidStudent: : save(Student*top)//定义文件存储操作函数 { if(top->name[0]=='0')//如果指针指向对象的name等于0,那么就直接退出函数 { cout<<"\t没有记录可存! "< return;//退出函数 } ofstreamout;//建立输出流对象 out.open("stud.dat",ios: : out);//与stud.dat关联并制定以输出方式打开 if(! out)//如果文件不能打开 { cout<<"\t不能打开文件! "< exit (1);//非正常退出 } cout<<"\n\t存文件"< out< Student*p=top;//定义对象指针 while(p! =NULL)//当p不为空时 { out<<*p;//重载"<<"运算符 p=p->next;//对象访问成员 } out.close();//关闭文件 cout<<'\t'< "< } /******************* *文件读取操作函数 *******************/ Student*Student: : load(Student*top)//定义文件读取操作函数 { ifstreamin;//建立输入流对象 in.open("stud.dat",ios: : in|ios: : nocreate);//与stud.dat关联并制定以输入方式打开/如果文件不存在,则打开文件失败 if(! in)//如果打开文件失败 { cout<<"\t文件不存在! "< returntop; } cout<<"\n\t取文件..."< in>>top->count; in.ignore(); Student*p=top; Student*old; for(inti=0;i { in>>*p; ASK(p->next); old=p; p=p->next; in.ignore(); } old->next=NULL; in.close();//关闭文件 cout<<"\t取入"< return(top);//退出函数 } /******************* *重载>>运算符函数 *******************/ istream&operator>>(istream&is,Student&ob)//重载">>"运算符函数声明 { is.getline(ob.no,10,'\n');//使其能够读入字符串中的空格 is.getline(ob.name,16,'\n');//使其能够读入字符串中的空格 is>>ob.math; is>>ob.chi; is>>ob.ave; returnis;//退出函数 } /******************* *重载<<运算符函数 *******************/ ostream&operator<<(ostream&os,Student&ob)//重载"<<"运算符函数声明 { os< os< os< os< os< returnos;//退出函数 } Input_disp.cpp #include"cpp9.h" /****************** *输入信息函数 ******************/ Student*Student: : input(Student*top)//定义输入信息函数 { ifstreamin;//建立输入流对象 in.open("sname",ios: : in|ios: : nocreate);//与sname关联并制定以输入方式打开/如果文件不存在,则打开文件失败 if(! in)//判断是否已有文件 { cout<<"\t还没有建文件,退出时别忘记存文件。 "< } else { in.close();//关闭文件 if(top->count==0)//如果指针指向对象的count等于0,那么就直接退出函数 { cout<<"\t请稍候,取已有文件..."< top=load(top);//函数调用 } } Student*old,*star;//定义对象指针 ASK(star);//重新初始化 old=top;//对象指针访问对象 while(old->next! =NULL) { old=old->next; } cout<<"\t输入数据,输入0时结束。 "< --top->count; do { ++top->count; cout<<"\t学号: "< gets(star->no);//从键盘接受学号 if(strcmp(star->no,"0")==0)//比较字符串 break; cout<<"\t名字: "< gets(star->name);//从键盘接受名字 cout<<"\t数学: "< cin>>star->math;//输入数学成绩 cout<<"\t语文: "< cin>>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);//退出函数 } /********************** *显示数据信息的函数 **********************/ voidStudent: : display(Student*top)//定义显示数据信息函数 { charchoose[2];//,input[30]; intcn=0; cout<<"\t选择要看到的文件类型"< cout<<"\t1.原文件"< cout<<"\t2.简明文件"< cout<<"\t3.均不及格文件"< cout<<"\t4.输出高于或等于平均成绩的学生名单"< cout<<"\t请选择1-4: "< gets(choose);//从键盘接受字符串 while (1) { cn=atoi(choose); if(cn<1||cn>4) { cout<<"\t输入错误,重选1-4: "< gets(choose);//从键盘接受字符串 } elsebreak; } switch(cn) { case1: //显示原始数据 { if(top->count==0) { cout<<"\n\t现在没有记录! "< return; } Student*p=top; cout<<"\n\t现在共有如下"< \n"; cout<<"\t学号\t名字\t数学\t语文\t平均\n"; while(p! =NULL)//当p为非空时 { cout<<'\t'< < p=p->next; } cout< break; } case2: //显示简明文件 { ifstreamin;//建立输入流对象 in.open("stud_mean.dat",ios: : in|ios: : nocreate);//与stud_mean.dat关联并制定以输入方式打开/如果文件不存在,则打开文件失败 if(! in)//判断是否已有文件 { cout<<"\t文件不存在! "< return;//退出函数 } cout<<"\n\t取文件..."< in.read((char*)sm,sizeofsm); in.close();//关闭文件 cout<<"\t名字\t平均成绩\n"; for(inti=0;i<10;i++)//,p=p->next) { if(sm[i].ave==0)break; cout<<'\t'< } break; } case3: //显示均不及格文件 { ifstreamin;//建立输入流对象 in.open("bad.dat",ios: : in|ios: : nocreate);//与bad.dat关联并制定以输入方式打开/如果文件不存在,则打开文件失败 if(! in)//判断是否已有文件 { cout<<"\t文件不存在! "< return;//退出函数 } cout<<"\n\t取文件..."< in.read((char*)bad,sizeofbad); in.close();//关闭文件 cout<<"\t学号\t名字\t数学\t语文\t平均\n"; for(inti=0;i<10;i++) { if(bad[i].ave==0)break; cout<<'\t'< <<'\t'< <<'\t'< } break; } case4: //显示高于或等于平均分的学生信息 { if(top->count==0) { cout<<"\n\t现在没有记录! "< return;//退出函数 } Student*p=top;//定义对象指针访问对象 cout<<"\n\t现在共有如下"< \n";//计算平均成绩 intnum=0; doublemean=0; while(p! =NULL)//当p为非空时 { ++num;//记载符合条件的学生人数 mean+=p->ave;//计算平均分之
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 统计 学生 成绩 课程设计