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

下载本文档

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

文档简介

1、标准文案学生信息治理系统设计1、设计目的设计该程序是为了实现更简洁的学生信息治理,满足治理学生学号、姓名和成绩等信息的要求.2、总体设计程序设计组成框图、流程图图1.系统程序功能组成框图图2.系统总流程图开始输入数据N=1显示记录N=2按成绩排序N=3插入记录N=4删除记录N=5查找记录N=6统计信息N=7读入数据N=8存储记录N=9N=0退岀程序结束3、详细设计模块功能说明如函数功能、入口及出口参 数说明,函数调用关系描述等1. 程序结构该系统首先定义了包含: 学生学号、 姓名、 成绩的结构体. 然后定义了菜单函数供用户选择, 紧接着定义了实现以上各功能的子函数.最后是主函数,主函数通过 s

2、witch 语句实现对各 子函数的调用.2. 数据描述结构体类型定义说明定义结构体数组 */说明:该程序定义了一个结构体,结构体变量名为 student ,结构体数组包含: ( char 型) 学号、( char 型)学生姓名以及( int 型)学生成绩.该结构体如下: typedef struct /*学号 */ 姓名 */ 成绩 */Student;Student stu80; /*结构体数组变量 */char num10; /* char name20; /* int score; /*3. 函数功能说明程序包含 11 个函数,除主函数外,还有:菜单函数 int menu_select(

3、) 、输入记录函 数 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

4、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()函数功能: 使用者通过输入数字选项实现对各功能的使用. 当运行完任一功

5、能, 返 回运行界面时,也要用到该函数.算法描述: 使用 do-while 循环进行菜单项选择择 , 在循环内用 getchar() 读如所选择的 序号,并且每次运行都运用 system("cls") 进行清屏.(3)输入记录函数 int input ( student stud,int n ) 函数功能:输入学生学号、姓名和成绩,输入后有一个提示语句是否继续输 入.根据需要选择 Y:继续输入记录;选择N:停止输入.算法描述:使用 while 循环和标准输入函数进行数据的输入. (4)显示所有记录函数 void Display(student stud,int n)函数功能

6、: 将输入的所有记录显示在运行界面, 或将按成绩排序后的记录显示在界 面.算法描述:使用 for 循环进行循环输出,循环内运用 if 语句使十条数据可以实现 暂停功能.其中还包含了一些辅助的使界面更简洁、清楚的语句( 5)排序函数 void sort_by_score(student stud ,int n) 函数功能:按学生成绩由高到底的顺序进行排序. 算法描述:运用简单冒泡法排序,排序后通过显示记录功能将排序后的记录显示在界 面. 6插入记录函数 int Insert_a_recordstudent stud int n 函数功能:插入学生信息,包括学生学号、姓名和成绩,插入同时按成绩进行

7、排 序,并显示“添加成功 .算法描述:使用标准的输入函数输入一条学生记录,带到返回值中,并调用排序 函数将该学生记录插入到排好序的记录中. 7删除记录函数 int Delete_a_recordstudent stud,int n 函数功能:按学号将需要删除的记录删除.首先输入学号,判断是否存在该学生 记录:如果存在,回车后,显示“删除成功 ;如果不存在,显示“无法找到该信息 .算法描述:运用标准输入函数输入需要删除记录的学生的学号,通过用 while 循 环查找该学生信息,再运用 if 语句看是否存在该学生,无那么返回“无法找到该信息 , 有那么运用 for 循环进行删除操作,即找到记录后用

8、后面记录覆盖前面的记录.这种方 法虽不是直接将记录删除,只是将后边的学生记录复制到要删除的学生记录,但实现 的功能是相同的.执行完删除命令后返回“删除成功 . 8查询函数 void Query_a_recordstudent stud ,int n 函数功能:定义该函数为无返回值的的有参函数,根据输入的姓名查找并显示学 生的学号、姓名和成绩.算法描述:运用标准的输入函数输入要查找的学生姓名,然后进行while 循环,用 if 语句进行判断是否存在该学生信息,无那么显示“无法找到该信息,有那么将该学生信息运用标准输出函数输出. 9统计系统信息函数 void Statisticstudent st

9、ud,int n 函数功能:统计输入的学生信息,包括记录总数,成绩最低和最高学生的学号、 姓名和成绩,以及所有学生的平均成绩和挂科学生即成绩小于 60 分的信息.算法描述:首先统计记录的条数输出总共的记录条数,然后对所有成绩求和,存 入 sum 变量中,再求平均值并将平均值输出.用两条if 语句找到最高分和最低分,并分别将他们的信息输出.最后运用 for 循环并定义 flag 作为标记挂科的变量,即当 flag=1 时,该学生挂科,输出他的信息.假设没有学生挂科,那么输出“无学生挂科 . 10 读取信息函数 int AddfromTextstuent stud,int n函数功能:定义该函数为

10、一个有返回值的有参函数,根据输入的文件名进行读取 记录.算法描述:运用标准输入函数输入文件名,通过 if 语句判断,如果有该文件那么打 开,并使用 fscanf 进行操作,无该文件那么显示“翻开失败 .11 存储信息函数 void WritetoTextstudent stud,int n 函数功能:该函数定义为无返回值的有参函数,可以把学生记录保存自己命名的 文件中.算法描述: 运用 while 循环进行存储,并使用 fprintf ,存储完成之后显示“操作 成功,可以使用读取功能读取此文件的内容.4、调试与测试:调试方法,测试结果的分析与讨论,测试 过程中遇到的主要问题及采取的解决举措1

11、设计难点设计难点包括: 数组的调用、 按成绩运用冒泡法进行排序、 查找挂科学生信息和文件的 使用以及怎样将记录存储到指定文件等.2 解决方法通过看书以及请教同学或者百度相关知识将难点一一解决.5、源程序清单执行结果#include<stdio.h> /* 引用库函数 */#include<stdlib.h>#include<ctype.h>#include<string.h> typedef struct /* 定义结构体数组 */ char num10; /* 学号 */char name20; /* 姓名 */int score; /*成绩

