版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C 语言学生学习成绩管理系统实验报告学生学习成绩管理系统1.课程设计的目的1对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。2 掌握自顶而下的设计方法,将大问题进行模块化,领会结构化程序设计的方法。3熟练掌握C 语言的基本语法,灵活运用各种数据类型。4进一步掌握在集成环境下如何调试程序(单步调试,设置断点、观察表达式,分块调试)和修改程序。2.课程设计的要求1程序在运行时,均以菜单形式提供选择界面,并提供一定的数据安全和提示具有良好的交互功能。2设计中的每一个小功能均由子函数来完成3提前编制下次调试的程序,对于难点问题要积极查阅相关教材、资料,计划好每次上机的内 ,高效、独立
2、地完成这次设计任务4在硬盘上建立自己的目录,将程序文件存储到该目录下,即有利于调试文件,又保证了文件的安全性。3.课程设计报告内容3.1 任务定义本系统主要应用数据结构的设计思想,在TC 环境下运用 C 语言进行编程设计一个学生成绩管理系统,该系统主要实现对学生的学号、姓名等自然信息以及学生成绩信息进行创建、增加、删除、查询、插入、显示的功能以及计算所有学生总成绩的总分,并依照学生各类信息高低进行排名的功能。系统给用户提供了一个简单的人机界面,使用户可以根据提示输入操作项,调用系统提供的管理功能。系统运行环境操作系统: Windows 98/2000/XP 运行软件: TC功能需求(问题分析)
3、学生成绩管理系统为教师和学生提供了一个对学生自然信息和学科成绩进行管理和查看的平台,给用户提供了一个简单友好的用户接口,功能需求分析描( 1)编写菜单函数,为用户提供一个友好的操作选择界面。( 2)学生信息输入:用户根据提示输入学生的学号、姓名、各科成绩,可一次性输入多条学生的成绩信息记录;当要停止输入并退回主菜单时,只须输入0 符号回车即可。( 4)学生信息删除:提示用户输入要删除的学生学号或姓名,如果输入的学号不存在,系统会立即提示不存在该学号的学生请先添加。( 6)学生信息添加(插入):使用户可以根据提示在原有的学生成绩表中的任何位置添加新的学生信息记录。( 7)学生信息查询:根据系统提
4、示输入要查找的学生名字或学号回车后,即可显示已找到的学生信息记录。( 8)学生成绩计算:系统能够自动计算所有学生的总成绩。( 9)学生成绩排序:按照系统提示选择项目进行从高分到低分排序。( 10)学生信息清单显示:系统显示所有学生的信息情况,包括学生学号、姓名、各科成绩、个人总成绩。( 11)系统退出:实现用户退出本系统的功能。 3.4程序设计步骤1.大体结构图2.主程序模块分析整个系统功能共分八个功能: 1.addstudent学生信息添加2.editstudent 学生信息修改3.delstudent 信息清单删除4.showstudent 学生信息排序5.findstudent 学生成绩
5、查找6.loadstudent 载入文件信息 7.savestudent 学生信息保存0.exit 系统退出以上八个功能就是本系统模块的主要功能,根据需求分析,对其进行功能逻辑设计:( 1)定义数据结构typedef struct student ?stu; 。以下分别要用到的函数为:菜单函数void showmenu() 的函数,定位链表中符合要求的接点 stu* Locate(stu *s,char find,int k) 用于插入和查找功能,删除记录函数status delstudent(stu *s) ,显示所有记录的函数voidshow(stu *s,int k) ,显示学号对应的姓
6、名 void showid(stu *s) ,排序函数status list(stu*s,int k), 添加记录函数status addstudent(stu *s), 查询函数 status findstudent(stu *s) 载入文件信息 status loadstudent(stu *s), 保存学生 status savestudent(stu *s), 关闭 exit(0);( 2)学生信息输入:实现可以输入学生的学号、姓名、各科成绩的功能。首先定义指向结构体的指针,动态申请空间;用 if(k = 0) break; 实现当学号首字符为 0 则结束输入的功能;在 for 循环中
7、嵌套while ,实现 N 门课程循环N 次和成绩正确输入,接着用到了数据结构的新结点插入的知识。( 3)学生信息删除:实现输入要删除的学生学号,执行后就可以删除该学生所有信息。该功能用到 status delstudent(stu *s) 删除记录的函数,先定义p 为查找到要删除的结点指针,如果还没信息则显示添加,函数返回到Locate,否则通过while(r-next != p) r = r-next; r-next = p-next; free(p) ;确定要删除的项目。( 4)学生信息清单显示:系统显示所有学生的信息情况,包括学生编号、学号、姓名、各科成绩、个人总成绩。这里用到显示函数
8、实现输出链表中结点信息的功能。( 5)学生信息查询:根据系统提示输入要查找的学生名字或学号回车后,即可以排列的形式显示已找到的学生信息记录,接着自动跳到主菜单。用到 statusfindstudent(stu *s) 查找函数。( 6)学生成绩计算:利用allscore=mscore+escore+cscore 求得 . ( 7)学生信息添加:直接用用 addstudent 函数添加。( 8)学生成绩排序:选择并执行该功能后,系统提示使按学号,各科成绩或总成绩排列,选择后系统自动按降序排列。( 9)系统退出:实现用户退出本系统的功能。其实这里只用到了一个exit(0); 3.5 流程图3.6
9、详细设计1.函数原型void showmenu() 菜单函数stu* Locate(stu *s,char find,int k) /* 结点添加(插入) */ status delstudent(stu *s) /* 删除 记录 */ void show(stu *s,int k) /* 显示所有记录的 */ void showid(stu *s) /* 显示学号对应的 姓名 */ status list(stu *s,int k) /* 排序 */ status addstudent(stu *s) /* 添加记录 */空时停止并返回主菜单选择。直接在输出数值时添加mscore+escor
10、e+cscore 作为总成绩加到信息最后一列。 ( 4) show 函数为了能让用户输入字符串,依然是定义一个开关,此时的开关条件无最大值,添加信息时直接调用 show 函数即可实现学生信息的输入。 ( 5 ) printf 函数编写显示函数用来输出链表中结点信息, stu 型指针r ,接着r=*s 初值为头指针,用printf 方法输出存储学生信息,最while(r!=NULL)? 实现当表中有信息即不为空,就执行 while 中的内容,打印出学生的各个信息。 ( 6 ) delete 函数用来删除记录,先用 if(!s-next) printf(has no student!nplease
11、 add at frist!) 验证学生信息是否为空,如果为空则输出“please add firsto如果不为空,先选择按学号删除或按姓名删除,然后调用函数stu* Locate(stu *s,char find,int k) 查找要删除的记录。然后用freep ()执行记录清空。( 7) insert 函数用来插入学生记录,定义二个指针为 p 和 l , l 为前驱, p 为插入数据的位置。如果遇到相同学号的则显示输入有重复并显示原来学号的信息。如不然则用 scnf 和 printf 输入输出数据,并在运行结束后把指针置尾。( 8) sort 函数根据不同的要求实现成绩从大到小排列,程序中
12、采用的使选择法进行排序,排序过程中调用 swap 函数实现数据的排列。这样就能按不同要求把数据排列了 。3.8 程序调试与测试(结果分析)1.函数主界面.选择第一项实现添加数据如下.选择2进行修改编辑.选择3进行删除成绩.选择4进行排序显示成绩.选择5进行查找成绩.选择6提供载入信息条数.选择7保存.选择0关闭要保存选 Y 不想保存先N 。程序运用了结构体,链表,转换和选择法排序实现了删除,添加,信息载入,查询等功能。( 1)单链表查找算法的最好的时间复杂度为 o ( 1),最坏时间复杂度o ( n ),平均时间复杂度o (n);空间复杂度为o (1)。(2)单链表插入算法时间复杂度o (n)
13、;空间复杂度为o (1) 。(3)系统基本上实现了小型学生管理系统的功能。4.总结C语言使上学期教的,现在开始做这个课程设计刚开始有点仿徨,不知道何从下手,最后搬出书本有看了一下,网上查点资料,仔细阅读老师给的任务指导书,开始着手做这个学生成绩管理系统,其原因使该算法简便,程序贴近学生生活,该程序的目的使实现学生成绩的粗略管理。设计过程经过了任务定义,逻辑设计、详细设计、程序编码、程序调试与测试、结果分析和撰写实验报告,最终系统地完成整个课程的设计。该系统是小型管理系统,运行界面为 DOS界面,始终存在不足,从这次设计中我深刻的体会C 设计的意义,我觉得编程除了麻烦也是一件有趣的事情。1谭浩强
14、.C程序设计M北京:清华大学出版社,2005.292页-310页.2苏仕华.数据结构课程设计M.上海:机械工业出版社,2004. 3谭浩强.C程序设计题解与上机指导 M 北京 :清华大学出版社,2005.#include#include/ 提供 malloc() 、 calloc() 、 realloc() 、 free() 、 system() 、 atoi() 、 atol() 、 rand() 、srand() 、 exit()/#include/ 字符串调用 typedef int status;int change = 0; / 信息是否改变typedef struct studen
15、t int num; / 学号 char name20; /姓名 int mscore; / 数学成绩 int cscore; / c 语言成绩 int escore; / 英语成绩 structstudent *next;/ 定义指针 stu;/ 定义对象 stuvoid showmenu()printf(ntt*list of student*); printf(ntt* *); printf(ntt* 1:addstudent *);printf(ntt* 2:editstudent *); printf(ntt* 3:delstudent *); printf(ntt*4:showst
16、udent *); printf(ntt* 5:findstudent *); printf(ntt* 6:loadstudent *);while(r != NULL)if(r-num = k) return r;r = r-next;else if(k = 0) / 按姓名查询r = s-next;while(r != NULL)if(strcmp(r-name,find) = 0) return r;r = r-next;return 0;status _swap(stu *s1,stu *s2)/ 把一个对象的学生数据赋给另一个学生s1-num = s2-num; / 学号strcpy
17、(s1-name,s2-name); / 姓名s1-mscore = s2-mscore; / 数学成绩s1-cscore = s2-cscore; /c 语言成绩s1-escore = s2-escore; / 英语成绩status swap(stu *s1,stu *s2)/ 实现两个学生信息的转换stu *p;if(!(p = (stu *)malloc(sizeof(stu) showerror(0);_swap(p,s1);_swap(s1,s2);_swap(s2,p);free(p);/ 释放 p 所占的空间status list(stu *s,int k)/ 采用选择法排序st
18、u *p,*p1,*p2;p1 = s-next;while(p1)p2 = p1-next;学号while(p2)if(k = 1)if(p2-num num)swap(p1,p2); / if(k = 2)if(p2-mscore p1-mscore)swap(p1,p2);if(k = 3)if(p2-cscore p1-cscore)swap(p1,p2); /c 成绩if(k = 4)if(p2-escore p1-escore)swap(p1,p2);if(k=5)if(p2-mscore+p2-cscore+p2-escore(p1-mscore+p1-cscore+p1-esc
19、ore)swap(p1,p2);p2=p2-next;p1=p1-next;status eshow(stu *s)show(s,0);while(s-next)s = s-next;show(s,2); status addstudent(stu *s)stu *p,*l;int k;while(1)l = s;printf(please input num0:return:);scanf(%d,&k);if(k = 0) break;while(l)if(l-num) = k)12 / 英语成绩; / 总分 printf(the %d student is Repeated!n,k);sh
20、ow(l,1);return;l = l-next;if(!(p = (stu *)malloc(sizeof(stu) showerror(0);printf(input %d student:name,mscore,cscore,escore likelucy 80 80 80:,k); scanf(%s%d%d%d,&p-name,&p-mscore,&p-cscore,&p-escore); p-num = k;p-next = NULL;if(s =NULL) s = p;elsewhile(s-next != NULL) s = s-next;/ 将指针置于最末尾s-next =
21、p;p = NULL;change=1;status editstudent(stu *s)/ 修改学生int k=0;while(k = 0)printf(nplease input edit num0:show all:);scanf(%d,&k);if(k = 0) showid(s);while(s)if(s-num) = k)printf(ninput %d %s %d %d 13 %dstudent:name,mscore,cscore,escore:,k,s-name,s-mscore,s-cscore,s-escore);scanf(%s%d%d%d,&s-name,&s-ms
22、core,&s-cscore,&s-escore);change=1;printf(nfinish!n);return;s = s-next;if(!s) printf(=the student %dis not find!n,k); status delstudent(stu *s)/ 删除学生int set,k;stu *p,*r;char find20;if(!s-next) printf(has no student!nplease add at frist!);printf(n=1del with numn=2del with namen); scanf(%d,&set);if(se
23、t = 1)printf(please input the num :);scanf(%d,&k);p = Locate(s,num,k);else if(set = 2)printf(input the name:);scanf(%s,find);p=Locate(s,find,0);char find20;if(!s-next) printf(has no student!nplease add at frist!);return;printf(n=1del with numn=2del with namen);scanf(%d,&set);if(set = 1)printf(please
24、 input the num :);scanf(%d,&k);p = Locate(s,num,k);else if(set = 2)printf(input the name:);scanf(%s,find);p=Locate(s,find,0);else printf(input error!);/return;123456if(p) show(p,1);elseprintf(no find!);/return;123456status loadstudent(stu *s)/ 载入文件信息stu *r;FILE *fp; / 文件指针int count = 0;char jian;fp
25、= fopen(student.stu,rb);if(fp = NULL)printf(ndate file is not find,buding?(y/n)n);scanf(%c,&jian);if(jian = y|jian = Y) fp = fopen(student.stu,wb); else showerror(1);printf(n=file is find,opening.n);while(!feof(fp) r = (stu *)malloc(sizeof(stu);if(fread(r,sizeof(stu),1,fp) / 将文件的内容放入接点中 r-next = NUL
26、L;s-next = r;s = r; / 将该接点挂入链中count+;fclose(fp); / 关闭文件printf(n=filish,%d report is found.n,count);status savestudent(stu *s)/ 保存学生FILE* fp;stu *p;int flag = 1,count = 0;fp=fopen(student.stu,wb);if(fp = NULL) showerror(1);p = s-next;while(p)if(fwrite(p,sizeof(stu),1,fp) = 1)p = p-next;count+;elsefla
27、g = 0;break;if(flag)printf(n=finish.(%d report is saved.)n,count); change = 0;fclose(fp);status showerror(int k)switch(k)case 0:printf(nMemory Failure ! nplease any exit!);getch();exit(0);break;case 1:printf(nfile error!nplease any exit!);getch();exit(0);break;default:getchar();break;void main()stu
28、*s;/ 链表int set;char ch;s=(stu *)malloc(sizeof(stu);s-next=NULL;key keyloadstudent(s);/ while(1)showmenu();while(1)printf(n);printf(please input the menu:);scanf(%d,&set);if(set = 0)if(change = 1)getchar();printf(n=the dat is changed,save?(y/n)?n); scanf(%c,&ch);if(ch=y|ch=Y)savestudent(s);break;swit
29、ch(set)case 1:addstudent(s);break; / 增加学生case 2:editstudent(s);break;/ 修改学生case 3:delstudent(s);break;/ 删除学生case 4:showstudent(s);break;/ 查看学生信息case 5:findstudent(s);break;/ 查询学生case 6:loadstudent(s);break;/ 载入文件信息case 7:savestudent(s);break;/ 保存学生default: getchar();break;/ 直接返回到主菜单的选择界面学生学习成绩管理系统1.
30、课程设计的目的1对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。2 掌握自顶而下的设计方法,将大问题进行模块化,领会结构化程序设计的方法。3熟练掌握C 语言的基本语法,灵活运用各种数据类型。4进一步掌握在集成环境下如何调试程序(单步调试,设置断点、观察表达式,分块调试)和修改程序。2.课程设计的要求1程序在运行时,均以菜单形式提供选择界面,并提供一定的数据安全和提示具有良好的交互功能。2设计中的每一个小功能均由子函数来完成3提前编制下次调试的程序,对于难点问题要积极查阅相关教材、资料,计划好每次上机的内 ,高效、独立地完成这次设计任务4在硬盘上建立自己的目录,将程序文件存储到
31、该目录下,即有利于调试文件,又保证了文件的安全性。3.课程设计报告内容3.1 任务定义本系统主要应用数据结构的设计思想,在TC 环境下运用 C 语言进行编程设计一个学生成绩管理系统,该系统主要实现对学生的学号、姓名等自然信息以及学生成绩信息进行创建、增加、删除、查询、插入、显示的功能以及计算所有学生总成绩的总分,并依照学生各类信息高低进行排名的功能。系统给用户提供了一个简单的人机界面,使用户可以根据提示输入操作项,调用系统提供的管理功能。3.2 系统运行环境 操作系统: Windows 98/2000/XP 运行软件: TC3.3 功能需求(问题分析)学生成绩管理系统为教师和学生提供了一个对学
32、生自然信息和学科成绩进行管理和查看的平台,给用户提供了一个简单友好的用户接口,功能需求分析描( 1)编写菜单函数,为用户提供一个友好的操作选择界面。( 2)学生信息输入:用户根据提示输入学生的学号、姓名、各科成绩,可一次性输入多条学生的成绩信息记录;当要停止输入并退回主菜单时,只须输入0 符号回车即可。( 4)学生信息删除:提示用户输入要删除的学生学号或姓名,如果输入的学号不存在,系统会立即提示不存在该学号的学生请先添加。( 6)学生信息添加(插入):使用户可以根据提示在原有的学生成绩表中的任何位置添加新的学生信息记录。( 7)学生信息查询:根据系统提示输入要查找的学生名字或学号回车后,即可显
33、示已找到的学生信息记录。( 8)学生成绩计算:系统能够自动计算所有学生的总成绩。( 9)学生成绩排序:按照系统提示选择项目进行从高分到低分排序。( 10)学生信息清单显示:系统显示所有学生的信息情况,包括学生学号、姓名、各科成绩、个人总成绩。( 11)系统退出:实现用户退出本系统的功能。 3.4程序设计步骤1.大体结构图2.主程序模块分析整个系统功能共分八个功能: 1.addstudent学生信息添加2.editstudent 学生信息修改3.delstudent 信息清单删除4.showstudent 学生信息排序5.findstudent 学生成绩查找6.loadstudent 载入文件信
34、息 7.savestudent 学生信息保存0.exit 系统退出 以上八个功能就是本系统模块的主要功能,根据需求分析,对其进行功能逻辑设计:( 1)定义数据结构typedef struct student ?stu; 。以下分别要用到的函数为:菜单函数void showmenu() 的函数,定位链表中符合要求的接点 stu* Locate(stu *s,char find,int k) 用于插入和查找功能,删除记录函数status delstudent(stu *s) ,显示所有记录的函数voidshow(stu *s,int k) ,显示学号对应的姓名 void showid(stu *s) ,排序函数status
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 玉溪师范学院《古代文学》2023-2024学年第一学期期末试卷
- 2024工程技术人员聘用合同
- 2024电视台广告合同范文
- 2024店铺合伙经营合同范本
- 2024人事档案管理合同书
- 2024年生产L型氨基酸的新酶种合作协议书
- 盐城师范学院《药物分析》2022-2023学年第一学期期末试卷
- 盐城师范学院《小学教学设计与评价》2023-2024学年第一学期期末试卷
- 盐城师范学院《物权法》2021-2022学年期末试卷
- 2024股份合同协议书模板
- 2023年鹤壁市鹤山区小升初英语考试题库及答案解析
- 内部合伙人制度与股权激励方案
- 《云南江川天湖化工有限公司清水沟磷矿采矿权出让收益评估报告》
- 尤承业基础拓扑学讲义部分课后习题参考答案(第二版)
- (完整)西游记选择题和答案
- 绿化工程投标书模版
- GB/T 25296-2022电气设备安全通用试验导则
- GB/T 7424.2-2008光缆总规范第2部分:光缆基本试验方法
- GB/T 26342-2010国际运尸木质棺柩
- DB63-T 2083-2022公路波纹钢管涵洞通道设计规范
- 中国脑出血诊治指南(2023年)-1
评论
0/150
提交评论