学生成绩管理系统VC
学生成绩管理系统程序分析

学生成绩管理分析系统设计报告本次作业的任务是设计一个学生成绩管理分析系统,通过此次设计任务达到基本掌握面向过程程序设计的基本思路和方法,熟练使用C语言的知识和技能来解决简单的程序设计问题。
一、需求分析1.功能需求为了实现学生成绩的管理与分析,需要输入学生的基本信息和学习信息,要保证信息的准确性,需要提供包含添加、删除等修改功能,在此基础上,提供统计与分析手段。
因此,通过对需求的分析,本程序设计的功能需求如下:a)信息输入b)信息显示c)信息修改d)信息分析2. 系统需求根据任务要求,实现学生成绩的管理与分析需要使用标准C语言进行编程;由于本程序满足任务要求的功能需求计算简单,信息的显示均为文本类型,且无通讯方面的需求,因此占用计算机的资源较少。
本程序的数据量大小取决于管理学生数量的多少,根据中国各高校情况分析,在校学生少则数百人,多则数万人,而每一名学生记录仅需要数十字节,因此数据的存取量需求最大不会超过10GB。
综上所述,本程序对系统的需求,目前一台普通计算机即可满足使用。
本程序设计拟采用VC 编制,在Windows 2000操作系统下开发实现。
二、总体设计本程序设计采用模块化设计,每一个模块实现一项功能。
按照不同的功能对学生成绩管理分析系统进行模块划分,其总体设计如下:数据录入模块。
每个学生的基本信息和成绩用一个结构体来表示,称为一条记录,可以增加或者删除记录。
为简化问题,能对学生的总成绩进行排序,这里约定相同系别的学生所选科目的数量一致,不同系别的学生所选科目可以不同。
数据查询模块。
对已经录入的学生基本信息和成绩进行查询,可以查询单个学生的基本信息和成绩,比如通过学号、姓名等关键字查询,也可以查询某类数据,比如通过系别关键字查询该系所有学生的资料、通过科目名称查询参加该科考试的所有学生的成绩。
数据修改模块。
对学生基本信息或成绩进行修改,并保存记录。
数据分析模块。
包括对每系或每班的单科成绩的分析,如求平均成绩、及格率、优秀率等;对选修某科的所有学生成绩进行分析,包括求平均分、最高分、最低分等;对同一学期每个班的学生总成绩进行排序。
学生综合测评系统

学生综合测评系统 Company number:【WTUT-WT88Y-W8BBGB-BWYTT-19998】课程设计报告课程名称 C语言程序设计课题名称学生综合测评系统专业班级学号姓名指导教师2012年 1 月2 日湖南工程学院课程设计任务书课程名称C语言程序设计课题学生综合测评系统专业班级学生姓名学号指导老师审批任务书下达日期 2012年 12 月 25日任务完成日期 2013年 1 月 2 日一、设计内容与设计要求1.设计内容:课题十:学生综合测评系统一、问题描述:每个学生的信息为:学号、姓名、性别、家庭住址、联系电话、语文、数学、外语三门单科成绩、考试平均成绩、考试名次、同学互评分、品德成绩、任课教师评分、综合测评总分、综合测评名次。
考试平均成绩、同学互评分、品德成绩、任课教师评分分别占综合测评总分的60%,10%,10%,20%。
二、功能描述:A、学生信息处理(1) 输入学生信息、学号、姓名、性别、家庭住址、联系电话,按学号以小到大的顺序存入文件中。
提示:学生信息可先输入到数组中,排序后可写到文件中。
(2) 插入(修改)同学信息:提示:先输入将插入的同学信息,然后再打开源文件并建立新文件,把源文件和输入的信息合并到新文件中(保持按学号有序)若存在该同学则将新记录内容替换源内容,(3) 删除同学信息:提示:输入将删除同学号,读出该同学信息,要求对此进行确认,以决定是否删除将删除后的信息写到文件中。
(4) 浏览学生信息:提示:打开文件,显示该文件的学生信息。
B、学生数据处理:(1) 按考试科目录入学生成绩并且按公式:考试成绩=(语文+数学+外语)/3 计算考试成绩,并计算考试名次,提示:先把学生信息读入数组,然后按提示输入每科成绩,计算考试成绩,求出名次,最后把学生记录写入一个文件中。
(2) 学生测评数据输入并计算综合测评总分及名次。
提示:综合测评总分=(考试成绩)*+(同学互评分)*+品德成绩*+任课老师评分*。
学生成绩管理系统数据流图

