简单师生管理系统程序设计 含源码.docx_第1页
简单师生管理系统程序设计 含源码.docx_第2页
简单师生管理系统程序设计 含源码.docx_第3页
简单师生管理系统程序设计 含源码.docx_第4页
简单师生管理系统程序设计 含源码.docx_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

计算机高级语言课 程 设 计 报 告 课题名称:简单学生成绩管理程序设计时间:2015.3.10 2015.3.20学生姓名:傅小川学生学号:201307020129、指导教师:王玉兰完成日期:2013年3月20日管理科学学院信息与计算机科学系二一五年三月简单师生管理系统程序设计【摘要】本次课程设计的课题是学生成绩管理系统,本报告介绍课程设计课题的选题,说明本系统的提供的主要功能,对设计思路,功能模块,流程图,中心算法进行了详细的说明,并画出流程图。本报告也提供完整的源程序代码,并展示了系统使用和运行效果,最后给出了在高级语言程序设计过程中的总结,其中包括本程序的设计,设计中的遇到的难题和问题,查阅的参考文献等。【关键字】功能,模块,效果,问题等Program Designing about Simple Management System of Teachers and StudentsAbstract:Keywords:目录1问题描述及设计要求 1.1问题描述1.2设计要求2.系统分析(需求分析)1.1功能需求1.2性能需求3.总体设计4.详细设计 1.1设计思路 1.2主要函数设计5.程序代码6.程序测试7.程序使用说明8.总结参考文献1 问题描述及设计要求1.1问题描述以本班同学学习成绩管理为例,设计一个包括基本信息输入、成绩输入、成绩统计计算、成绩查询、查询结果输出等功能的系统,并按规范要求编写设计报告。1.2设计要求(1)要求利用C语言面向过程的编程思想来完成系统的设计;(2)突出函数特征,以多个函数实现每一个子功能;(3)画出简单的流程图及功能模块图;(4)进行简单的界面设计,能够实现好的交互;(5)具有清晰的数据结构的详细定义;(6)熟练地掌握语言对文件的各种操作。2.系统分析(需求分析)1.1功能需求(1)增加学生记录:增加并输入学生的姓名,学号,性别,各科成绩等信息。(2)查询功能:分别输入姓名和学号进行对成绩,平均分的查询。(3)修改和删除功能:重新输入学生的学号,姓名,性别,各科成绩等信息,或删除学生的记录。(4)学生记录排序功能:排序后,显示学生的平均分和名次等结果。(5)统计信息功能:显示当前全部的学生信息。1.2性能需求通过分析,系统性能需求如下:(1) 系统的高速性,稳定性,安全性。(2) 系统的体系结构能够方便添加功能模块,适应发展。(3) 系统的人机界面友好,易学易用。(4) 系统的维护成本较低。3.总体设计进入学生成绩管理系统8显示记录7保存文件6打开文件5统计信息4记录排序3修改记录2查询信息1增加记录0退出系统按姓名排序按学号排序按姓名查找按学号查找4.详细设计 1.1设计思路系统主要实现的是学生的基本信息,成绩的管理,整个系统是为了提高安全和方便而设计。进入系统之前选择按回车键,进入系统之后,可以实现对所有的学生的信息进行修改,添加,删除,查询及对学生成绩总分,平均分,位次进行统计等操作。1.2主要函数设计int menu_select(); 函数声明int openfile(student stu); /用于打开文件int findrecord(student stud); /找到指定的数据int writetotext(student stud);/将数据写入文件中void welcome();void display1(); /显示void showtable(); /显示数据的清单void sort(student stu); /直接对数组排序的函数void deleterecord(student stu,int i);/删除表中数据void addrecord(student stud); /增加表中的数据void display(student stud,int n1,int n2); void amendrecord(student stud); /修改表中的数据void count(student stud); /引用计数函数,统计学生的数void sortnum(student stud); /按学号降序排列void sortnum2(student stud); /按学号升序排列void sortname(student stud); /按名字降序排列void sortname2(student stud); /按名字升序排列void statistic(student stud); /统计5.程序代码#include stdio.h#include string.h#include malloc.h #define LEN sizeof(struct message_student) /*一个结构体数组元素的长度*/#define numsubs 3 /*学科数目*/typedef struct message_student /*结构体定义*/ char number6; char name20; char sex4; float subjectnumsubs; float score; float average; int index;student;extern int numstus; /*学生数目*/extern student *pointer; /*指向结构体数组,结构体已经定义,extern只是声明结构体的存在,直接使用*/extern int lens;int menu_select(); /*函数声明*/int openfile(student stu); /用于打开文件int findrecord(student stud); /找到指定的数据int writetotext(student stud); /将数据写入文件中void welcome();void display1(); /显示void showtable(); /显示数据的清单void sort(student stu); /直接对数组排序的函数void deleterecord(student stu,int i); /删除表中数据void addrecord(student stud); /增加表中的数据void display(student stud,int n1,int n2); void amendrecord(student stud); /修改表中的数据void count(student stud); /引用计数函数,统计学生的数void sortnum(student stud); /按学号降序排列void sortnum2(student stud); /按学号升序排列void sortname(student stud); /按名字降序排列void sortname2(student stud); /按名字升序排列void sortcount(student stud);void sortcount2(student stud);void statistic(student stud); /统计#include stdio.hint menu_select() char c; / 整形数据类型 printf(nn); printf( | 1. 增加学生记录 5.统计信息 |n); printf( | 2. 查询学生记录 6.打开文件 |n); printf( | 3. 修改学生记录 7.保存文件 |n); printf( | 4. 学生纪录排序 8.显示记录 |n); printf( | 0.退出系统 |n); printf(nn); printf(请选择(0-8):); c=getchar(); getchar(); /赋字符值的函数 return (c-0); / 将C转换为对应的数值,如0-0,1-1#include stdio.hint findrecord(student stud) /*查找信息*/ char str2; int i; if(numstus=0) printf(没有可被查找的记录n); return -1; /查找失败 else printf(以何种方式查找?n1.学号t2.姓名n); gets(str); if(str0=1) /*按学号查找*/ printf(请输入学号:); gets(str); for(i=0;i=numstus;i+) if(strcmp(str,studi.number)=0) / 比较两个字符串 display(stud,i,i); break; else continue; else if(str0=2) /*按姓名查找*/ printf(请输入姓名:); gets(str); for(i=0;inumstus) printf(没有查找所要的信息。n); return -1; return i; #includestdio.hint openfile(student stu) int i=0,j; FILE *fp; /FILE是变量类型,FILE *fp是声明,*fp指向FILE的对象 char filename20,str2; if(numstus!=0) printf(已经有记录存在,是否保存?(y/n); gets(str); if(str0=y|str0=Y) writetotext(stu); printf(请输入文件名:); gets(filename); numstus=0; if(fp=fopen(filename,rb+)=NULL) printf(无法打开该文件n); return(-1); fscanf(fp,%d,&numstus); /fscanf是读入文件中的数据 fgetc(fp); while(inumstus) fscanf(fp,%s,stui.number); fscanf(fp,%s,); fscanf(fp,%s,stui.sex); for(j=0;jnumsubs;j+) fscanf(fp,%f,&stui.subjectj); fscanf(fp,%f,&stui.score); fscanf(fp,%f,&stui.average); fscanf(fp,%d,&stui.index); i+; fclose(fp); printf(文件读取成功n); printf(是否显示纪录?(y/n); gets(str); if(str0=y|str0=Y) display(stu,0,numstus-1); return(0);#include stdio.hvoid sort(student stud) int i,j=0; char str5; student *p; p=stud; if(numstus=0) printf(没有可供查询的记录!); while(1) for(i=0;i+) printf( 请输入查询方式:); printf((直接输入回车则结束查询操作)n); printf(1.按照学号t); printf(2.按照姓名t); gets(str); if(strlen(str)=0) break; if(str0=1) printf(请输入排序次序:n); printf(1.升序排列t); printf(2.降序排列n); gets(str); if(str0=1) sortnum2(p); else sortnum(p); display(stud,0,numstus-1); else if(str0=2) printf(请输入排序次序:n); printf(1.升序排列t); printf(2.降序排列n); gets(str); if(str0=1) sortname2(p); else sortname(p); display(stud,0,numstus-1); else printf(请输入12); printf(是否退出排序?(y/n); gets(str); if(str0=y|str0=Y) break; return; void sortnum(student stud) /按照学号排序成绩,降序 int i,j; student temp; student *p; p=stud; for(i=0;inumstus;i+) for(j=0;j0) temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=temp; void sortnum2(student stud) / 按照学号排序成绩,升序 int i,j; student temp; student *p; p=stud; for(i=0;inumstus;i+) for(j=0;j0) temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=temp; void sortname(student stud) /按照名字排序成绩,降序 int i,j; student temp; student *p; p=stud; for(i=0;inumstus;i+) for(j=0;j0) temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=temp; void sortname2(student stud) /按照名字排序,升序 int i,j; student temp; student *p; p=stud; for(i=0;inumstus;i+) for(j=0;j0) temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=temp; #includestdio.hvoid statistic(student stud) /*新增功能,输出统计信息*/ int i,j=0,k=0; char c1,str2; float averagenumsubs,sum=0; if(numstus=0) printf(没有可被查找的记录n); else while(1) printf(下面将统计考试成绩n); printf(请选择你要统计哪科的成绩 1.语文t2.数学t3.英语n); c1=getchar(); printf(t一共有个%d记录n,numstus); /*总共记录数*/ switch(c1) case 1: for(i=0;istudi.subject0) k=i; if(studj.subject0studi.subject0) j=i; average0=sum/numstus; printf(t科目语文的最高分:n); /*最高分*/ printf(tT学号:%s姓名:%s 分数:%.2fn,studj.number,,studj.subject0); printf(t科目语文的最低分是:n); /*最低分*/ printf(tt学号:%s 姓名:%s 分数:%.2fn,studk.number,,studk.subject0); printf(t科目语文的平均分是 %5.2fn,average0); /*平均分*/ break; case 2: for(i=0;istudi.subject1) k=i; if(studj.subject1studi.subject1) j=i; average1=sum/numstus; printf(t科目数学的最高分:n); /*最高分*/ printf(tt学号:%s 姓名:%s 分数:%.2fn,studj.number,,studj.subject1); printf(t科目数学的最低分是:n); /*最低分*/ printf(tt学号:%s 姓名:%s 分数:%.2fn,studk.number,,studk.subject1); printf(t科目数学的平均分是 %5.2fn,average1); /*平均分*/ break; case 3: for(i=0;istudi.subject2) k=i; if(studj.subject2studi.subject2) j=i; average2=sum/numstus; printf(t科目英语的最高分:n); /*最高分*/ printf(tt学号:%s 姓名:%s 分数:%.2fn,studj.number,,studj.subject2); printf(t科目英语的最低分是:n); /*最低分*/ printf(tt学号:%s 姓名:%s 分数:%.2fn,studk.number,,studk.subject2); printf(t科目英语的平均分是 %5.2fn,average2); /*平均分*/ break; default:printf(输入错误!请输入13之间的数n); sum=0; getchar(); printf(是否继续进行统计?(y/n); gets(str); if(str0=y|str0=Y) ; else break; #includestdio.hint writetotext(student stud) /*将所有记录写入文件*/ int i=0,j; FILE *fp; char filename20; printf(输入文件名称:); gets(filename); fp=fopen(filename,w); fprintf(fp,%dn,numstus); while(inumstus) fprintf(fp,%s %s %s ,studi.number,,studi.sex); for(j=0;jnumsubs;j+) fprintf(fp,%f ,studi.subjectj); fprintf(fp,%f %f %d ,studi.score,studi.average,studi.index); i+; fclose(fp); printf(已成功存储!n); display(stud,0,numstus-1); numstus=0; return 0; #includestdio.hvoid welcome() printf(t*n); printf(tttt欢迎进入学生成绩管理系统tttt 欢迎使用!n); printf(t*n); printf(输入回车进入菜单栏:n); printf(nn); getchar(); void showtable() printf(-n) printf(学号t姓名t性别t语文t数学t英语 总分 平均分 名次n);printf(-n);void display(student stud,int n1,int n2) int i; showtable(); /*显示表头*/ for(i=n1;i=n2;i+) printf(%st%st%st%.1ft%.1ft%.1ft%.1ft%.1ft%dn,studi.number,,studi.sex,studi.subject0,studi.subject1,studi.subject2,studi.score,studi.average,studi.index); /*通过循环输出数据*/void display1() printf(ttt=欢迎下次使用=); printf(nn); getchar();#includestdio.h#includevoid amendrecord(student stud) char str5; /*供用户输入*/ int i=-1,j; if(numstus=0) /*没有记录返回*/ printf(没有可供修改的记录!); while(i=0) printf(要删除这个学生的信息吗?(y/n); gets(str); if(str0=y|str0=Y) deleterecord(stud,i); count(stud); else printf(确定要修改这个学生的信息吗?(y/n); gets(str); if(str0=y|str0=Y) printf(下面请重新输入学生的信息:n); printf(请输入学号:); gets(studi.number); printf(请输入姓名:); gets(); printf(请输入性别(男/女 1/0):); gets(str); if(str0=0) strcpy(studi.sex,女); else strcpy(studi.sex,男); studi.score=0; printf(请按顺序输入成绩:); for(j=0;j=0) for(j=i;jnumstus;j+) stuj=stuj+1; numstus-; printf(删除成功!n);void count(student stud) int i,j; for(i=0;inumstus;i+) studi.index=1; for(j=0;jstudi.score) studi.index+;#include stdio.hvoid addrecord(student stud) /增加学生信息 int i=0,j,num; char str5; if(numstus!=0) printf(已有记录存在是否覆盖?(y/n)n); gets(str); if(str0=Y|str0=y) i=0; else i=numstus; printf(请输入增加的学生信息条目数:); scanf(%d,&num); if(i=0) numstus=num; else numstus+=num; if(numstuslens) lens+=50; pointer=(student *)realloc(pointer,lens*LEN); printf(请输入学生信息:n); for(;inumstus;i+) getchar(); printf(请输入学号:); gets(pointeri.number); printf(请输入姓名:); gets(); printf(请输入性别(男/女 1/0):); gets(pointeri.sex); if(pointeri.sex0=0) strcpy(pointeri.sex,女); else strcpy(pointeri.sex,男); printf(请输入各科成绩:(按语文数学英语的顺序):); studi.score=0; for(j=0;j0) i=menu_select(); /*控制菜单*/ switch(i) case 1:addrecord(pointer);break; /*增加学生信息*/ case 2:findrecord(pointer);break; /*查询学生信息*/ case 3:amendrecord(pointer);break; /*修改学生信息*/ case 4:sort(pointer);break; /*学生信息排序*/ case 5:statistic(p

温馨提示

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

评论

0/150

提交评论