资源描述
.. -
X X 大学
C S U
C语言程序设计实践报告
题 目 学生成绩管理系统
学生XX 剽悍的小白兔
指导教师 T Z
学 院 信息科学与工程学院
专业班级 电气信息类XXXX班
完成时间 20XX年X月
一、 设计目的
通过课程设计使学生综合使用所学过的C语言程序设计知识,掌握构造化程序设计的根本思路和法,在所掌握的根本知识和技能的根底上,进一步提高自学能力和查找资料的能力,解决一定程度的复杂的构造化程序设计问题,加深对所学知识的理解与掌握,增强学生我们利用自己所学知识解决实际问题的能力,为以后的程序开发打下根底。
二、系统分析
随着科学技术的不断开展,对人们的工作水平要求也越来越高,然而计算机就成了帮助人们解决这个问题的工具,熟练的运用计算机,它能为人们解决多工作上的难题。对与一个管理人员来说,快而迅速的了解各种信息是很关键的。使用计算机在C语言环境下编写相关的管理系统就能到达对相关信息的录入、显示;对记录的查询极其修改等目的。
基于同样的C语言环境,对其提供的头文件*h〔stdio.h ,stdlib.h,string.h,malloc.h,mem.h,ctype.h,conio.h等〕的不同组合,能为我们解决多多的问题,因此,用它来编写成绩管理管理系统是可行的。
三、学生成绩管理系统主要功能
² 数据的录入:如录入学生的根本信息,以及该学生选修课程的根本信息;
² 数据的修改:如修改指定学号、或者指定XX的学生信息,或者修改其选修课程信息;
² 数据的插入:插入某个学生信息;
² 数据的查询:如按学号查询、按XX查询等;
² 数据的删除:如删除指定学号、或者指定XX的学生及其选修课程信息;
² 平均成绩的计算:计算每个学生各门功课的平均成绩,并按平均成绩从高到低的次序输出学生信息;
² 列出不及格学生清单〔学号、XX、不及格的课程和成绩〕。
四、功能的实现与要求
1.数据录入:数据录入的功能是将需要的数据进展录入,用于后面的各项操作。实现:用输入函数对数据进展录入,先确定学生的个数,再用一个循环进展输入,选修课程数量亦然。
2. 数据修改:数据修改的主要功能是为修改数据输入出现的错误,实现:先指定该生的学号,找到该生,再输出该生当前的信息,用一个if语句对数据进展修改,再用一个循环语句对选修课信息进展修改。
3. 数据插入: 数据插入的主要功能是在数据录入之后,为防止数据输入的遗漏,实现:分为两个局部,第一个是插入第一个位置,第二是插入第一个位置之后,把当前的位置赋给后面的加以实现。
4.数据查询: 数据查询的主要功能是在数据输入之后进展分类再现,实现:分为输出所有数据,按学号查询,按XX查询,当输入的数据满足条件时即输出所要求的。
5.数据删除:数据删除的主要功能是在数据录入、数据插入和数据修改完成之后对无用数据进展删除,实现:输入学号,满足条件时即把后一个数值赋给前一个数值,到达删除的目的。
6.平均值计算:平均值计算的主要功能是求平均值,再对其进展排序,实现:用公式进展计算求平均值,之后便是排序问题,求最大值,然后依次输出各最大值,即实现了排序功能。
7. 列出不及格学生清单:这局部的主要功能是列出不及格学生清单,实现:用一个判断语句,当分数小于60时,即输出相应的学生信息即可。
五、系统框图
登录模块
学生根本信息
查询
录入修改
班机信息管理
学生课程管理
输入修改
查询
学生成绩管理
输入修改
查询
退出系统
六、系统流程图
开场
完毕
选择操作
输入数据
排序
显示数据
查询
删除
主菜单
插入数据
退出系统
按学号
按XX
保存数据吧
按景平均成绩
选择7
选择6
选择5
选择4
选择3
选择2
选择1
选择8
按平均成绩上下i
读取数据吧
选择8
班级
学号
性别
XX
七、 界面设计
·系统运行界面〔局部〕如下:
图1——主界面
图2——主菜单
图3——录入数据
图4——修改数据
图5——插入数据
图6——数据查询
图7——计算平均成绩
图8——不及格学生统计
八、程序代码
#include<stdio.h>
#include<windows.h>
#include<string.h>
#include <stdlib.h>
main()
{
int i,w=0,u/*被选中学生的下标*/,f/*科目数量*/;int o=0/*学生总数*/,p=0,g[50]/*每个学生的选修课程数量*/,a,x,b/*新增学生个数*/,xx/*当前学生班级*/;char xm[50]/*当前学生XX*/,h[10];char oo/*判断是否继续*/,q;float s[50]/*平均成绩*/,max,al[50];long qq;
struct student
{
int i;/*班级*/
long j;/*学号*/
char m[30];/*XX*/
char n[10];/*性别*/
int x;/*年龄*/
}c[50];
struct score
{
int q;/*课程编号*/
char w[50];/*课程名称*/
float e;/*学分*/
float r;/*考试成绩*/
float t;/*平时成绩*/
double y;/*综合成绩*/
}z[50][10];
printf("\n\n*******************************************************************************\n\n\n 欢 迎 进 入\n\n 学生成绩管理系统\n\n\n 设计者:剽悍的小白兔 090909XXXX\n\n 指导教师:TZ\n\n XX大学 信息科学与工程学院 电气09XX班\n\n\n 2010年7月\n\n\n*******************************************************************************\n Press Enter to Continue");
getchar();system("CLS");
while(1)
{
system("CLS");
printf("\n\n*******************************************************************************\n 系统主菜单\n\n1.录入数据\n\n2.修改数据\n\n3.插入数据\n\n4.数据查询\n\n5.删除数据\n\n6.平均成绩计算\n\n7.列出不及格学生清单\n\n8.退出系统\n\n");
printf("请输入一个数字来选择目录:\n\n");
scanf("%d",&i);
system("CLS");
if(i==1)/*1.录入数据*/
{
printf(" 录入数据\n\n");
while(1)
{
printf("\n请输入要录入的学生个数:\n");
scanf("%d",&b);
if(b<1) printf("\n输入错误!!!\n请输入要录入的学生个数\n");
else if(b>=1)
{
for(a=0;a<b;a++)
{
printf("\n请输入第%d个学生的根本信息:\n\n班级 学号 XX 性别 年龄\n",a+1);
scanf("%d %ld %s %s %d",&c[o+a].i,&c[o+a].j,&c[o+a].m,&c[o+a].n,&c[o+a].x);
printf("\n请输入此学生选修课程数量:\n");
scanf("%d",&f);
g[o+a]=f;
for(i=0;i<f;i++)
{
printf("\n请输入该学生第%d门选修课程信息:\n\n课程编号 课程名称 学分 考试成绩 平时成绩\n",i+1);
scanf("%d %s %f %f %f",&z[o+a][i].q,&z[o+a][i].w,&z[o+a][i].e,&z[o+a][i].r,&z[o+a][i].t);
}
}
}
o=p+b;
p=b;
getchar();
printf("\n是否继续输入y/n?\n");
scanf("%s",&h);
if(strcmp(h,"n")==0) break;
else if(strcmp(h,"y")==0) system("CLS");
}
}
else if(i==2)/*2.修改数据*/
{
printf(" 修改数据\n");
if(o==0) printf("\n系统没有学生信息");
else
{
while(1)
{
printf("\n请输入要修改数据的学生的学号:\n");
scanf("%ld",&qq);w=0;
for(a=0;a<o;a++)
{
if(qq==c[a].j)
{
printf("该学生当前信息:班级:%d 学号:%ld XX:%s 性别:%s 年龄:%d\n",c[a].i,c[a].j,c[a].m,c[a].n,c[a].x);
u=a;w=w+1;
}
}
if(w==0) {printf("输入错误!!!");break;}
while(1)
{
printf("\n请输入数字选择要修改的数据:\n1.班级 2.学号 3.XX 4.性别 5.年龄 6.选修课程信息\n");
scanf("%d",&i);
if(i!=6) printf("\n请输入修改后数据:\n");
if(i==1) scanf("%d",&c[u].i);
else if(i==2) scanf("%ld",&c[u].j);
else if(i==3) scanf("%s",&c[u].m);
else if(i==4) scanf("%s",&c[u].n);
else if(i==5) scanf("%d",&c[u].x);
else if(i==6)
{
printf("\n 该学生选修课当前信息:");
for(i=0;i<g[u];i++)
{
printf(" 课程编号:%d 课程名称:%s 学分:%3.1f 考试成绩:%3.1f 平时成绩:%3.1f\n",z[u][i].q,z[u][i].w,z[u][i].e,z[u][i].r,z[u][i].t);
}
printf("\n请输入要修改的数据的当前选修课程编号:\n");
scanf("%d",&x);w=0;
for(i=0;i<g[u];i++)
{
if(x==z[u][i].q)
{
printf("\n请输入数字选择要修改的数据:1.课程编号 2.课程名称 3.学分 4.考试成绩 5.平时成绩\n");
scanf("%d",&xx);
printf("\n请输入修改后数据:\n");
if(xx==1) scanf("%d",&z[u][i].q);
else if(xx==2) scanf("%s",&z[u][i].w);
else if(xx==3) scanf("%f",&z[u][i].e);
else if(xx==4) scanf("%f",&z[u][i].r);
else if(xx==5) scanf("%f",&z[u][i].t);
else printf("输入错误!!!");
w=w+1;
}
}
if(w==0) printf("输入错误!!!");
}
else {printf("输入错误!!!");break;}
printf("\n\n是否继续修改此学生信息y/n?\n");
scanf("%s",&h);
if(strcmp(h,"n")==0) break;
else if(strcmp(h,"y")==0) system("CLS");
}
printf("\n\n是否继续下一学生信息y/n?\n");
scanf("%s",&h);
if(strcmp(h,"n")==0) break;
else if(strcmp(h,"y")==0) system("CLS");
}
}
}
else if(i==3)/*3.插入数据*/
{
printf(" 插入数据");
while(1)
{
printf("\n是否要将信息插入到第一个位置y/n?\n\n");
scanf("%s",&h);
if(strcmp(h,"n")==0)
{
printf("\n请输入要插入位置前一个学生的学号:");
scanf("%ld",&qq);
for(a=0;a<o;a++)
{
if(qq==c[a].j)
{
printf("\n请输入要添加的学生信息:\n班级 学号 XX 性别 年龄\n");
for(u=o;u>a;u--)
{
c[u+1]=c[u];
for(i=0;i<g[u];i++)
z[u+1][i]=z[u][i];
g[u+1]=g[u];
}
scanf("%d %ld %s %s %d",&c[a+1].i,&c[a+1].j,&c[a+1].m,&c[a+1].n,&c[a+1].x);
o=o+1;
printf("是否添加该学生的选修课程信息y/n?");
scanf("%s",&h);
if(strcmp(h,"y")==0)
{
printf("\n请输入此学生选修课程数量:\n");
scanf("%d",&f);
g[a+1]=f;
printf("\n请分别输入该学生选修课程信息:\n\n课程编号 课程名称 学分 考试成绩 平时成绩\n");
for(i=0;i<f;i++)
{
scanf("%d %s %f %f %f",&z[a+1][i].q,&z[a+1][i].w,&z[a+1][i].e,&z[a+1][i].r,&z[a+1][i].t);
}
}
}
}
}
else if(strcmp(h,"y")==0)
{
printf("\n请输入要添加的学生信息:\n班级 学号 XX 性别 年龄\n");
for(u=o;u>=0;u--)
{
c[u+1]=c[u];
for(i=0;i<g[u];i++)
z[u+1][i]=z[u][i];
g[u+1]=g[u];
}
scanf("%d %ld %s %s %d",&c[0].i,&c[0].j,&c[0].m,&c[0].n,&c[0].x);
o=o+1;
printf("是否添加该学生的选修课程信息y/n?\n");
scanf("%s",&h);
if(strcmp(h,"y")==0)
{
printf("\n请输入此学生选修课程数量:\n");
scanf("%d",&f);
g[0]=f;
printf("\n请分别输入该学生选修课程信息:\n\n课程编号 课程名称 学分 考试成绩 平时成绩\n");
for(i=0;i<f;i++)
{
scanf("%d %s %f %f %f",&z[0][i].q,&z[0][i].w,&z[0][i].e,&z[0][i].r,&z[0][i].t);
}
}
}
printf("\n\n是否继续插入下一学生信息y/n?\n");
scanf("%s",&h);
if(strcmp(h,"n")==0) break;
else if(strcmp(h,"y")==0) system("CLS");
}
}
else if(i==4)/*4.数据查询*/
{
printf(" 数据查询\n");
for(a=0;a<o;a++)
{
for(i=0;i<g[a];i++)
{
z[a][i].y=z[a][i].r*0.7+z[a][i].t*0.3;
}
}
while(1)
{
printf("\n\n*******************************************************************************\n\n 数 据 查 询\n\n\n1.显示全部数据\n\n2.按学号查询\n\n3.按XX查询\n\n4.返回主菜单");
printf("\n\n请输入一个数字来选择目录:\n\n");
scanf("%d",&p);
if(p==1)
{
for(a=0;a<o;a++)
{
printf("班级:%d 学号:%ld XX:%s 性别:%s 年龄:%d\n",c[a].i,c[a].j,c[a].m,c[a].n,c[a].x);
for(i=0;i<g[a];i++)
printf(" 课程编号:%d 课程名称:%s 学分:%3.1f 考试成绩:%3.1f 平时成绩:%3.1f 综合成绩:%3.1f\n",z[a][i].q,z[a][i].w,z[a][i].e,z[a][i].r,z[a][i].t,z[a][i].y);
}
}
else if(p==2)
{
printf("请输入要查询学生的学号:\n");
scanf("%ld",&qq);w=0;
for(a=0;a<o;a++)
{
if(qq==c[a].j)
{
printf("班级:%d 学号:%ld XX:%s 性别:%s 年龄:%d\n",c[a].i,c[a].j,c[a].m,c[a].n,c[a].x);
for(i=0;i<g[a];i++)
printf(" 课程编号:%d 课程名称:%s 学分:%3.1f 考试成绩:%3.1f 平时成绩:%3.1f 综合成绩:%3.1f\n",z[a][i].q,z[a][i].w,z[a][i].e,z[a][i].r,z[a][i].t,z[a][i].y);
w=w+1;
}
}
if(w==0) printf("此学号不存在!\n");
}
else if(p==3)
{
printf("请输入要查询学生的XX:\n");
scanf("%s",&xm);w=0;
for(a=0;a<o;a++)
{
if(strcmp(xm,c[a].m)==0)
{
printf("班级:%d 学号:%ld XX:%s 性别:%s 年龄:%d\n",c[a].i,c[a].j,c[a].m,c[a].n,c[a].x);
for(i=0;i<g[a];i++)
printf(" 课程编号:%d 课程名称:%s 学分:%3.1f 考试成绩:%3.1f 平时成绩:%3.1f 综合成绩%3.1f\n",z[a][i].q,z[a][i].w,z[a][i].e,z[a][i].r,z[a][i].t,z[a][i].y);
w=w+1;
}
}
if(w==0) printf("此XX不存在!\n");
}
else if(p==4)
break;
else printf("输入错误!!!\n");
printf("\n\n是否返回数据查询界面y/n?\n");
scanf("%s",&h);
if(strcmp(h,"n")==0) break;
else if(strcmp(h,"y")==0) system("CLS");
}
}
else if(i==5)/*5.删除数据*/
{
printf(" 删除数据");
while(1)
{
printf("\n请输入要删除的学生的学号:\n");
scanf("%ld",&qq);w=0;
for(a=0;a<o;a++)
{
if(qq==c[a].j)
{
for(i=a;i<o;i++)
{
c[i]=c[i+1];
for(u=0;u<g[i];u++)
z[i][u]=z[i+1][u];
g[i]=g[i+1];
}
printf("\n已删除\n\n");w=w+1;
o=o-1;
}
}
if(w==0) printf("\n该学生不存在!\n");
printf("\n\n是否继续删除学生数据y/n?\n");
scanf("%s",&h);
if(strcmp(h,"n")==0) break;
else if(strcmp(h,"y")==0) system("CLS");
}
}
else if(i==6)/*6.平均成绩计算*/
{
printf(" 平均成绩计算");
printf("\n按平均成绩从高到低的次序输出学生信息:\n\n");
for(a=0;a<o;a++)
{
for(i=0;i<g[a];i++)
{
z[a][i].y=z[a][i].r*0.7+z[a][i].t*0.3;
}
}
while(1)
{
for(a=0;a<o;a++)
{
al[a]=0;
for(u=0;u<g[a];u++)
{
al[a]=al[a]+z[a][u].t;
}
s[a]=al[a]/g[a];
}
for(a=0;a<o;a++)
{
max=s[a];
for(u=a;u<o;u++)
{
if(s[u]>max)
{
max=s[u];
s[u]=s[a];
s[a]=max;
}
}
}
for(a=0;a<o;a++)
{
printf("平均成绩:%3.1f 班级:%d 学号:%ld XX:%s 性别:%s 年龄:%d\n",s[a],c[a].i,c[a].j,c[a].m,c[a].n,c[a].x);
for(i=0;i<g[a];i++)
printf(" 课程编号:%d 课程名称:%s 学分:%3.1f 考试成绩:%3.1f 平时成绩:%3.1f 综合成绩%3.1f\n",z[a][i].q,z[a][i].w,z[a][i].e,z[a][i].r,z[a][i].t,z[a][i].y);
}
printf("\n\n是否返回主目录y/n?\n");
scanf("%s",&h);
if(strcmp(h,"y")==0) break;
else if(strcmp(h,"n")==0) system("CLS");
}
}
else if(i==7)/*7.列出不及格学生清单*/
{
printf(" 列出不及格学生清单");
for(a=0;a<o;a++)
{
for(i=0;i<g[a];i++)
{
z[a][i].y=z[a][i].r*0.7+z[a][i].t*0.3;
}
}
while(1)
{
printf("\n\n不及格学生清单:\n\n");
x=0;
for(a=0;a<o;a++)
{
for(u=0;u<g[a];u++)
if((int)z[a][u].y<60)
{
printf("学号:%ld XX:%s 不及格课程:%s 综合成绩:%3.1f\n",c[a].j,c[a].m,z[a][u].w,z[a][u].y);
x=x+1;
}
}
if(x==0) printf("所有学生成绩均及格");
printf("\n\n是否返回主目录y/n?\n");
scanf("%s",&h);
if(strcmp(h,"y")==0) break;
else if(strcmp(h,"n")==0) system("CLS");
}
}
else if(i==8)/*8.退出系统*/
break;
else {printf("输入错误!!!");getchar();}
}
}
}
九、心得体会
通过本次C程序课程设计,我觉得对自己提高很大:克制了的偷懒的毛病,这在我以后的学习和工作中的心理定位与调节有很大的帮助。我感受到了编程是一项非常烦琐密的活动,他不但需要一个人密的思考问题的能力,处理问题的能力,还需要有足够的耐心和谨治学的作风,来不得半点马虎。
通过本次课程设计,我初步学会了论文设计的根本法,学会了怎样去借鉴别人的法和经历,知道如去查找资料和整合处理这些资料的能力,这为以后的大学毕业设计论文打下了一个初步的根底使我收益最大的是享受到了一种成功的喜悦,在这两个星期之中从开场确实定论文题目,然后是上网和上图书馆查找资料,编写C语言原程序,然后是进展编译,这个环节是一个非常痛苦和困难的,常常会因为一小点的错误而在编译失败与再次修改的漫漫循环之路中,但失败的越多,对人的考验就越多,在编译运行成功之后的享受成功的喜悦也就越多,另外在调试程序的过程中不断的思考和运用已经学到的知识,这对于自己是有很大的提高的。
由于所学的知识不多,自己的编程经历缺乏,仍存在一些错误,按现有的知识水平有些东西暂时还无法解决,还有待于在以后的学习中不断提高和改良!
. . word.zl-
展开阅读全文