大学C++课程设计报告--学生成绩管理系统(附源代码)
学生成绩管理系统c语言课程设计报告

学生成绩管理系统c语言课程设计报告一、引言学生成绩管理系统是一个为学校或教育机构提供学生学业成绩管理的重要工具。
通过该系统,可以方便地记录和查询学生的各项成绩,帮助教师和学生了解学生的学业表现,及时作出教学和学习的调整和改进。
本文将介绍一个基于C语言的学生成绩管理系统的设计与实现。
二、需求分析1. 学生信息管理:包括学生基本信息的录入、修改和删除。
2. 成绩信息管理:包括成绩的录入、修改和删除。
3. 成绩查询与统计:可以按照学生学号或姓名查询学生的成绩,并能够进行成绩的统计分析,如计算平均分和排名等。
4. 数据存储与备份:能够将学生信息和成绩信息存储在文件中,并能够进行数据的备份和恢复。
三、系统设计1. 学生信息管理模块:设计一个结构体来存储学生的基本信息,包括学号、姓名、性别、年龄等。
通过菜单选择,可以实现学生信息的录入、修改和删除功能。
2. 成绩信息管理模块:设计一个结构体来存储学生的成绩信息,包括科目名称和成绩。
通过菜单选择,可以实现成绩信息的录入、修改和删除功能。
3. 成绩查询与统计模块:通过学号或姓名查询学生的成绩,并能够进行成绩的统计分析,如计算平均分和排名等。
4. 数据存储与备份模块:设计文件操作函数,将学生信息和成绩信息存储在文件中,并能够进行数据的备份和恢复。
四、系统实现1. 使用C语言编写程序代码,通过结构体和数组等数据结构实现学生信息和成绩信息的存储。
2. 利用文件操作函数实现数据的读取和存储,包括学生信息和成绩信息的存储和备份。
3. 设计菜单界面,通过用户选择来实现各个功能模块的调用。
五、系统测试与优化1. 针对各个功能模块进行测试,验证系统的正确性和稳定性。
2. 根据测试结果优化程序代码,提高系统性能和用户体验。
3. 完善系统功能,考虑异常情况的处理,提高系统的容错性和健壮性。
六、总结与展望通过本次课程设计,我们成功实现了一个基于C语言的学生成绩管理系统。
该系统能够方便地记录和查询学生的成绩信息,帮助教师和学生进行教学和学习的分析和改进。
C语言学生成绩管理系统设计报告

物理与电子信息学院C语言课程设计(科创实验)报告学生成绩管理系统专业年级学生姓名学号指导教师2021年 1 月 4 日目录1 设计任务 (1)2 需求分析 (1)2.1基础功能 (1)2.2扩展功能 (2)3系统设计概要 (2)3.1开发与运行环境 (2)3.2数据结构设计 (2)3.2总体设计 (3)4系统详细设计 (3)5 系统测试 (4)6 总结与反思 (8)参考文献 (8)附录 (9)1.设计任务设计一个系统,使其能够记录学生的学号、姓名、专业和5门课程的成绩。
该系统能够实现添加、删除、修改功能。
并且能够计算某学生的总分和平均成绩,能够按照总分排序输出。
2.需求分析学生成绩管理系统主要是提供成绩查询,方便管理的网上的信息查阅平台,学生可以通过该系统查阅与自己相关信息。
教师可以通过成绩管理系统查阅学生成绩信息。
系统管理员可以实现以上的所有功能,还有对学生的添加、删除、修改、教师的添加、删除、修改。
根据开发要求,学生成绩管理系统主要应用于教育系统,完成对日常的教学、教务、教师以及学生的计算机化的管理。
开发学生成绩管理系统可使学院教职员工减轻工作压力,比较系统地对教务、教学上的各项服务和信息进行管理,同时,可以减少劳动力的使用,加快查询速度、加强管理,以及国家各部门关于信息化的步伐,使各项管理更加规范化。
目前,学校工作繁杂、资料重多。
目前,管理信息系统已进入高校,但还未普及,而对于学生成绩管理来说,目前还没有一套完整的、统一的系统。
因此,开发一套适和大众的、兼容性好的系统是很有必要的。
2.1基础功能该系统所具有的基础功能有能够记录学生的学号、姓名、专业和5门课程的成绩。
该系统能够实现添加、删除、修改功能。
并且能够计算某学生的总分和平均成绩,能够按照总分排序输出。
2.2扩展功能该系统在原有的基础功能上还增加了查询不及格学生的记录、按照单科成绩排序、添加学生信息后可以写进文件。
3.系统概要设计3.1开发与运行环境3.1.1开发环境1.开发语言为C语言。
C语言程序设计学生成绩管理系统实验报告

