C++成绩管理系统设计报告
c语言学生成绩管理系统设计报告

c语言学生成绩管理系统设计报告C语言是计算机领域最为重要的编程语言之一,用于许多应用系统的开发。
这里我将围绕C语言学生成绩管理系统的设计报告,分步骤阐述该系统的设计与实现。
第一步:需求分析在进行设计之前,必须先进行需求分析,明确系统所需的功能和性能。
针对学生成绩管理系统,我们需要实现以下功能:1. 学生信息管理:包括学生姓名,学号等信息。
2. 成绩信息管理:包括课程分数,总分、平均分等信息。
3. 数据录入和修改:教师可以输入学生的成绩信息,并对已有的信息进行修改。
4. 成绩查询功能:学生可以查询自己的成绩情况。
第二步:系统设计根据需求分析,我们可以对系统进行具体设计。
该系统主要分为以下模块:1. 学生信息管理模块:用于录入和管理学生的信息。
2. 成绩信息管理模块:用于录入和管理学生的成绩信息。
3. 数据操作模块:用于操作学生和成绩信息的增删改查。
4. 用户管理模块:用于管理系统用户,包括学生和教师。
第三步:系统实现在进行系统实现时,我们需要注意以下几个方面:1. 界面设计:尽量简洁明了,易于使用。
2. 数据库设计:需要对数据进行分类储存,便于操作。
3. 数据库连接:需要通过C语言的数据库API来连接数据库。
4. 代码编写:需要根据设计要求进行代码编写,并进行测试调整,确保系统的稳定性和性能。
第四步:系统测试完成系统的设计和实现后,就需要对系统进行测试。
测试主要包括以下几个方面:1. 单元测试:对系统各个功能模块进行单独测试,确保每个模块的运行效果。
2. 集成测试:对系统各个模块进行集成测试,确保各个模块之间的相互交互正常。
3. 用户测试:邀请用户来测试系统,听取他们的反馈和建议,进行调整和改进。
总结:本文围绕C语言学生成绩管理系统的设计报告,分步骤阐述了系统的设计、实现和测试。
这对于开发人员在进行类似系统开发时具有一定的指导意义。
不过,由于每个系统都具有其独特性和特点,因此具体实现还需根据具体情况而定。
C语言课程设计---班级成绩管理系统

课程设计报告课程名称C语言程序设计课题名称班级成绩管理系统专业班级学号姓名指导教师年月日湖南工程学院课程设计任务书课程名称C语言程序设计课题班级成绩管理系统专业班级学生姓名学号指导老师审批任务书下达日期年月日任务完成日期年月日目录一、引言 (1)二、总体设计 (2)三、详细设计 (4)四、问题分析及总结 (13)五、参考文献 (15)六、附件 (15)一、设计内容与设计要求1. 设计内容:班级成绩管理系统设计涉及的知识点:①掌握并熟练运用C语言的基本数据类型与各种表达式,程序的流程控制语句;②掌握数组的基本概念。
熟练掌握一维数组、二维数组的应用、掌握字符数组与字符串的关系以及字符串的简单处理。
③掌握函数的定义,函数的返回值,函数的调用,函数的形式参数和实际参数之间的关系;掌握变量的作用域与生存期,了解函数的作用域。
④掌握结构体的概念,结构体类型的定义,结构体变量的定义和初始化,结构体成员的表示,结构体变量的赋值含义,结构体与指针、函数的关系。
⑤掌握文件、文件类型指针的基本概念,熟练掌握文件的打开与关闭以及文件的建立、读写等有关操作。
2.设计要求:1)用C语言实现系统;利用结构体数组实现班级成绩的数据结构设计;系统的各个功能模块要求用函数的形式实现;应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观;各项显示数据均要求以表格的形式输出;在各功能子模块中应设计相应的二级菜单。
2) 建立一个班级学生成绩数据库,文件名为bjcjk.txt,并从该文件中读取数据;3) 班级成绩管理系统应能提供以下功能:(1)主菜单界面设计。
通过提示用户输入一个数字选项,调用相应的功能函数。
(2)学生成绩显示:完成班级全部学生成绩的显示,显示时按表格的形式,且应有表头;(3)学生成绩追加:完成新增一个(或多个)学生的成绩记录,要求在追加过程中有相应的提示信息,完成追加后能重新计算学生平均成绩并显示;(4)学生成绩修改:要求能按学号和按姓名两种定位方式,且可以按用户要求修改记录中除学号和姓名以外的指定内容,并重新计算学生的平均成绩;(5)学生成绩信息的查询;要示系统能按学号、按姓名查询以及能查总分在某一指定范围内的学生信息,且能显示符合条件的所的记录,若所需查询的信息不存在时应有相应的提示信息。
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。
C语言课程设计报告学生成绩管理系统(广工)

