淮海工学院课程设计学生成绩管理系统Word下载.docx
《淮海工学院课程设计学生成绩管理系统Word下载.docx》由会员分享,可在线阅读,更多相关《淮海工学院课程设计学生成绩管理系统Word下载.docx(46页珍藏版)》请在冰点文库上搜索。
2)菜单函数,提供一个可以选择任何一个功能的选择窗口,供用户选择需要执行的操作
3)打开文件函数,把文件的信息打开到一个结构体数组中
4)输入函数,提供录入职工信息功能
5)输出函数,提供学生信息输出功能,浏览学生信息
6)排序函数,提供对学生信息检索,按条件查找排序功能
7)删除学生信息函数,提供对学生信息的删除功能
8)退出函数,执行退出功能
4关键功能算法和绘制函数流程图
4.1整体流程图
开始
主函数
菜单
Swith
删除信息
排序查询
信息查询
输出显示
输入功能
退出
Y
继续
结束
图1功能模块
4.2显示模块流程图
查找磁盘上的文件
成功否
用for语句实现把文件的所有内容输入到数组中
图2显示模块
4.3保存模块流程图
开始
建立(查找)磁盘文件
用for语句实现把
数组的所有内容储存在文件中
结束
图3保存模块
4.4输入模块流程图
输入各个学生的信息
结束
N
图4输入模块
4.5排序模块流程图:
从文件中读入数据
swith
平均成绩
总成绩
英语成绩
数学成绩
语文成绩
图5排序模块
4.6显示模块流程图
执行函数
输出每个学生的信息
学号不存在
·
图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"
/*标准输入输出函数库*/
stdlib.h"
/*标准函数库*/
string.h"
/*字符串函数库*/
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"
@@@@@@@@@@@@@@@@@@@@@@@Menu@@@@@@@@@@@@@@@@@@@@@@@@\n"
*1input2delete*\n"
*3search4modify*\n"
*5count*\n"
*6sort7save*\n"
*8dispaly0exit*\n"
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"
/*cprintf()送格式化输出至文本窗口屏幕中*/
}
voidprintheader()/*格式化输出表头*/
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
voidprintdata(Node*pp)/*格式化输出表中数据*/
Node*p;
p=pp;
printf(FORMAT,DATA);
voidWrong()
\n=====>
error!
voidNofind()
Norecordnow!
PleasepressEnter\n"
voidDisp(Linkl)/*显示单链表l中存储的学生记录,内容为student结构中定义的内容*/
Node*p;
p=l->
next;
/*l存储的是单链表中头结点的指针,该头结点没有存储学生信息,指针域指向的后
继结点才有学生信息*/
if(!
p)/*p==NULL,NUll在stdlib中定义为0*/
getchar();
return;
\n\n"
printheader();
/*输出表格头部*/
while(p)/*逐条输出链表中存储的学生信息*/
printdata(p);
p=p->
/*移动直下一个结点*/
/*************************************************************
作用:
用于定位链表中符合要求的节点,并返回指向该节点的指针
参数:
findmess[]保存要查找的具体内容;
nameornum[]保存按什么查找;
在单链表l中查找;
**************************************************************/
Node*Locate(Linkl,charfindmess[],charnameornum[])/*该函数用于定位连表中符合要
求的接点,并返回该指针*/
Node*r;
if(strcmp(nameornum,"
num"
)==0)/*按Number查询*/
r=l->
while(r!
=NULL)
if(strcmp(r->
data.num,findmess)==0)
returnr;
r=r->
elseif(strcmp(nameornum,"
name"
)==0)/*按Name查询*/
data.name,findmess)==0)
return0;
/*增加学生记录*/
voidAdd(Linkl)
Node*p,*r,*s;
/*实现添加操作的临时的结构体指针变量*/
charch,flag=0,num[10];
r=l;
s=l->
Disp(l);
/*先打印出已有的学生信息*/
while(r->
next!
/*将指针移至于链表最末尾,准备添加记录*/
while
(1)/*一次可输入多条记录,直至输入Number为0的记录结点添加操作*/
while
(1)/*输入Number,保证该Number没有被使用,若输入Number为0,则退出添加记录操作*/
pleaseinputtheNumber(press'
o'
toupperlevel):
"
scanf("
%s"
num);
flag=0;
if(strcmp(num,"
0"
)==0)/*输入为0,则退出添加操作,返回主界面*/
{return;
while(s)/*查询该Number是否已经存在,若存在则要求重新输入一个未被占用的Number*/
{
if(strcmp(s->
data.num,num)==0)
flag=1;
break;
}
s=s->
if(flag==1)/*提示用户是否重新输入*/
{getchar();
printf("
=====>
Number%sexistedalready!
PleasepressEnter.inputagain?
(y/n):
scanf("
%c"
&
ch);
if(ch=='
y'
||ch=='
Y'
)
continue;
else
return;
{break;
p=(Node*)malloc(sizeof(Node));
/*申请内存空间*/
p)
\nAllocatememoryfailure"
/*如没有申请到,打印提示信息*/
return;
/*返回主界面*/
strcpy(p->
data.num,num);
/*将字符串num拷贝到p->
data.num中*/
pleaseinputtheName:
p->
data.name);
pleaseinputthescoreofC:
%d"
p->
data.cgrade);
pleaseinputthescoreofMath:
data.mgrade);
pleaseinputthescoreofEnglish:
data.egrade);
/*信息输入已经完成*/
next=NULL;
r->
next=p;
r=p;
shoudsave=1;
voidQur(Linkl)/*按Number或Name,查询学生记录*/
intsel;
/*1:
按Number查,2:
按Name查,其他:
返回主界面(菜单)*/
charfindmess[20];
/*保存用户输入的查询内容*/
l->
next)/*若链表为空*/
1SearchbyNumber\n=====>
2SearchbyName\n"
select[1,2]:
sel);
if(sel==1)/*Number*/
pleaseinputtheNumberyouwanttosearch:
findmess);
p=Locate(l,findmess,"
/*在l中查找Number为searchinput值的节点,并返回节点的指针
*/
if(p)/*若p!
=NULL*/
printheader();
printdata(p);
printf(END);
pressanykeytoback"
getchar();
else
Nofind();
elseif(sel==2)/*Name*/
pleaseinputtheNameyouwanttosearch:
if(p)
Nofind();
Wrong();
/*删除学生记录:
先找到保存该学生记录的节点,然后删除该节点*/
voidDel(Linkl)/*删除*/
Node*p,*r;
next)
norecord!
1DeletebyNumber\n=====>
2DeletebyName\n"
if(sel==1)
pleaseinputtheNumberyouwanttodelete:
=p)
next=p->
free(p);
Deletesuccessful!
elseif(sel==2)
pleaseinputtheNameyouwanttodelete:
/*修改学生记录。
先按输入的Number查询到该记录,然后提示用户修改Number之外的值,Number
不能修改*/
voidModify(Linkl)
{system("
modifytheinformation"
pleaseinputtheNumberyouwanttomodify:
pleaseinputthenewNumber(whichwas%s):
data.num);
pleaseinputthenewName(whichwas%s):
pleaseinputthenewCscore(whichwas%d):
pleaseinputthenewMathscore(whichwas%d):
pleaseinputthenewEnglishscore(whichwas%d):
modifysuccessful!
voidTongji(Linkl)
Node*pm,*pe,*pc,*pt,*pa;
/*用于指向分数最高的接点*/
Node*r=l->
intnum1=0,num2=0,num3=0,num4=0,num5=0;
intselect;
r)
return;
pm=pe=pc=pt=pa=r;
selectthesubjectyouwanttocount:
1.C2.Math3.English\n"