1、淮阴工学院数据结构课程设计报告选题名称: 学生成绩管理系统 系(院): 数 理学 院专 业: 信息与计算科学班 级: 计科1102班 姓名: 徐连喜 学 号: 1104101233 指导教师: 周 海 岩 学年学期: 2011 2012 学年 第 1 学期 2012 年 06 月 06 日【摘要】21世纪,科学技术突飞猛进,经济知识和信息产业初见端倪,特别是信息技术和网络技术的讯速发展和广泛应用,对社会的政治,经济,军事,文化等领域产生越来越深刻。学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要.本论文叙述到的学生成绩管理系统是用IIS+ASP网页编
2、程+ACCESS数据库+DREAMWEAVER MX 2004+SQL查询语言实现的。重点介绍了学生成绩管理系统的实现过程:包括系统分析,系统调查,功能设计,数据库设计,系统实现,系统测试和调试等。本系统主要功能有查询学生成绩、单个添加学生成绩、批量添加学生成绩、删除学生成绩、管理页面和修改管理员密码等内容。【关键词】 成绩管理;成绩查询;C+目 录中文摘要 。.。.。.。.。.。.。.。.。.。.。.。. 11绪论 。.。.。.。.。.。.。.。.。.。.。. 41.1 选题背景 。.。.。.。.。.。.。.。.。.。 51。2 需求分析 。.。.。.。.。.。.。.。.。. 62总体设计
3、。.。.。.。.。.。.。.。.。.。.。.。. 72。1程序设计组成框图 .。.。.。.。.。.。.。.。.。. 82.2 模块功能说明 .。.。.。.。.。.。.。.。.。.。.。92。3 程序流程图 。.。.。.。.。.。.。.。.。.。.。.。.。102。4 主要函数之间相互调用 。.。.。.。.。.。.。.。.。. 113 在设计过程中的感受 。.。.。.。.。.。.。.12致谢。.。.。.。.。.。.。.。.。 13参考文献。.。.。.。.。.。.。.。.。.。 14附录:源程序清单。.。.。.。.。.。 151. 绪论1。1 选题背景为了提高高校学生信息的管理效率,方便对学生信息
4、进行管理、学校里面的学生和管理员方便去管理和查询学生信息,如再要进行查询,就得在众多的学生信息中查找自己的成绩信息,面对学院大量的学生信息,怎么可以即时而方便的管理,学生只要登录本系统就可以查找到自己的成绩信息,而管理员也方便去管理每学期的学生的成绩信息。建立一个学生信息管理系统,使学生信息管理工作规范化,系统化,程序化,避免学生管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改学生信息是必须而且十分迫切的工作。2。1 需求分析学生管理系统功能的信息量大,数据安全性和保密性要求最高.本功能实现对专业信息、学生信息、教师信息情况信息的管理和统计、课程信息和成绩信息查看及维
5、护.系统管理员可以浏览、查询、学生的基本信息,能添加、删除和修改学生信息,这部分功能应该由系统管理员执行,但是,删除某条专业基本信息记录时,应实现对该专业的相关信息也级联删除.并且还应具有查询,并打印输出的功能设计不同用户的操作权限和登陆方法、对所有用户开放的用户提供学生成绩信息查询、由于本系统功能实现方面并不太复杂,所以上面只是相关的学生信息管理查询的总体分析,具体实现就主要体现在学生管理,教师的管理和课程的管理这一块,也就是重点实现查询与添加学生信息,以及对成绩信息管理.2总体设计(1)程序设计组成框图学生成绩管理系统1.按班级输出学生成绩单2.按姓名查询3.增加学生4.删除学生5.按班级
6、修改学生成绩6.按班学期改学生成绩7.保存所有学生信息8.显示不及格学生成绩9.按平均成绩排序并输出成绩10.退出(2)模块功能说明1 输出功能:完成全部学生记录的显示。2 查询功能:输入姓名可以查询学生的详细信息.3 增加功能:增加新学生的信息。 4 删除功能:删除学生信息。5 修改功能:修改学生的错误信息。6保存功能:保存已输入信息。7读取功能:读取已输入信息.8显示功能:按要求显示学生记录。9 排序功能:按要求完成对学生信息的排序。 10 退出系统。(3)程序流程图开始输入指令(110)学生成绩单按姓名查询增加学生删除学生按班级修改按学期修改保存信息不及格成绩平均分排序退出1234567
7、89100结束(4)主要函数之间相互调用如下:主函数main ()的调用switch(choice)case 1:OutputInformation();break; case 2:DesplayInfoBystudentName();break;case 3:p=MallocNode();GetInformation(p); InsertOneNode(p); break;case 4:DeleteNodeBystudentNumber();break;case 5:ChangeMarkByName();break;case 6:ChangeMarkByNumber();break;case
8、 7:SaveLinkToFile();break;case 8:DesplayMarkSegment();break;case 9:CompositorByTotalMark();break;case 10:SaveLinkToFile();总 结首先经过一周的编程实习,并在后一段的报告总结,我对数据结构这门科有新的认识,本人实在是获益不浅!要想编写一个准确、高效并有使用价值的程序,一定先要对课本知识熟悉,还要掌握必要的上机操作能力,写程序其实很容易而关键在于调试程序。这次设计,让我重新掌握了数据结构,而且还得到了用数据结构解决实际问题的宝贵经验。其次, 通过此次编程我也发现了自己在学习中的
9、错误和不足,复习了以前学过的知识。同时也学到了一些没学过的知识,让我从中收益非浅,也为期末考试准备了一下!更重要的是培养了独立思考问题和解决问题的能力,熟悉了一些基本操作和解决问题的方法!致 谢因为初次接触等原因此次设计遇到了许多问题,我深刻体会到老师发挥的重要作用, 数据结构程序对我们来说比较难,在匆忙的学习中更是难上加难,似乎觉得自己仅是个匆匆过客,但在老师的帮助下我学会了如何调试,如何查找系统没有提示的错误,最后终于排除万难把程序搞定,体会到原来编程也挺有意思的快感。我想没有老师的帮助我很难在短期内把程序设计做的这样好,在此特地感谢老师的帮助。参 考 文 献1 李丽娟 。 C语言程序设计
10、教程(第二版). 北京:人民邮电出版社 20092 刁成嘉 。 C语言程序设计论文 D。北京:清华大学出版社 20043 杨文军,杨柳 。 C语言程序设计教程M. 北京:清华大学出版社 20104 周启海 。 C语言程序设计报告R。北京:中国水利工程出版社 20055 谭浩强 。 C程序设计(第三版)M.北京:清华大学出版社 2005附 录源程序清单#includestdio。hincludeconio。h#include#includetypedef struct STUDENTchar studentNumber10;/*学生学号/char studentName20;/学生姓名/char
11、 className20;/班级名称*/char yearName20;/*学期名称/float mark1;/第1门成绩*/float mark2;/第2门成绩*/float mark3;/*第3门成绩/struct STUDENT next;STUDENT;STUDENT headLink;/*链表表头指针*/*以下是函数声明*/void ReadInfoFormFile(void);void DesplayMenu(void);void CreateHeadLink(void);STUDENT MallocNode(void);void GetInformation(STUDENT *t
12、);void OutputInformation(void);void DesplayInfoBystudentName(void);void DesplayOneNode(STUDENT *t);void InsertOneNode(STUDENT *t);void DeleteNodeBystudentNumber(void);void ChangeMarkByName(void);void ChangeMarkByNumber(void);void SaveLinkToFile(void);void DesplayMarkSegment(void);void CompositorByTo
13、talMark(void);int choose;/用于接受用户的选择/*主函数/void main()CreateHeadLink();ReadInfoFormFile();DesplayMenu();/*函数功能:从文件中读学生信息到链表中*/void ReadInfoFormFile(void)FILE fp;STUDENT p;fp=fopen(student。txt”,r);if(!fp)printf(”文件不存在n”);return;p=MallocNode();while(fscanf(fp,”s%ssf%ff,pstudentNumber,p-studentName,pclas
14、sName,&(pmark1),(pmark2),&(p-mark3)0)InsertOneNode(p);p=MallocNode();fclose(fp);/*函数功能:显示菜单,根据用户的输入完成相应的功能*/void DesplayMenu(void)STUDENT p;printf(”-请选择相应功能-nn”);printf(”| 1 按班级输出学生成绩单 |n);printf(| 2 按姓名查询 |n”);printf(”| 3 增加学生 n);printf(” 4 删除学生 |n);printf(” 5 按班级修改学生成绩 n”);printf(”| 6 按学期修改学生成绩 n”
15、);printf(” 7 保存所有学生信息 n”);printf(”| 8 显示不及格学生成绩 n”);printf(” 9 按平均成绩排序并输出绩 n);printf(| 10 退出 nn”);scanf(”%d”,choose);/*取得用户的选择/switch(choose)case 1:OutputInformation();/*显示所有学生的信息/break;case 2:DesplayInfoBystudentName();break;case 3:p=MallocNode();/*先申请一个新结点/GetInformation(p);/*要求用户输入信息到新结点中*/Insert
16、OneNode(p);/将新结点加到链表中/break;case 4:DeleteNodeBystudentNumber();/*根据用户输入的学号删除该学生/break;case 5:ChangeMarkByName();/根据用户输入的姓名修改学生成绩/break;case 6:ChangeMarkByNumber();/根据用户输入的学号修改学生成绩*/break;case 7:SaveLinkToFile();/保存数据*/break;case 8:DesplayMarkSegment();/显示不及格的学生成绩/break;case 9:CompositorByTotalMark()
17、;/*按平均成绩排序*/break;case 10:SaveLinkToFile();/*保存数据后再退出/free(headLink);break;default:break;DesplayMenu();/*递归调用/*函数功能:建立链表表头*/void CreateHeadLink(void)STUDENT p;p=(STUDENT)malloc(sizeof(STUDENT);headLink=p;pnext=NULL;/*函数功能:申请一个新结点,并将其初始化*/STUDENT *MallocNode(void)STUDENT p;int i;p=(STUDENT)malloc(siz
18、eof(STUDENT);if(p=NULL)return NULL;for(i=0;istudentNamei=0;for(i=0;i20;i+)p-classNamei=0;pmark1=0。0;p-mark2=0.0;p-mark3=0。0;p-next=NULL;return p;/*函数功能:取得用户输入的学生信息*/void GetInformation(STUDENT *t)printf(请输入学生学号:n);scanf(%s,tstudentNumber);printf(”请输入学生姓名:n);scanf(”s”,tstudentName);printf(请输入该生所在班级:n
19、”);scanf(%s”,tclassName);printf(”请输入第1门成绩:n);scanf(”%f”,&(t-mark1);printf(”请输入第2门成绩:n);scanf(%f”,(tmark2));printf(”请输入第3门成绩:n);scanf(%f”,(t-mark3);/*函数功能:在链表的结尾处增加一个结点*/void InsertOneNode(STUDENT t)STUDENT *p;p=headLink;while(pnext)p=pnext;pnext=t;/*函数功能:根据用户输入的学生姓名显示该学生的信息*/void DesplayInfoBystuden
20、tName(void)STUDENT *p;char studentName20;char flag=0;p=headLink-next;printf(”请输入学生姓名:n”);scanf(s”,studentName);while(p)if(strcmp(pstudentName,studentName)=0)printf(学号t姓名t班级t成绩1t成绩1t成绩3t总成绩t平均成绩nn);DesplayOneNode(p);flag=1;break;p=pnext;if(!flag)printf(”对不起,不存在姓名为 s 的学生n”,studentName);/*函数功能:输出一个结点的信
21、息*/void DesplayOneNode(STUDENT t)printf(%st”,t-studentNumber);printf(”st,t-studentName);printf(”st,t-className);printf(.2ft,tmark1);printf(”%.2ft”,t-mark2);printf(。2ft”,tmark3);printf(”.2ft”,tmark1+t-mark2+t-mark3);printf(”。2ftn”,(tmark1+tmark2+tmark3)/3);/*函数功能:根据用户输入的学号删除该学生*/void DeleteNodeBystud
22、entNumber(void)char studentNumber10;STUDENT p,*q;char flag=0;printf(请输入要删除的学生学号:”);scanf(s”,studentNumber);p=headLink;q=headLinknext;while(q) if(strcmp(qstudentNumber,studentNumber)=0) pnext=q-next; free(q); flag=1; break; p=pnext; q=q-next; if(!flag)printf(”不存在该学号的学生n);return;printf(成功删除n);/*函数功能:显
23、示所有学生的信息*/void OutputInformation(void)STUDENT *p;p=headLinknext;if(p=NULL)printf(现在没有学生信息,请先输入学生信息nn);return;printf(学号t姓名t班级t成绩1t成绩1t成绩3t总成绩t平均成绩nn”);while(p)DesplayOneNode(p);p=p-next;/*函数功能:根据输入的班级修改成绩*/void ChangeMarkByName(void)STUDENT *p;int a;char studentName20;char flag=0;float mark1,mark2,ma
24、rk3;p=headLink-next;printf(”请输入学生班级:n”);scanf(”d”,&a);printf(”请输入学生姓名:n”);scanf(”s,studentName);while(p)if(strcmp(p-studentName,studentName)=0)printf(”请输入新的第1门成绩:n);scanf(%f,&mark1);printf(请输入新的第2门成绩:n”);scanf(”f”,mark2);printf(请输入新的第3门成绩:n);scanf(%f”,mark3);pmark1=mark1;pmark2=mark2;pmark3=mark3;fl
25、ag=1;printf(”修改成功n”);break;p=pnext;if(!flag)printf(对不起,不存在班级为 %s 的学生n,studentName);/*函数功能:根据输入的学期修改成绩*/void ChangeMarkByNumber(void)STUDENT p;int b;char studentNumber20;char flag=0;float mark1,mark2,mark3;p=headLink-next;printf(”请输入学生所在学期:n);scanf(”d,b);printf(”请输入学生学号:n);scanf(”s”,studentNumber);wh
26、ile(p)if(strcmp(pstudentNumber,studentNumber)=0)printf(请输入新的第1门成绩:n);scanf(f”,mark1);printf(请输入新的第2门成绩:n);scanf(f,mark2);printf(”请输入新的第3门成绩:n);scanf(”f,mark3);p-mark1=mark1;pmark2=mark2;pmark3=mark3;flag=1;printf(”修改成功n);break;p=pnext;if(!flag)printf(对不起,不存在学期为 %s 的学生n,studentNumber);/*函数功能:保存链表数据到文
27、件中*/void SaveLinkToFile(void)STUDENT p;FILE fp;p=headLink-next;if(p=NULL)printf(现在没有学生信息,请先输入学生信息nn);return;fp=fopen(”student。txt”,w+”);if(!fp)printf(”文件不存在n);return;while(p)fprintf(fp,”s %s s f f fn”,pstudentNumber,p-studentName,p-className,pmark1,p-mark2,pmark3);p=pnext;fclose(fp);/*函数功能:不及格学生成绩*/
28、void DesplayMarkSegment(void)STUDENT p;int count=0;p=headLink-next;printf(”60分以下(不及格)的学生成绩如下:n);printf(学号t姓名t班级t成绩1t成绩1t成绩3t总成绩t平均成绩nn”);while(p)if(6((int)(pmark1/10))(6(int)(pmark2/10))|(6((int)(pmark3/10))/只要有一科不及格就认为该生不及格*/count+;DesplayOneNode(p);p=p-next;printf(不及格的学生一共有d人n,count);/*函数功能:按平均成绩排
29、序*/void CompositorByTotalMark(void)STUDENT exchange,*r,*p,*q;r=headLinknext;if(r=NULL)printf(现在还没学生信息,请先输入学生信息n);return;while(r)/*两层while循环实现排序/p=r;q=r-next;while(q)if((qmark1+qmark2+q-mark3)(p-mark1+pmark2+pmark3))strcpy(exchange。studentNumber,q-studentNumber);/*先复制q结点信息到exchange/strcpy(exchange。st
30、udentName,qstudentName);strcpy(exchange。className,qclassName);exchange。mark1=q-mark1;exchange。mark2=qmark2;exchange.mark3=qmark3;strcpy(qstudentNumber,p-studentNumber);/再复制p结点信息到q/strcpy(q-studentName,pstudentName);strcpy(q-className,pclassName);q-mark1=pmark1;qmark2=pmark3;qmark3=pmark3;strcpy(pstu
31、dentNumber,exchange。studentNumber);/*最后复制exchange结点信息到p*/strcpy(pstudentName,exchange.studentName);strcpy(p-className,exchange。className);p-mark1=exchange。mark1;p-mark2=exchange。mark2;p-mark3=exchange。mark3;q=qnext;r=rnext;OutputInformation();修改程序如下:/ 2015年12月7日编制 丹白工作室 /#includestdio。h#includeinclu
32、de#includestudentNumber,pstudentName,pclassName,(pmark1),(pmark2),&(p-mark3)0)InsertOneNode(p);p=MallocNode();fclose(fp);/*函数功能:显示菜单,根据用户的输入完成相应的功能*/void DesplayMenu(void)STUDENT p;printf(tt-请选择相应功能-nn”);printf(”ttt 0 输入相应学生信息 |n”);printf(”ttt| 1 按班级输出学生成绩单 |n”);printf(ttt 2 按姓名查询 n);printf(ttt 3 增加
33、学生 n”);printf(ttt 4 删除学生 n”);printf(ttt 5 按班级修改学生成绩 |n”);printf(”ttt 6 按学期修改学生成绩 n”);printf(”ttt| 7 保存所有学生信息 |n”);printf(”ttt 8 显示不及格学生成绩 |n”);printf(ttt| 9 按平均成绩排序并输出绩 n);printf(ttt| 10 退出 |nn);printf(”tt-nn”);printf(”tt请您输入您所选序号:n”);scanf(”%d,choose);/取得用户的选择*/switch(choose)case 0:p=MallocNode();/*先申请一个新结点/GetInformation(p);/*要求用户输入信息到新结点中/InsertOneNode(p);/*将新结点加到链表中*/break;case 1:OutputInformation();/显示所有学生的信息/break;case 2:DesplayInfoBystudentNa