学生成绩管理系统课程设计报告_第1页
学生成绩管理系统课程设计报告_第2页
学生成绩管理系统课程设计报告_第3页
学生成绩管理系统课程设计报告_第4页
学生成绩管理系统课程设计报告_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学生成绩管理系统学院专业_班级学号姓名课题_指导教师报告成绩_摘要为了进一步提高C语言编程及调试能力,更好的把数据结构融合到开发当中,采用结构化设计自顶向下、逐步求精的方法进行编写,本系统本着低耦合、高内聚的开发理念,将系统分为几大模块,便于控制和管理,在本次开发过程中大量使用了链表和文件操作,包括用户名以及密码的保存,学生信息的基本操作主要通过链表实现,以文件形式进行存储。本文介绍课程设计课题的选题意义,说明了本系统提供的主要功能,对设计思路、功能模块、流程图、中心算法进行了详细的说明,并画出流程框图,并提供了系统的主要功能模块代码。通过本课程设计,使自己更加系统地理解和掌握数据结构的基本概念;能自如地根据实际要求,设计相应的数据结构,并运用C语言实现所设计的算法,编写较大型的程序,分析和解决实际应用问题,进一步加深、巩固所学专业课程的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。掌握C语言独立的编写、调试应用程序和进行其它相关设计的技能。关键词:结构体;流程图;链表;文件目录TOC\o"1-5"\h\z\o"CurrentDocument"1绪论4\o"CurrentDocument"1.1系统概述4\o"CurrentDocument"1.2课题研究目的与意义42课程设计要求4\o"CurrentDocument"2.1系统功能要求52.2技术可行性5\o"CurrentDocument"3设计题目分析6\o"CurrentDocument"3.1题目简介6\o"CurrentDocument"3.2设计要求64课程设计要求7\o"CurrentDocument"4.1总体设计74.2详细设计8\o"CurrentDocument"4.3调试与测试10\o"CurrentDocument"5设计心得与总结16\o"CurrentDocument"6参考文献171绪论1.1系统概述本系统为管理学生成绩提供了便利,系统主要通过链表形式实现,通过文件进行存储,主要功能模块包括管理员登录,注册,学生信息的增加、删除、修改、查找学生信息等。登录、注册模块主要通过链表和文件实现。1.2课题研究目的与意义通过本次课程设计,使自己巩固c语言基础,加深对数据结构链表以及文件操作的理解,按照结构化的自顶向下、逐步求精的方法进行开发,能自如地根据实际要求,设计相应的数据结构,并运用c语言实现所设计的算法,编写较大型的程序,分析和解决实际应用问题。同时通过对程序的开发以及论文的编写,让自己可以在开发的同时兼顾文档的管理。2.1系统功能要求用C语言实现系统;系统登录功能的实现;注册功能的实现(用链表和文件实现);对学生信息(包括学号、姓名、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出;学生信息包括:其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能:1)每一条记录包括一个学生的学号、姓名、3门课成绩;2)成绩信息录入功能:(成绩信息用文件保存,可以一次完成若干条记录的输入;3)成绩信息显示浏览功能,完成全部学生记录的显示;4)查询功能:完成按姓名查找学生记录,并显示;5)成绩信息的删除:按学号进行删除某学生的成绩;6)排序功能:按学生平均成绩进行排序;7)应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观。2.2可行性分析经济可行性成绩管理系统版本形形色色,本系统纯粹为了个人学习开发,在个人pc上进行开发,开发工具为DevC++,工具小巧方便,为系统的编写提供了便利。技术可行性本系统主要通过链表、文件、结构体等实现,在此之前有着各种各样的学生成绩管理系统,证明该系统是可行的。3设计题目分析3.1题目简介学生成绩管理系统主要对学生成绩信息进行管理,每个学生是一条记录,包括姓名,学号,每门课的成绩等。3.2设计要求学生成绩管理系统严格按照结构化的设计方法,自顶向下、逐步求精,从搭建整体框架到依次实现,以下是具体要求:用c语言结构体、链表、文件实现程序设计;利用链表实现学生信息的数据结构设计;系统的各个功能模块要求用函数的形式实现,每个功能模块分工明确;界面友好(良好的人机交互),程序加必要的注释。4.1总体设计学生成绩管理系统流程图:主要包括登录模块,学生成绩管理两大模块。程序主框架如下图所示:二苹单图4.11.登录模块:初步使用链表以及文件实现模『•:矣中图4.22.功能模块:4.3函数说明public.h:包括各种头文件以及结构体的声明。main.c:主函数。menu.c:菜单函数。func.c:学生成绩管理相关函数,增删改查。4.4调试与测试系统编写过程中因为对指针的操作不熟练导致许多错误,通过单步调试一步一步进行调试可以很好的规避错误,由于对逻辑结构掌握不清楚,导致程序结构设计不合理,程序时间复杂度过大,通过翻阅资料,使程序的结构合理化。菜单界面运行如下:123412345录息绩耆心

