当前位置:首页 » 考试成绩 » 设计学生成绩管理系统

设计学生成绩管理系统

发布时间: 2020-11-29 08:19:22

❶ 用C语言设计一个学生成绩管理系统

#include <stdio.h>
#include <string.h>

#include <stdlib.h>
#defineMAX1000

/*定义学生成绩信息结构*/
struct stu
{

char id[8];
char name[8];


(1)设计学生成绩管理系统扩展阅读:

short:修饰int,短整型数据,可省略被修饰的int。(K&R时期引入)

long:修饰int,长整型数据,可省略被修饰的int。(K&R时期引入)

long long:修饰int,超长整型数据,可省略被修饰的int。(C99标准新增)

signed:修饰整型数据,有符号数据类型。(C89标准新增)

unsigned:修饰整型数据,无符号数据类型。(K&R时期引入)

restrict:用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式。(C99标准新增)

复杂类型关键字

struct:结构体声明。(K&R时期引入)

union:联合体声明。(K&R时期引入)

enum:枚举声明。(C89标准新增)

typedef:声明类型别名。(K&R时期引入)

sizeof:得到特定类型或特定类型变量的大小。(K&R时期引入)

inline:内联函数用于取代宏定义,会在任何调用它的地方展开。(C99标准新增)

❷ 学生成绩管理系统的设计与实现

给一个我以前写过的吧,功能应该差不多#include #include #include #include #include #include #include #include #include using namespace std;/*定义学生结构体*/struct Student{ char ID[20]; char Name[20]; float Mark1; float Mark2; float Mark3; float Average;};/*声明学生数组及学生数量*/struct Student students[1000];int num=0; /*求平均值*/float Avg(struct Student stu){ return (stu.Mark1+stu.Mark2+stu.Mark3)/3;} /*通过学号返回数组下标*/int Student_SearchByIndex(char id[]){ int i; for (i=0;i

❸ 设计一个简单的学生成绩管理系统,

我没写,只能和你说说怎么写。
可以由类模板和数组写。
我说说类模板的吧。
定义一个Student类存放学生信息(姓名,初始排名,各科成绩,个人总分);
初始排名由输入顺序排,在计算名字的时候就可以通过冒泡排序。
在里面定义计算总分的函数。
下面定义一个Caozuo类,用学生链表的做。你可以去找下这个例子。
数组的就很简单了,你只要想想。先定义数组(姓名,成绩),总分就是个人每科成绩的和,下面5个函数都可以通过数组遍历实现。如
cout<<"请输入你要查询的学生的名字:"<<endl;
cin>>n;
for(int i=0;i<=Maxsize;i++)
{
if(Student[i].name==n)
Student[i].Print();
}

❹ 用C++设计一个学生成绩管理系统

c++学生成绩管理系统论文--课程设计[日期:2007-01-19] 来源:25175--你我一起舞 作者:未知 阅读:3593 次 [字体:大 中 小] c++学生成绩管理系统论文--课程设计powered by 25175.net

1、 对C++设计的《学生成绩管理系统》总体说明

系统上采用BC31编译器作为开发环境,这个环境是我们在学习C++的平台,这个编译器功能完善,使用方便。我作的这次课程设计是《学生成绩管理系统》,它的主要功能是对学生的成绩进行修改和管理,而且方便快速,这个程序虽然简单,但是可以作为老师的辅助软件,对学生的各种成绩进行管理。

系统功能要求:

(1)界面

****************************

学生成绩管理系统

****************************

************************************

** F1 --帮助 **

** F2 --输入数据并存入文件 **

** F3 --根据学号查询成绩 **

** F4 --根据姓名查询成绩 **

** F5 --输出文件内容 **

** F6 --统计及格和优秀人数 **

** ESC--退出系统 **

************************************

(2)功能

这个程序的主要功能是输入学生的学号、姓名对其进行存储,在存储后可以对学生的成绩按学号和姓名进行查寻。该系统具有存贮学生数据,按学号、姓名查询,列出学生成绩和统计功能。使用方法:系统输入数据后,将在当前目录中建立一个名为stu.dat文件,用于保存输入的数据。学号输入只能用数字输入,并且学号只能是10位。姓名输入符合中国人的姓名,只能用中文,且最长为5个汉字。此程序在BC2.0下运行通过由于是第一次用C++编写,所以水平有限此系统还有许多不够完整和严密性,敬请老师指正!

(3)实用性

《学生成绩管理系统》是对学生的成绩进行修改和管理,而且方便快速,这个程序虽然简单,但是可以作为老师的辅助软件,对学生的各种成绩进行管理。

目的:

通过课程设计培养了我的动手能力以及综合运用所学的C++语言基础理论,基础知识,基本技能,进行程序分析和程序开发,提高在实际开发中解决问题的能力,达到了能够利用C++语言进行应用程序的规划,分析,设计和实施,更能进一步使我对这门语言有深刻的理解和更好的得到巩固,更能对我所学的知识得到检验。

2、对《学生成绩管理系统》的介绍

具体的功能:

(1)帮助

(2)输入数据并存入文件

(3)根据学号查询成绩

(4)根据姓名查询成绩

(5)输出文件内容

(6)统计及格和优秀人数

(7)退出

(1)帮助

运行程序,屏幕出现该程序界面,第一项就是帮助,在按下“F1”后出现帮助信息,“此系统是应老师所布置的作业编制而成,该系统具有存贮学生数据,按学号、姓名查询,列出学生成绩和统计功能。使用方法:系统输入数据后,将在当前目录中建立一个名为stu.dat文件,用于保存输入的数据。学号输入只能用数字输入,并且学号只能是10位。姓名输入符合中国人的姓名,只能用中文,且最长为5个汉字。”

(2)输入数据并存入文件

在界面状态下,按下“F2”后出现“请输入学号:”,若输入“#”,则返回真值结束输入。在其后面可以输入学生的学号,长度要求10位而且必须是数字,这里用到了结构体变量和函数,对输入的字符进行判断,如果输入字母和汉字会出现“非法学号!请重新输入。”,如果学号长度不为10,则返回重新输入提示“学号长度不对。”, 如果学号后面的字符不是回车符,则学号长度大于10提示“学号长度大于10个!请重新输入!” 输入完学号后会出现提示“请输入姓名:”,在其后面可以输入学生的姓名,姓名必须是汉字而且长度必须是5, 这里也用到了结构体变量和函数,对输入的字符进行判断,如果输入为字母和数字会提示“姓名只能用中文,请重新输入!”,如果输入的汉字长度大于5会提示“姓名长度大于5个!请重新输入!”,输入姓名后会出现“请输入数学成绩:”、“ 请输入英语成绩:”和“请输入总评成绩:”输入规则也和前面输入学号、姓名的类似,判断输入的是否为数字,如果不是就会出现提示,重新输入,直到输入正确为止。都输入完成后,改系统会调用写文件函数对指定的文件进行写操作,把输入的学生信息写入到文件中。

(3)根据学号查询成绩

在界面状态下,在按下“F3”后会出现“请输入要查询的学号:” 输入“#”结束查询,若文件打不开则输出下面的信息,“文件打开失败!按任意键返回...”,如果文件打开会按照用户的要求从文件头开始查询满足要求的学号,找到即显示该学生的基本信息和成绩。如果未找到就会显示“无此学号”。

(4)根据姓名查询成绩

在界面状态下,在按下“F4”后会出现“请输入要查询的学生姓名:” 输入“#”结束查询,若文件打不开则输出下面的信息,“文件打开失败!按任意键返回...”,如果文件打开会按照用户的要求从文件头开始查询满足要求的姓名,找到即显示该学生的基本信息和成绩。如果未找到就会显示“无此学生!”。

(5)输出文件内容

输出文件,列出所有学生成绩。如果文件未打开会出现“文件打开失败!按任意键返回...”打开成功会每输出20个学生成绩,停一下提示,“请按任意键继续...”,关闭文件。

(6)统计及格和优秀人数

这里用到结构体函数和变量,判断成绩大于等于60分的为及格,并统计人数,判断成绩大于等于80分的为优秀,并统计人数,最后统计出来,显示在屏幕上。

(7)退出

在界面状态下,按下“ESC”会退出该学生成绩管理系统。返回源程序。

程序清单

/*-------------1-------------*/

#include<bios.h>

#include<dos.h> /*头文件*/

#include<conio.h>

#include<ctype.h>

#include<process.h>

#include<stdlib.h>

#include<stdio.h>

#include<string.h>

#define NULL 0

#define ESC 0x001b /* 退出 */

#define F1 0x3b00 /* 查看帮助信息,调用HelpMassage()函数 */

#define F2 0x3c00 /*输入学生成绩*/

#define F3 0x3d00 /*按学号查找*/

#define F4 0x3e00 /*按姓名查找*/

#define F5 0x3f00 /*列出所有学生成绩*/

#define F6 0x4000 /*统计*/

struct stuType /*定义结构体变量*/

{

char NO[11]; /*学号长度为10*/

char XM[10];

float CJ[4]; /*包含4门成绩*/

};

/*-------------2-------------*/

int JY_NO(char *stu_num,FILE *fp) /*检验学号的正确性*/

{ struct stuType stud;

int NO;

char *p=stu_num;

if(strcmp(stu_num,"#")==0) return 1; /*若输入"#"返回真值,不再循环输入*/

while(*p!='\0') /*学号必须是数字,否则返回重新输入*/

{ NO=(int)*p;

if(NO<48||NO>57)

{ puts("\t\t\t非法学号!请重新输入!\n");

return 0;

}

else p++; /*指针加1*/

}

if(strlen(stu_num)!=10) /*若学号长度不为10,则返回重新输入*/

{ puts("\t\t\t学号长度不对!\n");

return 0;

}

if(getchar()!='\n') /*若学号后面的字符不是回车符,则学号长度大于10*/

{ printf("\t\t\t学号长度大于10个!请重新输入!\n");

do{}while(getchar()!='\n'); /*用getchar接收多余的字符*/

return 0;

}

else

{

rewind(fp); /*使文件指针指向头*/

while(!feof(fp)) /*若文件指针未到结尾,就继续执行下面的循环,feof遇到文件结束符返回非零值,否则返回0*/

{ fread(&stud,sizeof(struct stuType),1,fp); /*读取一定长度的数据*/

if(strcmp(stu_num,stud.NO)==0) /*学号的唯一性*/

{ printf("\t\t\t学号重复,请重新输入!\n");

printf("\t\t\t该学生成绩如下:\n");

printf("\t\t\t语文:%.1f\n",stud.CJ[0]);

printf("\t\t\t数学:%.1f\n",stud.CJ[1]);

printf("\t\t\t英语:%.1f\n",stud.CJ[2]);

printf("\t\t\t总评:%.1f\n",stud.CJ[3]);

return 0;

}

}

}

return 1;

}

/*-------------3-------------*/

int JY_NO2(char *stu_num) /*检验学号*/

{ int NO;

char *p=stu_num;

if(strcmp(stu_num,"#")==0)return 1; /*若输入“#”,则返回真值结束*/

if(strlen(stu_num)!=10) /*学号长度为10*/

{ puts("\t\t\t学号长度不对!\n");

return 0;

}

while(*p!='\0') /*学号必须用数字,若包含有字母,或其它字符则返回假值重新输入*/

{ NO=(int)*p;

if(NO<48||NO>57)

{ puts("\t\t\t非法学号!请重新输入!\n");

return 0;

}

else p++; /*指针加1*/

}

if(getchar()!='\n') /*检验学号长度是否大于10,并把多余的字符去掉*/

{ printf("\t\t\t学号长度大于10个!请重新输入!\n");

do{}while(getchar()!='\n');

return 0;

}

return 1;

}

/*-------------4-------------*/

int JY_XM(char *stu_XM) /*检验姓名*/

{ int PD;

char *p;

p=stu_XM;

while(*p!='\0') /*姓名只能用中文*/

{

PD=(int)*p;

if(PD>0)

{ puts("\t\t\t姓名只能用中文,请重新输入!\n");

return 0;

}

else p++; /*使指针加1,指向下一汉字*/

}

if(getchar()!='\n') /*姓名长度不得大于5个*/

{ printf("\t\t\t姓名长度大于5个!请重新输入!\n");

do{}while(getchar()!='\n');

return 0;

}

return 1; /*字符串全为汉字返回真*/

}

/*-------------5-------------*/

int JY_CJ(float stu_CJ) /*学生成绩只能在0~100之间*/

{

if(stu_CJ<0||stu_CJ>100)

{ printf("\t\t\t输入错误,成绩只能在0~100之间!\n");

return 0;

}

return 1;

}

/*-------------6-------------*/

void CreatFile() /*输入文件*/

{ FILE *fp;

struct stuType stu,stu0={"","",}; /*对stu0先赋值*/

fp=fopen("stu.dat","wb+"); /*打开或创建一个二进制文件,打开时将原来的内容删除*/

if(fp==NULL)

{ printf("\t\t\t文件打开失败!\n\t\t\t按任意键返回...");

getch();

return;

}

else

{ while(1)

{ stu=stu0;

do{ printf("\n\t\t\t请输入学号:"); /*输入学号并检验其正确性*/

scanf("%10s",stu.NO);

}while(!JY_NO(stu.NO,fp));

if(strcmp(stu.NO,"#")==0)break;

do{ printf("\n\t\t\t请输入姓名:"); /*输入姓名并检验其正确性*/

scanf("%10s",stu.XM);

}while(!JY_XM(stu.XM));

do{ printf("\n\t\t\t请输入语文成绩:"); /*输入成绩并检验其正确性*/

scanf("%f",&stu.CJ[0]);

}while(!JY_CJ(stu.CJ[0]));

do{ printf("\n\t\t\t请输入数学成绩:"); /*同上*/

scanf("%f",&stu.CJ[1]);

}while(!JY_CJ(stu.CJ[1]));

do{ printf("\n\t\t\t请输入英语成绩:");

scanf("%f",&stu.CJ[2]);

}while(!JY_CJ(stu.CJ[2]));

do{ printf("\n\t\t\t请输入总评成绩:");

scanf("%f",&stu.CJ[3]);

}while(!JY_CJ(stu.CJ[3]));

fwrite(&stu,sizeof(struct stuType),1,fp); /*写文件*/

}

}

fclose(fp); /*关闭文件*/

}

/*-------------7-------------*/

void Search_Xuehao() /*按学号查询*/

{ FILE *fp;

int flag;

struct stuType stu,stud;

fp=fopen("stu.dat","rb");

if(fp==NULL) /*若文件打不开则输出下面的信息*/

{ printf("\t\t\t文件打开失败!\n\t\t\t按任意键返回...");

getch();

return;

}

else

{ do{ puts("\n\t\t\t输入“#”结束查询");

do{ printf("\t\t\t请输入要查询的学号:");

scanf("%10s",stu.NO);

}while(!JY_NO2(stu.NO));

if(strcmp(stu.NO,"#")==0)break; /*若输入“#”则结束循环*/

flag=0;

rewind(fp);

while(fread(&stud,sizeof(struct stuType),1,fp)) /*检查文件指针结束*/

{ if(strcmp(stu.NO,stud.NO)==0) /*比较学号*/

{ puts("\t\t\t该学生成绩如下:");

printf("\t\t\t学号:%s\n",stud.NO);

printf("\t\t\t姓名:%s\n",stud.XM);

printf("\t\t\t语文:%.1f\n",stud.CJ[0]);

printf("\t\t\t数学:%.1f\n",stud.CJ[1]);

printf("\t\t\t英语:%.1f\n",stud.CJ[2]);

printf("\t\t\t总评:%.1f\n",stud.CJ[3]);

flag=1; /*记录学号是否查到*/

}

}

if(flag==0)puts("\t\t\t无此学号!");

}while(strcmp(stu.NO,"#")!=0);

}

fclose(fp); /*关闭文件*/

}

/*-------------8-------------*/

void Search_Xingming() /*按姓名查找*/

{ FILE *fp;

int flag=0;

struct stuType stu,stud;

fp=fopen("stu.dat","rb");

if(fp==NULL)

{ printf("\t\t\t文件打开失败!\n\t\t\t按任意键返回...");

getch();

return;

}

else

{ do{

do{ printf("\t\t\t请输入要查询的学生姓名:");

scanf("%10s",stu.XM);

}while(!JY_XM(stu.XM));

rewind(fp); /*文件指针指向头*/

while(fread(&stud,sizeof(struct stuType),1,fp))

{ if(strcmp(stu.XM,stud.XM)==0) /*比较姓名是否相同*/

{ puts("\t\t\t该学生姓名如下:");

printf("\t\t\t学号:%s\n",stud.NO);

printf("\t\t\t姓名:%s\n",stud.XM);

printf("\t\t\t语文:%.1f\n",stud.CJ[0]);

printf("\t\t\t数学:%.1f\n",stud.CJ[1]);

printf("\t\t\t英语:%.1f\n",stud.CJ[2]);

printf("\t\t\t总评:%.1f\n",stud.CJ[3]);

flag=1; /*记录姓名是否被查到*/

}

}

if(flag==0)puts("\n\t\t\t无此学生!");

puts("\t\t\t是否继续(y--继续,其他返回)?");

}while(getch()=='y');

}

fclose(fp);

/* puts("\t\t\t请按任意键继续...");*/

/* getch();*/

}

/*-------------9-------------*/

int ListFile(void) /*输出文件,列出所有学生成绩*/

{ FILE *fp;

int REC=0; /*记录学生人数*/

struct stuType stu;

fp=fopen("stu.dat","rb");

if(fp==NULL)

{ printf("\t\t\t文件打开失败!\n\t\t\t按任意键返回...");

getch();

return 1;

}

else{ printf("\t\t\t学生成绩如下:\n");

printf("\t\t\t学号\t\t姓名\t语文\t数学\t英语\t总评\n");

rewind(fp);

while(fread(&stu,sizeof(struct stuType),1,fp))

{ /*每读取一个长度的数据就输出*/

printf("\t\t\t%s",stu.NO);

printf("\t%s",stu.XM);

printf("\t%.1f",stu.CJ[0]);

printf("\t%.1f",stu.CJ[1]);

printf("\t%.1f",stu.CJ[2]);

printf("\t%.1f",stu.CJ[3]);

printf("\n");

REC++;

if(REC%20==0) /*每输出20个学生成绩,停一下*/

{ printf("\t\t\t请按任意键继续...\n");

getch();

}

}

}

fclose(fp); /*关闭文件*/

printf("\t\t\t请按任意键继续...");

getch();

}

/*-------------10-------------*/

void Statistics() /*统计及格和优秀人数*/

{ FILE *fp;

int REC=0,pass[4]={0},good[4]={0}; /*REC--记录个数,即人数,pass--及格人数,good--优秀人数*/

float highest[4]={0},score[4]={0}; /*highest--最高分,score--总分*/

struct stuType stu;

fp=fopen("stu.dat","rb");

if(fp==NULL)

{ printf("\t\t\t文件打开失败!\n\t\t\t按任意键返回...");

getch();

return;

}

else { rewind(fp);

while(fread(&stu,sizeof(struct stuType),1,fp))

{ REC++;

score[0]=score[0]+stu.CJ[0]; /*语文*/

if(stu.CJ[0]>=60)pass[0]++;

if(stu.CJ[0]>=80)good[0]++;

if(highest[0]<stu.CJ[0])highest[0]=stu.CJ[0];

score[1]=score[1]+stu.CJ[1]; /*数学*/

if(stu.CJ[1]>=60)pass[1]++;

if(stu.CJ[1]>=80)good[1]++;

if(highest[1]<stu.CJ[1])highest[1]=stu.CJ[1];

score[2]=score[2]+stu.CJ[2]; /*英语*/

if(stu.CJ[2]>=60)pass[2]++;

if(stu.CJ[2]>=80)good[2]++;

if(highest[2]<stu.CJ[2])highest[2]=stu.CJ[2];

score[3]=score[3]+stu.CJ[3]; /*总评*/

if(stu.CJ[3]>=60)pass[3]++;

if(stu.CJ[3]>=80)good[3]++;

if(highest[3]<stu.CJ[3])highest[3]=stu.CJ[3];

}

if(REC==0) /*可以防止记录为0是REC作除数而造成的错误*/

{ printf("\t\t\t未输入学生记录!按任意键返回...");

getch();

return;

}

else{

printf("\t\t\t\t 语文\t 数学\t 英语\t 总评\n"); /*输出统计信息*/

printf("\t\t\t平均分: %.1f\t %.1f\t %.1f\t %.1f\n",score[0]/REC,score[1]/REC,score[2]/REC,score[3]/REC);

printf("\t\t\t最高分: %.1f\t %.1f\t %.1f\t %.1f\n",highest[0],highest[1],highest[2],highest[3]);

printf("\t\t\t优秀人数:%d\t %d\t %d\t %d\n",good[0],good[1],good[2],good[3]);

printf("\t\t\t及格人数:%d\t %d\t %d\t %d\n",pass[0],pass[1],pass[2],pass[3]);

}

}

fclose(fp);

printf("\n\t\t\t请按任意键继续...");

getch();

}

/*-------------11-------------*/

void HelpMessage()

{ clrscr();

printf("\n\n\n\n\n 此系统是应老师所布置的作业编制而成,该系统具有存贮学生数据,按学号、姓名查询,列出学生成绩和统计功能。\n \n 使用方法:系统输入数据后,将在当前目录中建立一个名为stu.dat文件,用于保存输入的数据。学号输入只能用数字输入,并且学号只能是10位。姓名输入符合中国人的姓名,只能用中文,且最长为5个汉字。\n 此程序在Turbo C2.0下运行通过\n\n 由于是初学者,水平有限此系统还有许多不够完整和严密性,敬请指正!");

getch();

}

/*-------------12-------------*/

int GetKey(void) /*此函数返回一个按键的数值*/

{ int key;

key=bioskey(0); /*bioskey为调用BIOS键盘接口*/

if(key<<8) /*位移*/

{

key=key&0x00ff;

}

return key; /*返回按键*/

}

/*-------------13-------------*/

void main()

{ int key;

struct date d; /*定义时间结构体*/

getdate(&d); /*读取系统日期并把它放到结构体d中*/

clrscr(); /*清除屏幕*/

printf("\n\n\n\n\n");

printf("\t\t\t****************************\n"); /*版本信息*/

printf("\t\t\t 学生成绩管理系统1.0 \n");

printf("\t\t\t****************************\n");

printf("\t\t\t 制作人:张春覃 \n");

printf("\t\t\t 指导老师:杨宇晶 于宏伟 \n");

printf("\t\t\t 制作时间:2005年9月 \n");

printf("\t\t\t****************************\n");

printf("\t\t\t请按任意键继续...");

/*while(!kbhit());*/

getch(); /*从键盘读取一个字符,但不显示于屏幕*/

system("cls"); /*调用DOS的清屏函数,TC中可用clrscr代替*/

while(1) /*主菜单*/

{

printf("\n\n\n\n\n");

printf("\t\t\t************************************\n");

printf("\t\t\t**\tF1 --帮助 **\n");

printf("\t\t\t**\tF2 --输入数据并存入文件 **\n");

printf("\t\t\t**\tF3 --根据学号查询成绩 **\n");

printf("\t\t\t**\tF4 --根据姓名查询成绩 **\n");

printf("\t\t\t**\tF5 --输出文件内容 **\n");

printf("\t\t\t**\tF6 --统计及格和优秀人数 **\n");

printf("\t\t\t**\tESC--退出系统 **\n");

printf("\t\t\t************************************\n");

printf("\n\t\t\t请输入选项\t\t%d年%d月%d日\n\n",d.da_year,d.da_mon,d.da_day); /*提示信息,并显示当前系统日期*/

key=GetKey(); /*调用自定义函数,读取一个键*/

switch(key)

{

case F1: HelpMessage(); break;

case F2: CreatFile(); break;

case F3: Search_Xuehao(); break;

case F4: Search_Xingming();break;

case F5: ListFile(); break;

case F6: Statistics(); break;

case ESC:exit(1); break;

/*default: puts("\t\t\t输入错误选项!");

printf("\t\t\t按任意键返回...");

getch();*/

}

clrscr(); /*每执行完一项功能后,自动清屏*/

}

}

1. 总结

通过本次的C++课程设计,让我学会了把书本上的知识应用到了实际中来。虽然在这几周中有过挫折和坎坷,有的问题一直到了最后才被解决,但是我认为这未必就不是好事,这样能锻炼我的意志,磨练我的耐心,失败是成功之母,这话一点都没错,没有失败就没有成功。

让我没有失去信心的是关怀我们的老师,当我们有了问题和疑问,老师就很耐心的给予讲解,让我们有了一个良好的学习氛围。

2. 参考文献

《C++程序设计》 钱能 清华大学出版社

《C++程序设计试验指导》 钱能 清华大学出版社

《C程序设计》 谭浩强 清华大学出版社

❺ 简单的学生成绩管理系统的设计

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int shoudsave=0; /* */
struct student
{
char num[10];/* 学号 */
char name[20];
char sex[10];
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.num,p->data.name,p->data.sex,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.ave);
}

