版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、设计时间:2008/6/12实训报告题 目: 学生成绩管理系统院 系: 信息科技学院专 业: 电子信息科学与技术姓 名: 周谒真 学 号: 指导教师: 王小琼 日 期: 2011年7月5日 桂林电子科技大学信息科技学院目录1应用程序的名称32应用程序的主题和设计目的33应用程序简介&应用程序的总体设计图(见需求规格说明书)34需求规格说明书31. 综合需求32数据要求33界面要求44软件描述45界面介绍46程序源代码57.测试结果138课程设计中存在的问题159在设计实践过程中的自我感受15附录17学生成绩管理系统 实训报告1 应用程序的名称学生成绩管理系统2 应用程序的主题和设计目的主题:用
2、于学生成绩管理和查询设计目的:方便老师管理和查询学生成绩3 应用程序简介&应用程序的总体设计图(见需求规格说明书)4 需求规格说明书1. 综合需求1) 功能要求使用的学生成绩管理系统,可以录入学生信息,按学号对学生信息进行查询,并将学生信息按学号进行排序。2) 性能要求能够让前来查询的管理人员和学生能够在2秒钟内查到需要的正确的信息,并且能够重复查询。3) 运行要求能在windows98以上的系统中运行。4) 升级要求暂无2数据要求1)数据输入可根据自己需要定义多个数据供查询,数据输入有学号(char10),姓名(char20),英语成绩(float4),数学成绩(float4),计算机成绩(
3、float4)。.2)数据输出输出到屏幕上。有学号(char10),姓名(char20),英语成绩(float4),数学成绩(float4),计算机成绩(float4),总成绩(float4),平均成绩(float4), 英语班级均分(float4),数学班级均分(float4),计算机班级均分(float4)。3)数据存储根据不同的电脑来配备,普通存储数据80G硬盘足够了。4)数据备份可以导入/导出到备用硬盘。数据字典:数据元素:编号数据元素名长度L1学号10L2姓名20L3英语成绩4L4数学成绩4L5计算机成绩45) 数据筛选按需筛选6) 主要算法For循环,while循环 冒泡法排序3界
4、面要求文本菜单界面4软件描述1)功能描述使用的学生成绩管理系统,可以录入学生信息,按学号对学生信息进行查询,并将学生信息按学号进行排序。2)性能描述相应时间控制在2秒以内,数据文件读取正确。3)操作步骤选择查询方式,输入查询要素,点击查询。 5 界面介绍系统初始化界面录入界面统计界面6 程序源代码#include#include #include#include#includetypedef struct STUDENT/定义一个名为STUDENT的结构体char studentNumber10;/学生学号char studentName20;/学生姓名float mark1;/英语成绩flo
5、at mark2;/数学成绩float mark3;/计算机成绩struct STUDENT *next;/链表指针STUDENT;int choose;/用于接受用户的选择STUDENT *headLink;/链表HEAD指针void CreateHeadLink();/声明函数以下雷同void DesplayMenu();STUDENT *MallocNode();void GetInformation(STUDENT *t);void OutputInformation();void DesplayInfoBystudentNumber();void DesplayOneNode(STU
6、DENT *t);void InsertOneNode(STUDENT *t);void DeleteNodeBystudentNumber();void CompositorBystudentNumber();void CompositorMenu();void CompositorBystudentClass();void Exit();/主函数void main()CreateHeadLink();/调用建立表头函数DesplayMenu();/调用菜单显示函数/*函数功能:显示菜单,根据用户的输入信息来完成对应的功能*/void DesplayMenu() STUDENT *p;pri
7、ntf(*);printf( 欢 迎 使 用 学 生 成 绩 管 理 系 统n);printf( 1排序 (按学号)n);printf( 2插入 (录入)n);printf( 3查找 (输入一个学生学号,输出其各科成绩)n);printf( 4删除 (从数组中按输入的学号删除该学生)n);printf( 5统计n);printf( 6退出n);printf(*);printf( 请输入序号进行操作: );scanf(%d,&choose);/从终端读入一个值进行菜单选择getch();system(cls);switch(choose)case 1:CompositorBystudentNum
8、ber();break;case 2:p=MallocNode();/让p指向新节点的首地址GetInformation(p);/获取学生信息InsertOneNode(p);break;/插入学生信息case 3:DesplayInfoBystudentNumber();break;case 4:DeleteNodeBystudentNumber();break;case 5:CompositorMenu();break;case 6:Exit();break;getch();system(cls);DesplayMenu();/递归调用菜单显示函数/*函数功能:建立链表表头*/void C
9、reateHeadLink()STUDENT *p;p=(STUDENT*)malloc(sizeof(STUDENT);/在内存中开辟一个大小为sizeof(STUDENT)的空间并使p指向它的首地址headLink=p;/令链表head指针指向p指针p-next=NULL;/初始化链表/*函数功能:申请一个新结点,并将其初始化*/STUDENT *MallocNode()STUDENT * p;/定义一个STUDENT变量int i;p=(STUDENT*)malloc(sizeof(STUDENT);/在内存中开辟一个大小为sizeof(STUDENT)的空间并使p指向它的首地址if(p
10、=NULL)/如果p指向的是空地址,那么返回一个空值return NULL;for(i=0;istudentNumberi=0;for(i=0;istudentNamei=0;for(i=0;istudentNumberi=0;p-mark1=0.0;p-mark2=0.0;p-mark3=0.0;p-next=NULL;return p;/*函数功能:取得用户输入的学生信息*/void GetInformation(STUDENT *t)printf(*n);printf( 请输入学生学号: );scanf(%s,t-studentNumber);printf( 请输入学生姓名: );sca
11、nf(%s,t-studentName);printf( 请输入学生英语成绩: );scanf(%f,&t-mark1);printf( 请输入学生数学成绩: );scanf(%f,&t-mark2);printf( 请输入学生计算机成绩: );scanf(%f,&t-mark3);printf(n 录入成功!按任意键返回上级。);/*函数功能:在链表的结尾处增加一个节点*/void InsertOneNode(STUDENT *t)STUDENT *p;p=headLink;while(p-next)/当p不指向空地址时,就指向下一个地址p=p-next;p-next=t;/在最后一个空地址
12、中插入学生的信息/*函数功能:根据用户输入的学生学号显示该学生信息*/void DesplayInfoBystudentNumber()STUDENT *p;char studentNumber10;char flag=0;/这里作为一个判断变量,意在判断是否存在学号为用户输入值的学生p=headLink-next;/初始化head指针printf(请输入学生学号);scanf(%s,studentNumber);/输入学生学号字符串while(p)if(strcmp(p-studentNumber,studentNumber)=0)/在链表中查找相同学号的学生,如果找到了则输出他们的信息pr
13、intf(学号t姓名t英语t数学t计算机t总成绩t平均成绩nn);DesplayOneNode(p);flag=1;break;p=p-next;if(!flag)printf(对不起,不存在学号为%s的学生n,studentNumber);/*函数功能:输出一个节点的信息*/void DesplayOneNode(STUDENT *t)printf(%st,t-studentNumber);/输出该结构体对象的信息printf(%st,t-studentName);printf(%.0ft,t-mark1);printf(%.0ft,t-mark2);printf(%.0ft,t-mark3
14、);printf(%.0ft,t-mark1+t-mark2+t-mark3);printf(%.0ftn,(t-mark1+t-mark2+t-mark3)/3.0);/*函数功能:根据用户输入的学号删除该学生*/void DeleteNodeBystudentNumber()char studentNumber10;STUDENT *p,*q;char flag=0;printf(请输入要删除的学生学号: );scanf(%s,studentNumber);/输入学生学号字符串p=headLink;q=headLink-next;while(q)/当q不指向空地址的时候,查找与用户输入的学
15、号相一致的学生,并删除if(strcmp(q-studentNumber,studentNumber)=0)/strcmp函数比较两个字符串是否相同p-next=q-next;free(q);/释放q指向地址的空间flag=1;break;p=p-next;/把下一个人的地址补空,下同q=q-next;if(!flag)printf(不存在该学号的学生n);return;printf(成功删除n);/*函数功能:根据用户输入的学号排序*/void CompositorBystudentNumber()STUDENT exchange,*r,*p,*q;r=headLink-next;if(r=
16、NULL)/当指针指向空地址时则认为没有学生信息printf(nn现在还没有学生信息,请先输入学生信息n);return;while(r)/用r,q构成循环,使用冒泡法进行排序,p=r;q=r-next;while(q)if(strcmp(q-studentNumber,p-studentNumber)studentNumber);strcpy(exchange.studentName,q-studentName);strcpy(q-studentNumber,p-studentNumber);strcpy(q-studentName,p-studentName);strcpy(p-stude
17、ntNumber,exchange.studentNumber);strcpy(p-studentName,exchange.studentName);exchange.mark1=q-mark1;exchange.mark2=q-mark2;exchange.mark3=q-mark3;q-mark1=p-mark1;q-mark2=p-mark2;q-mark3=p-mark3;p-mark1=exchange.mark1;p-mark2=exchange.mark2;p-mark3=exchange.mark3;q=q-next;r=r-next;OutputInformation();
18、/*函数功能:输出信息*/void OutputInformation()STUDENT *p;p=headLink-next;/使p指向headLink-nextif(p=NULL)/如果p指向空地址说明没有学生信息printf(nn现在没有学生信息,请先输入学生信息nn);printf(nn学号t姓名t英语t数学t计算机t总成绩t平均成绩 n n);while(p)/当p指向地址存在则调用DesplayOneNode()函数进行输出操作DesplayOneNode(p);p=p-next;/指向下一名学生/*函数功能:计算平均分的菜单*/void CompositorMenu()print
19、f(nn1.输入学生的学号统计该生的总分及平均分nn);printf(nn2.输入课程求该门课程的总平均分nn);int c;scanf(%d,&c);if(c=1)CompositorBystudentNumber();/调用CompositorBystudentNumber()函数else if(c=2)CompositorBystudentClass();/调用CompositorBystudentClass()函数/*函数功能:根据用户输入的科目计算平均分*/void CompositorBystudentClass()float k=0;STUDENT *q;q=headLink-n
20、ext;if(q=NULL)/如果p指向空地址说明没有学生信息printf(nn现在还没有学生信息,请先输入学生信息n);int i;float s=0;printf(nn请输入课程求该门课程的总平均分n); printf(n1.英语n);printf(n2.数学n);printf(n3.计算机n);scanf(%d,&i);if(i=1)while(q)/把第一门课的所有人的成绩相加除以总人数,下面以此类推k=k+q-mark1;q=q-next;s+;printf(英语平均分:%f,k/s);else if(i=2)k=0;s=0;while(q)k=k+q-mark2;q=q-next;
21、s+;printf(数学平均分:%f,k/s);else if(i=3)k=0;s=0;while(q)k=k+q-mark3;q=q-next;s+;printf(计算机平均分:%f,k/s);void Exit()printf(欢迎使用本系统,按任意键退出。);getch();exit(0);7.测试结果报错 先录入三个学生的信息按学号排序并输出按学号查询某学生信息删除某学生信息输出删除后的学生信息调用统计功能,获得班级单科平均分完成信息管理,选择6退出系统测试结果显示程序各部分功能均得以完整实现,输入提示清晰,操作简单出错也有完整的提示(未录入学生信息),程序运行可按需重复使用,程序健壮
22、性强8 课程设计中存在的问题界面设计过于简单,不够美观,人性化。该程序只执行简单的录入,查找,删除,统计功能,并未对操作人员身份进行区分,存在一定安全问题。9 在设计实践过程中的自我感受这次程序设计加深了我对课堂讲授内容的理解,课堂上讲授的许多关于c语言的语法规则,听起来十分枯燥无味,也不容易记住,然而程序设计的过程有要求使用c语言这个工具解决实际问题,必须要掌握。通过程序的编写,让我对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。对于一些内容自己认为在课堂上听懂了,但编程中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。即把c语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。只有通过上机编程才能检验自己是否掌握c语言、自己编写的程序是否能够正确地解题。通过上机编程来验证自己编制的程序是否正确,恐怕是大多数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 年产70.4万吨锰系合金源网荷储一体化项目可行性研究报告模板-立项备案
- 财务职级晋升述职报告(5篇)
- 多重耐药菌培训知识考题及答案
- 高中语文选择性必修上册课内知识点梳理+检测练习含答案详解
- 学校处置突发事件应急预案
- (2026年)安全生产风险分级管控和隐患排查治理考试试题附答案
- 传染病防治监督技能竞赛试卷(含答案)
- 2025年药品管理法知识考核试题附答案
- 2026输血相关法律法规试题考核试题及答案
- 继电保护防三误规定及措施培训
- 2026广东佛山市顺德区(家电)知识产权快速维权中心招聘事业编制人员3人笔试题库(培优)附答案详解
- 《医疗器械经营质量管理规范》培训试题及答案
- 成都市新都区2026年社区网格员招录考试真题库及完整答案
- 2025内蒙古能源集团招聘(114人)笔试历年备考题库附带答案详解
- AI在水利水电设备中的应用
- (2026年第42号)医药代表管理办法课件
- 中国颅内肿瘤诊治指南(2026版)
- CN117855594B 一种固态聚合物电解质的原位制备方法及其回收方法和锂离子电池 (中国科学院长春应用化学研究所)
- (2025年)传染病上报培训考试题附答案
- 铝单板雨棚施工方案(3篇)
- 无缝钢管基础知识培训课件
评论
0/150
提交评论