F信成记信

牛生生生生

鼻$$$2:r

人碧除入■程目c+-F\Stu_scare_man2.0\Stj_5core_m!an2.0.exef1咛欢i曲八学生房绩管犊系统好情从中运择功能操作操作:图4-1菜单界面输入函数界面运行如下:__^一IF土犒程目最、D取c+-F\Stu_$core_man2.0\Stu:_5core_man210.-exe阿入学号箱入学生姓名4鼠大语文成8责便人飙学成绩施入英语成绩4S_图4-2输入函数界面查询信息模块运行如下:图4-3查询信息界面删除模块运行界面如下:图4-4删除模块界面插入模块运行界面如下:图4-5插入模块界面显示信息模块运行界面如下:图4-6显示信息模块界面信息读取模块运行界面如下:图4-7信息读取模块界面信息保存模块界面运行如下:图4-8信息保存模块界面排序模块运行界面如下:图4-9排序模块界面5设计心得与总结通过对学生成绩管理系统的编写使自己的C语言编程能力有了质的提高,学习到了如何模块化的分析及设计系统,成功地运用各类函数、循环变量、结构化的程序设计,以及结构体、指针的使用。但在学习中发现,编程确实不是很好做的,并非是你想要就能完成的,它需要的是认真、仔细地对待每一个程序块,特别是在对指针的使用时更加困难,那些指针指来指去,一不小心就会看错,编译不出来。经过这次课程设计,我发现自己不少的不足之处,我将会在以后的学习中把它们改正过来,努力学到更多的知识。6参考文献谭浩强.C程序设计.北京:清华大学出版社,2005高一凡.数据结构算法解析.北京:清华大学出版社,2008姜灵芝.C语言课程设计案例精编.北京:清华大学出版社,2008⑷严蔚敏.数据结构(C语言版).北京:清华大学出版社,1997[5]BrianW.KernighanC程序设计语言徐宝文译机械工业出版社,20047附录主函数:main.c#include"public.h"intmain(){Stu_score*head=NULL;intno;while(1){no=menu();system("cls");switch(no){case1:head=creat();break;case2:head=load(head);break;case3:search(head);break;case4:head=del(head);break;case5:head=Insert(head);break;case6:print(head);break;/*case7:statistics(head);break;*/case8:save(head);break;case9:sort(head);break;case0:exit(0);default:printf("输入错误,请重试!\n");}getchar();}}头文件:public.h:#include<conio.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<windows.h>#defineLENsizeof(structstudent)typedefstructstudent//定义结构体{intnum;charname[32];floatscore;floatChinese;floatEnglish;floatmath;floatsum;floatave;structstudent*next;}Stu_score;菜单函数:menu.hintmenu()//菜单函数{inti;intno;system("cls");for(i=0;i<80;i++){printf("*");}printf("\t\t\t**欢迎进入学生成绩管理系统**\n");for(i=0;i<80;i++){printf("*");}printf("**\t1:输入学生记录\t\t6:输出学生成绩\t**\n");printf("**\t2:读取学生信息\t\t7:统计学生成绩\t**\n");printf("**\t3:查询学生成绩\t\t8:保存学生信息\t**\n");printf("**\t4:删除学生记录\t\t9:成绩排序\廿*");printf("**\t5:插入学生信息\t\t0:退出系统\t**\n");for(i=0;i<80;i++){printf("*");}printf("请从0~9中选择功能操作操作:”);scanf("%d",&no);getchar();returnno;}功能函数:func.c#include"public.hStu_score*creat()//创建链表{〃定义变量Stu_score*head=NULL;Stu_score*p=NULL,*q=NULL;intn=0;intno;//分配空间,初始化p=q=(Stu_score*)malloc(LEN);if(!p){printf("初始化失败”);returnhead;}system("cls");printf("输入学号\n");scanf("%d",&no);while(no!=0){n=n+1;if(n==1){head=p;}else{q->next=p;}q=p;p->num=no;printf("输入学生姓名\n");scanf("%s”,p->name);printf('输入语文成绩\n");scanf("%f”,&p->Chinese);printf(-输入数学成绩\n");scanf("%f”,&p->math);printf("输入英语成绩\n");scanf("%f”,&p->English);p->sum=p->Chinese+p->math+p->English;p->ave=p->sum/3;printf("继续输入,输入0返回主界面”);scanf("%d",&no);if(no!=0){p=(Stu_score*)malloc(LEN);}}p->next=NULL;returnhead;}voidprint(Stu_score*head)//输出函数{Stu_score*p=NULL;system("cls");p=head;if(head!=NULL){printf("\n");printf("l学号\tl姓名\tl语文\tl英语\tl数学\tl总分对平均分\tl\n");printf("\n");while(p!=NULL){printf("l%d\tl%s\tl%.1f\tl%.1f\tl%.1f\tl%.1f\tl%.1f\tl\n",p->num,p->name,p->Chinese,p->English,p->math,p->sum,p->ave);p=p->next;}else{printf("表为空!”);}}Stu_score*del(Stu_score*head)//删除函数{Stu_score*p,*q;intnum;printf(-输入要删除的学生的学号,输0退出:,scanf("%d”,&num);getchar();while(num!=0){if(head==NULL){printf("\n表中无元素!\n");returnhead;}p=head;while(num!=p->num&&p->next!=NULL){q=p;p=p->next;}if(num==p->num){if(p==head){head=p->next;}else{q->next=p->next;free(p);system("cls");printf(”删除成功\n");Sleep(1000);}else{printf("不存在此学生!\n");returnhead;}system("cls");printf("输入学号继续删除,输0退出:");scanf("%d”,&num);}returnhead;}//待调试Stu_score*load(Stu_score*head)//读取文件信息{intn;FILE*fp;Stu_score*p=NULL;Stu_score*q=NULL;if((fp=fopen("E:\\成绩管理系统.txt”,"r+"))==NULL){printf("不能打开文件!\n");returnNULL;}TOC\o"1-5"\h\zfscanf(fp,”\n");fscanf(fp,"I学号\tl姓名\tl语文\tl英语\tl数学边总分^平均分\tl\n");fscanf(fp,"\n");printf("\n");printf("l学号\tl姓名\tl语文\tl英语\tl数学\tl总分边平均分\州”);printf("\n");p=(Stu_score*)malloc(LEN);fscanf(fp,"%d%s%f%f%f%f%f",&p->num,p->name,&p->Chinese,&p->English,&p->math,&p->sum,&p->ave);printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|\n",p->num,p->name,p->Chinese,p->English,p->math,p->sum,p->ave);head=NULL;while(feof(fp)){n=n+1;if(n==1){head=p;}else{q->next=p;}q=p;if(feof(fp)){p=(Stu_score*)malloc(LEN);fscanf(fp,"%d%s%f%f%f%f%f\n",&p->num,p->name,&p->Chinese,&p->English,&p->math,&p->sum,&p->ave);printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|\n",p->num,p->name,p->Chinese,p->English,p->math,p->sum,p->ave);}}p->next=NULL;fclose(fp);returnhead;//用尾插法插入学生记录Stu_score*Insert(Stu_score*head){intno;Stu_score*isrt=NULL;Stu_score*p=NULL;printf("\n输入要增加的学生学号,输0退出!\n");scanf("%d",&no);while(no!=0){isrt=(Stu_score*)malloc(LEN);isrt->num=no;printf("输入学生姓名:”);scanf("%s”,isrt->name);printf("输入语文成绩:");scanf("%f",&isrt->Chinese);printf("输入英语成绩:,scanf("%f”,&isrt->English);printf(-输入数学成绩:,scanf("%f”,&isrt->math);isrt->sum=isrt->Chinese+isrt->math+isrt->English;isrt->ave=isrt->sum/3.0;if(head==NULL){printf("表为空,将建立一个学生信息表,head=isrt;isrt->next=NULL;}else{p=head;while(p->next!=NULL){p=p->next;}if(p->next==NULL);{p->next=isrt;isrt->next=NULL;}}printf("继续插入,输入学号”);scanf("%d",&no);}returnhead;}intsave(Stu_score*head)//保存函数{Stu_score*p=NULL;FILE*fp;if((fp=fopen("E:\\成绩管理系统.txt”,"w+"))==NULL){printf("不能打开文件!\n");return0;}p=head;fprintf(fp,”\n”);fprintf(fp,"I学号\tl姓名\tl语文\tl英语\tl数学\tl总分对平均分\tl\n");fprintf(fp,"\n");while(p!=NULL){fprintf(fp,"%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",p->num,p->name,p->Chinese,p->English,p->math,p->sum,p->ave);p=p->next;}fclose(fp);printf("文件已经保存!\n");return0;}Stu_score*search(Stu_score*head)//查询函数{intnum;Stu_score*p,*q;printf(-输入要查询的学生的学号:");scanf("%d”,&num);printf("\n");printf("|学号\t|姓名\t|语文\t|英语\t|数学\t|总分边平均分\州”);printf("\n");while(num!=0){if(head==NULL){printf("\n表为空,无任何学生记录!\n");Sleep(500);return(head);}p=head;while(num!=p->num&&p->next!=NULL){q=p;p=p->next;}if(num==p->num){printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|\n",p->num,p->name,p->Chinese,p->English,p->math,p->sum,p->ave);printf("\n");}else{printf("不存在此学生!\n");getchar();returnhead;}printf("继续输入,输0退出:”);scanf("%d”,&num);}return(head);}Stu_score*sort(Stu_score*head)//排序函数{Stu_score*p,*max;inti;intno;for(i=0;i<80;i++){printf("*");}printf("1按学生学号排序\^2按语文成绩排序\t\t3按英语成绩排序\n");printf("4按数学成绩排序\^5按平均分排序\t\t6按总分排序\/);for(i=0;i<80;i++){printf("*");}printf("请选择操作,输入0退出:,scanf("%d",&no);while(no!=0){switch(no){case1:sortbynum(head);break;case2:sortbyCh_zn(head);break;case3:sortbymath(head);break;case4:sortbyEn(head);break;case5:sortbyave(head);break;case6:sortbysum(head);break;default:printf("输入错误,请重试!\n");}getchar();getchar();system("cls");for(i=0;i<80;i++){printf("*");}printf("1按学生学号排序\t\t2按语文成绩排序\^3按英语成绩排序\/);printf("4按数学成绩排序\t\t5按平均分排序\t\t6按总分排序");for(i=0;i<80;i++){printf("*");}printf("重新排序或输入0退出:”);scanf("%d",&no);returnhead;}〃按学号排序Stu_score*sortbynum(Stu_score*head){intnum;charname[32];floatscore;floatChinese;floatEnglish;floatmath;floatsum;floatave;Stu_score*tmp=NULL;Stu_score*p=NULL;Stu_score*q=NULL;if(head==NULL){printf("\n没有任何学生资料,请先建立链表!\n");return(head);}for(p=head;p!=NULL;p=p->next){for(q=p->next;q!=NULL;q=q->next){if(q->num<p->num){num=p->num;p->num=q->num;q->num=num;strcpy(name,p->name);strcpy(p->name,q->name);strcpy(q->name,name);Chinese=p->Chinese;p->Chinese=q->Chinese;q->Chinese=Chinese;math=p->math;p->math=q->math;q->math=math;English=p->English;p->English=q->English;q->English=English;ave=p->ave;p->ave=q->ave;q->ave=ave;sum=p->sum;p->sum=q->sum;q->sum=sum;}}}print(head);returnhead;}Stu_score*sortbyCh_zn(Stu_score*head){intnum;charname[32];floatscore;floatChinese;floatEnglish;floatmath;floatsum;floatave;Stu_score*tmp=NULL;Stu_score*p=NULL;Stu_score*q=NULL;if(head==NULL){printf("\n没有任何学生资料,请先建立链表!\n");return(head);}for(p=head;p!=NULL;p=p->next){for(q=p->next;q!=NULL;q=q->next){if(q->Chinese<p->Chinese){num=p->num;p->num=q->num;q->num=num;strcpy(name,p->name);strcpy(p->name,q->name);strcpy(q->name,name);Chinese=p->Chinese;p->Chinese=q->Chinese;q->Chinese=Chinese;math=p->math;p->math=q->math;q->math=math;English=p->English;p->English=q->English;q->English=English;ave=p->ave;p->ave=q->ave;q->ave=ave;sum=p->sum;p->sum=q->sum;q->sum=sum;}}}print(head);returnhead;Stu_score*sortbymath(Stu_score*head){intnum;charname[32];floatscore;floatChinese;floatEnglish;floatmath;floatsum;floatave;Stu_score*tmp=NULL;Stu_score*p=NULL;Stu_score*q=NULL;if(head==NULL){printf("\n没有任何学生资料,请先建立链表!\n");returnNULL;}for(p=head;p!=NULL;p=p->next){for(q=p->next;q!=NULL;q=q->next){if(q->math<p->math){num=p->num;p->num=q->num;q->num=num;strcpy(name,p->name);strcpy(p->name,q->name);strcpy(q->name,name);Chinese=p->Chinese;p->Chinese=q->Chinese;q->Chinese=Chinese;math=p->math;p->math=q->math;q->math=math;English=p->English;p->English=q->English;q->English=English;ave=p->ave;p->ave=q->ave;q->ave=ave;sum=p->sum;p->sum=q->sum;q->sum=sum;}}}print(head);returnhead;}Stu_score*sortbyEn(Stu_score*head){intnum;charname[32];floatscore;floatChinese;floatEnglish;floatmath;floatsum;floatave;Stu_score*tmp=NULL;Stu_score*p=NULL;Stu_score*q=NULL;if(head==NULL){printf("\n没有任何学生资料,请先建立链表!\n");returnNULL;}for(p=head;p!=NULL;p=p->next)for(q=p->next;q!=NULL;q=q->next){if(q->English<p->English){num=p->num;p->num=q->num;q->num=num;strcpy(name,p->name);strcpy(p->name,q->name);strcpy(q->name,name);Chinese=p->Chinese;p->Chinese=q->Chinese;q->Chinese=Chinese;math=p->math;p->math=q->math;q->math=math;English=p->English;p->English=q->English;q->English=English;ave=p->ave;p->ave=q->ave;q->ave=ave;sum=p->sum;p->sum=q->sum;q->sum=sum;}}}print(head);returnhead;}Stu_score*sortbyave(Stu_score*head){intnum;charname[32];f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论