.3.3.1创建实体关系图(1)在需求收集的过程中,要求客户列出应用软件或业务过程涉及到的"事物",将其演化成数据对象;(2)一次考虑一个对象,分析员和客户定义这个对象和其他对象之间是否存在连接;(3)如果存在连接,应创建一个或多个关系;(4)对每一个关系,确定其关联类型;(5)重复步骤(2)到步骤(4),直到定义了所有关系。
(6)定义每个实体的属性;(7)形式化并复审实体关系图;(8)重复步骤(1)到(7),直到数据建模完成。
举例分析:*实体:学生、课程、成绩。
*实体属性定义:学生:学号、姓名、性别、出生日期、入学年月课程:课程编号、课程名称、课程学分、课程描述成绩:学号、课程编号、分数、考核日期*实体关系图:首先分析"学生成绩管理系统"的用户要求,找出该系统应该包括的实体。
显然,学生、课程和成绩都是系统的实体,并且可以初步定义它们的属性(见上)。
教务人员虽然是系统的用户,但其信息与系统处理无关,因此不用作为实体。
那么,学生的选课信息是否需要成为实体呢?由于成绩信息包含了选课信息,因此选课信息不用单独记录。
最终,确定系统的实体是学生、课程和成绩。
接着,我们分析这些实体之间的关联关系。
从实际情况得知,一个学生可以选多门课程,一门课程也可以有多个学生选修,但每个学生选一门课程必须有一个成绩。
根据上述分析,我们得到如图所示的实体关系图。
3.3.3.2创建数据流模型通常,数据流图是分层绘制的,整个过程反映了自顶向下进行功能分解和细化的分析过程。
顶层(也称第0层)DFD用于表示系统的开发范围,以及该系统与周围环境的数据交换关系;最底层DFD代表了那些不可进一步分解的"原子加工";中间层DFD是对上一层父图的细化,其中的每一个加工可以继续细化,中间层次的多少由系统的复杂程度决定。
(1)第0层DFD将整个系统表示成一个加工;(2)确定并标记主要的输入和输出;(3)分离出下一层中的加工、数据对象和存储,并对其进行细化,一次细化一个加工;(4)标记所有加工和箭头;(5)重复步骤(3)和(4),直到所有的加工只执行一个简单的操作,可以很容易地用程序实现。
VC c语言 各种程序代码

