淮海工学院课程设计学生成绩管理系统.docx
- 文档编号:9888618
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:46
- 大小:197.79KB
淮海工学院课程设计学生成绩管理系统.docx
《淮海工学院课程设计学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《淮海工学院课程设计学生成绩管理系统.docx(46页珍藏版)》请在冰豆网上搜索。
淮海工学院课程设计学生成绩管理系统
淮海工学院
课程设计报告书
课程名称:
计算机技术课程设计
题目:
学生成绩管理系统
系(院):
电子工程学院
学期:
10-11-2
专业班级:
姓名:
学号:
评语:
成绩:
签名:
日期:
:
1、准
2、系
3、系
1引言
做系统前,首先,我详细看了《C程序设计教程》(教科书)的第十章《文件》,基本自学会了文件的相关内容,理解了相关函数的用法和作用;另外,我上网查询了很多相关资料,还有找了很多相关的系统,每一个我都详细的看了一遍,这样加深了我对C的理解以及对文件的相关内容进一步理解;再者,我到图书馆借阅了相关程序的设计教程书,学习了教科书上没有的东西;最后我尝试着自己去做系统,经过了无数次的上机调试,我自己做的小型系统终于在机器上运行了出来,完全符合课程设计要求,功能齐全。
2系统功能简介
1输入职工信息
2删除职工信息
3查询职工信息
4修改职工信
5统计职工信息
6排序职工信息
7保存职工信息
8显示职工信息
3功能划分,模块详细说明:
1)主函数,控制整个系统的执行流程,使系统菜单可以循环执行
2)菜单函数,提供一个可以选择任何一个功能的选择窗口,供用户选择需要执行的操作
3)打开文件函数,把文件的信息打开到一个结构体数组中
4)输入函数,提供录入职工信息功能
5)输出函数,提供学生信息输出功能,浏览学生信息
6)排序函数,提供对学生信息检索,按条件查找排序功能
7)删除学生信息函数,提供对学生信息的删除功能
8)退出函数,执行退出功能
4关键功能算法和绘制函数流程图
4.1整体流程图
开始
主函数
菜单
Swith
删除信息
排序查询
信息查询
输出显示
输入功能
退出
输入功能
输入功能
输入功能
Y
继续
结束
图1功能模块
4.2显示模块流程图
开始
查找磁盘上的文件
成功否
用for语句实现把文件的所有内容输入到数组中
结束
图2显示模块
4.3保存模块流程图
开始
建立(查找)磁盘文件
成功否
用for语句实现把
数组的所有内容储存在文件中
结束
图3保存模块
4.4输入模块流程图
开始
输入各个学生的信息
Y
继续
结束
N
图4输入模块
4.5排序模块流程图:
开始
从文件中读入数据
swith
平均成绩
总成绩
英语成绩
数学成绩
语文成绩
结束
图5排序模块
4.6显示模块流程图
:
开始
执行函数
输出每个学生的信息
Y
学号不存在
·
结束
图6显示模块
4.7删除函数流程图:
开始
执行open()函数
输入需要删除的学生号
是否找到
把该员工后面的每一个学生信息陆续前提
执行close()函数把新的学生信息输出到文件中保存起来
结束
图7删除模块
4.8查找函数的流程图:
开始
执行open()函数从文件中读入数据
输入要查询的学生学号
是否存在匹配
输出学生的各科成绩
结束
图8查找模块
5运行结果说明
5.1主菜单:
图9主菜单
5.2输入界面:
图10输入界面
5.3排序界面
图11排序界面
5.4查询界面:
图12查询界面
5.5删除界面:
图13删除界面
5.6保存界面:
图14保存界面
5.7修改界面
图15修改界面
5.8统计界面
图16统计界面
6简要总结及自我评价
忙碌了一个多星期,在大家的共同努力下,我们总算将此程序设计出来。
尽管不是自己独立完成,但仍然很高兴,因为在设计的过程中,让我了解到要设计一个大型程序,查找资料是至关重要的,在他人的基础上,再根据自己所学进行修改与调试,最后设计出自己想要的程序,这过程艰辛,但只要你持之以恒,成功指日可待。
另外平时扎实的基础也很关键,因为如果你平时学得就不怎么样,那么你面对这么一个比较有难度的程序,你可能会望而却步,看他人的程序都是个难点,更别说让你自己去设计。
为了解决此。
类问题,最好就是多向同学,老师请教,不要怕难为情。
尤其是老师,评他们多年的编写程序的经验,要解决我们的问题,对他们来说只是小事。
在设计这个程序时,我们刚开始是根据老师给我们提供的资料,用画图以及循环将框架设计出来,但是接下去便无从下手了,计算是个关键和难点,我们也查了相应的资料,但是它上面用得是坐标来做的,所以为了方便设计程序,我们也改为坐标来做的,这样计算问题解决了。
接下去就是按键问题,我们的资料是用鼠标做的,所以关于按键这个函数就只能我们自己设计,还好手头有类似的资料,经过自己的反复尝试以及与与同学的讨论,这也不难,最好还是被我们搞定了。
最后就是闪烁,这个设计的方法很死板,都一个类型,就是算坐标比较烦琐,要确定好它的位置,但是这些只要你自己愿意去尝试,问题都可以迎刃而解的。
从这一个多星期的设计过程中,我看到了大家的拼搏与努力,也让我知道团队精神得难能可贵,尽管一年下来大家不怎么有多大接触,但是彼此之间的友谊已经在我们心里扎根生底,在遇到问题时,我们会共同进退,每个人都很慷慨不会因为是通过自己艰辛劳动设计出来的东西而不准他人剽窃了。
总之,这次设计程序让我受益良多,我会好好珍惜像这种难得的机会
7参考文献
[1]谭浩强著.C程序设计(第三版).北京:
清华大学出版社,2005
[2]HerbertSchildt著.王曦若译.ANSIC标准详解.北京:
学院出版社,1994
[3]谭浩强著.C程序设计(第二版).北京:
清华大学出版社,1999
程序:
#include"stdio.h"/*标准输入输出函数库*/
#include"stdlib.h"/*标准函数库*/
#include"string.h"/*字符串函数库*/
#include"conio.h"/*屏幕操作函数库*/
#defineHEADER1"----------------------------student'sinformation----------------------------\n"
#defineHEADER2"|Number|Name|C|Math|English|Total|Average|\n"
#defineHEADER3"|---------------|---------------|----|----|----|--------|-------|"
#defineFORMAT"|%-10s|%-15s|%4d|%4d|%4d|%4d|%.2f|\n"
#defineDATAp->data.num,p->data.name,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.total,p->data.ave
#defineEND"--------------------------------------------------------------\n"
intshoudsave=0;/**/
structstudent
{
charnum[10];/*Number*/
charname[20];
charsex[4];
intcgrade;
intmgrade;
integrade;
inttotal;
floatave;
charneartime[10];/*最近更新时间*/
};
typedefstructnode
{
structstudentdata;
structnode*next;
}Node,*Link;
/*函数*/
voidmenu()
{
system("cls");/*调用DOS命令,清屏.与clrscr()功能相同*/
cprintf("\n");
printf("@@@@@Students'performancemanagementsystem@@@@@@\n\n");
printf("@@@@@@@@@@@@@@@@@@@@@@@Menu@@@@@@@@@@@@@@@@@@@@@@@@\n");
printf("*1input2delete*\n");
printf("*3search4modify*\n");
printf("*5count*\n");
printf("*6sort7save*\n");
printf("*8dispaly0exit*\n");
printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
/*cprintf()送格式化输出至文本窗口屏幕中*/
}
voidprintheader()/*格式化输出表头*/
{
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
}
voidprintdata(Node*pp)/*格式化输出表中数据*/
{
Node*p;
p=pp;
printf(FORMAT,DATA);
}
voidWrong()
{
printf("\n=====>error!
\n");
}
voidNofind()
{
printf("\n=====>Norecordnow!
PleasepressEnter\n");
}
voidDisp(Linkl)/*显示单链表l中存储的学生记录,内容为student结构中定义的内容*/
{
Node*p;
p=l->next;/*l存储的是单链表中头结点的指针,该头结点没有存储学生信息,指针域指向的后
继结点才有学生信息*/
if(!
p)/*p==NULL,NUll在stdlib中定义为0*/
{
printf("\n=====>Norecordnow!
PleasepressEnter\n");
getchar();
return;
}
printf("\n\n");
printheader();/*输出表格头部*/
while(p)/*逐条输出链表中存储的学生信息*/
{
printdata(p);
p=p->next;/*移动直下一个结点*/
printf(HEADER3);
}
getchar();
}
/*************************************************************
作用:
用于定位链表中符合要求的节点,并返回指向该节点的指针
参数:
findmess[]保存要查找的具体内容;nameornum[]保存按什么查找;
在单链表l中查找;
**************************************************************/
Node*Locate(Linkl,charfindmess[],charnameornum[])/*该函数用于定位连表中符合要
求的接点,并返回该指针*/
{
Node*r;
if(strcmp(nameornum,"num")==0)/*按Number查询*/
{
r=l->next;
while(r!
=NULL)
{
if(strcmp(r->data.num,findmess)==0)
returnr;
r=r->next;
}
}
elseif(strcmp(nameornum,"name")==0)/*按Name查询*/
{
r=l->next;
while(r!
=NULL)
{
if(strcmp(r->data.name,findmess)==0)
returnr;
r=r->next;
}
}
return0;
}
/*增加学生记录*/
voidAdd(Linkl)
{
Node*p,*r,*s;/*实现添加操作的临时的结构体指针变量*/
charch,flag=0,num[10];
r=l;
s=l->next;
system("cls");
Disp(l);/*先打印出已有的学生信息*/
while(r->next!
=NULL)
r=r->next;/*将指针移至于链表最末尾,准备添加记录*/
while
(1)/*一次可输入多条记录,直至输入Number为0的记录结点添加操作*/
{
while
(1)/*输入Number,保证该Number没有被使用,若输入Number为0,则退出添加记录操作*/
{
printf("pleaseinputtheNumber(press'o'toupperlevel):
");
scanf("%s",num);
flag=0;
if(strcmp(num,"0")==0)/*输入为0,则退出添加操作,返回主界面*/
{return;}
s=l->next;
while(s)/*查询该Number是否已经存在,若存在则要求重新输入一个未被占用的Number*/
{
if(strcmp(s->data.num,num)==0)
{
flag=1;
break;
}
s=s->next;
}
if(flag==1)/*提示用户是否重新输入*/
{getchar();
printf("=====>Number%sexistedalready!
PleasepressEnter.inputagain?
(y/n):
",num);
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
continue;
else
return;
}
else
{break;}
}
p=(Node*)malloc(sizeof(Node));/*申请内存空间*/
if(!
p)
{
printf("\nAllocatememoryfailure");/*如没有申请到,打印提示信息*/
return;/*返回主界面*/
}
strcpy(p->data.num,num);/*将字符串num拷贝到p->data.num中*/
printf("pleaseinputtheName:
");
scanf("%s",p->data.name);
getchar();
printf("pleaseinputthescoreofC:
");
scanf("%d",&p->data.cgrade);
getchar();
printf("pleaseinputthescoreofMath:
");
scanf("%d",&p->data.mgrade);
getchar();
printf("pleaseinputthescoreofEnglish:
");
scanf("%d",&p->data.egrade);
getchar();
/*信息输入已经完成*/
p->next=NULL;
r->next=p;
r=p;
shoudsave=1;
}
}
/*函数*/
voidQur(Linkl)/*按Number或Name,查询学生记录*/
{
intsel;/*1:
按Number查,2:
按Name查,其他:
返回主界面(菜单)*/
charfindmess[20];/*保存用户输入的查询内容*/
Node*p;
if(!
l->next)/*若链表为空*/
{
system("cls");
printf("\n=====>Norecordnow!
PleasepressEnter\n");
return;
}
system("cls");
printf("\n=====>1SearchbyNumber\n=====>2SearchbyName\n");
printf("select[1,2]:
");
scanf("%d",&sel);
if(sel==1)/*Number*/
{
printf("pleaseinputtheNumberyouwanttosearch:
");
scanf("%s",findmess);
p=Locate(l,findmess,"num");/*在l中查找Number为searchinput值的节点,并返回节点的指针
*/
if(p)/*若p!
=NULL*/
{
printheader();
printdata(p);
printf(END);
printf("pressanykeytoback");
getchar();
}
else
Nofind();
getchar();
}
elseif(sel==2)/*Name*/
{
printf("pleaseinputtheNameyouwanttosearch:
");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
printheader();
printdata(p);
printf(END);
printf("pressanykeytoback");
getchar();
}
else
Nofind();
getchar();
}
else
Wrong();
}
/*函数*/
/*删除学生记录:
先找到保存该学生记录的节点,然后删除该节点*/
voidDel(Linkl)/*删除*/
{
intsel;
Node*p,*r;
charfindmess[20];
if(!
l->next)
{
printf("\n=====>norecord!
\n");
getchar();
return;
}
printf("\n=====>1DeletebyNumber\n=====>2DeletebyName\n");
scanf("%d",&sel);
if(sel==1)
{
printf("pleaseinputtheNumberyouwanttodelete:
");
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=====>Deletesuccessful!
\n");
getchar();
shoudsave=1;
}
else
Nofind();
}
elseif(sel==2)
{
printf("pleaseinputtheNameyouwanttodelete:
");
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=====>Deletesuccessful!
\n");
getchar();
shoudsave=1;
}
else
Nofind();
getchar();
}
else
Wrong();
getchar();
}
/*函数*/
/*修改学生记录。
先按输入的Number查询到该记录,然后提示用户修改Number之外的值,Number
不能修改*/
voidModify(Linkl)
{
Node*p;
charfindmess[20];
if(!
l->next)
{system("cls");
printf("\n=====>norecord!
\n");
getchar();
return;
}
system("cls");
printf("modifytheinformation");
Disp(l);
printf("pleaseinputtheNumberyouwanttomodify:
");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("pleaseinputthenewNumber(whichwas%s):
",p->data.num);
scanf("%s",p->data.num);
printf("pleaseinputthenewName(whichwas%s):
",p->data.name);
scanf("%s",p->data.name);
getchar();
printf("pleaseinputthenewCscore(whichwas%d):
",p->data.cgrade);
scanf("%d",&p->data.cgrade);
getchar();
printf("pleaseinputthenewMathscore(whichwas%d):
",p->data.mgrade);
scanf("%d",&p->data.mgrade);
getchar();
printf("pleaseinputthenewEnglishscore(whichwas%d):
",p->data.egrade);
scanf("%d",&p->data.egrade);
printf("\n=====>modifysuccessful!
\n");
shoudsave=1;
getchar();
}
else
Nofind();
getchar();
}
voidTongji(Linkl)
{
Node*pm,*pe,*pc,*pt,*pa;/*用于指向分数最高的接点*/
Node*r=l->next;
intnum1=0,num2=0,num3=0,num4=0,num5=0;
intselect;
if(!
r)
{
printf("\n=====>norecord!
\n");
return;
}
system("cls");
pm=pe=pc=pt=pa=r;
printf("selectthesubjectyouwanttocount:
1.C2.Math3.English\n");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 淮海 工学院 课程设计 学生 成绩管理系统