学生成绩管理系统论文报告.docx
- 文档编号:15189304
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:23
- 大小:93.21KB
学生成绩管理系统论文报告.docx
《学生成绩管理系统论文报告.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统论文报告.docx(23页珍藏版)》请在冰点文库上搜索。
学生成绩管理系统论文报告
目录
1.设计任务······················
2.基本思路······················
3.方案设计······················
3.1主要算法说明··················
3.2程序框架设计··················
4.程序的源代码····················
5.调试过程中出现的问题及相应的解决办法··········
6.个人体会及建议····················
7.参考文献························
1.设计任务:
本次课程设计在我们小组成员的共同努力下,终于从一开始的迷茫到现在基本思路理清,大部分程序功能已基本实现,可谓付出了艰辛的汗水和心血。
我们花了很长的时间来仔细研究课题任务,查找了不少相关资料,然后进行分工,并及时沟通协商,最后由组长梅清高进行汇总。
此次任务中我主要完成了部分子程序的编辑,同时负责查找相关的C语言编程资料。
组长梅清高主要负责整个宏观大局的把握,向我们提出他的思路,告诉我们程序与程序之间应如何衔接。
组员王世顺负责部分程序的编写及帮助我们检查程序的一些错误。
我们的程序主要实现了存储和读取学生成绩信息的功能。
2.基本思路:
首先这是一个学生成绩管理系统,那么应该有查询和管理两部分,管理部分主要是输入学生的成绩信息以及修改等,查询部分则是显示你所要了解的信息。
我们首先编一个整体的框架,里面引用了所需要实现的功能函数,然后把每个具体的功能都用子函数进行编程,最后在主函数中引用。
查询及管理框图后面将有介绍,头文件的程序如下:
voidmain()
{
intn;
while
(1)//执行完一边功能之后,重新返回到菜单界面
{
system("cls");//清屏
menu_select();//菜单选择
scanf("%d",&n);getchar();
while(n<0&&n>7)
{
printf("对不起,你的选择有误!
请重试\n");
scanf("%d",&n);
}
switch(n)
{
case1:
newRecords();//新建学生信息记录
break;
case2:
addRecord();//在表尾追加学生信息
break;
case3:
queryInfo();//查询指定学生的信息
break;
case4:
modifyRecord();//修改学生信息
break;
case5:
removeRecord();//删除学生信息
break;
case6:
sortInfo();//排序
break;
case7:
display();//显示所有学生信息
break;
case0:
quit();//退出
default:
break;
}
}
}
从上面的程序可以看到我们使用了8个case语句,每个case语句都包含了我们需要实现的一个功能,这使得我们在编程时的思路更加清晰,那么接下来我们要做的只是如何去具体实现每个功能。
每一个功能的实现我们都花费了不少时间和心血,反复一再调试。
尽管我们做的很认真,但最后有些部分仍不够完美,超出了我们的能力范围之外,也请老师见谅。
我们也会及时进行沟通,向组长报告自己的进度,然后一起想办法解决某些难题。
3.方案设计:
3.1主要算法说明
本课程设计对模块设计如下:
(1)使用多文件方式实现设计;
(2)在各个文件内实现结构化设计;
(3)每个模块作为一个单独的c文件,每个文件内的函数如表1所示,表中给出了各个函数的功能说明;
(4)宏和数据结构等放在头文件中,并使用条件编译。
表-1:
文件及函数组成
源文件
函数名称及组成
功能描述
Menu.c
main
主函数
Menu_select
菜单选择
managermenu
管理员菜单
studentmenu
学生菜单
Handle_menu
菜单处理
Quit
结束运行
Identity.c
checkcode
身份验证
modify
修改身份
Inqumenu
查询菜单
Inquire.c
Inqunum
按学号查询
Inquname
按姓名查询
Inqurank
按名次查询
Inquscore
按分数查询
Display.c
showTable
打印表头
Display
显示信息
Edit.c
Dele
删除指定的纪录
editmenu
提供编辑选项
Add
添加学生信息
Newrecord
初始化学生信息
copy
备份纪录
checknum
检验该学生是否存在
modify
修改学生的信息
resume
恢复信息
Insert
存入信息时插入信息
Save_load.c
Save
文件存储
Load
文件读取
Sort.c
sortInfo
排序
Student.h
常数
提供常数定义
结构声明
学生成绩数据结构
库函数及函数原形声明
引用的库函数和函数
从上表可以看出,我们是把整个成绩管理系统根据所需要实现的不同功能划分成不同的模块,每个模块都是一个子程序文件,这里我们运用了多个函数:
主要包括文件存储操作函数intSaveRecrods(void);文件读取操作函数intloadRecrods(void);显示所有学生信息的函数voiddisplay(void);增加信息函数voidaddRecrod(void);打印表头函数voidshowTable(void);输出在记录中按升序排序的位置intgetIndex(floatsum);删除记录函数voidremoveRecrod(void);查找指定记录函数intfindRecrod(char*,int,int);查询指定学生信息的函数voidqueryInfo(void);记录复制函数voidcopyRecrod(stuinfo*,stuinfo*);修改指定学生信息函数voidmodifyRecrod(void);学生信息排序函数voidsortInfo(void);菜单处理函数voidhandle_menu(void);菜单选择函数intmenu_select(void);新建学生信息记录的函数voidnewRecrods(void);结束程序运行函数voidquit(ADDR*);主函数voidmain(void)。
3.2程序框架设计
下面是管理员身份验证的框图:
说明:
1.首先打开文件stuinfo,如成功,将文件中的姓名和密码信息分别读出到变量na[20],co[20]中,输入要验证的姓名和密码到变量na1[20],co1[20]中。
2.比较na[20],co[20]和na1[20],co1[20]是否相等,如相等则身份验证通过,进入管理员角色,否则输入出错信息并返回用户选择菜单。
3.如打开文件stuinfo失败,则对名字和密码进行初始化,输入初始化姓名和密码到na[20],co[20]中,然后写入到文件stuinfo中。
下面的框图是编辑信息的流程图:
说明:
1.若信息不存在,自动生成文件来存放该班级的信息,输入要初始化的学生数ycount及科目count1,输入学生的姓名和学号到临时变量a[20]和b中,调用checknum函数检验该学生是否存在,若存在,i--,重新输入;否则继续输入各科的成绩。
2.可直接输入信息吗,对相应的科目成绩求和,得到total。
算出平均分。
3.判断初始化是否结束,如果没有结束,继续输入;如果结束调用save函数保存到初始化信息中。
4.程序的源代码(关键函数)
voidaddRecord(inti)
{
FILE*fp;
charch;
intflag=0;
StuInfos[20],temp;
chararray[15];
intj=0,k;
M=0;
if(i==1)
{
printf("请输入你要增加信息的文件名:
");
scanf("%s",fname);
}
if((fp=fopen(fname,"r"))==NULL)
{
printf("此文件不存在!
是否要新建文件?
pleaseinputy/n:
");getchar();
ch=getchar();
while(ch!
='y'&&ch!
='Y'&&ch!
='n'&&ch!
='N')
{
printf("\n输入错误,请重试!
\n");
printf("是否输入信息?
(y/n):
");getchar();/*询问是否继续*/
ch=getchar();
}
if(ch=='y'||ch=='Y')
{
fp=fopen(fname,"w");fclose(fp);
printf("文件新建成功!
");
}
elsereturn;
}
else
{
while(!
feof(fp))
{
if(fread(&s[M],LEN,1,fp)==1)
M++;/*统计当前记录条数*/
}
fclose(fp);
}
if(i==1)
{
printf("\n是否录入信息(y/n):
");getchar();
ch=getchar();
while(ch!
='y'&&ch!
='Y'&&ch!
='n'&&ch!
='N')
{
printf("\n输入错误,请重试!
\n");
printf("是否输入信息?
(y/n):
");getchar();/*询问是否继续*/
ch=getchar();
}
}
else
ch='y';
while(ch=='y'||ch=='Y')/*判断是否要录入新信息*/
{
fp=fopen(fname,"a+");
printf("学号:
");
scanf("%s",s[M].number);/*输入学生学号*/
strcpy(array,s[M].number);
for(i=0;i { if(strcmp(array,s[i].number)==0) { flag=1; break; } } if(flag==0) { printf("名字: "); scanf("%s",s[M].name);/*输入学生姓名*/ printf("性别(男/女): "); scanf("%s",s[M].gender);/*输入学生性别*/ while(strcmp(s[M].gender,"男")! =0&&strcmp(s[M].gender,"女")! =0)//输入性别不是男或女是表示输入错误 { printf("\n输入错误,请重试! \n"); printf("是否输入信息? (男/女): ");getchar();/*询问是否继续*/ gets(s[M].gender); } printf("课设: "); scanf("%f",&s[M].score[0]);/*输入课设成绩*/ printf("数学: "); scanf("%f",&s[M].score[1]);/*输入数学成绩*/ printf("英语: "); scanf("%f",&s[M].score[2]);/*输入英语成绩*/ s[M].sum=s[M].score[0]+s[M].score[1]+s[M].score[2];/*计算出总成绩*///printf("%f",stu[numStus].sum); s[M].average=s[M].sum/3.0; saveRecords(fp,&s[M]); //fwrite(&s[M],LEN,1,fp); //fclose(fp); M++; //getIndex(); //printf("%d",s[M].index); for(k=0;k for(j=k+1;j if(s[k].sum { temp=s[k]; s[k]=s[j]; s[j]=temp; } for(k=0;k s[k].index=k+1; fp=fopen(fname,"w"); for(j=0;j fwrite(&s[j],LEN,1,fp);/*向fname文件写入信息*/ printf("%d条记录已经存入文件,请继续操作。 \n",M); fclose(fp); printf("是否继续输入信息? (y/n): ");getchar();/*询问是否继续*/ ch=getchar(); while(ch! ='y'&&ch! ='Y'&&ch! ='n'&&ch! ='N') { printf("\n输入错误,请重试! \n"); printf("是否输入信息? (y/n): ");getchar();/*询问是否继续*/ ch=getchar(); } } else { printf("thenumberisexisting! \n"); printf("是否继续输入信息? (y/n): ");getchar();/*询问是否继续*/ ch=getchar(); while(ch! ='y'&&ch! ='Y'&&ch! ='n'&&ch! ='N') { printf("\n输入错误,请重试! \n"); printf("是否输入信息? (y/n): ");getchar();/*询问是否继续*/ ch=getchar(); } flag=0;//辨别学号是否重复的值归0 } } } voidqueryInfo(void) { charname[20]; intflag=0; intpaiming; charnumber[15]; FILE*fp; intc=1;//是否继续操作 inti,f;//i用于循环;f用于选择删除方式。 M=0; printf("请选择查询方式: \t1: 根据姓名查询;\t2: 根据学号查询;\t3: 根据排名查询\n"); scanf("%d",&f); for(;f! =1&&f! =2&&f! =3;) { printf("输入错误。 请重试! ");getchar(); scanf("%d",&f); } printf("请输入你要查询的信息所在文件: "); scanf("%s",fname); if((fp=fopen(fname,"r"))==NULL)/*打开指定文件*/ { printf("文件无法打开\n"); return; } while(! feof(fp)) { if(fread(&s[M],LEN,1,fp)==1) M++;/*统计当前记录条数*/ } fclose(fp); switch(f) { case1: { system("cls"); while(c) { printf("请输入您要查询的学生姓名: "); scanf("%s",name); for(i=0;i { if(strcmp(name,s[i].name)==0) { flag=1; showTable(); printf("%s\t%s\t%s\t%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%d",s[i].number,s[i].name,s[i].gender,s[i].score[0],s[i].score[1],s[i].score[2],s[i].sum,s[i].average,s[i].index); } } if(flag==0) printf("您要求查询的对象本来就不存在! 请检查输入的正确性! "); flag=0;//使flag恢复初值,便于循环 printf("\n要继续查询吗? (0(不继续)/1(继续))"); scanf("%d",&c); for(;c! =0&&c! =1;) { printf("输入错误。 请重试! ");getchar(); scanf("%d",&c); } } } break; case2: { system("cls"); while(c) { printf("请输入您要查询的学生学号: "); scanf("%s",number); for(i=0;i { if(strcmp(number,s[i].number)==0) { flag=1; showTable(); printf("%s\t%s\t%s\t%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%d",s[i].number,s[i].name,s[i].gender,s[i].score[0],s[i].score[1],s[i].score[2],s[i].sum,s[i].average,s[i].index); } } if(flag==0) { printf("您要求查询的对象本来就不存在! 请检查输入的正确性! "); } flag=0; printf("\n要继续查询吗? (0(不继续)/1(继续))"); scanf("%d",&c); for(;c! =0&&c! =1;) { printf("输入错误。 请重试! ");getchar(); scanf("%d",&c); } } } break; case3: { system("cls"); while(c) { printf("请输入您要查询的学生名次: "); scanf("%d",&paiming); if(paiming>0&&paiming { showTable(); paiming=paiming-1; printf("%s\t%s\t%s\t%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%d",s[paiming].number,s[paiming].name,s[paiming].gender,s[paiming].score[0],s[paiming].score[1],s[paiming].score[2],s[paiming].sum,s[paiming].average,s[paiming].index); } else printf("你要查找的学生名次不在范围内"); printf("\n要继续查询吗? (0(不继续)/1(继续))"); scanf("%d",&c); for(;c! =0&&c! =1;) { printf("输入错误。 请重试! ");getchar(); scanf("%d",&c); } } } break; default: break; } } 5.调试过程中出现的问题及相应的解决办法 在用C语言编完程序后我们的调试并不是很顺利,出现了很多错误,首先是一些由于自己的粗心大意导致的小问题,如忘记定义变量,在引用指针变量之前没有对它赋予确定的值等,不过这些还好。 最头痛的是文件型指针的使用,因为以前C语言老师上课并没有提到过这部分内容,所以我们只好通过自学。 可能是找的资料不全面,导致我们出现了意想不到问题。 下面就具体地说明我遇到的一个问题: 在C语言中,我们知道,一旦你成功打开一个文件,它将返回一个文件指针。 我们是这样做的: FILE *fp; fp=fopen(“文件”,文件状态(如w
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统 论文 报告