欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    C语言课程设计学生成绩管理系统 .doc

    • 资源ID:2384782       资源大小:151KB        全文页数:31页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C语言课程设计学生成绩管理系统 .doc

    题目:学生成绩管理系统(1)一、课程设计时间2001011第2学期 第15周,共计1周,20学时。二、课程设计内容用C语言编写软件完成以下任务:1录入学生数据信息(不用考虑学期),学生信息至少包括姓名、学号、数学成绩三方面,学生信息应及时保存在文件中;2根据学号查询某生成绩;3插入新的学生数据信息。4统计分析:要求能够将成绩排序,并统计及格人数及及格率。三、课程设计要求:1. 程序质量:l 贯彻结构化程序设计思想。l 用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。l 用户界面中的菜单至少应包括“录入学生信息”、“查询某学生成绩”、“插入新生信息”、“统计分析”、“退出”5项。l 代码应适当缩进,并给出必要的注释,以增强程序的可读性。2. 课程设计说明书:课程结束后,上交课程设计说明书和源程序。课程设计说明书的格式和内容参见提供的模板。四、指导教师和学生签字指导教师:_ 学生签名:_五、成绩六、教师评语目录一、需求分析1二、设计分析2三、主要界面截图3四、技术要点17五、个人总结20六、参考文献20七、源程序21一、需求分析根据任务书给定的“课程设计内容”和“课程设计要求”作如下的需求分析。该系统是一个较典型的数据管理系统,其使用者被假定为某办公室的学生成绩管理人员,系统应该具有安全、稳定、功能齐全的特点。1. 安全性分析系统管理的数据涉及到学院的所有同学,数据量较大且是一种基础性数据,能够为其它方面的学生管理工作提供重要参考,所以要通过设置密码等手段确保数据不能被随意的删减和修改。2. 稳定性分析指系统比较健壮,只要是用户的合理操作,系统都应给出合理正确的回应,而不是出现令用户感到意外的系统错误或系统崩溃。3. 主要功能分析(1)数据录入:允许用户输入学号、姓名、数学成绩。对用户由于疏忽录入的非法数据,能够及时提示并更正。(2)数据保存:对于输入的数据,或被修改的数据应该保存到某个磁盘文件中,实现永久存储。文件的具体格式题目未作具体要求,所以可采用随机文件,也可采用文本文件。不管采用哪种文件形式,文件中的数据应有固定的格式,以便于程序自动读取或人工阅读。(3)数据查询:用户输入查询条件,系统规则地在界面显示查询结果,且显示的数据尽量全面。当输入学号时,可查询到该学生的学号、姓名、数学课程成绩信息。(4)统计分析:将录入学生成绩排序,统计及格率,且使显示尽量简洁,操作尽量简单。二、设计分析主要有6个功能模块,每个模块对应一个C语言自定义函数。这些函数原型及其功能简述如下:录入函数 (newrecord),查询函数(searchmenu),统计函数(listmenu),添加函数(addrecord),写入函数(writetofile),以及显示目录的主函数(main)。解决本题首先要解决两个问题:首先是录入文件或者读取文件,录入相对,读取文件这一步我是参照书上可用 FILE *fp=fopen(),但是这一步又是非常麻烦,稍有不慎很可能就不能打开。其次,在读取文件时要先做一个循环,再构造一个主菜单的程序,即在用户界面首页输出简单的操作界面,为了能使用户在使用更加明了方便,可再构造子菜单。1、 主函数流程 void main()readfromfile();while (1)mainmenu(); 图2-1主函数流程图2.主要功能菜单流程图(1)主菜单流程void mainmenu()/主菜单 char choic;system("cls"); printf("ntt*主菜单*"); printf("ntt* 1-录入学生信息 2-查询学生信息 *"); printf("ntt* 3-插入新生信息 *"); printf("ntt* 4-统计分析 *"); printf("ntt* 5-保存退出 6-不保存退出*"); printf("ntt*"); printf("ntt请选择:"); choic=getch();switch (choic) case '1':newrecord();break; case '2':searchmenu();break; case '3':addrecord();break; case '4':listmenu();break; case '5':writetofile();break; case '6':exit(0); default:mainmenu(); 图2-2 执行主菜单流程图(2)case1执行录入函数该函数的核心内容是学生成绩信息被存在结构体里,需要把学生的姓名、学号、数学成绩、分别输入到结构体里。,实现多名学生信息的输入。具体的程序段如下void newrecord()/添加纪录 printf("ntt* 请输入学生信息 *n"); printf("ntt输入学号:"); scanf("%s",&studentnum.id); printf("ntt输入姓名:"); scanf("%s",&studentnum.name); printf("ntt输入数学成绩:");scanf("%d",&studentnum.macth);num+; printf("ntt是否继续添加?(Y/N):"); if (getch()='y') newrecord(); return; 图2-3 录入函数流程图(3)case2执行查询函数该函数的核心内容是通过输入要查找的学生的学号,在结构体中逐一对照已有学生信息和要查找学生信息。如果和已有学生信息符合,则进行该学生数学成绩信息的输出,如果没有符合学生,则出现找不到学生信息!对话框。具体程序段如void searchmenu()/查询菜单 char choic;system("cls");printf("ntt* 查询菜单 *"); printf("ntt* 1-显示所有 2-按学号查询 *"); printf("ntt* 3-返回主菜单*"); printf("ntt*"); printf("ntt请选择:"); choic=getch();switch (choic)case '1':showall();break; case '2':searchbyid();break; case '3':mainmenu();break; void searchbyid()/按学号查询 int mark=0; int i; int a=0; printf("ntt* 按学号查找 *n"); char id10; printf("ntt请输入学号:"); scanf("%s",id); for(i=0;i<num;i+) if (strcmp(studenti.id,id)=0) printf("ntt* 以下是您查找的学生信息 *"); printf("ntt学号: %s",studenti.id); printf("ntt姓名: %s",studenti.name);printf("ntt数学成绩: %d",studenti.macth);printf("ntt*"); printf("ntt按任意键返回主菜单:"); mark+; getch(); return; if (mark=0) printf("ntt没有该学生的信息"); printf("ntt按任意键返回主菜单"); getch(); return; void showall()/显示所有 int i; system("cls"); if(num!=0) printf("ntt* 以下为学生系统所有信息*"); for (i=0;i<num;i+) printf("ntt学号: %s",studenti.id); printf("ntt姓名: %s",studenti.name); printf("ntt数学成绩: %d",studenti.macth); printf("tt"); if (i+1<num) printf("ntt_"); system("pause"); printf("ntt*"); else printf("ntt学生系统中无任何纪录"); printf("ntt按任意键返回主菜单:"); getch(); return; 图2-4 查询函数流程图(3)case3执行添加函数该函数的核心内容是将新生成绩信息存在结构体里,需要把学生的姓名、学号、数学成绩、分别输入到结构体里。,实现多名学生信息的输入(与录入函数相似)。具体的程序段如下void addrecord()/插入新信息 printf("ntt* 请输入学生信息 *n"); printf("ntt输入学号:"); scanf("%s",&studentnum.id); printf("ntt输入姓名:"); scanf("%s",&studentnum.name); printf("ntt输入数学成绩:");scanf("%d",&studentnum.macth);num+; printf("ntt是否继续添加?(Y/N):"); if (getch()='y') newrecord(); return; 图2-5添加函数流程图(4)case4执行统计函数该函数的核心内容是:1. 通过冒泡法逐一分析学生信息,将学生成绩排序;2.将学生成绩大于60的都附给m做一个循环,让m为一个数级,最后除以总数求出及格率。具体的程序段如下:void listmenu()/统计菜单 char choic; if(num=0) printf("ntt对不起,文件中无任何纪录"); printf("ntt按任意键返回主菜单"); getch(); return; system("cls"); printf("ntt* 统计菜单 *"); printf("ntt* 1-按学号排序 2-显示及格率 *");printf("ntt*3-返回主菜单*");printf("ntt*"); printf("ntt请选择:"); choic=getch(); switch(choic) case '1':listbyid();break; case '2':pas();break; case '3':mainmenu();break; default:mainmenu();break; void listbyid()/按学号排序 int i,j; struct record tmp; for (i=1;i<num;i+) if(strcmp(studenti.id,studenti-1.id)<0) tmp=studenti; j=i-1; do studentj+1=studentj; j-; while (strcmp(tmp.id,studentj.id)<0)&&j>=0); studentj+1=tmp; printf("ntt排序成功,是否显示?(y/n)"); if (getch()='y') showall(); return;void pas()/及格率计算 int mark=0; int i; int a=0;float m=0;float pin=0.0;char s='%'for(i=0;i<num;i+) if (studenti.macth>=60) m+;pin=(m/num);pin=pin*100;printf("ntt及格率为:"); printf("ntt%f",pin);printf("%c",s);printf("ntt按任意键返回主菜单:"); mark+; getch(); return; if (mark=0) printf("ntt记录为空!"); printf("ntt按任意键返回主菜单"); getch(); return; 图2-6 统计函数流程图(4)case5执行保存退出该函数的核心内容是通过FILE *fp=fopen()将录入学生信息写入只写文件后退出具体的程序段如下:void writetofile()/写入文件 int i; if (fp=fopen("myfile.txt","wb")=NULL) printf("ntt文件打开失败"); for (i=0;i<num;i+) if (fwrite(&studenti,sizeof(struct record),1,fp)!=1) printf("ntt写入文件错误!n"); fclose(fp); printf("ntt学生成绩文件已保存"); printf("ntt按任意键退出程序ntt"); exit(0); 图2-7 写入函数流程图三、主要界面截图图3-1 程序主界面图3-2 查询菜单界面图3-3 排序菜单界面图3-4 插入新生信息界面四、技术要点(对本程序贡献较大的C语言知识点;重要算法的设计与实现)1、结构体的应用定义了结构体用来描述学生的姓名、学号、以及数学成绩。具体的定义如下:char id10; char name20; int macth; student500; int num=0;/外部变量num为文件中的纪录数 FILE *fp; void mainmenu();/主菜单void pas();/及格率计算 void newrecord();/新添纪录 void searchmenu();/查询菜单 void addrecord();/插入新信息void searchbyid();/按学号查询 void showall();/显示所有 void readfromfile();/读取文件 void writetofile();/写入文件 void listbyid();/按学号排序 void listmenu();/排序菜单所定义的结构体主要用于定义数组。2、文件操作包括了文件的写入和读取两个方面。文件的写入操作,用于保存录入的学生数据,也用于保存所修改的数据。例如如下程序段用于保存录入的学生信息:(1) 文件导入void readfromfile()/从文件导入 if(fp=fopen("myfile.txt","rb")=NULL)printf("ntt学生成绩文件不存在");if (fp=fopen("myfile.txt","wb")=NULL)printf("ntt建立失败");exit(0);elseprintf("ntt学生成绩文件已建立");printf("ntt按任意键进入主菜单");getch();return;exit(0);fseek(fp,0,2); /*文件位置指针移动到文件末尾*/if (ftell(fp)>0) /*文件不为空*/rewind(fp); /*文件位置指针移动到文件开始位置*/for (num=0;!feof(fp) && fread(&studentnum,sizeof(struct record),1,fp);num+);printf("ntt文件导入成功");printf("ntt按任意键返回主菜单");getch();return;printf("ntt文件导入成功");printf("ntt学生成绩文件中无任何纪录");printf("ntt按任意键返回主菜单");getch();return;(2)文件写入void writetofile()/写入文件 int i; if (fp=fopen("myfile.txt","wb")=NULL) printf("ntt文件打开失败"); for (i=0;i<num;i+) if (fwrite(&studenti,sizeof(struct record),1,fp)!=1) printf("ntt写入文件错误!n"); fclose(fp); printf("ntt学生成绩文件已保存"); printf("ntt按任意键退出程序ntt"); exit(0); 3、统计分析 此程序的难点重点在于统计分析,其可分为两个方面内容,一为排序;二为计算及格率,排序运用较为常用的冒泡法解决,而计算及格率将分数大于60的都附给m,让m为一个数级,最后除以总数求出及格率。五、个人总结通过这次课程设计,使我又进一步熟悉和掌握了通过用C语言软件编写一个实际应用的程序,我深深的体会到编程是一个需要谨慎与严密精神的工作,同时我也感觉到做一名优秀程序员的不易。题除了读取文件和统计分析较为困难外,还有所要编写的程序也不是很容易。再有就是编写程序时要尽量考虑到程序简洁明了,为程序编写出现错误时修改提供方便,这也是非常重要的。在编程序过程中,我积极的和同学讨论,请教老师一些困难的问题和难点,最终编好和完善了程序。使程序基本能完成编好和完善了程序,而且用户界面也比较友好,在运行过程中输出内容明了,循环顺畅,退出方便,很好的完成了任务。六、参考文献1 谭浩强C程序设计北京:清华大学出版社,20052 刘成等C语言程序设计实验指导与习题集北京:中国铁道出版社,2006。七、源程序#include <stdio.h>#include <stdio.h>#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> struct record char id10; char name20; int macth; student500; int num=0;/外部变量num为文件中的纪录数 FILE *fp; void mainmenu();/主菜单void pas();/及格率计算 void newrecord();/新添纪录 void searchmenu();/查询菜单 void addrecord();/插入新信息void searchbyid();/按学号查询 void showall();/显示所有 void readfromfile();/读取文件 void writetofile();/写入文件 void listbyid();/按学号排序 void listmenu();/排序菜单 void readfromfile()/从文件导入 if(fp=fopen("myfile.txt","rb")=NULL)printf("ntt学生成绩文件不存在");if (fp=fopen("myfile.txt","wb")=NULL)printf("ntt建立失败");exit(0);elseprintf("ntt学生成绩文件已建立");printf("ntt按任意键进入主菜单");getch();return;exit(0);fseek(fp,0,2); /*文件位置指针移动到文件末尾*/if (ftell(fp)>0) /*文件不为空*/rewind(fp); /*文件位置指针移动到文件开始位置*/for (num=0;!feof(fp) && fread(&studentnum,sizeof(struct record),1,fp);num+);printf("ntt文件导入成功");printf("ntt按任意键返回主菜单");getch();return;printf("ntt文件导入成功");printf("ntt学生成绩文件中无任何纪录");printf("ntt按任意键返回主菜单");getch();return; void mainmenu()/主菜单 char choic;system("cls"); printf("ntt* 主菜单 *"); printf("ntt* 1-录入学生信息 2-查询学生信息 *"); printf("ntt* 3-插入新生信息 *"); printf("ntt* 4-统计分析 *"); printf("ntt* 5-保存退出 6-不保存退出*"); printf("ntt*"); printf("ntt请选择:"); choic=getch();switch (choic) case '1':newrecord();break; case '2':searchmenu();break; case '3':addrecord();break; case '4':listmenu();break; case '5':writetofile();break; case '6':exit(0); default:mainmenu(); void newrecord()/添加纪录 printf("ntt* 请输入学生信息 *n"); printf("ntt输入学号:"); scanf("%s",&studentnum.id); printf("ntt输入姓名:"); scanf("%s",&studentnum.name); printf("ntt输入数学成绩:");scanf("%d",&studentnum.macth);num+; printf("ntt是否继续添加?(Y/N):"); if (getch()='y') newrecord(); return; void searchmenu()/查询菜单 char choic;system("cls");printf("ntt* 查询菜单 *"); printf("ntt* 1-显示所有 2-按学号查询 *"); printf("ntt* 3-返回主菜单*"); printf("ntt*"); printf("ntt请选择:"); choic=getch();switch (choic)case '1':showall();break; case '2':searchbyid();break; case '3':mainmenu();break; void searchbyid()/按学号查询 int mark=0; int i; int a=0; printf("ntt* 按学号查找 *n"); char id10; printf("ntt请输入学号:"); scanf("%s",id); for(i=0;i<num;i+) if (strcmp(studenti.id,id)=0) printf("ntt* 以下是您查找的学生信息 *"); printf("ntt学号: %s",studenti.id); printf("ntt姓名: %s",studenti.name);printf("ntt数学成绩: %d",studenti.macth);printf("ntt*"); printf("ntt按任意键返回主菜单:"); mark+; getch(); return; if (mark=0) printf("ntt没有该学生的信息"); printf("ntt按任意键返回主菜单"); getch(); return; void showall()/显示所有 int i; system("cls"); if(num!=0) printf("ntt* 以下为学生系统所有信息*"); for (i=0;i<num;i+) printf("ntt学号: %s",studenti.id); printf("ntt姓名: %s",studenti.name); printf("ntt数学成绩: %d",studenti.macth); printf("tt"); if (i+1<num) printf("ntt_"); system("pause"); printf("ntt*"); else printf("ntt学生系统中无任何纪录"); printf("ntt按任意键返回主菜单:"); getch(); return; void addrecord()/插入新信息 printf("ntt* 请输入学生信息 *n"); printf("ntt输入学号:"); scanf("%s",&studentnum.id); printf("ntt输入姓名:"); scanf("%s",&studentnum.name); printf("ntt输入数学成绩:");scanf("%d",&studentnum.macth);num+; printf("ntt是否继续添加?(Y/N):"); if (getch()='y') newrecord(); return; void listmenu()/排序菜单 char choic; if(num=0) printf("ntt对不起,文件中无任何纪录"); printf("ntt按任意键返回主菜单"); getch(); return; system("cls"); printf("ntt* 排序菜单 *"); printf("ntt* 1-按学号排序 2-显示及格率 *");printf("ntt*3-返回主菜单*");printf("ntt*"); printf("ntt请选择:"); choic=getch(); switch(choic) case '1':listbyid();break; case '2':pas();break; case '3':mainmenu();break; default:mainmenu();break; void listbyid()/按学号排序 int i,j; struct record tmp; for (i=1;i<num;i+) if(strcmp(studenti.id,studenti-1.id)<0) tmp=studenti; j=i-1; do studentj+1=studentj; j-; while (strcmp(tmp.id,studentj.id)<0)&&j>=0); studentj+1=tmp; printf("ntt排序成功,是否显示?(y/n)"); if (getch()='y')

    注意事项

    本文(C语言课程设计学生成绩管理系统 .doc)为本站会员(文库蛋蛋多)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开