华东交大C++课程设计 统计学生成绩Word文件下载.docx
《华东交大C++课程设计 统计学生成绩Word文件下载.docx》由会员分享,可在线阅读,更多相关《华东交大C++课程设计 统计学生成绩Word文件下载.docx(53页珍藏版)》请在冰点文库上搜索。
统计学生成绩;
函数;
运算符重载;
文件操作;
3
二.课程设计任务分析
2.1课程设计任务书
华东交通大学
课程设计(论文)任务书
学院专业班一、课程设计(论文)题目:
统计学生成绩
二、课程设计(论文)工作自2012年6月1日起至2012年6月6日止三、课程设计(论文)地点:
软件学院实训中心四、课程设计(论文)内容要求:
1.本课程设计的目的
(1)掌握C++语言的程序设计方法;
(2)理论联系实际,进一步提高学生的软件开发技术;
(3)培养学生分析、解决问题的能力;
(4)提高学生实践论文撰写能力。
2.课程设计的任务及要求
1)基本要求:
(1)对系统所需完成的功能分析;
(2)使用VisualC++编译器进行程序编译;
(3)提出系统的设计方案;
(4)对所设计源程序进行调试。
2)创新要求
在基本要求达到后,可进行创新设计。
3)课程设计论文编写要求
1)理论设计部分以课程设计论文的形式提交,格式必须按照课程设计论文标准(
格式进行书写和装订。
(2)课程设计报告(论文)包括设计任务分析(包括设计任务书、设计运行环境、同组人员及分工等)、系统总框图、每个模块的设计分析、列出所有定义的函数及说明、存在的问题与不足及对策、附上程序源代码。
(3)用A4纸打印出文档(附上源代码),封面到教务处购买;
所写的有效代码不得少于50行;
17周上机检查程序并上交设计报告。
4)课程设计评分标准:
(1)学习态度:
20分;
(2)回答问题及系统演示:
30分
(3)课程设计报告书论文质量:
50分。
成绩评定实行优秀、良好、中等、及格和不及格五个等级。
不及格者需重做。
5)参考文献:
(1)谢昕等编著,《C++程序设计》第二版,北京邮电大学出版社
4
(2)吕凤翥.C++语言基础教程[M].清华大学出版社.2007.2(3)谭浩强编,《C++面向对象程序设计》,清华大学出版社,2005年7月出版6)课程设计进度安排
1.准备阶段(4学时):
选择设计题目、了解设计目的要求、查阅相关资料。
2.程序模块设计分析阶段(4学时):
程序总体设计、详细设计。
3.代码编写调试阶段(8学时):
程序模块代码编写、调试、测试。
4.撰写论文阶段(4学时):
总结课程设计任务和设计内容,撰写课程设计论文。
7)课程设计题目具体要求:
本课程设计的重点是练习文件的存储与读取以及读入整行数据。
要求编写一个“学生”类及用来存储文件的save()和load()函数,使用函数及运算符重载技术完成如下操作:
(1)有10个小学生,每个学生有“算术”和“语文”两门功课,从键盘输入学生的学号.姓名以及成绩,计算每个学生的平均成绩,将数据存入文件stud,dat中并验证是否正确的存入了文件。
(2)要求对“<
<
”和“>
>
”运算符进行重载。
考虑到输入学号时,也会因不小心引入空格,而且名字中也需要有空格,所以重载“>
”运算符时,需要满足这个要求。
(3)把学生姓名和平均成绩抽取起来,建立一个简明文件stud_mean.dat,并验证是否正确的存入了。
(4)从文件stud.dat按如下格式输出大于等于平均成绩的学生信息:
学号姓名算术语文平均
(5)将两门功课成绩都不及格的学生信息从文件中删除并外存入文件bad.dat中。
(6)编写能检索文件中某个学生信息的子程序。
如无此学生,输出“未查到”信息。
(7)使用多文件编程和菜单操作。
学生签名:
2012年6月1日
课程设计(论文)评审意见
(1)考勤(10分):
优()、良()、中()、一般()、差();
(2)系统设计(20分):
优()、良()、中()、一般()、差();
(3)编程调试(10分):
(4)回答问题(15分):
(5)论文撰写(35分):
(6)创新思想(10分):
综合评定等级:
评阅人:
职称:
年月日
5
2.2设计运行环境
1.操作系统:
Windowsxp
1.程序运行环境:
MicrosoftVisualC++6.0
2.3课程设计任务要求
(1)有10个小学生,每个学生有“算术”和“语文”两门功课,从键盘输入学生的学号.姓名以及成绩,计算每个学生的平均成绩,将数据存入文件stud,dat中并验证是否正确的存入了文件。
6
2.4小组成员任务分配表
小组成员任务分配表
成员
班级学号分配任务项目
论文设计部分代码
编写
部分代码编写及代码
编整理工作
部分代码编写及后期
完善总结和打印
我的任务详情:
我的任务主要是负责论文的设计与部分代码的编写工作。
首先,在看完了课程设计的论文任务书以及题目后,根据里面的要求,我进行了概括总结,之后,在XX文库里看了几篇往届学生的课设论文范例。
在总结以前写论文的经验,再添加了一些自己的想法,最终融汇而成。
论文设计完成初稿后,与小组成员进行讨论,做了某些方面的修改和完善。
除此之外,我还参与部分代码编写工作,主要是前三个部分的编写,我看了老师给的代码范例,也从网上看了一些类似范例,最终决定用老师的代码。
在MicrosoftVisualC++6.0环境下运行时发现一些错误,并予以纠正。
由于创新能力缺乏,所以没有进一步的创新设计。
在遇到某些问题时,咨询了老师及一些学长学姐。
最终顺利的完成了任务。
7
三.课程任务具体设计
3.1设计思想
设计一个菜单,通过菜单选择实现相应的操作,对于输入的原始信息,使用链表存储它们,这样做的好处是,可以随时增加内容,也容易将两门功课不及格的学生从文件中删除。
为学生设计一个类,单独设计完成这个这个文件读写的成员函数。
使用结构数组作为学生信息简表和两门不及格的学生的存储器,由它们和文件建立读写关系,需要显示它们时,现将文件读入内存,然后再显示。
需要显示输出大于等于平均成绩的学生信息时,则直接从内存链表中筛选。
当然,需要显示原始信息时,也通过直接显示链表信息的方法实现。
这四种数据的显示问题均通过一个成员函数来实现。
为了操作方便,原始数据可以单独存取.修改和查询。
3.2系统总框图
统计学生成绩
增建显保寻均读删结
加立示存找不取除束
原简各原原及原原程
始明种始始格始始序
记文文文记文文记运
录件件件件录件录行
8
3.3各模块设计分析
3.3.1定义头文件
用#define命令自定义宏,用静态结构体函数声明简明文件和不及格文件。
定义一个学生类,说明数据成员函数。
具体代码如下:
#if!
defined(CPP9_H)#defineCPP9_H#include<
fstream.h>
//对文件操作文件输入输出#include<
stdlib.h>
//标准库头文件定义杂项函数及内存分配函数#include<
stdio.h>
//定义输入输出函数#include<
string.h>
//字符串处理
#include<
iostream.h>
//数据输入输出
#defineASK(p){do{p=newStudent;
if(p==NULL){cout<
"
memoryfail!
"
<
endl;
exit(-1);
}}while(0);
};
//宏定义
staticstructshorts{//静态结构体声明定义变量
charname[16];
doubleave;
}sm[10]={{"
0}};
//给静态结构体变量赋初值staticstructbads{//静态结构体声明定义变量
charno[10];
//定义学生总数
//定义学生姓名
intmath;
//定义数学成绩
intchi;
//定义语文成绩
//定义平均成绩}bad[10]={{"
"
0,0}};
//给静态结构体变量赋初值
classStudent//定义一个学生类{
private:
//定义私有成员
Student*next;
//定义对象指针
intmenu_select(void);
//声明菜单选择函数
public:
//定义公有成员
staticintcount;
//定义了一个静态对象
Student();
//构造函数的声明
9
~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&
//重载"
运算符函数声明};
#endif
3.3.2源文件
菜单栏的构建,定义一个student类的构造函数和析构函数,定义一个菜单处理函数和菜单选择函数。
#include"
cpp9.h"
intStudent:
count=0;
//声明静态成员记录计数变量/****************************************构造函数
***************************************/Student:
Student()//定义构造函数
{
next=NULL;
name[0]='
0'
;
no[0]='
'
math=0;
chi=0;
ave=0.0;
}
/****************************************析构函数
~Student()//定义析构函数
if(next!
=NULL)
deletenext;
}//缺省析构函数体为空voidmain()//定义主函数
Student*top;
10
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);
//调用显示数据信息函数
case3:
save(top);
//调用文件存储操作函数
case4:
top=load(top);
//调用文件读取操作函数
case5:
top=delete_record(top);
//调用删除学生信息数据函数
case6:
short_record(top);
//调用生成简明文件函数
case7:
top=bad_record(top);
//调用查询学生信息函数
case8:
find_record(top);
case9:
cout<
\t退出操作,再见~"
deletetop;
return;
//退出函数
/***********************************
11
*菜单选择函数
***********************************/
menu_select()//定义菜单选择函数{
chars[2];
intcn=0;
'
\n'
\t1,增加原始记录\n"
\t2,显示各种文件\n"
\t3,保存原始文件\n"
\t4,读取原始文件\n"
\t5,删除原始记录\n"
\t6,建立简明文件\n"
\t7,均不及格文件\n"
\t8,寻找原始记录\n"
\t9,结束程序运行\n"
\n\t左边数字对应功能选择,请选择1~9:
flush;
for(;
)
gets(s);
//从键盘接受字符串,并放入数组s中
cn=atoi(s);
if(cn<
1||cn>
9)cout<
\n\t输入错误,重选1-9:
elsebreak;
returncn;
3.3.3源文件
定义一个文件存储操作函数,将记录存入文件,再建力一个文件读取操作函数,读取文件信
息。
再用运算符的重载,便于操作自定义数据类型。
#include"
/*******************
*文件存储操作函数
*******************/
save(Student*top)//定义文件存储操作函数{
if(top->
name[0]=='
)//如果指针指向对象的name等于0,那么就直接退出函数
\t没有记录可存!
ofstreamout;
//建立输出流对象
12
out.open("
stud.dat"
ios:
out);
//与stud.dat关联并制定以输出方式打开
if(!
out)//如果文件不能打开
\t不能打开文件!
exit
(1);
//非正常退出
\n\t存文件"
out<
count<
运算符
Student*p=top;
while(p!
=NULL)//当p不为空时
*p;
p=p->
next;
//对象访问成员
out.close();
//关闭文件
\t'
条记录已经存入文件,请继续操作。
*文件读取操作函数
Student*Student:
load(Student*top)//定义文件读取操作函数
ifstreamin;
//建立输入流对象
in.open("
in|ios:
nocreate);
//与stud.dat关联并制定以输入方式打开/如果文
件不存在,则打开文件失败
if(!
in)//如果打开文件失败
\t文件不存在!
returntop;
\n\t取文件..."
in>
count;
in.