C课程设计_学生成绩管理系统(完整版)_第1页
C课程设计_学生成绩管理系统(完整版)_第2页
C课程设计_学生成绩管理系统(完整版)_第3页
C课程设计_学生成绩管理系统(完整版)_第4页
C课程设计_学生成绩管理系统(完整版)_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

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

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

4、12班12数学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、

5、void Quit(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个记录中按升序排序

6、的位置 入口参数: float 输出参数: 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

7、 from 从第 from 个记录开始查找输出参数: int 找到的记录序号1 2、 void Query(void); 查询学生信息函数 函数功能:将一个文件的内容追加到另一个文件的尾部 入口参数: void 输出参数: void1 3、 void Delete(void);删除记录函数函数功能:删除内存数组中指定的记录 入口参数: void 输出参数: void14、 void copy(stu *src, stu *dest);记录复制函数功能:将 src 指向的一条记录复制给 dest 指向的记录 入口参数: stu *src 原记录, stu *dest 目的记录 输出参数: voi

8、d1 5、 void Modify(void);修改指定学生信息函数函数功能:找到指定记录并修改 入口参数: void 输出参数: void1 6、 void Sort(void);学生信息排序函数函数功能:对记录进行排序 入口参数: void 输出参数: void二、参考程序代码 (C 语言)#include#include#include#define STUDENT 3 / 可存学生信息数 - 数组初始大小 #define INCREASE 20/数组每次增加的大小#define COURSE 4/记录学生课程总数void MenuHandle(void);int MenuSelect(

9、);void New();void Quit();void ShowTable();void Display();void Add(void);int Index();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;/排名cha

10、r number12;/学号char name16;/姓名int scoreCOURSE;/各科成绩float sum;/总分float average;/平均分; typedef struct Student stu;/简化结构体 Student 名称int num=0; stu* record=NULL; char flag=0;/ int arraysize;/记录的学生数/记录学生信息的数组/信息保存标志其中 0 为未保存 ,1 为已保存/数组大小char* subject=Politics,Maths,English,Computer;/结构体类型的课程数组int main() re

11、cord=(stu*)malloc(sizeof(stu)*STUDENT);if(record=NULL)printf(Memory Fail!n);exit(-1);arraysize=INCREASE; printf(n);|n);|n);|n);|n);printf(t*n); printf(t|欢迎使用printf(t|学生成绩管理程序printf(t|可以对学生信息进行管理printf(t|请按提示操作printf(t*n);MenuHandle();void MenuHandle(void)for( ; ; )switch(MenuSelect() case 0:Add(); b

12、reak;case 1:Modify(); break;case 2:Display(); break;case 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

13、 The Following Number |n);printf(t|printf(t*printf(t|0.Addprintf(t|1.Modifyprintf(t|2.Displayprintf(t|3.Queryprintf(t|4.Deleteprintf(t|5.Sortprintf(t|6.Saveprintf(t|7.Loadprintf(t|8.Newprintf(t|9.Quit*|n);*n); 增加学生信息|n);修改学生信息|n);显示学生信息|n);查询学生信息|n);删除学生信息|n);学生信息排序|n);保存学生信息|n);读取学生信息|n);新建记录信息|n);

14、退出管理系统|n);printf(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(

15、t 是否保存原有记录 ?(Y/n):);gets(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;jCOU

16、RSE;j+) printf(t%s,subjectj);printf(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.na me);for(j=0;jCOURSE;j+)printf(t%d,recordi.scorej); printf(t%.lft%.lfn,recordi.sum,recordi.average);MenuH

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

18、in tf(t请输入 s 成绩:,subject);gets(str);mark=(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=O;总分数大于sum的人数for(i=0;inum;i+)if(recordi.

19、sumsum)count+;return count+1;int 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);pr

20、intf(nt有条信息已经存入文件n,num);printf(nt请继续操作。 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=O;elseif(flag=O)printf(nt 读取文件将会更改原来的记录 ,

21、); printf( 是否保存原来的记录 ?(Y/n):); gets(str);if(strO!=n & strO!=N)Save();num=O;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+=INCREAS

22、E; if(fread(&recordnum,sizeof(struct Student),1,fp)!=1) break;recordnum.index=Index(recordnum.sum);num+;fclose(fp);printf(现在共有4条记录。,num);return O;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,r

23、)=0)| (targetType=2 & atoi(target)=recordi.index) 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(str

24、0=1)printf(nt 输入查询的学号 :);gets(s);type=0;if(str0=2)printf(t 输入查询的姓名 :);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,); for(j=0;jCOURSE;j+)printf(t%.lf,recordi.scorej); printf(t%.lft%.lf

25、t%dn,recordi.sum,recordi.average,recordi.index); i=Find(s,type,i+1);if(count=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. 按

26、学号删除 n); printf(t2.按姓名删除 n);printf(t3. 按名次删除 n);printf(t 请输入删除记录的方式 :);gets(str);if(strlen(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(

27、nt 没有符合查询条件的学生 !n);while(i!=-1)ShowTable(); printf(%st%s,recordi.number,); for(j=0;jCOURSE;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);

28、for(j=O;jtmpi)recordj.index-;i=Find(target,type,i+1); flag=O;void copy(stu *src, stu *dest)int j; strcpy(dest-number,src-number); strcpy(dest-name,src-name);for(j=O;jscorej=src-scorej;dest-sum=src-sum; dest-average=src-average;dest-index=src-index;void Modify(void)char str5;char target2O;int type,i,

29、j,tmpi;float sum,mark;int count=O;if(num=O)printf(nt 没有可供修改的记录 !); return;while(1)printf(nt修改记录的方式:n);prin tf(t1.按学号 n);printf(t2.按姓名 n);prin tf(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 请输入姓名 :);

30、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,); for(j=0;jCOURSE;j+)printf(t%.lf,recordi.scorej);printf(t%.lft%.lft%d,recordi.sum,recordi.average,record i.index);p

31、rintf(nt 确定要修改这个是学生的信息吗 ?(Y/n);gets(str);if(str0=y | str0=Y)tmpi=recordi.index;printf(nt 下面请重新输入该学生的信息 :n); printf(t 请输入学号 :); gets(recordi.number); printf(t请输入姓名 :);gets();for(j=0;jCOURSE;j+) printf(t 请输入学号 :);gets(recordi.number); printf(t 请输入姓名 :);gets(); sum=0;for(j=0;jCO

32、URSE;j+) prin tf(t请输入 s 成绩:,subjectj);gets(str); mark=(float)atof(str); recordi.scorej=mark;sum+=mark;recordi.sum=sum; recordi.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 t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论