Vc实现二叉树遍历,学生成绩管理系统,调用系统程序,对学生成绩冒泡排序,选择排序等代码,能运行二叉树#include "stdafx.h"#include <iostream.h>struct BinTreeNode{char data;struct BinTreeNode *left,*right;};class BinTree{public:BinTreeNode *root;void BinTree::PreOrder(BinTreeNode *t){if(t!=NULL&&t->data!='\0'){cout<<t->data<<" ";PreOrder(t->left);PreOrder(t->right);}}void BinTree::InOrder(BinTreeNode *t){if(t!=NULL&&t->data!='\0'){InOrder(t->left);cout<<t->data<<" ";InOrder(t->right);}}void BinTree::PostOrder(BinTreeNode *t){if(t!=NULL&&t->data!='\0'){PostOrder(t->left);PostOrder(t->right);cout<<t->data<<" ";}}};int main(){BinTree k;char ch[30];cout<<"请输入需要转换的字符串:";cin>>ch;int i=0;int j=0;BinTreeNode *s ,*root;BinTreeNode *q[100];while (ch[i]!='\0'){if (ch[i]=='#') i++;else{s=new BinTreeNode;s->data=ch[i];s->left=NULL;s->right=NULL;j=i+1;if (i==0){root=s;}else{if (q[j/2]!=NULL){if (j%2==0) q[j/2]->left=s;else q[j/2]->right=s;}}q[j]=s;i++;}}cout<<"Fine!"<<endl;cout<<"先根:"<<endl;k.PreOrder(root);cout<<endl<<"中根:"<<endl;k.InOrder(root);cout<<endl<<"后根:"<<endl;k.PostOrder(root);cout<<endl;return 0;};二叉树生成与遍历二叉树生成与遍历完整代码:// Exec.cpp : Defines the entry point for the console application. //#include "stdafx.h"#include <iostream.h>struct BinTreeNode{public:char data;BinTreeNode *left,*right;};void pre(BinTreeNode *ppp){if(ppp!=NULL&&ppp->data!='\0'){cout<<ppp->data<<" ";pre(ppp->left);pre(ppp->right);}}void mid(BinTreeNode *ppp){if(ppp!=NULL&&ppp->data!='\0'){ mid(ppp->left);cout<<ppp->data<<" ";mid(ppp->right);}}void post(BinTreeNode *ppp){if(ppp!=NULL&&ppp->data!='\0'){ post(ppp->left);post(ppp->right);cout<<ppp->data<<" ";}}int main(int argc, char* argv[]){printf("Hello World!\n");char ch[100];cout<<"请输入二叉树的完整字符串序列(例如:ABCD#EF):";cin>>ch;BinTreeNode *q[100];BinTreeNode *s,*root;for(int j=0;j<100;j++) q[j]=NULL;int i=0;while(ch[i]!='\0'){if(ch[i]=='#') i++;else {s=new BinTreeNode;s->data=ch[i];s->left=NULL;s->right=NULL;j=i+1;if(i==0) root=s;else{if (q[j/2]!=NULL){if(j%2==0) q[j/2]->left=s;else q[j/2]->right=s;}}q[j]=s;i++;}}cout<<"Fine!"<<endl;cout<<"先根:"<<endl;pre(root);cout<<endl<<"中根:"<<endl;mid(root);cout<<endl<<"后根:"<<endl;post(root);cout<<endl;return 0;}学生成绩管理系统// T2.cpp : Defines the entry point for the console application. //#include "stdafx.h"#include <String.h>#include <iostream.h>struct Student{char id[10];char name[10];char sex[10];char grade[10];char tel[20];char age[10];};class SeqList{public:Student data[20];int length;SeqList(){ length=0;}bool IsListEmpty(){return length==0;}void ListDelete(char ID[]){int j=0;for(int i=0;i<length;i++){if(strcmp(data[i].id,ID)==0)j=i+1;}if(j==0) cout<<"没有该学生的信息!"<<endl;else{for(int k=j;k<=length-1;k++){data[j-1]=data[j];}}length--;};void ListInsert(Student x){for(int i=length-1;i>=0;i--)data[i+1]=data[i];data[0]=x;length++;};void Showall(){for(int d=0;d<length;d++){cout<<" id "<<data[d].id<<" name "<<data[d].name<<" sex "<<data[d].sex<<" grade "<<data[d].grade<<" tel "<<data[d].tel<<" age "<<data[d].age<<endl;}}};int main(int argc, char* argv[]){int n;printf("Hello World!\n");SeqList Q;while(n!=0){cout<<"1——信息浏览"<<endl;cout<<"2——插入信息"<<endl;cout<<"3——删除信息"<<endl;cout<<"0——退出程序"<<endl;cin>>n;switch(n){case 1:cout<<"数据库中没有信息"<<endl;Q.Showall();break;case 2:cout<<"数据库中的信息"<<endl;Student x;cout<<"ID="<<endl;cin>>x.id;cout<<"NAME="<<endl;cin>>;cout<<"SEX="<<endl;cin>>x.sex;cout<<"GRADE="<<endl;cin>>x.grade;cout<<"TEL="<<endl;cin>>x.tel;cout<<"AGE="<<endl;cin>>x.age;Q.ListInsert(x);break;case 3:char Y[10];cout<<"ID="<<endl;cin>>Y;Q.ListDelete(Y);break;Q.ListDelete(Y);break;}}return 0;};学生管理系统(单链表)学生管理系统(单链表)完整代码#include "stdafx.h"#include <String.h>#include <iostream.h>struct Student{char id[10];char name[10];char sex[10];char grade [10];};struct LNode{Student stu;Student data;LNode*next;};class LinkList{public:LNode*current,*previous;LNode*head;int length;LinkList(){head= new LNode();head->next=NULL;length=0;}bool IsListEmpty(){return length==0;}void LinkList::InsertList(Student x){LNode*s=new LNode();s->stu=x;s->next=head->next;head->next=s;length++;}void LinkList::DeleteList(char ID[]){ previous=head;current=head->next;for(int i=0;i<length&¤t!=NULL;i++){if(strcmp(current->stu.id,ID)==0){previous->next=current->next;length=length-1;return;}previous=current;current=current->next;}cout<<"ID="<<ID<<"的学生没有找到,可能是不存在!";}void ShowAll(){current=head->next;for(int i=0;i<length;i++){cout<<"ID="<<current->stu.id<<"\tNAME="<<current->stu.n ame<<"\tSEX="<<current->stu.sex<<"\tGRADE="<<current->stu .grade<<endl;current=current->next;}}};int main(int argc, char* argv[]){ LinkList k;int x=1;while(x!=0){printf("请输入以下选项:\n"); printf("1:信息浏览\n"); printf("2:插入信息\n"); printf("3:删除信息\n"); printf("0:退出程序\n");cin>>x;switch(x){case 1:k.ShowAll();break;case 2:Student N;cout<<"ID="<<endl;cin>>N.id;cout<<"NAME="<<endl;cin>>;cout<<"SEX="<<endl;cin>>N.sex;cout<<"GRADE="<<endl;cin>>N.grade;k.InsertList(N);break;case 3:char delID[10];cout<<"请输入想要删除数据项的ID号码"<<endl;cin>>delID;k.DeleteList(delID);break;case 0:break;}};return 0;}调用系统程序// 实验五.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream.h>#include <windows.h>void child_process(char command[]){PROCESS_INFORMATION piProcInfo;STARTUPINFO Info;Info.cb=sizeof(STARTUPINFO);Info.lpDesktop=NULL;Info.lpTitle=NULL;Info.cbReserved2=0;BOOLbSuccess=CreateProcess(NULL,command,NULL,NULL,false,NULL ,NULL,NULL,&Info,&piProcInfo);if(! bSuccess){cout<<"命令错误"<<endl;}else{cout<<command<<"进程创建成功,进程号是:"<<piProcInfo.dwProcessId<<endl;}}void main(){ int x=1;while(x!=0){printf("——————————\n");printf("0——退出\n");printf("1——系统信息\n");printf("2——资源管理器\n"); printf("3——任务管理器\n"); printf("4——控制面板\n"); printf("——————————\n"); cin>>x;switch(x){case 0:break;case 1:child_process("winmsd");break;case 2:child_process("explorer");break;case 3:child_process("taskmgr");break;case 4:child_process("control");break;}} }。
基于VC++的学生在线考试系统的设计与实现

基于VC++的学生在线考试系统的设计与实现作者:岳俊华李岩来源:《价值工程》2014年第10期摘要:学生在线考试系统可取代传统考试方式。
其优点主要体现在:出卷方便快捷、阅卷准确快速、成绩分析统计科学直观。
本系统基于VC++编写,使用SQL Server 2005数据库,运用ADO技术连接,满足在线考试的要求。
Abstract: The students online examination system can replace the traditional examination way. Its advantage lies in: convenient test paper setting, quick and accurate paper inspection, and scientific and intuitive result analysis and statistics. Based on VC++, this system uses SQL Server 2005 database, and uses ADO technology to connect, to meet the requirements of the online test.关键词: C++;在线考试系统;SQL Server 2005;ADOKey words: C++;online examination system;SQL Server 2005;ADO中图分类号:TP311 文献标识码:A 文章编号:1006-4311(2014)10-0214-020 引言教学中很重要的一个环节就是在线考试系统,同时它也是最难实现的环节。
在我国目前学校与社会上的各种考试大都采用传统的考试方式,在此方式下,组织一次考试至少要经过五个步骤,即人工出题、考生考试、人工阅卷、成绩评估和试卷分析。
显然,随着考试类型的不断增加及考试要求的不断提高,教师的工作量将会越来越大,并且其工作将是一件十分烦琐和非常容易出错的事情,可以说传统的考试方式已经不能适应现代考试的需要。
c语言课程设计学生成绩管理系统总结