一、课程设计题目:学生成绩管理二、需求分析给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓名、性别以及各科成绩组成。
对学生的考试成绩进行有关统计:按总数高低次序,打印出名次表,分数相同的为同一名次;按名次打印出每个学生的学号、姓名、总分以及各科成绩,并打印统计表。
三、概要设计程序要有的功能:1。
输入记录2。
用指定格式显示全部记录3。
根据姓名查找记录4。
根据姓名删除记录5. 保存记录到文件6。
按序号显示记录7。
按姓名由小到大的顺序排序程序运行当中,通过选择对应的功能序号来实现所需功能。
对输入的数据要有事先的分析,如果用户输入的数据与实际不相符如输入成绩的数值为负,则程序应输出相应的提示:“您输入的数据有误,请核实!”。
再者就是,当再输入完相应的数据后,程序作出相应的提示,询问用户是否要保存数据。
在排列学生成绩时候,如果出现成绩相同的情况,程序自动作出处理。
最后,在程序可以正确运行的基础上,再增加一些功能,如在排列的时候,自动输出最高分与最低分。
与及格成绩作比较,输出及格人数等相关信息。
流程图:四、详细设计源程序:#include ”stdio。
h”#include "stdlib.h”#include "string。
h”int shoudsave=0;/* */struct student{char num[10];/*学号*/char name[20];char sex[4];int cgrade;int mgrade;int egrade;int totle;int ave;char neartime[10];/*最近更新时间*/};typedef struct node{struct student data;struct node *next;}Node,*Link;void menu(){printf(”*********************************主菜单*****************************************”);printf(”\t1登记学生资料\t\t\t\t\t2删除学生资料\n”);printf(”\t3查询学生资料\t\t\t\t\t4修改学生资料\n”);printf(”\t5保存学生资料\t\t\t\t\t0退出系统\n”);printf(”********************************************************************************\n");}void printstart(){printf(”-————---—-——————--——----———-—-—-————--————--—--—--—-————---—-—————--———\n”);}void Wrong(){printf(”\n=====>提示:输入错误!\n”);}void Nofind(){printf("\n=====〉提示:没有找到该学生!\n");}void printc()/*本函数用于输出中文*/printf(”学号\t 姓名性别英语成绩数学成绩C语言成绩总分平均分\n”); }void printe(Node *p)/* 本函数用于输出英文*/{printf("%—12s%s\t%s\t%d\t%d\t%d\t %d\t %d\n",p—〉data。
学生成绩管理系统c语言课程设计报告

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

#include ”stdio.h”#include ”string.h”#include "stdlib.h"#include "conio.h"#include ”string.h”#include "fcntl。
h"typedef struct student{int num;char grade[10];char classroom[10];char name[10];float score_math;float score_chinese;float score_english;float average;float sum;}STU;typedef struct Node{STU data;struct Node *next;}*linklist;void menu();char *loginpassword(char password[],int n);//登录验证密码函数声明//linklist createstulist(linklist head);//创建学生链表即学生信息录入函数声明// void printstulist(linklist head);//学生信息输出函数声明//void searchstu_namelist(linklist head);//学生信息查询函数声明(按姓名)// void searchstu_numlist(linklist head);//学生信息查询函数声明(按学号) linklist modifystulist(linklist head);//学生信息修改函数声明//linklist delatestulist(linklist head);//学生信息删除函数声明//void savestulist(linklist head);//学生信息保存到文件函数声明// linklist loadstulist();//从文件中读取学生信息函数声明// void sortstulist(linklist head); //成绩排名函数(按年级)声明//void sort(STU stu[],int flag); //学生分班函数声明//void sortstuclass(linklist head); //成绩排名函数(按班级)声明////*************************************//void main(){char admin[]=”zhangqiong";char password[]=”123456";char person[20];char password1[10];int i;printf(”********************************************************************************\n”);printf("\t\t **********欢迎来到学生成绩管理系统**********\n\n");printf(”********************************************************************************\n\n”);printf(”\t\t\t\t用户登录\n\n\n\n");for(i=0;i<3;i++){printf("用户名:”);gets(person);fflush(stdin);printf(”\n\n\n”);loginpassword(password1,10);printf("\n\n\n”);if(strcmp(admin,person)==0&&strcmp(password,password1)==0){printf(”\t\t\t\t成功登录,亲!\n”);printf("\n\n”);printf(”按任意键继续!”);getch();menu();break;}elseprintf("\t用户名或者密码输入错误\n”);}if(i==3)printf("\t对不起,您今天输入次数太多,已被强制退出!\n”);}//**********************************************************////**********************************************************//char *loginpassword(char password[],int n)//登录密码函数,隐藏密码可见//{int i=0;int m=0;char ch;printf("用户密码:”);while((ch=getch())!='\r’&&m〈n){password[i++]=ch;printf(”*");}password[i]='\0';return password;}//***************************************************// void menu()//主界面函数//{system("cls");linklist L;L=(linklist)malloc(sizeof(Node));L—>next=NULL;int ch;do{printf(”\t -——-----—-******——--——--—---******—————-————-******-—-—-—-—-—\n\n");printf("\t\t\t**********学生成绩管理系统***********\n\n”);printf("\t ——----——--******-—-——------—******—---———--—-******—---———-——\n\n\n\n\n");printf("\t1。
C语言学生成绩管理系统课程设计

课程设计说明书设计名称: C语言课程设计题目:学生成绩管理系统学生姓名:专业:网络工程班级: 12级1班学号: 2012394108指导教师:日期:年月日课程设计任务书网络工程专业 12 年级 1 班孙璐一、设计题目学生成绩管理系统二、主要内容数据库的数据项主要数据包括:学号、姓名、年级、专业、成绩1、成绩2、成绩3、平均成绩、总成绩。
要求具有以下功能:(1)系统以菜单方式工作。
(2)显示、保存记录;添加、删除、修改任意个记录。
(3)排序功能:打开学生数据库,计算每个学生的平均成绩和总成绩,用冒泡法或选择排序法将平均成绩和总成绩排序后生成两个新文件(从大到小),存盘并显示这两个文件的全部记录。
(4)查询功能:打开总成绩排序文件,用折半查找法统计出给定分数的人数并显示。
并能按学号或姓名查找并显示某个学生的各科成绩。
(5)统计功能:对各科成绩统计分析(平均分、最高分、最低分、及格率等);统计各科各分数段人数。
三、具体要求围绕课程设计的目的和意义,基本要求如下:1、认真阅读《C语言课程设计》指导书,明确课程设计的目的、意义和要求;2、快速总结C程序设计语言的精髓,如:函数的概念、函数的设计和函数的调用;3、快速熟悉Tuber C 或C++的上机环境。
能熟练进行高级编辑操作(特别是字块操作);熟悉步进式、断点跟踪的程序调试方法,提高工作效率。
4、根据“课程设计题目”,采用结构化的程序设计思想,确定系统的总体设计方案、确"定时间进度。
如果是多人共一题,则要首先完成小组内的人员分工及安排,不允许重题现象。
5.学习并了解良好的程序设计风格。
按质、按量、并按时间完成课程设计的任务。
6.提供可运行的课程设计系统,参加上机面试答辩。
本次课程设计的重点是:学会设计并编写函数,掌握好各函数之间的调用关系;利用文件操作函数,建立数据库并完成对数据库的各种操作;掌握几种典型算法的应用(如:冒泡法、选择排序法和折半查找法)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
机电工程学院中南大学计算机程序设计基础C++课程设计题目学生成绩管理系统组长姓名谢稳江学号0801140904班级:机械1409成员姓名苏劲学号0801140918班级:机械1409成员姓名黄志刚学号0801140908班级:机械1409(说明:按个人贡献由高到低排名)指导教师夏建芳学院机电工程学院日期2015年7月16 日承诺书课程设计内容均为团队成员在查询资料的基础上,通过团队成员消化后改写或编写、调试,不存在班级同学之间内部抄袭。
若团队成员存在抄袭其它同学程序,团队成员一致同意按重修处理。
团队全体成员承诺签名:日期:2015年7月日目录一、实验目的二、问题描述三、总体设计方案1、设计的目标功能2、设计要求3、设计模块图4、详细设计内容1、整体框架2、学生信息录入模块3、文件保存模块4、查询功能模块5、输出功能模块5、成员设计内容简介四、操作说明五、源程序代码六、实践心得4 44 4 4 56 6 6 6 6 6 711 29 7一、实验目的✧通过课程设计,提高自己动手的能力,让实践和理论相结合,进一步巩固《C++程序设计》的课程内容,掌握软件开发的基本方法。
✧学会将知识应用于实践,学会搜集和整理资料,提高分析和解决问题的能力,加强综合能力。
✧增强团队意识,提高团队协作能力,在合作中增进友谊,共同进步。
二、问题描述✧题目:学生成绩管理系统✧一学期的C++程序设计课程结束了,为了检验大家的学习成果,同时结合在网上和图书馆搜集到的资料,加强团队协作,结合自身实际情况,我们选择设计一个学生成绩管理系统。
三、总体设计方案1、设计的目标功能✧<1>能完成对学生成绩的录入;✧<2>能按照不同的方式查询成绩;✧<3>能够对学生成绩记录进行修改:✧<4>能对学生的成绩进行统计分析;✧<5>能够浏览所有学生的信息;✧<6>能够按不同方式输出学生成绩并排序;✧<7>能够将学生成绩保存到文本文件;2、设计要求:✧<1>操作界面尽量美观;✧<2>系统以菜单方式工作;✧<3>合理分工,加强团队合作;<4>功能函数分工编写,最后一起整合组装。
3、设计功能模块4、详细设计内容开始 m13458录入查询修改删除统计分析输出保存2、6 7、9 10<1>、整体框架整个学生成绩管理系统采用链表作为基本数据结构,创建一个类student用于保存学生的数据且是链表中的一个节点。
类list作为保存整个链表之用。
主函数通过switch语句来根据用户的需要连接各个模块,以实现用户的需要。
<2>、学生信息录入模块设计通过应用list中的instu()函数,来新建一个链表中的节点,即一个新的学生信息,来进行成绩的录入功能。
成绩修改功能,可以根据姓名或学号进行查询并修改相应的课程的成绩,使用了void search(char s[10],int)和void search1(char s[20],int)函数进行操作。
search函数根据姓名查找,search1函数根据学号进行查找。
因为学号和姓名,都是存储在字符数组中的,所以都是通过字符串的比较进行查找的。
然后根据整形参数进行对应的课程成绩的修改。
成绩删除功能,也是可以根据姓名或学号进行删除,查询的算法和成绩修改功能的查询方法是一样的,当找到要删除的节点时,因为节点都是在堆内存中保存的,所以可以直接delete掉,并将前一个节点的next指针指向被删掉的节点的next 指针所指向的节点。
<3>、文件保存功能模块先提示用户输入保存文件的文件名及班级名称。
文件的前两行分别是班级名称和成绩单的开头,然后通过ofstream变量output来进行学生信息的输出,一项一项的输出,并设定格式,直到输出节点为NULL为止,之后关闭output。
<4>、查询功能模块可以根据姓名或学号进行查找,搜索方法和前几个模块相同。
通过outstu1(char *n)和outstu(char *n)来进行输出。
总成绩和平均成绩的查询通过函数void outsum(char *)和void outsum1(char *)来完成。
通过函数scanall()来浏览所有学生的信息。
通过函数think()来进行成绩的统计分析。
<5>、输出功能模块通过建立一个新的类class stucopy用于拷贝student的数据,并实现排序功能。
创建一个stucopy stu[M]数组,将原链表的数据拷贝与数组中,然后用选择排序方法将数组排序,然后用output按照标准的格式输出或保存为数据文件。
5、成员设计内容简介该系统主要有以下功能:1、新增学生成绩,通过instu()函数实现;2、查询和修改学生成绩,通过void search(char s[10],int)和void search1(char s[20],int)函数进行操作;3、删除学生信息,通过delstu(char *n)和delstu1(char *n)函数实现;4、成绩统计分析,通过think()函数来实现;5、输出学生信息,包括浏览所有学生信息(ev(int i))、保存成绩至文件、.按总成绩排序输出【通过outsum(char *)函数和outsum1(char *)函数实现】和按学号顺序输出【通过scanall()函数实现。
其中,1、2两功能主要由黄志刚编程实现,3、4两项功能主要由苏劲编程实现,5项输出学生信息功能以及函数的组装、main函数的编写主要由谢稳江编程实现。
四、操作说明本着简单明了易操作的原则,当运行程序时,出现的是如下的主界面:1、主界面输入0-10的数字并按enter键进行下一步操作,如果不是0-10之间的数字,显示输入错误。
2、学生成绩录入进入主界面输入1并按enter键进入成绩录入录入完成后有“1、继续 0、退出”两选择,1进入主界面,0退出系统3、查询学生成绩考虑到操作界面太小,查询分为各科成绩查询和总成绩查询,进入主界面后选择2或6进行查询4、浏览所有学生信息5、删除学生信息6、数据统计分析7、修改学生成绩五、源程序代码#include<iostream>#include<string.h>#include<iomanip.h>#include<fstream.h>#include<windows.h>const int M = 20;class stucopy//此类用于拷贝student的数据,用于排序功能的实现{public:char id[20];char sex[10];char name[10];double grade[5];double sumsum;//总成绩double average;//平均成绩};class student//用于保存学生信息的类{friend class list;public:char id[20];//保存学号char sex[10];//保存性别char name[10];//保存名字double grade[5];//保存成绩student(){next=0;int i;for(i=0;i<20;i++)id[i]=0;for(i=0;i<10;i++)sex[i]=0;for(i=0;i<10;i++)name[i]=0;}void s();void setid(char id1[20]){for(int i=0;i<20;i++)id[i]=id1[i];}void setsex(char sex1[10]){for(int i=0;i<10;i++)sex[i]=sex1[i];}void setname(char name1[10]){for(int i=0;i<10;i++)name[i]=name1[i];}void setgrade(double grade1[5]){for(int i=0;i<5;i++)grade[i]=grade1[i];}student *next;//next指向下一个学生,构成链表char * outid(){return id;};char * outsex(){return sex;};char * outname(){return name;};double outsum(){double sum=0;for(int i=0;i<5;i++)sum+=this->outgrade(i);return sum;}double outav(){return this->outsum()/5;}double outgrade(int i){return grade[i];};void intgrade(int);};void student::intgrade(int j)//用于修改学生的成绩{switch (j){case 1:cout<<" 请高数成绩:\n";cin>>grade[0];break;case 2:cout<<"请输入大物成绩:\n";cin>>grade[1];break;case 3:cout<<"请输入英语成绩:\n";cin>>grade[2];break;case 4:cout<<"请输入C++成绩:\n";cin>>grade[3];break;case 5:cout<<"请输入体育成绩:\n";cin>>grade[4];break;}}void student::s()//用于录入学生的信息{cout<<"请输入学号(六位):\n";cin>>id;cout<<"请输入姓名:\n";cin>>name;cout<<"请输入性别(男或女):\n";cin>>sex;cout<<"请输入高数成绩:\n";cin>>grade[0];cout<<"请输入大物成绩:\n";cin>>grade[1];cout<<"请输入英语成绩:\n";cin>>grade[2];cout<<"请输入C++成绩:\n";cin>>grade[3];cout<<"请输入体育成绩:\n";cin>>grade[4];}class list{private:double high[5],low[5];public:student *last,*first;//链表的开头和结尾double totoal;list(){last=0;first=0;};~list();void instu();//新建一个学生的数据void outstu(char *);//根据姓名输出一个学生的信息int delstu(char *n);//根据姓名删除一个学生的信息void outstu1(char *);//根据学号输出一个学生的信息int delstu1(char *n);//根据学号删除一个学生的信息void outsum(char *);//根据姓名输出一个学生的总成绩和平均成绩void outsum1(char *);//根据学号输出一个学生的总成绩和平均成绩void think();//用于输出班级成绩的统计分析void search(char s[10],int);//根据姓名修改一个学生的成绩void search1(char s[20],int);//根据学号修改一个学生的成绩double hi(int i);//求某门课的最高分double lo(int i);//求某门课的最低分void av(int i);//求某门课的平均分void ev(int i);//用于班级成绩统计分析的人数分布输出void scanall();//输出所有学生的信息};list::~list()//析构函数,将所有创建的学生对象删掉{if(first!=0){student *p=first,*temp;while(p!=NULL){temp=p;p=p->next;delete temp;cout<<"ok\n";}}}void list::instu(){student *p=new student();p->s();if(first==0){first=last=p;}else{last->next=p;last=p;}}void list::outstu(char *n){if(first==0) {cout<<"班级无成员!查无此人!"<<endl;return;} student *temp=first;for(;temp!=NULL;temp=temp->next) if(strcmp(temp->outname(),n)==0){cout<<setw(6)<<"学号"<<setw(6)<<"姓名"<<setw(6)<<"性别"<<setw(6)<<"高数"<<setw(6)<<"大物"<<setw(6)<<"英语"<<setw(6)<<"C++"<<setw(6)<<"体育"<<endl;cout<<setw(6)<<temp->outid()<<setw(6)<<temp->outname()<< setw(6)<<temp->outsex()<<setw(6)<<temp->outgrade(0)<<setw(6)<<temp->outgrade(1)<<setw(6)<<temp->outgrade(2)<<setw(6)<<temp->outgrade(3)<<setw(6)<<temp->outgrade(4);return;}cout<<"查无此人!"<<endl;return;}void list::outstu1(char *n){if(first==0) {cout<<"班级无成员!查无此人!"<<endl;return;}student *temp=first;for(;temp!=NULL;temp=temp->next)if(strcmp(temp->outid(),n)==0){cout<<setw(6)<<"学号"<<setw(6)<<"姓名"<<setw(6)<<"性别"<<setw(6)<<"高数"<<setw(6)<<"大物"<<setw(6)<<"英语"<<setw(6)<<"C++"<<setw(6)<<"体育"<<endl;cout<<setw(6)<<temp->outid()<<setw(6)<<temp->outname()<<setw(6)<<temp->outsex( )<<setw(6)<<temp->outgrade(0)<<setw(6)<<temp->outgrade(1)<<setw(6)<<temp->outg rade(2)<<setw(6)<<temp->outgrade(3)<<setw(6)<<temp->outgrade(4);return;}cout<<"查无此人!"<<endl;return;}int list::delstu(char *n){if(first==0){cout<<"无数据!"<<endl;return 0;}student *temp=first;student *p;if(strcmp(first->outname(),n)==0){first=first->next;delete temp;cout<<"\n删除成功!\n";return 0;}else for(;temp->next!=NULL;temp=temp->next){if(strcmp(temp->next->outname(),n)==0){p=temp->next;temp->next=temp->next->next;delete p;cout<<"\n删除成功!\n";return 0;}}cout<<"\n查无此人,删除失败!\n";return 0;}int list::delstu1(char *n){if(first==0){cout<<"无数据!"<<endl;return 0;}student *temp=first;student *p;if(strcmp(first->outid(),n)==0){first=first->next;delete temp;cout<<"\n删除成功!\n";return 0;}else while(temp->next!=NULL){if(strcmp(temp->next->outid(),n)==0){p=temp->next;temp->next=temp->next->next;delete p;cout<<"\n删除成功!\n";return 0;}else temp=temp->next;}cout<<"\n查无此人,删除失败!\n";return 0;}void list::think(){if(first==0){cout<<"无数据!"<<endl;return;}int i=0;student *p=first;while (p!=NULL){p=p->next;i++;}totoal=i;cout<<"人数:"<<i<<endl;cout<<"高数\n";cout<<"最高分:"<<hi(0)<<" "<<"最低分:"<<lo(0)<<" "<<"平均分:"; av(0);ev(0);cout<<"大物\n";cout<<"最高分:"<<hi(1)<<" "<<"最低分:"<<lo(1)<<" "<<"平均分:"; av(1);ev(1);cout<<"英语\n";cout<<"最高分:"<<hi(2)<<" "<<"最低分:"<<lo(2)<<" "<<"平均分:"; av(2);ev(2);cout<<"C++\n";cout<<"最高分:"<<hi(3)<<" "<<"最低分:"<<lo(3)<<" "<<"平均分:"; av(3);ev(3);cout<<"体育\n";cout<<"最高分:"<<hi(4)<<" "<<"最低分:"<<lo(4)<<" "<<"平均分:"; av(4);ev(4);}double list::hi(int i){high[i]=0.00;student *temp=first;while(temp!=0){if(temp->outgrade(i)>high[i])high[i]=temp->outgrade(i);temp=temp->next;}return high[i];}double list::lo(int i){low[i]=100;student *temp=first;while(temp!=0) {if(temp->outgrade(i)<low[i])low[i]=temp->outgrade(i);temp=temp->next;}return low[i];}void list::av(int i){double aver=0;student *temp=first;while(temp!=NULL){aver+=temp->outgrade(i);temp=temp->next;}cout<<aver/totoal<<endl;}void list::ev(int i){int a=0,b=0,c=0,d=0,e=0,f=0;student *temp=first;while(temp!=0){switch((int)temp->outgrade(i)/10){case 10:a++;break;case 9:a++;break;case 8:b++;break;case 7:c++;break;case 6:d++;break;case 5:e++;break;default:f++;}temp=temp->next;}cout<<"90-100的人数:"<<a<<" 80-89的人数:"<<b<<" 70-79的人数:"<<c<<" 60-69的人数:"<<d<<" 50-59的人数:"<<e<<" 50以下的人数:"<<f<<" 及格的人数:"<<(a+b+c+d)<<" 不及格的人数:"<<(e+f)<<endl;}void list::search(char s[10],int n){student *temp=first;for(;temp!=NULL;temp=temp->next)if(strcmp(temp->outname(),s)==0)temp->intgrade(n);}void list::search1(char s[20],int n){student *temp=first;for(;temp!=NULL;temp=temp->next)if(strcmp(temp->outid(),s)==0)temp->intgrade(n);}void list::outsum(char *n){if(first==0){cout<<"无数据!"<<endl;return;}student *temp=first;for(;temp!=NULL;temp=temp->next)if(strcmp(temp->outname(),n)==0){cout<<setw(8)<<"学号"<<setw(8)<<"姓名"<<setw(8)<<"性别"<<setw(10)<<"总成绩"<<setw(10)<<"平均成绩"<<"\n";cout<<setw(8)<<temp->outid()<<setw(8)<<temp->outname()<<setw(8)<<temp->out sex()<<setw(10)<<temp->outsum()<<setw(10)<<temp->outav();return;}cout<<"查无此人!"<<endl;return;}void list::outsum1(char *n){double sum=0;int i=0;double av=0;if(first==0){cout<<"无数据!"<<endl;return;}student *temp=first;for(;temp!=NULL;temp=temp->next)if(strcmp(temp->outid(),n)==0){cout<<setw(8)<<"学号"<<setw(8)<<"姓名"<<setw(8)<<"性别"<<setw(10)<<"总成绩"<<setw(10)<<"平均成绩"<<"\n";cout<<setw(8)<<temp->outid()<<setw(8)<<temp->outname()<<setw(8)<<temp->out sex()<<setw(10)<<temp->outsum()<<setw(10)<<temp->outav();return;}cout<<"查无此人!"<<endl;return;}void list::scanall(){student *temp;for(temp = first;temp!=NULL;temp=temp->next)cout<<setw(6)<<temp->outid()<<setw(6)<<temp->outname()<<setw(6)<<temp->out sex()<<setw(6)<<temp->outgrade(0)<<setw(6)<<temp->outgrade(1)<<setw(6)<<temp->outgrade(2)<<setw(6)<<temp->outgrade(3)<<setw(6)<<temp->o utgrade(4)<<setw(10)<<temp->outsum()<<setw(10)<<temp->outav()<<endl;}void main(){stucopy stu[M];//复制整个链表的数据于数组,用于排序stucopy stutemp;//临时变量list will;//整个链表student *p, *p1=new student(),*q;//临时变量ifstream input;//输入ofstream output;//输出char file[20],classname[20],temp[80],id[20],name[9],sex1[10];//临时变量int m=0,n=0,j=0,i=0;//临时变量double grade1[5];//临时变量for(i=0;i<20;i++) id[i]=0;for(i=0;i<9;i++) name[i]=0;//初始化do{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);//设置操作界面颜色为绿色cout<<"\t\t*****欢迎使用成绩管理系统******"<<endl<<endl;cout<<"\t\t*********主菜单*********"<<endl<<endl;cout<<"\t\t\t★☆★☆★☆★☆★☆★☆★"<<endl;cout<<"\t\t\t☆ 1.新增学生成绩☆"<<endl;cout<<"\t\t\t★ 2.查询学生成绩★"<<endl;cout<<"\t\t\t☆ 3.修改学生成绩☆"<<endl;cout<<"\t\t\t★ 4.删除学生成绩★"<<endl;cout<<"\t\t\t☆ 5.成绩统计分析☆"<<endl;cout<<"\t\t\t★ 6.总成绩查询★"<<endl;cout<<"\t\t\t☆ 7.浏览所有学生信息☆"<<endl;cout<<"\t\t\t★ 8.保存成绩至文件★"<<endl;cout<<"\t\t\t☆ 9.按总成绩排序输出☆"<<endl;cout<<"\t\t\t★ 10.按学号顺序输出★"<<endl;cout<<"\t\t\t☆ 0.退出系统☆"<<endl;cout<<"\t\t\t★☆★☆★☆★☆★☆★☆★"<<endl;cout<<endl<<"请输入您需要操作的序号(0-10):";cin>>m;if(m<0||m>10)cout<<"输入有误!"<<endl;else{switch(m){case 1:will.instu();break;case 2:cout<<"1.根据学号查询 2.根据姓名查询"<<endl<<"请输入:";cin>>n;switch(n){case 1:cout<<"请输入学号(六位)\n";cin>>id;will.outstu1(id);cout<<"\n";break;case 2:cout<<"请输入姓名\n";cin>>name;will.outstu(name);cout<<"\n";break;}break;case 3:cout<<"1.根据学号查询 2.根据姓名查询"<<endl<<"请输入:";cin>>n;switch(n){case 1:cout<<"请输入学号(六位)\n";cin>>id;will.outstu1(id);cout<<"\n";cout<<setw(10)<<"1.高数"<<setw(10)<<"2.大物"<<setw(10)<<"3.英语 "<<setw(14)<<"4.C++"<<setw(10)<<"5.体育"<<endl;cout<<"请输入要修改的课程编号:";cin>>j;will.search1(id,j);break;case 2:cout<<"请输入姓名\n";cin>>name;will.outstu(name);cout<<"\n";cout<<setw(10)<<"1.高数"<<setw(10)<<"2.大物"<<setw(10)<<"3.英语"<<setw(14)<<"4.C++"<<setw(10)<<"5.体育"<<endl;cout<<"请输入课程编号:";cin>>j;will.search(name,j);break;}break;case 4:cout<<"1.根据学号删除 2.根据姓名删除"<<endl<<"请输入:";cin>>n;switch(n){case 1:cout<<"请输入学号(六位)\n";cin>>id;will.outstu1(id);will.delstu1(id);break;case 2:cout<<"请输入姓名\n";cin>>name;will.outstu(name);will.delstu(name);break;}break;case 5:will.think();break;case 6:cout<<"1.根据学号查询 2.根据姓名查询"<<endl <<"请输入:";cin>>n;switch(n){case 1:cout<<"请输入学号(六位):\n";cin>>id;will.outsum1(id);break;case 2:cout<<"请输入姓名\n";cin>>name;will.outsum(name);break;}break;case 7:cout<<setw(6)<<"学号"<<setw(6)<<"姓名"<<setw(6)<<"性别"<<setw(6)<<"高数"<<setw(6)<<"大物"<<setw(6)<<"英语"<<setw(6)<<"C++"<<setw(6)<<"体育"<<setw(10)<<"总成绩"<<setw(10)<<"平均成绩"<<"\n";will.scanall();break;case 8:cout<<"请输入文件名:"<<endl;cin>>file;cout<<"请输入班级名称:"<<endl;cin>>classname;output.open(file);p = will.first;output<<classname<<"成绩单"<<endl<<setw(6)<<"学号"<<setw(6)<<"姓名"<<setw(6)<<"性别"<<setw(6)<<"高数"<<setw(6)<<"大物"<<setw(6)<<"英语"<<setw(6)<<"C++"<<setw(6)<<"体育"<<setw(10)<<"总成绩"<<setw(10)<<"平均成绩"<<endl;for(;p!=NULL;p=p->next)output<<setw(6)<<p->outid()<<setw(6)<<p->outname()<<setw(6)<<p->outsex()<<setw(6)<<p->outgrade(0)<<setw(6)<<p->outgrade(1)<<setw(6)<<p->outgrade(2)<<setw(6)<<p->outgrade(3)<<setw(6)<<p->outgrade(4)<<setw(10)<<p->outsum()<<setw(10)<<p->outav()<<endl;output.close();break;case 9:p=will.first;for(i=0;i<20&&p!=NULL;i++,p=p->next){for (j=0;j<20;j++)stu[i].id[j]=p->id[j];for(j=0;j<10;j++)stu[i].name[j]=p->name[j];for(j=0;j<10;j++)stu[i].sex[j]=p->sex[j];stu[i].sumsum=p->outsum();stu[i].average=p->outav();}for(n=0;n<i-1;n++)for(j=1;j<i;j++){if(stu[n].sumsum<stu[j].sumsum){stutemp=stu[j];stu[j]=stu[n];stu[n]=stutemp;}}cout<<setw(8)<<"学号"<<setw(8)<<"姓名"<<setw(6)<<"性别"<<setw(8)<<"总成绩"<<setw(10)<<"平均成绩"<<"\n";for (j=0;j<i;j++)cout<<setw(8)<<stu[j].id<<setw(8)<<stu[j].name<<setw(6)<<stu[j].sex<<setw( 8)<<stu[j].sumsum<<setw(10)<<stu[j].average<<endl;break;case 10:p=will.first;for(i=0;i<20&&p!=NULL;i++,p=p->next){for(j=0;j<20;j++){stu[i].id[j]=p->id[j];}for(j=0;j<10;j++){stu[i].name[j]=p->name[j];}for(j=0;j<10;j++){stu[i].sex[j]=p->sex[j];}stu[i].sumsum=p->outsum();stu[i].average=p->outav();for(j=0;j<5;j++)stu[i].grade[j]=p->grade[j];}for(n=0;n<i-1;n++)for(j=1;j<i;j++){if(stu[n].id>stu[j].id){stutemp=stu[j];stu[j]=stu[n];stu[n]=stutemp;}}cout<<setw(6)<<"学号"<<setw(6)<<"姓名"<<setw(6)<<"性别"<<setw(6)<<"高数"<<setw(6)<<"大物"<<setw(6)<<"英语"<<setw(6)<<"C++"<<setw(6)<<"体育"<<setw(10)<<"总成绩"<<setw(10)<<"平均成绩"<<endl;for(j=0;j<i;j++)cout<<setw(6)<<stu[j].id<<setw(6)<<stu[j].name<<setw(6)<<stu[j].sex<<setw( 6)<<stu[j].grade[0]<<setw(6)<<stu[j].grade[1]<<setw(6)<<stu[j].grade[2]<<setw( 6)<<stu[j].grade[3]<<setw(6)<<stu[j].grade[4]<<setw(10)<<stu[j].sumsum<<setw(10) <<stu[j].average<<endl;cout<<"\n 输入1.将上述信息保存成文件; 输入0:返回"<<endl;cin>>m;if(m==1){cout<<"请输入文件名:"<<endl;cin>>file;cout<<"请输入班级名称:"<<endl;cin>>classname;output.open(file);output<<classname<<"成绩单"<<endl<<setw(6)<<"学号"<<setw(6)<<"姓名"<<setw(6)<<"性别"<<setw(6)<<"高数"<<setw(6)<<"大物"<<setw(6)<<"英语"<<setw(6)<<"C++"<<setw(6)<<"体育"<<setw(10)<<"总成绩"<<setw(10)<<"平均成绩"<<endl;for(j=0;j<i;j++)output<<setw(6)<<stu[j].id<<setw(6)<<stu[j].name<<setw(6)<<stu[j].sex<<set w(6)<<stu[j].grade[0]<<setw(6)<<stu[j].grade[1]<<setw(6)<<stu[j].grade[2]<<set w(6)<<stu[j].grade[3]<<setw(6)<<stu[j].grade[4]<<setw(10)<<s tu[j].sumsum<<setw(10) <<stu[j].average<<endl;output.close();}default:break;}}cout<<"\n 输入1: 继续; 输入0: 退出\n";cin>>m;}while(m==1);}六、实践心得1、负责人:谢稳江为期两周的C++课程设计即将画上句点,回想这两周为了更好地完成任务所做的点点滴滴,心中感触颇多。