c语言 学生成绩管理系统.docx

上传人:小飞机 文档编号:3155247 上传时间:2023-03-11 格式:DOCX 页数:15 大小:40.99KB
返回 下载 相关 举报
c语言 学生成绩管理系统.docx_第1页
第1页 / 共15页
c语言 学生成绩管理系统.docx_第2页
第2页 / 共15页
c语言 学生成绩管理系统.docx_第3页
第3页 / 共15页
c语言 学生成绩管理系统.docx_第4页
第4页 / 共15页
c语言 学生成绩管理系统.docx_第5页
第5页 / 共15页
亲,该文档总共15页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《c语言 学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《c语言 学生成绩管理系统.docx(15页珍藏版)》请在三一办公上搜索。

1、c语言 学生成绩管理系统C语言课程设计报告书 课程名称:学生信息管理系统 一、设计目的: 本学期我们学习了C语言,由于初接触,学习有一定困难;于是学校给我们提供一次巩固提高的机会-课程设计。该可程设计要求学生既动手又动脑,自学,查资料,独立实践。将本学期课本上的理论知识和实际有机的结合起来,锻炼学生实际分析问题和解决问题的能力,提高学生适应实际、实践编程的能力,使对C语言系统编程有一个大致的了解。 C语言的实践。掌握C语言函数的定义方法,函数的声明及函数的调用过程。掌握结构体类型变量的定义和使用,综合应用C语言的知识,实现一个完整的系统,提高编程能力,体会软件程序的开发过程。 二、总体设计 程

2、序设计组成框图 1.按班级输出学生成绩单 2.按姓名查询 3.增加学生 4.删除学生 5.按班级修改学生成绩 6.按班学期改学生成绩 7.保存所有学生信息 8.显示不及格学生成绩 9.按平均成绩排序并输出成绩 10.退出 模块功能说明 1 输出功能:完成全部学生记录的显示。 2 查询功能:输入姓名可以查询学生的详细信息。 3 增加功能:增加新学生的信息。 4 删除功能:删除学生信息。 5 修改功能:修改学生的错误信息。 6保存功能:保存已输入信息。 学生成绩管理系统 7读取功能:读取已输入信息。 8显示功能:按要求显示学生记录。 9 排序功能:按要求完成对学生信息的排序。 10 退出系统。 程

3、序流程图 开始 输入指令 1 学生成绩单 按姓名查询 2 增加学生 3 删除学生 4 按班级修改 5 按学期修改 6 保存信息 7 不及格成绩 8 平均分排序 9 10退出 结束 主要函数之间相互调用如下: 主函数main 的调用 switch(choice) case 1:OutputInformation;break; case 2:DesplayInfoBystudentName;break; case 3:p=MallocNode;GetInformation(p); InsertOneNode(p); break; case 4:DeleteNodeBystudentNumber;b

4、reak; case 5:ChangeMarkByName;break; case 6:ChangeMarkByNumber;break; case 7:SaveLinkToFile;break; case 8:DesplayMarkSegment;break; case 9:CompositorByTotalMark;break; case 10:SaveLinkToFile; 各函数功能详见源程序清单 在设计过程中的感受: 首先经过一周的编程实习,并在后一段的报告总结,我对C语言这门科有新的认识,本人实在是获益不浅!要想编写一个准确、高效并有使用价值的程序,一定先要对课本知识熟悉,还要掌握

5、必要的上机操作能力,写程序其实很容易而关键在于调试程序。这次设计,让我重新掌握了C语言,而且还得到了用C语言解决实际问题的宝贵经验。 其次, 通过此次编程我也发现了自己在学习中的错误和不足,复习了以前学过的知识。同时也学到了一些没学过的知识,让我从中收益非浅,也为期末考试准备了一下!更重要的是培养了独立思考问题和解决问题的能力,熟悉了一些基本操作和解决问题的方法! 第三, 因为初次接触等原因此次设计遇到了许多问题用,C语言程序对我们来说比较难客,但在老师的帮助下我学会了如何调试把程序搞定,体会到原来编程也挺有意思的快感设计做的这样好,在此特地感谢老师的帮助。 三、󰀚源程序清单

6、#include #include #include #include typedef struct STUDENT char studentNumber10;/*char studentName20;/*char className20;/*班级名称char yearName20;/*学期名称float mark1;/*第1门成绩float mark2;/*第2门成绩float mark3;/*第3门成绩struct STUDENT *next; STUDENT; STUDENT *headLink;/*链表表头指针/*以下是函数声明*/ void ReadInfoFormFile(void

7、); 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); ,在匆忙的学习中更是难上加难,如