c语言课程设计学生成绩管理系统总结
以下是一篇符合您要求的文档:
在这次C语言课程设计中,我们开发了一个学生成绩管理系统。
这个系统的主要目标是帮助教师更方便地管理学生成绩,包括输入、存储、查询和修改成绩等功能。
在设计这个系统时,我们首先分析了需求,明确了系统的基本功能和用户群体。
我们选择了合适的开发工具和技术,包括C语言和文件操作。
在系统开发过程中,我们遇到了许多问题,如内存管理、输入验证和算法优化等。
通过查阅资料和团队协作,我们逐一解决了这些问题。
在系统测试阶段,我们对各个功能进行了详细的测试,包括正常情况和异常情况。
测试结果表明,系统基本符合设计要求,但在一些细节方面仍需改进。
例如,在输入成绩时,系统没有对成绩的有效性进行验证,这可能导致错误的数据被存储。
这次课程设计让我们更深入地了解了C语言和软件开发的过程。
通过实际操作,我们学会了如何分析需求、设计系统、解决问题和测试软件等方面的技能。
虽然系统还存在一些问题,但这次课程设计对我们来说是一次非常有价值的实践经验。
考勤管理系统C语言课程设计

HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGYC语言程序设计课程设计报告课设题目:考勤管理系统专业:自动化班级: xxxxx姓名: xxxx成绩: xxxx目录1.课程设计目的 (3)2.需求分析 (3)2.1要求 (3)2.2任务描述 (4)2.3运行环境 (4)2.4开发工具 (4)3.总体设计 (4)3.1系统流设计 (4)3.2系统模块设计 (5)4.详细设计 (6)4.1数据结构设计 (6)4.2模块接口设计 (6)4.3 以下是几个主要模块的流程图: (7)5.运行结果 (10)5.1主菜单界面: (11)5.2信息录入界面: (12)5.3信息浏览界面: (13)5.4 信息查询界面: (15)5.5信息修改界面: (15)6.程序调试与测试 (17)6.1程序调试 (17)6.2程序测试 (19)7.问题与不足 (19)8.建议 (19)9.编程体会 (19)10.程序源代码: (20)11.参考文献 (38)12.用户使用手册 (38)1.课程设计目的1)通过课程设计,加深对结构化程序设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
2)通过课程设计,进一步掌握C语言中重要的数据结构。
掌握并熟练运用指针、链表、结构体、文件等数据结构。
3)通过课程设计,提高程序开发能力,能运用合理的控制流编写清晰高效的程序。
4)通过课程设计,培养C语言知识运用和自学能力,真正的把课堂上获得的知识运用起来,培养自己对程序编写的兴趣,并能独立设计和实现一个小型系统。
5)通过课程设计,加强了自己的程序分析能力。
2.需求分析2.1要求1)遵循软件开发过程的基本规范;能灵活应用,初步具备运用C程序解决实际问题的能力。
2)运用结构化程序设计方法,按照课程设计题目要求,完成包括需求分析、数据结构设计、概要设计、详细设计、编写代码、调试和测试C程序等过程。
3)学会利用数组、结构体、链表进行相关信息表示。
C语言程序设计项目实训指导书

