收藏 分销(赏)

C语言程序的设计学生成绩记录簿.doc

上传人:二*** 文档编号:4576822 上传时间:2024-09-30 格式:DOC 页数:17 大小:459KB 下载积分:5 金币
下载 相关 举报
C语言程序的设计学生成绩记录簿.doc_第1页
第1页 / 共17页
本文档共17页,全文阅读请下载到手机保存,查看更方便
资源描述
课程实验报告 课程名称 C语言程序设计 班级 13新能源2班 实验日期 20XX8月1号 姓名 许鑫 学号 130370236 实验成绩 实验名称 学生成绩记录簿系统 实 验 题 目 描 述 本程序是非数值计算型算法设计,我设计出了学生成绩记录簿系统的基本功能,并设计了简单的界面。本程序主要考察对自定义函数的熟悉程度,本程序主要使用的是链表的相关操作,包括结构体链表的创建、输入、输出、查找、删除等。我设计的这个成绩记录簿系统也初步实现了学生成绩信息的显示、输入、删除、查找等必要的功能。 1.建立一个主界面 2.用switch语句进行分类讨论 3.分别进入录入,查询,删除,等子函数。 4.将子函数与主函数相连即可。 该程序可以建立学生的成绩记录。可以方便老师和同学方便的查阅成绩; 这个程序有录入和删除的功能; 还可以求出平均成绩,并排序 成绩记录簿中记录以下数据:学号、姓名、课程编号、课程名称、成绩、学分 􀁺 添加成绩:需要输入学生的学号或姓名、课程编号及成绩,如已有该门课程成绩给出提示; 􀁺 查询〔班级或个人成绩: 􀁺 查询个人成绩:以学号或姓名作为关键字,可查询一个学生的所有成绩,和已完成的总学分。 􀁺 查询班级成绩:以课程编号为关键字,成绩表后面要统计平均分、及格率及全班同学不同课程在不同分数段分布的人数及百分比。 拓展功能: a> 程序启动时先从文件读入数据,如果文件中没有数据则给出提示; b> 每次修改的数据写入文件 实 验 环 境 以自己的电脑为主要的实验平台,运用Visual C++ 6.0这个软件进行反复的编写实验。 实 验 界 面 截 图 1、开始时 2、添加 3、查询 4、查询成绩 5、写文本 6、读取 算 法 描 述 及 实 验 步 骤 主程序提供一个界面,允许用户选择。使用switch语句,用时直接输入数字即可。 增加函数,功能是插入学生成绩。使用一个无穷循环,直到录入"n"时结束。 删除函数,功能是删除,分为两步,先找后删。找,用strcmp函数 来做如果找到记录i值,反之记为-1;删除可以从i项开始将数组的后一项赋值给前一项。前一项自动被删掉。这样完成删除。 查询函数与之类似,将删除改为输出即可; 求平均值函数与查询类似只是输出时只输出平均值而已。 按平均值排序只要加一个排序函数即可。 退出函数什么都不写,即可。 程序流程图 查询成绩 添加成绩 添加学生成绩 添加课程编号 添加学生姓名 添加学生学号 查询班级成绩 查询学生成绩 查询班级成绩 查询学生成绩 课程编号 学号查询 姓名查询 调 试 过 程 及 实 验 结 果 总 结 经过一个多星期的编译原理课程设计,在我的努力下,顺利完成该课程设计。 通过该课程设计,掌握了编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程及其相关的技术,对课本上的知识也有了更深的理解。老师常说,课本上的知识是机械的,表面的,要学会去运用,要举一反三。现在终于深刻的了解了这句话。经过这次的课程设计,发现书本上很深奥的知识变的更为简单,同样,对实验原理也了有更深的理解。知道和理解了该理论在计算机中是怎样执行的, 对该理论在实践中的应用有深刻的理解 。通过该课程设计,把死板的课本知识变得生动有趣,激发了学习的积极性。能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。 课程设计中程序比较复杂,在调试时应该仔细,在程序调试时,注意指针,将不必要的命令去除。除了课堂外,课程设计是最能学到东西的,最考验人的。在做课程设计的这段时间,时刻都感到自己学的知识有多么的贫瘠。经过这次课程设计,让我对C++这门语言有了更深的认识,操作能力有了提高要想是写出的代码能运行,需要耐心细心,毅力以及充沛的体力。只有经过多次编辑,多次编译,再多次运行,才能编写出更好的程序,有时候需要多次的更正才能达到所要的运行结果。 附 录 #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 1000 struct Lesson { char LessonName[100]; char LessonNumber[100]; int LessonMark; float LessonCredit; }; struct Student { char Name[100]; char Number[100]; int LessonCount; struct Lesson L[100]; }; struct Student S[MAX]; int StudentCount = 0; void PrintInterface<>; int Student_Insert<>; int Student_Delete<>; void Student_Select<>; void Class_Select<>; void WriteFile<>; void ReadFile<>; int main<> { int n; { PrintInterface<>; scanf<"%d", &n>; } } void PrintInterface<> { int n; while <1> { printf<"\n ---欢迎使用学生成绩记录簿系统--- ">; printf<"\n| 1、添加 |\n">; printf<"\n| 2、删除 |\n">; printf<"\n| 3、查学生成绩 |\n">; printf<"\n| 4、查班成绩表 |\n">; printf<"\n| 5、写入文本文件 |\n">; printf<"\n| 6、读取文本文件 |\n">; printf<"\n| 0、退出 |\n">; printf<"\n -------------------------- ">; printf<"\n选择操作:">; scanf<"%d",&n>; switch<n>{ case 1: if <Student_Insert<>> printf<"\n添加成功...回车继续\n">; else printf<"\n添加失败...回车继续\n">; break; case 2: Student_Delete<>; break; case 3: Student_Select<>; break; case 4: Class_Select<>; break; case 5: WriteFile<>; break; case 6: ReadFile<>; break; case 0: exit<1>; break; default: printf<"无此功能,请重新选择,按回车确定\n">; } } return 0; } int Student_Insert<> { int i,j,n; printf<"\n请输入所添加的学生人数:">; scanf<"%d", &n>; if <StudentCount + n >= MAX> return 0; for <i = StudentCount; i < StudentCount + n; ++i> { printf<"\n\t第%d个学生:\n", i - StudentCount + 1>; printf<"\n\t学生学号:">; scanf<"%s", &S[i].Number>; if<strlen<S[i].Number>!=8> { printf<"输入错误,请重新输入">; return 0; } printf<"\n\t学生姓名:">; scanf<"%s", S[i].Name>; printf<"\n\t该学生所修课程数:">; scanf<"%d", &S[i].LessonCount>; for <j = 0; j < S[i].LessonCount; ++j> { printf<"\n\t第%d门课:\n", j + 1>; printf<"\n\t\t课程编号:">; scanf<"%s", S[i].L[j].LessonNumber>; if<strlen<S[i].L[j].LessonNumber>!=5> { printf<"输入错误,请重新输入!">; return 0; } printf<"\n\t\t课程名称:">; scanf<"%s",S[i].L[j].LessonName>; printf<"\n\t\t课程成绩:">; scanf<"%d", &S[i].L[j].LessonMark>; if<S[i].L[j].LessonMark<0 || S[i].L[j].LessonMark>100> { printf<"输入错误,请重新输入!">; return 0; } printf<"\n\t\t课程学分:">; scanf<"%f", &S[i].L[j].LessonCredit>; if<S[i].L[j].LessonCredit<1 || S[i].L[j].LessonCredit>5> { printf<"输入错误,请重新输入!">; return 0; } if <S[i].L[j].LessonMark < 60> S[i].L[j].LessonCredit = 0; } } StudentCount += n ; return 1; } int Student_Delete<> { char a[100]; char b[100]; int i, j; printf<"\n删除学生:\n">; printf<"\n学生姓名:">; scanf<"%s",a>; printf<"\n学生学号:">; scanf<"%s",b>; if<strlen<b>!=8> { printf<"输入错误请重新输入">; return 0; } for <i = 0; i < StudentCount; i++> { if <0==strcmp<S[i].Name, a> && 0==strcmp<S[i].Number, b>> { printf<"\n找到,删除\n">; for <j = i + 1; j < StudentCount; j++> { S[j - 1] = S[j]; } break; } } if <i == StudentCount || i > StudentCount> { printf<"\n未找到该学生\n\n">; return 0; } else { StudentCount--; return 1; } } void Student_Select<> { int x; char y[100]; char a[100]; int i, j; printf<"\n输入所查学生信息〔1.姓名 2.学号选择:">; scanf<"%d", &x>; if <x == 1 || x == 2> { if <x == 1> { printf<"\n姓名:">; fflush<stdin>; gets<a>; for <i = 0; i < StudentCount; i++> { if <0==strcmp<S[i].Name,a>> { printf<"\n学号:%s\t姓名:%s\n", S[i].Number, S[i].Name>; printf<"\n课程编号\t课程名称\t课程成绩\t课程学分\n">; printf<"-----------------------------------------------------\n">; for <j = 0; j < S[i].LessonCount; j++> { printf<"%s\t\t%s\t\t%d\t\t%f\n", S[i].L[j].LessonNumber, S[i].L[j].LessonName, S[i].L[j].LessonMark, S[i].L[j].LessonCredit>; printf<"-----------------------------------------------------\n">; } printf<"\n\n">; } } } else { printf<"\n学号:">; fflush<stdin>; gets<y>; for <i = 0; i < StudentCount; i++> { if <strcmp<S[i].Number,y>==0> { printf<"\n学号:%s\t姓名:%s\n", S[i].Number, S[i].Name>; printf<"\n课程编号\t课程名称\t课程成绩\t课程学分\n">; printf<"-----------------------------------------------------\n">; for <j = 0; j < S[i].LessonCount; j++> { printf<"%s\t\t%s\t\t%d\t\t%f\n", S[i].L[j].LessonNumber,S[i].L[j].LessonName, S[i].L[j].LessonMark,S[i].L[j].LessonCredit>; printf<"-----------------------------------------------------\n">; } printf<"\n\n">; break; } } } printf<"查找完毕...回车继续\n">; getchar<>; } else { printf<"选择错误...回车继续\n">; getchar<>; return; } } void Class_Select<> { char a[100]; double x=0,y=0,z=0; int i, j; printf<"\n请输入课程编号:">; fflush<stdin>; scanf<"%s",a>; printf<"学号\t姓名\t课程名称\t课程成绩\t课程学分\n">; printf<"----------------------------------------------------\n">; for <i = 0; i < StudentCount; i++> { for <j = 0; j < S[i].LessonCount; j++> { if <strcmp<S[i].L[j].LessonNumber,a>==0> { printf<"%s\t%s\t%s\t\t%d\t\t%f\n", S[i].Number, S[i].Name, S[i].L[j].LessonName, S[i].L[j].LessonMark, S[i].L[j].LessonCredit>; printf<"----------------------------------------------------\n">; z+=S[i].L[j].LessonMark; x++; if <S[i].L[j].LessonMark >= 60> y++; break; } } } printf<"\n平均分:%f\t及格率:%f%%\n\n", z/x, y/x*100>; printf<"\n查找完毕...回车继续\n">; getchar<>; } void WriteFile<> { FILE *fp; int i, j; char a[100]; printf<"\n请输入写入的文件地址:\n\n地址输入格式:例如d:\\\\Student.txt:">; scanf<"%s",&a>; printf<"\n写入中......\n">; if <fp = fopen<a,"w">> { fprintf<fp,"%d\n",StudentCount>; for <i = 0; i < StudentCount; i++> { fprintf<fp,"%s\t%s\t%d\n",S[i].Number, S[i].Name,S[i].LessonCount>; for <j = 0; j < S[i].LessonCount; j++> { fprintf<fp,"%s\t%s\t%d\t%f\n", S[i].L[j].LessonNumber,S[i].L[j].LessonName, S[i].L[j].LessonMark,S[i].L[j].LessonCredit>; } } printf<"\n写入完成...回车继续\n">; fclose<fp>; } else { printf<"\n写入失败...回车继续\n">; } getchar<>; } void ReadFile<> { FILE *fp; int i, j; char a[100]; printf<"\n请输入读取的文件地址:\n\n地址输入格式:例如d:\\\\student.txt:">; scanf<"%s",&a>; printf<"\n读取中......\n">; if <fp = fopen<a,"r">> { fscanf<fp,"%d",&StudentCount>; for <i = 0; i < StudentCount; i++> { fscanf<fp,"%s%s%d",&S[i].Number, &S[i].Name,&S[i].LessonCount>; for <j = 0; j < S[i].LessonCount; j++> { fscanf<fp,"%s%s%d%f",&S[i].L[j].LessonNumber, &S[i].L[j].LessonName,&S[i].L[j].LessonMark, &S[i].L[j].LessonCredit>; } } printf<"\n读取成功...回车继续\n">; fclose<fp>; } else { printf<"\n读取失败...回车继续\n">; } getchar<>; } 17 / 17
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服