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

下载本文档

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

文档简介

湖南大学 C语言工程实训报告 题 目: 学生成绩管理系统 学院名称: 土木工程学院 专业班级: 土木工程1101班 学生姓名: 陈太平 学 号: 20110101131 指导老师: 李 春 翔 目录第一节 c语言工程实训意义-起始页码 1.1 c语言工程训练目的及要求-起始页 1.2 c语言工程训练内容及意义-起始页 1.3 c语言选题及题目的应用-起始页第二节 项目定义和需求分析-起始页码 2.1 项目功能需求-起始页码- 2.2 主要数据结构-起始页码第三节 项目设计-起始页码3.1 主要算法描述-起始页码- 3.2 主要数据结构设计-起始页码第四节 实训项目测试-起始页码第五节 工程实训小结-起始页码- 参考文献-起始页码-附图 第一节 c语言工程实训意义 一 c语言工程训练目的及要求本综合训练是计算机科学与技术,信息管理与信息系统,软件工程专业重要的实践环节之一,是学生学习完程序设计课程和c语言编程后进行的一次全面综合训练.本课综合训练的目的和任务:1. 巩固和加深学生对c语言,数组结构课程的基本知识的理解和掌握;2. 掌握c语言编程和程序调试的基本技能;3. 利用c语言进行基本的软件设计;4. 掌握书写程序设计说明文档的能力;5. 提高运用c语言,数组结构解决实际问题的能力.二 c语言工程训练内容及意义 本选题任务为制作一个学生成绩管理系统,要求对学生成绩进行一定的处理,比如说求各科总分,平均分等,在程序中要用到数组结构,结构体机构,要灵活的处理插入,输出,查询,修改,保存的程序,要对程序进行估分,评判优劣.通过学习这门课,培养学生自学能力和动手能力,接受新知识的能力,提高学习兴趣,增强学生程序设计能力,为以后学习与工作打下坚实的基础.三 c语言选题及题目的应用 我所选择的题目为:学生成绩管理系统.通过这个系统,我们可以很方便的操作学生成绩,在短时间内,求出学生总分,加权分等,完成大量的工作,高效快速,在极其危急情况下,为我们赢得了时间,赢得了效率. 第二节 项目定义和需求分析一 项目功能需求 该程序主要分为机构题定义,程序子函数的定义,主函数的编写三大部分,主要分支结构如下: 主函数语文成绩数学成绩英语成绩编程成绩数据输入函数查看数据函数插入数据函数查找数据函数平均成绩输出更新数据函数保存数据函数加权成绩计算二 主要数据结构 主要的数据结构有: 结构体的定义:typedef struct student char nameMAX; /*姓名*/int num; /*学号*/char sexMAX; /*性别*/int chinese; /*语文*/int mathematic; /*高数*/int english; /*英语*/int computer; /*编程*/struct student *next; /*结构体指针*/stu; 在这个结构体定义中,总共定义了八个成员,包括姓名,性别,学号,语文成绩,数学成绩,英语成绩,计算机成绩以及结构体指针.前面几个用于存放数据,结构体指针是用来链接下一个学生数据的.这其中包含有数组结构等等.第3节 项目设计一 主要算法描述 主要算法有平均成绩(其中还包括最高分与最低分的计算)的计算和加权成绩的计算. 主要算法有平均成绩的计算程序如下: /*求学生语文平均分,最高分和最低分的函数*/void caverage() stu *p1;int i;float max=0.0,min=100.0;float sum=0.0,aver=0.0;p1=head;if(p1=NULL) printf(not data!);else for(i=0;p1!=NULL;i+,p1=p1-next) sum+=p1-chinese; aver=sum/i; p1=head; for(i=0;p1!=NULL;i+,p1=p1-next) if(maxchinese) max=(float)p1-chinese; p1=head; for(i=0;p1!=NULL;i+,p1=p1-next) if(minp1-chinese) min=(float)p1-chinese; printf(chinese average:%ft,aver); printf(chinese max:%ft,max); printf(chinese min:%fn,min);在这个算法中就是对每个人的语文成绩求和再除以总的人数得到了全部同学的语文成绩的平均分,还可以用此函数求的各课的最高分与最低分.不管计算均分还是最值分都需要用到for循环函数./*求加权成绩*/void jiaquan(stu *p1) int c=2,m=4,e=2,com=3; /*语文2学分,数学4学分,英语2学分,计算机3学分*/float p,sum=0;while(p1!=NULL)sum=p1-chinese*2+p1-mathematic*4+p1-english*2+p1-computer*3;p=sum/11; printf(%st,p1-name);printf(%fn,p);p1=p1-next; 在这个函数中,加权成绩=学科分数*学分/总学分,用while循环先求和(sum=p1-chinese*2+p1-mathematic*4+p1-english*2+p1-computer*3;)再求平均,对于科目的学分为定数,先提前定义(int c=2,m=4,e=2,com=3).二 主要数据结构设计1.数据输入函数:void cin(stu *p1)/*输入一个人的成绩*/ printf(enter name:);scanf(%s,p1-name);printf(nenter num:);scanf(%d,&p1-num);printf(nenter sex:);scanf(%s,p1-sex);printf(nenter score:nn);printf(enter chinese:);scanf(%d,&p1-chinese);printf(nenter math:);scanf(%d,&p1-mathematic);printf(nenter english:);scanf(%d,&p1-english);printf(nenter computer:);scanf(%d,&p1-computer);stu *cindata()/*在输入成绩*/stu *p1,*p2;int i=1;char chp1=(stu*)malloc(sizeof(stu);/*申请内存空间*/head=p1;while(i)cin(p1);printf(do you want to continue?(n代表不再输入,其他任意字符继续输入)n); /*是否继续输入数据*/scanf( %c,&ch);if(ch=n|ch=N) /*不进行再输入*/i=0;p1-next=NULL; else /*进行再输入*/ p2=p1;p1=(stu*)malloc(sizeof(stu);p2-next=p1;return(p1-next); 在这个输入函数中总共两个函数,数据输入函数与判断数据是否继续输入函数,数据输入函数就是常规的按照c语言规则一个一个的进行输入数据,输完之后退出.判断是否继续输入函数就是要让操作员操控输入命令,从而才能继续输入.界面如下:2.插入函数:void insert() stu *p1,*p2,*p3;p1=head;p3=(stu*)malloc(sizeof(stu);p3-next=NULL;cin(p3);if(head=NULL) head=p3;return;while(p1!=NULL&(p1-numnum) /*通过比较学号来插入数据的函数*/ p2=p1;p1=p1-next;p3-next=p1;p2-next=p3;出入函数是通过比较输入数据中的学号进行插入的,界面如下:查找函数:void find(stu *p2) char name20;int b=1;printf(enter the name of the student you want to find:n);scanf(%s,name);while(p2!=NULL) if(strcmp(name,p2-name)=0) printf(the data you want has be fonudn);printf(name:%st,p2-name);printf(num:%dt,p2-num);printf(sex:%st,p2-sex);printf(n);printf(chinese:%dt,p2-chinese);printf(math:%dtt,p2-mathematic);printf(english:%dt,p2-english);printf(computer:%dt,p2-computer);printf(n);b=1;else if(b=0) printf(sorry not find data!); p2=p2-next;if(b=1) printf(find onen);else printf(not findn);查找函数要求用户输入要查找的学生姓名,即可看到该学生的全部成绩,性别及学号.界面如下:3. 更新函数:void update(stu *p2) char name10;int b=0;printf(enter name:);scanf(%s,name);while(p2!=NULL) if(strcmp(name,p2-name)=0) printf(find you datan);printf(name:);scanf(%s,p2-name);printf(n);printf(num:);scanf(%d,&p2-num);printf(n);printf(sex:);scanf(%s,p2-sex);printf(n);printf(chinese:);scanf(%d,&p2-chinese);printf(n);printf(math:);scanf(%d,&p2-mathematic);printf(n);printf(english:);scanf(%d,&p2-english);printf(n);printf(computer:);scanf(%d,&p2-computer);printf(n);printf(success!);b=1;p2=p2-next;if(b=0)printf(sorry not find data!);else printf(nfinish!n);若是输入信息错误,需要修改,就可以用这个函数,只要输入要修改的的学生姓名就可以对所有信息进行修改.4. 保存函数void save(stu *p2) FILE *fp;char file20;printf(enter the file name:);scanf(%s,file);fp=fopen(file,w);fprintf(fp,namettmunttsexttchinesettmathematictenglishttcomputern);while(p2!=NULL) fprintf(fp,%stt,p2-name);fprintf(fp,%dtt,p2-num);fprintf(fp,%stt,p2-sex);fprintf(fp,%dtt,p2-chinese);fprintf(fp,%dtt,p2-mathematic);fprintf(fp,%dtt,p2-english);fprintf(fp,%dtt,p2-computer);fprintf(fp,n);p2=p2-next;fclose(fp);printf(保存成功!);保存函数就是要把源代码保存到文档中,只要输入要保存的文档名就行啦,界面如下:第四节 实训项目测试第五节 工程实训小结经过这次实训课是我掌握了很多关于计算机编程的知识,不管是在函数的定义方面还是在主函数界面的设计方面.这些知识将会成为我以后学习的宝贵财富与经验.我希望学校在以后的教学中多多加入实训的科目,不仅能让同学们有一个自我检测的方式,还可以在共同的交流中学到更多的知识.源代码:#include stdio.h#includestddef.h#includestring.h#includestdlib.h#define MAX 10 /*宏定义*/char password7=123456; /*密码初始化*/*定义结构体*/typedef struct student char nameMAX; /*姓名*/int num; /*学号*/char sexMAX; /*性别*/int chinese; /*语文*/int mathematic; /*高数*/int english; /*英语*/int computer; /*编程*/struct student *next; /*结构体指针*/stu; stu *head; /*定义头指针*/ /*函数声明*/void print(); /*显示菜单函数*/void cin(stu *p1); /*输入相关数据的函数*/stu *cindata(); /*其他数据是否继续输入*/stu *lookdata(stu *p1); /*查看数据的函数*/void insert(); /*通过比较学号来插入数据的函数*/void find(stu *p2); /*通过姓名查找查看数据的函数*/void caverage(); /*求个学生语文平均分,最高分和最低分的函数*/void maverage(); /*求个学生数学平均分,最高分和最低分的函数*/void eaverage(); /*求个学生英语平均分,最高分和最低分的函数*/void comaverage(); /*求个学生计算机平均分,最高分和最低分的函数*/void update(stu *p2); /*通过姓名查找来更新数据*/void save(stu *p2); /*保存数据到文件*/void jiaquan(stu *p1); /*求加权成绩*/*主函数*/void main() int choice;int flag=0,i; int n=3; stu *p2; char s8; doprintf(please enter password:n); scanf(%s,s); if(!strcmp(s,password) printf(PASS!n); flag=1; break; else printf(error enter againn); n-; while(n0); if(!flag) printf(you have enter 3 times!); exit(0); printf(t-n);printf(t|ttttt|n);printf(t|ttttt|n); printf(t=学生成绩管理系统=n);printf(t|ttttt|n);printf(t|ttttt|n); printf(t=%=n); printf(是否进入(0代表退出)n ); scanf(%d,&choice); if(choice=0) /*0代表退出*/ exit(1); print(); while(1) printf(enter the your choice:n); scanf(%d,&i); if(i12) printf(enter num from 1 to 12:n); exit(1); switch(i) case 1:p2=cindata(); break; case 2:p2=lookdata(head); break; case 3:insert(); break; case 4:find(head); break; case 5:update(head); break; case 6:save(head); break; case 7:caverage(); break; case 8:maverage(); break; case 9:eaverage(); break;case 10:comaverage(); break; case 11:jiaquan(head); break; case 12:printf(退出成功!);exit(1); break; printf(nnnn); /*菜单*/void print() system(cls);/*清空页面*/ printf(tt&n);printf(tt&t 目录 t&n);/*成绩管理系统*/printf(tt&tt输 入 数 据t&n);/*输入数据*/printf(tt&tt查 看 数 据t&n);/*查看*/printf(tt&tt插 入 数 据t&n); /*插入数据*/printf(tt&tt进 行 寻 找t&n);/*访问,寻找数据*/printf(tt&tt更 新 数 据t&n);/*更新数据*/printf(tt&tt保 存 数 据t&n); /*保存数据*/printf(tt&tt语 文 平 均t&n); /*语文平均成绩*/printf(tt&tt数 学 平 均t&n); /*数学平均成绩*/printf(tt&tt英 语 平 均t&n); /*英语平均成绩*/printf(tt&tt编 程 平 均t&n); /*编程平均成绩*/printf(tt&tt加 权 成 绩t&n);/*加权平均成绩*/printf(tt&tt退 出 系 统t&n); /*退出*/printf(tt&n);/*成绩输入函数*/void cin(stu *p1)/*输入一个人的成绩*/ printf(enter name:);scanf(%s,p1-name);printf(nenter num:);scanf(%d,&p1-num);printf(nenter sex:);scanf(%s,p1-sex);printf(nenter score:nn);printf(enter chinese:);scanf(%d,&p1-chinese);printf(nenter math:);scanf(%d,&p1-mathematic);printf(nenter english:);scanf(%d,&p1-english);printf(nenter computer:);scanf(%d,&p1-computer);stu *cindata()/*在输入成绩*/stu *p1,*p2;int i=1;char ch;p1=(stu*)malloc(sizeof(stu);/*申请内存空间*/head=p1;while(i)cin(p1);printf(do you want to continue?(n代表不再输入,其他任意字符继续输入)n); /*是否继续输入数据*/scanf( %c,&ch);if(ch=n|ch=N) /*不进行再输入*/i=0;p1-next=NULL;else /*进行再输入*/ p2=p1;p1=(stu*)malloc(sizeof(stu);p2-next=p1;return(p1-next);/*查看数据函数*/stu *lookdata(stu *p1) printf(nametnumtsextchineset mathmatictenglisht computern);while(p1!=NULL)printf(%st%ldt%st%dt %dtt%dt %dtn,p1-name,p1-num,p1-sex,p1-chinese,p1-mathematic,p1-english,p1-computer);p1=p1-next;return p1;/*插入数据*/ void insert() stu *p1,*p2,*p3;p1=head;p3=(stu*)malloc(sizeof(stu);p3-next=NULL;cin(p3);if(head=NULL)head=p3;return;while(p1!=NULL&(p1-numnum) /*通过比较学号来插入数据的函数*/p2=p1;p1=p1-next;p3-next=p1;p2-next=p3;/*通过姓名查找查看数据函数*/void find(stu *p2) char name20;int b=1;printf(enter the name of the student you want to find:n);scanf(%s,name);while(p2!=NULL) if(strcmp(name,p2-name)=0) printf(the data you want has be fonudn);printf(name:%st,p2-name);printf(num:%dt,p2-num);printf(sex:%st,p2-sex);printf(n);printf(chinese:%dt,p2-chinese);printf(math:%dtt,p2-mathematic);printf(english:%dt,p2-english);printf(computer:%dt,p2-computer);printf(n);b=1;else if(b=0) printf(sorry not find data!); p2=p2-next;if(b=1) printf(find onen);else printf(not findn); /*求学生语文平均分,最高分和最低分的函数*/void caverage() stu *p1;int i;float max=0.0,min=100.0;float sum=0.0,aver=0.0;p1=head;if(p1=NULL) printf(not data!);else for(i=0;p1!=NULL;i+,p1=p1-next) sum+=p1-chinese; aver=sum/i; p1=head; for(i=0;p1!=NULL;i+,p1=p1-next) if(maxchinese) max=(float)p1-chinese; p1=head; for(i=0;p1!=NULL;i+,p1=p1-next) if(minp1-chinese) min=(float)p1-chinese; printf(chinese average:%ft,aver); printf(chinese max:%ft,max); printf(chinese min:%fn,min); /*求数学平均分,最高分和最低分*/void maverage() stu *p1;int i;float max=0.0,min=100.0;float sum=0.0,aver=0.0;p1=head;if(p1=NULL) printf(not data!);else for(i=0;p1!=NULL;i+,p1=p1-next) sum=sum+p1-mathematic; aver=sum/i; p1=head; for(i=0;p1!=NULL;i+,p1=p1-next) if(maxmathematic) max=(float)p1-mathematic; p1=head; for(i=0;p1!=NULL;i+,p1=p1-next) if(minp1-mathematic) min=(float)p1-mathematic; printf(math average:%ft,aver); printf(math max:%ft,max); printf(math min:%fn,min); /*求英语平均分,最高分和最低分*/void eaverage() stu *p1;int i;float max=0.0,min=100.0;float sum=0.0,aver=0.0;p1=head;if(p1=NULL) printf(not data!);else for(i=0;p1!=NULL;i+,p1=p1-next) sum+=p1-english; aver=sum/i; p1=head; for(i=0;p1!=NULL;i+,p1=p1-next) if(maxenglish) max=(float)p1-english; p1=head; for(i=0;p1!=NULL;i+,p1=p1-next) if(minp1-english) min=(float)p1-english; printf(english average:%ft,aver); printf(english max:%ft,max); printf(english min:%fn,min); /*求计算机平均分,最高分和最低分*/void comaverage() stu *p1;int i;float max=0.0,min=100.0;float sum=0.0,aver=0.0;p1=head;if(p1=NULL) printf(not data!);else for(i=0;p1!=NULL;i+,p1=p1-next) sum+=p1-computer; aver=sum/i; p1=head; for(i=0;p1!=NULL;i+,p1=p1-next) if(maxcomputer) max=(float)p1-computer; p1=head; for(i=0;p1!=NULL;i+,p1=p1-next) if(minp1-computer) min=(float)p1-computer; printf(computer average:%ft,aver); printf(computer max:%ft,max); printf(computer min:%fn,min);/*通过姓名查找来更新数据*/void update(stu *p2) char na

温馨提示

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

评论

0/150

提交评论