C语言程序设计项目实训指导书指导教师:刘洁计算机技术系二〇一五年九月内容简介本实训项目为C语言程序项目开发实训,适用于计算机系各相关专业,在第一学年第一学期开设。
学生自己动手进行需求分析、项目设计、编码及测试,采用VC++6.0进行C程序的开发,以小组的形式完成。
通过综合实训培养学生综合运用所学的基础理论、基础知识、基本技能进行分析和解决实际问题的能力,加深对所学知识的理解和掌握,使学生受到C程序系统设计开发的综合训练,了解和掌握C应用程序开发基本模式,增强团队协作能力,提高职业技能和职业素质。
目录一.实训的目的与要求: (4)(一)实训目的 (4)(二)实训要求 (4)1、总体要求 (4)2、实训前的准备工作 (5)3、学生分组要求 (5)4、实训结果要求 (5)二.实训的前期准备(设备、用具与软件环境) (5)三.实训的题目 (6)四.实训的设计进度安排 (11)五.主要参考文献及资源 (11)一.实训的目的与要求:(一)实训目的课程设计环节是高职高专院校非常重要的一个教学环节,是学完一门课后应用本课知识及以前的知识积累而进行的综合性、开放性的训练。
通过课程设计,不仅能够使学生得到系统的技能训练,巩固和加强所学到的专业理论知识,而且能够培养学生工程意识、创新能力及团队精神等综合素质,培养学生的设计能力和解决实际问题的能力。
正如一句行话所说“C语言入门容易得道难”,对于多数学生来说,在学习了C语言之后,除了应付全国计算机等级考试之外,不知还有其他用途,对丰富的C函数所知甚少,因而对C语言兴趣不大。
因此,本课程设计环节从算法、数据结构、C语言丰富的函数以及程序设计等方面进行了精心考虑和组织,追求典型性、完整性、实用性和趣味性,希望不仅能够提高学生学习C语言的兴趣,更为开发程序打下坚实的基础。
(1) 加深对讲授内容的理解。
C语言程序设计课程中的一些语法规则和阶段性知识,只靠课堂讲授既枯燥无味又难以记忆,但它们都很重要,要想熟练掌握,必须经过大量实践加深对它们的理解与把握。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include <stdio.h>#include <conio.h>#include <windows.h>/*#include <bios.h>*/#include <dos.h>#include <io.h>#include <stdlib.h>#include <stdio.h>#define VIDEO_INT 0x10#define STUSIZE 40 /* 假定处理的学生不超过40人*/struct student{int stunum; /* 学号*/char stuname[10]; /* 学生姓名*/float stuscore[5]; /* 3门成绩、平均成绩、总成绩*/}stu[STUSIZE]; /* 定义学生数组*/int stunum=0; /* 用来记录当前学生记录数*/void StuCover(); /* 项目封面函数声明*/void MainMenu(); /* 主菜单函数声明*/void EditMenu(); /* 编辑子菜单函数声明*/void DispMenu(); /* 显示子菜单函数声明*/void CompMenu(); /* 计算子菜单函数声明*/void SortMenu(); /* 排序子菜单函数声明*/void Open(struct student stu[],int *size); /* 打开文件子菜单函数声明*/void Save(struct student stu[],int *size); /* 保存文件函数声明*/int Add(struct student stu[],int *size); /* 增加学生记录函数声明*/int Del(struct student stu[],int *stusize); /* 删除学生记录函数声明*/int Modify(struct student stu[],int *stusize); /* 修改学生记录函数声明*/int DispOne(struct student stu[],int *stusize); /* 查看一个记录函数声明*/int DispAll(struct student stu[],int size); /* 显示全部记录函数声明*/void AsceSort(struct student stu[],int stusize); /* 按升序排序函数声明*/void DropSort(struct student stu[],int stusize); /* 按降序排序函数声明*/void NotElig(struct student stu[],int stusize); /* 查找不及格记录函数声明*/void CompSum(struct student stu[],int stusize); /* 计算总成绩和平均成绩函数声明*/void SearchMax(struct student stu[],int stusize); /* 查找最高成绩函数声明*/void SearchMin(struct student stu[],int stusize); /* 查找最低成绩函数声明*/void Explain(); /* 程序说明函数声明*/void Quit(int); /* 退出函数声明*/void gotoxy(int x,int y); /* 光标定位函数声明*/int main(){int choose,editnum,dispnum,compnum,sortnum; /* 定义5个输入变量*/system("cls");StuCover();getch();while(1) /* 外循环开始*/{MainMenu(); /* 调用主菜单函数*/printf("\t\t请输入序号:");scanf("%d",&choose);switch(choose) /* 主菜单的switch开始*/{case 1:Open(stu,&stunum);break;case 2:Save(stu,&stunum);break;case 3:do /*内循环1开始*/{EditMenu(); /* 调用编辑子菜单函数*/printf("\t\t请输入序号:");scanf("%d",&editnum);switch(editnum) /*编辑子菜单switch开始*/{case 1:Add(stu,&stunum);break;case 2:Del(stu,&stunum);break;case 3:Modify(stu,&stunum);break;case 0:Quit(0);break;} /* 编辑子菜单switch结束*/ }while(editnum!=0); /*内循环1结束*/break;case 4:do /* 内循环2开始*/{DispMenu(); /* 调用查看子菜单函数*/printf("\t\t请输入序号:");scanf("%d",&dispnum);switch(dispnum) /*显示子菜单switch开始*/{case 1:DispOne(stu,&stunum);break;case 2:DispAll(stu,stunum);break;case 3:do /* 内循环3开始*/{SortMenu();printf("\t\t请输入序号:");scanf("%d",&sortnum);switch(sortnum) /* 排序子菜单switch开始*/{case 1:AsceSort(stu,stunum);break;case 2:DropSort(stu,stunum);break;case 0:Quit(0);break;} /* 排序子菜单switch结束*/}while(sortnum!=0); /* 内循环3结束*/break;case 4:NotElig(stu,stunum);break;case 0:Quit(0);break;} /* 显示子菜单switch结束*/}while(dispnum!=0); /* 内循环2结束*/break;case 5:do /* 内循环4开始*/{CompMenu(); /* 调用计算子菜单函数*/printf("\t\t请输入序号:");scanf("%d",&compnum);switch(compnum) /*计算子菜单switch开始*/{case 1:CompSum(stu,stunum);break;case 2:SearchMax(stu,stunum);break;case 3:SearchMin(stu,stunum);break;case 0:Quit(0);break;} /*计算子菜单switch结束*/}while(compnum!=0); /* 内循环4结束*/break;case 6:Explain();break; /* 程序说明*/case 0:Quit(1);break;} /* 主菜单的switch结束*/ }return 0; /* 外循环结束*/}void gotoxy(int x,int y){COORD c;c.X=x-1;c.Y=y-1;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);}void Quit(int flag) /*退出函数*/{if(flag==1){system("cls");printf("\n\n\n\n\n\n\t\t\t操作结束,退出系统!");getch();system("cls");exit(0); /*退出程序,返回到操作系统库函数*/ }elseif(flag==0) /*返回上级菜单*/{system("cls");printf("\n\n\n\n\n\n\t\t\t操作结束,返回上级菜单!");getch();system("cls");}}void Explain() /*程序说明*/{system("cls");gotoxy(10,3); /* 光标定位函数*/printf("这是一个教学程序。
它以开发班级学生成绩管理系统为主要项目,");gotoxy(10,5);printf("旨在通过简单学生成绩管理系统软件的开发,使读者了解并掌握用C语");gotoxy(10,7);printf("言开发程序的方法与技巧。
");gotoxy(10,9);printf("该项目由15个任务来完成,将C语言基本知识与理论溶入到任务中!");gotoxy(10,11);printf("完成15个任务后就完成整个项目的设计。
通过任务驱动和项目导向教学,");gotoxy(10,13);printf("最终实现教学目的,达到培养目标!");gotoxy(10,15);printf("该项目实施贯穿在整个教学过程中,它将重点与难点分散在各个任务");gotoxy(10,17);printf("中,达到循序渐进,逐个突破的目的,教学最后将安排一定的时间归纳汇");gotoxy(10,19);printf("总。
");getch();}void StuCover() /* 项目封面函数*/{system("cls"); /* 执行DOS清屏命令函数*/printf("\n\n\n");printf("\t\t班级学生成绩管理系统\n\n");printf("\t\t 版本号:1.0\n\n");printf("\n\n\n");printf("\t\t 2011年9月\n\n");printf("\t\t 章国华软件工作室\n");}void MainMenu() /* 项目主菜单函数*/{int n;system("cls");printf("\n\n\n");printf(" |* * * * * 学生成绩管理系统* * * * *|\n");printf(" |....................................|\n");printf(" | 请选择菜单序号(0~6) |\n");printf(" |....................................|\n");printf(" | 2----保存文件|\n");printf(" | 3----编辑数据|\n");printf(" | 4----显示数据|\n");printf(" | 5----数据计算|\n");printf(" | 6----程序说明|\n");printf(" | 0----退出系统|\n");printf(" |....................................|\n");printf("\t\t请选择序号:");scanf("%d",&n);printf("您选择了第%d项!\n",n);}void DispMenu() /* 项目主菜单函数*/ {int n;system("cls");printf("\n\n\n");printf(" |* * * * * **显示子菜单* * * * *|\n");printf(" |....................................|\n");printf(" | 请选择菜单序号(0~4) |\n");printf(" |....................................|\n");printf(" | 1----查看选定记录|\n");printf(" | 2----显示全部记录|\n");printf(" | 3----显示排序记录|\n");printf(" | 4----显示不及格记录|\n");printf(" | 0----返回上级菜单|\n");printf(" |....................................|\n");printf("\t\t请选择序号:");scanf("%d",&n);printf("您选择了第%d项!\n",n);}void EditMenu() /* 项目编辑子菜单函数*/ {int n;system("cls");printf("\n\n\n");printf(" |* * * * * * * 编辑子菜单* * * * * *|\n");printf(" |....................................|\n");printf(" | 请选择菜单序号(0~3) |\n");printf(" |....................................|\n");printf(" | 2----删除记录|\n");printf(" | 3----修改记录|\n");printf(" | 0----返回上级菜单|\n");printf(" |....................................|\n");printf("\t\t请选择序号:");scanf("%d",&n);printf("您选择了第%d项!\n",n);}void CompMenu() /* 项目计算子菜单函数*/ {int n;system("cls");printf("\n\n\n");printf(" |* * * * * * * 计算子菜单* * * * * *|\n");printf(" |....................................|\n");printf(" | 请选择菜单序号(0~3) |\n");printf(" |....................................|\n");printf(" | 1----计算总成绩和平均成绩|\n");printf(" | 2----计算最高分(平均分)|\n");printf(" | 3----计算最低分(平均分)|\n");printf(" | 0----返回上级菜单|\n");printf(" |....................................|\n");printf("\t\t请选择序号:");scanf("%d",&n);printf("您选择了第%d项!\n",n);}void SortMenu() /* 项目排序子菜单函数*/ {int n;system("cls");printf("\n\n\n");printf(" |* * * * * * * 排序子菜单* * * * * *|\n");printf(" |....................................|\n");printf(" | 请选择菜单序号(0~2) |\n");printf(" |....................................|\n");printf(" | 1----按升序排序|\n");printf(" | 2----按降序排序|\n");printf(" | 0----返回上级菜单|\n");printf(" |....................................|\n");printf("\t\t请选择序号:");scanf("%d",&n);printf("您选择了第%d项!\n",n);}void SearchMax(struct student stu[],int stusize) /* 查找最高分指针访问函数*/ {float max=stu[0].stuscore[4];int i;system("cls");for(i=1;i<stusize;i++){if(max<stu[i].stuscore[4]){max=stu[i].stuscore[4];}}gotoxy(20,5);printf("成绩最高的是:%.1f\n",max);gotoxy(20,10);printf("查找最高分成功,按任意键返回上级菜单!");getch();}void SearchMin(struct student stu[],int stusize) /* 查找最低分指针访问函数*/ {float min=stu[0].stuscore[4];int i;system("cls");for(i=1;i<stusize;i++){if(min>stu[i].stuscore[4]){min=stu[i].stuscore[4];}}gotoxy(20,5);printf("成绩最高的是:%.1f\n",min);gotoxy(20,10);printf("查找最低分成功,按任意键返回上级菜单!");getch();}void NotElig(struct student stu[],int stusize) /* 查找不合格学生成绩指针访问函数*/ {int i,flag=0;system("cls");gotoxy(20,5);printf("不合格成绩:");for(i=0;i<stusize;i++){if(stu[i].stuscore[4]<60){printf("%6.1f",stu[i].stuscore[4]);flag=1;}}if(!flag){gotoxy(35,5);printf("没有不合格成绩!");}gotoxy(20,10);printf("查找不及格成绩成功,按任意键返回上级菜单!");getch();}void CompSum(struct student stu[],int stusize) /* 计算总成绩和平均成绩函数声明*/ {int i,j;float sumscore;system("cls");if(stusize<=0){gotoxy(22,5);printf("数组中没有学生记录或文件没有打开,不能计算总成绩和平均成绩!");getch();}else{for(i=0;i<stusize;i++){sumscore=0;for(j=0;j<3;j++){sumscore+=stu[i].stuscore[j];}stu[i].stuscore[3]=sumscore;stu[i].stuscore[4]=sumscore/3.0f;}}gotoxy(20,5);printf("计算总成绩和平均成绩成功,按任意键返回上级菜单!");getch();}void AsceSort(struct student stu[],int stusize) /* 按升序排列指针访问函数*/{int i,j;float temp;float temp_score[STUSIZE],*pf; /*定义一个新数组*/system("cls");pf=temp_score;for(i=0;i<stusize;i++) /*给新数组赋值*/temp_score[i]=stu[i].stuscore[4];for(i=0;i<stusize-1;i++) /*双重循环实现学生成绩按升序排列*/for(j=0;j<stusize-i-1;j++)if(*(pf+j+1)<*(pf+j)){temp=*(pf+j);*(pf+j)=*(pf+j+1);*(pf+j+1)=temp;}gotoxy(5,5);printf("升序排列结果:");for(i=0;i<stusize;i++)printf("%6.1f",*(pf+i));gotoxy(20,10);printf("升序排列成功,按任意键返回上级菜单!");getch();}void DropSort(struct student stu[],int stusize) /* 按降序排列指针访问函数*/{int i,j;float temp;float temp_score[STUSIZE],*pf; /*定义一个新数组*/system("cls");pf=temp_score;for(i=0;i<stusize;i++) /*给新数组赋值*/temp_score[i]=stu[i].stuscore[4];for(i=0;i<stusize-1;i++) /*双重循环实现学生成绩按降序排列*/for(j=0;j<stusize-i-1;j++)if(*(pf+j+1)>*(pf+j)){temp=*(pf+j);*(pf+j)=*(pf+j+1);*(pf+j+1)=temp;}gotoxy(5,5);printf("降序排列结果:");for(i=0;i<stusize;i++)printf("%6.1f",*(pf+i));gotoxy(20,10);printf("降序排列成功,按任意键返回上级菜单!");getch();}int Add(struct student stu[],int *size) /*增加学生记录函数*/{int i,j;int stunum;int number;system("cls");if(*size>=40){ /*判断数组是否装满*/gotoxy(30,2);printf("数组已满,不能再增加记录!");return 0;}else{do{ /*判断输入的增加记录数是否合适*/gotoxy(30,2);printf("请输入增加的记录个数:");scanf("%d",&number);if(number<0||number+*size>=40){gotoxy(30,4);printf("输入增加记录个数错,请重新输入!");}}while(number<0||number+*size>=40);stunum=*size+number;system("cls");gotoxy(33,2);printf("学生信息输入!");for(i=*size;i<stunum;i++) /*增加学生记录*/{gotoxy(15,5);printf("请输入第%d个学生学号:",i+1);gotoxy(15,7);printf("请输入第%d个学生姓名:",i+1);gotoxy(15,9);printf("请输入第1门成绩:");gotoxy(15,11);printf("请输入第2门成绩:");gotoxy(15,13);printf("请输入第3门成绩:");gotoxy(37,5);scanf("%d",&stu[i].stunum);gotoxy(37,7);scanf("%s",&stu[i].stuname);for(j=0;j<3;j++){gotoxy(32,9+j*2);scanf("%f",&stu[i].stuscore[j]);}}if(i==*size){gotoxy(33,4);printf("没有记录输入!");}*size=stunum; /*有指针变量带回学生记录数*/gotoxy(33,15);printf("按任意键返回上级菜单!");getch();return 0;}}int Del(struct student stu[],int *stusize) /*删除学生记录函数*/{int i,k;int loop=0;int number;system("cls");gotoxy(33,2);printf("删除学生记录!\n");if(*stusize<=0) /*判断数组是否空*/ {gotoxy(20,4);printf("数组中没有学生记录或文件没有打开,不能删除记录!"); getch();return 0;}else{do{system("cls");gotoxy(25,2);printf("删除学生记录(不能删除记录请输入-1)!\n");gotoxy(28,4);printf("请输入被删除学生的学号:\n");scanf("%d",&number);if(number==-1){return 0;}for(i=0,k=0;i<*stusize;i++){if(number==stu[i].stunum){loop=1;k=i; /*被删除记录的下标*/break;}}if(loop!=1){gotoxy(25,6);printf("输入学生学号出错,按任意键重新输入!");getch();}}while(loop!=1);}for(i=k;i<*stusize;i++){stu[i]=stu[i+1]; /*删除操作*/}gotoxy(25,6);printf("删除成功,按任意键返回上级菜单!");*stusize=*stusize-1;getch();return 0;}int Modify(struct student stu[],int *stusize) /*修改学生记录函数*/{int i,k;int loop=0; /*学号输入正确标志*/int number;system("cls");gotoxy(33,2);printf("修改学生记录!\n");if(*stusize<=0){gotoxy(20,4);printf("数组中没有学生记录或文件没有打开,不能修改记录!");getch();return 0;}else{do{ /*找出修改学生记录的下标*/ system("cls");gotoxy(25,2);printf("修改学生记录!(不修改记录请输入-1)\n");gotoxy(28,4);printf("请输入被修改学生的学号:");scanf("%d",&number);if(number==-1){return 0;}for(i=0,k=0;i<*stusize;i++){if(number==stu[i].stunum){loop=1;k=i; /*被修改记录的下标*/break;}}if(loop!=1){gotoxy(25,6);printf("输入学生学号出错,按任意键重新输入!");getch();}}while(loop!=1);}system("cls");gotoxy(33,2);printf("修改学生记录!\n");gotoxy(28,4);printf("学号:%d",stu[k].stunum);gotoxy(28,6);printf("姓名:%d",stu[k].stuname);gotoxy(28,8);printf("成绩1:%.1f",stu[k].stuscore[0]);gotoxy(28,10);printf("成绩2:%.1f",stu[k].stuscore[1]);gotoxy(28,12);printf("成绩3:%.1f",stu[k].stuscore[2]);gotoxy(34,4);scanf("%d",&stu[k].stunum);gotoxy(34,6);scanf("%s",&stu[k].stuname);gotoxy(35,8);scanf("%f",&stu[k].stuscore[0]);gotoxy(35,10);scanf("%f",&stu[k].stuscore[1]);gotoxy(35,12);scanf("%f",&stu[k].stuscore[2]);gotoxy(25,14);printf("修改成功,按任意键返回上级菜单!");return 0;}int DispAll(struct student stu[],int size) /*显示全部记录函数*/{int i,j;system("cls");if(size<=0){gotoxy(20,4);printf("数组中没有学生记录或文件没有打开,不能显示记录!");getch();return 0;}else{gotoxy(5,4);printf("学号姓名成绩1成绩2成绩3总成绩平均成绩");for(i=0;i<size;i++){gotoxy(5,6+i);printf("%-5d",stu[i].stunum);printf("%8s",stu[i].stuname);for(j=0;j<5;j++){printf("%10.1f",stu[i].stuscore[j]);}printf("\n");}}gotoxy(28,7+size);printf("按任意键返回上级菜单!");return 0;}int DispOne(struct student stu[],int *stusize) /*显示选定记录函数*/{int i,j,k,loop,number;do{system("cls");gotoxy(25,2);printf("查看学生记录!(不查看记录请输入-1)\n");gotoxy(28,4);printf("请输入被查看学生的学号:");scanf("%d",&number);if(number==-1){return 0;}for(i=0,k=0;i<*stusize;i++){if(number==stu[i].stunum){loop=1;k=i;break;}}if(loop!=1){gotoxy(25,6);printf("输入学生学号出错,按任意键重新输入!");getch();}}while(loop!=1);gotoxy(5,4);printf("学号姓名成绩1成绩2成绩3总成绩平均gotoxy(5,6);printf("%-5d",stu[k].stunum);printf("%8s",stu[k].stuname);for(j=0;j<5;j++){printf("%10.1f",stu[k].stuscore[j]);}printf("\n");gotoxy(28,8);printf("按任意键返回上级菜单!");getch();return 0;}void Open(struct student stu[],int *size) /*打开文件函数*/ {int i=0,m=0;FILE *fp,*fp1;if((fp=fopen("studentscore","rb"))==NULL){fp1=fopen("studentscore","wb+");fclose(fp1);}if((fp=fopen("zhangguohua","rb"))==NULL){fp1=fopen("zhangguohua","wb+");fprintf(fp1,"%d",m);fclose(fp1);}system("cls");if((fp=fopen("studentscore","rb"))==NULL){printf("文件不能正常打开!\n");exit(0);}{while(!feof(fp)){fread(&stu[i],sizeof(struct student),1,fp);i++;}fclose(fp);}gotoxy(25,5);printf("文件打开成功!");*size=i-1;getch(); /*文件中的学生数*/ }void Save(struct student stu[],int *size) /*保存文件函数*/{int i=0;FILE *fp;system("cls");if((fp=fopen("studentscore","wb"))==NULL){printf("文件不能正常打开!\n");exit(0);}else{for(i=0;i<*size;i++){fwrite(&stu[i],sizeof(struct student),1,fp);}fclose(fp);}gotoxy(25,5);printf("促存文件成功,按任意键返回上级菜单!");getch();}/*void gotoxy( int col, int row ){union REGS inregs, outregs;inregs.h.ah = 2;inregs.h.bh = 0;inregs.h.dh = row;inregs.h.dl = col;int86( VIDEO_INT, &inregs, &outregs ); }*/。