12、*/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")

13、;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(&q

14、uot;tt请选择使用选项: (0-9):");c=getchar(); /*读入选择 */菜单项选择择 */while(c<'0'|c>'9'); return(c-'0'); /*返回选择 */ int Input(Student stud,int n) /* 输入假设干条记录 */ int i=0;char sign,x10; /*x10 为去除多余的数据所用 */ while(sign!='n'&&sign!='N') /* 判断 */ printf("ttt

15、请输入学生证号 :"); /* 交互输入 */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&qu

16、ot;,&sign); /* 输入判断 */ i+;return(n+i);void Display(Student stud,int n) /* 显示所有记录 */int i;格式头 */printf("tttn"); /*printf("ttt 学生证号 姓名 成绩 n"); printf("tttn");for(i=1;i<n+1;i+) /* 循环输入 */ printf("ttt%-16s%-15s%dn",studi-1.num,,studi-1.score)Jsy

17、stem("pause");void Sort_by_score(Student stud,int n) /*按成绩排序 */int i,j,*p,*q,s;char t10;for(i=0;i<n-1;i+) /* 冒泡法排序 */for(j=0;j<n-1-i;j+)if(studj.score<studj+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.nam

18、e,); 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&

19、quot;,);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 请输入该学生姓名 :"); /* 交互

20、式问寻 */ scanf("%s",s);while(strcmp(,s)!=0&&i<n) i+; /* 查找判断 */ if(i=n)printf("ttt 无法找到该信息 !n"); /* 返回失败信息 */ return(n);for(j=i;j<n-1;j+) /* 删除操作 */strcpy(studj.num,studj+1.num);strcpy(,studj+1.name); studj.score=studj+1.score;返回成功信息 */查找并显示一个记录 */

21、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&&i<n) i+; /*查找判断 */if(i=n)printf("ttt 无法找到该信息 !n"); /* 输入失败信息 */

22、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;i<n;i+) /* 循环输入判断 */ sum+=studi.score;if(studj.score>studi.score) j=i; if(studk.sc

23、ore<studi.score) k=i;aver=1.0*sum/n;printf("tttprintf("tttprintf("tttprintf("ttt新增功能,输出统计信息*/总计 %d 记录 n",n); /* 最高学生成绩 :n"); /* 平均成绩:学总共记录数 */ 最高分 */ %5.2fn",aver); /* 生证号平均分 */:%s:%s 成绩:dn",studk. nu m,studk. name,studk.score);printf("ttt 最低学生成绩 :n&qu

24、ot;); /* 最低分 */ printf("ttt学 生 证 号绩:%dn",studj. nu m,studj. name,studj.score); printf("nttt挂科学生信息 :n");for(i=0;i<n;i+) flag=0;if(studi.score<60)flag=1;+m; if(flag=1) printf("ttt学 生 证 号 :%s绩:%dn",studi. nu m,studi. name,studi.score);if(m) printf("tttelse print

25、f("ttt挂科人数为 :%dn",m); 无学生挂科 !n");:%s姓 名 :%s:%s 成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) /*

26、翻开文件 */ printf("ttt 无法翻开文件 !n"); /* 翻开失败信息 */ system("pause"); return(n); fscanf(fp,"%d",&num); /*读入总记录量 */while(i<num) /* 循环读入数据 */ fscanf(fp,"%s%s%d",studn+i.num,studn+,&studn+i.score); i+;n+=num;fclose(fp); /* 关闭文件 */ printf("ttt成功 !n&

27、quot;);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(f

28、p=fopen(filename,"w")=NULL) /* 翻开文件 */ printf("ttt 无法翻开文件 !n"); system("pause");return; fprintf(fp,"%dn",n); /* 循环写入数据 */ while(i<n) fprintf(fp,"%-16s%-15s%dn",studi.num,,studi.score); i+;fclose(fp); /*关闭文件 */printf(" 成功 !n");

29、/* 返回成功信息 */void main() /* 主函数 */int n=0;for(;) switch(menu_select() /* 选择判断 */case 1:printf("ttt 请输入学生信息记录: n"); /* 输入假设干条记录 */ n=Input(stu,n);break;case 2:printf("ttt 显示所有学生信息记录: n"); /* 显示所有记录 */ Display(stu,n);break;case 3:printf("ttt学生信息排序 n");Sort_by_score(stu,n); /* 按学号排序 */ printf("ttt学生信息排序成功 !n");printf("ttt");system("pause");break;case 4:printf("ttt

温馨提示

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

评论

0/150

提交评论