移通学院C语言程序设计报告书设计名称:学生成绩管理系统专业:指导老师:班级:姓名:学号:座号:时间一、实验目的1.在编辑应用程序过程中,逐步加深对C语言编程的理解;2.加强实践的能力,动手能力,同时进一步对所学的知识进行巩固;3.培养初步编程的能力,为以后的学习奠定基础;二、实验内容运用所学的C语言知识编辑一个应用程序:学习成绩管理系统三.系统软件环境:本程序主要运行在: Visual C++ 6.0Turbo C/C++ 3.0四.课程设计题目:学生成绩管理系统程序说明:有N个学生,每个学生的数据包含学号不重复、姓名、三门课的成绩及平均成绩,试设计一学生成绩管理系统,使之能提供以下功能:1主菜单2各菜单项功能①成绩录入:输入学生的学号、姓名及三门课的成绩;②成绩查询:按学号查询学生记录;③成绩统计:计算学生的平均分;根据学生的平均分高低,对学生的数据进行排序后输出;④退出系统:退出整个系统即主菜单;五.数据结构设计描述:↓int num; /定义学号,变量为整型/char name; /定义姓名,变量为字符型/int score; /定义课程的成绩,变量为整型/float average; /定义平均分,变量为浮点型/七.系统各函数的功能,、相互调用关系1.函数实现功能说明:1menu函数是定义一个菜单函数,其功能在于输出菜单界面供使用者选择;2input函数是定义用于输入学生信息;3select 函数是定义用于查询学生信息;包括学号、姓名及各科成绩;4statistics 函数计算学生的平均分;根据学生的平均分高低,对学生的数据进行排序输出;2.相互调用关系:Main函数调用menu函数;Menu 函数可以调用input 函数、select函数和statistics 函数八.心得体会C语言是一种较为基础和普遍的编程语言,应用相当广泛,这次课程设计的要求与C语言的广泛应用相比较还有很大的差距;我们对于C语言的理解和使用还处在一个初级的阶段,我们要想掌握它,要学习的还很多,同时要懂得创新,许多的编程方法都是人们一步一步总结出来的,我想我们也要努力拓展自己的思维,努力去寻求新的方法,以创造出更为完善的应用程序; 九.程序:include <stdio.h>include <stdlib.h>include <conio.h>define N 3 /学生人数/define M 3 /课程门数/struct student{int num; /学号/char name20; /姓名/int score3; /三门课成绩/float average;}stuN; /学生数/void input; /查询/void select; /统计/void menu;void input{int i,j;printf"\t\t①成绩录入\n\n";fori=0;i<N;i++{printf"请输入学号:";scanf"%d",&stui.num;printf"请输入姓名:";scanf"%s",&;forj=0;j<M;j++{printf"第%d门成绩的分数:",j+1;scanf"%d",&stui.scorej;}printf"\n\n";}printf"\n\n";printf"输入完毕按任意键返回主菜单";}/2.查询/void selectint no{int i;printf"学生%d号: \n",no; printf"学号: %d\n",stuno-1.num; printf"姓名: %s\n",;for i=0;i<M;i++{printf"第%d门课程的成绩为: ",i+1; printf"%d\n",stuno-1.scorei;}printf"\n按任意键返回主菜单";getch;}/3.统计/void statistics{float temp=0;int i=0;/学生成绩平均分/temp=0;printf"\t\t③成绩统计\n\n";forj=0;j<N;j++{fori=0;i<M;i++{temp=temp+stuj.scorei;}stuj.average=temp/N;printf"\n学生%s的成绩平均成绩为:",;printf"%0.2f分",stuj.average;temp=0;}/排序/for j=0;j<N;j++fori=0;i<N-j-1;i++ifstui.average<stui+1.average{ temp=stui.average;stui.average=stui+1.average;stui+1.average=temp;}printf"\n\n学生平均成绩前三名:";fori=0;i<3;i++{printf"\n第%d名:%0.2f分",i+1,stui.average;}printf"\n\n按任意键返回主菜单";getch;}void menu{ int num=0;int n=0;printf"\n\t\t\t学生成绩管理系统\n\n";printf"\n\t\t\t①成绩录入\n\t\t\t②成绩查询\n\t\t\t③成绩统计\n\t\t\t④退出系统\n";printf"\t\t\tchoose:";scanf"%d",#switchnum{case 1:system"cls";input;break;case 2:system"cls";printf"\t\t②成绩查询\n\n"; printf"请输入要查询的学生号1~3:";scanf"%d",&n;selectn;break;case 3:system"cls";statistics;break;case 4:exit0;default:;}}void main{while1{system"cls"; /清屏/menu;}}。
学生成绩管理系统c语言课程设计报告(一)

学生成绩管理系统c语言课程设计报告(一)学生成绩管理系统C语言课程设计报告摘要本文介绍了一款学生成绩管理系统的C语言课程设计报告。
该系统可实现学生信息的录入、成绩的计算和管理等功能。
本报告详细介绍了系统的需求分析、概要设计和实现细节等内容。
系统需求分析功能需求•系统管理员可以进行学生信息的录入、删除和修改操作。
•系统可以根据已有的学生成绩进行排名,并输出排名列表。
•系统可以查询某个学生的成绩和排名。
•系统可支持标准输出数据、文件存储数据两种方式,并提供相应的查询功能。
性能需求•系统应该能够在1秒内响应用户的操作请求。
•系统的数据存储应该具有较高的可靠性和安全性。
界面需求•系统的界面应该易于操作和友好。
•界面的色彩搭配应该符合用户的视觉需求。
概要设计总体设计•系统分为两个主要模块:学生信息管理模块和成绩查询排名模块。
•学生信息管理模块包括对学生信息的增删改查等操作。
•成绩查询排名模块可以查询学生的成绩并输出排名列表。
•数据存储采用文件存储方式,具有较高的可靠性和安全性。
数据结构设计•采用结构体的方式存储学生信息,包括学生ID、姓名、性别、年龄和成绩等信息。
struct Student{int id; //学生IDchar name[20]; //学生姓名char sex[5]; //学生性别int age; //学生年龄float score; //学生成绩};约束条件•系统仅支持标准C语言的编写。
实现细节数据存储•学生信息存储在文件中,每个学生的信息存储在一行中。
•系统启动时初始化学生信息的文件。
•系统在每次修改或录入学生信息后自动保存信息到文件中。
功能实现•学生信息管理模块实现学生信息的增删改查等操作,并将操作结果输出到文件和屏幕上。
•成绩查询排名模块实现了对某个学生的单独查询和对所有学生的排名查询,并将查询结果输出到文件和屏幕上。
总结本文针对学生成绩管理系统的C语言课程设计报告进行了介绍。
从需求分析、概要设计到实现细节,本文详细地介绍了该系统的开发过程。
c语言课程设计学生成绩管理系统报告

c语言课程设计学生成绩管理系统报告一、教学目标本课程旨在通过C语言编程实现一个学生成绩管理系统,让学生掌握C语言的基本语法、数据结构、函数、文件操作等知识,培养学生编写程序解决实际问题的能力。
具体目标如下:1.知识目标:(1)掌握C语言的基本语法和编程技巧;(2)了解数据结构的基本概念,学会使用数组、链表等数据结构;(3)熟悉函数的定义和调用,掌握函数的参数传递和返回值;(4)掌握文件操作,了解文件读写的原理和方法。
2.技能目标:(1)能够独立编写C语言程序,解决实际问题;(2)具备良好的编程习惯,代码结构清晰、可读性强;(3)掌握调试和优化程序的方法,提高程序的运行效率;(4)学会使用版本控制系统,如Git,进行代码管理和协作开发。
3.情感态度价值观目标:(1)培养学生的编程兴趣,激发学习C语言的积极性;(2)培养学生团队协作精神,提高沟通与协作能力;(3)培养学生的问题解决能力,培养创新意识和持续学习的态度;(4)培养学生具有良好的职业道德,遵守编程规范,尊重他人代码。
二、教学内容本课程的教学内容主要包括C语言的基本语法、数据结构、函数、文件操作等。
具体安排如下:1.C语言基本语法:介绍C语言的数据类型、运算符、表达式、控制语句等基本概念;2.数据结构:讲解数组、链表、栈和队列等数据结构的基本原理和应用;3.函数:讲解函数的定义、声明、调用,以及函数的参数传递和返回值;4.文件操作:介绍文件的概念、文件读写的方法和技巧。
三、教学方法本课程采用讲授法、案例分析法、实验法等多种教学方法相结合,以激发学生的学习兴趣和主动性。
具体方法如下:1.讲授法:通过讲解C语言的基本语法、数据结构、函数和文件操作等知识,使学生掌握课程的基本概念和编程技巧;2.案例分析法:分析实际编程案例,让学生学会将理论知识应用于实际问题解决;3.实验法:安排上机实验,让学生动手编写程序,培养实际编程能力;4.小组讨论法:学生进行小组讨论,培养团队协作和沟通能力。
VC课程设计学生成绩管理系统详解和源码

VC++课程设计设计项目:学生成绩管理系统设计者:张守阳(20102973)班级:计本10级二班使用软件: VC++6.0使用数据库: ACCESS设计流程一、设计理念开发一款学生成绩管理程序,实现学生基本信息的录入、查询及浏览和修改操作。
以及学生成绩的录入、查询、浏览以及统计分析等功能。
以上功能以可视化界面方式进行操作,并将学生成绩信息保存。
二、数据库设计在这个程序中,所用到的数据库是ACCESS数据库。
在数据库中,添加了8个表,分别是NO1OBJECT、NO1STUDENT、NO1STUINFO、NO1TEACHER、NO2OBJECT、NO2STUDENT、NO2STUINFO、NO2TEACHER.这8个表分别记录着两个班的:成绩概况、学生成绩、学生信息、教师信息。
三、程序设计此成绩管理系统共有两个模块:一个是学生成绩管理模块,一个是学生信息管理模块。
在登录成功后(登录用户名和密码都是:admin)会出现主窗口。
在主窗口中可以通过单击两个模块的按钮实现来实现两个模块间的切换。
学生成绩模块所实现的功能是:根据班级选项显示学上成绩信息,并且实现成绩的添加、修改、删除、查询功能。
学生信息模块能够实现学生信息的显示、添加、修改和删除功能。
四、此程序的介绍此程序是基于对话框的MFC程序。
所有的弹出式对话框是模态对话框,由于用到的对话框较多,所以定义的类较多,看起来有点眼花缭乱。
由于我对MFC掌握程度有限,这个程序做的有点粗糙,既不美观,在功能上也有许多不尽人意的地方,或许还会存在bug。
五、程序的实现1)、修改APP类由于此程序用到数据库,所以需要先连接数据源。
此程序通过采用代码来连接到所设计的数据源。
首先将设计的数据库复制到工程所在根目录下,再在APP中的initInstance()函数中添加如下代码:///////加载数据源if (!AfxSocketInit()){AfxMessageBox(IDP_SOCKETS_INIT_FAILED);return FALSE;}CString sPath;GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);sPath.ReleaseBuffer ();int nPos;nPos=sPath.ReverseFind ('\\');sPath=sPath.Left (nPos);nPos=sPath.ReverseFind('\\');sPath=sPath.Left (nPos);CString lpszFile = sPath + "\\mydb.mdb";char* szDesc;int mlen;szDesc=new char[256];sprintf(szDesc,"DSN=%s? DESCRIPTION=TOC support source? DBQ=%s?FIL=MicrosoftAccess? DEFAULTDIR=%s?? ","mydb",lpszFile,sPath);mlen = strlen(szDesc);for (int i=0; i<mlen; i++){if (szDesc[i] == '?')szDesc[i] = '\0';}if (FALSE == SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)\0",(LPCSTR)szDesc))AfxMessageBox("SQLConfigDataSource Failed");try{CString strConnect;strConnect.Format("DSN=mydb;");if(!m_DB.OpenEx(strConnect,CDatabase::useCursorLib)){AfxMessageBox("Unable to Connect to the Specified Data Source");return FALSE ;}}catch(CDBException *pE){pE->ReportError();pE->Delete();return FALSE;}//////////////////////////////其中m_DB是定义的一个CDatabase 对象,用来指向数据库mymdb。
C语言课程设计报告(学生成绩管理系统)

C语言课程设计报告:学生成绩管理系统系统需求一、当前学生信息:通过结构体struct student 来保存学生的姓名,学号,性别,语文,数学,英语和计算机等等相关信息,并且通过cin函数来进行给当前学生输入初始信息。
二、学生成绩查询: 输入一个学号,在文件中查找此学生, 若找到则输出此学生的全部信息和成绩;若找不到则输出查找失败的信息。
同时也可以全部把各科的平均成绩,最高和最低分输出.三、新生插入:通过给该生的学号来和原班上的学生的学号比较大小,若大就在后,若小则靠前排,将此生的信息保存下来.四、输出全部学生信息和全部学生成绩。
五、退出系统.六、附加说明:系统将来完善的功能有:可以通过性别来模糊查询,也可以通过姓名的姓来先进行模糊查询,以便后面精确查找。
总体设计一、仔细阅读系统要求,首先将此系统化分为如下模块(即如下函数)1、输入初始的学生信息:其中包括学生的姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息;可用函数cin(stu *p1)来实现此操作。
2、查询模块:可用stu *lookdata(stu *p1)来实现。
找到就输出此学生全部信息包括学生的语文、数学、英语和计算机等的成绩。
3、插入模块:可用insert( )函数来实现。
其中通过学号的大小来比较的,并且以此来排序.4、输出学生的信息以及成绩:通过学生的姓名来查看学生的语文、数学、英语和计算机等相关成绩,同时也可以分别通过caverage()、maverage()、eaverage() 和comaverage() 来输出语文、数学、英语和计算机等成绩的平均分数、最高和最低分数。
5、退出系统:可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。
二、系统主模块结构图:详细设计一、界面设计此系统界面采用图形和数字化菜单设计。
主界面设计如下:学生成绩管理系统请选择相应的数字执行相应的功能:1:是否输入其他数据2:查看数据3:插入数据4:查找数据5:更新数据6:保留数据7:显示或打印数据8:语文成绩状况9:数学成绩状况10:英语成绩状况11:计算机成绩状况12:?13:退出系统二、数据结构设计:程序设计中用到的结构体类型:学生信息结构体类型:typedef struct student{char name[MAX];int num[MAX];char sex[MAX];int chinese;int mathematic;int english;int computer;struct student *next;}程序代码://原始密码是123456#include"stdio.h”#include"stddef.h"#include"stddef。
c学生成绩管理系统课程设计报告

c学生成绩管理系统课程设计报告一、教学目标本课程的教学目标是使学生掌握学生成绩管理系统的核心知识,包括系统的设计、实现和应用。
具体来说,知识目标要求学生了解成绩管理系统的原理、结构和常用技术;技能目标要求学生能够使用相关工具和语言进行成绩管理系统的开发和维护;情感态度价值观目标要求学生认识到成绩管理系统在教育领域的重要性,培养学生的责任感和使命感。
二、教学内容根据课程目标,教学内容主要包括成绩管理系统的原理、结构、设计和实现。
具体来说,教材的章节安排如下:1.第一章:成绩管理系统的概述,介绍成绩管理系统的定义、功能和应用场景。
2.第二章:成绩管理系统的结构与原理,讲解成绩管理系统的组成部分、工作原理和关键技术。
3.第三章:成绩管理系统的需求分析,引导学生学习如何进行需求分析,并编写需求说明书。
4.第四章:成绩管理系统的系统设计,教授系统设计的方法和技巧,包括数据库设计、界面设计和模块划分。
5.第五章:成绩管理系统的实现与测试,指导学生进行系统编码、调试和测试,确保系统功能的正确性和稳定性。
三、教学方法为了实现课程目标,我们将采用多种教学方法,如讲授法、讨论法、案例分析法和实验法。
具体来说:1.讲授法:用于讲解成绩管理系统的理论知识,帮助学生建立系统性的知识体系。
2.讨论法:鼓励学生就实际问题进行讨论,培养学生的思考能力和团队协作精神。
3.案例分析法:通过分析典型成绩管理系统案例,使学生更好地理解并应用所学知识。
4.实验法:让学生动手实践,亲身体验成绩管理系统的开发和应用过程,提高学生的实际操作能力。
四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选用权威、实用的教材,为学生提供系统性的知识学习。
2.参考书:提供丰富的参考资料,帮助学生拓展视野,深入理解成绩管理系统。
3.多媒体资料:制作课件、教学视频等多媒体资料,增强课堂教学的趣味性和互动性。
4.实验设备:配置必要的实验设备,确保学生能够进行实际操作,提高实践能力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
广东海洋大学课程设计报告课程名称:C/C++语言程序设计课程编号:@@学生姓名:陈@@学生班级:信管1071学号:实习地点:科技楼起止时间:2008.12.29-2009.01.02指导教师:@@一、目的与要求通过本课程设计的实践,全面总结C++课程学习中的的数据类型、程序结构、数组、函数、指针、结构体、链表等基本概念,掌握其使用方法。
掌握面向对象程序设计中有关类、对象、继承、重载、多态性、输入输出流类体系、文件操作的基本概念,初步学会用类与对象这种面向对象的程序设计方法编写应用程序。
培养使用面向对象的程序设计方法编写计算机程序的能力。
通过设计一个《学生成绩统计管理》,进一步熟悉C++中类的概念、类的封装、继承的实现方式。
了解系统开发的需求分析、类层次设计、模块分解、编码测试、模块组装与整体调试的全过程,加深对C++的理解与Visual C++环境的使用;逐步熟悉程序设计的方法,并养成良好的编程习惯。
程序设计是一门实践性很强的课程,必须十分重视实践环节。
许多实际的知识不是靠听课和看书学到的,而是通过长时间的实践积累的。
二、设计内容学生成绩管理系统1.基本功能:a)成绩的输入(学号、姓名、英语、数学、C++语言…);b)成绩统计(各科平均成绩、各科成绩“优秀”、“良好”、“中等”、“及格”、“不及格”的人数及其所占比例);c)总成绩统计(学生的总成绩、平均成绩及成绩排名)d)成绩的统计结果显示。
2.扩展功能:a)学生数据的添加、修改、与删除b)学生数据的读取与存储3.设计要求a)采用面向对象的思想和方法完成设计,最好能够基于windows图形界面。
b)至少设计四个类;学生类(描述学生基本信息);成绩类:班级类;课程类(描述课程信息:课程编号,科目名称(如高等数学,大学英语等);学生成绩及课程信息用文件保存,每个类一个文件,程序执行时从文件读入。
三、过程与结果主要内容如下:1.关键类的设计,继承层次关系,代码:首先,创建了一个student类.在student类的共有部分声明程序所需函数;然后就是student类的函数实现部分,其中定义student类的带参数及不带参数构造函数;再是常用函数的调用,并定义系统菜单函数及其界面;最后就是主函数文件。
Student类的声明如下:主要功能函数的设计:1.关于计算总成绩和平均成绩以及评定成绩等级的函数,而用于成绩统计中优秀、良好、中等、及格、不及格的计算,不过为便于表达,此程序采用字母A,B,C,D,E来分别表达上述等级;代码如下:2.此函数为查找函数的实现过程,通过while switch和if语句以及制表格和setw的使用将输入的数据以表格的形式打印出来,等级一栏宽度略小;3.此函数为删除函数的实现部分,巧妙运用字母i,定义i的值0为数据不存在,1为数据存在的情况,删除时考虑数据存在与否的问题;4.排序函数中分四种情况排序,分别按学号,总分,平均分来排序,排序结果也能有升序或降序操作,通过while else语句以及制表格和case的使用将输入的数据排序出来;因函数体过于庞大,在后面代码清单罗列出来时会标示出来。
数据输入设计:数据输入以输出方式打开文件,通过this指针和地址引用把写入的数据加在文件末尾;程序测试结果:1运行程序.会出现如下画面,按照提示进行选择.2.首先选择1,然后按Enter键.按照提示对学生情况进行输入.如图:3.按任意键程序自动保存第一个同学的数据,并返回菜单,按照刚才的步骤继续输入第二个、第三个同学等等的数据;4.选择4, 然后按Enter键.对数据进行进行有目的性的排序.如图:5.譬如选择2按总分排序,按Enter键,再在接下来的提示框中选择降序排序类型,再按一次Enter键,排序结果如图:符合设计要求,但各科成绩“优秀”、“良好”、“中等”、“及格”、“不及格”的人数及其所占比例因个人能力有限未能设计出来;6.按任意键又返回菜单,继续接下来的操作;四、设计总结这次课程设计基本上涵盖了大学一年级学习到的C++ 语言知识点,课程设计题目要求不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力。
这次课设使我了解我编程思想和编程技巧,也认识了软件生命周期的各个环境,包括构思、设计、编写、调试、发布、文档化、维护和修订。
C++程序编译是一种要求特别精细的工作,小到一个分号(或点)都能影响整个程序的运行,这就要求我们编写程序时要特别细心,即使是一个符号,还是一个字母都不能乱用。
在这次的编写过程中,我就因为错把case序列语句里的变量中的p写成q使整个程序瘫痪。
它让我记住了学习需要认真、仔细、负责的态度对待。
这次课程设计虽说很辛苦,而且设计出来的程序不全具备课程所需的,不过扩展功能学生数据的添加、修改、与删除的函数嵌进去,而且排序功能关联升序和降序功能,正所谓鱼与熊掌不可得兼。
这次课程设计,在整个程序中,我们通过使用while循环,switch语句,冒泡排序法,表格设计中的setw()以及类的定义及使用来完成程序设计,使我提高了对C++中语句的使用能力和组合能力,进一步加强了我对使用C++编程的能力。
还让我掌握了高级程序设计语言的基本思想、基本概念、基本方法和基本技能,while语句,this指针,case 作为程序的入口,一般结合switch使用等等。
一个星期以来的课程设计,感谢帮助我的同学和师长,通过和他们的交流,互相交流经验,我这次设计的程序中各大主函数体得以设计出来,感谢他们在我编程过程中为我做的提醒和指点,这真的很重要。
这次课程设计不仅让我修补了以前学习的漏洞,也让我知道一个道理:编程需要兴趣和实际动手。
这应该可以借鉴在同学或者师长们的编程经验上。
创新思维至关重要,相对于我这略感冗余却实现不了更多功能的程序来说,有必要写出精简的代码,也有助于开发出高效的程序。
虽说我编写的程序离专业人员设计的还有好大一段距离,但它已经是我目前的极限。
我相信,通过我的努力,在不久的将来,我会编出一组真正实用的程序的。
五、成绩评定成绩指导教师日期六、附件程序源代码清单:#include<iostream>#include<string>#include<fstream>#include<iomanip>using namespace std;class student{private:string number;string name;double computer;double English;double math;double sum;double ave;char grade;student *head;student *curnode;student *next;public:student();//不带参数的构造函数student(string ,string ,double ,double ,double ,double =0.0,double =0.0,char =NULL); //带数据域参数的构造函数,用来动态建立节点void sum_score();//总分函数void ave_score();//平均分函数void grade_score();//成绩等级void cin_app();//修改用void app_score(string ,string ,double ,double ,double); //动态的建立节点void del_score(); //删除全部节点void displist(); //输出节点中的全部数据void lookup(int ,string ); //查找函数void del_score(int ,string ); //删除函数void compositor(int ,int ); //排序函数void rework(int ,string ); //修改函数};//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////student类的实现void err_char();//输入错误字符检测函数void score_err();//成绩范围检测函数,当输入成绩不在0到100之间时提示重新输入student::student():next(NULL)//不带参数的构造函数{head=curnode=this;}//带参数的构造函数student::student(string Number,string Name,double Computer,double ENglish,double Math,double Sum,double Ave,char Grade):next(NULL){number=Number;name=Name;computer=Computer;English=ENglish;math=Math;sum=Sum;ave=Ave;grade=Grade;}void student::sum_score()///////////////////////计算总成绩{sum=computer+English+math;}void student::ave_score()/////////////////////计算平均成绩{ave=(computer+English+math)/3.0;}void student::grade_score()///////////////////计算成绩等级{int i;i=ave;switch(i/10){case 10: grade='A'; break;case 9: grade='A'; break;case 8: grade='B'; break;case 7: grade='C'; break;case 6: grade='D'; break;default: grade='E';}}void student::app_score(string Number,string Name,double Computer,double ENglish,double Math)//动态建立节点{curnode->next=new student(Number,Name,Computer,ENglish,Math);curnode=curnode->next;}void student::del_score()//////////////////////删除表中的全部数据{student *p;curnode=head->next;while(curnode!=NULL){p=curnode->next;delete curnode;curnode=p;}head->next=NULL;curnode=head;cout<<"┏━━━━━━━━━━━━━━━━━━━┓"<<endl;cout<<"┃!表中内容全部清空,现已是一个空表! ┃"<<endl;cout<<"┗━━━━━━━━━━━━━━━━━━━┛"<<endl;cout<<" ";system("pause");}void student::displist()////////////////////////输出表中的全部数据{if(head->next==NULL){cout<<"┏━━━━━━━━━┓"<<endl;cout<<"┃!这是一个空表! ┃"<<endl;cout<<"┗━━━━━━━━━┛"<<endl;cout<<" ";system("pause");return;}student *pw=curnode;curnode=head->next;cout<<"┏━━━━━┳━━━━━┳━━━┳━━━┳━━━┳━━━━┳━━━━┳━━┓"<<endl;cout<<"┃学号┃姓名┃计算机┃英语┃数学┃总分┃平均分┃等级┃"<<endl;cout<<"┣━━━━━╋━━━━━╋━━━╋━━━╋━━━╋━━━━╋━━━━╋━━┫"<<endl;while(curnode!=NULL){cout<<"┃"<<left<<setw(10)<<curnode->number;cout<<"┃"<<left<<setw(10)<<curnode->name;cout<<"┃"<<left<<setw(6)<<curnode->computer;cout<<"┃"<<left<<setw(6)<<curnode->English;cout<<"┃"<<left<<setw(6)<<curnode->math;curnode->sum_score();cout<<"┃"<<left<<setw(8)<<curnode->sum;curnode->ave_score();cout<<"┃"<<left<<setw(8)<<curnode->ave;curnode->grade_score();cout<<"┃"<<left<<setw(4)<<curnode->grade<<"┃"<<endl;if(curnode->next!=NULL)cout<<"┣━━━━━╋━━━━━╋━━━╋━━━╋━━━╋━━━━╋━━━━╋━━┫"<<endl;elsecout<<"┗━━━━━┻━━━━━┻━━━┻━━━┻━━━┻━━━━┻━━━━┻━━┛"<<endl;curnode=curnode->next;}curnode=pw;cout<<"┏━━━━━━━━━┓"<<endl;cout<<"┃!表中内容输出完毕!┃"<<endl;cout<<"┗━━━━━━━━━┛"<<endl;cout<<" ";system("pause");}////////////////////////////////////////输入数据void student::cin_app(){student *p=curnode;bool b=0;string Number;string Name;double Computer;double ENglish;double Math;while(1){cout<<" 学号:";cin>>Number;curnode=head->next;while(curnode!=NULL){b=(Number==curnode->number);curnode=curnode->next;}if(!b)break;else{cout<<"┏━━━━━━━━━━━━━━┓"<<endl;cout<<"┃出现了相同的学号,请重新输入┃"<<endl;cout<<"┗━━━━━━━━━━━━━━┛"<<endl;}}curnode=p;cout<<" 姓名:";cin>>Name;while(1){cout<<" 计算机:";cin>>Computer;while(cin.fail()){err_char();cout<<" 计算机:";cin>>Computer;}if(Computer>=0&&Computer<=100)break;elsescore_err();}while(1){cout<<" 英语:";cin>>ENglish;while(cin.fail()){err_char();cout<<" 英语:";cin>>ENglish;}if(ENglish>=0&&ENglish<=100)break;elsescore_err();}while(1){cout<<" 数学:";cin>>Math;while(cin.fail()){err_char();cout<<" 数学:";cin>>Math;}if(Math>=0&&Math<=100)break;elsescore_err();}this->app_score(Number,Name,Computer,ENglish,Math);cout<<"┏━━━━━━━━┓"<<endl;cout<<"┃!已添加一条记录!┃"<<endl;cout<<"┗━━━━━━━━┛"<<endl;cout<<" ";system("pause");}//////////////////////////////////////////查找函数的实现void student::lookup(int n,string str){student *p=curnode;bool b;//定义i=1,当找到数据时把i置为0.用于输出没有找到数据int i=1;if(!(curnode=head->next)){cout<<"┏━━━━━━━┓"<<endl;cout<<"┃!这是一个空表!┃"<<endl;cout<<"┗━━━━━━━┛"<<endl;curnode=p;cout<<" ";system("pause");return;}cout<<"┏━━━━━┳━━━━━┳━━━┳━━━┳━━━┳━━━━┳━━━━┳━━┓"<<endl;cout<<"┃学号┃姓名┃计算机┃英语┃数学┃总分┃平均分┃等级┃"<<endl;cout<<"┣━━━━━╋━━━━━╋━━━╋━━━╋━━━╋━━━━╋━━━━╋━━┫"<<endl;while(curnode!=NULL){switch(n){case 1: b=curnode->number==str;break;case 2: b=curnode->name==str;break;default: return;}if(b){i=0;cout<<"┃"<<left<<setw(10)<<curnode->number;cout<<"┃"<<left<<setw(10)<<curnode->name;cout<<"┃"<<left<<setw(6)<<curnode->computer;cout<<"┃"<<left<<setw(6)<<curnode->English;cout<<"┃"<<left<<setw(6)<<curnode->math;curnode->sum_score();cout<<"┃"<<left<<setw(8)<<curnode->sum;curnode->ave_score();cout<<"┃"<<left<<setw(8)<<curnode->ave;curnode->grade_score();cout<<"┃"<<left<<setw(4)<<curnode->grade<<"┃"<<endl;cout<<"┣━━━━━╋━━━━━╋━━━╋━━━╋━━━╋━━━━╋━━━━╋━━┫"<<endl;}curnode=curnode->next;}//当i=1是代表没有找到数据if(i){cout<<"┣━━━━━┻━━━━━┻━━━┻━━━┻━━━┻━━━━┻━━━━┻━━┫"<<endl;cout<<"┃没有匹配的数据┃"<<endl;cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;}elsecout<<"┗━━━━━┻━━━━━┻━━━┻━━━┻━━━┻━━━━┻━━━━┻━━┛"<<endl;curnode=p;cout<<" 以上是本次查找的结果!"<<endl;cout<<" ";system("pause");}//////////////////////////////////////////删除函数的实现void student::del_score(int n,string str){student *p=curnode,*pw=head;bool b;//定义i=1,当找到数据时把i置为0.用于输出没有找到数据int i=1;if(!(curnode=head->next)){cout<<"┏━━━━━━━┓"<<endl;cout<<"┃!这是一个空表!┃"<<endl;cout<<"┗━━━━━━━┛"<<endl;curnode=p;cout<<" ";system("pause");return;}while(curnode!=NULL){switch(n){case 1: b=curnode->number==str;break;case 2: b=curnode->name==str;break;default: return;}if(b){i=0;pw->next=curnode->next;delete curnode;curnode=pw->next;}else{pw=curnode;curnode=curnode->next;}}//当i=1是代表没有找到数据if(i){cout<<"┏━━━━━━━┓"<<endl;cout<<"┃没有匹配的数据┃"<<endl;cout<<"┗━━━━━━━┛"<<endl;}else{cout<<"┏━━━━━━━┓"<<endl;cout<<"┃数据删除成功┃"<<endl;cout<<"┗━━━━━━━┛"<<endl;}curnode=head;while(curnode->next){curnode=curnode->next;}cout<<" ";system("pause");}//////////////////////////////////////排序函数的实现void student::compositor(int n,int m){if(head->next==NULL){cout<<"┏━━━━━━━━━━━┓"<<endl;cout<<"┃!这是一个空表不能排序!┃"<<endl;cout<<"┗━━━━━━━━━━━┛"<<endl;cout<<" ";system("pause");return;}if(head->next->next==NULL){cout<<"┏━━━━━━━━━━━┓"<<endl;cout<<"┃!只有一条记录不用排序!┃"<<endl;cout<<"┗━━━━━━━━━━━┛"<<endl;cout<<" ";system("pause");return;}student *s,*p,*q,*r;r=head;s=head->next;q=s;p=q->next;while(s!=NULL){while(p!=NULL){switch(n){case 1:{if(m==1){while(s->number<p->number){q->next=p->next;r->next=p;p->next=s;s=p;p=q->next;if(p==NULL)break;}}else{while(s->number>p->number){q->next=p->next;r->next=p;p->next=s;s=p;p=q->next;if(p==NULL)break;}}break;}case 2:{if(m==1){while(s->sum<p->sum){q->next=p->next;r->next=p;p->next=s;s=p;p=q->next;if(p==NULL)break;}}else{while(s->sum>p->sum){q->next=p->next;r->next=p;p->next=s;s=p;p=q->next;if(p==NULL)break;}}break;}case 3:{if(m==1){while(s->ave<p->ave){q->next=p->next;r->next=p;p->next=s;s=p;p=q->next;if(p==NULL)break;}}else{while(s->ave>p->ave){q->next=p->next;r->next=p;p->next=s;s=p;p=q->next;if(p==NULL)break;}}break;}default: return;}if(p==NULL){break;}q=p;p=p->next;}r=s;s=s->next;q=s;p=q->next;if(p==NULL){break;}}cout<<"┏━━━━━━━━━━━━━━━━━━┓"<<endl;cout<<"┃!成功完成排序操作,即将输出排序结果!┃"<<endl;cout<<"┗━━━━━━━━━━━━━━━━━━┛"<<endl;cout<<" ";system("pause");displist();}////////////////////////////////////////修改函数的实现void student::rework(int n,string str){student *p=curnode;bool b;int i=1;if(!(curnode=head->next)){cout<<"┏━━━━━━━━━━━━━━━━┓"<<endl;cout<<"┃!这是一个空表没有需要修改的数据!┃"<<endl;cout<<"┗━━━━━━━━━━━━━━━━┛"<<endl;curnode=p;cout<<" ";system("pause");return;}while(curnode!=NULL){switch(n){case 1: b=curnode->number==str;break;case 2: b=curnode->name==str;break;default: return;}if(b){i=0;string Number;string Name;double Computer;double ENglish;double Math;cout<<"┏━━━━━━━━━━━━━━━━┓"<<endl;cout<<"┃!请在原数据后面输入要修改的数据!┃"<<endl;cout<<"┗━━━━━━━━━━━━━━━━┛"<<endl;cout<<" 学号:"<<curnode->number<<" ";cin>>Number;curnode->number=Number;cout<<" 姓名:"<<curnode->name<<" ";cin>>Name;curnode->name=Name;while(1){cout<<" 计算机:"<<curnode->computer<<" ";cin>>Computer;while(cin.fail()){err_char();cout<<" 计算机:"<<curnode->computer<<" ";cin>>Computer;}if(Computer>=0&&Computer<=100)break;elsescore_err();}curnode->computer=Computer;while(1){cout<<" 英语:"<<curnode->English<<" ";cin>>ENglish;while(cin.fail()){err_char();cout<<" 英语:"<<curnode->English<<" ";cin>>ENglish;}if(ENglish>=0&&ENglish<=100)break;elsescore_err();}curnode->English=ENglish;while(1){cout<<" 数学:"<<curnode->math<<" ";cin>>Math;while(cin.fail()){err_char();cout<<" 数学:"<<curnode->math<<" ";cin>>Math;}if(Math>=0&&Math<=100)break;elsescore_err();}curnode->math=Math;}curnode=curnode->next;}if(i){cout<<"┏━━━━━━━━━━━┓"<<endl;cout<<"┃!找不到需要修改的数据!┃"<<endl;cout<<"┗━━━━━━━━━━━┛"<<endl;}else{cout<<"┏━━━━━━━━━┓"<<endl;cout<<"┃!数据修改全部完成!┃"<<endl;cout<<"┗━━━━━━━━━┛"<<endl;}cout<<" ";system("pause");curnode=p;}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////常用函数调用void name_of_number();//选择姓名还是学号void menu()//系统菜单函数的定义{cout<<"┏━━━━━━━━━━━━━━━━━┓"<<endl;cout<<"┃欢迎使用信管专业学生成绩管理系统┃"<<endl;cout<<"┃┃"<<endl;cout<<"┃主菜单┃"<<endl;cout<<"┃┃"<<endl;cout<<"┃(请按提示操作)┃"<<endl;cout<<"┃┃"<<endl;cout<<"┣━━━━━━━━━━━━━━━━━┫"<<endl;cout<<"┃┃"<<endl;cout<<"┃ 1 录入成绩 2 删除记录┃"<<endl;cout<<"┃┃"<<endl;cout<<"┃ 3 修改记录 4 记录排序┃"<<endl;cout<<"┃┃"<<endl;cout<<"┃ 5 查看记录 6 查找信息┃"<<endl;cout<<"┃┃"<<endl;cout<<"┃7 删除全部┃"<<endl;cout<<"┃┃"<<endl;cout<<"┃其他键退出┃"<<endl;cout<<"┃┃"<<endl;cout<<"┗━━━━━━━━━━━━━━━━━┛"<<endl;cout<<" 选择1-7数字进行操作"<<endl;cout<<" 你的选择是:";}//查找函数的调用void fun_lookup(student &a){int n;string str;name_of_number();cout<<" 你的选择是:";cin>>n;while(cin.fail()){err_char();cout<<" 你的选择是:";cin>>n;}if(n!=1&&n!=2)n=1;cout<<" 请输入查找关键字:";cin>>str;a.lookup(n,str);}//修改函数void fun_rework(student &a){int n;string str;name_of_number();cout<<" 你的选择是:";cin>>n;while(cin.fail()){err_char();cout<<" 你的选择是:";cin>>n;}if(n!=1&&n!=2)n=1;cout<<" 请输入修改关键字:";cin>>str;a.rework(n,str);}//删除函数的调用void fun_del(student &a){int n;string str;name_of_number();cout<<" 你的选择是:";cin>>n;while(cin.fail()){err_char();cout<<" 你的选择是:";cin>>n;}if(n!=1&&n!=2)n=1;cout<<" 请输入删除关键字:";cin>>str;a.del_score(n,str);}//排序函数的调用void fun_compositor(student &a) {int n,m;cout<<"┏━━━━━━━━━━━━━━━━━┓"<<endl; cout<<"┃请输入按什么排序┃"<<endl; cout<<"┃┃"<<endl; cout<<"┃ 1 按学号排序 2 按总分排序┃"<<endl; cout<<"┃ 3 按平均分排┃"<<endl; cout<<"┃┃"<<endl; cout<<"┃输入其它数字则按学号排序┃"<<endl; cout<<"┃输入其它不是数字重新输入┃"<<endl; cout<<"┗━━━━━━━━━━━━━━━━━┛"<<endl; cout<<" 你的选择是:";cin>>n;while(cin.fail()){err_char();cout<<" 你的选择是:";cin>>n;}if(n!=1&&n!=2&&n!=3){n=1;}cout<<"┏━━━━━━━━━━━━━━━━━┓"<<endl; cout<<"┃请选择排序类型┃"<<endl; cout<<"┃┃"<<endl; cout<<"┃ 1 按降序排序 2 按升序排序┃"<<endl; cout<<"┃┃"<<endl; cout<<"┃输入其它数字则按降序排序┃"<<endl; cout<<"┃┃"<<endl; cout<<"┃输入其它不是数字重新输入┃"<<endl; cout<<"┗━━━━━━━━━━━━━━━━━┛"<<endl; cout<<" 你的选择是:";cin>>m;while(cin.fail()){err_char();cout<<" 你的选择是:";cin>>m;}if(n!=1&&n!=2){m=1;}//输出排序后的结果positor(n,m);}//成绩范围检测函数void score_err(){cout<<"┏━━━━━━━━━━━━━━━┓"<<endl;cout<<"┃输入的成绩应该在0--100之间┃"<<endl;cout<<"┃┃"<<endl;cout<<"┃请返回重新输入┃"<<endl;cout<<"┗━━━━━━━━━━━━━━━┛"<<endl;}//退出程序函数void fun_exit(){cout<<"┏━━━━━━━━━━┓"<<endl;cout<<"┃程序即将退出┃"<<endl;cout<<"┗━━━━━━━━━━┛"<<endl;cout<<" ";system("pause");exit(1);}//输入错误字符检测函数void err_char(){cout<<"┏━━━━━━━━━━━━━┓"<<endl;cout<<"┃输入了非法字符,请重新输入┃"<<endl;cout<<"┗━━━━━━━━━━━━━┛"<<endl;cin.clear ();cin.sync ();}//选择姓名还是学号void name_of_number(){cout<<"┏━━━━━━━━━━┓"<<endl;cout<<"┃请输入关键字类型┃"<<endl;cout<<"┃┃"<<endl;cout<<"┃ 1 学号 2 姓名┃"<<endl;cout<<"┃┃"<<endl;cout<<"┃其它数字默认学号┃"<<endl;cout<<"┃输入非数字重新输入┃"<<endl;cout<<"┗━━━━━━━━━━┛"<<endl;}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////主函数文件void fun_lookup(student &a);//查找函数的调用定义void fun_del(student &a);//删除函数的调用定义void fun_compositor(student &a);//排序函数的调用定义void fun_rework(student &a);//修改函数的调用定义void fun_exit();//退出程序函数的定义void main(){student a;while(1){int i;system("cls"); //清屏功能menu();cin>>i;if(cin.fail()) //输入非法字符时退出fun_exit();switch (i){case 1: a.cin_app();break; //增加记录case 2: fun_del(a);break; //删除记录case 3: fun_rework(a);break; //修改记录case 4: fun_compositor(a);break; //记录排序case 5: a.displist();break; //查看记录case 6: fun_lookup(a);break; //查找记录case 7: a.del_score();break; //清空链表default: fun_exit(); //其它键退出}}}。