8、何查找系统没有提示的错误学生学号*/ */ */ ,.我想没有老师的帮助我很难在短期内把程序,似乎觉得自己仅是个匆匆过,最后终于排除万难我深刻体会到老师发挥的重要作 */ 学生姓名*/ */ */ */ void ChangeMarkByName(void); void ChangeMarkByNumber(void); void SaveLinkToFile(void); void DesplayMarkSegment(void); void CompositorByTotalMark(void); int choose;/*用于接受用户的选择*/ /*主函数*/ void main Cre

9、ateHeadLink; 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) Inse

10、rtOneNode(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); printf(| 7 保存所有学生信息 |n); prin

11、tf(| 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);/*要求用户输入信息到新结点中*/ InsertOneNode(p);/*将新结点加到链

12、表中*/ break; case 4: DeleteNodeBystudentNumber;/*根据用户输入的学号删除该学生*/ break; case 5: ChangeMarkByName;/*根据用户输入的姓名修改学生成绩*/ break; case 6: ChangeMarkByNumber;/*根据用户输入的学号修改学生成绩*/ break; case 7: SaveLinkToFile;/*保存数据*/ break; case 8: DesplayMarkSegment;/*显示不及格的学生成绩*/ break; case 9: CompositorByTotalMark;/*按平

13、均成绩排序*/ break; case 10: SaveLinkToFile;/*保存数据后再退出*/ free(headLink); exit(1); break; default: break; DesplayMenu;/*递归调用*/ /* 函数功能:建立链表表头 */ void CreateHeadLink(void) STUDENT *p; p=(STUDENT*)malloc(sizeof(STUDENT); headLink=p; p-next=NULL; /* 函数功能:申请一个新结点,并将其初始化 */ STUDENT *MallocNode(void) STUDENT *p

14、; int i; p=(STUDENT*)malloc(sizeof(STUDENT); if(p=NULL) return NULL; for(i=0;istudentNumberi=0; for(i=0;istudentNamei=0; for(i=0;iclassNamei=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-studentNu

15、mber); 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; wh

16、ile(p-next) p=p-next; p-next=t; /* 函数功能:根据用户输入的学生姓名显示该学生的信息 */ void DesplayInfoBystudentName(void) STUDENT *p; char studentName20; char flag=0; p=headLink-next; printf(请输入学生姓名:n); scanf(%s,studentName); while(p) if(strcmp(p-studentName,studentName)=0) printf(学号t姓名t班级t成绩1t成绩1t成绩3t总成绩t平均成绩nn); Desplay

17、OneNode(p); flag=1; break; p=p-next; if(!flag) printf(对不起,不存在姓名为 %s 的学生n,studentName); /* 函数功能:输出一个结点的信息 */ void DesplayOneNode(STUDENT *t) printf(%st,t-studentNumber); printf(%st,t-studentName); printf(%st,t-className); printf(%.2ft,t-mark1); printf(%.2ft,t-mark2); printf(%.2ft,t-mark3); printf(%.2

18、ft,t-mark1+t-mark2+t-mark3); printf(%.2ftn,(t-mark1+t-mark2+t-mark3)/3); /* 函数功能:根据用户输入的学号删除该学生 */ void DeleteNodeBystudentNumber(void) char studentNumber10; STUDENT *p,*q; char flag=0; printf(请输入要删除的学生学号:); scanf(%s,studentNumber); p=headLink; q=headLink-next; while(q) if(strcmp(q-studentNumber,stu

19、dentNumber)=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(现在没有学生信息,请先输入学生信息nn); return; printf(学号t姓名t班级t成绩1t成绩1t成绩3t总成绩t平均成绩nn); while

20、(p) DesplayOneNode(p); p=p-next; /* 函数功能:根据输入的班级修改成绩 */ void ChangeMarkByName(void) STUDENT *p; int a; char studentName20; 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

21、) 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 ChangeMarkByNum

22、ber(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); while(p) if(strcmp(p-studentNumber,studentNumber)=0) printf(请输入新的第1门成绩:n); scanf(%f,&mark1); printf(请输入新的第2门成绩:n);

23、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(

24、现在没有学生信息,请先输入学生信息nn); return; fp=fopen(student.txt,w+); if(!fp) printf(文件不存在n); return; while(p) fprintf(fp,%s %s %s %f %f %fn,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=headLin

25、k-next; printf(60分以下(不及格)的学生成绩如下:n); printf(学号t姓名t班级t成绩1t成绩1t成绩3t总成绩t平均成绩nn); 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 excha

26、nge,*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

27、(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;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号