Node* Locate(Link l,char findmess[],char nameornum[]) /* 该函数用于定位连表中符合要求的接点,并返回该指针 */
{
Node *r;
if(strcmp(nameornum,"num")==0) /* 按学号查询 */
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.num,findmess)==0)
return r;
r=r->next;
}
}
else if(strcmp(nameornum,"name")==0) /* 按姓名查询 */
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.name,findmess)==0)
return r;
r=r->next;
}
}
return 0;
}
void Add(Link l) /* 增加学生 */
{
Node *p,*r,*s;
char num[10];
r=l;
s=l->next;
while(r->next!=NULL)
r=r->next; /* 将指针置于最末尾 */
while(1)
{
printf("请你输入学号(以'0'返回上一级菜单:)");
scanf("%s",num);
if(strcmp(num,"0")==0)
break;
while(s)
{
if(strcmp(s->data.num,num)==0)
{
printf("=====>提示:学号为'%s'的学生已经存在,若要修改请你选择'4 修改'!\n",num);
printstart();
printc();
printe(s);
printstart();
printf("\n");
return;
}
s=s->next;
}
p=(Node *)malloc(sizeof(Node));
strcpy(p->data.num,num);
printf("请你输入姓名:");
scanf("%s",p->data.name);
getchar();
printf("请你输入性别:");
scanf("%s",p->data.sex);
getchar();
printf("请你输入c语言成绩:");
scanf("%d",&p->data.cgrade);
getchar();
printf("请你输入数学成绩:");
scanf("%d",&p->data.mgrade);
getchar();
printf("请你输入英语成绩:");
scanf("%d",&p->data.egrade);
getchar();
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle / 3;
/* 信息输入已经完成 */
p->next=NULL;
r->next=p;
r=p;
shoudsave=1;
}
}

