C语言实训报告-学生成绩管理系统
更新时间:2024-06-13 05:21:01 阅读量: 综合文库 文档下载
- c语言学生成绩管理程序推荐度:
- 相关推荐
设计时间: 2008/6/12
实训报告
题 目: 学生成绩管理系统 院 系: 信息科技学院 专 业: 电子信息科学与技术 姓 名: 周谒真 学 号: 1052400101 指导教师: 王小琼 日 期: 2011年7月5日
桂林电子科技大学信息科技学院
1052400101 周谒真 C语言实训报告 电子信息科学与技术一班
目录
1.应用程序的名称 .................................................................................................................... 3 2.应用程序的主题和设计目的 ................................................................................................. 3 3.应用程序简介&应用程序的总体设计图(见需求规格说明书) ......................................... 3 4.需求规格说明书 .................................................................................................................... 3
1. 综合需求 ....................................................................................................................... 3 2.数据要求 ....................................................................................................................... 3 3.界面要求 ...................................................................................................................... 4 4.软件描述 ...................................................................................................................... 4 5.界面介绍 .............................................................................................................................. 4 6.程序源代码 ........................................................................................................................... 5 7.测试结果 ................................................................................................................................ 13 8.课程设计中存在的问题 ...................................................................................................... 15 9.在设计实践过程中的自我感受] ......................................................................................... 15 附录 .......................................................................................................................................... 17
2
1052400101 周谒真 C语言实训报告 电子信息科学与技术一班
学生成绩管理系统
实训报告 1. 应用程序的名称 学生成绩管理系统
2. 应用程序的主题和设计目的 主题:用于学生成绩管理和查询
设计目的:方便老师管理和查询学生成绩
3. 应用程序简介&应用程序的总体设计图(见需求规格说明书) 4. 需求规格说明书
1. 综合需求
1) 功能要求
使用的学生成绩管理系统,可以录入学生信息,按学号对学生信息进行
查询,并将学生信息按学号进行排序。
2) 性能要求
能够让前来查询的管理人员和学生能够在2秒钟内查到需要的正确的信
息,并且能够重复查询。
3) 运行要求
能在windows98以上的系统中运行。 4) 升级要求 暂无 2.数据要求
1)数据输入
可根据自己需要定义多个数据供查询,数据输入有学号(char10),姓名(char20),英语成绩(float4),数学成绩(float4),计算机成绩(float4)。. 2)数据输出
输出到屏幕上。有学号(char10),姓名(char20),英语成绩(float4),数学成绩(float4),计算机成绩(float4),总成绩(float4),平均成绩(float4), 英语班级均分(float4),数学班级均分(float4),计算机班级均分(float4)。 3)数据存储
根据不同的电脑来配备,普通存储数据80G硬盘足够了。
4)数据备份
可以导入/导出到备用硬盘。
数据字典:
数据元素: 编号 数据元素名 长度 L1 学号 10 L2 姓名 20 L3 英语成绩 4 L4 数学成绩 4 L5 计算机成绩 4 3
1052400101 周谒真 C语言实训报告 电子信息科学与技术一班
5) 数据筛选 按需筛选 6) 主要算法
For循环,while循环 冒泡法排序
3.界面要求
文本菜单界面
4.软件描述
1)功能描述
使用的学生成绩管理系统,可以录入学生信息,按学号对学生信息进行
查询,并将学生信息按学号进行排序。 2)性能描述
相应时间控制在2秒以内,数据文件读取正确。 3)操作步骤
选择查询方式,输入查询要素,点击查询。
5. 界面介绍
系统初始化界面
录入界面
统计界面
4
1052400101 周谒真 C语言实训报告 电子信息科学与技术一班
6. 程序源代码 #include
typedef struct STUDENT//定义一个名为STUDENT的结构体 {
char studentNumber[10];//学生学号 char studentName[20];//学生姓名 float mark1;//英语成绩 float 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(STUDENT *t); void InsertOneNode(STUDENT *t); void DeleteNodeBystudentNumber(); void CompositorBystudentNumber(); void CompositorMenu();
void CompositorBystudentClass();
5
1052400101 周谒真 C语言实训报告 电子信息科学与技术一班
void Exit(); //主函数 void main() {
CreateHeadLink();//调用建立表头函数 DesplayMenu();//调用菜单显示函数 }
/************************************* 函数功能:显示菜单,根据用户的输入信息 来完成对应的功能
*************************************/ void DesplayMenu() {
STUDENT *p;
printf(\***********************\
printf(\欢 迎 使 用 学 生 成 绩 管 理 系 统\\n\
printf(\.排序 (按学号)\\n\ printf(\.插入 (录入)\\n\
printf(\.查找 (输入一个学生学号,输出其各科成绩)\\n\
printf(\.删除 (从数组中按输入的学号删除该学生)\\n\
printf(\.统计\\n\ printf(\.退出\\n\
printf(\***********************\
printf(\请输入序号进行操作: \ scanf(\从终端读入一个值进行菜单选择 getch();
system(\ switch(choose) {
case 1:CompositorBystudentNumber();break; case 2:
p=MallocNode();//让p指向新节点的首地址 GetInformation(p);//获取学生信息
InsertOneNode(p);break;//插入学生信息 case 3:DesplayInfoBystudentNumber();
break;
case 4:DeleteNodeBystudentNumber();break; case 5:CompositorMenu();break;
6
1052400101 周谒真 C语言实训报告 电子信息科学与技术一班
case 6:Exit();break; }
getch();
system(\
DesplayMenu();//递归调用菜单显示函数 }
/************************************* 函数功能:建立链表表头
*************************************/ void CreateHeadLink() {
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==NULL)//如果p指向的是空地址,那么返回一个空值 {
return NULL; }
for(i=0;i<10;i++)//下面全是初始化 {
p->studentNumber[i]='\\0'; }
for(i=0;i<10;i++) {
p->studentName[i]='\\0'; }
for(i=0;i<10;i++) {
p->studentNumber[i]='\\0'; }
p->mark1=0.0; p->mark2=0.0;
7
1052400101 周谒真 C语言实训报告 电子信息科学与技术一班
p->mark3=0.0; p->next=NULL; return p; }
/************************************* 函数功能:取得用户输入的学生信息
*************************************/ void GetInformation(STUDENT *t) {
printf(\***********************\\n\
printf(\请输入学生学号: \ scanf(\
printf(\请输入学生姓名: \ scanf(\
printf(\请输入学生英语成绩: \ scanf(\
printf(\请输入学生数学成绩: \ scanf(\
printf(\请输入学生计算机成绩: \ scanf(\
printf(\录入成功!按任意键返回上级。。。\}
/************************************* 函数功能:在链表的结尾处增加一个节点 *************************************/ void InsertOneNode(STUDENT *t) {
STUDENT *p; p=headLink;
while(p->next)//当p不指向空地址时,就指向下一个地址 {
p=p->next; }
p->next=t;//在最后一个空地址中插入学生的信息 }
/************************************* 函数功能:根据用户输入的学生学号显示该 学生信息
*************************************/ void DesplayInfoBystudentNumber() {
STUDENT *p;
8
1052400101 周谒真 C语言实训报告 电子信息科学与技术一班
char studentNumber[10];
char flag=0;//这里作为一个判断变量,意在判断是否存在学号为用户输入值的学生
p=headLink->next;//初始化head指针 printf(\请输入学生学号\
scanf(\输入学生学号字符串 while(p) {
if(strcmp(p->studentNumber,studentNumber)==0)//在链表中查找相同学号的学生,如果找到了则输出他们的信息 {
printf(\学号\\t姓名\\t英语\\t数学\\t计算机\\t总成绩\\t平均成绩\\n\\n\
DesplayOneNode(p); flag=1; break; }
p=p->next; }
if(!flag) {
printf(\对不起,不存在学号为%s的学生\\n\ } }
/************************************* 函数功能:输出一个节点的信息
*************************************/ void DesplayOneNode(STUDENT *t) {
printf(\输出该结构体对象的信息 printf(\ printf(\ printf(\ printf(\
printf(\
printf(\}
/************************************* 函数功能:根据用户输入的学号删除该学生 *************************************/ void DeleteNodeBystudentNumber() {
char studentNumber[10]; STUDENT *p,*q;
9
1052400101 周谒真 C语言实训报告 电子信息科学与技术一班
char flag=0;
printf(\请输入要删除的学生学号: \
scanf(\输入学生学号字符串 p=headLink;
q=headLink->next;
while(q)//当q不指向空地址的时候,查找与用户输入的学号相一致的学生,并删除 {
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==NULL)//当指针指向空地址时则认为没有学生信息 {
printf(\现在还没有学生信息,请先输入学生信息\\n\ return; }
while(r)//用r,q构成循环,使用冒泡法进行排序, {
p=r;
q=r->next; while(q) {
10
1052400101 周谒真 C语言实训报告 电子信息科学与技术一班
if(strcmp(q->studentNumber,p->studentNumber)<0) {
strcpy(exchange.studentNumber,q->studentNumber); strcpy(exchange.studentName,q->studentName); strcpy(q->studentNumber,p->studentNumber); strcpy(q->studentName,p->studentName);
strcpy(p->studentNumber,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(); }
/************************************* 函数功能:输出信息
*************************************/ void OutputInformation() {
STUDENT *p;
p=headLink->next;//使p指向headLink->next if(p==NULL)//如果p指向空地址说明没有学生信息 {
printf(\现在没有学生信息,请先输入学生信息\\n\\n\ }
printf(\学号\\t姓名\\t英语\\t数学\\t计算机\\t总成绩\\t平均成绩 \\n \\n\
while(p)//当p指向地址存在则调用DesplayOneNode()函数进行输出操作 {
DesplayOneNode(p);
p=p->next;//指向下一名学生
}
}
/*************************************
11
1052400101 周谒真 C语言实训报告 电子信息科学与技术一班
函数功能:计算平均分的菜单
*************************************/ void CompositorMenu() {
printf(\输入学生的学号统计该生的总分及平均分\\n\\n\ printf(\输入课程求该门课程的总平均分\\n\\n\ int c;
scanf(\ if(c==1) {
CompositorBystudentNumber();//调用CompositorBystudentNumber()函数 }
else if(c==2) {
CompositorBystudentClass();//调用CompositorBystudentClass()函数 } }
/************************************* 函数功能:根据用户输入的科目计算平均分 *************************************/ void CompositorBystudentClass() {
float k=0; STUDENT *q;
q=headLink->next;
if(q==NULL)//如果p指向空地址说明没有学生信息 {
printf(\现在还没有学生信息,请先输入学生信息\\n\ }
int i;
float s=0;
printf(\请输入课程求该门课程的总平均分\\n\ printf(\英语\\n\ printf(\数学\\n\ printf(\计算机\\n\ scanf(\ if(i==1) {
while(q)//把第一门课的所有人的成绩相加除以总人数,下面以此类推 {
k=k+q->mark1; q=q->next;
12
1052400101 周谒真 C语言实训报告 电子信息科学与技术一班
s++; }
printf(\英语平均分:%f\ }
else if(i==2) {
k=0; s=0;
while(q) {
k=k+q->mark2; q=q->next; s++; }
printf(\数学平均分:%f\ }
else if(i==3) {
k=0; s=0;
while(q) {
k=k+q->mark3; q=q->next; s++; }
printf(\计算机平均分:%f\ } }
void Exit() {
printf(\欢迎使用本系统,按任意键退出。。。\ getch(); exit(0); }
7.测试结果
报错
先录入三个学生的信息
13
1052400101 周谒真 C语言实训报告 电子信息科学与技术一班
按学号排序并输出
按学号查询某学生信息
删除某学生信息
输出删除后的学生信息
调用统计功能,获得班级单科平均分
14
1052400101 周谒真 C语言实训报告 电子信息科学与技术一班
完成信息管理,选择6退出系统
测试结果显示程序各部分功能均得以完整实现,输入提示清晰,操作简单出错也有完整的提示(未录入学生信息),程序运行可按需重复使用,程序健壮性强
8. 课程设计中存在的问题
界面设计过于简单,不够美观,人性化。该程序只执行简单的录入,查找,删除,统计功能,并未对操作人员身份进行区分,存在一定安全问题。
9. 在设计实践过程中的自我感受]
这次程序设计加深了我对课堂讲授内容的理解,课堂上讲授的许多关于c语言的语法规则,听起来十分枯燥无味,也不容易记住,然而程序设计的过程有要求使用c语言这个工具解决实际问题,必须要掌握。通过程序的编写,让我对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。对于一些内容自己认为在课堂上听懂了,但编程中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。
学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。即把c语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。只有通过上机编程才能检验自己是否掌握c语言、自己编写的程序是否能够正确地解题。
通过上机编程来验证自己编制的程序是否正确,恐怕是大多数同学在完成老师作业时的心态。但是在程序设计领域里这是一定要克服的传统的、错误的想法。因为在这种思想支配下,可能你会想办法去\掩盖\程序中的错误,而不是尽可能
15
1052400101 周谒真 C语言实训报告 电子信息科学与技术一班
多地发现程序中存在的问题。自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对c语言的理解和程序开发能力。
这次程序设计还让我懂得程序调试的重要性,认为万无一失的程序,实际上机运行时可能不断出现麻烦。如编译程序检测出一大堆错误。有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。程序的调试是一个技巧性很强的工作,对于初学者来说,尽快掌握程序调试方法是非常重要的。有时候一个消耗你几个小时时间的小小错误,调试高手一眼就看出错误所在,因此只有多多的练习才能提高调试能力。
16
1052400101 周谒真 C语言实训报告 电子信息科学与技术一班
附录
使用说明:
1.键盘输入1并回车,再按任意键进入排序功能,将看到所有学生按学号排序后的信息,确认后按任意键返回初始菜单
2.键盘输入2并回车,再按任意键进入录入功能,录入完成后按任意键返回初始菜单
3.键盘输入3并回车,再按任意键进入查找功能,按提示输入要查找的学生学号,输入后按回车,将看到该学生的各项信息,确认后按任意键返回初始菜单
4.键盘输入4并回车,再按任意键进入删除功能,按提示输入要删除的学生学号,输入后按回车,将看到“删除成功”的提示,确认后按任意键返回初始菜单
5.键盘输入5并回车,再按任意键进入统计功能,按提示可选择按序号输出的学生信息,或选择查看某科目的班级均分,确认后按任意键返回初始菜单
参考资料:
1.《软件工程案例教程》 韩万江 编著 机械工业出版社出版 2.《C语言程序设计教程》第3版 谭浩强 张基温 编著 高等教育出版社出版
17
正在阅读:
C语言实训报告-学生成绩管理系统06-13
青铜国宝司母戊鼎将改称后母戊鼎 - 图文01-28
西安建筑科技大学毕设实习报告08-17
鼎信诺常见问题11-29
梳理《史记》素材,为作文添彩09-15
2011青海省高考语文真题试卷考试题库09-05
中国宪法学详细笔记汇总整理(精华打印版)05-14
计算机应用基础知识试题01-16
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 言实
- 管理系统
- 成绩
- 报告
- 学生
- 交通运输部部属行政事业单位财务管理内部控制评价指南 - 图文
- 10年职称英语理工类A真题及详解
- 管理信息系统课后习题参考答案
- 保洁知识培训教程
- 20XX小学教学工作计划表格格式
- 以奋斗者为本读后感
- 江夏区个人住宅建设管理办法实施细则
- 自学考试《古代汉语》词义分析(已排版)
- 读后感 例文
- 大学课程《教学论》复习要点
- 项目九 - 图文
- 章丘市学校校车安全管理目标责任书
- 积极主动性不够,创新意识缺乏的具体表现
- 2013~2014学年度第二学期期中试卷八年级语文试卷
- 高中文理科数学必背公式
- 探索切合实际的宅基地管理办法
- 最新人教版九年级物理《21.2电磁波的海洋》优秀教学设计
- 复命读后感
- 100测评网新目标英语八年级下学期阅读理解20篇
- 08-能的转化和能量守恒(机械能、功、功率)