郑州大学
实 训 报 告
实训名称: “学生成绩管理系统”设计
姓 名:
院 (系): 软件学院
专业班级:
学 号:
指导教师:
成 绩:
时间:年2月日至 年 月 31日
目录
实训任务书………………………………………………………I
实训进度日历……………………………………………………IV
实训报告…………………………………………………………1
1. 软件需求分析………………………………………………1
2. 软件规格说明………………………………………………1
3. 系统框架和思路……………………………………………1
4. 流程图………………………………………………………2
实训感想………………………………………………………….3
附录……………………………………………………………….4
郑州大学软件学院
学生实训任务书
一、题目
“学生成绩管理系统”设计
二、学生信息
专业
学号
姓名
三、用户需求及约束条件
1、用C语言实现基于Dos操作系统的“学生成绩管理系统”。
2、设计“学生成绩管理系统”的用户界面,系统启动进入后,只能通过界面菜单指令才能退出。
3、“学生成绩管理系统”具有以下功能:
1)系统启动后,弹出一个用户界面,能实现人机交互的功能。而且只能通过界面菜单命令实现各种功能(包括系统退出功能)。
2)录入学生成绩(信息有:班级、姓名、学号、五门课程成绩);
3)计算学生五门功课的平均成绩并存档。
下面的功能必须是第3)项功能完成以后才能进行。
4)输出学生的信息和对应的原始成绩以及平均成绩;
5)按平均成绩进行排序,输出排序后的学生信息以及对应的课程成绩和平均成绩。
6)对成绩修改,分别有两种模式,一种是按学号查找后进行修改;另一种是按姓名查找后进行修改;修改后重新排序学生的顺序,并输出学生信息和对应课程成绩和平均成绩。
7)增补遗漏的学生以及对应的信息和对应的课程成绩,并计算出平均成绩,增补以后重新排序学生顺序,并输出学生信息和对应课程成绩和平均成绩。
8)附加功能:把学生信息和对应的课程成绩和平均成绩存入到文件中。
9)附加功能:输出文件中的内容。
10)附加功能:试着从文件中导入数据到成绩管理系统中,然后进行管理。
四、设计要求、技术参数及设计规格
1、设计的系统能够运行,基本功能实现;
2、撰写实训报告,实训报告中的内容包括:
1)软件需求分析;
2)软件规格说明和设计要求;
3)对数据的管理方案;
4)“学生成绩管理系统”设计的思路和整体框架;
5)各功能或者模块实现的思路(或者用带注释的程序代替)并交待模块之间的接口关系;
6)“学生成绩管理系统”设计的结果(可以用一些屏幕拷贝的图来补充说明)。
3、程序设计环境为 Turbo C++ 3.0或Visual C++ 6.0。
4、实训结束前提交纸质实训报告及其word文档、系统的源程序文件和可执行文件,将这三个文件压缩后以“学号后两位姓名”的形式命名,上传到FTP上自己所在班级对应的文件夹里。
FTP地址:实训报告要求按以下顺序装订:
l 封面
l 简单目录
l 任务书
l 实训进度日历
l 实训报告正文
l 实训感想
l [附件]
6、所有的设计工作需要同学自己真实地、独立地完成。
五、工作量
六、考核形式、考核时间、考核指标及成绩评定
实训成绩由下面构成:
实训纪律、实训态度和平时表现占20%;实训结果占30%;实训报告占30%;实践操作能力占20%。
考核形式:
1)老师每日对学生的考察、评估和考核;
2)最后对实训项目完成的质量进行考核和验收。
完 成 期 限:年12月31日
指导教师签章:
专业负责人签章:
教学院长签章
年12月10日
实训进度日历
实训报告
(1)、成绩录入功能(信息有:班级、姓名、学号、五门课程成绩)
(2)、求解学生个人平均成绩并存档
(3)、输出学生的信息和对应的原始成绩以及平均成绩
(4)、按平均成绩对学生信息进行排序,排序后重新输出
(5)、对成绩修改,分别有两种模式,一种是按学号查找和修改;另一种是按姓名查找和修改;修改后重新排序,并输出学生信息和成绩。
(6)、增补信息(个人信息和课程成绩)功能,并重新排序和输出。
(7)、附加功能,用文件对信息进行管理。
(8)、每次输入口令,系统接收时都要接收到“enter”,为保证程序正常运行每次输入后都要对键盘进行清空。
2.软件规格说明
(1)、系统用户界面尽量居中、美观,所有的命令简单有效。
(2)、具有人机交互功能;
(3)、通过菜单选择功能;
(4)、只能由菜单退出系统;
(5)、操作信息提示(界面友好);
(6)、拦截一些误操作错误;
(7)、按原始成绩格式输出。
3、系统框架和思路
(1)、功能分类,把一个问题分解为多个子问题。
(2)、考虑数据结构:结构体数组;结构体链表;文件;数据库文件。
(3)、功能逐步细化,自顶向下设计,最小的模块用函数实现。
(4)、先搭框架,用空函数实现。
(5)、计算平均成绩及最大最小,用到排序法,冒泡排序法适用于数组排序法。
(6)、运用switch语句,这样可以为用户提供具有选择性的多功能循环操作。
(7)、使用if()else语句实现一些选择操作
(8)、使用结构体表变量:将不同类型的数据结合成一个有机整体
4、流程图
总结:
通过这次实际操作,从开始的迷茫无知到现在的清晰思路,真正明白了它的用途,虽然还有很多不足之处,但是却感受到了不一样的思想方式,增加了我学习软件技术的兴趣,认识到了自己必须“路漫漫其修远兮,吾将上下而求索”。这次实训是老师给了范例程序,经过自己的改写,基本实现了要求,感谢老师您对我们的指导及对您的无比的负责任表示深深的敬佩,谢谢您,老师!
在实际操作过程中对犯的一些错误还会有意外的收获,也渐渐的明白了C语言的真正用途。在具体操作中对这学期所学的C语言的理论知识得到巩固,达到实训的基本目的,也发现自己的不足之出,在以后的上机中应更加注意,同时体会到C语言具有的语句简洁,特别是对数组和循环有了深刻的理解,有一种收获良多的喜悦 ,而这一切都是老师您对我们的谆谆教诲,再次感谢您,老师!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student
{
char name[100];
char num[3];
float chinese;
float c_program;
float english;
float math;
float sum;
float average;
};
struct student s[300];
int Number=0;
int dq(struct student s[])
{
FILE *fp=NULL;
int i=0;
fp=fopen("C:student.dat","rb");
while(fread(&s[i],sizeof(struct student),1,fp))
i++;
fclose(fp);
return i;
}
void menu()
{
printf("\t*****************************************************************\n");
printf("\t*\t\t\t\t\t\t\t\t*\n");
printf("\t*\t\t\t欢迎使用学生成绩管理系统\t\t\t*\n");
printf("\t*\t\t\t\t\t\t\t\t*\n");
printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("\t* [1] 增加学生信息 \t\t[2] 查看学生信息 \t\t*\n");
printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("\t* [3] 查找学生成绩 \t\t[4] 删除学生信息 \t\t*\n");
printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("\t* [5] 修改学生成绩 \t\t[6] 成绩排序 \t\t*\n");
printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("\t* [7] 输出挂科人数及成绩 \t[0] 退出系统 \t\t*\n");
printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("\t* \t\t\t*\n");
printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("\t* \t\t\t*\n");
printf("\t*****************************************************************\n");
}
void bc(struct student *s)
{
FILE *fp=NULL;
fp=fopen("C:student.dat","ab+");
fwrite(s,sizeof(struct student),1,fp);
fclose(fp);
}
void add()
{
int n=0;
int i=0,j=0,k=0;
struct student S;
printf("\t请输入要增加学生成绩个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
k=0;
printf("\t输入第%d个同学信息\n",i+1);
printf("\t请输入学生的姓名:");
scanf("%s",&S.name);
printf("\t学号:");
scanf("%s",&S.num);
for (j=0;j<Number;j++)
{
if(strcmp(S.num,s[i].num)==0)
{
k=1;
}
}
if(k!=0)
{
printf("\t添加失败,学号重复!\n");
}
else
{
printf("\t[语文]成绩:");
scanf("%f",&S.chinese);
printf("\t[数学]成绩:");
scanf("%f",&S.math);
printf("\t[英语]成绩:");
scanf("%f",&S.english);
printf("\t[C语言设计]成绩:");
scanf("%f",&S.c_program);
S.sum=S.chinese+S.math+S.english+S.c_program;
S.average=S.sum/4;
}
}
if(k==0)
{
s[Number++]=S;
bc(&S);
printf("\t\t\t\t ==>添加成功<==\n\n");
}
}
void select()
{
int i=0,j=0;
for(i=0;i<Number;i++)
{
j++;
}
printf("\t以下是全部 %d 名学生的成绩:\n",j);
printf("姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n");
for(i=0;i<Number;i++)
{
printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\t\n",s[i].name,s[i].num,s[i].chinese,s[i].math,s[i].english,s[i].c_program,s[i].sum,s[i].average);
}
}
void xhxg()
{
FILE *fp=NULL;
char id[3];
int i=0,j=0,k=0;
int XH=-1;
printf("\t请输入要修改的学生学号:");
scanf("%s",id);
for(i=0;i<Number;i++)
{
if (strcmp(id,s[i].num)==0)
{
XH=i;
}
}
if(XH==-1)
{
printf("\t不存在该学生信息!\n");
}
else
{
printf("\t姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n");
printf("\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\n",s[XH].name,s[XH].num,s[XH].chinese,s[XH].math,s[XH].english,s[XH].c_program,s[XH].sum,s[XH].average);
printf("\t请重新输入该学生信息:\n");
printf("\t姓名:");
scanf("%s",s[XH].name);
printf("\t学号:");
scanf("%s",s[XH].num);
for (j=0;j<Number;j++)
{
if(strcmp(s[XH].num,s[j].num)==0&&XH!=j)
{
k=1;
}
}
if(k!=0)
{
printf("\t修改失败,学号重复!\n");
}
else
{
printf("\t[语文]成绩:");
scanf("%f",&s[XH].chinese);
printf("\t[数学]成绩:");
scanf("%f",&s[XH].math);
printf("\t[英语]成绩:");
scanf("%f",&s[XH].english);
printf("\t[C语言设计]成绩:");
scanf("%f",&s[XH].c_program);
s[XH].sum=s[XH].chinese+s[XH].math+s[XH].english+s[XH].c_program;
s[XH].average=s[XH].sum/4;
for (i=0;i<Number;i++)
{
fwrite(&s[i],sizeof(struct student),1,fp);
}
fclose(fp);
printf("\t\t\t\t==>修改成功<==\n");
}
}
}
void xmxg()
{
FILE *fp=NULL;
char name[60];
int i=0,j=0,k=0;
int XM=-1;
printf("\t请输入要修改的学生姓名:");
scanf("%s",name);
for (i=0;i<Number;i++)
{
if (strcmp(name,s[i].name)==0)
{
XM=i;
}
}
if(XM==-1)
{
printf("\t不存在该学生信息!\n");
}
else
{
printf("\t姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n");
printf("\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\n\n",s[XM].name,s[XM].num,s[XM].chinese,s[XM].math,s[XM].english,s[XM].c_program,s[XM].sum,s[XM].average);
printf("\t请重新输入该学生信息:\n");
printf("\t姓名:");
scanf("%s",s[XM].name);
printf("\t学号:");
scanf("%s",s[XM].num);
for (j=0;j<Number;j++)
{
if(strcmp(s[XM].num,s[j].num)==0&&XM!=j)
{
k=1;
}
}
if(k!=0)
{
printf("\t修改失败,学号重复!\n");
}
else
{
printf("\t[语文]成绩:");
scanf("%f",&s[XM].chinese);
printf("\t[数学]成绩:");
scanf("%f",&s[XM].math);
printf("\t[英语]成绩:");
scanf("%f",&s[XM].english);
printf("\t[C语言设计]成绩:");
scanf("%f",&s[XM].c_program);
fp=fopen("C:student.dat","wb");
s[XM].sum=s[XM].chinese+s[XM].math+s[XM].english+s[XM].c_program;
s[XM].average=s[XM].sum/4;
for (i=0;i<Number;i++)
{
fwrite(&s[i],sizeof(struct student),1,fp);
}
fclose(fp);
printf("\t\t\t\t==>修改成功<==\n");
}
}
}
void fh()
{
printf("\t\t\t ==>按Enter键返回主菜单<==");
}
void xmcz()
{
char name[7];
int i=0,j=0;
printf("\t请输入要查找的学生姓名:");
scanf("%s",name);
system("cls");
printf("\t查找结果:\n");
for (i=0;i<Number;i++)
{
if (strcmp(name,s[i].name)==0)
{
j=1;
printf("姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n");
printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\t\n",s[i].name,s[i].num,s[i].chinese,s[i].math,s[i].english,s[i].c_program,s[i].sum,s[i].average);
}
}
if (j==0)
{
printf("\t不存在该学生信息!\n");
}
}
void xhcz()
{
char id[7];
int i=0,j=0;
printf("\t请输入要查找的学生学号:");
scanf("%s",id);
system("cls");
printf("\t查找结果:\n");
for (i=0;i<Number;i++)
{
if (strcmp(id,s[i].num)==0)
{
j=1;
printf("姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n");
printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\t\n",s[i].name,s[i].num,s[i].chinese,s[i].math,s[i].english,s[i].c_program,s[i].sum,s[i].average);
}
}
if (j==0)
{
printf("\t不存在该学生信息!\n");
}
}
void xmsc()
{
FILE *fp=NULL;
char name[60];
int i=0,j=0,k=0;
printf("\t请输入要删除的学生姓名:");
scanf("%s",name);
for(i=0;i<Number;i++)
{
if (strcmp(name,s[i].name)==0)
{
printf("\t删除的学生信息:\n姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n");
printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\t\n",s[i].name,s[i].num,s[i].chinese,s[i].math,s[i].english,s[i].c_program,s[i].sum,s[i].average);
for (j=i;j<Number-1;j++)
{
s[j]=s[j+1];
}
Number--;
k=1;
}
}
fp=fopen("C:student.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&s[i],sizeof(struct student),1,fp);
}
fclose(fp);
if(k==1)
printf("\t\t\t\t==>删除成功<==\n");
else
printf("\t\t\t\t==>信息不存在<==\n");
}
void cz()
{
int n=0;
printf("\t请选择查找方式:\n");
printf("\t1 按姓名查找\n");
printf("\t2 按学号查找\n");
scanf("%d",&n);
switch(n)
{
case 1: xmcz();break;
case 2: xhcz();break;
default: printf("\t输入有误,结束!\n");break;
}
}
void xhsc()
{
FILE *fp=NULL;
char id[60];
int i=0,j=0,k=0;
printf("\t请输入要删除的学生学号:");
scanf("%s",id);
for(i=0;i<Number;i++)
{
if (strcmp(id,s[i].num)==0)
{
printf("\t删除的学生信息:\n姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n");
printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t\n",s[i].name,s[i].num,s[i].chinese,s[i].math,s[i].english,s[i].c_program,s[i].sum,s[i].average);
for (j=i;j<Number-1;j++)
{
s[j]=s[j+1];
}
Number--;
k=1;
}
}
fp=fopen("C:student.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&s[i],sizeof(struct student),1,fp);
}
fclose(fp);
if(k==1)
printf("\t\t\t\t==>删除成功<==\n");
else
printf("\t\t\t\t==>信息不存在<==\n");
}
void sh()
{
int n=0;
printf("\t请选择删除方式:\n");
printf("\t1 按姓名删除\n");
printf("\t2 按学号删除\n\t");
scanf("%d",&n);
switch(n)
{
case 1: xmsc();break;
case 2: xhsc();break;
}
}
void px()
{
struct student P;
int X=0;
int i=0,j=0,k=0;
for(i=0;i<Number-1;i++)
{
for(j=0;j<Number-1-i;j++)
{
if(s[j].average>s[j+1].average)
{
P=s[j];
s[j]=s[j+1];
s[j+1]=P;
}
}
}
printf("\t你想输出前几名的成绩:");
scanf("%d",&X);
if (X>Number)
{
X=Number;
}
i=1;
printf("\t\t\t名次\t姓名\t学号\t平均成绩\n");
for(k=Number-1;k>(Number-X-1);k--)
{
printf("\t\t\t%d\t%s\t%s\t%.2f\n",i,s[k].name,s[k].num,s[k].average);
if(s[k].average!=s[k-1].average)
{i++; }
}
}
void bjg()
{
int i=0,j=0;
for (i=0;i<Number;i++)
{
if(s[i].chinese<60||s[i].math<60||s[i].english<60||s[i].c_program<60)
{j++;}
}
if(j==0)
printf("\t不存在不及格的学生!\n\n");
else
{
printf("\t以下是 %d 名不及格的学生信息:\n",j);
printf("姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n");
}
for (i=0;i<Number;i++)
{
if(s[i].chinese<60||s[i].math<60||s[i].english<60||s[i].c_program<60)
{
printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\t\n",s[i].name,s[i].num,s[i].chinese,s[i].math,s[i].english,s[i].c_program,s[i].sum,s[i].average);
}
}
}
void xg()
{
int way=0;
printf("\t请选择修改查找方式\n");
printf("\t1 按姓名查找修改\n");
printf("\t2 按学号查找修改\n\t");
scanf("%d",&way);
switch(way)
{
case 1: xmxg();
break;
case 2: xhxg();
break;
default: printf("\t输入有误,结束!\n");
break;
}
}
int main()
{
int choose=0;
FILE *fp=NULL;
char yesorno;
if((fp=fopen("C:student.dat","rb"))==NULL)
{
printf("\n\t\t\t==>提示:文件不存在,是否要创建一个?(y/n)\n");
scanf("%c",&yesorno);
if(yesorno=='y'||yesorno=='Y')
{
fp=fopen("C:student.dat","wb");
fclose(fp);
}
else
exit(0);
}
else
{
Number=dq(s);
}
system("cls");
while(true)
{
Number=dq(s);
menu();
printf("\n\t\t\t==>请选择操作:");
scanf("%d",&choose);
system("cls");
switch(choose)
{
case 0: exit(0);
break;
case 1: add();
fh();break;
case 2: select();
fh();break;
case 3: cz();
fh();break;
case 4: sh();
fh(); break;
case 5:xg();
fh();break;
case 6: px();
fh();break;
case 7: bjg();
fh(); break;
default:
printf("\t输入错误!\n");
fh();
break;
}
fflush(stdin);
getchar();
system("cls");
}
}
C语言课程设计报告一问题描述题目七学生成绩管理系统设计学生成绩信息包括学期学号班别姓名四门课程成绩语文数学英语和计算机等主要功能1…
郑州大学实训报告实训名称学生成绩管理系统设计姓名院系软件学院专业班级学号指导教师成绩时间年2月日至年月31日目录实训任务书I实训进…
实训报告题目学生成绩管理系统院系信息科技学院专业电子信息科学与技术姓名周谒真学号1052400101指导教师王小琼日期20xx年7…
学生成绩管理系统实验报告实验名称学生成绩管理系统实验目的1利用所学的三种程序基本结构以及数组用户自定义函数进行一个简单管理系统的设…
移通学院C语言程序设计报告书设计名称学生成绩管理系统专业指导老师班级姓名学号座号时间一实验目的1在编辑应用程序过程中逐步加深对C语…
《C语言程序设计》课程设计报告专业:班级:姓名:指导教师:二零##年十二月二十六日目录一、设计题目2二、设计目的2三、设计内容23…
福建师范大学人民武装学院C语言程序设计报告书设计名称学生成绩管理系统专业软件工程指导老师陈琳姓名黄强学号119xx20xx0262…
学生信息管理系统HUNANUNIVERSITY程序设计训练报告学生姓名学生学号专业班级指导老师院长系主任20xx年5月25日第1页…
实训报告题目学生信息管理系统院系信息科技学院专业电子信息工程姓名殷浩学号1152100135指导教师杨呈永日期20xx年6月26日…
C语言课程设计报告一问题描述题目七学生成绩管理系统设计学生成绩信息包括学期学号班别姓名四门课程成绩语文数学英语和计算机等主要功能1…
学生成绩管理系统课程设计报告书学生成绩管理系统单位分院班级学号姓名指导老师完成日期20xx年7月14日1学生成绩管理系统内容摘要摘…