顺序表的学生成绩管理系统设计与实现.docx
《顺序表的学生成绩管理系统设计与实现.docx》由会员分享,可在线阅读,更多相关《顺序表的学生成绩管理系统设计与实现.docx(17页珍藏版)》请在冰豆网上搜索。
顺序表的学生成绩管理系统设计与实现
长春建筑学院《数据结构》课程设计(论文)
Ordertableofstudentachievementmanagementsystemdesignandimplementation
年级:
学号:
姓名:
专业
指导老师:
二零一三年十二月
摘要
随着社会的发展,学校的规模不断的扩大,日常教学活动中提取相关信息,以反映教学情况。
传统的手工操作方式,易发生数据丢失,统计错误,劳动强度高,且速度慢。
使用计算机可以高速,快捷地完成以上工作。
在计算机联网后,数据在网上传递,可以实现数据共享,避免重复劳动,规范教学管理行为,从而提高了管理效率和水平。
学生成绩管理系统以计算机为工具,通过对学生成绩管理所需的信息管理,把管理人员和老师从繁琐的数据计算处理中解脱出来,使其有更多的精力从事教务管理政策的研究实施,教学计划的制定执行和教学质量的监督检查,从而全面提高教学质量。
信息社会的高科技,商品经济化的高效益,使计算机的应用已普及到经济和社会生活的各个领域。
计算机虽然与人类的关系愈来愈密切,还有人由于计算机操作不方便继续用手工劳动。
为了适应现代社会人们高度强烈的时间观念,学生成绩管理系统软件为教学办公室带来了极大的方便。
该软件是以C语言为实现语言,其功能在系统内部有源代码直接完成。
通过操作目录,管理者和老师可以了解本软件的基本工作原理。
管理者和老师只需输入一些简单的汉字、数字,即可达到自己管理学生成绩的目标。
关键字:
成绩管理系统c语言数据结构
Abstract
Withthedevelopmentofthesociety,theschoolscaleunceasinglyexpands,thedailyteachingactivitiestoextractrelevantinformation,toreflecttheteachingsituation.Traditionalwayofmanualoperation,pronetolossofdata,statisticalerrors,highlaborintensity,andtheslowspeed.Usingthecomputercanbehighspeed,quicklycompletetheabovework.Afterthecomputernetworking,datatransmissionontheInternet,canrealizedatasharing,avoidduplicationofeffort,standardizeteachingmanagement,soastoimprovethemanagementefficiencyandlevel.Studentachievementmanagementsystembymeansofcomputer,throughtheinformationneededforthestudentperformancemanagementinthemanagement,themanagementandteachersfromcomplicateddataprocessing,makeitshavemoreenergytoengageintheresearchandimplementationofthepolicyoftheeducationaladministrationteachingplanexecutionandtheteachingqualitysupervisionandinspection,soastoimprovethequalityofteachingcomprehensively.
Theinformationsocietythehigh-tech,goodsofcontracthighbenefit,maketheapplicationofcomputerhasspreadtoallareasofeconomicandsociallife.Althoughcomputerandhumanrelationsmoreandmoreclose,andbecausethecomputeroperationisnotconvenienttocontinuewithmanuallabor.Inordertoadapttomodernsocietypeoplehighlystrongtimeconcept,studentachievementmanagementsystemsoftwarefortheteachingofficehasbroughtgreatconvenience.ThesoftwarebasedonClanguageimplementationlanguage,itsfunctionwithinthesystemhavethesourcecodedirectlytofinish.Bymanipulatingthedirectory,administratorsandteacherscanunderstandthebasicworkingprincipleofthissoftware.AdministratorsandteachersonlyneedtoinputsomesimpleChinesecharacters,Numbers,canachievetheirmanagementgoalofthestudent'sgrade.
keywords:
achievementmanagementsystem,clanguage,datastructure
第1章绪论
引言:
为了提高高校学生信息的管理效率,方便对学生信息进行管理、学校里面的学生和管理员方便去管理和查询学生信息,如再要进行查询,就得在众多的学生信息中查找自己的成绩信息,面对学院大量的学生信息,怎么可以即时而方便的管理,学生只要登录本系统就可以查找到自己的成绩信息,而管理员也方便去管理每学期的学生的成绩信息。
建立一个学生信息管理系统,使学生信息管理工作规范化,系统化,程序化,避免学生管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改学生信息是必须而且十分迫切的工作。
。
1.1需求分析
学生管理系统功能的信息量大,数据安全性和保密性要求最高。
本功能实现对专业信息、学生信息、教师信息情况信息的管理和统计、课程信息和成绩信息查看及维护。
系统管理员可以浏览、查询、学生的基本信息,能添加、删除和修改学生信息,这部分功能应该由系统管理员执行,但是,删除某条专业基本信息记录时,应实现对该专业的相关信息也级联删除。
并且还应具有查询,并打印输出的功能
1.2实验目的
1.掌握顺序表的建立。
2.掌握顺序表的基本操作。
3.掌握顺序查找的基本算法
1.3实验内容
利用顺序表实现学生成绩管理系统,具体功能:
输入、输出、插入、除、查找、修改、退出,并能在屏幕上输出操作前后的结果。
第2章系统总体设计
2.1基本要求
1.硬件:
微机和打印机一台各
2.软件:
VisualC++windows7
2.2算法设计思想
1)分析程序的功能要求,划分程序功能模块
2)画出系统流程
3)代码的编写,定义数据结构和各个功能子函数
4)程序的功能调试
2.3设计要求
1.写出系统需求分析,并建模。
2.编程实现,界面友好。
3.输出操作前后的结果。
4.提供测试报告
第三章系统详细设计
3.1创建空顺序表并初始化
voidcreatList(sqlist*L)
{inti=0,n;Elemtype*newbase;
L->elem=(Elemtype*)malloc(List_INIT_SPACE*(sizeof(Elemtype)));
if(!
L->elem)
exit(OVERFLOW);
L->length=0;
L->listsize=List_INIT_SPACE;
printf("有几位同学:
\n");
scanf("%d",&n);
for(i=0;i{if(L->length==L->listsize){newbase=(Elemtype*)realloc(L->elem,(List_INIT_SPACE+List_INC_SPACE)*sizeof(Elemtype));if(newbase){L->elem=newbase;L->listsize+=List_INC_SPACE;}elseexit(OVERFLOW);}printf("请输入第%d名同学的信息:\n",i+1);printf("学号(15)\n");scanf("%16s",L->elem[L->length].number);printf("姓名(15)\n");scanf("%16s",L->elem[L->length].name);printf("性别(男:M女:F)\n");scanf("%16s",L->elem[L->length].sex);printf("成绩\n");scanf("%10d",&L->elem[L->length].score);L->length++;}printf("%d名学生信息如下:\n",L->length);printf("学号(15)姓名(15)性别(男:M女:F)成绩\n");for(i=0;ilength;i++)printf("%-16s%-16s%-16s%-10d\n",L->elem[i].number,L->elem[i].name,L->elem[i].sex,L->elem[i].score);}3.2向顺序表中插入元素voidinsertlist(sqlist*L){inti,j,k;charsign='y';Elemtype*newbase;Elemtypenewelem;while(sign!='n'){if(L->length==L->listsize){newbase=(Elemtype*)realloc(L->elem,(List_INIT_SPACE+List_INC_SPACE)*sizeof(Elemtype));if(newbase){L->elem=newbase;L->listsize+=List_INC_SPACE;}elseexit(OVERFLOW);}printf("请输入要插入的同学的信息:\n");printf("学号(15)\n");scanf("%16s",newelem.number);printf("姓名(15)\n");scanf("%16s",newelem.name);printf("性别(男:M女:F)\n");scanf("%16s",newelem.sex);printf("成绩\n");scanf("%10d",&newelem.score);printf("要插入到第几个位置:");scanf("%d",&i);while(i<1||i>L->length+1){printf("不能插入到第%d个位置!\n只能插入第1到第%d个位置上!\n请重新输入要插入的位置:",L->length+1);scanf("%d",&i);}L->length++;for(j=L->length-1;j>i-2;j--){for(k=0;k<16;k++){L->elem[j].name[k]=L->elem[j-1].name[k];L->elem[j].number[k]=L->elem[j-1].number[k];L->elem[j].sex[k]=L->elem[j-1].sex[k];}L->elem[j].score=L->elem[j-1].score;}j++;for(k=0;k<16;k++){L->elem[j].name[k]=newelem.name[k];L->elem[j].number[k]=newelem.number[k];L->elem[j].sex[k]=newelem.sex[k];}L->elem[j].score=newelem.score;printf("是否还要输入?(YorN)");getchar();scanf("%c",&sign);if(sign=='n'||sign=='N')sign='n';}printf("%d名学生信息如下:\n",L->length);printf("学号(15)姓名(15)性别(男:M女:F)成绩\n");for(i=0;ilength;i++)printf("%-16s%-16s%-16s%-10d\n",L->elem[i].number,L->elem[i].name,L->elem[i].sex,L->elem[i].score);}3.3查找学生信息intfindlist(sqlist*L){intj;chari[16];printf("1.按学号查找\n2.按姓名查找\n请选择:");scanf("%d",&j);if(j==1){printf("请输入学号:");scanf("%s",i);if(!strcmp(i,L->elem[j].number))//i==L->elem[j].number用数组函数returnj+1;return0;}else{printf("请输入姓名:");scanf("%s",i);for(j=0;jlength;j++)if(!strcmp(i,L->elem[j].name))//用数组函数returnj+1;return0;}}3.4删除学生信息intdelnode(sqlist*L){intj;chari[10];printf("1.按学号删除\n2.按姓名删除\n请选择:");scanf("%d",&j);if(j==1){printf("请输入学号:");scanf("%s",i);for(j=0;jlength;j++)if(!strcmp(i,L->elem[j].number))//i==L->elem[j].number用数组函数{for(;jlength;j++)L->elem[j]=L->elem[j+1];L->length--;return1;}return0;}else{printf("请输入姓名:");scanf("%s",i);for(j=0;jlength;j++)if(!strcmp(i,L->elem[j].name))//用数组函数{for(;jlength;j++)L->elem[j]=L->elem[j+1];//L->elem[j]以后的向前挪L->length--;return1;}return0;}}3.5输出学生信息voidprintlist(sqlist*L){inti;printf("%d名学生信息如下:\n",L->length);printf("学号(15)姓名(15)性别(男:M女:F)成绩\n");for(i=0;ilength;i++)printf("%-16s%-16s%-16s%-10d\n",L->elem[i].number,L->elem[i].name,L->elem[i].sex,L->elem[i].score);}3.6修改学生信息voidreviselist(sqlist*L){inti,x,a=0;charname[16];charsex[16];charnumber[16];intscore;printf("请选择你要改的同学的姓名");scanf("%16s",name);printf("请选择你要改的同学的信息\n");printf("1.修改学生的姓名\n");printf("2.修改学生的学号\n");printf("3.修改学生的性别\n");printf("4.修改学生的成绩\n");scanf("%d",&x);switch(x){case1:for(i=0;ilength;i++){if(strcmp(name,L->elem[i].name)==0){printf("请输入新名字");scanf("%16s",name);strcpy(L->elem[i].name,name);a=1;}}if(a==0)printf("对不起你要改的名字不存在\n");break;case2:for(i=0;ilength;i++){if(strcmp(name,L->elem[i].name)==0){printf("请输入新学号");scanf("%16s",number);strcpy(L->elem[i].number,number);a=1;}}if(a==0)printf("对不起你要改的名字不存在\n");break;case3:for(i=0;ilength;i++){if(strcmp(name,L->elem[i].name)==0){printf("请输入新性别");scanf("%16s",sex);strcpy(L->elem[i].sex,sex);a=1;}}if(a==0)printf("对不起你要改的名字不存在\n");break;case4:for(i=0;ilength;i++){if(strcmp(name,L->elem[i].name)==0){printf("请输入新成绩");scanf("%d",score);L->elem[i].score=score;a=1;}}if(a==0)printf("对不起你要改的名字不存在\n");break;}3.7退出学生信息管理系统voidtuichu(sqlist*L){if(!L->elem)free(L->elem);printf("\n\n再见,欢迎下次使用");exit(-2);}第四章总体设计4.1设计概述根据需求把整个系统分化成不同的模块,每个模块完成一个特定的子功能。把这些模块结合起来组成一个整体。逐一实现各个功能。4.2系统总流程图及功能模块划分经过对系统的需求分析,学生信息管理系统主要划分为三个部分:学生信息查询,学生信息管理,学生成绩录入三个功能模块。如图4.2系统的总体结构。 图4.2系统的总体结构4.2.1学生信息查询模块学生信息查询:学生可以根据学号、姓名、专业进行查询。如图3.2.2学生信息查询模块结构。 图4.2.1学生信息管理模块结构4.2.2学生信息查询模块学生信息查询:学生可以根据学号、姓名、专业进行查询。如图4.2.2学生信息查询模块结构。图4.2.2 学生信息管理模块结构第5章系统测试第五章系统测试1.在调试过程中出现了很多次的程序错误,警告和不能运行。在很多次的调试和重新改写之后,才可以用。 2.Visual C++确实是一门需要极其细心和耐心的课程,尤其在程序设计的过程中不可有一丝的马虎大意,否则将会花很大力气去改正。3.调试过程中最常见的便是代码输入错误,如字母大小写、顺序颠倒、符号的半/全角使用等一些问题,都是在调试过程中逐一改正的。5.1实验结果1.初始化2.输入3插入4查找5删除6修改7退出实验总结在程序设计方面,逐渐感觉到模块化设计的重要性。在程序设计时,应该分析出功能块,然后对其细节中的共性和特性作分析。在算法上使得其结果精简、完整,达到模块化,在编程时,思考方式就会集中在结构的逻辑上而非细节的问题上。这样可以使得程序更加严密可靠。而这样的技能是要在每次的程序设计及编程中慢慢积累的。这次的设计,让我大大地感觉到,对于程序设计中,对语言再熟悉也比不过在设计中算法和结构分析的真知灼见。当然,成功的程序设计是要建立在熟悉语言的基础之上的。平时语言的基本功要扎实。而每一次程序设计的经营能大大地增加对语言的熟悉和感知。程序设计的技能来自多方面,每一次的亲自实践、思考揣摩、刨根问底就会让自己更加清楚所欠缺的是什么。所以,现在觉得在设计实践中作为参考的书册阅读和研究远远比过单纯的阅读,因为它是在最紧迫的时间上填补自己最紧迫的不足。收获与心得通过这次程序设计,增加了我们学习软件的兴趣,加强了小组成员之间的协作能力。这次程序设计由老师提供课题,参考范例程序,经过自己的改写,实现程序设计要求。一个模块一个模块去做,在实际操作过程中会有一些错误,我们要自己动手去改,这样不光能学到知识还能有一些体会。在具体操作中,不光能对这学期所学的知识得到巩固,还能发现自己的不足之处,在以后操作中能更加注意。通过实际操作,学会C语言程序编程的基本步骤、基本方法,开
{if(L->length==L->listsize)
{newbase=(Elemtype*)realloc(L->elem,(List_INIT_SPACE+List_INC_SPACE)*sizeof(Elemtype));
if(newbase)
{L->elem=newbase;
L->listsize+=List_INC_SPACE;}
else
exit(OVERFLOW);}
printf("请输入第%d名同学的信息:
\n",i+1);
printf("学号(15)\n");
scanf("%16s",L->elem[L->length].number);
printf("姓名(15)\n");
scanf("%16s",L->elem[L->length].name);
printf("性别(男:
M女:
F)\n");
scanf("%16s",L->elem[L->length].sex);
printf("成绩\n");
scanf("%10d",&L->elem[L->length].score);
L->length++;}
printf("%d名学生信息如下:
\n",L->length);
printf("学号(15)姓名(15)性别(男:
F)成绩\n");
for(i=0;ilength;i++)
printf("%-16s%-16s%-16s%-10d\n",L->elem[i].number,L->elem[i].name,L->elem[i].sex,L->elem[i].score);}
3.2向顺序表中插入元素
voidinsertlist(sqlist*L)
{inti,j,k;charsign='y';Elemtype*newbase;Elemtypenewelem;
while(sign!
='n')
elseexit(OVERFLOW);}
printf("请输入要插入的同学的信息:
scanf("%16s",newelem.number);
scanf("%16s",newelem.name);
scanf("%16s",newelem.sex);
scanf("%10d",&newelem.score);
printf("要插入到第几个位置:
");
scanf("%d",&i);
while(i<1||i>L->length+1)
{printf("不能插入到第%d个位置!
\n只能插入第1到第%d个位置上!
\n请重新输入要插入的位置:
",L->length+1);
scanf("%d",&i);}
L->length++;
for(j=L->length-1;j>i-2;j--)
{for(k=0;k<16;k++)
{L->elem[j].name[k]=L->elem[j-1].name[k];
L->elem[j].number[k]=L->elem[j-1].number[k];
L->elem[j].sex[k]=L->elem[j-1].sex[k];}
L->elem[j].score=L->elem[j-1].score;}
j++;
for(k=0;k<16;k++)
{L->elem[j].name[k]=newelem.name[k];
L->elem[j].number[k]=newelem.number[k];
L->elem[j].sex[k]=newelem.sex[k];}
L->elem[j].score=newelem.score;
printf("是否还要输入?
(YorN)");
getchar();
scanf("%c",&sign);
if(sign=='n'||sign=='N')
sign='n';}
3.3查找学生信息
intfindlist(sqlist*L)
{intj;chari[16];
printf("1.按学号查找\n2.按姓名查找\n请选择:
scanf("%d",&j);
if(j==1)
{printf("请输入学号:
scanf("%s",i);
strcmp(i,L->elem[j].number))//i==L->elem[j].number用数组函数
returnj+1;
return0;}
{printf("请输入姓名:
for(j=0;jlength;j++)
strcmp(i,L->elem[j].name))//用数组函数
return0;}}
3.4删除学生信息
intdelnode(sqlist*L)
{intj;chari[10];
printf("1.按学号删除\n2.按姓名删除\n请选择:
{for(;jlength;j++)
L->elem[j]=L->elem[j+1];
L->length--;
return1;}
L->elem[j]=L->elem[j+1];//L->elem[j]以后的向前挪
3.5输出学生信息
voidprintlist(sqlist*L)
{inti;
3.6修改学生信息
voidreviselist(sqlist*L)
{inti,x,a=0;charname[16];charsex[16];charnumber[16];intscore;
printf("请选择你要改的同学的姓名");
scanf("%16s",name);
printf("请选择你要改的同学的信息\n");
printf("1.修改学生的姓名\n");
printf("2.修改学生的学号\n");
printf("3.修改学生的性别\n");
printf("4.修改学生的成绩\n");
scanf("%d",&x);
switch(x)
{case1:
{if(strcmp(name,L->elem[i].name)==0)
{printf("请输入新名字");
strcpy(L->elem[i].name,name);
a=1;}}
if(a==0)
printf("对不起你要改的名字不存在\n");break;
case2:
{printf("请输入新学号");
scanf("%16s",number);
strcpy(L->elem[i].number,number);
case3:
{printf("请输入新性别");
scanf("%16s",sex);
strcpy(L->elem[i].sex,sex);
case4:
{printf("请输入新成绩");
scanf("%d",score);
L->elem[i].score=score;
printf("对不起你要改的名字不存在\n");break;}
3.7退出学生信息管理系统
voidtuichu(sqlist*L)
{if(!
free(L->elem);
printf("\n\n再见,欢迎下次使用");
exit(-2);}
第四章总体设计
4.1设计概述
根据需求把整个系统分化成不同的模块,每个模块完成一个特定的子功能。
把这些模块结合起来组成一个整体。
逐一实现各个功能。
4.2系统总流程图及功能模块划分
经过对系统的需求分析,学生信息管理系统主要划分为三个部分:
学生信息查询,学生信息管理,学生成绩录入三个功能模块。
如图4.2系统的总体结构。
图4.2系统的总体结构
4.2.1学生信息查询模块
学生信息查询:
学生可以根据学号、姓名、专业进行查询。
如图3.2.2学生
信息查询模块结构。
图4.2.1学生信息管理模块结构
4.2.2学生信息查询模块
如图4.2.2学生信息查询模块结构。
图4.2.2 学生信息管理模块结构第5章系统测试
第五章系统测试
1.在调试过程中出现了很多次的程序错误,警告和不能运行。
在很多次的
调试和重新改写之后,才可以用。
2.Visual C++确实是一门需要极其细心和耐心的课程,尤其在程序设计的过
程中不可有一丝的马虎大意,否则将会花很大力气去改正。
3.调试过程中最常见的便是代码输入错误,如字母大小写、顺序颠倒、符号的半/全角使用等一些问题,都是在调试过程中逐一改正的。
5.1实验结果
1.初始化
2.输入
3插入
4查找
5删除
6修改
7退出
实验总结
在程序设计方面,逐渐感觉到模块化设计的重要性。
在程序设计时,应该分析出功能块,然后对其细节中的共性和特性作分析。
在算法上使得其结果精简、完整,达到模块化,在编程时,思考方式就会集中在结构的逻辑上而非细节的问题上。
这样可以使得程序更加严密可靠。
而这样的技能是要在每次的程序设计及编程中慢慢积累的。
这次的设计,让我大大地感觉到,对于程序设计中,对语言再熟悉也比不过在设计中算法和结构分析的真知灼见。
当然,成功的程序设计是要建立在熟悉语言的基础之上的。
平时语言的基本功要扎实。
而每一次程序设计的经营能大大地增加对语言的熟悉和感知。
程序设计的技能来自多方面,每一次的亲自实践、思考揣摩、刨根问底就会让自己更加清楚所欠缺的是什么。
所以,现在觉得在设计实践中作为参考的书册阅读和研究远远比过单纯的阅读,因为它是在最紧迫的时间上填补自己最紧迫的不足。
收获与心得
通过这次程序设计,增加了我们学习软件的兴趣,加强了小组成员之间的协作能力。
这次程序设计由老师提供课题,参考范例程序,经过自己的改写,实现程序设计要求。
一个模块一个模块去做,在实际操作过程中会有一些错误,我们要自己动手去改,这样不光能学到知识还能有一些体会。
在具体操作中,不光能对这学期所学的知识得到巩固,还能发现自己的不足之处,在以后操作中能更加注意。
通过实际操作,学会C语言程序编程的基本步骤、基本方法,开
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1