C++学生成绩管理系统课程设计报告
更新时间:2023-07-21 12:43:01 阅读量: 实用文档 文档下载
枣 庄 学 院 信息科学与工程学院 课程设计任务书
题目:
组 员: 崔浩、孙睿、韩丰壮 专 业: 网络工程
课 程: C++语言程序设计 指导教师: 马怀志 职称: 助 教
完成时间: 2013年 5月----2013年 6 月
枣庄学院信息科学与工程学院制
年 月 日
课程设计任务书及成绩评定
课程设计所需软件、硬件等
一台电脑配备 Visual c++6.0 软件,
课程设计进度计划起止日期 6-6 至 6-8 6-9 6-10 至 6-11 6-12 至 6-13. 6-14 至 6-15 6-16 工作内容 小组收集资料 组内商量整体规划课程 设计 组内分工做各自负责的 工作 组内汇总各自所做的成 果 小组用 visualc++6.0 调 试 撰写任务书 备注
参考文献、资料索引序号 1 文献资料名称 C++语言程序设计 编著者 出版单位
温秀梅、 丁学钧、 李 清华大学出版社 建华 高等教育出版社
2
C++程序设计教程(第二版)
罗建军等
3
百度文库
未知
未知
目 录
一、摘要…………………………………………………………………. 二、问题描述……………………………………………………………
1.摘要
本系统主要用于对学生的成绩进行管理。通过本系统,可以将各个学生的成绩记录输入到系统中,保存到文件,便于查阅和相关管理。此外,该系统还能实现对学生成绩记录的显示,查询以及插入或删除学生的成绩记录等功能。
2.问题描述
编写一个简单的学生成绩管理系统。学生成绩管理系统有若干学生成绩记录组成,每个记录由学号、姓名、性别和成绩四部分组成,学号不超过11个字符,姓名不超过21个字符,性别为’m’(male)或’f’(female),成绩为double型数据。该系统具有以下功能: 程序开始执行时显示如下版权信息和主菜单:
*******学生成绩管理系统*************
*1.添加学生成绩记录 *2.显示学生成绩记录 *3.查找学生成绩记录 *4.删除学生成绩记录 *5.保存学生成绩记录 *6.加载学生成绩记录 *7.退出学生成绩管理系统
************************************ 请输入(1~7):
通过键盘输入数字1~7后,程序能够执行相应的功能,执行完后回到上述主菜单继续等待用户输入,输入数字7后退出程序。
选择“添加学生成绩记录”后,输入要插入记录的位置。按程序提示依次输入学号,姓名,性别,成绩,插入记录成功。
选择“显示学生成绩记录”,显示学生成绩表中已有的学生记录的个数,并显示出各个学生记录的相关信息。
选择“查找学生成绩记录”,按提示输入要查找的学生的学号,输入学号,若该学号存在,则输出相应的学生记录,如该学号不存在,则按任意键返回主菜单。
选择“删除学生成绩记录”,按提示输入要删除的学生的学号,输入学号,若改学号存在,
则删除相应的学生记录,如果该学号不存在,则按任意键返回主菜单。
选择“保存学生成绩记录”,系统会将已有的学生记录保存在默认的文件名为fname.txt的文件中。
选择“加载学生成绩记录”,系统会提示输入文件名,输入默认的文件名为fname.txt,则可将文件中的相关信息导出。
选择“退出学生成绩管理系统”,按任意键退出系统。
3.解决方案
这是一个很实际的编程实例。编程要求很详细,内容也比较多,有一定难度。首先,学生成绩记录是一个复杂的数据结构,至少应包括学号,姓名,性别和成绩。所以,必须建立一个类student,用来记录学号,姓名,性别和成绩。此外还得建立一个类stuscore,用来记录多个学生的成绩记录。
3.1建立类学生类student
它至少包括学号number,姓名name,性别sex,成绩chengji。具体如下: class student { public:
char name[21]; //姓名 char number[11]; //学号 char sex; //性别 double chengji; //成绩
student *next; //类指针,用来指向下一个记录 student();
void init(string &Name,string &Number,char Sex,double Chengji); //输入学生成绩记录 virtual ~student(); };
函数init(string &Name,string &Number,char Sex,double Chengji)用于输入学生记录,相当于一个注册。其具体实现如下:
void student::init(string &Name,string &Number,char Sex,double Chengji)
int len;
len=Name.length(); if(len>20)len=20; Name.copy(name,len,0); name[len]=0; len=Number.length(); if(len>10)len=10;
Number.copy(number,len,0); number[len]=0; sex=((sex=='m')?'m':'f'); chengji=Chengji; }
3.2建立学生成绩记录类stuscore
该类是学生成绩记录的集合。其成员函数则是问题中要求的添加、显示、查找、删除、保存、导出等各种操作。改类具体如下: class stuscore {
student* head; public:
bool add_record();//添加学生成绩记录 void display_record();//显示学生成绩记录 int length();//学生成绩记录个数 bool delete_record();//删除学生成绩记录 void save_record();//保存学生成绩记录 void load_record();//加载学生成绩记录 bool find_record();//查找学生成绩记录 stuscore(); virtual ~stuscore();
3.3编写各个功能的函数实体
3.3.1添加学生成绩记录add_record()
建立一个链表: bool stuscore::add_record() { int i; int j=1; string Name; string Number; char Sex; double Chengji;
student *newnode,*current,*previous; current=previous=head; cout<<"请输入插入的位置:"; cin>>i;
if(i<=0||i>length()+1) {
cout<<"输入的位置不正确!"; return false; }
cout<<"请输入学号:"; cin>>Number; cout<<"请输入姓名:"; cin>>Name;
cout<<"请输入性别:"; cin>>Sex;
cout<<"请输入成绩:";
cin>>Chengji;
newnode=new student();
newnode->init(Name,Number,Sex,Chengji); newnode->next=null; if(!newnode) {
cout<<"内存已满!"; return false; }
if(i==1) {
newnode->next=head; head=newnode; return true; } Else {
while(current&&j<i) {
previous=current; current=current->next; j++; }
newnode->next=current; previous->next=newnode; return true; } }
3.3.2显示学生成绩记录display_record()
具体实现如下:
void stuscore::display_record() {
student*current; current=head;
cout<<"表中有"<<length()<<"条记录!\n"; if(length()) {
cout<<setiosflags(ios::left)<<setw(15)<<"学号"<<setw(15)<<"姓名"<<setw(12)<<"性别"<<setw(5)<<"成绩"<<endl; while(current) {
cout<<current; current=current->next; } } }
另外,对<<运算符进行了重载,这样就可以直接用cout输出学生成绩记录,函数重载如下: ostream&operator<<(ostream&output,const student *addr) {
output<<setiosflags(ios::left)<<setw(15)<<addr->number<<setw(15)<<addr->name<<setw(12)<<addr->sex<<setw(5)<<addr->chengji<<endl; }
return output;
3.3.3查找学生成绩记录find_record()
具体实现如下:
bool stuscore::find_record() {
student *current,*previous;
string Number;
cout<<"请输入要查找的学生的学号:"; cin>>Number; current=previous=head; while(current) {
if(current->number==Number) {
cout<<setiosflags(ios::left)<<setw(15)<<"学号"<<setw(15)<<"姓名"<<setw(12)<<"性别"<<setw(5)<<"成绩"<<endl; cout<<current; return true; } Else {
previous=current; current=current->next;
} }
if(!current) {
cout<<"没有找到该学生!"; return false; }
return true; }
3.3.4删除学生记录delete_record()
具体实现如下:
bool stuscore::delete_record() {
string s;
student*current,*previous; current=previous=head;
cout<<"成绩表中有"<<length()<<"个学生成绩记录"<<endl; if(!length()) {
cout<<"学生成绩表已空!\n"; return false; } else{
cout<<"请输入要删除的学生记录的学号:" cin>>s; while(current) {
if(current->number==s) {
if(current==head) {
head=head->next; delete current; cout<<"删除成功!"; return true; } else {
previous->next=current->next; delete current; cout<<"删除成功!";
return true; } } else {
previous=current; current=current->next; } } if(!current) {
cout<<"没有找到该学号所对应的学生记录!"; return false; } } return true }
3.3.5保存学生成绩记录save_record()
具体实现如下:
void stuscore::save_record() { ofstream file; student*current=head;
file.open("./fname.txt",ios::out); if(!file) {
cout<<"打开文件失败!"; cin.get(); } else
{
while(current) {
if(file&&!file.eof())
file.write((char*)current,sizeof(*current)); current=current->next; }
cout<<"保存完成!"; file.close(); } }
3.3.6加载学生成绩记录load_record()
具体实现如下:
void stuscore::load_record() {
ifstream file; char fname[20]; student *n; n=new student();
cout<<"请输入要打开的文件名(fname.txt):"; cin>>fname;
file.open(fname,ios::in); if(!file) {
cout<<"文件打开失败!"; cin.get(); } else {
cout<<setiosflags(ios::left)<<setw(21)<<"姓名"<<setw(11)<<"学号"<<setw(5)<<"性别"<<setw(5)<<"成绩"<<endl; while(file&&file.peek()!=EOF) {
file.read((char*)n,sizeof(*n)); cout<<n<<endl; }
file.close(); } }
3.3.7计算学生成绩记录的个数length()
具体实现如下: int stuscore::length() { int j=0; student*current; current=head; while(current)
{current=current->next; j++; } return j; }
四.程序运行结果
4.1 主菜单界面
4.2添加学生成绩记录
4.3显示学生成绩记录
4.4再添加几个学生成绩记录
显示结果为:
4.5查找学生成绩记录
4.6删除学生成绩记录
4.7删除记录后再显示学生成绩记录
4.8保存学生成绩记录
4.9加载学生成绩记录
4.10退出学生成绩系统
五.课程设计总结
这是一个综合性较强,很实际的一个编程实例。刚学C++时候,感觉类和对象还挺有意思的,刚接触到这个题目时,觉得应该没什么大问题吧,因为,我自认为一些基本知识点都已经掌握了。可是,真的当我动手编程的时候,才发现并没有想象中的那么简单。单个知识点是弄清了,但是,将所有的知识点综合起来运用时,就碰到了各种各样的问题了。有时候,一个错误得找好久,才能发现。
本系统的重点就是要会建立两个类。一个是学生类student,用来存放一个学生的成绩记录,相当于一个结构体的功能吧。另一个类是学生成绩记录系统类stuscore,该类用来存放多个学生的成绩记录。难点就是stuscore类里的各个功能的实现。总的来说,添加,显示,查找,这三个功能比较容易,但是,删除,保存,加载这三个功能就需要花点心思了,可能是平时用的比较少吧,生疏了。可见只有通过平时多加练习,才能有助于自己巩固知识点。
最后想说的是,调试程序真的很关键。调试程序需要较大的耐心。可能调试程序的时间比自己编写整个程序的时间还要长,下的工夫还要深,但这是一个程序员必须了解,也必须接受的事实。有好几次,几个错误让我很是头疼啊,很想删了,重新来过,可是最后发现,还是得有耐心去调试程序。
通过这个实验的练习,我也学到了很多东西,特别是加深了对类和对象理解和应用方面,也很谢谢老师给我的帮助。
参考文献:C++程序设计教程(第二版),罗建军等编著,高等教育出版社
正在阅读:
C++学生成绩管理系统课程设计报告07-21
JJ130钢筋安装工程检验批质量验收记录表()钢筋气压焊接头01-20
写作秘籍:高考写作能力提升系列之十五09-11
人教版八年级下册语文期末考试卷(有答案)11-05
反洗钱现场检查管理办法(试行)(银发〔2007〕175号)09-09
云雀的心愿课堂实录06-07
龟兔赛跑新编作文450字07-14
《梅花魂》教学设计12-26
浙江宁波自考专科00675《构成(平面、色彩、立体)(实)》2014年复06-12
当代中国留学现状、特点和趋势 - 图文06-12
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- C++
- 管理系统
- 成绩
- 课程
- 报告
- 学生
- 设计
- NLO QCD corrections to Z b anti-b production with massive bottom quarks at the Fermilab Tev
- 第二单元 温馨的社区生活
- 高二政治教学工作计划书
- 大学物理上下册常用公式
- 新东方背诵50篇——托福听力专用
- 关于BIG6的webquest(最终成稿)
- 英语口语天天向上-我的地盘我做主
- 延河小学第二届打字比赛总结
- 建筑方案设计总说明1
- 优秀员工评选活动方案样本(包含附件)
- 如何根据中文名起英文名
- 建筑工程资料员万能手册
- 可编程序控制器(PLC)实验指导书
- 集储存、均化、包装、散装及发送为一体的水泥库
- 2011江西省公务员行测真题
- 3安全隐患排查治理制度
- 中国平背叶蜂亚科二新属(膜翅目叶蜂科)(英文)
- 夏树文人教版四年级数学下册_除法的简便运算例3
- 标准房地产需求说明书
- 2013届成都市石室中学高三英语一诊模拟试题及答案