收藏 分销(赏)

数据结构课程设计-《学生成绩管理系统》《参考版》.doc

上传人:丰**** 文档编号:3992046 上传时间:2024-07-24 格式:DOC 页数:27 大小:86.54KB 下载积分:10 金币
下载 相关 举报
数据结构课程设计-《学生成绩管理系统》《参考版》.doc_第1页
第1页 / 共27页
数据结构课程设计-《学生成绩管理系统》《参考版》.doc_第2页
第2页 / 共27页


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

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服