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

下载本文档

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

文档简介

福建工程学院计算机与信息科学系实验报告 2012 2013 学年第 1 学期 任课老师: 章静 课程名称 结构化程序综合设计班级计算机1001座号3100301114姓名张扬文实验题目学生成绩管理系统实验时间实验开始日期:2012/2/24 报告提交日期:2012/3/10 实验目的、要求1该实验的课内学时是4个课时。2程序完成后应该完成如下基本功能:1)用自定义结构体typedef struct设计该软件的数据结构;2)用数组或指针链表将所有学生的数据按照学号顺序链接起来;3)程序能够按照学号顺序输入学生的三门成绩,并计算平均成绩和总成绩。4)程序能够显示已经输入的指定学号的学生成绩以及平均成绩和总成绩。5)程序能够按要求显示指定分数段的学生成绩以及平均成绩和总成绩。6)能够统计班级总人数、班级平均成绩。7)能够增加和删除指定学生的成绩。8)按照指定的要求以及顺序(升序或降序)显示学生成绩以及平均成绩和总成绩。 实验步骤与内容 按如下顺序写:1、 主要设计思想;学生成绩管理系统包含多种功能,可以输入学生成绩,删除,插入,排序,查找等等。输入的信息又包含学生姓名,学号,各科成绩。所以首先要定义一个结构体:typedef struct node char id20; char name15; int scoreMAXCOURSE; int sum; double average; struct node *next;Student;根据结构体中的内容飙血程序。2、 主要数据结构及其解释在此次程序设计中用了链表来实现对数据的处理,并设计了菜单界面如图,根据switch语句来对用户的选择: 3、 模块关系图; 主函数输入学生信息打印成绩计算平均分和总分查找学生成绩插入学生成绩显示分数段的学生按总分平均分降序排列菜单4、 所有函数的简要说明;1) 插入函数Insert_Before();主要是要重新加入学生的信息,通过头插法。2) 计算平均分和总分Count_Score();将输入的数据计算出学生的平均分和总分。3) 删除学生信息Del_Student();删除某个学生的成绩。4) 按姓名查找Searchname_Student();通过输入学生的姓名找到学生的成绩。5) 计算班级总人数people=Count_People();将总的输入学生人数打印出来。6) 显示某分数段学生信息Section_Score();首先选择你要某科目的成绩并输入成绩的范围,按条件输出学生成绩。7) 按总分,平均分降序排列Descend_English();将输入的全部学生成绩按总分排序。 5、 所有源代码; /*学生成绩管理系统 C语言*/#include #include #include #define MAXID 10#define MAXNAME 20#define MAXCOURSE 3/* 学生数据结构 */typedef struct node char id20; char name15; int scoreMAXCOURSE; int sum; double average; struct node *next;Student;/* 头指针 */Student *head = NULL;/*课程名称*/char ClassNameMAXCOURSE20=数学,英语,计算机;/* 菜单 */int Menu() system(cls); fflush(stdin); printf( 计算机1001 张扬文 3100301114 n); printf(n); printf(*学生成绩管理系统*n); printf(n); printf( 1-初始化n); printf( 2-输入学生信息n); printf( 3-计算所有学生的总分和平均分n); printf( 4-打印全部学生信息n); printf( 5-查找学号或姓名删除学生信息n); printf( 6-按姓名查找学生信息n); printf( 7-按学号查找学生信息n); printf( 8-查找某一科成绩段学生信息n); printf( 9-插入学生信息到链表中n); printf( 10-按总分或平均分降序排列学生成绩n); printf( 0-退出n); return 0;/*初始化*/Student *Init() int i; Student *head; head=(Student *)malloc(sizeof(Student); head-next=NULL; return head;/*检查学号*/char Check_ID(char *s) int i; if(strlen(s)=0|strlen(s)MAXID)return 0; for(i=0;i 0 & si MAXNAME) return 0; for(i=0; i= a & si = A & si =0 & snext; while(p!=NULL) if(strcmp(s,p-id)=0) return 1; p=p-next; return 0;/* 输入学生信息 */void Input_Score(Student *p) /* 学号 */ printf(n请输入学号: ); do gets(p-id); if (!Check_ID(p-id) printf(输入不正确!请重新输入学号: ); else if (Is_SameID(p-id) printf(存在已学号!请重新输入学号: ); while (!(Check_ID(p-id) & !Is_SameID(p-id); /* 姓名 */ printf(请输入姓名: ); do gets(p-name); if (!Check_Name(p-name) printf(输入不正确!请重新输入姓名: ); while (!Check_Name(p-name); /输入成绩 int i; for(i=0; iscorei); if(!Check_Score(p-scorei) printf(输入成绩不正确!n请重新输入%s成绩:,ClassNamei); while(!Check_Score(p-scorei); p-average = -1; p-sum = -1; /* 头插法插入节点 */void Insert_Before() Student *s =(Student*) malloc(sizeof(Student); Input_Score(s); s-next = head-next; head-next = s;/*输出学生成绩信息*/void Output_Score(Student *p) int i; printf(n姓名:%s, 学号:%s n,p-name,p-id); for(i=0; iscorei); printf(总分:%d 平均分:%.2f n,p-sum,p-average);/*删除节点q*/void Del_Node(Student *q) Student *p=head; while(p-next!=q) p=p-next; p-next=q-next; free(q);/*插入学生成绩*/void Insert_List() int x; printf(输入你要插入的学生数:); scanf(%d,&x); while(x!=0) getchar(); Student *p =(Student*) malloc(sizeof(Student); printf(n请输入学号: ); do gets(p-id); if (!Check_ID(p-id) printf(输入不正确!请重新输入学号: ); else if (Is_SameID(p-id) printf(存在已学号!请重新输入学号: ); while (!(Check_ID(p-id) & !Is_SameID(p-id); /* 姓名 */ printf(请输入姓名: ); do gets(p-name); if (!Check_Name(p-name) printf(输入不正确!请重新输入姓名: ); while (!Check_Name(p-name); /输入成绩 int i; for(i=0; iscorei); do if(!Check_Score(p-scorei) printf(输入成绩不正确!请重新输入%s成绩:,ClassNamei); while(!Check_Score(p-scorei); p-average = -1; p-sum = -1; p-next = head-next; head-next = p; x-; /*按学号查找*/Student *Search_ID(char *id) Student *p=head-next; while(p!=NULL) if(strcmp(p-id,id)=0)break; p=p-next; return p;/*按姓名查找节点*/Student *Search_Name(char *name) Student *p=head-next; while(p!=NULL) if(strcmp(p-name,name)=0)break; p=p-next; return p;/*输出链表*/void Output_List() Student *p; p=head-next; while(p!=NULL) Output_Score(p); p=p-next; /*删除指定学生信息*/void Del_Student() Student *p; fflush(stdin); char str15; char judge10; printf(请输入要删除的学生的 学号或姓名:); do gets(str); if(!(Check_ID(str)|Check_Name(str) printf(输入错误!请重新输入:); while(!(Check_ID(str)|Check_Name(str); /判断是否为学号还是姓名 if(str00&str0next; while(p != NULL) Quit(p-next); free(p); exit(0);/*计算个人平均分和总分*/void Count_Score() Student *p; int i; p=head-next; while(p!=NULL) for(i=0;isum = p-sum + p-scorei; p-average = p-sum * 1.0 / MAXCOURSE; p=p-next; /*计算班级总人数*/int Count_People() Student *p; int people=0; p=head-next; while(p!=NULL) people=people+1; p=p-next; return people;/*计算班级平均分*/void Count_Mark() Student *p; int m; float avecla=0; p=head-next; while(p!=NULL) avecla=avecla+p-sum; p=p-next; m=Count_People(); printf(班级平均分为:%.2f,avecla/m);/*根据某科成绩段显示成绩*/void Section_Score() char x; int m,n,i,flag=0; Student *p; p=head-next; printf(请输入指定分数段的科目(A:数学 B:英语 C:计算机):n); scanf(%c,&x); printf(请输入你要显示的分数段(从n到m):); scanf(%d,&n); scanf(%d,&m); switch(x) case A: while(p!=NULL) if(n score0 & p-score0name,p-id); for(i=0; iscorei); printf(总分为:%d 平均分:%.2fn,p-sum,p-average); p = p-next; break; case B: while(p!=NULL) flag=1; if(n score1 & p-score1name,p-id); for(i=0; iscorei); printf(总分为:%d 平均分:%.2fn,p-sum,p-average); p = p-next; break; case C: while(p!=NULL) flag=1; if(n score2 & p-score2 name,p-id); for(i=0; iscorei); printf(总分为:%d 平均分:%.2fn,p-sum,p-average); p = p-next; break; default: printf(输入无效!n); fflush(stdin); if(flag=0) printf(在%d到%d的分数段学生为零!);/*比较成绩大小*/Student *Descby_English(Student *Newhead,Student *sort) Student *p,*q; p=Newhead; while(p!=NULL) if(sort-sum p-sum) break; q=p; p=p-next; if(p=Newhead) sort-next = p; return sort; else q-next = sort; sort-next = p; return Newhead; /*按总分或平均分降序排列*/void Descend_English() Student *p,*q,*Newhead; int i,j=1,people; Newhead = NULL; p = head; while(p != NULL) q = p-next; Newhead = Descby_English(Newhead,p); p = q; if(p = head) printf(学生信息库为空!n); else p = Newhead-next; people=Count_People(); printf(按总分和平均分排序如下:n); while(p!=NULL) if(jname,p-id); for(i=0; iscorei); printf(总分:%d 平均分:%.2f ,p-sum,p-average); j+; printf(n); p=p-next; /*按姓名查找学生成绩*/void *Searchname_Student() char name10; int i=0; Student *p=head-next; getchar(); printf(请输入你要查找的学生姓名:); do gets(name); if(!Check_Name(name) printf(输入姓名不正确!重新输入:); while(!Check_Name(name); while(p!=NULL) if(strcmp(p-name,name)=0) Output_Score(p); i=1; p=p-next; if(i=0) printf(找不到此姓名!); /*按学号查找学生成绩*/void *SearchID_Student() char id10; int i=0; Student *p=head-next; getchar(); printf(请输入你要查找的学生学号:); do gets(id); if(!Check_ID(id) printf(输入学号不正确!重新输入:); while(!Check_ID(id); while(p!=NULL) if(strcmp(p-id,id)=0) Output_Score(p); i=1; p=p-next; if(i=0) printf(找不到此学号!); /*主函数*/void main() int x,n,people; Student *q; Menu(); while(1) printf(n请输入命令编号: ); scanf(%d, &x); switch(x) case 1: /初始化 head = Init(); printf(初始化成功!n); break; case 2: /输入成绩 printf(输入序号:); scanf(%d,&n); getchar(); while(n!=-1) Insert_Before(); printf(输入序号:); scanf(%d,&n); getchar(); break; case 3: /计算平均分和总分 Count_Score(); printf(计算平均分和总分成功!); break; case 4: /打印出所有成绩 Output_List(); break; case 5: Del_Student(); break; case 6: /按姓名查找学生成绩 Searchname_Student(); break; case 7: /按学号查找学生成绩 SearchID_Student(); break; case 8: /计算班级人数 people=Count_People(); printf(班级总人数为:%d n,people); break; case 9: /*插入学生成绩*/ Insert_List(); break;

温馨提示

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

最新文档

评论

0/150

提交评论