学生成绩管理系统9398262.docx_第1页
学生成绩管理系统9398262.docx_第2页
学生成绩管理系统9398262.docx_第3页
学生成绩管理系统9398262.docx_第4页
学生成绩管理系统9398262.docx_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

目录一、系统开发的背景1二、系统分析与设计1(一)系统功能要求1(二)系统模块结构设计1三、系统的设计与实现1(一)录入学员信息:void input()1(二)显示学员信息 void display()1(三)查找学员信息void find()1(四)修改学员信息 void change()1(五)删除学员信息 void del()1(六)添加学员信息 void add( )1(七)读入学员信息 void read()1(八)保存学员信息 void save()1(九)排序:1四、系统测试1(一) 主函数输出:1(二) 测试录入学员信息:void input() 函数:1(三) 测试显示学员信息: void display() 函数:1(四) 测试查找学员信息:void find() 函数:1(五) 测试修改学员信息: void change() 函数:1(六) 测试删除学员信息: void del() 函数:1(七) 测试添加学员信息: void add( ) 函数:1(八) 测试读入学员信息: void read() 函数,同时输出显示:1五、总结1六、附件(代码、部分图表)1 29学生成绩管理系统一、系统开发的背景为了方便对学生成绩的管理以及方便对其进行查找,修改等操作,因此开发了学生成绩管理系统。.,因此.。二、系统分析与设计(一) 系统功能要求1、 学生基本信息(包括姓名、性别、学号、成绩等);2、 功能:输入、输出、插入、删除、查找、追加、读入、显示、保存、排序、分类合计。3、 输入:可以输入全班所有学生的信息 ;4、 输出:可以通过选择按名次,学号及不及格学生的信息输出;5、 查找:可以按学号,姓名查找;6、 修改:可以修改学号,姓名,性别,成绩;7、 删除:输入学号即可删除;8、 添加:每添加一个学员信息会出现是否继续添加,用户可以自己选择;9、 读入:选择读入时系统自动将学员信息读入;10、 保存:选择保存时系统自动保存学员信息;(二) 系统模块结构设计通过对系统功能的分析,学生综合测评系统功能如图1所示。 图1 学生成绩管理系统功能图通过上图的功能分析,把整个系统划分为10个模块:1、 录入学员信息,该模块主要实现:学生基本信息(学号、姓名、性别、成绩)的输入,借助函数void input()来实现;2、 显示学员信息,该模块主要实现:学生学号、姓名、性别、几门课程的成绩、总成绩的输出,借助函数void display()来实现;3、 查找学员信息,该模块主要实现:用户输入学生的学号或姓名可以查找出该学生的所有信息,查找成功就输出,否则就返回,借助函数void find()来实现;4、 修改学员信息,该模块主要实现:用户通过输入要修改的学生的学号进行修改该生的其他信息,修改完后,提示用户“是否继续修改”,只有输入N/n时退出,输入其他字符都是继续,借助函数void change()来实现;5、 删除学员信息,该模块主要实现:用户输入要删除的学生学号,如果找到就删除该生的所有信息,并提示用户删除成功,否则提示删除失败,借助函数void del()来实现;6、 添加学员信息,该模块主要实现:在原有的基础上添加学员信息,如果存储空间(结构体数组的长度)已满无法继续添加,同时屏蔽了添加选项,借助函数void add()来实现;7、 读入学员信息,该模块主要实现:从文件读入,避免了用户多次大量输入数据,借助函数void read()来实现;8、 保存学员信息,该模块主要实现:每次执行完修改信息即添加、删除、修改等都需要保存信息,每个修改函数最后都要调用保存函数,借助函数void save()来实现;9、 用学号排序,该模块主要实现:按学号先后顺序进行排序(冒泡法),n为要排序的学生数量,为形参,借助函数void sortx (int n)来实现;10、 用总成绩排序,该模块主要实现:按总成绩名次排序(冒泡法),n为要排序的学生数量,为形参, 借助函数void sort(int n)来实现;三、系统的设计与实现(一) 录入学员信息:void input() 分析:首先输入添加学生的数量,如果在max以内逐次输入学生的信息。流程图如图2所示。开始输入添加学生的数量nmax输入第%d个学生的信息NY图2:input()流程图该模块的具体代码如下所示:void input()/*输入函数*/int i,n,j;for(i=0;i+)printf(n请输入添加学生数量(在%d以内):,max-now);scanf(%d,&n);if(nmax)printf(n请确保添加的数量在%d以内t!,max);if(n=max)break;now=n;for(i=0;in;i+)printf(ntttt输入第%d个学生的信息n,i+1);printf(n输入学生的学号:);scanf(%d,&stui.num);getchar();printf(n输入学生的姓名:);gets();printf(n请输入学生的性别(M/W):);for(j=0;j+)stui.sex=getchar();if(stui.sex=M|stui.sex=W)break;else printf(nttt请确保输入性别的正确性(区分大小写)!);getchar();printf(n请输入学生成绩1:);scanf(%f,&stui.score1);printf(n请输入学生成绩2:);scanf(%f,&stui.score2);stui.sum=stui.score1+stui.score2;sort(n);save(); system(cls);(二) 显示学员信息 void display()分析:学生学号、姓名、性别、几门课程的成绩、总成绩的输出。流程图如图3所示:开始1. 按名次输出2. 按学号删除3. 按不及格学生信息输出图3:display()流程图该模块的具体代码如下所示:void display()/*整体输出函数*/int as,i;printf(nttt班级学生成绩表nnn);printf(ntttt请选择nnttt1.按名次输出nttt2.按学号输出nttt3.不及格的学生信息nttt);scanf(%d,&as);switch(as)case 1:sort(now);for(i=0;inow;i+)shuchu(i);break;case 2:sort(now);sortx(now);for(i=0;inow;i+)shuchu(i);break;case 3:no_pass();break;(三) 查找学员信息void find()分析:用户输入学生的学号或姓名可以查找出该学生的所有信息,查找成功就输出,否则就返回。流程图如( 附件)图4所示:该模块的具体代码如下所示:void find()/*查询函数*/int num,as,i;char name20;printf(nttt请选择nnn);printf(nttt1.按学号查找nttt2.按姓名查找nttt);scanf(%d,&as);switch(as)case 1:system(cls);printf(请输入要查找的学号:);doscanf(%d,&num);for(i=0;i=now)printf(ntt该生信息不存在!请重新输入学号:);while(i=now);break;case 2:system(cls);getchar();printf(请输入要查找的学生的姓名:);dogets(name);for(i=0;i=now)printf(nnttt该生信息不存在!请重新输入姓名);while(i=now);break;(四) 修改学员信息 void change()分析:用户通过输入要修改的学生的学号进行修改该生的其他信息,修改完后,提示用户“是否继续修改”,只有输入N/n时退出,输入其他字符都是继续。流程图如(附件)图5所示:该模块的具体代码如下所示:void change() /*修改函数*/int num,as,j,i,m;char a;printf(nttt请输入要修改的学生的学号:);scanf(%d,&num);for(i=0;inow;i+)if(stui.num=num)for(j=0;j=now)printf(nntttt学号输入有误!nn);(五) 删除学员信息 void del()分析:用户输入要删除的学生学号,如果找到就删除该生的所有信息,并提示用户删除成功,否则提示删除失败。流程图如(附件)图6所示:该模块的具体代码如下所示:void del()/*删除函数*/int num,i;printf(nttt输入要删除的学生学号:);scanf(%d,&num);for(i=0;i=now)printf(nnnttt学号输入有误!删除失败!nn);break;if(stui.num=num)if(i=now-1)now-=1;elsestui=stunow-1;now-=1;printf(nnttt删除成功!nn);sort(now);break;save();(六) 添加学员信息 void add( )分析:在原有的基础上添加学员信息,如果存储空间(结构体数组的长度)已满无法继续添加,同时屏蔽了添加选项。流程图如(附件)图7所示:该模块的具体代码如下所示:void add()/*添加函数*/char ch;int j;printf(ntttt还能添加%d个学生信息!nn,max-now);if(now=max)printf(nnntt存储空间已满无法继续添加!nn);break;while(ch!=n|ch!=N);(七) 读入学员信息 void read()分析:定义fp是一个指向FILE类型数据的指针变量。可以使fp指向某一文件的文件信息区(是一个结构体变量),通过该文件信息区中的信息就能访问该文件;“fp=fopen(“stu_infer”,”rb”)”,将fopen()函数的返回值赋给指针变量fp,fopen(文件名,使用文件方式);“fread(buffer,size,count,fp)”表示从文件中读一个数据块,其中:buffer:是一个地址;size:要读的字节数;count:要读多少个数据项(每个数据项长度为size);fp:FILE类型指针。 流程图如(附件)图8所示:该模块的具体代码如下所示:void read()/*从磁盘读入函数*/int i;FILE *fp ;/*fp为文件指针*/fp=fopen(stu_infer,rb);for(i=0;imax+1;i+)fread(&stui,sizeof (struct student),1,fp);fclose(fp);(八) 保存学员信息 void save() 分析:定义fp是一个指向FILE类型数据的指针变量。可以使fp指向某一文件的文件信息区(是一个结构体变量),通过该文件信息区中的信息就能访问该文件;fwrite(&stui,sizeof (struct student),1,fp)=1;“fwrite(buffer,size,count,fp)” 表示从文件中写一个数据块,其中:buffer:是一个地址;size:要写的字节数;count:要写多少个数据项(每个数据项长度为size);fp:FILE类型指针。 该模块的具体代码如下所示:void save()/*文件保存函数*/FILE *fp;/*fp为文件指针*/int i;if(fp=fopen(stu_infer,wb)=NULL)printf(nnttt文件打开失败!);return ;for(i=0;imax+1;i+)if(fwrite(&stui,sizeof (struct student),1,fp)!=1)printf(nnttt文件保存错误!);fclose(fp);(九) 排序:用学号排序(void sortx(int n)用总成绩排序(void sort(int n)流程图如(附件)图9所示:该模块的具体代码如下所示:void sort(int n)/*按成绩排序函数(n为排序个数)*/struct student temp;int i,j;for(j=0;jn-1;j+)for(i=0;in-j-1;i+)if(stui.sumstui+1.sum)temp=stui;stui=stui+1;stui+1=temp;for(i=0;inow;i+)stui.NO=i+1;void sortx(int n)/*按学号排序(n为排序个数)*/struct student temp;int i,j;for(j=0;jn-1;j+) for(i=0;istui+1.num)temp=stui;stui=stui+1;stui+1=temp;四、系统测试(一) 主函数输出:图10:printf()函数(二) 测试录入学员信息:void input() 函数:图11:input()函数(三) 测试显示学员信息: void display() 函数:图12:display()函数图13:display()函数图14:display()函数(四) 测试查找学员信息:void find() 函数:图15:find()函数图16:find()函数图17:find()函数(五) 测试修改学员信息: void change() 函数:图18:change()函数(六) 测试删除学员信息: void del() 函数:图19:del()函数图20:del()函数(七) 测试添加学员信息: void add( ) 函数:图21:add()函数(八) 测试读入学员信息: void read() 函数,同时输出显示:图22:read()函数五、总结系统完成了:输入、输出、删除、查找、追加、读入、显示、保存、排序、求总分。该系统不足处为:不能进行插入和分类合计等功能。我的收获:通过做该课程设计让我对结构体,数组,指针,文件有了更深层次的了解;学会了:引用循环可以使一个界面每执行完一次功能时重复出现;六、附件(代码、部分图表)程序代码:#include#include#include#include#define max 3void input();void display();void find();void change();void del();void read();void save();void add();void sort(int n);void sortx(int n);void shuchu(int n);void no_pass();int now=0;/*标记位*/struct studentint num;char name20;char sex;int NO;float score1;float score2;float sum;struct student stumax+1;void main()/*主函数*/int as;doprintf(ttt*n);printf(ttt* *);printf(nttt*t欢迎使用学生管理系统 *n);printf(ttt* *n);printf(ttt*);printf(nttt*t1.录入学员信息 *nttt*t2.显示学员信息 *nttt*t3.查找学员信息 *nttt*t4.修改学员信息 *nttt*t5.删除学员信息 *nttt*t6.添加学员信息 *nttt*t7.读入学员信息 *nttt*t8.保存学员信息 *nttt*t9.退出 *);printf(tttttt*);printf(nnntttt请选择);scanf(%d,&as);switch(as)case 1:system(cls);input();break;case 2:system(cls);display();break;case 3:system(cls);find();break;case 4:system(cls);change();break;case 5:system(cls);del();break;case 6:system(cls);add();break;case 7:system(cls);read();break;case 8:system(cls);save();break;case 9:system(cls);exit(0);while(1);void input()/*输入函数*/int i,n,j;for(i=0;i+)printf(n请输入添加学生数量(在%d以内):,max-now);scanf(%d,&n);if(nmax)printf(n请确保添加的数量在%d以内t!,max);if(n=max)break;now=n;for(i=0;in;i+)printf(ntttt输入第%d个学生的信息n,i+1);printf(n输入学生的学号:);scanf(%d,&stui.num);getchar();printf(n输入学生的姓名:);gets();printf(n请输入学生的性别(M/W):);for(j=0;j+)stui.sex=getchar();if(stui.sex=M|stui.sex=W)break;else printf(nttt请确保输入性别的正确性(区分大小写)!);getchar();printf(n请输入学生成绩1:);scanf(%f,&stui.score1);printf(n请输入学生成绩2:);scanf(%f,&stui.score2);stui.sum=stui.score1+stui.score2;sort(n);save(); system(cls);void display()/*整体输出函数*/int as,i;printf(nttt班级学生成绩表nnn);printf(ntttt请选择nnttt1.按名次输出nttt2.按学号输出nttt3.不及格的学生信息nttt);scanf(%d,&as);switch(as)case 1:sort(now);for(i=0;inow;i+)shuchu(i);break;case 2:sort(now);sortx(now);for(i=0;inow;i+)shuchu(i);break;case 3:no_pass();break;void find()/*查询函数*/int num,as,i;char name20;printf(nttt请选择nnn);printf(nttt1.按学号查找nttt2.按姓名查找nttt);scanf(%d,&as);switch(as)case 1:system(cls);printf(请输入要查找的学号:);doscanf(%d,&num);for(i=0;i=now)printf(ntt该生信息不存在!请重新输入学号:);while(i=now);break;case 2:system(cls);getchar();printf(请输入要查找的学生的姓名:);dogets(name);for(i=0;i=now)printf(nnttt该生信息不存在!请重新输入姓名);while(i=now);break;void change() /*修改函数*/int num,as,j,i,m;char a;printf(nttt请输入要修改的学生的学号:);scanf(%d,&num);for(i=0;inow;i+)if(stui.num=num)for(j=0;j=now)printf(nntttt学号输入有误!nn);void del()/*删除函数*/int num,i;printf(nttt输入要删除的学生学号:);scanf(%d,&num);for(i=0;i=now)printf(nnnttt学号输入有误!删除失败!nn);break;if(stui.num=num)if(i=now-1)now-=1;elsestui=stunow-1;now-=1;printf(nnttt删除成功!nn);sort(now);break;save();void add()/*添加函数*/char ch;int j;printf(ntttt还能添加%d个学生信息!nn,max-now);if(now=max)printf(nnntt存储空间已满无法继续添加!nn);break;printf(nttt是否继续添加?(Y/N);getchar();ch=getchar();while(ch!=n|ch!=N);void save()/*文件保存函数*/FILE *fp;/*fp为文件指针*/int i;if(fp=fopen(stu_infer,wb)=NULL)printf(nnttt文件打开失败!);return ;for(i=0;imax+1;i+)if(fwrite(&stui,sizeof (struct student),1,fp)!=1)printf(nnttt文件保存错误!);fclose(fp);void read()/*从磁盘读入函数*/int i;FILE *fp ;/*fp为文件指针*/fp=fopen(stu_infer,rb);for(i=0;imax+1;i+)fread(&stui,sizeof (struct student),1,fp);fclose(fp);void

温馨提示

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

评论

0/150

提交评论