




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言课程设计课程设计报告题 目学生成绩管理系统学 名周立年级专业14级电子信息工程指导教师 汤萍萍完成日期2014年06月18日安徽师范大学物理与电子信息学院College of Physics and Peactronic Information, Anhui Normal University目 录1. 课程设计目的32. 分析与设计33核心代码清单54. 设计中的问题125. 课程设计总结12一 项目开发的目标: 建立学生成绩管理系统,;利用计算机对学生成绩进行管理,进一步提高办学效益和现代化水平。帮助广大教师提高工作效率,实现学生成绩信息管理工作流程的系统化,规范化和自动化。二 项目提出的意义: 学生成绩管理系统在学校中占有极其重要的地位,它关系着学校内部的各种管理,包括工作流程,成绩,排名等信息的管理。对于学校来讲,学生成绩管理系统是必不可少的组成部分,它能有效的管理学校的各种信息,对学校运行工作的顺利进行起着重要的管理作用。 根据学校管理的需要,开发一个“学生成绩管理系统”,开发目标如下。 能够对学生信息进行输入,排序等操作。 能够实现对学生成绩的总分实现和平均分实现。 能够查单个学生的各科成绩。三 系统功能描述:1.输入记录模块: 将数据输入到单链表中,记录可以从二进制形式存取的数据文件中读入,也可以从键盘中逐个读入形式的记录。学生记录由学生的基本资料和学生成绩构成。当从数据文件中读入记录时,将在以记录为单位存取的数据文件中,将记录逐条复制到单链表中。 2.记录查询模块: 此模块功能是在单链表中查找满足相关条件的学生记录。在此系统中,可以按照学生的学号或姓名来查找学生的信息,并返回指向学生记录的指针。没有结果则返回一个为NULL的空指针,并输出没有找到信息的提示。 3.记录更新模块: 此模块用于对学生信息进行维护处理,在此系统实例中可以对学生记录进行修改,删除,插入和排序操作。系统进行上述操作后,需要将修改后的数据存入到源数据文件中。 4.记录统计模块: 此模块的功能是统计本次学生人数。 5.记录输出模块: 此模块有如下两个功能。 对学生记录信息进行存盘操作,将单链表内各结点中存储的学生记录写入到数据文件中。 将单链表内各结点中存储的学生记录信息以表格的形式在屏幕上输出。上述模块的总体结构如下图所示:学生成绩管理系统学生成绩信息录入学生成绩信息查找学生成绩信息删除学生人数统计学生成绩排名学生成绩信息插入学生成绩信息修改四 系统总体设计。1. 主函数main()运行流程主函数main()首先以可读写的方式打开数据文件,在此数据文件默认为“C:student”,如果不存在,则新建此文件。当文件被打开后,将从文件中读入一条记录,添加到新建的单链表中,然后显示系统的主菜单,最后进入主循环操作过程,进行按键判断处理。按键判断处理的流程如下。(1) 按键的有效值为0-7,其他数值都是错误的。(2) 如果输入为0,则会退出该系统(3) 如果选择1,则调用in函数,增加学生记录。(4) 如果选择2,则调用search函数,查询学生记录(5) 如果选择3,则调用del函数,删除学生记录。(6) 如果选择4,则调用modify函数,修改学生记录。(7) 如果选择5,则调用insert函数,插入学生记录。(8) 如果选择6,则调用order函数,按降序排列学生记录。(9) 如果选择7,则调用total函数,统计学生记录。(10)如果是0-7以外的值,则调用wrong函数,输出错误提示。 2. 输入记录模块:输入记录模块的功能是将数据存入单链表中。当从数据文件中读取数据时,调用文件读取函数fread,从文件中读取一条学生成绩信息存入指针变量p所指向的结点中,并且此操作在主函数main()中执行。 如果数据文件没有记录,系统会提示单链表为空,即没有任何学生记录可以操作。此时用户应该选择1,即调用in函数输入新的学生记录,从而完成向单链表l中添加结点的操作。 注意: 在上述处理过程的字符串和数值输如中,分别采用了对应的函数来实现,在函数中完成输入数据的任务,并对数据进行条件判断处理,直到满足条件为止,这样可减少冗余代码和重复代码。3. 查询记录处理:查询记录即查询单链表中的学生记录,并以学号或姓名的格式显示结果。在查询函数search中,1指向保存了学生成绩信息的单链表的首地址的指针变量。为了遵循模块化编程的原则,需要在单链表中进行的指针定位操作设计成的一个单独的函数Node。4. 更新记录处理:此模块的功能是对学生记录信息进行修改,删除,插入和排序操作。因为学生的记录信息是以单链表结构存储的,所以这些操作要在单链表中完成。系统内的记录更新包括如下四种操作: 修改记录:修改系统内已经存在的学生记录信息。 删除记录:删除系统内已经存在的学生记录信息。 插入记录:向系统内添加新的学生记录信息。 排序记录:对系统内的学生记录信息进行排序处理。 C语言中的排序算法由很多,例如,冒泡排序和插入排序。本系统使用的是插入排序。单链表中插入排序的处理流程如下:(1) 新建一个单链表1,用于保存排序结果,其初始值为待排序单链表中的头结点。(2) 从排序列表中取出下一个结点,将其总分字段值和单链表1中各结点总分字段的值进行比较,直到在单链表1中找到总分小于它的结点。如果找到这个结点,系统将待排序链表中取出的结点插入gc此结点前,作为它的前缀;否则将把取出的结点放在单链表1的结尾处。(3) 重复上面的第二部操作,直到从待排序链表中取出的结点指针域为NULL(即此结点为链表的尾部结点),才算完成排序.5. 记录统计模块:此模块通过循环读取指针变量p所指向的当前结点的数据域中各字段的值,并对各成绩字段进行逐一判断,最终完成各科最高分学生的查找处理和不及格学生的统计。经过上述的实验过程,程序如下#include#include#include#include#include#define LEN sizeof(struct student)#define FORMAT %-12.0lf%-15s%-12.1lf%-12.1lf%-12.1lf%-12.1lfn#define DATA stui.num,,stui.peac,stui.mid,stui.ter,stui.sumfloat Fpeac,Fmid,Fter;struct student /*定义学生成绩结构体*/ double num;/*学号*/char name15;/*姓名*/double peac;/*平时成绩*/double mid;/*期中成绩*/double ter;/*期末成绩*/double sum;/*总分*/;struct student stu50;/*定义结构体数组*/void in();/*录入学生成绩信息*/void show();/*显示学生信息*/void order();/*按总分排序*/void del();/*删除学生成绩信息*/void modify();/*修改学生成绩信息*/void menu();/*主菜单*/void insert();/*插入学生信息*/void total();/*计算总人数*/void search();/*查找学生信息*/void main()/*主函数*/ int n;menu();scanf(%d,&n);/*输入选择功能的编号*/while(n) switch(n)case 1: in();break;case 2: search();break;case 3: del();break;case 4:modify();break;case 5:insert();break;case 6:order();break;case 7:total();break;default:break;getch();menu();/*执行完功能再次显示菜单界面*/scanf(%d,&n);void in()/*录入学生信息*/ int i,m=0;/*m是记录的条数*/char ch2;FILE *fp;/*定义文件指针*/if(fp=fopen(data,ab+)=NULL)/*打开指定文件*/ printf(can not openn);return;while(!feof(fp) if(fread(&stum ,LEN,1,fp)=1)m+;/*统计当前记录条数*/fclose(fp);if(fp=fopen(data,wb)=NULL) printf(can not openn);return;for(i=0;im;i+) fwrite(&stui ,LEN,1,fp);/*向指定的磁盘文件写入信息*/printf(please input(y/n):);scanf(%s,ch);if(strcmp(ch,Y)=0|strcmp(ch,y)=0)printf(please input per centum:);printf(npeacetime grade:);scanf(%f,&Fpeac);printf(nmidterm grade:);scanf(%f,&Fmid);printf(nterminal grade:);scanf(%f,&Fter);while(strcmp(ch,Y)=0|strcmp(ch,y)=0)printf(number:);scanf(%lf,&stum.num);/*学生学号*/for(i=0;im;i+)if(stui.num=stum.num)printf(the number is existing,press any to continue!);getch();fclose(fp);return;printf(name:);scanf(%s,);/*学生姓名*/printf(peacetime grade:);scanf(%lf,&stum.peac);/*平时成绩成绩*/printf(midterm grade:);scanf(%lf,&stum.mid);/*期中成绩成绩*/printf(terminal grade:);scanf(%lf,&stum.ter);/*期末成绩成绩*/stum.sum=stum.peac*Fpeac+stum.mid*Fmid+stum.ter*Fter;/*计算出总成绩*/if(fwrite(&stum,LEN,1,fp)!=1)printf(can not save!); getch(); else printf(%s saved!n,);m+;printf(continue?(y/n):);/*询问是否继续*/scanf(%s,ch);fclose(fp);printf(OK!n);void show()FILE *fp;int i,m=0;fp=fopen(data,ab+);while(!feof(fp)if(fread(&stum ,LEN,1,fp)=1) m+; fclose(fp);printf(number name peacetime midterm terminal sumtn);for(i=0;im;i+) printf(FORMAT,DATA);/*将信息按指定格式打印*/void menu()/*自定义函数实现菜单功能*/system(cls);printf(nnnnn); printf(tt|-ANHUI NORMAL UNIVERSITY-|n);printf(tt|-STUDENT GRADES MANAGEMENT SYSTEM-|n); printf(tt|-Bao ShiXi-|n);printf(tt|t 0. exit |n);printf(tt|t 1. input record |n);printf(tt|t 2. search record |n);printf(tt|t 3. delete record |n);printf(tt|t 4. modify record |n);printf(tt|t 5. insert record |n);printf(tt|t 6. order |n);printf(tt|t 7. number |n);printf(tt|-|nn);printf(tttchoose(0-7):);void order()/*自定义排序函数*/ FILE *fp;struct student t;int i=0,j=0,m=0;if(fp=fopen(data,ab+)=NULL) printf(can not open!n);return;while(!feof(fp) if(fread(&stum ,LEN,1,fp)=1) m+;fclose(fp);if(m=0) printf(no record!n);return;for(i=0;im-1;i+)for(j=i+1;jm;j+)/*双重循环实现成绩比较并交换*/if(stui.sumstuj.sum) t=stui;stui=stuj;stuj=t;if(fp=fopen(data,wb)=NULL) printf(can not openn);return;for(i=0;im;i+)/*将重新排好序的内容重新写入指定的磁盘文件中*/if(fwrite(&stui ,LEN,1,fp)!=1) printf(%s can not save!n); getch();fclose(fp);while(!feof(fp) if(fread(&stum,LEN,1,fp)=1) m+;fclose(fp);if(m=0) printf(No record!n);else system(cls);show();/*调用show函数,显示原有信息*/printf(save successfullyn);void del()/*自定义删除函数*/FILE *fp;int i,j,m=0; double snum; char ch2;if(fp=fopen(data,ab+)=NULL) printf(can not openn);return;while(!feof(fp) if(fread(&stum,LEN,1,fp)=1) m+;fclose(fp);if(m=0) printf(No record!n);else system(cls);show();/*调用show函数,显示原有信息*/printf(please input the number:);scanf(%lf,&snum);for(i=0;im;i+)if(snum=stui.num)break; if(i=m)printf(can not find);getchar();return;printf(find the student,delete?(y/n);scanf(%s,ch);if(strcmp(ch,Y)=0|strcmp(ch,y)=0)/*判断是否要进行删除*/for(j=i;jm;j+)stuj=stuj+1;/*将后一个记录移到前一个记录的位置*/m-;/*记录的总个数减1*/printf(delete successfully!n);if(fp=fopen(data,wb)=NULL) printf(can not openn);return;for(j=0;jm;j+)if(fwrite(&stuj ,LEN,1,fp)!=1) printf(can not save!n);getch();fclose(fp);void search()/*自定义查找函数*/ FILE *fp;int i,m=0; double snum;char ch2;if(fp=fopen(data,ab+)=NULL) printf(can not openn);return;while(!feof(fp) if(fread(&stum,LEN,1,fp)=1) m+;fclose(fp);if(m=0)printf(no record!n);return;printf(please input the number:);scanf(%lf,&snum);for(i=0;im;i+)if(snum=stui.num)/*查找输入的学号是否在记录中*/ printf(find the student,show?(y/n);scanf(%s,ch);if(strcmp(ch,Y)=0|strcmp(ch,y)=0) printf(number name peacetime midterm terminal sumtn);printf(FORMAT,DATA);/*将查找出的结果按指定格式输出*/break;elsereturn; if(i=m) printf(can not find the student!n);/*未找到要查找的信息*/void modify()/*自定义修改函数*/ char ch2;FILE *fp;int i,j,m=0; double snum;if(fp=fopen(data,ab+)=NULL) printf(can not openn);return;while(!feof(fp) if(fread(&stum,LEN,1,fp)=1) m+;if(m=0)printf(no record!n);fclose(fp);return;while(!feof(fp) if(fread(&stum ,LEN,1,fp)=1)m+;/*统计当前记录条数*/fclose(fp);if(m=0) printf(No record!n);else system(cls);show();/*调用show函数,显示原有信息*/printf(please input the number of the student which do you want to modify!n);scanf(%lf,&snum);for(i=0;im;i+)if(snum=stui.num)/*检索记录中是否有要修改的信息*/break;if(im)printf(find the student!you can modify!n);printf(please input per centum:);printf(npeacetime grade:);scanf(%f,&Fpeac);printf(nmidterm grade:);scanf(%f,&Fmid);printf(nterminal grade:);scanf(%f,&Fter);printf(name:n);scanf(%s,);/*输入名字*/printf(npeacetime grade:);scanf(%lf,&stui.peac);/*输入平时成绩成绩*/printf(nmidterm grade:);scanf(%lf,&stui.mid);/*输入期中成绩成绩*/printf(nterminal grade:);scanf(%lf,&stui.ter);/*输入期末成绩成绩*/stui.sum=stui.peac*Fpeac+stui.mid*Fmid+stui.ter*Fter;else printf(can not find!);getchar();return;if(fp=fopen(data,wb)=NULL)printf(can not openn);return;for(j=0;jm;j+)/*将新修改的信息写入指定的磁盘文件中*/if(fwrite(&stuj ,LEN,1,fp)!=1) printf(can not save!); getch(); fclose(fp);void insert()/*自定义插入函数*/ FILE *fp;int i,j,k,m=0; double snum;if(fp=fopen(data,ab+)=NULL) printf(can not openn);return;while(!feof(fp) if(fread(&stum,LEN,1,fp)=1)m+;if(m=0) printf(no record!n);fclose(fp);return;printf(please input position where do you want to insert!(input the number)n);scanf(%lf,&snum);/*输入要插入的位置*/for(i=0;ii;j-)stuj+1=stuj;/*从最后一条记录开始均向后移一位*/printf(now please input the new information.n);printf(number:);scanf(%lf,&stui+1.num);for(k=0;km;k+)if(stuk.num=stui+1.num&k!=i+1)printf(the number is existing,press any to continue!);getch();fclose(fp);return;printf(please input per centum:);printf(npeacetime grade:);scanf(%f,&Fpeac);printf(nmidterm grade:);scanf(%f,&Fmid);printf(nterminal grade:);scanf(%f,&Fter);printf(name:n);scanf(%s,stui+1.name);printf(npeacetime grade:);scanf(%lf,&stui+1.peac);printf(nmidterm grade:);scanf(%lf,&stui+1.mid);printf(nterminal grade:);scanf(%lf,&stui+1.ter);stui+1.sum=stui+1.peac*Fpeac+stui+1.mid*Fmid+stui+1.ter*Fter;if(fp=fopen(data,wb)=NULL) printf(can not openn);return;for(k=0;k=m;k+)if(fwrite(&stuk ,LEN,1,fp)!=1)/*将修改后的记录写入磁盘文件中*/printf(can not save!); getch(); fclose(fp);void total() FILE *fp;int m=0;if(fp=fopen(data,ab+)=NULL) printf(can not openn);return;while(!feof(fp) if(fread(&stum,LEN,1,fp)=1) m+;/*统计记录个数即学生个数*/if(m=0)printf(no record!n);fclose(fp)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年物联网初级工程师面试题预测与解析实战技巧
- 2025年专业进阶软件开发工程师考试强化训练题
- 【教案版】小学四班级上册 乒乓球2
- 2025年注册电气工程师考试模拟题及复习建议
- 2025年汽车销售与服务顾问招聘考试模拟题集及答题技巧
- 2025年小学特岗教师招聘考试复习手册及预测题
- 2025年IT企业招聘笔试技术预测试题及答案
- 2025年汽车销售顾问招聘笔试模拟题及答题技巧解析
- 2025年特岗教师招聘笔试初中语文模拟试题详解
- 2025年建筑工程师初级职称面试指南与模拟题解析
- 柴油罐及管道防腐施工方案
- JJG 703-2003光电测距仪行业标准
- 淋巴漏的护理诊断及护理措施
- 部编小学语文单元作业设计五年级上册第二单元
- 企业社会责任报告模板
- 25题后期-剪辑-特效岗位常见面试问题含HR问题考察点及参考回答
- 银行的表内、表外、表表外业务
- 《寂静的春天》课件
- 石油化工行业历史沿革与发展展望
- 危险化学品(储存、生产、使用)企业安全风险辨识分级管控清单
- 【食品零食】桂格燕麦食品抖音账号运营方案
评论
0/150
提交评论