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

上传人:飞****2 文档编号:78767012 上传时间:2023-03-19 格式:DOC 页数:21 大小:222KB
返回 下载 相关 举报
C课程设计·学生成绩管理系统.doc_第1页
第1页 / 共21页
C课程设计·学生成绩管理系统.doc_第2页
第2页 / 共21页
点击查看更多>>
资源描述

《C课程设计·学生成绩管理系统.doc》由会员分享,可在线阅读,更多相关《C课程设计·学生成绩管理系统.doc(21页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、 成绩:江西理工大学理学院C语言课程设计实验学生成绩管理应用程序 姓名: 学号: 班级: 实 验 任 务 书计划学时: 2周 实验设备:计算机实验目的:在掌握C语言基础知识的基础上,熟练掌握选择结构、循环结构的应用,熟悉结构体、文件等相关知识并能够运用这些方法实现特定功能,会开发有一定使用价值的应用程序。实验要求:在规定的时间内,制作出具有简单界面、能够实现基本功能的学生成绩管理应用程序。写出课程设计报告并附源程序主要部分, 源程序的全部代码以班级为单位刻盘交指导教师。实验内容:1、进行人机界面设计,界面具有提示信息,可以选择、查询每门课程的平均成绩及最高分最低分、查询每个学生的各科成绩及总成

2、绩、查询所有学生的平均总成绩、插入一个学生并录入信息及其各科成绩、修改任一个学生的任一门课程成绩、删除一个学生及其成绩、退出程序。2、将所有学生信息及成绩存入以你的学号命名的数据文件内,在所有查询、修改操作前打开该文件,选择退出程序则关闭该文件;3、所有的查询功能、修改功能、插入功能都用子程序(函数)来实现。4、分析总结。实现步骤: 1、主函数设计; 2、查询模块设计;3、插入模块设计; 4、修改模块设计;实验结果提交:1.结果提交时间: 下学期第1周周二前提交课程设计报告2.课程设计报告的内容:l 源代码(要求有代码注释)以及源文件说明l 可执行程序l 软件文档 分析部分:此部分用于定义你的

3、程序功能或者说是设计目标。主要包括:问题背景、运行环境、问题分析,确定程序功能。 设计部分:内容包括程序的总体结构、函数间调用关系、数据的组织方式、关键性问题的解决方法、程序流程图等等。 编码部分:给出关键问题的源代码,代码中要有注释。 测试部分:此部分用于说明你是如何证明程序确实实现了预期功能的。描述相应测试过程。 使用文档:给出程序的使用说明书。要注明运行环境(操作系统,程序运行所需的其他必要条件)。l 课程设计报告将每天的设计内容,观察分析结果,疑难问题,以及收获体会写入报告中l 时间安排周一周二周三周四周五18周上午(1-4)下午(5-8)12信息12班12数学12班12信息12班12

4、数学12班12信息12班19周上午(1-4)下午(5-8)12信息12班12数学12班12信息12班12数学12班12数学12班附注:数学班19周周四的56节课调整到周二晚上的910节 附:参考程序代码一、自定义函数说明1、 void MenuHandle(void); 菜单处理函数函数功能:对菜单进行处理入口参数:void输出参数:void2、 int MenuSelect(void);菜单选择函数函数功能:对菜单进行选择入口参数:void输出参数:void3、 void New(void);新建学生记录函数函数功能:重新建立输入信息记录入口参数:void输出参数:void4、void Qu

5、it(void);退出系统函数函数功能:结束程序运行入口参数:void输出参数:void5、void ShowTable(void);打印表头函数函数功能:打印表头入口参数:void输出参数:void6、void Display(void);显示所有学生信息函数函数功能:显示内存中的学生信息入口参数:void输出参数:void7、void Add(void); 增加学生信息函数函数功能:增加记录入口参数:void输出参数:void8、int Index(float sum);输出在记录中安升序排序的位置函数功能:找出总分为sum在0至num-1个记录中按升序排序的位置入口参数:float输出参

6、数:int9、int Save(void);文件存储操作函数函数功能:将记录存入指定文件入口参数:void输出参数:失败0,成功110、int Load(void);文件读取操作函数函数功能:将指定文件中的记录读入内存入口参数:void输出参数:失败0,成功111、int Find(char* target,int targetType,int from);查找记录函数 函数功能:查找指定记录入口参数:char* target 查找记录的某一项int targetType 查找方式,0 学号,1 姓名,2 名次int from 从第from个记录开始查找输出参数:int 找到的记录序号12、v

7、oid Query(void);查询学生信息函数 函数功能:将一个文件的内容追加到另一个文件的尾部入口参数:void输出参数:void13、void Delete(void);删除记录函数函数功能:删除内存数组中指定的记录入口参数:void输出参数:void14、void copy(stu *src, stu *dest);记录复制 函数功能:将src指向的一条记录复制给dest指向的记录入口参数:stu *src 原记录,stu *dest 目的记录输出参数:void15、void Modify(void);修改指定学生信息函数函数功能:找到指定记录并修改入口参数:void输出参数:void

8、16、void Sort(void);学生信息排序函数函数功能:对记录进行排序入口参数:void输出参数:void二、参考程序代码(C语言)#include#include#include#define STUDENT 3 /可存学生信息数-数组初始大小#define INCREASE 20 /数组每次增加的大小#define COURSE 4 /记录学生课程总数void MenuHandle(void);int MenuSelect();void New();void Quit();void ShowTable();void Display();void Add(void);int Inde

9、x();int Save();int Load(void);int Find(char* target,int targetType,int from);void Query();void Delete();void copy(struct student *src,struct student *dest);void Modify(void);void Sort(void);struct Studentint index; /排名char number12; /学号 char name16; /姓名 int scoreCOURSE; /各科成绩 float sum; /总分 float av

10、erage; /平均分;typedef struct Student stu; /简化结构体Student名称 int num=0; /记录的学生数stu* record=NULL; /记录学生信息的数组char flag=0; /信息保存标志 /其中0为未保存,1为已保存int arraysize; /数组大小char* subject=Politics,Maths, English,Computer; /结构体类型的课程数组 int main()record=(stu*)malloc(sizeof(stu)*STUDENT); if(record=NULL) printf(Memory F

11、ail!n);exit(-1);arraysize=INCREASE;printf(n);printf(t*n);printf(t| 欢迎使用 |n);printf(t| 学生成绩管理程序 |n);printf(t| 可以对学生信息进行管理 |n);printf(t| 请按提示操作 |n);printf(t*n);MenuHandle();void MenuHandle(void)for( ; ; )switch(MenuSelect() case 0: Add(); break; case 1: Modify(); break; case 2: Display(); break; case

12、3: Query(); break; case 4: Delete(); break; case 5: Sort(); break; case 6: Save(); break; case 7: Load(); break; case 8: New(); break; case 9: Quit(); int MenuSelect()char s2;int cn=0;printf(t|-|n);printf(t| Please Select The Functions |n);printf(t| Though The Following Number |n);printf(t|-|n); pri

13、ntf(t*n);printf(t| 0.Add 增加学生信息 |n);printf(t| 1.Modify 修改学生信息 |n);printf(t| 2.Display 显示学生信息 |n);printf(t| 3.Query 查询学生信息 |n);printf(t| 4.Delete 删除学生信息 |n);printf(t| 5.Sort 学生信息排序 |n);printf(t| 6.Save 保存学生信息 |n);printf(t| 7.Load 读取学生信息 |n);printf(t| 8.New 新建记录信息 |n);printf(t| 9.Quit 退出管理系统 |n); prin

14、tf(t*n);printf(t数字对应功能请选择(0-9)的功能:); for( ; ; )gets(s); cn=atoi(s);/处理键入的非数字键,过滤出数字0 if(cn=0 & (strcmp(s,0)!=0)cn=11; if(cn9) printf(n输入错误重新选择(0-9):);elsebreak; return cn;void New(void) char str2;if(num!=0)if(flag=0)printf(t管理系统文件中已经存在学生记录!n);printf(t请按提示选择处理已存记录的方法!n);printf(t是否保存原有记录?(Y/n):);gets(

15、str);if(str0!=n & str0!=N)Save();printf(n);num=0;Add();void Quit(char flag,struct student *record)char str2;if(flag=0)printf(nt是否保存原来的记录?(Y/n):);gets(str);if(str0!=n & str0!=N)Save();printf(n);free(record);exit(0);void ShowTable()int j;printf(nt学号t姓名t性别);for(j=0;jCOURSE;j+)printf(t%s,subjectj); prin

16、tf(t总分t平均分t名次n);void Display(int num)int i,j;if(num=0)printf(nt没有可供选择的记录!n);ShowTable();for(i=0;inum;i+)printf(%dt%dt%s,recordi.index,recordi.number,recordi.name);for(j=0;jCOURSE;j+)printf(t%d,recordi.scorej);printf(t%.lft%.lfn,recordi.sum,recordi.average);MenuHandle();void Add(void)char str2;int j;

17、float mark,sum;if(num=0)printf(nt原来没有记录现在建立新表n);elseprintf(nt在当前表末端添加新的纪录n);while(1)printf(nt你要添加一组新信息确定吗?(Y/n):);gets(str);if(str0=n | str0=N)break; printf(t请输入学号:); gets(recordnum.number); printf(t请输入姓名:); gets(recordnum.name);sum=0; for(j=0;jCOURSE;j+)printf(t请输入%s成绩:,subjectj); gets(str); mark=(

18、float)atof(str); recordnum.scorej=mark; sum+=mark; recordnum.sum=sum; recordnum.average=sum/COURSE; recordnum.index=Index(sum); num+; printf(nt现在一共有%d条记录n,num); flag=0; /未保存记录标记MenuHandle();int Index(float sum)int i;int count=0;/总分数大于sum的人数for(i=0;inum;i+)if(recordi.sumsum)count+;return count+1;int

19、Save(int num)FILE *fp;char fname30;if(num=0)printf(nt没有记录可存!n);return -1;printf(nt输入要存入的文件名(Student):);gets(fname);printf(n);if(fp=fopen(fname,wb)=NULL);printf(nt不能存入文件!n);return -1;printf(nt存入文件。n);fwrite(record,sizeof(struct Student)*num,1,fp);fclose(fp);printf(nt有%d条信息已经存入文件n,num);printf(nt请继续操作。

20、n);flag=1; /更新记录已保存的标记return 0;int Load(void)FILE *fp;char fname30;char str2;if(num!=0 & flag=1)printf(nt请选择是要覆盖现有的记录(Y)还是要);printf(将读取的记录添加到现有的记录之后(n)?n);printf(nt直接回车则覆盖现有的记录n);gets(str);if(str0=n | str0=N)flag=0;elseif(flag=0)printf(nt读取文件将会更改原来的记录,);printf(是否保存原来的记录?(Y/n):);gets(str);if(str0!=n

21、& str0!=N)Save();num=0;printf(nt请输入要的取得文件名(student):);gets(fname);printf(nt取文件。n);while(!feof(fp)if(num = arraysize)record=realloc(record,(arraysize+INCREASE)*sizeof(struct Student);if(record=NULL)printf(Memory Fail!);exit(-1);arraysize+=INCREASE;if(fread(&recordnum,sizeof(struct Student),1,fp)!=1)b

22、reak;recordnum.index=Index(recordnum.sum);num+;fclose(fp);printf(现在共有%d条记录。,num);return 0;int Find(char* target,int targetType,int from)int i;for(i=from;inum;i+)if(targetType=0 & strcmp(target,recordi.number)=0)| (targetType=1 & strcmp(target,recordi.name)=0)| (targetType=2 & atoi(target)=recordi.in

23、dex) return i;return -1;void Query(void)char str2,s20;int type,count,i,j;if(num=0)printf(nt没有记录可供查询!n);while(1)printf(nt查询方式:n);printf(t1.学号n);printf(t2.姓名n);printf(t3.名次n);printf(nt请输入查询方式(回车结束):);gets(str);if(strlen(str)=0)break;if(str0=1)printf(nt输入查询的学号:);gets(s);type=0;if(str0=2)printf(t输入查询的姓名

24、:);gets(s);type=1;elseprintf(t输入查询的名次:);gets(s);type=2;i=Find(s,type,0);if(i=1)ShowTable();count=0;while(i!=-1);count+;printf(%s%t%s,recordi.number,recordi.name);for(j=0;jCOURSE;j+)printf(t%.lf,recordi.scorej);printf(t%.lft%.lft%dn,recordi.sum,recordi.average,recordi.index);i=Find(s,type,i+1);if(cou

25、nt=0)printf(nt没有符合查询条件的学生!n);elseprintf(nt一共找到了%d名学生的信息n,count);MenuHandle();void Delete(int num) char str5;char target20;int type,i,j;int tmpi;if(num=0)printf(nt没有可供删除的记录!);return;while(1)printf(nt删除记录的方式:n);printf(nt1.按学号删除n);printf(t2.按姓名删除n);printf(t3.按名次删除n);printf(t请输入删除记录的方式:);gets(str);if(st

26、rlen(str)=0)break;if(str0=1)printf(nt请输入欲查询学生的学号:);gets(target);type=0;if(str0=2)printf(nt请输入欲查询学生的姓名:);gets(target);type=1;elseprintf(nt请输入欲查询学生的名次:);gets(target);type=2;i=Find(target,type,0);if(i=-1)printf(nt没有符合查询条件的学生!n);while(i!=-1)ShowTable();printf(%st%s,recordi.number,recordi.name);for(j=0;j

27、COURSE;j+)printf(t%.lft%.lft%dn,recordi.sum, recordi.average,recordi.index);printf(nt确定要删除这个学生的信息吗?(Y/n):);gets(str);if(str0=y | str0=Y)num-;tmpi=recordi.index;for(j=i;jnum;j+)copy(&recordj+1,&recordj);for(j=0;jtmpi)recordj.index-;i=Find(target,type,i+1);flag=0;void copy(stu *src, stu *dest)int j;st

28、rcpy(dest-number,src-number); strcpy(dest-name,src-name);for(j=0;jscorej=src-scorej;dest-sum=src-sum; dest-average=src-average;dest-index=src-index;void Modify(void)char str5;char target20;int type,i,j,tmpi;float sum,mark;int count=0;if(num=0)printf(nt没有可供修改的记录!);return;while(1)printf(nt修改记录的方式:n);p

29、rintf(t1.按学号n);printf(t2.按姓名n);printf(t3.按名次n);printf(nt请输入如何找到修改记录的方式:);gets(str);if(strlen(str)=0)break;if(str0)=1)printf(nt请输入学号:);gets(target);type=0;else if(str0)=2)printf(nt请输入姓名:);gets(target);type=1;elseprintf(nt请输入名次:);gets(target);type=2;i=Find(target,type,0);if(i=-1)printf(nt没有符合查询条件的学生!n

30、);while(i!=-1)ShowTable();printf(%st%s,recordi.number,recordi.name);for(j=0;jCOURSE;j+)printf(t%.lf,recordi.scorej);printf(t%.lft%.lft%d,recordi.sum,recordi.average,recordi.index);printf(nt确定要修改这个是学生的信息吗?(Y/n);gets(str);if(str0=y | str0=Y)tmpi=recordi.index;printf(nt下面请重新输入该学生的信息:n);printf(t请输入学号:);

31、 gets(recordi.number); printf(t请输入姓名:); gets(recordi.name); for(j=0;jCOURSE;j+) printf(t请输入学号:); gets(recordi.number); printf(t请输入姓名:); gets(recordi.name); sum=0; for(j=0;jCOURSE;j+) printf(t请输入%s成绩:,subjectj); gets(str); mark=(float)atof(str); recordi.scorej=mark; sum+=mark; recordi.sum=sum; record

32、i.average=sum/COURSE; count=0; for(j=0;jtmpi &recordj.sumsum) recordj.index-; else if(recordj.index=tmpi & recordj.sumsum) count+; recordj.index=count+1;i=Find(target,type,i+1);flag=0;MenuHandle();void Sort(void)char str5;int i,j;struct Student tmps;if(num=0)printf(nt没有可供排序的记录!n);return;printf(nt请输入排序的方式:n);printf(t1.按学号升序排序n);printf(t2.按学号降序排序n);printf(t3.按名称升序排序n);printf(t4.按名称降序排序n);printf(t5.按名次

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com