学生成绩管理系统设计.doc_第1页
学生成绩管理系统设计.doc_第2页
学生成绩管理系统设计.doc_第3页
学生成绩管理系统设计.doc_第4页
学生成绩管理系统设计.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

学生信息管理系统设计1、设计目的设计该程序是为了实现更简洁的学生信息管理,满足管理学生学号、姓名和成绩等信息的要求。2、总体设计(程序设计组成框图、流程图)图1. 系统程序功能组成框图菜单选择学生信息管理系统保存至文件统计信息从文件读查找记录删除记录插入记录按成绩排序读入记录显示记录退出系统图2.系统总流程图存储记录退出程序统计信息查找记录N=0N=9N=8N=7N=6开始输入NN=1N=2N=3N=4N=5输入数据显示记录按成绩排序插入记录删除记录读入数据结束3、详细设计(模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等)1.程序结构该系统首先定义了包含:学生学号、姓名、成绩的结构体。然后定义了菜单函数供用户选择,紧接着定义了实现以上各功能的子函数。最后是主函数,主函数通过switch语句实现对各子函数的调用。2. 数据描述结构体类型定义说明说明:该程序定义了一个结构体,结构体变量名为student,结构体数组包含:(char型)学号、(char型)学生姓名以及(int型)学生成绩。该结构体如下:typedef struct /*定义结构体数组*/ char num10; /*学号*/ char name20; /*姓名*/ int score; /*成绩*/ Student; Student stu80; /*结构体数组变量*/3. 函数功能说明程序包含11个函数,除主函数外,还有:菜单函数int menu_select()、输入记录函数int input(student stud,int n)、显示所有记录函数void Display(student stud,int n)、排序函数void sort_by_score(student stud ,int n)、插入记录函数int Insert_a_record(student stud int n)、删除记录函数int Delete_a_record(student stud,int n)、查询函数void Query_a_record(student stud ,int n)、统计系统信息函数void Statistic(student stud,int n)、读取信息函数int AddfromText(stuent stud,int n)、存储信息函数void WritetoText(student stud,int n)等10个辅助系统完成各项功能函数。各函数详细说明如下:(1)主函数void main()算法描述:利用无限次循环for(;)和switch()实现对各函数的调用,系统根据输入的数字选项来调用相应的函数,实现相应的功能。(2)菜单函数int menu_select()函数功能:使用者通过输入数字选项实现对各功能的使用。当运行完任一功能,返回运行界面时,也要用到该函数。算法描述:使用do-while循环进行菜单选择,在循环内用getchar()读如所选择的序号,并且每次运行都运用system(cls)进行清屏。(3)输入记录函数int input(student stud,int n)函数功能:输入学生学号、姓名和成绩,输入后有一个提示语句是否继续输入。根据需要选择Y:继续输入记录;选择N:停止输入。算法描述:使用while循环和标准输入函数进行数据的输入。(4)显示所有记录函数void Display(student stud,int n) 函数功能:将输入的所有记录显示在运行界面,或将按成绩排序后的记录显示在界面。 算法描述:使用for循环进行循环输出,循环内运用if语句使十条数据可以实现暂停功能。其中还包含了一些辅助的使界面更简洁、清晰的语句(5)排序函数void sort_by_score(student stud ,int n) 函数功能:按学生成绩由高到底的顺序进行排序。算法描述:运用简单冒泡法排序,排序后通过显示记录功能将排序后的记录显示在界面。(6)插入记录函数 int Insert_a_record(student stud int n)函数功能:插入学生信息,包括学生学号、姓名和成绩,插入同时按成绩进行排序,并显示“添加成功”。算法描述:使用标准的输入函数输入一条学生记录,带到返回值中,并调用排序函数将该学生记录插入到排好序的记录中。(7)删除记录函数int Delete_a_record(student stud,int n)函数功能:按学号将需要删除的记录删除。首先输入学号,判断是否存在该学生记录:如果存在,回车后,显示“删除成功”;如果不存在,显示“无法找到该信息”。算法描述:运用标准输入函数输入需要删除记录的学生的学号,通过用while循环查找该学生信息,再运用if语句看是否存在该学生,无则返回“无法找到该信息”,有则运用for循环进行删除操作,即找到记录后用后面记录覆盖前面的记录。这种方法虽不是直接将记录删除,只是将后边的学生记录复制到要删除的学生记录,但实现的功能是相同的。执行完删除命令后返回“删除成功”。(8)查询函数void Query_a_record(student stud ,int n)函数功能:定义该函数为无返回值的的有参函数,根据输入的姓名查找并显示学生的学号、姓名和成绩。算法描述:运用标准的输入函数输入要查找的学生姓名,然后进行while循环,用if语句进行判断是否存在该学生信息,无则显示“无法找到该信息”,有则将该学生信息运用标准输出函数输出。(9)统计系统信息函数void Statistic(student stud,int n)函数功能:统计输入的学生信息,包括记录总数,成绩最低和最高学生的学号、姓名和成绩,以及所有学生的平均成绩和挂科学生(即成绩小于60分)的信息。算法描述:首先统计记录的条数输出总共的记录条数,然后对所有成绩求和,存入sum变量中,再求平均值并将平均值输出。用两条if语句找到最高分和最低分,并分别将他们的信息输出。最后运用for循环并定义flag作为标记挂科的变量,即当flag=1时,该学生挂科,输出他的信息。若没有学生挂科,则输出“无学生挂科”。(10)读取信息函数int AddfromText(stuent stud,int n)函数功能:定义该函数为一个有返回值的有参函数,根据输入的文件名进行读取记录。算法描述:运用标准输入函数输入文件名,通过if语句判断,如果有该文件则打开,并使用fscanf进行操作,无该文件则显示“打开失败”。(11)存储信息函数void WritetoText(student stud,int n)函数功能:该函数定义为无返回值的有参函数,可以把学生记录保存自己命名的文件中。算法描述:运用while循环进行存储,并使用fprintf,存储完成之后显示“操作成功”,可以使用读取功能读取此文件的内容。4、调试与测试:调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施(1) 设计难点设计难点包括:数组的调用、按成绩运用冒泡法进行排序、查找挂科学生信息和文件的使用以及怎样将记录存储到指定文件等。(2) 解决方法通过看书以及请教同学或者百度相关知识将难点一一解决。5、源程序清单执行结果#include /*引用库函数*/ #include #include #include typedef struct /*定义结构体数组*/ char num10; /*学号*/ char name20; /*姓名*/ int score; /*成绩*/ Student;Student stu80; /*结构体数组变量*/ int menu_select() /*菜单函数*/ char c; do system(color 1A); /*设置界面颜色*/system(cls); /*运行前清屏*/ printf(tt 欢迎使用学生信息管理系统 n);printf(tt *学生管理信息系统* n); /*菜单选择*/ printf(tt * 1. 请输入学生的信息 n); printf(tt * 2. 显示所有学生记录 n); printf(tt * 3. 所有学生成绩排序 n); printf(tt * 4. 添加学生管理信息 n); printf(tt * 5. 删除学生错误记录 n); printf(tt * 6. 查询学生成绩信息 n); printf(tt * 7. 统计系统学生信息 n); printf(tt * 8. 从正文中添加记录 n); printf(tt * 9. 将记录存储到文件中 n); printf(tt * 0. 退出学生管理信息系统 n); printf(tt 请选择使用选项:(0-9):); c=getchar(); /*读入选择*/ while(c9); return(c-0); /*返回选择*/ int Input(Student stud,int n) /*输入若干条记录*/ int i=0; char sign,x10; /*x10为清除多余的数据所用*/ while(sign!=n&sign!=N) /*判断*/ printf(ttt请输入学生证号:); /*交互输入*/ scanf(ttt%s,studn+i.num); printf(ttt请输入学生姓名:); scanf(ttt%s,studn+); printf(ttt请输入学生成绩:); scanf(ttt%d,&studn+i.score); gets(x); /*清除多余的输入*/ printf(ttt是否继续输入记录?(Y/N); scanf(ttt%c,&sign); /*输入判断*/ i+; return(n+i); void Display(Student stud,int n) /*显示所有记录*/ int i; printf(ttt_n); /*格式头*/ printf(ttt学生证号 姓名 成绩n); printf(ttt_n); for(i=1;in+1;i+) /*循环输入*/ printf(ttt%-16s%-15s%dn,studi-1.num,,studi-1.score); system(pause); void Sort_by_score(Student stud,int n) /*按成绩排序*/ int i,j,*p,*q,s; char t10; for(i=0;in-1;i+) /*冒泡法排序*/ for(j=0;jn-1-i;j+) if(studj.scorestudj+1.score) strcpy(t,studj+1.num); strcpy(studj+1.num,studj.num); strcpy(studj.num,t); strcpy(t,studj+1.name); strcpy(studj+1.name,); strcpy(,t); p=&studj+1.score; q=&studj.score; s=*p; *p=*q; *q=s; int Insert_a_record(Student stud,int n) /*插入一条记录*/ char x10; /*清除多余输入所用*/ printf(ttt学生证号:); /*交互式输入*/ scanf(ttt%s,studn.num); printf(ttt学生姓名:); scanf(ttt%s,); printf(ttt学生成绩:); scanf(ttt%d,&studn.score); gets(x); n+;Sort_by_score(stud,n);printf(ttt添加学生信息成功!n); /*返回成功信息*/ return(n); int Delete_a_record(Student stud,int n) /*按姓名查找,删除一条记录*/ char s20; int i=0,j; printf(ttt请输入该学生姓名:); /*交互式问寻*/ scanf(%s,s); while(strcmp(,s)!=0&in) i+; /*查找判断*/ if(i=n) printf(ttt无法找到该信息!n); /*返回失败信息*/ return(n); for(j=i;jn-1;j+) /*删除操作*/ strcpy(studj.num,studj+1.num); strcpy(,studj+1.name); studj.score=studj+1.score; printf(ttt删除学生记录成功!n); /*返回成功信息*/ return(n-1); void Query_a_record(Student stud,int n) /*查找并显示一个记录*/ char s20; int i=0; printf(ttt请输入要查询的学生学号:); /*交互式输入*/ scanf(ttt%s,s); while(strcmp(,s)!=0&in) i+; /*查找判断*/ if(i=n) printf(ttt无法找到该信息!n); /*输入失败信息*/ return; printf(ttt该学生学生姓名:%sn,studi.num); /*输出该学生信息*/ printf(ttt该学生的成绩:%dn,studi.score); void Statistic(Student stud,int n) /*新增功能,输出统计信息*/ int i,j=0,k=0,sum=0,flag,m=0; double aver; /*成绩平均值*/ for(i=0;istudi.score) j=i; if(studk.scorestudi.score) k=i; aver=1.0*sum/n; printf(ttt总计 %d 记录n,n); /*总共记录数*/ printf(ttt最高学生成绩:n); /*最高分*/ printf(ttt平均成绩: %5.2fn,aver); /*平均分*/ printf(ttt学生证号:%s 姓名:%s 成绩:%dn,studk.num,,studk.score); printf(ttt最低学生成绩:n); /*最低分*/ printf(ttt学生证号:%s 姓名:%s 成绩:%dn,studj.num,,studj.score); printf(nttt挂科学生信息:n);for(i=0;in;i+)flag=0;if(studi.score60)flag=1;+m;if(flag=1)printf(ttt学生证号:%s 姓名:%s 成绩:%dn,studi.num,,studi.score);if(m) printf(ttt挂科人数为:%dn,m);else printf(ttt无学生挂科!n); int AddfromText(Student stud,int n) /*从文件中读入数据*/ int i=0,num; FILE *fp; /*定义文件指针*/ char filename20; /*定义文件名*/ printf(ttt请输入文件名:); scanf(ttt%s,filename); /*输入文件名*/ if(fp=fopen(filename,rb)=NULL) /*打开文件*/ printf(ttt无法打开文件!n); /*打开失败信息*/ ; system(pause); return(n); fscanf(fp,%d,&num); /*读入总记录量*/ while(inum) /*循环读入数据*/ fscanf(fp,%s%s%d,studn+i.num,studn+,&studn+i.score); i+; n+=num; fclose(fp); /*关闭文件*/ printf(ttt成功!n); printf(ttt); system(pause); return(n); void WritetoText(Student stud,int n) /*将所有记录写入文件*/ int i=0; FILE *fp; /*定义文件指针*/ char filename20; /*定义文件名*/ printf(ttt从正文中添加记录:n); /*输入文件名*/ printf(ttt请输入文件名:); scanf(ttt%s,filename); if(fp=fopen(filename,w)=NULL) /*打开文件*/ printf(ttt无法打开文件!n); system(pause); return; fprintf(fp,%dn,n); /*循环写入数据*/ while(in) fprintf(fp,%-16s%-15s%dn,studi.num,,studi.score); i+; fclose(fp); /*关闭文件*/ printf(成功!n); /*返回成功信息*/ void main() /*主函数*/ int n=0; for(;) switch(menu_select() /*选择判断*/ case 1: printf(ttt请输入学生信息记录:n); /*输入若干条记录*/ n=Input(stu,n); break; case 2: printf(ttt显示所有学生信息记录:

温馨提示

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

评论

0/150

提交评论