void Qur(Link l) /* 查询学生 */
{
int sel;
char findmess[20];
Node *p;
if(!l->next)
{
printf("\n=====>提示:没有资料可以查询!\n");
return;
}
printf("\n=====>1按学号查找\n=====>2按姓名查找\n");
scanf("%d",&sel);
if(sel==1)/* 学号 */
{
printf("请你输入要查找的学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("\t\t\t\t查找结果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else if(sel==2) /* 姓名 */
{
printf("请你输入要查找的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
printf("\t\t\t\t查找结果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else
Wrong();

}

void Del(Link l) /* 删除 */
{
int sel;
Node *p,*r;
char findmess[20];
if(!l->next)
{
printf("\n=====>提示:没有资料可以删除!\n");
return;
}
printf("\n=====>1按学号删除\n=====>2按姓名删除\n");
scanf("%d",&sel);
if(sel==1)
{
printf("请你输入要删除的学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:该学生已经成功删除!\n");
shoudsave=1;
}
else
Nofind();
}
else if(sel==2)
{
printf("请你输入要删除的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:该学生已经成功删除!\n");
shoudsave=1;
}
else
Nofind();
}
else
Wrong();
}

void Modify(Link l)
{
Node *p;
char findmess[20];
if(!l->next)
{
printf("\n=====>提示:没有资料可以修改!\n");
return;
}
printf("请你输入要修改的学生学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("请你输入新学号(原来是%s):",p->data.num);
scanf("%s",p->data.num);
printf("请你输入新姓名(原来是%s):",p->data.name);
scanf("%s",p->data.name);
getchar();
printf("请你输入新性别(原来是%s):",p->data.sex);
scanf("%s",p->data.sex);
printf("请你输入新的c语言成绩(原来是%d分):",p->data.cgrade);
scanf("%d",&p->data.cgrade);
getchar();
printf("请你输入新的数学成绩(原来是%d分):",p->data.mgrade);
scanf("%d",&p->data.mgrade);
getchar();
printf("请你输入新的英语成绩(原来是%d分):",p->data.egrade);
scanf("%d",&p->data.egrade);
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle/3;
printf("\n=====>提示:资料修改成功!\n");
shoudsave=1;
}
else
Nofind();

}

void Disp(Link l)
{
int count=0;
Node *p;
p=l->next;

if(!p)
{
printf("\n=====>提示:没有资料可以显示!\n");
return;
}
printf("\t\t\t\t显示结果\n");
printstart();
printc();
printf("\n");
while(p)
{
printe(p);
p=p->next;
}
printstart();
printf("\n");
}

void Tongji(Link l)
{
Node *pm,*pe,*pc,*pt,*pa; /* 用于指向分数最高的接点 */
Node *r=l->next;
if(!r)
{
printf("\n=====>提示:没有资料可以统计!\n");
return ;
}
pm=pe=pc=pt=pa=r;
while(r!=NULL)
{
if(r->data.cgrade>=pc->data.cgrade)
pc=r;
if(r->data.mgrade>=pm->data.mgrade)
pm=r;
if(r->data.egrade>=pe->data.egrade)
pe=r;
if(r->data.totle>=pt->data.totle)
pt=r;
if(r->data.ave>=pa->data.ave)
pa=r;

r=r->next;
}
printf("------------------------------统计结果--------------------------------\n");
printf("总分最高者:\t%s %d分\n",pt->data.name,pt->data.totle);
printf("平均分最高者:\t%s %d分\n",pa->data.name,pa->data.ave);

printf("英语最高者:\t%s %d分\n",pe->data.name,pe->data.egrade);
printf("数学最高者:\t%s %d分\n",pm->data.name,pm->data.mgrade);
printf("c语言最高者:\t%s %d分\n",pc->data.name,pc->data.cgrade);
printstart();
}

void Sort(Link l)
{
Link ll;
Node *p,*rr,*s;

ll=(Link)malloc(sizeof(Node)); /* 用于做新的连表 */
ll->next=NULL;

if(l->next==NULL)
{
printf("\n=====>提示:没有资料可以排序!\n");
return ;
}
p=l->next;
while(p)
{
s=(Node*)malloc(sizeof(Node)); /* 新建接点用于保存信息 */
s->data=p->data;
s->next=NULL;

rr=ll;
while(rr->next!=NULL && rr->next->data.totle>=p->data.totle)
rr=rr->next;
if(rr->next==NULL)
rr->next=s;
else
{
s->next=rr->next;
rr->next=s;
}
p=p->next;
}
free(l);
l->next=ll->next;
printf("\n=====>提示:排序已经完成!\n");
}

void Save(Link l)
{
FILE* fp;
Node *p;
int flag=1,count=0;
fp=fopen("c:\\student","wb");
if(fp==NULL)
{
printf("\n=====>提示:重新打开文件时发生错误!\n");
exit(1);
}
p=l->next;

while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)
{
p=p->next;
count++;
}
else
{
flag=0;
break;
}
}
if(flag)
{
printf("\n=====>提示:文件保存成功.(有%d条记录已经保存.)\n",count);
shoudsave=0;
}
fclose(fp);
}

int main()
{
Link l;/* 连表 */
FILE *fp; /* 文件指针 */
int sel;
char ch;
char jian;

int count=0;
Node *p,*r;

l=(Node*)malloc(sizeof(Node));
l->next=NULL;
r=l;

fp=fopen("C:\\student","rb");
if(fp==NULL)
{
printf("\n=====>提示:文件还不存在,是否创建?(y/n)\n");
scanf("%c",&jian);
if(jian=='y'||jian=='Y')
fp=fopen("C:\\student","wb");
else
exit(0);
}
printf("\n=====>提示:文件已经打开,正在导入记录......\n");

while(!feof(fp))
{
p=(Node*)malloc(sizeof(Node));
if(fread(p,sizeof(Node),1,fp)) /* 将文件的内容放入接点中 */
{
p->next=NULL;
r->next=p;
r=p; /* 将该接点挂入连中 */
count++;
}
}

fclose(fp); /* 关闭文件 */
printf("\n=====>提示:记录导入完毕,共导入%d条记录.\n",count);

while(1)
{
menu();
printf("请你选择操作:");
scanf("%d",&sel);

if(sel==0)
{
if(shoudsave==1)
{ getchar();
printf("\n=====>提示:资料已经改动,是否将改动保存到文件中(y/n)?\n");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(l);
}
printf("\n=====>提示:你已经退出系统,再见!\n");
break;
}
switch(sel)
{
case 1:Add(l);break; /* 增加学生 */
case 2:Del(l);break;/* 删除学生 */
case 3:Qur(l);break;/* 查询学生 */
case 4:Modify(l);break;/* 修改学生 */
case 5:Save(l);break;/* 保存学生 */
case 9:printf("\t\t\t==========帮助信息==========\n");break;
default: Wrong();getchar();break;
}
}
system("pause");
return 0;
}

❻ 学生成绩管理系统设计

你把有的课程名字改一下,或者添加一些东西,在结构体定义那里
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct stu
{
int num;
int wuli;
int huaxue;
int math;
};
FILE *fp;
//添加学生信息,可以排除与已存的冲突;
void add()
{
int a,b,c,d,n=0;
struct stu student;
fp=fopen("score.txt","r+");
printf("请输入要添加学生的学号、物理成绩、化学成绩及数学成绩\n");
scanf("%d%d%d%d",&student.num,&student.wuli,&student.huaxue,&student.math);
while(!feof(fp))
{
fscanf(fp,"%d%d%d%d",&a,&b,&c,&d);
if(student.num==a)
{
printf("该学生信息已存在,不需要添加\n");
fclose(fp);
n=1;
break;
}
}
if(n==0)
{
printf("信息库中没有该学生信息,可以添加\n");
fseek(fp,0,2);//文件末尾添加;
fprintf(fp,"%d\t%d\t%d\t%d\n",student.num,student.wuli,student.huaxue,student.math);
fclose(fp);
}

}
//修改学生信息;
void modify()
{
int n=0,number,a,b,c,d,offset;
struct stu student;
fp=fopen("score.txt","r+");
if(fp==NULL)
{
printf("信息库为空\n");
exit(0);
}
printf("请输入要修改学生的学号\n");
scanf("%d",&number);
while(!feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%d%d%d%d",&a,&b,&c,&d);
if(number==a)
{
printf("该学生信息为:\n");
printf("%d\t%d\t%d\t%d\n",a,b,c,d);
printf("请输入要修改的信息\n");
scanf("%d%d%d%d",&student.num,&student.wuli,&student.huaxue,&student.math);
fseek(fp,offset,0);
fprintf(fp,"%d\t%d\t%d\t%d\n",student.num,student.wuli,student.huaxue,student.math);
n=1;
break;
}
}
if(n==0)
{
printf("该学生信息不存在\n");
}
fclose(fp);
}
//删除学生信息;
void del()
{
int n=0,number,a,b,c,d,m,offset;
fp=fopen("score.txt","r+");
if(fp==NULL)
{
printf("信息库为空\n");
exit(0);
}
printf("请输入删除学生的学号\n");
scanf("%d",&number);
while(!feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%d%d%d%d",&a,&b,&c,&d);

if(number==a)
{
printf("该学生信息为:\n");
printf("%d\t%d\t%d\t%d\n",a,b,c,d);
printf("是否要删除该学生信息,是:1 ;否:0\n");
scanf("%d",&m);
if(m)
{
fseek(fp,offset,0);
fprintf(fp,"%s\t%s\t%s\t%s"," "," "," "," ");
printf("\n");
printf("该学生信息已删除\n");
}
else printf("您已放弃删除该学生信息\n");
n=1;
break;
}
}
if(n==0)
{
printf("该学生信息不存在\n");
}
fclose(fp);
}
//查找学生信息;
void search()
{
int n=0,number,a,b,c,d,m;
char s[10];
fp=fopen("score.txt","r+");
if(fp==NULL)
{
printf("信息库为空\n");
exit(0);
}
printf("请选择查找方式:1--按学号查找;0--按学科查找\n");
scanf("%d",&m);
if(m)
{
printf("请输入要查找学生的学号\n");
scanf("%d",&number);
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
{
if(number==a)
{
printf("已找到,该学生信息为:\n");
printf("%s %s %s %s\n","学号","物理成绩","化学成绩","数学成绩");
printf("%d\t %d\t %d\t %d\n",a,b,c,d);
n=1;
break;
}
}
if(n==0)
{
printf("该学生信息不存在\n");
}
fclose(fp);
}
else
{
printf("请输入要查找的学科\n");
scanf("%s",s);
if(strcmp(s,"wuli")==0)
{
printf("学号\t物理成绩\n");
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
printf("%d\t%d\n",a,b);
fclose(fp);
}
if(strcmp(s,"huaxue")==0)
{
printf("学号\t化学成绩\n");
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
printf("%d\t%d\n",a,c);
fclose(fp);
}
if(strcmp(s,"math")==0)
{
printf("学号\t数学成绩\n");
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
printf("%d\t%d\n",a,d);
fclose(fp);
}
if(strcmp(s,"wuli")&&strcmp(s,"huaxue")&&strcmp(s,"math") )
{
printf("错误,要查找的学科不存在\n");
fclose(fp);
}
}
}
//统计学生信息;
void tongji()
{
int n=0,a,b,c,d,m,k,x[100],i,j,l=1;
float sum=0,h[100],k1;
fp=fopen("score.txt","r+");
if(fp==NULL)
{
printf("信息库为空\n");
exit(0);
}
printf("0--统计单科平均成绩\n");
printf("1--统计单个学生的平均成绩和总成绩,对学生排名\n");
printf("请选择统计类型\n");
scanf("%d",&m);
if(!m)
{
printf("1--统计物理的平均成绩\n");
printf("2--统计化学的平均成绩\n");
printf("3--统计数学的平均成绩\n");
printf("请选择要统计的学科\n");
scanf("%d",&m);
if(m==1)
{
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
{
sum=sum+b;
n++;
}
printf("物理的平均成绩为 %2.2f\n",sum/n);
fclose(fp);
}
if(m==2)
{
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
{
sum=sum+c;
n++;
}
printf("化学的平均成绩为 %.2f\n",sum/n);
fclose(fp);
}
if(m==3)
{
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
{
sum=sum+d;
n++;
}
printf("数学的平均成绩为 %.2f\n",sum/n);
fclose(fp);
}
}
else
{
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
{
h[n]=(float)(b+c+d);
x[n]=a;
n++;
}
for(i=0;l==1&&i<n-1;i++)
{
l=0;
for(j=0;j<n-1-i;j++)
{
if(h[j]>h[j+1])
{
k1=h[j];
h[j]=h[j+1];
h[j+1]=k1;
k=x[j];
x[j]=x[j+1];
x[j+1]=k;
l=1;
}
}
}
printf("排序后\n");
printf("学号\t总成绩\t平均成绩\n");
for(i=0;i<n;i++)
printf("%d\t%3.0f\t%.2f\n",x[i],h[i],h[i]/3.0);
}
fclose(fp);

}
void main()
{
int m;
/*fp=fopen("score.txt","w");
fprintf(fp,"%s\t%s\t%s\t%s\n","学号","物理成绩","化学成绩","数学成绩");
fclose(fp);*/
while(1)
{
printf("\n\t\t*********欢迎使用学生信息管理系统*********\n\n");
printf("\n\t\t添加,请按1");
printf("\n\t\t修改,请按2");
printf("\n\t\t删除,请按3");
printf("\n\t\t查询,请按4");
printf("\n\t\t统计,请按5");
printf("\n\t\t退出,请按0\n");
printf("\n\t\t********************************************\n\n");
printf("Please select(0--5):");
scanf("%d",&m);
if(m>=0&&m<=5)
{
switch(m)
{
case 1: add();
break;
case 2: modify();
break;
case 3: del();
break;
case 4: search();
break;
case 5: tongji();
break;
case 0: exit(0);
}
printf("\n\n操作完毕,请再次选择!");
}
else
printf("\n\n选择错误,请再次选择!");
}
}

❼ 设计学生成绩管理系统

#include #include #include #define MAX 1000 /*定义学生成绩信息结构*/ struct stu { char id[8]; char name[8]; double Chinese; double Math; double English; double average; double total; }; /*学生结构数组,用于存储学生成绩信息*/ struct stu students[MAX]; /*当前学生人数*/ int current; void input() { int i; printf("请输入学生人数:"); scanf("%d", & current); for (i = 0; i < current; i++) { printf("\n请输入学生学号,最多为7位数: "); scanf("%s", students[i].id); printf("请输入学生姓名:"); scanf("%s", students[i].name); printf("请输入语文成绩:"); scanf("%lf", &students[i].Chinese); printf("请输入数学成绩:"); scanf("%lf", &students[i].Math); printf("请输入英语成绩:"); scanf("%lf", &students[i].English); students[i].total = students[i].Chinese + students[i].Math + students[i].English; students[i].average = students[i].total / 3; } } /*排名次,即对学生结构数组排序*/ void sort(struct stu array[], int n) { int i, j; struct stu temp; for (i = 0; i < n; i++) { for (j = i+1; j < n; j++) { if (array[i].average - array[j].average < 1e-16) { temp = array[i]; array[i] = array[j]; array[j] = temp; } } } } /*统计平均成绩,并输出各分数段的人数*/ void print_score(struct stu array[], int n) { int i; double ave = 0; int sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0; for (i = 0; i < n; i++) { ave += array[i].average; switch ((int)(array[i].average / 10)) { case 10: case 9: sum1++; break; case 8: sum2++; break; case 7: case 6: sum3++; break; default: sum4++; } } printf("全班的平均分为:%.1f\n", ave/n); printf("平均分在90分以上的人数为:%d\n", sum1); printf("平均分在80~89的人数为:%d\n", sum2); printf("平均分在60~79的人数为:%d\n", sum3); printf("平均分在60分以下的人数为:%d\n", sum4); } /*输出不及格科目及学生名单*/ void print_unreach(struct stu array[], int n) { int i; printf("科目\t学号\t名字\n"); for (i = 0; i < n; i++) { if (array[i].Chinese < 60) { printf("语文\t%s\t%s\n", array[i].id, array[i].name); } if (array[i].Math < 60) { printf("数学\t%s\t%s\n", array[i].id, array[i].name); } if (array[i].English 60) { printf("英语\t%s\t%s\n", array[i].id, array[i].name); } } } /*打印优等生名单*/ void print_good(struct stu array[], int n) { int i; char mark = 0; if (n > 3) { n = 3; } printf("学号\t姓名\t语文\t数学\t英语\t平均分\t名次\n"); for (i = 0; i n; i++) { if ((array[i].Chinese > 60) && (array[i].Math > 60) && (array[i].English > 60)) { if (array[i].average > 90) mark = 1; else if (array[i].average > 85) { if (array[i].Chinese == 100) mark = 1; if (array[i].Math == 100) mark = 1; if (array[i].English == 100) mark = 1; if (array[i].Chinese > 95 && array[i].English > 95) mark = 1; if (array[i].Chinese > 95 && array[i].Math > 95) mark = 1; if (array[i].Math > 95 && array[i].English > 95) mark = 1; } if (mark == 1) { printf("%s\t%s\t", array[i].id, array[i].name); printf("%.f\t%.f\t%.f\t%.1f\t", array[i].Chinese, array[i].Math, array[i].English, array[i].average); printf("%d\n", i+1); } } } } /*按学生姓名查询成绩*/ void search_name(struct stu array[], int n, char* name) { int i; char mark = 1; for (i = 0; i < n; i++) { if (strcmp(name, array[i].name) == 0) { printf("学生姓名:%s\n", name); printf("学生学号:%s\n", array[i].id); printf("语文:%.f\n", array[i].Chinese); printf("数学:%.f\n", array[i].Math); printf("英语:%.f\n", array[i].English); printf("平均分:%.1f\n", array[i].average); mark = 0; } } if (mark == 1) puts("不存在该学生记录"); } /*按学生学号查询成绩*/ void search_id(struct stu array[], int n, char* id) { int i; char mark = 1; for (i = 0; i < n; i++) { if (strcmp(id, array[i].id) == 0) { printf("学生姓名:%s\n", array[i].name); printf("学生学号:%s\n", array[i].id); printf("语文:%.f\n", array[i].Chinese); printf("数学:%.f\n", array[i].Math); printf("英语:%.f\n", array[i].English); printf("平均分:%.1f\n", array[i].average); mark = 0; break; } } if (mark == 1) puts("不存在该学生记录"); } void print_menu() { system("cls"); printf("1.输入学生信息\n"); puts("2.统计全班学生成绩"); puts("3.按学号查询学生成绩"); puts("4.按姓名查询学生成绩"); puts("5.输出不及格情况"); puts("6.输出优等生名单"); puts("0.退出本程序"); printf("\n\n 请输入你的选择:"); } int main(int argc, char **argv) { char ch = 0; char id[8], name[8]; while (ch != '0') { print_menu(); ch = getchar(); switch (ch) { case '1': { system("cls"); input(); sort(students, current); break; } case '2': { system("cls"); print_score(students, current); break; } case '3': { system("cls"); printf("请输入学号:"); scanf("%s", id); search_id(students, current, id); break; } case '4': { system("cls"); printf("请输入姓名:"); scanf("%s", name); search_name(students, current, name); break; } case '5': { system("cls"); print_unreach(students, current); break; } case '6': { system("cls"); print_good(students, current); break; } case '0': exit(0); } printf("\n\n按任意键返回主菜单……"); getchar(); getchar(); } return 0; }

❽ c++设计学生成绩管理系统

如果你是计算机系的学生真的希望你不要完全复制,做下参考自己编写出来才能有所收获,这是对你的将来负责;如果你只是应付一下作业,那就随便了。

# include <iostream>
# include <fstream>
# include <string.h>
#include <conio.h>//用getch();
using namespace std;

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌Student类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
class Student
{
public:
char name[20];
char Id[20];
int Cnum; //C课程得分
int Mnum; //数学课程得分
int Enum; //英语课程得分
int sum; //总分
Student * Next;
void Input()
{
cout<<"\t\t请输入学生的姓名:"; cin>>name;
cout<<"\t\t请输入学生的学号:"; cin>>Id;
cout<<"\t\t请输入C课程的成绩:"; cin>>Cnum;
cout<<"\t\t请输入数学课程的成绩:"; cin>>Mnum;
cout<<"\t\t请输入英语课程的成绩:"; cin>>Enum;
sum=Cnum+Mnum+Enum;
}
void ReadFile(istream & in)
{
in>>name>>Id>>Cnum>>Mnum>>Enum>>sum;
}
void Show()
{
cout<<"姓名:"<<name<<endl<<"学号:"<<Id<<endl<<"C++:"<<Cnum<<endl
<<"数学:"<<Mnum<<endl<<"外语:"<<Enum<<endl<<"总成绩:"<<sum<<endl<<endl<<endl;
}
};

//﹌﹌﹌﹌﹌﹌﹌﹌﹌Studentmassage类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
class Studentmassage
{
public:
Studentmassage();
~Studentmassage();
void ShowMenu();
void Find();
void Save();
void ModifyItem();
void RemoveItem();
void Swap(Student *,Student *);
void Sort();
//void Unpass();
int ListCount();
//void Average();
void Display()
{
for(Student * p=Head->Next;p!=End;p=p->Next)
p->Show();
cout<<"输入任意字符!继续……";
getch();
}
void AddItem()
{
End->Input();
End->Next=new Student;
End=End->Next;
cout<<"添加成功!"<<endl;
cout<<"输入任意字符!继续……";
getch();
}
private:
Student * Head,* End;
ifstream in;
ofstream out;
Student *FindItem(char * name)
{
for(Student * p=Head;p->Next!=End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
if(!strcmp(p->Next->name,name))return p;
return NULL;
}
Student *FindID(char * Id)
{
for(Student * p=Head;p->Next!=End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
if(!strcmp(p->Next->Id,Id))return p;
return NULL;
}
};

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌构造函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Studentmassage::Studentmassage()
{
Head=new Student;
Head->Next=new Student;
End=Head->Next;
in.open("sort.txt");
if(!in)
cout<<"这是一个新系统,无学生信息。请先输入。"<<endl;
else
{
while(!in.eof())
{
End->ReadFile(in);
if(End->name[0]=='\0')break;
End->Next=new Student;
End=End->Next;
}
in.close();
cout<<"\t\t读取学生信息成功!"<<endl;
}
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌析构函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Studentmassage::~Studentmassage()
{
Save();
for(Student * temp;Head->Next!=End;)
{
temp=Head->Next;
Head->Next=Head->Next->Next;
delete temp;
}
delete Head,End;
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌菜单﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::ShowMenu()
{
cout<<"〓〓〓〓〓〓〓〓〓〓 ☆ 学 生 成 绩 管 理 系 统 ☆ 〓〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓★★★★★ ★★★★★★★ ★★★★★〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 1.增加学生成绩 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 2.显示学生成绩 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 3.排序统计成绩 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 4.查找学生成绩 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 5.删除学生成绩 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 6.修改学生信息 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 0.安全退出系统 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;

cout<<"\n\t\t\n\t\t请选择:";
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌查找函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::Find()
{
char name[20] ,Id[10];
int x;
Student * p=NULL;
cout<<"\n\t\t*********************************\n";
cout<<"\t\t※ 1.按学生的姓名查找\n\t\t※ 2.按学生学号查找";
cout<<"\n\t\t*********************************\n请选择:";
cin>>x;
switch(x)
{
case 1:{cout<<"\t\t请输入要查找的学生的姓名:";cin>>name;
if(p=FindItem(name))
{
p->Next->Show();
cout<<"输入任意字符!继续……";
getch();
}
else
{
cout<<"\t\t没有找到该姓名的学生!"<<'\n'<<endl;
cout<<"输入任意字符!继续……";
getch();
}
}break;
case 2:
{
cout<<"\t\t请输入要查找的学生的学号:";cin>>Id;
if(p=FindID(Id))
{
p->Next->Show();
cout<<"输入任意字符!继续……";
getch();
}
else
{
cout<<"\t\t没有找到该学好的学生!"<<'\n'<<endl;
cout<<"输入任意字符!继续……";
getch();
}
}break;
}

}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌修改信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::ModifyItem() //修改信息
{
char name[20];
Student * p=NULL;
cout<<"\t\t请输入要修改的人的姓名:";cin>>name;
if(p=FindItem(name))
{
cout<<"\t\t已找到学生的信息,请输入新的信息!"<<endl;
p->Next->Input();
cout<<"修改成功!"<<endl;
cout<<"输入任意字符!继续……";
getch();
}
else
{
cout<<"\t\t没有找到!"<<endl;
cout<<"输入任意字符!继续……";
getch();
}
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌删除信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::RemoveItem() // 删除信息
{
char name[20];
Student * p=NULL,*temp=NULL;
cout<<"\t\t请输入要删除的学生的姓名:"<<endl;cin>>name;
if(p=FindItem(name))
{
temp=p->Next;
p->Next=p->Next->Next;
delete temp;
cout<<"\t\t删除成功!"<<endl;
cout<<"输入任意字符!继续……";
getch();
}
else
{
cout<<"\t\t没有找到!"<<endl;
cout<<"输入任意字符!继续……";
getch();
}
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::Swap(Student *p1, Student *p2)//交换两个combox变量的数据域
{
Student *temp=new Student;
strcpy(temp->name,p1->name);
strcpy(temp->Id,p1->Id);
temp->Cnum=p1->Cnum;
temp->Mnum=p1->Mnum;
temp->Enum=p1->Enum;
temp->sum=p1->sum;

strcpy(p1->name,p2->name);
strcpy(p1->Id,p2->Id);
p1->Cnum=p2->Cnum;
p1->Mnum=p2->Mnum;
p1->Enum=p2->Enum;
p1->sum=p2->sum;

strcpy(p2->name,temp->name);
strcpy(p2->Id,temp->Id);
p2->Cnum=temp->Cnum;
p2->Mnum=temp->Mnum;
p2->Enum=temp->Enum;
p2->sum=temp->sum;
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
int Studentmassage::ListCount()//统计当前链表的记录总数,返回一个整数
{
if(! Head)
return 0;
int n=0;
for(Student * p=Head->Next;p!=End;p=p->Next)
{
n++;
}
return n;
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::Sort()//对当前链表进行排序
{
cout <<"Sorting..."<<endl;
Student *p=NULL,*p1=NULL,*k=NULL;
int n=Studentmassage::ListCount();
if(n<2)
return;
for(p=Head->Next;p!=End;p=p->Next)
for(k=p->Next;k!=End;k=k->Next)
{
if(p->sum>k->sum)
{
Studentmassage::Swap(p,k);
}
}
cout <<"排序完成!"<<endl;
getch();
return;
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌保存函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::Save()
{
out.open("sort.txt");
for(Student *p=Head->Next;p!=End;p=p->Next)
out<<p->name<<"\t"<<p->Id<<"\t"<<p->Cnum<<"\t"
<<p->Mnum<<"\t"<<p->Enum<<"\t"<<p->sum<<'\n';
out.close();
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌主函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
int main()
{
int x,i=0;
bool quit=false;
cout<<"\t\t§§§§§§§§§§§§§§§§§§§§§§§§§§"<<endl;
for(i=0;i<3;i++)
cout<<"\t\t◎\t\t\t\t\t\t ◎"<<endl;
cout<<"\t\t◎★★★★【 欢迎进入学生成绩管理系统 】★★★★◎"<<endl;
for(i=0;i<3;i++)
cout<<"\t\t◎\t\t\t\t\t\t ◎"<<endl;
cout<<"\t\t§§§§§§§§§§§§§§§§§§§§§§§§§§\n"<<endl;;
Studentmassage Grade;
cout<<"按任意键开始……";
getch();
while(!quit)
{
system("cls");
Grade.ShowMenu();
cin>>x;
switch(x)
{
case 0:quit=true;break;
case 1:Grade.AddItem();break;
case 2:Grade.Display();break;
case 3:Grade.Sort();break;
case 4:Grade.Find();break;
case 5:Grade.RemoveItem();break;
case 6:Grade.ModifyItem();break;
}
}
return 0;
}

❾ 如何设计一个学生成绩管理系统

这个我以前做过的,
登陆界面要分2种情况,第一个是管理员登陆
第二个是学生登陆,要设定权限

管理员可以对学生进行管理,可以对学生的成绩进行增删改查的管理。
也可以对学生的信息进行操作,可以增加科目,可以注册学生,可以编辑学生所在的班级,以及班主任姓名。

学生界面的话,这个权限就很少了,可以查询自己的各科成绩。你可以把这个查询做的丰富一点。比如按科目查询,可以做模糊查询。可以查询本次考试的最高分等等。
因为这个系统比较简单,所以没什么好说的,
数据库我用的是sqlserver,表结构你可以自己想想啊,全说明了就没意思了。
希望对你能有帮助

❿ c语言实现设计一个学生成绩管理系统课程

参考代码如下,不过还是建议自己写一写比较好:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct student //结构体
{
char name[20]; //姓名
char number[20]; //学号
double math; //数学
double english; //英语
double chinese; //语文
double program; //程序
}s[50];

void head() //界面
{
printf(
"**********************************************************************\n"
"** **\n"
"** **\n"
"** 学生成绩管理系统 **\n"
"** **\n"
"** 1.信息录入 **\n"
"** 2.信息统计 **\n"
"** 3.信息浏览 **\n"
"** 4.信息查询 **\n"
"** 5.信息排序 **\n"
"** 6.信息删除 **\n"
"** 0.退出系统 **\n"
"** **\n"
"**********************************************************************\n"
);
}
void ru(struct student s[], int* n) //文件导入函数
{
FILE *p;
int i=*n;
if((p=fopen("数据.txt", "r"))==NULL)
{
n=n;
}
else
{
while(!feof(p))
{
fscanf(p, "%s%s%lf%lf%lf%lf\n", s[i].name, s[i].number, &s[i].math, &s[i].english, &s[i].chinese, &s[i].program);
i++;
*n=*n+1;
}
}
fclose(p);
}
void chu(struct student s[], int n)
{
FILE *p;
int i=0;
if((p=fopen("数据.txt", "w"))==NULL)
{
printf("无法打开此文件!");
}
else
{
while(i<n-1)
{
fprintf(p, "%s %s %lf %lf %lf %lf\n", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program);
i++;
}
fprintf(p, "%s %s %lf %lf %lf %lf", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program);
}
fclose(p);
}
void dayin(struct student s[], int n) //显示所有信息
{
int i;
double all=0.0;
printf("\n姓名\t\t学号\t\t数学\t英语\t语文\t程序\t总分\n");
for (i=0; i<n; i++)
{
all=s[i].math+s[i].english+s[i].chinese+s[i].program;
printf("%s\t\t%s\t\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program, all);
}
}
void shuru(struct student s[], int* n) //信息输入函数
{
int i=*n, j, k, m;
printf("请输入学生姓名:");
scanf("%s", s[i].name);
printf("请输入学生学号:");
for (j=0; ; j++)
{
m=0;
scanf("%s", s[i].number);
for (k=0; k<i; k++)
{
if (strcmp(s[i].number, s[k].number)==0)
{
m=m+1;
printf("学号重复,请重新输入学号:");
break;
}
}
if (m==0)
{
break;
}
}
printf("请输入数学成绩:");
scanf("%lf", &s[i].math);
printf("请输入英语成绩:");
scanf("%lf", &s[i].english);
printf("请输入语文成绩:");
scanf("%lf", &s[i].chinese);
printf("请输入程序成绩:") ;
scanf("%lf", &s[i].program);
printf("添加信息成功!\n");
*n=*n+1;
chu(s, *n);
}
void paixu(struct student s[], int n) //排序函数
{
int i, j;
double all1, all2;
struct student stu;
for (i=0; i<n-1; i++)
{
for (j=i+1; j<n; j++)
{
all1=s[i].math+s[i].english+s[i].chinese+s[i].program;
all2=s[j].math+s[j].english+s[j].chinese+s[j].program;
if (all1<all2)
{
stu=s[i];
s[i]=s[j];
s[j]=stu;
}
}
}
printf("排序后的数据:\n");
dayin(s, n);
}
void chazhao(struct student s[], int n) //查找函数
{
char name[20], num[20];
int m1, m2=0, i, j;
printf("1.按姓名查找\n2.按学号查找\n选择查询方式(1或2):");
scanf("%d", &m1);
if (m1==1)
{
printf("请输入您要查找的学生姓名:");
scanf("%s", name);
for (i=0; i<n; i++)
{
if (strcmp(s[i].name, name)==0)
{
m2=m2+1;
if (m2==1)
{
printf("\n姓名\t\t学号\t数学\t英语\t语文\t程序\n");
}
printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\n", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program);
}
}
if (m2==0)
{
printf("没有此学生信息!\n");
}
}
else if (m1==2)
{
printf("请输入您要查找的学生学号:");
scanf("%s", num);
j=0;
for (i=0; i<n; i++)
{
if (strcmp(s[i].number, num)==0)
{
m2=m2+1;
if (m2==1)
{
printf("\n姓名\t\t学号\t数学\t英语\t语文\t程序\n");
}
printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\n", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program);
}
}
if (m2==0)
{
printf("没有此学生信息!\n");
}
}
}
void shanchu(struct student s[], int* n) //删除函数
{
char num[20];
int m=0, i, j;
printf("请输入您要删除的学生学号:");
scanf("%s", num);
for (i=0; i<=*n; i++)
{
if (strcmp(s[i].number, num)==0)
{
m=m+1;
for (j=i; j<*n; j++)
{
s[j]=s[j+1];
}
*n=*n-1;
}
}
if (m==0)
{
printf("没有此学生信息!\n");
}
else
{
chu(s, *n);
printf("删除完毕!\n");
}
}
void allAndAver(struct student s[], int n)
{
int i ;
double all=0.0, aver=0.0;
for (i=0; i<n; i++)
{
all=s[i].math+s[i].english+s[i].chinese+s[i].program;
aver=all/4;
printf("%s\t\t%s\t\t%.1lf\t%.1lf\n", s[i].name, s[i].number, all, aver);
}
}
void Fail(struct student s[], int n) //统计单科不及格人数
{
int i, fail[4]={0};
for (i=0; i<n; i++)
{
if (s[i].math<60)
{
fail[0]++;
}
if (s[i].english<60)
{
fail[1]++;
}
if (s[i].chinese<60)
{
fail[2]++;
}
if (s[i].program<60)
{
fail[3]++;
}
}
printf("\n不及格信息:\n");
printf("数学不及格的人数为:%d人\n", fail[0]);
printf("英语不及格的人数为:%d人\n", fail[1]);
printf("语文不及格的人数为:%d人\n", fail[2]);
printf("程序不及格的人数为:%d人\n", fail[3]);
}
void Max(struct student s[], int n) //统计单科最高分人数
{
int i, counter[4]={0};
double max[4]={s[0].math, s[0].english, s[0].chinese, s[0].program};
for (i=0; i<n; i++)
{
if (s[i].math>max[0])
{
max[0]=s[i].math;
}
if (s[i].math>max[1])
{
max[1]=s[i].math;
}
if (s[i].math>max[2])
{
max[2]=s[i].math;
}
if (s[i].math>max[3])
{
max[3]=s[i].math;
}
}
for (i=0; i<n; i++)
{
if (s[i].math==max[0])
{
counter[0]++;
}
if (s[i].math==max[1])
{
counter[1]++;
}
if (s[i].math==max[2])
{
counter[2]++;
}
if (s[i].math==max[3])
{
counter[3]++;
}
}
printf("\n最高分信息:\n");
printf("数学最高分为:%.1lf, 人数为:%d人\n", max[0], counter[0]);
printf("英语最高分为:%.1lf, 人数为:%d人\n", max[1], counter[1]);
printf("语文最高分为:%.1lf, 人数为:%d人\n", max[2], counter[2]);
printf("程序最高分为:%.1lf, 人数为:%d人\n", max[3], counter[3]);
}
void Min(struct student s[], int n) //统计单科最低分人数
{
int i, counter[4]={0};
double min[4]={s[0].math, s[0].english, s[0].chinese, s[0].program};
for (i=0; i<n; i++)
{
if (s[i].math<min[0])
{
min[0]=s[i].math;
}
if (s[i].math<min[1])
{
min[1]=s[i].math;
}
if (s[i].math<min[2])
{
min[2]=s[i].math;
}
if (s[i].math<min[3])
{
min[3]=s[i].math;
}
}
for (i=0; i<n; i++)
{
if (s[i].math==min[0])
{
counter[0]++;
}
if (s[i].math==min[1])
{
counter[1]++;
}
if (s[i].math==min[2])
{
counter[2]++;
}
if (s[i].math==min[3])
{
counter[3]++;
}
}
printf("\n最低分信息:\n");
printf("数学最低分为:%.1lf, 人数为:%d人\n", min[0], counter[0]);
printf("英语最低分为:%.1lf, 人数为:%d人\n", min[1], counter[1]);
printf("语文最低分为:%.1lf, 人数为:%d人\n", min[2], counter[2]);
printf("程序最低分为:%.1lf, 人数为:%d人\n", min[3], counter[3]);
}
void tongji(struct student s[], int n) //统计函数
{
printf("统计信息如下:\n");
printf("\n姓名\t\t学号\t\t总分\t平均分\n");
allAndAver(s, n);
Max(s, n);
Min(s, n) ;
Fail(s, n);
}
int main() //主函数
{
int k, n=0;
ru(s, &n);
chu(s, n);
while (1)
{
head();
printf("\n请按对应的键选择相应的功能:");
scanf("%d",&k);
switch (k)
{
case 1:
shuru(s, &n);
break;
case 2:
tongji(s, n);
break;
case 3:
dayin(s, n);
break;
case 4:
chazhao(s, n);
break;
case 5:
paixu(s, n);
break;
case 6:
shanchu(s, &n);
break;
case 0:
exit(1);
break;
default : printf("请输入正确的命令!\n");
}
system("pause");
system("cls");
}
return 0;
}

热点内容
武汉大学学生会辅导员寄语 发布:2021-03-16 21:44:16 浏览:612
七年级学生作文辅导学案 发布:2021-03-16 21:42:09 浏览:1
不屑弟高考成绩 发布:2021-03-16 21:40:59 浏览:754
大学毕业证会有成绩单 发布:2021-03-16 21:40:07 浏览:756
2017信阳学院辅导员招聘名单 发布:2021-03-16 21:40:02 浏览:800
查询重庆2018中考成绩查询 发布:2021-03-16 21:39:58 浏览:21
结业考试成绩怎么查询 发布:2021-03-16 21:28:40 浏览:679
14中医医师资格笔试考试成绩查分 发布:2021-03-16 21:28:39 浏览:655
名著赏析课程标准 发布:2021-03-16 21:27:57 浏览:881
北京大学商业领袖高端培训课程 发布:2021-03-16 21:27:41 浏览:919